Benoit3 / Diematic_to_MQTT

MQTT interface for De Dietrich Diematic3 heater regulator written in python
MIT License
25 stars 7 forks source link

Problème récupération données #11

Closed famdeg closed 1 year ago

famdeg commented 1 year ago

Bonjour Benoit,

J'ai récupéré ton programme pour le transcrire en Arm64 et adapté les paramètres de configuration compatible avec mon matériel. Je possède une chaudière fioul De Dietrich (GT120) avec Diematic3 sur laquelle j'ai branché un convertisseur RS485 vers TCP par une liaison Wifi (PW11). Voir image de la config PW11 ci-dessous. image image

J'ai installé ton programme via Docker Compose tel que tu le montre dans ton Wiki. Au lancement du programme le fichier log boucle sur les infos ci-dessous (logs.txt).

2023-03-19 17:37:33,460 - Diematic - WARNING - Init Link with Regulator
2023-03-19 17:38:13,616 - Diematic - WARNING - Synchro timeout

Je reçois bien les publications sur mon serveur MQTT mais toutes les valeurs sont vide. image

J'ai testé la communication avec mon convertisseur et je récupère bien, manuellement, les valeurs de mon diematic en entrant une valeur de registre.

J'ai effectué différent test et je suis dans une impasse, j'attend ton secours.

Benoit3 commented 1 year ago

Bonsoir,

au vu du log (Synchro timeout), aucune donnée n'est reçue. Sur le convertisseur RS485 - Wifi, il ne faut pas sélectionner le Protocol Modbus.

En effet la chaudière implémente un protocole ModBus largement modifié (Je suis même surpris que tu arrives à lire les registres). Ce protocole modifié est implémenté dans l'interface Diematique_to_MQTT. Les modifs sont principalement l'alternanace des modes Maitres/Esclave toutes les 5s et l'ajoute de trois "0" à la fin de chaque trame.

Le convertisseur PW11 doit être en mode série, sans prise en charge du ModBus. Si tu passes l'interface en mode DEBUG les trames recues sont affichées en hexa. Cordialement.

famdeg commented 1 year ago

Merci Benoit pour ta réponse rapide.

Je ne suis pas en grand spécialiste en protocole. J'ai modifié mon convertisseur en remplaçant le protocole Modbus par Frame et j'ai testé plusieurs longueur de Frame sans trop savoir ce que je devais y mettre. image

Je te transfère les logs en mode INFO et DEBUG en espérant que tu puisse m'aiguiller sur ce problème.

Benoit3 commented 1 year ago

Je ne connait pas cette interface mais: une frame length de 16 est trop petit, on voit dans les que les trames Modbus recues sont coupées en plusieurs morceaux A essayer:

Je crois qu'il y a aussi un Protocol "None", ca peut valoir le coup d'essayer.

Les logs en mode debug sont suffisants

Benoit3 commented 1 year ago

Avec un peu de recul, je pense que le plus simple est de mettre le protocole à None. En cas d'erreur de trame dans les logs, essayer ajuster le gaptime par pas de 10 ms. Mon interface ne propose pas ces réglages donc je n'y ait jamais touché.

famdeg commented 1 year ago

Benoit, Merci encore pour ton support. J'ai essayé le protocole None avec différente valeur de gaptime sa avoir d'impact sur le fichier log. J'ai l'impression que ca communique mais sans récupérer les valeurs. Tu remarquera que dans le fichier log, il y a ce type d'erreur.

Traceback (most recent call last): File "/app/Diematic3Panel.py", line 244, in loop self.refreshAttributes(); File "/app/Diematic.py", line 358, in refreshAttributes self.burnerPower=round((self.registers[DDREGISTER.FAN_SPEED] / FAN_SPEED_MAX)*100) if (self.ionizationCurrent>0) else 0; TypeError: '>' not supported between instances of 'NoneType' and 'int'

J'ai également essayé le protocole Frame sans succès.

LogDebug.txt

Benoit3 commented 1 year ago

