claudegel / sinope-130

Neviweb130 custom component for Home Assistant to manage devices connected via a GT130 and wifi devices from Sinopé

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Thermostat TH1310WF qui ne s'ajoute pas

simtreti opened this issue · comments

J'ai un nouveau thermostat th1310wf et il n'apparait pas dans Home assistant voici le log

Logger: homeassistant.components.climate
Source: custom_components/neviweb130/climate.py:1008
Integration: Climate (documentation, issues)
First occurred: 6:08:45 PM (1 occurrences)
Last logged: 6:08:45 PM

neviweb130: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 521, in _async_add_entity
await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 748, in async_device_update
await task
File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/neviweb130/climate.py", line 1008, in update
self._hour_energy_kwh_count = device_hourly_stats[1]["counter"] / 1000
IndexError: list index out of range

Pourtant HA le voit dans les log
'identifier': '246f28fffe60af4c', 'name': 'Chambre Simon', 'family': '738-HK', 'signature': {'model': 738, 'modelCfg': 4, 'softBuildCfg': 0, 'softVersion': {'major': 2, 'middle': 4, 'minor': 7}, 'hardRev': 0}, 'location$id': 11706, 'parentDevice$id': None, 'group$id': 43318, 'orderIdx': 0, 'sku': 'TH1310WF', 'vendor': 'Sinopé', 'url_en': None, 'url_fr': None}, {'id': 155648,

Bonjour, désolé j'étais à l'extérieur cette fin de semaine.
Le model 738 est bien reconnu dans HA mais il semble y avoir un bug avec les statistiques d'énergie.
Je vais créer une branche pour vous aider a débugger les stats.
Télécharge le fichier climate.py et remplace celui qui est dans config/custom_components/neviweb130
https://github.com/claudegel/sinope-130/tree/TH1310WF/custom_components/neviweb130
Dans les log de HA rechercher la ligne suivante et posté ici.
Energy data for TH1310WF....
Ca peut prendre environ 10 minutes pour que les stats commencent à se remplir et avoir l'information dans les log de HA

Bonjour Claude,

Voila ce que vous demandez !

2023-04-10 08:45:21.451 DEBUG (SyncWorker_1) [custom_components.neviweb130.climate] Energy data for TH1310WF: [{'period': 0, 'periodQuality': 0, 'counter': 396, 'counterDate': '2023-04-09T14:07:42-04:00', 'date': '2023-04-09T14:00:00-04:00'}, {'period': 271, 'periodQuality': 60, 'counter': 125, 'counterDate': '2023-04-09T13:07:43-04:00', 'date': '2023-04-09T13:00:00-04:00'}]

Bonjour Claude,

Est-ce qu'il serait possible également de créer 2 services pour modifier la valeur de temperature minimal et maximal du plancher quand le thermostat est en mode ambiant.

Les attributs sont: floorLimitHigh et floorLimitLow

image

Pour les stats il y a deux lignes de data donc ligne 0 et ligne 1.
Je vais activer le débug de mon coté pour mes TH1300ZB pour voir ce qui diffère.
je vais regarder pour ajouter ces deux services. Si on a les bon attributs ça devrait aller vite.
Je vois que tu as floorMaxAirTemperature à off. peux-tu m'envoyer ce qui est transmit quand tu le mets a on dans Neviweb. Ca doit être avec airFloorMode je pense.

On a déjà SET_FLOOR_AIR_LIMIT qui doit controler le floorMaxAirTemperature
et SET_AIR_FLOOR_MODE qui controle le mode de lecture de la temperature entre floor et air_by_floor
donc il faut ajouter SET_FLOOR_LIMIT_HIGH et SET_FLOOR_LIMIT_LOW
Je vais le mettre dans la même branche TH1310WF et je t'avise quand c'est pret a tester. Ca va toucher les fichiers __init__.py, climate.py, const.py et services.yaml

Bonjour Claude,

Pour le FloorMaxAirTemperature les valeurs sont de 5 à 36 et On ou Off

image

Pour les service low et high ca va me prendre les attributs envoyés à Neviweb quand tu change les valeurs dans Neviweb
pour les deux options FLOOR_LIMIT_LOW et FLOOR_LIMIT_HIGH. Quelques fois Neviweb transmet d'autres parametres en même temps

Voici ce qui est envoyé lorsqu'on les change

image

J'ai ajouté les deux services set_floor_limit_high et set_floor_limit_low.
Pas testé mais pas d'erreur au démarrage de HA
je vais regarder les stats après diner

Il faut downloader __init__.py, climate.py, const.py, services.yaml et redémarrer HA

Quel est la syntaxe a utiliser ?

comme ceci ca ne fonctionne pas

image

Bon de retour. dans les log il doit y avoir une ligne comme ceci
Floor limit =...
envois-moi ce que ca donne

2023-04-10 18:21:42.781 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140340671700352] Error handling message: extra keys not allowed @ data['sequence'][0]['FloorLimitLow']. Got 20 (invalid_format) Simon Tremblay from 192.168.10.61 (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36)

