Les plugins Modbus (RTU et TCP)

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à.

6 « J'aime »

Merci pour vos recherches , je n’ai pas mis le nez dans le forum depuis un bon moment car ma VM Jeedom tourne depuis plusieurs années et rien à signaler . J’envisage prochainement un upgrade de mon serveur donc du coup je vais en profiter pour mettre tout à jour.
Ce soir je découvre ce nouveau forum (D’ailleurs 1er poste ça s’arrose :slight_smile: ) , mais aussi cette mauvaise nouvelle pour le plugin Modbus! Ca me parait étrange que ce plugin tombe à l’abandon , c’est peut être temporaire le temps que l’équipe trouve le temps de faire la doc eeetc… . Bref je vais suivre ça de près et faire des essais très prochainement .
@ Bientot

Hello,

Le plugin Modbus (non RTU), est un plugin tiers et non un officiel.
Le must serait que le plugin officiel reprenne les « possibilités » du plugin Modbus (TCP).

1 « J'aime »

Hello,
En effet, un mix avec toutes les fonctions modbus, signé, non signé, 16bit, Mot, Mots, Dmots… les inversions bref y’a pas mal de fonctions en modbus.
Une bonne intégration me permettrait de faire pas mal de chose en PRO pour récupérer des infos par ci, par là et faire des synop ou des rapports. :blush:

1 « J'aime »

Pour le boulot j’ai utilisé ce genre de passerelles ( Passerelles Modbus série vers Ethernet avancées à 1 et 2 ports) afin de passer de modbus RTU vers du TCP et ça fonctionnait plutôt bien.

@Fabrice est-ce possible de faire des modifications du plugin existant dans le sens demandé ci-dessus?

Je viens de tester d’ajouter plusieurs équipements qui se trouvent chez des clients (plusieurs compteurs).
Chaque équipement appelle la même adresse modbus, mais attaque un compteur différent, cela arrive à lire, mais cela écrit sur toutes les variables en même temps de tous les équipements. :confused: Du coup les chiffres défilent en permanence!

Il faudrait en effet vraiment reprendre ce plugin!
Entre les bugs de lecture mais non affichage, le bug ci dessus, le fait que le plugin croit que c’est un mot double lorsque 2 adresses sont collées, alors que c’est bien 2 différentes…
Et je ne peux plus arrêter le modbus avec l’icone!
Merci

Bonjour,

Je suis nouveau sur ce forum. Je voudrait domotiser ma maison. Jeedom me parait une solution très performante.
J’ai donc fait le point sur mes besoins d’interfaces et j’arrive en gros à 16 entrées et 32 sorties digitales et 12 analogiques en câblés. En radio j’en aurai seulement une douzaine.
En sourçant les types de matériel sur internet je me suis aperçus qu’il n’y avait pas pléthore en la matière ! Seule la solution IPX800 & Co me parait valable mais le coût grimpe vite !

J’ai donc cherché du côté des Chinois mais là non plus je n’ai pas trouvé beaucoup de choix … si ce n’est en MODBUS … et c’est économique ! Ils ont aussi des E/S en commandes TCP-IP mais sur leur serveurs apparemment, donc je ne suis pas très chaud !
Je suis vraiment surpris que ce MODBUS ne soit pas plus utilisé en domotique ! C’est pourtant très professionnel et répandu en industrie et en gestion technique du bâtiment.

Désolé d’être un peu long mais j’arrive à mes questions :

1 - Quelles solutions pour m’équiper de modules d’E/S en mode câblé (RS232/RS485/RJ45/Bus spécifiques) et à des coûts raisonnables ?
2- Impossible de trouvé le plugin MODBUS, dont vous parlez, sur le market. Pouvez m’en dire plus ?

Muncho gracias

Bonjour,
C’est pourtant indiqué dans le premier post.

Bonjour,

Le zip ? Mais c’est pas dans le market ?

Bonjour,
S’il y a quelque chose qui n’est pas clair dans le post d’origine, il ne faut pas hésiter à me le dire et je corrigerais.
J’ai indiqué :

Malheureusement, à l’heure de l’écriture de ces lignes, on a le plugin Modbus qui est passé en obsolète

Obsolète donc plus disponible dans le market.
Néanmoins, en récupérant le zip, on peut tout de même l’installer (en copiant le contenu du zip au même emplacement que les autres plugins).

1 « J'aime »

Bon j’avoue que moi non plus je ne suis pas très clair ! En plus quelques fois je comprend de travers !
En faite c’est le Modbus RTU qui doit être sur le market. Mais je ne l’ai pas trouvé.

Ahhhhhh! Alors si si… Mais il est bien sur le market. Mais le plugin est en beta.
Donc non visible de base.
Dans ton profil Market, il faut cocher « Activer l’accès aux plugins beta ».
Lors de la recherche, cliquer sur « beta ».

Super. Merci. J’apprends. Je suis pas encore bien rodé !

Tout le monde début un jour :wink:

Bonjour à tous, je partage ma petite expérience avec vous au cas où une personne a le même problème.

Aillant installé le plugin pour l’utiliser en Modbus TCP, je n’arrivais pas à faire de communication entre Jeedom et mon automate. J’ai cherché un bon moment pour m’apercevoir que dans le code de Jeedom en dur, le port était de 502. Alors que j’avais déjà une passerelle communiquant en 502 dans l’automate, et que j’avais mis 503 dans le Modbus de Jeedom.
Donc en changeant ma passerelle existante de 502 en 503 ( celle que j’avais déjà) Et laissé celle de Jeddom en 502, l’envoie de valeur et la réception fonctionne entre l’automate et Jeedom.

Me reste un petit problème à réglé assez désagréable, c’est que si j’appuie sur un bouton pour envoyé une valeur et que la configuration du poll est de 1s, ça arrive que l’automate ne reçois pas la valeur si j’appuie pendant la phase de demande de Jeedom à l’automate. J’ai essayé d’enlever la valeur info pour que Jeedom ne demande plus rien et la je ne rencontre aucun problème d’envoie de donné.

Si une personne as une réponse à ce genre de phénomène, je suis preneur :wink:
Merci

Bonjour à tous, je suis super content de voir que le sujet Modbus RTU et TCP intéresse encore des personnes. Merci encore d’avoir relancer le sujet et en plus il est super bien fait
J’ai voulu relancer le plugin modbusRTU qui fonctionnait parfaitement l’année dernière.
Entre-temps j’ai fait la mise à jour de mon Debian. Je pense que ça a dû foutre la merde quelque part.
Je vais m’assurer que mon démon démarre comme il faut.
Je vous tiens au jus.

1 « J'aime »

Bonjour Cédric,

Intéressé pour m’équiper de cartes ModBus TCP pourrait tu nous en dire plus ?
Ce que tu as acheté ?
Quels fournisseurs ?
Est-ce facile d’installation ?
Cela fonctionne t-il bien ?

J’ai indiqué le modèle que j’ai pris dans mon premier post si cela peut aider.

Tu parles du convertisseur : USRIOT USR-TCP232-410 S

Bonjoir

Un moyen sous jeedom d’interoger deux registres? Ma vmc enregistre ces données sous deux registres et non un seul. Le plugin modbus rtu, lui ne gère pas ce type de cas.

En tout cas, il est etonnant que ce protocole modbus ne soit pas mieux implenté dans jeedom.

Antoine