[TUTO] - Domotiser une chaudière De Dietrich type DGT130 avec le plugin MyModbus

C’est une Diematic 3.

Ok mais pas certain de pouvoir rester longtemps en ligne…

Je te MP demain j’ai pas le feu
Sur la diematic3 avec un petit tournevis fin tu appuis un peu plus de 5 secondes sur le petit bouton a droit de l’écran derrière le clapet et tu vas dans param instal et en faisant défiler tu arrivera sur la pente

Bonjour,
j’ai essayé de joindre ma chaudière De Dietrich Diematic 3 à ma box Jeedom.
J’utilise la prise mini din de la platine diematic, avec un convertiseur USR IOT « USR DR 302 » (RS 485 to Ethernet).
La chaudière envoie bien les infos toutes les 5 secondes.
En étant en protocole UDP dans l’utilitaire « USR-TCP232-Test RS232 to Ethernet convert tester » sur mon PC, je reçois bien les trames toutes les 5 secondes (20 séries de 9 bytes).
En utilisant les mêmes adresses dans My Modbus, je n’ai pas d’erreur de connexion, mais je n’arrive pas à récupérer de données.
J’ai essayé de créer des commandes Coils et holding resgister, mais elles retournent des valeurs « None ».
(log Mymodbus Debug :
[2022-11-20 14:28:44]DEBUG : Evenement : type=>holding_registers sortie=>1 inputs=>75 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:28:47]DEBUG : Evenement : type=>holding_registers sortie=>1 inputs=>75 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:28:47]DEBUG : Evenement : type=>coils sortie=>1 inputs=>10 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:28:50]DEBUG : Evenement : type=>holding_registers sortie=>1 inputs=>75 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:28:50]DEBUG : Evenement : type=>coils sortie=>1 inputs=>10 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:28:53]DEBUG : Evenement : type=>coils sortie=>1 inputs=>10 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:28:53]DEBUG : Evenement : type=>holding_registers sortie=>1 inputs=>75 values=>None add=>192.168.1.22 unit=>10 eqid=>116)
Quelqu’un peut-il m’aider à débloquer la situation (en me fournissant au moins une commande « clé en main » fonctionnant pour interagir avec la diematic 3), pour me permettre de progresser ?
Merci

Salut,
Essai avec le registre de la sonde Extérieure pour voir

Bonjour,
ça ne retourne rien :
(log :
[2022-11-20 14:49:01]DEBUG : Evenement : type=>holding_registers sortie=>1 inputs=>7 values=>None add=>192.168.1.22 unit=>10 eqid=>116
[2022-11-20 14:49:04]DEBUG : Evenement : type=>holding_registers sortie=>1 inputs=>7 values=>None add=>192.168.1.22 unit=>10 eqid=>116)
J’utilise le plugin MyModbus « stable » présent sur le market (par le beta). Est-ce que ça peut venir de là ?

Oui, passe en beta , et voir si tu peux modifier le code comme le précise @R4F

Perso j’avais un problème de dépendance et @R4F que je remercie encore est intervenu sur mon jeedom et depuis ça tourne comme une horloge.

Je suis passé en beta, modifié les fichiers demond et write comme indiqué, mais ça ne tourne toujours pas.
(log :
[2022-11-20 16:51:50]ERROR : Attention je pense qu’il y a un soucis avec le démon que j’ai relancé plus de 3 fois consécutivement
[2022-11-20 16:51:50]INFO : holding_registers trouvées :7
[2022-11-20 16:51:50]INFO : Lancement du démon mymodbus : nice -n 19 /usr/bin/python3 /var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py --host=192.168.1.22 --port=80 --unid=10 --polling=5 --keepopen=0 --protocol=tcpip --eqid=116 --hrs=7
Exception in thread Thread-1:
Traceback (most recent call last):
File « /usr/lib/python3.7/threading.py », line 917, in _bootstrap_inner
self.run()
File « /usr/lib/python3.7/threading.py », line 865, in run
self._target(*self._args, **self._kwargs)
File « /var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py », line 131, in polling_thread
rr = client.read_holding_registers(int(hreg_first),i,unit=args.unid)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/client/common.py », line 114, in read_holding_registers
return self.execute(request)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py », line 109, in execute
return self.transaction.execute(request)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/transaction.py », line 178, in execute
broadcast=broadcast
File « /usr/local/lib/python3.7/dist-packages/pymodbus/transaction.py », line 294, in _transact
result = self._recv(response_length, full)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/transaction.py », line 326, in _recv
read_min = self.client.framer.recvPacket(min_size)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/framer/init.py », line 49, in recvPacket
return self.client.recv(size)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py », line 89, in recv
return self._recv(size)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py », line 298, in recv
size, data, time.time() - time
)
File « /usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py », line 342, in _handle_abrupt_socket_close
raise ConnectionException(msg)
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] ModbusTcpClient(192.168.1.22:80): Connection unexpectedly closed 0.001654 seconds into read of 8 bytes without response from unit before it closed connection
Version de python ok
Traceback (most recent call last):
File « /var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py », line 288, in
raise ParameterException(‹ Thread en défaut ›)
NameError: name ‹ ParameterException › is not defined )

Je pourrai pas t’aider plus .
Et mets les log dans la balise
image