Sur mes zigbee la requette est la suivante:
{floorLimitHigh:{ "status":"on", "value": 5}, loadWattOutput2:{ "status":"off", "value": 0}}
Quelques fois neviweb envoi une combinaison de parametre et si on met pas la bonne combinaison ça ne marche pas
Je vais mettre cette combinaison ca devrait être la même pour toi

ok ok la requete est la suivante sur neviweb quand je change la valeur

image

va voir ce qui est envoyé dans Payload et non preview

Voila

image

voici ce que j'ai
requete

Moi je n'ai pas le loadWattOutput2

ca veut dire que pour les wifi c'est pas la même requete que pour les zigbee.
donc ca va prendre deux services:
set_floor_limit_low et set_wifi_floor_limit_low
Je vais souper et faire les changements en revenant

pas de presse, Merci !

J'ai changé __init__.py pour correspondre à ta requette

ok je vais attendre le service dédié au device wifi pour le tester

dans tes log de HA il doit y avoir une ligne
Floor limit =...
suivit de :
Data = ...
Request response =...
Json Data received=...

test la requete pour set_floor_limit_low et envois-moi les lignes ci-dessus
Aussi il faut que airFloorMode soit a airByFloor si c,est a floor il est possible que la requete set_floor_limit _low soit rejetée

Je ne trouve pas ce que vous me demandé dans le log. Mon mode est bien ambiant dans neviweb par contre c'est ecrit roomByFloor dans l'attribut airFloorMode: et no airByFloor

image

Voici un output complet

home-assistant_2023-04-11T00-08-41.018Z.log

Bon Je me suis enlever les 2 doigt de dans le nez hihi.
je tappais mal la requete dans le service. Tout fonctionne autant pour le Low que pour le High.

2023-04-10 20:21:14.627 DEBUG (SyncWorker_3) [custom_components.neviweb130] Floor limit = {'floorLimitLow': {'value': 20.0, 'status': 'on'}}
2023-04-10 20:21:14.900 DEBUG (SyncWorker_3) [custom_components.neviweb130] Data = {'floorLimitLow': {'value': 20.0, 'status': 'on'}}
2023-04-10 20:21:14.900 DEBUG (SyncWorker_3) [custom_components.neviweb130] Request response = 200
2023-04-10 20:21:14.900 DEBUG (SyncWorker_3) [custom_components.neviweb130] Json Data received= {'floorLimitLow': {'value': 20, 'status': 'on'}}
2023-04-10 20:21:14.900 DEBUG (SyncWorker_3) [custom_components.neviweb130] Content = b'{"floorLimitLow":{"value":20,"status":"on"}}'
2023-04-10 20:21:14.900 DEBUG (SyncWorker_3) [custom_components.neviweb130] Text = {"floorLimitLow":{"value":20,"status":"on"}}
2023-04-10 20:21:14.902 DEBUG (SyncWorker_10) [custom_components.neviweb130.climate] Updated attributes for neviweb130 climate

