MyModBus beta et chaudiere Okofen : probleme d'ecriture

Bonjour à tous,
Après quelques semaines ou je n’ai absolument pas eu le temps de regarder tout ça, j’ai tenté à nouveau la communication avec ma chaudiere Okofen et le plugin [EDIT]MyModbus beta[/EDIT].
Les dernieres évolutions de celui ci (grande liberté sur le format des ecritures) m’ont fait espérer que mon souci serait résolu.

Malheureusement ce n’est pas le cas. Il m’est toujours impossible d’écrire une valeur dans un registre de ma chaudière avec le plugin, alors que cela fonctionne sans problème avec KScada Modbus Doctor.

Après avoir passé du temps à essayer toutes les permutations (inversions de mot, d’octet, signé, non signé), j’avoue que je ne sais plus bien quoi tester.
Et ce d’autant plus que je n’ai aucun message d’erreur dans les logs debug du plugin, qui semble réussir à envoyer mes ordres sans problème. C’est juste qu’ils ne sont pas suivi d’effet.

Si jamais quelqu’un avait une idée…

Bonne fin de journée à tous !

Thomas

Hello,

Tu peux nous montrer ta page mdbus doctor avec les infos en écriture qui fonctionnent stp.

Et les pages côté mymodbus,page de l’équipement ainsi que la page avec tes commandes

Est ce que tu as des infos qui remontent de ta chaudière avec mymodbus

Perso jai deja fais plusieurs (grosses) installations avec ce plugin et j’ai jamais eu le moindre problème

Je vais préparer ça quand j’aurai un peu de temps.
Je me dis que ça pourrait aussi être intéressant de faire une capture de paquets réseaux, pour comparer ce qu’envoient les 2 méthodes (mymodbus et modbus doctor). Pareil, il faut juste que je trouve un peu de temps pour préparer ça.

Salut @Thoto,

tu as tagué le plugin Mymodbus mais tu parles du plugin Modbus (officiel Jeedom SAS), puis dans ton autre message, tu reparles de MyModbus… Tu utilises quel plugin et quelle version ?

