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

Merci @Noyax37

@R4F Par conte attention ! C’est juste a titre informatif, ne pas installer ce fichier à la place du fichier démon, car de mémoire il y avait l’ajout des logs d’erreur qui nécessitent l’inclusion d’un fichier jeedom.

J’avais pas poussé les dernières modif sur la bêta car @Fabio133 avait eu un plantage de son Jeedom suite à un test d’une version avec ce démon, de mémoire c’est lié à la partie gestion des coils il falait que je regarde, il doit y avoir une erreur quelques part.
On ce tient informé ici

euh… me souviens plus de ça… pas beau de vieillir :wink:

Ba ça fait déjà un moment qu’on a fait ca :sweat_smile:

1 « J'aime »

Salut,
Je confirme d’ailleurs j’ai fait la MaJ bêta et depuis jeedom deconne comme la dernière fois.

Heureusement que tu m’as tagué @Bebel27 j’avais aucune idée de comment corriger ce plantage.
Pour l’instant il est stable mais avec un mémoire insuffisante.
Fab

Salut !

Merci beaucoup pour ces partages :slight_smile:

Lorsque je regarde ton fichier @Noyax37, je ne vois pas le try que tu mentionnes @Bebel27.
Par contre, je vois :

if rr.isError():     # test that we are not an error
    rr = ('error')
else:
    subprocess.Popen(['/usr/bin/php',mymodbus,'add='+args.host,'unit='+str(args.unid),'eqid='+str(args.eqid),'type=holding_registers','sortie=2','inputs='+str(list(range(int(hreg_first),int(hreg_first)+i))),'values='+str(rr.registers)])

Là, je comprends que l’on n’arrête plus le démon si il y a une erreur mais on laisse continuer sans lancer le subprocess. Ça doit stabiliser le démon et écrire dans les logs en cas de souci sans l’arrêter si j’ai bien compris.

Par contre on se retrouve embêté je pense pour le mode Maitre/Esclave de la De Dietrich car on ne recommence pas la même requête jusqu’à ce que la chaudière se mette en écoute. Du coup, je pense qu’on risque de louper plusieurs commandes dans ce mode là…

L’idéal serait que je puisse détecter lorsque la chaudière est en écoute pour lancer les commandes mais je n’ai pas trouvé comment :confused:. C’est pour ça que je suis en mode crado avec plusieurs itérations d’une même requête jusqu’à ce qu’elle passe. Avec ce que j’ai proposé avant, je ne détecte pas les erreurs du coup ce qui n’est pas terrible.

Il faudrait peut-être un mix avec ce qui est proposé dans le dernier fichier du genre :

for loop in range(i):
    time.sleep(1)
    rr = client.read_holding_registers(int(hreg_first),i,unit=args.unid)
    if rr.isError():     # test that we are not an error
        rr = ('error')
    else:
        subprocess.Popen(['/usr/bin/php',mymodbus,'add='+args.host,'unit='+str(args.unid),'eqid='+str(args.eqid),'type=holding_registers','sortie=2','inputs='+str(list(range(int(hreg_first),int(hreg_first)+i))),'values='+str(rr.registers)])

Je boucle i fois et vérifie s’il y a une erreur, si c’est le cas, je fais rr = ('error'), sinon je subprocess.
Personnellement, je ne comprends pas le rr = ('error'), est-ce qu’on écrit quelque chose dans les logs ?

en gros ca donne ça ,
si erreur ça met un message dans le log et ca suit son cours

rr = client.read_input_registers(int(ir_start),i,unit=args.unid)
                        if rr.isError():     # test that we are not an error
                            logging.error('erreur en lecture sur: add= '+args.host+', unit= '+str(args.unid)+', eqid='+str(args.eqid)+', type=input_registers, inputs='+str(int(ir_start)))
                        else:
                            subprocess.Popen(['/usr/bin/php',mymodbus,'add='+args.host,'unit='+str(args.unid),'eqid='+str(args.eqid),'type=input_registers','sortie=2','inputs='+str(list(range(int(ir_start),int(ir_start)+i))),'values='+str(rr.registers)])

Oui, là je comprends mieux la partie log :+1:

