claudegel / sinope-130

Neviweb130 custom component for Home Assistant to manage devices connected via a GT130 and wifi devices from Sinopé
GNU General Public License v3.0
63 stars 13 forks source link

Temperature update fails #174

Closed appaquet closed 11 months ago

appaquet commented 11 months ago

Bonjour,

Premièrement, merci beaucoup pour cet addon!

Je viens de remarquer après avoir redémarrer HA que les températures de mes thermostats ne se mettent plus à jour. Je peux changer la consigne, mais la température actuelle n'est pas mise à jour. Quand je redémarre HA, les températures se mettent à jour 1 fois au démarrage, mais pas de façon continue. Je roule sur la dernière version 2.3.6.

Voici l'erreur dans les logs:

Logger: homeassistant.helpers.entity
Source: custom_components/neviweb130/climate.py:1136 
Integration: Sinope Neviweb130 (documentation) 
First occurred: 1:00:58 PM (16 occurrences) 
Last logged: 1:42:55 PM

Update for climate.neviweb130_climate_salle_lavage fails
Update for climate.neviweb130_climate_salon_sous_sol fails
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 695, in async_update_ha_state
    await self.async_device_update()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 942, in async_device_update
    await hass.async_add_executor_job(self.update)
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/neviweb130/climate.py", line 1136, in update
    self._air_top = device_error_code["airTopSensor"]
                    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
KeyError: 'airTopSensor'

Merci!

claudegel commented 11 months ago

Bonjour vos thermostats sont des G2 et Sinopé a modifié des attributs dans neviweb. je n'ai pas de G2 donc je ne pouvais savoir que l'attribut airTopSensor est enlevé.

Je vais corriger mon code mais de votre coté si vous pouviez éditer le fichier climate.py et mettre un # devant la ligne 1136 puis redémarrer je voudrais savoir si il faudra aussi enlever les lignes 1137, 1138 et 1139 Si ca redémarre svp envoyez mois la ligne de vos log concernant l'update de vos thermostats

il me faut la ligne comme suit: [custom_components.neviweb130.climate] Updated attributes for neviweb130 climate «nom du thermostat» ceci va m'aider à faire la mise a jour

appaquet commented 11 months ago

Bonjour,

En fait, je crois que le problème est que le payload de l'appel à /attribute?attributes=errorCodeSet1 a changé. Je suppose que plutôt que de ne pas retourner le field quand il n'y a pas d'erreurs, ils retournent maintenant un objet vide.

J'ai ajouté quelques lignes de debug où je dump le JSON et le payload de l'appel à /attribute?attributes=errorCodeSet1 est:

{"errorCodeSet1": {}}

Donc, je crois qu'il faudrait probablement vérifier dans cette méthode si errorCodeSet1 est set ET n'est pas {}.

claudegel commented 11 months ago

Oui Sinopé a vidé les attributs de errorCodeSet1 mais ce parametre est toujours là et en plus ils l'ont rajouté à d'autres appareils qui ne l'avaient pas mais là aussi il est vide; {"errorCodeSet1": {}} Mais dans votre cas c'est le parametre device_error_code qui semble aussi avoir été vidé. Il contient device_error_code["airTopSensor"] et trois autres attributs. Donc je cherche a savoir si ont les enlève tous ou si c'est juste airTopSensor qui a été enlevé. vous pourriez commenter les lignes 1131, 1135, 1136, 1137, 1138 et 1139 et décommenter la ligne 1119 remplacer aussi la ligne 1129 elif self._is_double: devient else self._is_double:

ca va corriger le problème et mettre une ligne dans vos log: Updating error code.....

claudegel commented 11 months ago

Quand l'objet n'existe pas Neviweb ne retourne rien même pas de {"errorCodeSet1": {}} je pense Neviweb a vidé le errorCodeSet1 et va remplacer le nom des attributs sous peu. Donc pour le moment je voudrais simplement commenter les lignes fautives et voir où va Sinopé.

claudegel commented 11 months ago

J'ai créé une branche https://github.com/claudegel/sinope-130/tree/errorcodeset1 le fichier climate.py a été modifié pour que ça fonctionne et ajoute un peu de debug dans vos log Remplacez le fichier climate.py par le nouveau et redémarrez HA Puis validez dans vos log pour la ligne contenant: Updating error code..... ca va valider que errorCodeSet1 est bien vide. Ensuite je vais pouvoir mettre plus de validation dans le code

appaquet commented 11 months ago

Sur votre branche, je reçois bel et bien un errorCodeSet1 vide comme j'avais vu dans mon log précédent. En passant, ligne 1129 dans climate.py, j'ai du changer pour un elif plutôt qu'un else.

2023-08-25 20:07:42.114 WARNING (SyncWorker_0) [custom_components.neviweb130.climate] Updating error code: {}
...
claudegel commented 11 months ago

Donc on va commenter tous les attributs de errorCodeSet1 et les laisser à en attendant que Sinopé termine sa mise a jour pour les codes d'erreur. Comme ça si Sinopé ajoute de nouveau attribut dans errorCodeSet1 les vieux ne causeront pas de bug. Si jamais ils réutilisent l'un d'entre eux ce sera disponible. je vais améliorer le code pour tester le {}

claudegel commented 11 months ago

J'ai ajouté une validation pour {}. ça devrait être bon pour pousser une nouvelle version pour en faire profiter les autres qui ont possiblement le même problème.

claudegel commented 11 months ago

J'ai ajouté du code pour voir ce que Sinopé va faire avec errorCodeSet1. Si des attributs aparaissent pour ça on va le voir dans les logs

appaquet commented 11 months ago

La nouvelle version fonctionne. Merci!

claudegel commented 11 months ago

Il y a just une petite erreur mais qui n'empêche pas de fonctionner. Dans climate.py j'avais un «or» au lieu d'un «and», ligne 1120. J'ai corrigé dans le master et ca va apparaitre dans mon prochain release. En attendant vous pouvez copier le fichier climate.py et remplacer le votre mais ca ne cause pas de message d'erreur.

Merci de votre aide.