RETEX mymodbus optimisation par plages de registre

Bonjour à tous,
Un petit retour d’experience suite au conseil de @Michel_F .
Je vous conseil d’utiliser les plages de registre pour diminuer les requêtes et reduire enormement vos temps de rafraichissements.
Pour ma part je suis passé de 2,2 secondes à 0,16 seconde !
Voici un lien vers le sujet : https://community.jeedom.com/t/plus-de-communication-depuis-maj/131158/25?u=ludo45

Bonne soirée


Informations Jeedom

Core : 4.4.17 (master)
DNS Jeedom : non

Plugin : Suivi Conso
Version : 2024-05-07 01:11:57 (stable)
Statut Démon : Démarré - (2024-09-15 17:52:03)
2 « J'aime »

Je confirme, on a passé la config de Droopy comme cela et depuis plus aucun souci et une vitesse de malade

1 « J'aime »

salut,

merci pour cette info.
tu peux faire stp des screenshot de la conf des plages de registres voir comment c’est implémenté.
j’ai essayé mais ca planté le cycle.
pour 8 cde info je suis à 12sec…
merci

Salut,

une capture de la config de l’équipement STP, je regarde ce qui cloche.

A+
Michel

Hello, Voici un exemple :


1 « J'aime »

@Michel_F j’ai un petit bug, mes binaires ne remontent pas avec les registres et j’arrive pas a expliquer pourquoi



image
Et des que je le repasse en read coil, ça remonte normalement

Par contre pas de soucis avec les holding registrers

Je ne sais pas comment la mémoire de ton automate est organisée et ne sais pas lire ton programme, malheureusement.

Je viens de retester chez moi et ça fonctionne même pour 46 registres binaires.

Est-ce tu pourrais passer en log debug, laisser passer au moins un cycle puis rechercher la partie qui traite la commande de lecture de la plage de binaires et les binaires qui l’utilisent ?
Pour t’aider, tu peux créer un équipement et n’activer que celui-ci. Sinon, tu remontes dans les log jusqu’à trouver une ligne qui contient l’ID de la commande. Chez moi c’est l’id 5079 :

La ligne que je cherche ressemble à ça :

52144|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'process_read_response' launched for command id = 5079

Voilà la zone qui m’intéresse autour de cette ligne :


Là c’est une capture pour que tu vois, mais il me la faut sous forme de texte préformaté, comme ça :