Maudit Sinopé, moi j'ai airByFloor et toi tu as roomByFloor
va falloir que je corrige aussi ce service
de mon coté ca marche bien avec
Floor limit = {'floorLimitHigh': {'status': 'on', 'value': 25.0}, 'loadWattOutput2': {'status': 'off', 'value': 0}}
et pour toi c'est
Floor limit = {'floorLimitLow': {'value': 20.0, 'status': 'on'}}
Il y a aussi un petit bug car les options vont de
7 – 36 pour le high
5 - 34 pour le low
et en plus il y a l'option "off"
Donc je vais faire deux different services pour le wifi et le zigbee et ajuster les limites

les limites de température est-ce que ce sont les même que moi pour le high et le low ?

C'est effectivement 7 à 36 pour le high et 5 à 34 pour le low

Ok de mon coté ca fonctionne. J'ai créé deux nouveaux services
set_wifi_floor_limit_high
set_wifi_floor_limit_low
J'ai changé les limites. Il me reste juste a trouver comment mettre off quand on désactive la limite
J'ai aussi ajouter roomByFloor pour le service set_air_floor_mode
Faut downloader __init__.py, climate.py, const.py et services.yaml

Tout fonctionne sauf le service pour floor limit low wifi

j'ai ce log

File "/config/custom_components/neviweb130/climate.py", line 674, in set_wifi_floor_limit_low_service
value = {"id": thermostat.unique_id, "level": service.data[ATTR_FLOOR_MIN], "limit": "low", "wifi": true}
NameError: name 'true' is not defined

oups voila. j'ai corrigé climate.py fallait mettre True au lieu de true

Yes ca fonctionne maintenant !

Parfait je vais regarder pour mettre le set_wifi_floor_limit_xx à off car il y a cet option dans Neviweb et on va avoir quelques chose de complet

Bonjour Claude,

J'ai 2 autres thermostat à ajouter du même modèle et il ne s'ajoute pas, pourtant avec les modif de croyais que ca contournais le problème. c'est toujours la meme erreur que pour le premier qui ne s'ajoutais pas. quel ligne dans climate.py je pourrais commenter pour contourner le probleme temporairement.

C'est vrai on a pas réglé le problème. Tu peux mettre un # devant les lignes 1120 et 1121

#                  self._hour_energy_kwh_count = device_hourly_stats[1]["counter"] / 1000
#                    self._hour_kwh = device_hourly_stats[1]["period"] / 1000

C'est possible que ce soit le [1] à remplacer par [0]. Faut que je regarde cela.
Aussi j'ai pobablement trouvé comment combiner les deux services set_wifi_floor_limit_xx et set_floor_limit_xx en détectant directement le type de device, wifi ou zigbee.
je vais tester cela ce soir

J'ai modifié climate.py pour tester les services. j'ai tout combiné dans set_floor_limit_xxx. et climate.py se charge de détecter si c'est un thermostat zigbee ou wifi pour envoyer la bonne requête. Donc plus besoin du service set_wifi_floor_limit_xxx
J'ai aussi ajouté du debug pour les stats de ton thermostat.
envois-moi la ligne de log Energy data for TH1310WF....

je pense que j'ai une piste pour tes nouveaux thermostats et les stats.
Puisque ce sont de nouvelles devices elles ont pas de stats disponible. Si tu mets [0] au lieu de [1] ca règle le oblème je pense mais pour les hourly stats ca va toujours te donner 0 comme valeur de consommation. C'est pour cela qu'on regarde la valeur pour l'heure d'avant dans les stats. [0] c'est l'heure présente qui n'est pas encore terminée et donc pas encore calculée par Neviweb. [1] c'est l'heure qui vient de se terminer et qui a été calculée par Neviweb. Un nouveau thermostat n'a pas encore de donnée donc [1] n'existe pas d'où l'erreur index out of range. Donc je vais tester si [1] existe avant de lire les lignes 1120 et 1121

Le service fonctionne sans prendre celui wifi effectivement !

Voici les logs demandé