OK La communication fonctionne correctement. Le pb vient du fait que le courant d'ionization n'est pas fourni par votre chaudière. Vous pouvez essayer de commenter la ligne 358 du fichier Diematic.py. En python il faut mettre un # en début de ligne

famdeg commented 1 year ago

Benoit,

Un grand merci pour tes conseils, maintenant cela fonctionne parfaitement. Je dois régler un problème de mon coté, la découverte MQTT ne fonctionne pas, ca ne doit pas être grand chose.

Benoit3 commented 1 year ago

Avant de clore le sujet, pouvez vous indiquer le gaptime utilisé? Est-ce que la valeur par defaut (50 ms) donne des résultats corrects? Pouvez vous mettre une copie d'écran de la page de parmêtres utilisés?

Je vais également faire une modif du code que je permettrai de vous demander de tester.

Benoit3 commented 1 year ago

Pouvez vous tester l'image docker : ghcr.io/benoit3/diematic_to_mqtt:dev-latest

Cela devrait fonctionner sans modif Cordialement

famdeg commented 1 year ago

Benoit, J'ai laissé le gaptime de 50ms. Je ferais le test ce soir de ton image docker. Faudra t-il que je la compile en Arm64 comme j'ai du le faire la première foi ?

image

Benoit3 commented 1 year ago

Bonjour, j'ai modifié le workflow github : l'image marche en arm64 nativement. Bneoit

famdeg commented 1 year ago

Bonjour, J'ai testé ta nouvelle version avec intégration amd64 et j'ai un message d'erreur lors de la récupération.

famdeg@Khadas:/opt/homeassitant$ docker compose up -d
[+] Running 0/1
 ⠏ diematic Pulling                                                        2.0s
manifest unknown
Benoit3 commented 1 year ago

Bonjour,

jusqu'à ce que tu me fasses un retour, je n'avais testé les images docker que sur un PC avec ubuntu en 64 bit, jamais sur Rpi.

Je n'avais pas imaginé qu'une image ne contenant que des scripts Python puisse poser pb.

J'ai donc modifié le worflow github ( voir dans .github/workflows) pour générer des images compatibles en utilisant Docker Buildx (platforms: linux/amd64,linux/arm64)

J'ai testé les images sur Rpi (Bulseye 64 bit) et maintenant cela fonctionne, par exemple :

docker run --name diematic -v ~/diematic/store/conf:/app/conf -v ~/diematic/store/log:/app/log ghcr.io/benoit3/diematic_to_mqtt:latest

J'ai vérifié que cela fonctionnait toujours sous ubuntu.

Par contre un effet de bord de l'utilisation de docker buildx est que l'image diematic_to_mqtt:main-latest est devenue" diematic_to_mqtt:latest (je rapelle je ne suis pas à l'aise avec les scripts de génération).

Sur quelle os/machine fais tu tes essais?

Quelle image vas tu chercher (attention diematic_to_mqtt:main-latest n'existe plus)

Benoit

famdeg commented 1 year ago

Bonjour Benoit,

Comme machine j'utilise un Khadas Vim1S, dédié home assistant, sous OS Ubuntu 22.04.1 LTS (arm64). Dans l'essai que j'ai effectué j'ai bien pris ta dernière image. J'ai refait le test avec tes lignes de commandes et le résultat est le même.

Unable to find image 'ghcr.io/benoit3/diematic_to_mqtt:latest' locally
latest: Pulling from benoit3/diematic_to_mqtt
docker: manifest unknown.

Ce lien pourra peut être t'aider (Peux être un problème d'accès au build).

Pour passer en Arm64 j'ai fait la même chose que toi sur mon Github.

Benoit3 commented 1 year ago

Effectivement cela fonctione sur Rpi/Bulseye, sur un PC/Ubuntu 20.04, mais pas sur RPi/Ubuntu 22.04 (sans doute une i,compatibilité de structure manifest) => une correction de workflow plus tard cela semble OK sur ces 3 plateformes (en version v1.2.2 / latest)