52137|[2024-10-04 22:10:45] DEBUG  : Adding transaction 178
52138|[2024-10-04 22:10:45] DEBUG  : Resetting frame - Current Frame in buffer -
52139|[2024-10-04 22:10:45] DEBUG  : send: 0x0 0xb2 0x0 0x0 0x0 0x6 0x1 0x1 0x3c 0xb8 0x0 0x2e
52140|[2024-10-04 22:10:45] DEBUG  : recv: 0x0 0xb2 0x0 0x0 0x0 0x9 0x1 0x1 0x6 0xe 0x7f 0xd6 0xff 0xff 0x3b old_data:  addr=None
52141|[2024-10-04 22:10:45] DEBUG  : Processing: 0x0 0xb2 0x0 0x0 0x0 0x9 0x1 0x1 0x6 0xe 0x7f 0xd6 0xff 0xff 0x3b
52142|[2024-10-04 22:10:45] DEBUG  : Factory Response[ReadCoilsResponse': 1]
52143|[2024-10-04 22:10:45] DEBUG  : Getting transaction 178
52144|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'process_read_response' launched for command id = 5079
52145|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'cmd_decode' launched for command id = 5080
52146|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'cmd_decode' launched for command id = 5081
52147|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'cmd_decode' launched for command id = 5082
52148|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'add_change' launched with payload = {'values::5079': 1, 'values::5080': False, 'values::5081': True, 'values::5082': True}
52149|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'add_change' No modification to send
52150|[2024-10-04 22:10:45] DEBUG  : Wago Maison (test bit): 'one_cycle_read' exit with error_or_exception = False

Hello,
J’ai pris un equipement avec peu de ligne. Je commande le contacteur de mon chauffe eau.
La commande 2555 (marche) et 2556 (arrêt) passe bien mais aucun retour du read coil 2557 (Fb chauffe eau). J’ai l’impressoin qu’il ne cherche même pas à le lire

[2024-10-05 10:02:49] DEBUG  : mymodbus::deamon_info
[2024-10-05 10:02:49] DEBUG  : mymodbus::getDeamonLaunchable
[2024-10-05 10:02:49] DEBUG  : mymodbus::getCompleteConfiguration
[2024-10-05 10:02:49] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:49] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:49] DEBUG  : mymodbus::deamon_info * daemon_info = '{"log":"mymodbus","state":"ok","launchable":"ok"}'
[2024-10-05 10:02:49] DEBUG  : mymodbus::deamon_info
[2024-10-05 10:02:49] DEBUG  : mymodbus::getDeamonLaunchable
[2024-10-05 10:02:49] DEBUG  : mymodbus::getCompleteConfiguration
[2024-10-05 10:02:49] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:49] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:49] DEBUG  : mymodbus::deamon_info * daemon_info = '{"log":"mymodbus","state":"ok","launchable":"ok"}'
[2024-10-05 10:02:49] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05402747960033594,"eqId":"24"}}}* type: array
[2024-10-05 10:02:49] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.054
[2024-10-05 10:02:50] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05361543359904317,"eqId":"24"}}}* type: array
[2024-10-05 10:02:50] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.054
[2024-10-05 10:02:51] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05378370700054802,"eqId":"24"}}}* type: array
[2024-10-05 10:02:51] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.054
[2024-10-05 10:02:51] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05326358379825251,"eqId":"24"}}}* type: array
[2024-10-05 10:02:51] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:02:52] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05476090100128204,"eqId":"24"}}}* type: array
[2024-10-05 10:02:52] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.055
[2024-10-05 10:02:52] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05309063720051199,"eqId":"24"}}}* type: array
[2024-10-05 10:02:52] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:02:52] DEBUG  : mymodbusCmd::execute **************** execute *****: {"user_login":"Ludo","user_id":"7","comingFrom":"JeedomConnect"}
[2024-10-05 10:02:52] DEBUG  : mymodbus::sendToDaemon * params = array (   'CMD' => 'write',   'write_cmd' =>    array (     'eqId' => '20',     'cmdWriteValue' => 1,     'cmdId' => '2555',   ), )
[2024-10-05 10:02:53] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05341844639915507,"eqId":"24"}}}* type: array
[2024-10-05 10:02:53] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:02:53] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05423178960045334,"eqId":"24"}}}* type: array
[2024-10-05 10:02:53] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.054
[2024-10-05 10:02:54] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10557047739857808,"eqId":"20"}}}* type: array
[2024-10-05 10:02:54] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.106
[2024-10-05 10:02:54] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10486089659971184,"eqId":"20"}}}* type: array
[2024-10-05 10:02:54] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.105
[2024-10-05 10:02:54] DEBUG  : mymodbus::deamon_info
[2024-10-05 10:02:54] DEBUG  : mymodbus::getDeamonLaunchable
[2024-10-05 10:02:54] DEBUG  : mymodbus::getCompleteConfiguration
[2024-10-05 10:02:54] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:54] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:54] DEBUG  : mymodbus::deamon_info * daemon_info = '{"log":"mymodbus","state":"ok","launchable":"ok"}'
[2024-10-05 10:02:55] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10496562560001621,"eqId":"20"}}}* type: array
[2024-10-05 10:02:55] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.105
[2024-10-05 10:02:55] DEBUG  : mymodbus::deamon_info
[2024-10-05 10:02:55] DEBUG  : mymodbus::getDeamonLaunchable
[2024-10-05 10:02:55] DEBUG  : mymodbus::getCompleteConfiguration
[2024-10-05 10:02:55] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:55] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:02:55] DEBUG  : mymodbus::deamon_info * daemon_info = '{"log":"mymodbus","state":"ok","launchable":"ok"}'
[2024-10-05 10:02:55] DEBUG  : mymodbusCmd::execute **************** execute *****: {"user_login":"Ludo","user_id":"7","comingFrom":"JeedomConnect"}
[2024-10-05 10:02:55] DEBUG  : mymodbus::sendToDaemon * params = array (   'CMD' => 'write',   'write_cmd' =>    array (     'eqId' => '20',     'cmdWriteValue' => 0,     'cmdId' => '2556',   ), )
[2024-10-05 10:02:56] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10615497039980255,"eqId":"20"}}}* type: array
[2024-10-05 10:02:56] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.106
[2024-10-05 10:02:56] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.052055954201205165,"eqId":"24"}}}* type: array
[2024-10-05 10:02:56] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.052
[2024-10-05 10:02:57] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05266570599924307,"eqId":"24"}}}* type: array
[2024-10-05 10:02:57] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:02:57] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.0531642361995182,"eqId":"24"}}}* type: array
[2024-10-05 10:02:57] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:02:58] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10335642459976953,"eqId":"20"}}}* type: array
[2024-10-05 10:02:58] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.103
[2024-10-05 10:02:58] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05349165339866886,"eqId":"24"}}}* type: array
[2024-10-05 10:02:58] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:02:59] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10347410880203825,"eqId":"20"}}}* type: array
[2024-10-05 10:02:59] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.103
[2024-10-05 10:02:59] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.10389352499914821,"eqId":"20"}}}* type: array
[2024-10-05 10:02:59] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.104

