Paramétrage Mymodbus Chaudière De Dietrich Diematic

Bonjour,

Comme expliqué ici Evolutions du plugin MyModbus version stable - #21 par reyur, j’utilise jusque maintenant l’ancienne version stable du plugin et ça fonctionne parfaitement. Je souhaiterai si possible migrer vers la dernière version pour éviter d’être bloqué un jour avec les mises à jour du core jeedom qui ne seront plus compatibles.

J’ai fait quelques tests non concluants sur la dernière version, je récupère des données totalement erronées, et je crée donc ce post pour essayer de comprendre ce qui coince.

Modèle de la chaudière : De Dietrich AGC 35 MODULENS - Régulation : Diematic iSystem
Type de passerelle : USR-W610
Paramétrage côté USR-W610 :


Config ancienne version mymodbus :

Exemple conf lecture et écriture :

Plusieurs questions pour commencer :
Est-ce que le protocole de connexion doit bien être « tcuovertcp » ?
Je ne comprends pas à quoi correspond l’adresse esclave (unit ID), il faut laisser 1 ?

Avec les paramètres que je teste actuellement


j’obtiens des données erronées et qui repassent régulièrement à 0.

Pour le num d’esclave, je viens de comprendre, j’ai indiqué 10.

Exemple sur ce champ 652 :


→ 2 commandes identiques, 2 valeurs différentes!

Et côté logs :

0033|[2025-01-30 00:00:54] ERROR  : Fatal error: protocol.data_received() call failed.
0034|protocol: <pymodbus.client.modbusclientprotocol.ModbusClientProtocol object at 0x7fd3399a3f10>
0035|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0036|Traceback (most recent call last):
0037|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/pdu/mei_message.py", line 127, in calculateRtuFrameSize
0038|_, object_length = struct.unpack(">BB", buffer[size : size + 2])
0039|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0040|struct.error: unpack requires a buffer of 2 bytes
0041|The above exception was the direct cause of the following exception:
0042|Traceback (most recent call last):
0043|File "/opt/pyenv/versions/3.11.11/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0044|self._protocol.data_received(data)
0045|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 297, in data_received
0046|self.datagram_received(data, None)
0047|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 331, in datagram_received
0048|cut = self.callback_data(self.recv_buffer, addr=addr)
0049|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0050|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/client/modbusclientprotocol.py", line 71, in callback_data
0051|used_len, pdu = self.framer.processIncomingFrame(data)
0052|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0053|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/framer/base.py", line 77, in processIncomingFrame
0054|data_len, pdu = self._processIncomingFrame(data[used_len:])
0055|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0056|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/framer/base.py", line 95, in _processIncomingFrame
0057|used_len, dev_id, tid, frame_data = self.decode(data)
0058|^^^^^^^^^^^^^^^^^
0059|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/framer/rtu.py", line 112, in decode
0060|if not (size := pdu_class.calculateRtuFrameSize(data[used_len:])):
0061|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0062|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/pdu/mei_message.py", line 132, in calculateRtuFrameSize
0063|raise IndexError from exc
0064|IndexError
0065|[2025-01-30 00:01:19] ERROR  : No response received after 3.0 retries, continue with next request
0066|[2025-01-30 00:01:19] ERROR  : Chaudiere/652_T_Hors_Gel1: error during read request on slave id 10, address 652 -> Exception Response(131, 3, None)
0067|[2025-01-30 00:02:41] ERROR  : Chaudiere: 'process_read_response' 'cmd_decode' for command id = 10 raised an exception: 'WriteMultipleRegistersResponse' object has no attribute 'values'

Edit :
A force de faire des tests, je crois que je commence à comprendre le problème.
Si je lance plusieurs lectures de suite via Modbus Doctor, j’ai effectivement plusieurs valeurs possibles. Par exemple, je vais avoir :

  • 80% du temps la bonne valeur qui est 50.
  • 15% du temps des valeurs erronées (0, 110…) mais avec un Request OK.
  • 5% du temps, une erreur Illegal Data Value.

Je ne sais pas comment l’ancienne version du plugin arrivait à gérer ça, mais elle prenait en compte uniquement la bonne valeur.

Je ne sais pas si tu as un avis @Michel_F stp ?

Bonjour,

Je n’ai même pas l’ombre d’une piste…

Ce que je sais :

  • l’ancienne version de MyModbus écrite par Bebel n’était pas vraiment un démon, c’était construit de sorte que jeedom lance une commande python pour chaque requête. Chaque commande était indépendante. C’est comme ça dans mon souvenir mais je n’ai plus de trace de cette version.
  • l’ancienne version était basée sur une ancienne version de pymodbus (V2.5.? quelque chose alors qu’on est en 3.8.4 aujourd’hui)

Dans les erreurs que tu envoies, je vois :

  • IndexError: erreur sur un index lors du calcul de la taille du PDU
  • un timeout
  • une exception
  • une autre exception parce que la réponse Modbus n’a pas de propriété values. Mais sur une requêtes d’écriture, je ne comprends pas le problème…

Bref, je n’ai pas de piste.