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'}]
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
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
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
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
va voir ce qui est envoyé dans Payload et non preview
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
Voici un output complet
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