J’en ai un qui réagit bien dans la même plage. C’est le 2727. C’est etrange car il est dans la même plage

[2024-10-05 10:09:44] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.053337997001654,"eqId":"24"}}}* type: array
[2024-10-05 10:09:44] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:09:45] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.052790104200539645,"eqId":"24"}}}* type: array
[2024-10-05 10:09:45] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:09:45] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.052438521198928355,"eqId":"24"}}}* type: array
[2024-10-05 10:09:45] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.052
[2024-10-05 10:09:46] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05328826759941876,"eqId":"24"}}}* type: array
[2024-10-05 10:09:46] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:09:46] DEBUG  : mymodbus::deamon_info
[2024-10-05 10:09:46] DEBUG  : mymodbus::getDeamonLaunchable
[2024-10-05 10:09:46] DEBUG  : mymodbus::getCompleteConfiguration
[2024-10-05 10:09:46] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:09:46] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:09:46] DEBUG  : mymodbus::deamon_info * daemon_info = '{"log":"mymodbus","state":"ok","launchable":"ok"}'
[2024-10-05 10:09:46] DEBUG  : jeemymodbus.php: $result *{"values":{"2727":true,"cycle_time":{"value":0.05265370840061223,"eqId":"24"}}}* type: array
[2024-10-05 10:09:46] DEBUG  : jeemymodbus.php: Mise à jour cmd Info garage fermé -> new value: 1
[2024-10-05 10:09:46] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:09:46] DEBUG  : mymodbus::deamon_info
[2024-10-05 10:09:46] DEBUG  : mymodbus::getDeamonLaunchable
[2024-10-05 10:09:46] DEBUG  : mymodbus::getCompleteConfiguration
[2024-10-05 10:09:46] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:09:46] DEBUG  : mymodbus::getEqConfiguration
[2024-10-05 10:09:46] DEBUG  : mymodbus::deamon_info * daemon_info = '{"log":"mymodbus","state":"ok","launchable":"ok"}'
[2024-10-05 10:09:47] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.05330236040026648,"eqId":"24"}}}* type: array
[2024-10-05 10:09:47] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053
[2024-10-05 10:09:47] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.053727120599069166,"eqId":"24"}}}* type: array
[2024-10-05 10:09:47] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.054
[2024-10-05 10:09:48] DEBUG  : jeemymodbus.php: $result *{"values":{"cycle_time":{"value":0.053182757199101614,"eqId":"24"}}}* type: array
[2024-10-05 10:09:48] DEBUG  : jeemymodbus.php: Mise à jour cmd Temps de rafraîchissement -> new value: 0.053

