Le demon Modbus ne démarre pas

Bonjour à tous,

Je viens d’acheter le plugin ModBus pour établir la communication avec ma borne de recharge voiture. J’avais déjà installé le plugin MyModBus qui fonctionne super bien avec mes autres équipement ModBus TCP, mais malheureusement cette borne (Alfen Eve) inverse les bytes, et il me faut donc un plugin plus paramétrable.
Seulement voilà, je me trouve bloqué au tout début puisque le demon refuse obstinément de démarrer. J’ai vu que certains plugins demandent de d’abord configurer une commande avant de relancer le demon, j’ai donc essayé ici, mais rien ne marche…
L’installation n’a donné aucun message d’erreur dans les logs, sauf ceci dans le log ModBus:

[2023-11-10 15:15:13]ERROR : Impossible de lancer le démon, vérifiez le log
[2023-11-10 15:20:05]ERROR : Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement
Traceback (most recent call last):
File "/var/www/html/plugins/modbus/resources/modbusd/modbusd.py", line 33, in
from pymodbus.constants import Defaults
ImportError: cannot import name 'Defaults' from 'pymodbus.constants' (/usr/local/lib/python3.9/dist-packages/pymodbus/constants.py)

Je suis en toutes dernières versions stables sur RPI4.

Merci pour votre aide!

Cedric

Bonjour,

Dans MyModbus en version bêta, c’est une case à cocher et les bytes sont inversés :


Plus d’info dans la doc :
https://bebel27a.github.io/jeedom-mymobdus.github.io/fr_FR/index_b#tocAnchor-1-5-4

Par ailleurs, il me semble avoir lu que le plugin officiel en version bêta permet une meilleure configuration que la version stable, mais je n’ai pas plus d’info et n’ai pas testé (je n’ai pas acheté ce plugin).

A+
Michel

Top! Merci @Michel_F ! Ca ne résout pas le problème de démon sur ModBus, mais je vais pouvoir rester sur MyModBus qui est juste génial (simple et efficace).

1 « J'aime »

Bon, c’est plus compliqué que prévu. De fait, la version beta du plugin permet de faire les réglages dont j’ai besoin, mais je ne parviens pas à le faire fonctionner.

J’ai tout laissé en stable fonctionnel et « upgradé » le plugin MyModBus en beta. Pratiquement tous les réglages que j’avais fait en stable sont restés, sauf les paramètres (Option) qui permettent de travailler directement sur les valeurs captées en ModBus TCP. Ca, ce n’est pas grave. Mais depuis, plus de communication avec mes devices. J’ai essayé d’effacer les équipements et de les recréer, mais rien n’y fait. Or, ça fonctionnait bien en version stable… Et même après avoir réinstallé le plugin stable, plus de données…
Le seul moyen de récupérer la possibilité de lire mes infos a été de restaurer un backup.

Si quelqu’un a une bonne idée… ou si @Bebel27 passe par là… ce serait super sympa parce que je ne m’en sors plus.

Merci!

Cedric

Je passe par là, par contre il va me falloir un peu plus de détail, comme le log en mode debug du démon, et le l’installation des dépendances.

Là, on sait juste que « ça ne marche pas », mais on n’a pas de boule de cristal (j’ai prêté la mienne).

  1. Expliquer ton installation : passerelle série / TCP ? Type d’équipements ? Table Modbus ?
  2. Montrer la config (équipement ET commande). Faire une config de test réduite pour tester la communication
  3. Expliquer en détail ce qui fonctionne et ce qui ne fonctionne pas et fournir les log en mode debug

Oups, déso, bien vu, suis un peu trop la tête dedans depuis trop longtemps :slight_smile:

Donc, je suis en full stable et je veux connecter mes onduleurs SolarEdge en temps réel. Il communiquent en ModBus TCP avec mon réseau. Mon Jeedom est connecté sur le même réseau. Et comme je l’expliquais plus haut, ça marche super bien avec le plugin MyModBus en stable. Je récupère même les infos de mon compteur qui lui, n’est pas sur le réseau, mais connecté à un des onduleurs en RS-485.
image
image
image
Et voici un extrait de la table ModBus que je lis:
image
Donc tout va bien :smile:, merci @Bebel27 pour ce super plugin!

