Hello,
Vu que nous migrons petit à petit vers ce nouveau forum, je me permet de créé ce topic pour évoquer les plugins Modbus et pouvoir continuer la discussion sur le sujet.
Ce topic est un résumé de mes différents essais et constatations pour arriver à un résultat.
Je ne prétends pas avoir la science infuse, si je raconte des bêtises, il ne faut pas hésité à me le signaler. J’ai galéré pour avoir un résultat. J’espère donc que cela servira à quelqu’un.
Actuellement il « existe » deux plugins pour Jeedom :
- Modbus (TCP), développé par tmartinez
- Modbus RTU, développé par sarakha, repris par Jeedom
Malheureusement, à l’heure de l’écriture de ces lignes, on a le plugin Modbus qui est passé en obsolète à cause de son absence de documentation (et probablement son abandon?) et le plugin officiel Modbus RTU qui est en beta.
Le plugin Modbus tout court est téléchargeable sur la Dropbox d’un Helper :
Le plugin Modbus RTU, quant à lui est disponible sur le market, mais uniquement en beta.
Voici ce que gère chaque plugin :
- Modbus : Modbus TCP et Modbus RTU over Ethernet (via une modification)
- Modbus RTU : uniquement du Modbus RTU via un câble USB
Ce que j’ai appris en faisant mes différents tests (sauf si je me trompe), c’est que si vous achetez un convertisseur RS232-RS485/Ethernet, vous ne ferez pas forcément du Modbus TCP.
Les plus basiques ne font que du Modbus RTU over Ethernet et pas forcément du Modbus TCP.
Mon convertisseur RS232-RS485/Ethernet (USRIOT USR-TCP232-410 S) a un mode TCP Server None et un mode TCP Server ModbusTCP (le premier que j’avais acheté n’avait que TCP Server).
Un mix des deux plugins serait vraiment top!
Ou au moins la possibilité de pouvoir utiliser une adresse IP au lieu d’un chemin USB pour le plugin Modbus RTU.
Si vous voulez jouer avec, quelques trucs à savoir pour l’installation :
- Modbus : après avoir lancer la commande indiquée dans la partie configuration, il faut créé un objet (dans mon cas, ma chaudière) pour que le démon puisse se lancer (et configurer son objet).
- Modbus RTU : @Aldarande a trouvé la solution pour que le plugin fonctionne. Dans le fichier /var/www/html/plugins/modbusrtu/core/class, éditez le fichier modbusrtu.class.php :
public static function dependancy_info() {
$return = array();
$return['progress_file'] = jeedom::getTmpFolder('modbusrtu') . '/dependance';
$return['state'] = 'ok';
if (exec(system::getCmdSudo() . system::get('cmd_check') . '-E "python\-serial|python\-request|python\-pyudev" | wc -l') < 3) {
$return['state'] = 'nok';
}
if (exec(system::getCmdSudo() . 'pip list | grep -E "MinimalModbus|paramiko" | wc -l') < 2) {
$return['state'] = 'nok';
}
return $return
Remplacez « MinimalModbus » par « minimalmodbus » (passez les « M » majuscules en minuscules).
Plugin Modbus
Pour changer le fonctionnement du plugin Modbus (TCP) pour qu’il fonctionne en RTU, il faut modifier le fichier client.py, ligne 53 (/usr/local/lib/python2.7/dist-packages/pyModbusTCP/client.py) :
Changez « MODBUS_TCP » en « MODBUS_RTU ».
Pour ma part, avec ma chaudière De Dietrich, comme valeur de retour, je n’avais que des « None ».
Après avoir activé le mode debug dans le script du plugin modbus_master.py, j’ai exécuté la commande permettant de récupérer manuellement les valeurs.
(Dans le script modbus_master.py du répertoire ressources du plugin, ligne 73, j’ai passé le debug=False à debug=True.
Ensuite, il suffit d’exécuter le script que l’on voit dans les logs du démon lorsqu’on le relance.
Ex : modbus_master.py -h 192.168.. -p 20108 --unit_id=10 --polling=32 --keepopen=0 --hrs=36,28)
J’ai constaté l’erreur suivante :
J’ai donc jeté un oeil plus en profondeur dans le fichier client.py pour rechercher l’erreur.
Quand l’erreur est détecté, il retourne un « None ». Tiens! C’est la seule chose que je récupère… Un « None »!
Ben, en désespoir de cause, j’ai tout simplement commenté les lignes du check et j’ai enfin eu des retours concrets! Ce n’est pas une vraie solution et cela s’apparente plus à du sparadrap… Mais n’étant pas développeur, je fais comme je peux.
Voici les lignes en question (à partir de la ligne 467 chez moi) :
J’ai commenté les lignes où il y a les trois ###.
Et là, j’ai enfin pu obtenir un résultat :
En espérant que cela aide au moins une personne car je sais que lorsque l’on démarre, ce n’est pas évident de fouiller dans des dizaines de pages pour trouver des bouts de solution par ci et par là.