Mon extrait est dans le log mymodbus_daemon.

Si la valeur ne change pas, le démon n’envoie pas la valeur à Jeedom. C’est le mauvais log que tu regardes.

Ok c’est etrange. Car certaines infos dans la plage remontent mais d’autres non (dans la même plage). Du coup j’ai repassé les binaire en read coil pour le moment.

Et c’est donc dans ce même log que je te demande de trouver les lignes en question

lorsque je clic sur les logs du demon, ça mouline une minute et à l’ouverture la page reste vide


J’ai relancé les dépendances mais le resultat est le même.

Depuis Analyse / Logs, sélectionne mymodbus_daemon, là ça devrait aussi mouliner et peut-être afficher quelque chose. Si ça n’affiche rien, surtout en log debug, c’est sans doute que le fichier est trop gros et que le traitement dure trop longtemps. Je suppose que c’est ça, je n’ai pas vérifier le core et ça fait la même chose chez moi. Dans ce cas, je vide le fichier log (bouton Vider en haut à droite), je rafraichis (F5) et ensuite je vois des log.

Je ne t’ai pas demandé de faire ça parce que ça ne devrait pas résoudre ton problème puisque les dépendances sont bien installées. Donc RAS de ce côté-là, je ne tiens pas compte de cette remarque.

J’ai effacé les logs. J’ai réactivé les plages de registre sur un de mes 3 objets et ça fonctionne :upside_down_face:
Par contre, est ce que si sur deux objets j’ai des plage qui porte la même adresse ça ne peut pas générer un « bug ».
En effet j’ai des adresse identique mais sur des IP differentes

En premier j’aimerais préciser que si un utilisateur cherche une solution à son problème il doit faire une recherche. Si un jour quelqu’un a le même problème que toi, il lui sera impossible de savoir comment tu as fit pour résoudre le problème (il semblerait que tu n’ais même pas de problème au final). Donc explique ce que tu fais, réponds aux questions, pas juste pour toi, mais pour moi (qui passe du temps à essayer de comprendre ce que tu as comme problème et qui n’y arrive pas) et pour les utilisateurs qui reliront ce fil (avec peine et souffrance).

Ensuite, je vais oublier tout ce qui a été dit avant ce post puisqu’il semble que ça fonctionne finalement sans intervention de ma part.

Objet = équipements ?
Non, pas de bug possible dans ce cas. Le démon lance une instance pour chaque équipement qui a une connexion définie.

Pas de problème à cause de ça, c’est un fonctionnement normal. Rien à craindre

Oui equipement. Comme tu peux le constater je ne suis pas un expert. Cependant, je suis certain que les infos ne remontaient plus. Du coup tu as raison il faut que je soit plus precis.
Ma config : 3 équipements dans jeedom communicant avec 2 automates.
Donc 2 équipements en 192.168.1.80 et 1 équipement en 192.168.1.81. J’ai 2 équipements avec les même IP par erreur de jeunesse. Je ne les aient pas regroupé en 1 pour ne pas avoir à refaire mes scenarios.
Le contexte : tout fonctionnait, j’ai passé les 3 en plage de registre et à ce moment j’ai perdu une bonne partie des infos binaires. Suite à ça j’ai repassé l’ensemble comme avant sans les plages (retour de la communication).
Aujourd’hui ma seul action a été de repasser en plage de registre le 192.168.1.81. Ca fonctionne pour lui.
Je n’ai pas repassé les 2 192.168.1.80 en plage pour le moment.
Pour toi, avoir deux équipements avec les même IP et des plage d’adresses se croisant ne pose pas non plus de soucis?
J’attend ton avis avant de repasser en plage le deuxieme automate

sur l’automate 192.168.1.81 qui fonctionne en plage tu as des binaires sur la plage de registre?

Oui mais que 6 (avec une petite plage) et un seul en numerique (donc sans plage)

Ça dépend de l’appareil. Certains le supportent, certains pas. Mais depuis la bêta 52 il est possible d’utiliser la connexion d’un autre équipement pour éviter le problème.