Bonjour @alainjeedom !

On va essayer de regarder ça ensemble :slight_smile:

Il indique visiblement dans les logs un problème qui serait peut-être lié au fait que ton démon ne soit pas lancé correctement.

  • Est-ce qu’il est bien vert ?
  • Si oui, peux-tu vider les logs et le relancer puis publier les logs que tu obtiens (comme le dit @loustic03 dans les balises qui vont bien) ?

Bonjour R4F,
merci pour ton aide.
j’ai tenté de relancer le demon, mais il reste en NOK.
Voici le log « debug » :

[2022-11-21 19:07:14]ERROR : Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement
[2022-11-21 19:07:14]INFO : holding_registers trouvées :7
[2022-11-21 19:07:14]INFO : Lancement du démon mymodbus : nice -n 19 /usr/bin/python3 /var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py --host=192.168.1.22 --port=80 --unid=10 --polling=5 --keepopen=0 --protocol=tcpip --eqid=116 --hrs=7
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 131, in polling_thread
rr = client.read_holding_registers(int(hreg_first),i,unit=args.unid)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/client/common.py", line 114, in read_holding_registers
return self.execute(request)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py", line 109, in execute
return self.transaction.execute(request)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/transaction.py", line 178, in execute
broadcast=broadcast
File "/usr/local/lib/python3.7/dist-packages/pymodbus/transaction.py", line 294, in _transact
result = self._recv(response_length, full)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/transaction.py", line 326, in _recv
read_min = self.client.framer.recvPacket(min_size)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/framer/__init__.py", line 49, in recvPacket
return self.client.recv(size)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py", line 89, in recv
return self._recv(size)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py", line 298, in _recv
size, data, time.time() - time_)
File "/usr/local/lib/python3.7/dist-packages/pymodbus/client/sync.py", line 342, in _handle_abrupt_socket_close
raise ConnectionException(msg)
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] ModbusTcpClient(192.168.1.22:80): Connection unexpectedly closed 0.001916 seconds into read of 8 bytes without response from unit before it closed connection
Version de python ok
Traceback (most recent call last):
File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 288, in 
raise ParameterException('Thread en défaut')
NameError: name 'ParameterException' is not defined

Côté dépendances tout est ok ? Tu n’as pas eu d’erreur lors de l’installation ?

Pourrais-tu également mettre des captures de la configuration de l’équipement ?

Pour information, un bonus a été ajouté au tuto pour prendre en compte les températures extérieures négatives remontées par la sonde extérieure de la chaudière. Cette dernière affiche des valeurs supérieures à 3200 ce qui n’est pas utilisable sans faire un manipulation permettant de réinterpréter les valeurs correctement :wink:

Bonjour à tous,

ATTENTION : Une mise à jour de la beta a été proposée. Si vous mettez à jour, pensez à modifier à nouveau les fichiers comme précisés dans le tutoriel, sinon il y aura à nouveau les erreurs du démon :wink:

Bonjour @R4F ,
Alors comme çà tourne comme une horloge je fais pas la mise à jour :grin:

Bonjour @loustic03,

J’ai fait la mise à jour et remis les fichiers mymodbus_demond.py et mymodbus_write.py et tout va bien :wink:

Je me doute bien, mais si je le fais et que ça bug car pas bien recopier ben faudra que tu viennes à mon secoure :rofl:
Faudrait que ta modif soit intégrer direct dans le plugin

Très beau tuto, c’est vraiment bien expliqué.
Concernant le démon, en effet si la trame n’est pas reçu pile poil dans le format du protocole, le démon tombe.
J’ai appercu ta modif, tant que la trame reçu est en erreur le code boucle sur la demande de lecture registre, et bloque du coup tout le code sur cette étape. :thinking:

Bonjour @Bebel27,

Merci pour ton retour.

Oui tu as parfaitement raison c’est le défaut actuel qui fait que le démon ne tombe jamais même s’il y a vraiment une erreur dans la requête… C’est moche :slight_smile:

Il faudrait je pense mettre un compteur dans la boucle qui fasse suffisamment de tentatives pour gérer le souci du fonctionnement Maitre-Esclave des De Dietrich et ne pas rester bloquer pour autant en cas de « vraie erreur ».

Un truc du genre :

for loop in range(i):
    time.sleep(1)
    rr = client.read_holding_registers(int(hreg_first),i,unit=args.unid)
    if (not rr.isError()):     # test that we are not an error
        break

On reste ainsi au moins i fois dans la boucle sauf si nous n’avons pas d’erreur. On pourrait avoir le paramètre i dans le plugin pour ajuster le nombre de tentatives qui peut varier selon chacun je pense. Sinon, il faudrait mettre quelque chose comme i = 10 mais à tester pour voir si c’est suffisant…

Qu’en penses-tu ?

1 « J'aime »

De cette façon c’est mieux car tu ne bloque pas dans ta boucle.
Tu peux aussi faire comme @Noyax37,
Il a utilisé une condition try, j’ai un demon modifié qu’il m’a envoyé , je te l’envoie dès que j’ai accès à un pc, s’il passe par là je pense qu’il te fera un retour.

salut @Bebel27 , en effet je passe par là :wink:

Enlève le .txt à la fin

mymodbus_demond.py.txt (15,8 Ko)