Le problème est que je veux aussi joindre ma borne de recharge Alfen. Elle communique aussi en ModBus TCP. J’arrive à la connecter et lire les valeurs, mais c’est instable et incohérent comme valeurs. Et ça vient du fait qu’ils inversent les 2 bytes des 16 bits en lecture. Je cherchais donc un moyen de les inverser, et @Michel_F m’a fait remarquer que le plugin en beta permet de les inverser. Je l’ai donc installé, mais alors plus rien ne fonctionne, comme expliqué plus haut. Les dépendances s’installent sans erreur, et le démon a l’air de bien tourner.
image
image
Sur l’image ci-dessous, les valeurs affichées sont celles captées juste avant le passage beta, elles restent visibles.


Voilà les logs mymodbus après 5 min. Pas l’air d’y avoir des erreurs à part "ValueError: invalid literal for int() with base 10: ‹  ›
mymodbus.txt (35,2 Ko)
mymodbus_packages.txt (5,2 Ko)

J’espère que ça vous aide comprendre… Merci d’avance pour vos idées!

Cedric

Petite info en plus, quand je sauve un équipement, j’ai un message d’erreur comme quoi la valeur d’adresse doit être un nombre, puis si je sauve une 2ème fois, ça passe. Je n’ai alors plus les erreurs « ValueError: invalid literal for int() with base 10: ‹ › ». Et voici alors le log.
mymodbus (2).txt (61,3 Ko)

Et pour que ce sois un peu plus simple à analyser, voici le log avec plus qu’un seul équipement actif… Ca simplifie un peu les messages…
mymodbus (3).txt (19,0 Ko)

Je vais donner une piste mais pas la réponse (que j’ai déjà donnée très souvent) : la solution se trouve dans la documentation du plugin en recherchant « Unit ID ».

→ Je ne suis pas sûre à 100%, juste 99,99%, donc il faudrait vérifier…


Dans cette même documentation, il est fait mention de « Scale factor ». Je suggère une lecture détaillée des chapitres où il y est fait mention. L’utilisation de ce type de donnée vous fera « économiser » une lecture sur deux et une formule sur certaines commandes info.

satisfaction personnelle

J’espère que le fait de trouver la solution par vous-même vous donnera pleine satisfaction. C’est important de trouver des solutions par soi-même, c’est très bon pour l’égo.

NB : je viens de créer un jeu de piste niveau facile, mais si vous ne trouvez pas la solution, vous pouvez revenir ici. Et si vous avez trouvé la solution, vous pouvez la partager ici également.

NB2 : les captures d’écrans sont de très mauvaise résolution

2 « J'aime »

Le nom de la commande est indiquée sur la première ligne de l’erreur, vérifiez s’il n’y a pas une erreur dans l’adresse ou un espace en début ou en fin d’adresse

Dans les commandes, au moins une adresse d’esclave est vide. Il faut mettre 0 ou l’adresse de l’esclave.

au vu des captures d’écran il semble que ton adr d’esclave soit 3 et non 0.
et comme le dit Michel par rapport au log , tu doit avoir une commande avec un adr slave à " " c’est à dire sans valeur ou une valeur hors format .
bon courage et tiens nous informé

Alors là, merci beaucoup!!! De fait, c’était bien la solution! Il fallait bien que je mette le Unit ID. Je ne l’avais pas mis pour 2 raisons et ça va peut-être en aider d’autres. D’abord, il n’y était pas dans la version stable, et donc je ne sais pas pourquoi il faut le mettre dans la version beta alors que ça fonctionnait dans la version stable sans… Ensuite, il est indiqué qu’il faut mettre « 0 » si pas de bus série. Or, je suis en TCP, donc pas de bus série…
image
Après, c’est assez logique qu’il faille me mentionner :wink:

Bref, c’est résolu! Super merci beaucoup à vous 2!!!

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.