Et de manière générale, il faut partir du principe que personne ne connait le matériel que tu utilises (en tout cas, c’est mon cas), ni comment ton installation est configurée et donc, il faut donner des infos :

  • ce que tu veux faire
  • la documentation constructeur pour toute la partie modbus,
  • des captures de ce qui fonctionne
  • des captures de ce qui ne fonctionne pas
  • des logs (j’ai beaucoup de mal à croire que le #plugin-mymodbus soit muet en mode debug…)

A+
Michel

Bonjour,
Effectivement, erreur de ma part dans le texte, j’utilise bien le plugin MyModbus, en version beta.
Je n’ai pas dit que le log était muet, mais qu’il ne renvoyait pas de message d’erreur.

Quoi qu’il en soit, et comme je l’avais prévu, j’ai préparé différentes captures, et j’ai peut etre trouvé une origine possible du problème.

Je mets tout ça bien au propre dans le post suivant.

Mes excuses, j’ai lu et interprété trop vite.
:face_with_open_eyes_and_hand_over_mouth:

Le matériel utilisé:
-Chaudiere Okofen, pilotage en protocole Modbus sur TCP. Connectivité OK sur la chaudière vers tout le réseau (Ethernet).
-Plugin MyModbus en version beta.

Le but:
-Remonter les infos de la chaudière a jeedom et piloter une partie de la chaudière via Jeedom.
-C’est partiellement faisable en utilisant l’autre interface de la chaudière, basée sur un serveur http intégré, qui accepte et renvoie du JSON, malheureusement très mal formatté, et avec un timeout obligatoire important. Ces deux problèmes impliquent qu’il faut faire des lectures séquentielles sur les différents circuits de la chaudière, avec un intervalle de 3 seconde minimum entre deux interrogations, et donc une problématique de collision si on envoie des ordres en même temps. (Une solution serait d’implémenter un système de queue avec un processeur d’évènements…)

Ce qui fonctionne:
-La lecture d’informations via le protocole Modbus fonctionne sans aucun souci.
-L’écriture de commande via un logiciel tiers (KScada Modbus Doctor) fonctionne parfaitement aussi. La valeur du registre est bien modifiée sur la chaudière.

Ce qui ne fonctionne pas:
-L’écriture de commande via le plugin ne fonctionne pas. C’est a dire que la commande est envoyée, qu’il n’y a aucun message d’erreur dans le log en debug, mais que la valeur du registre n’est PAS modifié sur la chaudière.

Ci dessous, des captures:
-du paramétrage de l’équipement


-des quelques commandes pour le test (en gros, lecture d’un registre, et deux commandes de modification arbitraire de la valeur, pour les test.

-une capture de modbus doctor (en décimal) avec le log de ce qui est envoyé, le plus récent en bas. (2 lignes pour la lecture - envoi, réception, valeur lue = 100 - puis 2 lignes pour l’ecriture, valeur ecrite 200, puis 2 lignes pour la lecture a nouveau, valeur lue = 200)

Ensuite, en préparant tout ça et en comparant ce que Modbus Doctor et MyModbus beta envoient lors d’une tentative d’écriture (de la valeur 100 = 64 en hexa), j’ai constaté que les messages étaient différents. Sur la capture suivante (en hexa cette fois), on voit que MyModbus envoie la valeur B en hexa sur le deuxieme octet, alors que Modbus Doctor envoie 0 sur cet octet. C’est la seule différence que j’ai retrouvée dans les messages en ecriture. [EDIT]Je m’auto réponds : fausse joie, je pense que le B est juste … Le numéro de transaction…[/EDIT]

A noter que les messages en lecture sont eux strictement identiques avec les deux outils.

Je ne connais pas en profondeur le protocole modbus (mais je compte y remédier…), donc j’ignore quelle est la signification de ce deuxieme octet, et si cela peut avoir une influence sur la non prise en compte de la valeur envoyée par la chaudière.

Merci à tous pour vos idées.

C’est bien mieux, on y voit plus clair :+1:
N’hésite pas à faire des essais d’écriture, à noter quand tu fais quoi. Puis de mettre les logs en pause, de copier et de coller les logs dans une balise préformatée. De cette manière, je verrai plus que 5 lignes de logs.

Sinon, dans Modbus Doctor, tu as configuré le n° d’esclave à 1 alors que dans MyModbus, l’adresse de l’esclave est à 0 (= broadcast). Tu as essayé de mettre à 1 ?

Oui, j’ai fait des essais en modifiant le numéro d’esclave par acquis de conscience.
Normalement, ça n’a pas d’incidence si j’ai tout compris, quand c’est du modbus/TCP pur, sans cascade série derrière.
En tout cas, quel que soit le numéro d’esclave renseigné dans le plugin ou dans Modbus Doctor, la situation reste inchangée.

Logs ci dessous, pour la séquence suivante:
Essai d’ecriture 100
Raffraichissement des valeurs, le 54 est toujours à 500
Essai d’ecriture 200
Raffraichissement des valeurs, le 54 est toujours à 500
Essai d’ecriture à 100

[2023-08-17 10:49:58]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}
[2023-08-17 10:50:04]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}
[2023-08-17 10:50:04]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}
[2023-08-17 10:50:05]DEBUG : **************** execute *****: {"user_login":"admin","user_id":"1"}
[2023-08-17 10:50:05]DEBUG : mymodbusd: Received message: {'CMD': 'write', 'write_cmd': {'eqId': '127', 'cmdWriteValue': 100, 'cmdId': '2119'}, 'apikey': 'sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq', 'dt': '2023-08-17T10:50:05+02:00'}
[2023-08-17 10:50:05]INFO : mymodbusd: Command 'write' received from jeedom: sending the command to the daemon
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* check_queue - daemon_cmd: {"write_cmd": {"eqId": "127", "cmdWriteValue": 100, "cmdId": "2119"}}
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* connect to execute write commands
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* connect called
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* connecting...
[2023-08-17 10:50:05]DEBUG : Connecting to 192.168.0.230:502.
[2023-08-17 10:50:05]DEBUG : Connecting.
[2023-08-17 10:50:05]DEBUG : Client connected to modbus server
[2023-08-17 10:50:05]INFO : Protocol made connection.
[2023-08-17 10:50:05]INFO : Connected to 192.168.0.230:502.
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* write_request {'last_value': None, 'name': 'Temp W 100', 'type': 'action', 'slave': 1, 'fct_modbus': '6', 'data_type': 'uint16', 'addr': 54, 'byteorder': '>', 'wordorder': '>', 'repeat': False}
[2023-08-17 10:50:05]DEBUG : [100]
[2023-08-17 10:50:05]DEBUG : send: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0x64
[2023-08-17 10:50:05]DEBUG : Adding transaction 1
[2023-08-17 10:50:05]DEBUG : recv: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0x64
[2023-08-17 10:50:05]DEBUG : Processing: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0x64
[2023-08-17 10:50:05]DEBUG : Factory Response[WriteSingleRegisterResponse': 6]
[2023-08-17 10:50:05]DEBUG : Getting transaction 1
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* disconnect after write
[2023-08-17 10:50:05]DEBUG : PyModbusClient: *OkofenModbus* disconnect called
[2023-08-17 10:50:05]INFO : Protocol lost connection.
[2023-08-17 10:50:05]DEBUG : Client disconnected from modbus server: None
[2023-08-17 10:50:10]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}
[2023-08-17 10:50:12]DEBUG : **************** execute *****: {"user_login":"admin","user_id":"1"}
[2023-08-17 10:50:12]DEBUG : mymodbusd: Received message: {'CMD': 'read', 'read_cmd': {'eqId': '127'}, 'apikey': 'sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq', 'dt': '2023-08-17T10:50:12+02:00'}
[2023-08-17 10:50:12]INFO : mymodbusd: Command 'read' received from jeedom: sending the command to the daemon
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* check_queue - daemon_cmd: {"read_cmd": {"eqId": "127"}}
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* connect called
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* connecting...
[2023-08-17 10:50:12]DEBUG : Connecting to 192.168.0.230:502.
[2023-08-17 10:50:12]DEBUG : Connecting.
[2023-08-17 10:50:12]DEBUG : Client connected to modbus server
[2023-08-17 10:50:12]INFO : Protocol made connection.
[2023-08-17 10:50:12]INFO : Connected to 192.168.0.230:502.
[2023-08-17 10:50:12]DEBUG : send: 0x0 0x2 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x3 0x0 0x1
[2023-08-17 10:50:12]DEBUG : Adding transaction 2
[2023-08-17 10:50:12]DEBUG : recv: 0x0 0x2 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2023-08-17 10:50:12]DEBUG : Processing: 0x0 0x2 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2023-08-17 10:50:12]DEBUG : Factory Response[ReadHoldingRegistersResponse': 3]
[2023-08-17 10:50:12]DEBUG : Getting transaction 2
[2023-08-17 10:50:12]DEBUG : [1]
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* read value for Mode General (command id 1704): 1
[2023-08-17 10:50:12]DEBUG : send: 0x0 0x3 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x1 0x0 0x1
[2023-08-17 10:50:12]DEBUG : Adding transaction 3
[2023-08-17 10:50:12]DEBUG : recv: 0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x2
[2023-08-17 10:50:12]DEBUG : Processing: 0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x2
[2023-08-17 10:50:12]DEBUG : Factory Response[ReadHoldingRegistersResponse': 3]
[2023-08-17 10:50:12]DEBUG : Getting transaction 3
[2023-08-17 10:50:12]DEBUG : [2]
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* read value for Protocole Modbus (command id 2112): 2
[2023-08-17 10:50:12]DEBUG : send: 0x0 0x4 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x36 0x0 0x1
[2023-08-17 10:50:12]DEBUG : Adding transaction 4
[2023-08-17 10:50:12]DEBUG : recv: 0x0 0x4 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x1 0xf4
[2023-08-17 10:50:12]DEBUG : Processing: 0x0 0x4 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x1 0xf4
[2023-08-17 10:50:12]DEBUG : Factory Response[ReadHoldingRegistersResponse': 3]
[2023-08-17 10:50:12]DEBUG : Getting transaction 4
[2023-08-17 10:50:12]DEBUG : [500]
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* read value for Temp R (command id 2117): 500
[2023-08-17 10:50:12]INFO : Send to jeedom :  {'eqId': '127', 'values': {'1704': 1, '2112': 2, '2117': 500}}
[2023-08-17 10:50:12]DEBUG : PyModbusClient: *OkofenModbus* disconnect called
[2023-08-17 10:50:12]DEBUG : Starting new HTTP connection (1): localhost:80
[2023-08-17 10:50:12]INFO : Protocol lost connection.
[2023-08-17 10:50:12]DEBUG : Client disconnected from modbus server: None
[2023-08-17 10:50:12]DEBUG : jeemymodbus.php: $result *{"eqId":"127","values":{"1704":1,"2112":2,"2117":500}}* type: array
[2023-08-17 10:50:12]DEBUG : jeemodbus.php: Mise à jour cmd Mode General -> new value: 1
[2023-08-17 10:50:12]DEBUG : jeemodbus.php: Mise à jour cmd Protocole Modbus -> new value: 2
[2023-08-17 10:50:12]DEBUG : jeemodbus.php: Mise à jour cmd Temp R -> new value: 500
[2023-08-17 10:50:12]INFO : jeemodbus.php: Mise à jour des commandes info : 'Mode General' 'Protocole Modbus' 'Temp R'
[2023-08-17 10:50:12]DEBUG : http://localhost:80 "POST /plugins/mymodbus/core/php/jeemymodbus.php?apikey=sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq HTTP/1.1" 200 0
[2023-08-17 10:50:16]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}
[2023-08-17 10:50:18]DEBUG : **************** execute *****: {"user_login":"admin","user_id":"1"}
[2023-08-17 10:50:18]DEBUG : mymodbusd: Received message: {'CMD': 'write', 'write_cmd': {'eqId': '127', 'cmdWriteValue': 200, 'cmdId': '2120'}, 'apikey': 'sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq', 'dt': '2023-08-17T10:50:18+02:00'}
[2023-08-17 10:50:18]INFO : mymodbusd: Command 'write' received from jeedom: sending the command to the daemon
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* check_queue - daemon_cmd: {"write_cmd": {"eqId": "127", "cmdWriteValue": 200, "cmdId": "2120"}}
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* connect to execute write commands
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* connect called
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* connecting...
[2023-08-17 10:50:18]DEBUG : Connecting to 192.168.0.230:502.
[2023-08-17 10:50:18]DEBUG : Connecting.
[2023-08-17 10:50:18]DEBUG : Client connected to modbus server
[2023-08-17 10:50:18]INFO : Protocol made connection.
[2023-08-17 10:50:18]INFO : Connected to 192.168.0.230:502.
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* write_request {'last_value': None, 'name': 'Temp W 200', 'type': 'action', 'slave': 1, 'fct_modbus': '6', 'data_type': 'uint16', 'addr': 54, 'byteorder': '>', 'wordorder': '>', 'repeat': False}
[2023-08-17 10:50:18]DEBUG : [200]
[2023-08-17 10:50:18]DEBUG : send: 0x0 0x5 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0xc8
[2023-08-17 10:50:18]DEBUG : Adding transaction 5
[2023-08-17 10:50:18]DEBUG : recv: 0x0 0x5 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0xc8
[2023-08-17 10:50:18]DEBUG : Processing: 0x0 0x5 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0xc8
[2023-08-17 10:50:18]DEBUG : Factory Response[WriteSingleRegisterResponse': 6]
[2023-08-17 10:50:18]DEBUG : Getting transaction 5
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* disconnect after write
[2023-08-17 10:50:18]DEBUG : PyModbusClient: *OkofenModbus* disconnect called
[2023-08-17 10:50:18]INFO : Protocol lost connection.
[2023-08-17 10:50:18]DEBUG : Client disconnected from modbus server: None
[2023-08-17 10:50:22]DEBUG : **************** execute *****: {"user_login":"admin","user_id":"1"}
[2023-08-17 10:50:22]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}
[2023-08-17 10:50:22]DEBUG : mymodbusd: Received message: {'CMD': 'read', 'read_cmd': {'eqId': '127'}, 'apikey': 'sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq', 'dt': '2023-08-17T10:50:22+02:00'}
[2023-08-17 10:50:22]INFO : mymodbusd: Command 'read' received from jeedom: sending the command to the daemon
[2023-08-17 10:50:22]DEBUG : PyModbusClient: *OkofenModbus* check_queue - daemon_cmd: {"read_cmd": {"eqId": "127"}}
[2023-08-17 10:50:22]DEBUG : PyModbusClient: *OkofenModbus* connect called
[2023-08-17 10:50:22]DEBUG : PyModbusClient: *OkofenModbus* connecting...
[2023-08-17 10:50:22]DEBUG : Connecting to 192.168.0.230:502.
[2023-08-17 10:50:22]DEBUG : Connecting.
[2023-08-17 10:50:22]DEBUG : Client connected to modbus server
[2023-08-17 10:50:22]INFO : Protocol made connection.
[2023-08-17 10:50:22]INFO : Connected to 192.168.0.230:502.
[2023-08-17 10:50:22]DEBUG : send: 0x0 0x6 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x3 0x0 0x1
[2023-08-17 10:50:22]DEBUG : Adding transaction 6
[2023-08-17 10:50:22]DEBUG : recv: 0x0 0x6 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2023-08-17 10:50:22]DEBUG : Processing: 0x0 0x6 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2023-08-17 10:50:22]DEBUG : Factory Response[ReadHoldingRegistersResponse': 3]
[2023-08-17 10:50:22]DEBUG : Getting transaction 6
[2023-08-17 10:50:22]DEBUG : [1]
[2023-08-17 10:50:22]DEBUG : send: 0x0 0x7 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x1 0x0 0x1
[2023-08-17 10:50:22]DEBUG : Adding transaction 7
[2023-08-17 10:50:22]DEBUG : recv: 0x0 0x7 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x2
[2023-08-17 10:50:22]DEBUG : Processing: 0x0 0x7 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x2
[2023-08-17 10:50:22]DEBUG : Factory Response[ReadHoldingRegistersResponse': 3]
[2023-08-17 10:50:22]DEBUG : Getting transaction 7
[2023-08-17 10:50:22]DEBUG : [2]
[2023-08-17 10:50:22]DEBUG : send: 0x0 0x8 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x36 0x0 0x1
[2023-08-17 10:50:22]DEBUG : Adding transaction 8
[2023-08-17 10:50:22]DEBUG : recv: 0x0 0x8 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x1 0xf4
[2023-08-17 10:50:22]DEBUG : Processing: 0x0 0x8 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x1 0xf4
[2023-08-17 10:50:22]DEBUG : Factory Response[ReadHoldingRegistersResponse': 3]
[2023-08-17 10:50:22]DEBUG : Getting transaction 8
[2023-08-17 10:50:22]DEBUG : [500]
[2023-08-17 10:50:22]DEBUG : PyModbusClient: *OkofenModbus* disconnect called
[2023-08-17 10:50:22]INFO : Protocol lost connection.
[2023-08-17 10:50:22]DEBUG : Client disconnected from modbus server: None
[2023-08-17 10:50:24]DEBUG : **************** execute *****: {"user_login":"admin","user_id":"1"}
[2023-08-17 10:50:25]DEBUG : mymodbusd: Received message: {'CMD': 'write', 'write_cmd': {'eqId': '127', 'cmdWriteValue': 100, 'cmdId': '2119'}, 'apikey': 'sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq', 'dt': '2023-08-17T10:50:25+02:00'}
[2023-08-17 10:50:25]INFO : mymodbusd: Command 'write' received from jeedom: sending the command to the daemon
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* check_queue - daemon_cmd: {"write_cmd": {"eqId": "127", "cmdWriteValue": 100, "cmdId": "2119"}}
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* connect to execute write commands
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* connect called
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* connecting...
[2023-08-17 10:50:25]DEBUG : Connecting to 192.168.0.230:502.
[2023-08-17 10:50:25]DEBUG : Connecting.
[2023-08-17 10:50:25]DEBUG : Client connected to modbus server
[2023-08-17 10:50:25]INFO : Protocol made connection.
[2023-08-17 10:50:25]INFO : Connected to 192.168.0.230:502.
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* write_request {'last_value': None, 'name': 'Temp W 100', 'type': 'action', 'slave': 1, 'fct_modbus': '6', 'data_type': 'uint16', 'addr': 54, 'byteorder': '>', 'wordorder': '>', 'repeat': False}
[2023-08-17 10:50:25]DEBUG : [100]
[2023-08-17 10:50:25]DEBUG : send: 0x0 0x9 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0x64
[2023-08-17 10:50:25]DEBUG : Adding transaction 9
[2023-08-17 10:50:25]DEBUG : recv: 0x0 0x9 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0x64
[2023-08-17 10:50:25]DEBUG : Processing: 0x0 0x9 0x0 0x0 0x0 0x6 0x1 0x6 0x0 0x36 0x0 0x64
[2023-08-17 10:50:25]DEBUG : Factory Response[WriteSingleRegisterResponse': 6]
[2023-08-17 10:50:25]DEBUG : Getting transaction 9
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* disconnect after write
[2023-08-17 10:50:25]DEBUG : PyModbusClient: *OkofenModbus* disconnect called
[2023-08-17 10:50:25]INFO : Protocol lost connection.
[2023-08-17 10:50:25]DEBUG : Client disconnected from modbus server: None
[2023-08-17 10:50:25]INFO : Send to jeedom :  {'heartbeat_request': 1692262225}
[2023-08-17 10:50:25]DEBUG : Starting new HTTP connection (1): localhost:80
[2023-08-17 10:50:25]DEBUG : jeemymodbus.php: $result *{"heartbeat_request":1692262225}* type: array
[2023-08-17 10:50:25]DEBUG : mymodbusd: Received message: {'CMD': 'heartbeat_answer', 'answer': 1692262225, 'apikey': 'sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq', 'dt': '2023-08-17T10:50:25+02:00'}
[2023-08-17 10:50:25]DEBUG : http://localhost:80 "POST /plugins/mymodbus/core/php/jeemymodbus.php?apikey=sKLBILdswqpFGNux9XAxLhAeMDgStjgh1TTLf47nwVEUrhBRlX0cJrk3LJeQ5ndq HTTP/1.1" 200 0
[2023-08-17 10:50:28]DEBUG : deamon_info = {"state":"ok","launchable":"ok"}

Je suis très perplexe. Manifestement, les messages envoyés sont les mêmes par les deux outils.
Et ce qui est très étrange, c’est que le message de retour de la chaudière, quand je fais un essai d’écriture, a l’air de bien confirmer la bonne réception, puisque le message en retour contient le même code de fonction (6) en octet 7

En effet, normalement, ça n’a pas d’effet. Mais on ne sait pas exactement comment est l’électronique et si l’interface ethernet n’est en fait pas une passerelle… Maintenant, ce point est clarifié : ce n’est pas la solution.

… je suis tout autant perplexe que toi…
Es-tu 100% sûr que rien d’autre sur le réseau n’écrit ?
Lors de tes essais avec modbus doctor, il y avait le même temps entre l’écriture et la relecture de vérification qu’avec MyModbus ?
(je cherche des raisons)
Tu as la possibilité de te mettre en direct (jeedom - câble réseau - chaudière) et de faire des essais ?

Je viens de faire des captures de paquets avec WireShark, en clonant le port de la chaudière sur mon switch.
Les paquets modbus/tcp sont identiques, qu’on envoie avec ModBus doctor ou avec MyModbus, à une exception près : ModbusDoctor ne met jamais d’identifiant de transaction (valeur du bit 1 toujours à 0, cf mes captures avec le 0xb)

Par contre j’ai une différence au niveau de l’encapsulation TCP, les paquets qui viennent du plugin ont un flag « No-Operation »… qui n’est pas présent dans le paquet venant de modbus doctor. A priori, ça n’a pas d’incidence sur le paquet en lui même. C’est la seule différence que j’ai repérée (hors adresse IP et adresse MAC, bien sur. Jeedom est sur x.x.x.240, ModbusDoctor est sur x.x.x.210)

Paquet MyModbus (edité pour confidentialité)

Frame 1: 78 bytes on wire (624 bits), 78 bytes captured (624 bits) on interface \Device\NPF_{XX}, id 0
Ethernet II, Src: 0e:9c:xx:xx:xx:xx(0e:9c:xx:xx:xx:xx), Dst: xx:xx:xx(00:60:xx:xx:xx)
Internet Protocol Version 4, Src: x.x.x.240, Dst: x.x.x.230
Transmission Control Protocol, Src Port: 46872, Dst Port: 502, Seq: 1, Ack: 1, Len: 12
    Source Port: 46872
    Destination Port: 502
    [Stream index: 0]
    [Conversation completeness: Incomplete (8)]
    [TCP Segment Len: 12]
    Sequence Number: 1    (relative sequence number)
    Sequence Number (raw): 1561870073
    [Next Sequence Number: 13    (relative sequence number)]
    Acknowledgment Number: 1    (relative ack number)
    Acknowledgment number (raw): 2014419545
    1000 .... = Header Length: 32 bytes (8)
    Flags: 0x018 (PSH, ACK)
    Window: 502
    [Calculated window size: 502]
    [Window size scaling factor: -1 (unknown)]
    Checksum: 0xe4ac [unverified]
    [Checksum Status: Unverified]
    Urgent Pointer: 0
    *****ICI=======>Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps*****
    [Timestamps]
    [SEQ/ACK analysis]
    TCP payload (12 bytes)
    [PDU Size: 12]
Modbus/TCP
    Transaction Identifier: 17
    Protocol Identifier: 0
    Length: 6
    Unit Identifier: 1
Modbus
    .000 0110 = Function Code: Write Single Register (6)
    Reference Number: 54
    Data: 00c8

Paquet ModbusDoctor

Frame 1: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface \Device\NPF_{XXX}, id 0
Ethernet II, Src: xx:xx:xx(c8:7f:54:xx:xx:xx), Dst: xx:xx:xx(00:60:b5:xx:xx:xx)
Internet Protocol Version 4, Src: x.x.x.210, Dst: x.x.x.230
Transmission Control Protocol, Src Port: 64198, Dst Port: 502, Seq: 1, Ack: 1, Len: 12
    Source Port: 64198
    Destination Port: 502
    [Stream index: 0]
    [Conversation completeness: Incomplete (8)]
    [TCP Segment Len: 12]
    Sequence Number: 1    (relative sequence number)
    Sequence Number (raw): 1520490757
    [Next Sequence Number: 13    (relative sequence number)]
    Acknowledgment Number: 1    (relative ack number)
    Acknowledgment number (raw): 3645782379
    0101 .... = Header Length: 20 bytes (5)
    Flags: 0x018 (PSH, ACK)
    Window: 8212
    [Calculated window size: 8212]
    [Window size scaling factor: -1 (unknown)]
    Checksum: 0xc77c [unverified]
    [Checksum Status: Unverified]
    Urgent Pointer: 0
    [Timestamps]
    [SEQ/ACK analysis]
    TCP payload (12 bytes)
    [PDU Size: 12]
Modbus/TCP
    Transaction Identifier: 0
    Protocol Identifier: 0
    Length: 6
    Unit Identifier: 1
Modbus
    .000 0110 = Function Code: Write Single Register (6)
    Reference Number: 54
    Data: 00c8

Pour tes autres questions:
-Même temps entre les demandes a peu près (à moins d’une seconde près, je dirais).
-Pour me mettre en branchement direct c’est un peu plus complexe. Actuellement, mon jeedom (sur atlas) et la chaudière sont configurées en DHCP sur mon routeur. Il faudrait que je les assigne en statique sur un même sous réseau, et que je programme une séquence d’envoi d’ordres via un scenario, car du coup je n’aurai plus la main pour agir en manuel, puis récupérer les logs du plugin ensuite. Rien d’impossible, un peu de manipulation et de déménagement à faire.
J’espère juste que la chaudière ne « râlera » pas d’avoir une connexion locale mais pas sur internet.

Si le test est trop fastidieux, laisse tomber…

Difficile de savoir si les 12 bytes de différence ne sont que dans l’entête TCP/IP, ce qui ne devrait pas changer grand chose. Et pourtant…

Franchement, je suis perdu.

Penses tu qu’il serait possible, juste pour « fermer une porte », d’ajouter une option dans la beta qui permettrait de laisser le « transaction id » à 0 dans le plugin ?
Je n’y crois pas trop… Mais en même temps, quand tu vois l’implémentation du JSON sur cette chaudière, tu te dis que tout est possible…

En parcourant la doc de pymodbus, je ne vois malheureusement pas cette possibilité…
https://pymodbus.readthedocs.io/en/v3.2.2/source/library/client.html

Pour être sur que ça ne venait pas de l’atlas, j’ai essayé d’installer le plugin sur un de mes jeedom secondaires, sur un RPI. La situation est exactement pareille.

En parcourant la doc de pymodbus, je ne vois malheureusement pas cette possibilité…

En effet, à moins de faire un fork et de modifier la llibrairie… :frowning:

J’ai peut être une autre idée:
Il me semble que le plugin fonctionne en mode asynchrone sur les requêtes.
Je pense qu’au contraire, les outils « manuels » fonctionnent en mode synchrone, mais je ne suis pas sur à 100%
Peut être que ma chaudière a besoin d’une requête synchrone ?

manifestement, il y a un sujet particulier entre les chaudieres okofen et les plugins modbus sous jeedom !
plugin tiers modbus
(Et est ce que du coup, ça ne viendrait pas d’une particularité de la librairie pymodbus ?)