Du coup, penses-tu possible de conserver là-dessus la boucle for pour qu’en cas d’erreur la requête puisse être rejouée ?

for loop in range(i):
    time.sleep(1)
    rr = client.read_input_registers(int(ir_start),i,unit=args.unid)
        if rr.isError():     # test that we are not an error
            logging.error('erreur en lecture sur: add= '+args.host+', unit= '+str(args.unid)+', eqid='+str(args.eqid)+', type=input_registers, inputs='+str(int(ir_start)))
       else:
            subprocess.Popen(['/usr/bin/php',mymodbus,'add='+args.host,'unit='+str(args.unid),'eqid='+str(args.eqid),'type=input_registers','sortie=2','inputs='+str(list(range(int(ir_start),int(ir_start)+i))),'values='+str(rr.registers)])
            break

On boucle i fois selon le paramètre indiqué et si erreur on log et on relance la requête une seconde plus tard, sinon on subprocess et on sort de la boucle pour continuer. Si i erreurs alors on sort de la boucle et on continue sans lancer le subprocess.

Par défaut, i pourrait être positionné à 1 comme ça on ne fait qu’une seule fois la boucle comme s’il n’y en avait pas finalement. Pour ceux qui ont besoins de plusieurs itérations, on peut augmenter la valeur de i

Penses-tu que je puisse tester cela ou ce que tu as proposé pour les logs demande comme tu l’indiquais un fichier supplémentaire spécifique ?

Si tu pars ce que je te propose, que tu met un poling à 1 s, alors ça revient à la même chose ?

Bonjour et Bonne année à tous !

@Bebel27 : J’avais compris que dans la boucle While True générale, on traitait chaque commande une par une ou en groupe de commandes. Aussi, je me disais que sans le for on risquait de passer sur une autre commande et d’en manquer du coup. Mais c’est peut-être une mauvaise analyse de ma part et que ta proposition suffit…

Hello bebel, petit message du soir.
http://192.168.1.30/index.php?v=d&p=mymodbus&m=mymodbus&id=65 39 Uncaught ReferenceError: initCheckBox is not defined

J’ai remis la stable afin de faire revivre mon Jeedom mais depuis…
Une idée je repasse en beta?
Fab.

Comme ça la sans plus d’info ça va être dur.
Ton Jeedom est en quel version (Debian et Jeedom)
Tu parle de la stable ou de la bêta qui te pose ce problème ?

de mon coté si j’installe la dernière version de Pymodbus, le plugin est HS
J’utilise la version BETA. pour la refaire fonctionner il faut réinstaller les dépendances du plugin en 2.5.3

peut être pareil pour vous?

Bonjour à tous,
Je suis tombé ce soir par hasard sur ce poste, et ce dernier me redonne espoir de pouvoir enfin piloter ma GTU C125 équipée d’un tableau Diematic 3 :grin: (le module USR-W610 Série est commandé!)
Mon but est de m’affranchir du planning programmé sur la chaudière: passer en mode jour lorsque l’un de mes thermostats Jeedom ouvre un radiateur, et de la repasser en mode nuit lorsque l’ensemble des consignes sont atteintes (pour ne pas sur-chauffer les salles de bains qui ne sont pas équipées de vannes thermostatiques)
Cependant, n’ayant jamais tâtonné le protocole Modbus et ne connaissant pas le plugin, je souhaiterais savoir si cet excellent tuto est toujours d’actualité? (j’ai vu sur le forum que des mises à jour sont passées entre temps: me préconisez vous la version stable ou beta? Le remplacement des fichiers mymodbus_demond.py et mymodbus_write.py est-il toujours d’actualité? Après une année d’utilisation, le fonctionnement est-il satisfaisant?).

En vous remerciant d’avance, et en disant un énorme merci @R4F & @Bebel27

Bien cordialement

2 « J'aime »

Salut.
As tu eu plus d’infos ?
Est ce toujours opérationnel ?
J’ai une PAC de dietrich GSHP 15 TR-E et je souhaiterais remonter les infos intéressantes.

Merci

Hello,
La suite est là :wink:: Paramétrages pour Chaudière De Dietrich Diematic 3
++