2023-04-11 21:05:24.502 DEBUG (SyncWorker_8) [custom_components.neviweb130.climate] Energy data for TH1310WF: [{'period': 0, 'periodQuality': 0, 'counter': 409, 'counterDate': '2023-04-11T17:07:42-04:00', 'date': '2023-04-11T17:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 409, 'counterDate': '2023-04-11T16:07:41-04:00', 'date': '2023-04-11T16:00:00-04:00'}, {'period': 1, 'periodQuality': 60, 'counter': 408, 'counterDate': '2023-04-11T15:07:33-04:00', 'date': '2023-04-11T15:00:00-04:00'}, {'period': 0, 'periodQuality': 0, 'counter': 407, 'counterDate': '2023-04-10T22:07:40-04:00', 'date': '2023-04-10T22:00:00-04:00'}, {'period': 4, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T21:07:45-04:00', 'date': '2023-04-10T21:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T20:07:44-04:00', 'date': '2023-04-10T20:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T19:07:37-04:00', 'date': '2023-04-10T19:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T18:07:41-04:00', 'date': '2023-04-10T18:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T17:07:47-04:00', 'date': '2023-04-10T17:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T16:07:36-04:00', 'date': '2023-04-10T16:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T15:07:41-04:00', 'date': '2023-04-10T15:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T14:07:45-04:00', 'date': '2023-04-10T14:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T13:07:42-04:00', 'date': '2023-04-10T13:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T12:07:41-04:00', 'date': '2023-04-10T12:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T11:07:49-04:00', 'date': '2023-04-10T11:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T10:07:44-04:00', 'date': '2023-04-10T10:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 403, 'counterDate': '2023-04-10T09:07:40-04:00', 'date': '2023-04-10T09:00:00-04:00'}, {'period': 0, 'periodQuality': 0, 'counter': 396, 'counterDate': '2023-04-09T14:07:42-04:00', 'date': '2023-04-09T14:00:00-04:00'}, {'period': 271, 'periodQuality': 60, 'counter': 125, 'counterDate': '2023-04-09T13:07:43-04:00', 'date': '2023-04-09T13:00:00-04:00'}], size = 19

2023-04-11 21:05:30.605 DEBUG (SyncWorker_3) [custom_components.neviweb130.climate] Energy data for TH1310WF: [{'period': 0, 'periodQuality': 0, 'counter': 0, 'counterDate': '2023-04-11T20:07:37-04:00', 'date': '2023-04-11T20:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 0, 'counterDate': '2023-04-11T19:07:44-04:00', 'date': '2023-04-11T19:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 0, 'counterDate': '2023-04-11T18:07:42-04:00', 'date': '2023-04-11T18:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 0, 'counterDate': '2023-04-11T17:07:42-04:00', 'date': '2023-04-11T17:00:00-04:00'}, {'period': 0, 'periodQuality': 60, 'counter': 0, 'counterDate': '2023-04-11T16:07:41-04:00', 'date': '2023-04-11T16:00:00-04:00'}], size = 5

Ca c'est pour tes deux nouveaux thermostats ?

Oui un nouveau viens d'apparaitre donc j'en ai 2 maintenant, je crois que ca fait du sens ce que vous dite tant qu'il n'y pas de stats l'import ne fonctionne pas.

Ok alors avec la nouvelle version de climate.py je test si il y a aumoins deux lignes de stats et sinon je ne lit pas. Après une heure il y a deux lignes et ca se met a fonctionner.
je vais flusher le service set_wifi_floor_limit_xxx. On en a plus besoin
Je vais aussi mettre la même patch dans les stats des switch et lumières au cas ou on ajoute un nouvel appareil dans neviweb.

Super !

Bon j'ai enlevé le service set_wifi_floor_limit
J'ai mit une validation pour la longueur des stats avant de les lire pour les nouveau appareils
Ca devrait être tout beau

De mon côté tout est beau je crois que tu vas pouvoir faire une release !

Un autre merci à toi !

Ok alors je ferme cet issue et je publie une nouvelle version. Avises-moi si il y a un bug avec la nouvelle version