Bonjour,
je viens d’installer le plugin en bêta et je rencontre des problèmes.
Je configure mon équipement comme ceci :
Au démarrage du démon, pas de mise à jour des valeurs et j’ai ce message dans les logs :
Je me suis donc permis de modifier le fichier mymodbusclient.py comme ceci :
et maintenant ça démarre.
Par contre, j’ai l’impression que la lecture multiple ne fonctionne pas.
Mon Jeedom :
Merci d’avance pour votre aide.
Bonjour,
Super trouvaille, merci !
Je vais faire un correctif qui va être compatible avec toutes les config.
A+
Michel
edit:
NB: la prochaine fois pas de screenshot STP, copiez tout dans un bloc de texte préformaté, c’est plus lisible et je peux copier le texte
Hello,
Je viens de trouver comment corriger la lecture multiple qui ne fonctionne pas chez moi (Debian12 / python 3.11.2)
Dans le fichier mymodbusclient.py les cmdSourceBlob sont stockés comme chaine dans la fonction read_eqConfig et recherchés en tant qu’entier (integer) dans la fonction process_read_response
J’ai donc modifier cette dernière comme suit :
393 if cmd["cmdFormat"] == 'blob':
394 change[f"values::{cmd_id}"] = 1
395 dest_ids = self._blob_dest.get(str(cmd_id), None)
396 if dest_ids is not None: # Plage de registres
Merci pour ta correction.
Un truc me chiffonne…
Toutes les variables qui viennent dans le json de config sont des string. Donc tous les éléments de self.eqConfig
sont des string.
Dans read_eqConfig self._blob_dest
est construit comme ceci :
for cmd in self.eqConfig["cmds"]:
if cmd["type"] != "info":
continue
if cmd["cmdFctModbus"] == "fromBlob":
if self._blob_dest.get(cmd["cmdSourceBlob"], None) is None:
self._blob_dest[cmd["cmdSourceBlob"]] = []
self._blob_dest[cmd["cmdSourceBlob"]].append(cmd["id"])
donc la clé est un string.
Donc je ne m’explique pas pourquoi cette correction fait que ça fonctionne chez toi.
En plus j’ai cherché les utilisations de int()
dans tout le code et pas une seule fois cmd["id"]
ou cmd_id
n’est converti en integer.
edit: je vais me faire un pyenv sous python3.11.2 pour voir si ça vient de la version de python
Hello,
Je pense que le « problème » vient plus de la fonction process_read_response.
cmd_id est une variable transmise dans l’appel de la fonction qui à la source doit être un INT
J’ai vérifié ça aussi, ce n’est pas le cas :
for cmd_id, pmb_req in self._requests.items():
...
self.loop.create_task(self.process_read_response(cmd_id, rr))
Et cmd_id
n’est jamais modifié.
Et dans read_eqConfig on a
for cmd in self.eqConfig["cmds"]:
...
self._requests[cmd["id"]] = request_func(address, count, slave)
Est-ce que tu veux bien essayer avec
393 if cmd["cmdFormat"] == 'blob':
394 change[f"values::{cmd_id}"] = 1
395 dest_ids = self._blob_dest.get(cmd["id"], None)
396 if dest_ids is not None: # Plage de registres
STP ?
Bonsoir,
ça fonctionne avec ta ligne de code aussi !!
Merci.
1 « J'aime »
Merci d’avoir essayé pour moi.
Bonjour,
Je viens de faire la mise à jour du plugin à l’instant et ça ne fonctionne pas.
Je pense que j’ai du faire une fausse manip quand j’ai testé.
J’ai du rechanger en
Tu peux mettre une ligne de debug de ce genre et me dire ce que ça renvoie STP ?
393 if cmd["cmdFormat"] == 'blob':
394 change[f"values::{cmd['id']}"] = 1
395 self.log.debug(f"{self.eqConfig['name']}: 'process_read_response' type cmd['id'] = {type(cmd['id'])} || type cmd_id = {type(cmd_id)}") # <<<<<----- cette ligne-ci
396 dest_ids = self._blob_dest.get(str(cmd["id"]), None)
Et voici :
0233|[2024-09-23 19:29:26] INFO : PowerBus: 'process_read_response' type cmd['id'] = <class 'int'> || type cmd_id = <class 'int'>
0234|[2024-09-23 19:29:26] INFO : MaxiCharger: 'process_read_response' type cmd['id'] = <class 'int'> || type cmd_id = <class 'int'>
0235|[2024-09-23 19:29:26] INFO : ConsoBus: 'process_read_response' type cmd['id'] = <class 'int'> || type cmd_id = <class 'int'>
0236|[2024-09-23 19:29:26] INFO : PAC: 'process_read_response' type cmd['id'] = <class 'int'> || type cmd_id = <class 'int'>
1 « J'aime »