MyModbus - Erreur Beta 44

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 :
Capture d'écran 2024-09-19 114946
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

je regarderai ce soir

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 »