Comment passer le Slave ID / Unit ID?

Bonjour.

J’ai un compteur élec qui communique en Modbus derrière un convertisseur Waveshare.

J’arrive à faire une lecteur de valeur en direct avec pymodbus mais ça échoue avec le plugin modbus de Jeedom.

J’ai consulté les logs des deux et la seule différence c’est le Unit ID qui est bien renseigné quand j’utilise pymodbus en direct (paramètre slave) mais qui est toujours à 0 quand le plugin modbus appelle pymodbus en interne.

# Trame Jeedom
0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x3 0xb 0xd4 0x0 0x2
# Trame pymodbus en direct
0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0xb 0xd4 0x0 0x2

J’ai pourtant bien rempli le « Unit ID » sur la page Equipment.

On est d’accord que c’est bien dans cette case qu’il faut mettre l’ID Modbus du compteur ?

C’est pas tout à fait neutre, ça veut dire qu’il faut définir un équipement par esclave du bus alors que si on l’entrait dans la commande à pourrait déclarer un équipement pour le convertisseur et appeler différents esclaves dans différentes commandes. Mais ça me va. C’est un peu perturbant dans l’UI parce que c’est entre l’IP et le port du convertisseur donc on s’attend à y trouver un paramètres propre au convertisseur, pas à l’esclave. En tout cas la doc en parle pas mais d’après ce que j’ai lu sur le forum et compris, ça serait bien cette case.

Je ne l’avais pas rempli au début mais maintenant c’est bon. J’ai même redémarré le démon, je pense pas que ça soit utile, mais bon…

Une idée de pourquoi le Unit ID que j’ai renseigné se retrouve pas dans la trame ?

Merci.

C’est lié à des modifs dans pymodbus.

Dans un autre fil, j’ai indiqué que le support m’avait répondu que la version de pymodbus avait été bloquée à 3.2.2. J’ai l’impression que non, elle est bloquée à <3.4, donc ça installe 3.3.

Le changelog de pymodbus indique que depuis la 3.3, le paramètre unit a été renommé en slave. Il faudrait donc bloquer à <3.3.

Pire, le changelog ne détaille pas les versions intermédiaires, mais il semble que ce changement ait été introduit dans ce commit, qui est fusionné dès la 3.2.1. C’est dingue d’avoir fait ce changement dans une version patch.

Donc je dirais qu’il faut bloquer à 3.2.0. au max. J’ai tenté de forcer l’installation de pymodbus 3.2.0 et j’ai des erreurs. Je ne vois même pas la trame envoyée dans les logs. Peut-être un problème avec une dépendance de pymodbus. Je vais pas prendre le temps de chercher.

J’ai réinstallé pymodbus 3.2.2 et j’ai corrigé modbusd.py en remplaçant unit= par slave=, et la communication fonctionne (enfin).

Je ne comprends pas la réponse que m’a donné le support qui dit que ça fonctionne avec 3.2.2.

TL;DR

=> Si ça fonctionne chez vous, méfiez-vous des mises à jour

=> Si vous avez mis à jour et ça ne fonctionne pas, forcez pymodbus à 3.2.2 et faite la modif unit → slave dans modbusd.py

=> Il faudrait que les mainteneurs du plugin modbus sortent à court terme une version compatible 3.2.2 avec la correction unit → slave, et ensuite une version du plugin compatible avec les dernières versions de pymodbus.