Salut !
Merci beaucoup pour ces partages 
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
. 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 ?