dvd-dev / hilo

Home Assistant Hilo Integration via HACS
MIT License
122 stars 26 forks source link

Pas de données pour tous les capteur de température des thermostats et du compteur électrique #274

Closed Sonoflex3 closed 10 months ago

Sonoflex3 commented 11 months ago

Configuration

Add your logs here.

Describe the bug

A clear and concise description of what the bug is.

Debug log


Add your logs here.
Sonoflex3 commented 11 months ago

Cette erreur provient d'une intégration personnalisée

Logger: homeassistant Source: custom_components/hilo/init.py:265 Integration: Hilo (documentation, issues) First occurred: 03:32:21 (2955 occurrences) Last logged: 11:20:56

Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/config/custom_components/hilo/init.py", line 265, in on_websocket_event updated_devices = self.devices.parse_values_received(event.arguments[0]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/pyhilo/devices.py", line 42, in parse_values_received val.pop("attribute"), val.pop("valueType") ^^^^^^^^^^^^^^^^^^^^ KeyError: 'valueType'

Sonoflex3 commented 11 months ago

I have 12 error log from hilo but i don't know how to link them properly

fcusson commented 11 months ago

Même erreur. Aucune information en provenance des capteurs, mais je suis toujours capable de contrôler les thermostats. Home Assistant ne reçoit pas la mise à jour de la température et assume 0C, mais les thermostats on correctement changé. Toutes informations sur la consommation d'énergie est indisponible pour le moment.

maxiemusic commented 11 months ago

J'ai la même problème que @fcusson

yvesgrignon commented 11 months ago

J'ai aussi ce problème. Et le problème rapporté par deathunt sur l'état prises/interrupteurs. HA n'est pas informé de l'état des appareils zigbee mais peux quand même les contrôler.

ic-dev21 commented 11 months ago

Bon matin à vous tous,

J'avais un peu de temps devant moi donc j'ai téléchargé les fichiers nécessaire au PR #272 localement. Ensuite j'ai pullé dans mon fork https://github.com/dvd-dev/python-hilo/pull/114

Écrasé les fichiers de mon custom_component local et installé mon fork the python-hilo par la commande suivante dans mon container:

pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo

Rebooté HA.

Malheureusement pas d'effet sur le problème. Par contre ça change les erreurs de place:

This error originated from a custom integration.

Logger: pyhilo
Source: custom_components/hilo/__init__.py:339 
Integration: Hilo (documentation, issues) 
First occurred: 9:41:05 AM (45 occurrences) 
Last logged: 9:41:05 AM

Unknown device attribute supported_attributes_list: ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired']
Unknown device attribute settable_attributes_list: ['TargetTemperature', 'GrapState']
Unknown device attribute supported_parameters_list: ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']
Unknown device attribute hilo_id: urn:hilo:philo:bc33acfffe2b042d:0
Unknown device attribute is_favorite: False

De mon côté j'ai exactement le même comportement que dans #259, pas de données de la part des thermostats tant qu'ils ne varient pas. Tous leurs setpoint sont à 0 dans l'interface aussi.

Par contre le smartenergy meter fonctionne toujours sans problèmes.

@nlz242 pourrait possiblement nous éclairer sur ces attributs? @julienld tu avais mis le doigt sur le bobo la dernière fois, des idées? @valleedelisle Aurais-tu du temps pour regarder ça?

julienld commented 11 months ago

J'ai regardé brièvement la semaine passé parce que j'étais en vacances, mais ça avait pas l'air simple à régler. J'imagine que c'est des changements du côté Hilo. Je ne pense pas avoir le temps de regarder ça prochainement avec les vacances qui sont terminées pour moi 😞

Si tu veux essayer... la première étape serait d'avoir des logs complet niveau debug (voir le README.md) et de rajouter des LOG.debug(f"var:{var}") avant les erreurs pour voir le contenu des variables...

alexcailyer commented 11 months ago

Bonjour,

je viens de recevoir mon installation d'Hilo aujourd'hui. Je confirme avoir la même erreur:

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/config/custom_components/hilo/__init__.py", line 265, in on_websocket_event
    updated_devices = self.devices.parse_values_received(event.arguments[0])
  File "/usr/local/lib/python3.10/site-packages/pyhilo/devices.py", line 42, in parse_values_received
    val.pop("attribute"), val.pop("valueType")
KeyError: 'valueType'
ic-dev21 commented 11 months ago

J'ai regardé brièvement la semaine passé parce que j'étais en vacances, mais ça avait pas l'air simple à régler. J'imagine que c'est des changements du côté Hilo. Je ne pense pas avoir le temps de regarder ça prochainement avec les vacances qui sont terminées pour moi 😞

Si tu veux essayer... la première étape serait d'avoir des logs complet niveau debug (voir le README.md) et de rajouter des LOG.debug(f"var:{var}") avant les erreurs pour voir le contenu des variables...

Alright. Rien ne m’empêche d’essayer mais ma seule et unique expérience python autre que 2-3 tutos c’est ce projet-ci. Merci pour la réponse rapide!

ic-dev21 commented 11 months ago

Bonjour,

je viens de recevoir mon installation d'Hilo aujourd'hui. Je confirme avoir la même erreur:

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/config/custom_components/hilo/__init__.py", line 265, in on_websocket_event
    updated_devices = self.devices.parse_values_received(event.arguments[0])
  File "/usr/local/lib/python3.10/site-packages/pyhilo/devices.py", line 42, in parse_values_received
    val.pop("attribute"), val.pop("valueType")
KeyError: 'valueType'

Quelle version de HA roules-tu? Je me demande si la version de python n’est pas en cause. 3.10 est deprecated sur 2023.8

alexcailyer commented 11 months ago

Je roule actuellement HA core 2023.5.4/Python 3.10.11

Je ne suis pas dev, mais selon l'erreur, il y a un problème avec la fonction qui "Parse" les valeurs retourné par hilo. Peut-être un changement de nom des attributs ou quelque chose du genre. Je vais "gosser" un peu, avec un peu de chance...

    def parse_values_received(self, values: list[dict[str, Any]]) -> list[HiloDe                                                    vice]:
        readings = []
        for val in values:
            val["device_attribute"] = self._api.dev_atts(
                val.pop("attribute"), val.pop("valueType")
            )
            readings.append(DeviceReading(**val))
        return self._map_readings_to_devices(readings)
ic-dev21 commented 11 months ago

Je roule actuellement HA core 2023.5.4/Python 3.10.11

Je ne suis pas dev, mais selon l'erreur, il y a un problème avec la fonction qui "Parse" les valeurs retourné par hilo. Peut-être un changement de nom des attributs ou quelque chose du genre. Je vais "gosser" un peu, avec un peu de chance...

    def parse_values_received(self, values: list[dict[str, Any]]) -> list[HiloDe                                                    vice]:
        readings = []
        for val in values:
            val["device_attribute"] = self._api.dev_atts(
                val.pop("attribute"), val.pop("valueType")
            )
            readings.append(DeviceReading(**val))
        return self._map_readings_to_devices(readings)

Pas un dev non plus, mais je zieutais dans ce coin-là aussi.

Merci de l'aide de tous!

ic-dev21 commented 11 months ago

Petit suivi avec le dernier update:

This error originated from a custom integration.

Logger: pyhilo
Source: custom_components/hilo/__init__.py:339 
Integration: Hilo (documentation, issues) 
First occurred: 7:09:48 PM (47 occurrences) 
Last logged: 7:09:48 PM

Unknown device attribute supported_parameters_list: ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']
Unknown device attribute hilo_id: urn:hilo:philo:bc33acfffe2b042d:0
Unknown device attribute is_favorite: False
Unknown device attribute sdi: C0619A404FB7
Unknown device attribute last_status_time: {'value': None}
This error originated from a custom integration.

Logger: custom_components.hilo
Source: custom_components/hilo/__init__.py:391 
Integration: Hilo (documentation, issues) 
First occurred: 7:09:49 PM (6 occurrences) 
Last logged: 7:10:51 PM

Failed to connect to websocket: Received invalid JSON
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/pyhilo/websocket.py", line 179, in _async_receive_json
    data = json.loads(msg.data[:-1])
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 44 (char 43)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/hilo/__init__.py", line 391, in start_websocket_loop
    await self._api.websocket.async_listen()
  File "/usr/local/lib/python3.11/site-packages/pyhilo/websocket.py", line 317, in async_listen
    message = await self._async_receive_json()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyhilo/websocket.py", line 181, in _async_receive_json
    raise InvalidMessageError("Received invalid JSON") from v_exc
pyhilo.exceptions.InvalidMessageError: Received invalid JSON
This error originated from a custom integration.

Logger: custom_components.hilo
Source: custom_components/hilo/__init__.py:293 
Integration: Hilo (documentation, issues) 
First occurred: 7:11:02 PM (1 occurrences) 
Last logged: 7:11:02 PM

Unhandled websocket event: WebsocketEvent(event_type_id=1, target='DeviceListInitialValuesReceived', arguments=[[{'id': 454697, 'identifier': '0xC0619A4000004113-smart_meter', 'name': 'Meter00', 'type': 'Meter', 'category': 'Other', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'Power,ZigbeeChannel,LastUpdate,Disconnected', 'supportedAttributesList': ['Power', 'ZigbeeChannel', 'LastUpdate', 'Disconnected'], 'settableAttributes': 'Power', 'settableAttributesList': ['Power'], 'supportedParameters': '', 'supportedParametersList': []}, {'id': 454741, 'identifier': 'BC33ACFFFE2BABDD', 'name': 'Thermostat cuisine', 'type': 'Thermostat', 'groupId': 97869, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454744, 'identifier': 'BC33ACFFFE21C79A', 'name': 'Thermostat chambre des maîtres', 'type': 'Thermostat', 'groupId': 97870, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454747, 'identifier': '5C0272FFFE823394', 'name': 'Thermostat salle de bain', 'type': 'Thermostat', 'groupId': 97872, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454750, 'identifier': 'BC33ACFFFE296648', 'name': 'Thermostat chambre Mégane', 'type': 'Thermostat', 'groupId': 97871, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454756, 'identifier': 'BC33ACFFFE2BAD65', 'name': 'Thermostat salle de jeux', 'type': 'Thermostat', 'groupId': 97874, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454761, 'identifier': '5C0272FFFE8233C9', 'name': 'thermostat salle de bain en bas', 'type': 'Thermostat', 'groupId': 97873, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454764, 'identifier': 'BC33ACFFFE295E81', 'name': 'Thermostat bureau', 'type': 'Thermostat', 'groupId': 97875, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454766, 'identifier': 'BC33ACFFFE2B042D', 'name': 'Thermostat chambre invité', 'type': 'Thermostat', 'groupId': 97876, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}]], invocation=None, error=None, timestamp=datetime.datetime(2023, 8, 11, 19, 9, 46, 39141), event_type='INVOKE')
alexcailyer commented 11 months ago

J'ai mis à jour l'intégration avec l'update d'hier [v2023.8.1] et tout fonctionne depuis. Merci pour votre travail, sans cette intégration, je n'aurais pas choisi Hilo.

Attention, je vois encore les erreurs mentionné hier dans les logs, mais tout semble fonctionner.

Python 3.11.4 Home Assistant core 2023.8.2

nlz242 commented 11 months ago

@nlz242 pourrait possiblement nous éclairer sur ces attributs?

Les appareils retournent plus d'attributs qu'avant, cependant ça ne devrait pas nuire à l'intégration HA. C'est normal que l'intégration fassent des warnings à ce sujet, mais pas des erreurs.

Les logs partagé ci-haut me laisse croire que l'intégration recoit du json invalide sur un message signalr... dans le passé j'ai vue ce comportement lorsqu'on tente de parse du JSON mais qu'en fait on a reçu du html (une page web d'erreur 404, ou 500 par exemple).

Il faudrait mettre un breakpoint sur le 'raise InvalidMessageError' et inspecter le message reçu (ou l'écrire dans un log). Mes 2 PR ( pythilo-hilo et https://github.com/dvd-dev/hilo/pull/272 ) nedevrait ni aider ni nuire...

@alexcailyer de ton côté tu confirmes qu'avec la derniere mise à jour, c'est ok?

On a graduellement passé les utilisateurs vers un nouveau mode de transmissions plus réactif, afin de diminuer la latence entre les interractions et le retour des informations via le cloud. Les nouveaux attributs viennent de la et on a maintenant 100% des utilisateurs sur ce mode. Les structures de données sont bonifiés mais rien n'a été retiré, afin de conserver la compatibilité avec plusieurs versions de l'app et HA, donc je serais surpris que le probleme vienne de la...

ic-dev21 commented 11 months ago

@nlz242 pourrait possiblement nous éclairer sur ces attributs?

Les appareils retournent plus d'attributs qu'avant, cependant ça ne devrait pas nuire à l'intégration HA. C'est normal que l'intégration fassent des warnings à ce sujet, mais pas des erreurs.

Les logs partagé ci-haut me laisse croire que l'intégration recoit du json invalide sur un message signalr... dans le passé j'ai vue ce comportement lorsqu'on tente de parse du JSON mais qu'en fait on a reçu du html (une page web d'erreur 404, ou 500 par exemple).

Il faudrait mettre un breakpoint sur le 'raise InvalidMessageError' et inspecter le message reçu (ou l'écrire dans un log). Mes 2 PR ( pythilo-hilo et #272 ) nedevrait ni aider ni nuire...

@alexcailyer de ton côté tu confirmes qu'avec la derniere mise à jour, c'est ok?

On a graduellement passé les utilisateurs vers un nouveau mode de transmissions plus réactif, afin de diminuer la latence entre les interractions et le retour des informations via le cloud. Les nouveaux attributs viennent de la et on a maintenant 100% des utilisateurs sur ce mode. Les structures de données sont bonifiés mais rien n'a été retiré, afin de conserver la compatibilité avec plusieurs versions de l'app et HA, donc je serais surpris que le probleme vienne de la...

Merci pour le retour. Toujours apprécié. Je suis tout sauf un dev alors je contribue au mieux de mes talents haha.

Étrange que j’ai exactement le même comportement que dans #259 , as-tu des pistes?

nlz242 commented 11 months ago

Merci pour le retour. Toujours apprécié. Je suis tout sauf un dev alors je contribue au mieux de mes talents haha.

Étrange que j’ai exactement le même comportement que dans #259 , as-tu des pistes?

J'ai lu en diagonale, mais de ce que je comprends... Quand on reboot l'intégration (soit l'OS, HA ou seulement l'intégration), ça prends du temps avant d'avoir des valeurs ? Si c'est ça, j'ai absolument une piste! Sur le SignalR, on publie plusieurs types de messages, incluant un message suite à la connexion avec les valeurs initial de tous les appareils... ce message n'est probablement pas traité par l'intégration HA... si c'est le cas, il faudrait "simplement" le traiter dans on_websocket_event de __init_py__.py

Je n'ai pas le nom du message sous la main... je ne suis pas sur mon ordi de travail... de mémoire le nom du message contient "Initial"... et je ne vois pas de "initial" dans le code mentionné ci-haut. Traiter ce message devrait être suffisant pour avoir les toutes les bonnes valeurs dès la connexion (et toutes reconnexions).

P.S. C'est bel et bien lié au Push vs Poll, avant l'intégration pollait et recevait 100% des devices+attributs+valeurs à chaque X secondes, au lieu d'avoir l'info globale une seule fois par connexion puis du différentiel.

alexcailyer commented 11 months ago

Oui ça fonctionne, mais je confirme que les valeurs de température prennent du temps avant d’arriver suite à un reboot de HA. Je viens d’attendre 5 minutes et mon thermostat est toujours à 0 c dans HA.

ic-dev21 commented 11 months ago

Merci pour le retour. Toujours apprécié. Je suis tout sauf un dev alors je contribue au mieux de mes talents haha. Étrange que j’ai exactement le même comportement que dans #259 , as-tu des pistes?

J'ai lu en diagonale, mais de ce que je comprends... Quand on reboot l'intégration (soit l'OS, HA ou seulement l'intégration), ça prends du temps avant d'avoir des valeurs ? Si c'est ça, j'ai absolument une piste! Sur le SignalR, on publie plusieurs types de messages, incluant un message suite à la connexion avec les valeurs initial de tous les appareils... ce message n'est probablement pas traité par l'intégration HA... si c'est le cas, il faudrait "simplement" le traiter dans on_websocket_event de init_py.py

Je n'ai pas le nom du message sous la main... je ne suis pas sur mon ordi de travail... de mémoire le nom du message contient "Initial"... et je ne vois pas de "initial" dans le code mentionné ci-haut. Traiter ce message devrait être suffisant pour avoir les toutes les bonnes valeurs dès la connexion (et toutes reconnexions).

P.S. C'est bel et bien lié au Push vs Poll, avant l'intégration pollait et recevait 100% des devices+attributs+valeurs à chaque X secondes, au lieu d'avoir l'info globale une seule fois par connexion puis du différentiel.

Yes en gros le comportement c’est que j’ai ni le setpoint ni la température actuelle des thermostats tant qu’ils ne vivent pas un changement.

Si manuellement je vais sur chaque thermostat et que je change la consigne, je l’obtiens dans HA.

Si les thermostats vivent un changement de température ambiante, là je le reçois dans HA.

Le initial je le vois qu’il chie, fait partie du json? Regarde le dernier log que j’ai mis dans ce fil.

DeviceListInitialValuesReceived

This error originated from a custom integration.

Logger: custom_components.hilo
Source: custom_components/hilo/__init__.py:293 
Integration: Hilo (documentation, issues) 
First occurred: 7:11:02 PM (1 occurrences) 
Last logged: 7:11:02 PM

Unhandled websocket event: WebsocketEvent(event_type_id=1, target='DeviceListInitialValuesReceived', arguments=[[{'id': 454697, 'identifier': '0xC0619A4000004113-smart_meter', 'name': 'Meter00', 'type': 'Meter', 'category': 'Other', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'Power,ZigbeeChannel,LastUpdate,Disconnected', 'supportedAttributesList': ['Power', 'ZigbeeChannel', 'LastUpdate', 'Disconnected'], 'settableAttributes': 'Power', 'settableAttributesList': ['Power'], 'supportedParameters': '', 'supportedParametersList': []}, {'id': 454741, 'identifier': 'BC33ACFFFE2BABDD', 'name': 'Thermostat cuisine', 'type': 'Thermostat', 'groupId': 97869, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454744, 'identifier': 'BC33ACFFFE21C79A', 'name': 'Thermostat chambre des maîtres', 'type': 'Thermostat', 'groupId': 97870, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454747, 'identifier': '5C0272FFFE823394', 'name': 'Thermostat salle de bain', 'type': 'Thermostat', 'groupId': 97872, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454750, 'identifier': 'BC33ACFFFE296648', 'name': 'Thermostat chambre Mégane', 'type': 'Thermostat', 'groupId': 97871, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454756, 'identifier': 'BC33ACFFFE2BAD65', 'name': 'Thermostat salle de jeux', 'type': 'Thermostat', 'groupId': 97874, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454761, 'identifier': '5C0272FFFE8233C9', 'name': 'thermostat salle de bain en bas', 'type': 'Thermostat', 'groupId': 97873, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454764, 'identifier': 'BC33ACFFFE295E81', 'name': 'Thermostat bureau', 'type': 'Thermostat', 'groupId': 97875, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}, {'id': 454766, 'identifier': 'BC33ACFFFE2B042D', 'name': 'Thermostat chambre invité', 'type': 'Thermostat', 'groupId': 97876, 'category': 'Heating', 'modelNumber': 'HT402', 'externalGroup': '', 'provider': 1, 'isFavorite': False, 'supportedAttributes': 'CurrentTemperature,TargetTemperature,Heating,Humidity,Power,DrmsState,MaxTempSetpoint,MinTempSetpoint,Disconnected,Version,ZigbeeVersion,Unpaired', 'supportedAttributesList': ['CurrentTemperature', 'TargetTemperature', 'Heating', 'Humidity', 'Power', 'DrmsState', 'MaxTempSetpoint', 'MinTempSetpoint', 'Disconnected', 'Version', 'ZigbeeVersion', 'Unpaired'], 'settableAttributes': 'TargetTemperature,GrapState', 'settableAttributesList': ['TargetTemperature', 'GrapState'], 'supportedParameters': 'MaxTempSetpoint,MinTempSetpoint,StateTemperatures,LoadConnected,LockKeypad,BackLight', 'supportedParametersList': ['MaxTempSetpoint', 'MinTempSetpoint', 'StateTemperatures', 'LoadConnected', 'LockKeypad', 'BackLight']}]], invocation=None, error=None, timestamp=datetime.datetime(2023, 8, 11, 19, 9, 46, 39141), event_type='INVOKE')
ic-dev21 commented 11 months ago

Update:

J'ai ajouté un:

                #new#
        elif event.target == "DeviceListInitialValuesReceived":
            LOG.warning("Device List Initial values Received")
                #end new#

Après le elif ici

https://github.com/dvd-dev/hilo/blob/a9df308a6d05a8f06f47858ab6b900686f50adeb/custom_components/hilo/__init__.py#L255-L271

Et clairement je passe dans ce bout-là de la boucle if au boot-up, voir log ci-bas:

This error originated from a custom integration.

Logger: custom_components.hilo
Source: custom_components/hilo/__init__.py:282 
Integration: Hilo (documentation, issues) 
First occurred: 2:27:04 PM (1 occurrences) 
Last logged: 2:27:04 PM

Device List Initial values Received

J'ai plus de temps pour jouer avec aujourd'hui mais si quelqu'un a le gout de ramasser la balle au bon je pense que c'est dans ce coin-là qu'il faut regarder.

Edit: @valleedelisle, @julienld, @alexcailyer rendu-là je suis rendu au bout de mon talent. Il faut réussir à traiter l'event websocket comme il faut. J'ai éssayé avec :

            updated_devices = self.devices.parse_values_received(event.arguments[0])
            for device in updated_devices:
                async_dispatcher_send(
                    self._hass, SIGNAL_UPDATE_ENTITY.format(device.id)
                )

Mais ça ne fonctionne pas.

ic-dev21 commented 11 months ago

Si j'ai un peu de temps cette semaine je vais remettre le logging en fonction sur hilo et pyhilo, je vais faire updater le setpoint de mes thermostats à bras et voir comment c'est reçu et par où c'est traité, j'ai l'impression que je dois faire invoquer la même chose/quelque chose d'assez semblable avec "DeviceListInitialValuesReceived".

Si quelqu'un d'autre a le temps d'essayer d'ici là, gâtez-vous!

ic-dev21 commented 11 months ago

Expérience faite, résultats:

Changement de setpoint:

2023-08-15 20:09:04.786 DEBUG (MainThread) [pyhilo] [Thermostat thermostat salle de bain en bas (454761)] Received <Reading target_temperature 15.0°C>

Changement de température (demandez-moi pas comment j'ai fait, j'aurais honte de vous répondre).

2023-08-15 20:10:26.984 DEBUG (MainThread) [pyhilo] [Thermostat thermostat salle de bain en bas (454761)] Received <Reading current_temperature 28.5°C>

@valleedelisle, j'pas un kingpin, mais serait-ce possible que comme "DeviceListInitialValuesReceived" contient une brique d'info (voir fichier joint) InitialValuesReceived.txt

Le "self.devices.parse_values_received(event.arguments[0])" ne peut pas fonctionner parce que:

  1. L'index 0 de la liste d'argument n'est pas ce qu'on veut pogner de toute manière
  2. L'info (consigne et température actuelle) n'y est pas de toute manière dans ce websocket event là.

@nlz242 Suis-je dans les patates avec mon interprétation du payload? Promis, je comprends vite quand on explique longtemps.

stetsonandblack commented 10 months ago

@ic-dev21 @valleedelisle , @julienld , @alexcailyer Salut les boys, bon je n'ai pas tant d'expérience dans Python, mais je suis un dev. J'ai debuggé le payload reçu ainsi que l'erreur et j'ai un fix temporaire. J'ai pas trop le temps de faire un pull request pour le momen (et j'ai pas testé tout les cas possible) mais l'erreur vient du fait que la clé valueType est manquante dans certains items de la list[HiloDevice] values dans la fonction parse_value_received.

Ce qui fait que ça crash.

Exemple:


  {
        "deviceId": xxxxx,
        "locationId": xxxxx,
        "timeStampUTC": "2023-08-18T21:10:35.9786702Z",
        "attribute": "Disconnected",
        "value": False,
    },

comparement aux autres items valides

   {
        "deviceId": xxxxx,
        "locationId": xxxxx,
        "timeStampUTC": "2023-08-18T21:10:35.9786697Z",
        "attribute": "Power",
        "value": 2516.0,
        "valueType": "Watt",
    },

J'ai juste fait un quick fix dans le fichier /lib/python3.9/site-packages/pyhilo/devices.py pour pouvoir bypass l'erreur,

if val.get("valueType")== None:
               val["valueType"]="OnOff"
 def parse_values_received(self, values: list[dict[str, Any]]) -> list[HiloDevice]:
        #LOG.debug(values)
        readings = []
        for val in values:
            if val.get("valueType")== None:
               val["valueType"]="OnOff"
            val["device_attribute"] = self._api.dev_atts(
                val.pop("attribute"), val.pop("valueType")
                #val.pop("attribute"), val.pop("event_type_id")
            )
            readings.append(DeviceReading(**val))
        return self._map_readings_to_devices(readings)

Par contre, est-ce que ça peut causer d'autre erreur ailleurs, peut-être. Je fake l'item qui n'a pas de valueType comme un OnOff mais dans le fond il faudrait surement le popper de la liste rendu là.

Bref voilà ma petite contribution du vendredi, cheers.

ic-dev21 commented 10 months ago

@ic-dev21 @valleedelisle , @julienld , @alexcailyer Salut les boys, bon je n'ai pas tant d'expérience dans Python, mais je suis un dev. J'ai debuggé le payload reçu ainsi que l'erreur et j'ai un fix temporaire. J'ai pas trop le temps de faire un pull request pour le momen (et j'ai pas testé tout les cas possible) mais l'erreur vient du fait que la clé valueType est manquante dans certains items de la list[HiloDevice] values dans la fonction parse_value_received.

Ce qui fait que ça crash.

Exemple:


  {
        "deviceId": xxxxx,
        "locationId": xxxxx,
        "timeStampUTC": "2023-08-18T21:10:35.9786702Z",
        "attribute": "Disconnected",
        "value": False,
    },

comparement aux autres items valides

   {
        "deviceId": xxxxx,
        "locationId": xxxxx,
        "timeStampUTC": "2023-08-18T21:10:35.9786697Z",
        "attribute": "Power",
        "value": 2516.0,
        "valueType": "Watt",
    },

J'ai juste fait un quick fix dans le fichier /lib/python3.9/site-packages/pyhilo/devices.py pour pouvoir bypass l'erreur,

if val.get("valueType")== None:
               val["valueType"]="OnOff"
 def parse_values_received(self, values: list[dict[str, Any]]) -> list[HiloDevice]:
        #LOG.debug(values)
        readings = []
        for val in values:
            if val.get("valueType")== None:
               val["valueType"]="OnOff"
            val["device_attribute"] = self._api.dev_atts(
                val.pop("attribute"), val.pop("valueType")
                #val.pop("attribute"), val.pop("event_type_id")
            )
            readings.append(DeviceReading(**val))
        return self._map_readings_to_devices(readings)

Par contre, est-ce que ça peut causer d'autre erreur ailleurs, peut-être. Je fake l'item qui n'a pas de valueType comme un OnOff mais dans le fond il faudrait surement le popper de la liste rendu là.

Bref voilà ma petite contribution du vendredi, cheers.

Merci, je suis zéro un dev donc pardonne mes questions possiblement stupide. Ça “règle” le task exception pour le ValueType mais ça ne fait rien pour les valeurs qui n’apparaissent pas au départ du websocket, right?

stetsonandblack commented 10 months ago

@ic-dev21 Moi ce bug la empêchait 100% des données de se récupérer. Donc, je n'avais aucun retour de donnée, aucun statut de switch, aucun degrés pour mes thermostats. J'activais une switch ça se décochait instantanément. Mes thermostats était tous à zéro. Donc, je ne suis pas sur, c'était quoi ton bug, mais si tous tes thermostats était à zéro, essaye ça lol.

ic-dev21 commented 10 months ago

@ic-dev21 Moi ce bug la empêchait 100% des données de se récupérer. Donc, je n'avais aucun retour de donnée, aucun statut de switch, aucun degrés pour mes thermostats. J'activais une switch ça se décochait instantanément. Mes thermostats était tous à zéro. Donc, je ne suis pas sur, c'était quoi ton bug, mais si tous tes thermostats était à zéro, essaye ça lol.

Mes switch sont sur zigbee2mqtt.

Pour ce qui est du comportement: Mes thermostats affichent 0 autant en température qu’en setpoint tant qu’il n’y a pas de changement après redémarrage de HA. Dès que ça varie ca se popule tranquillement pas vite. En dedans de quelques heures tout revient.

Ces infos là ne se retrouvent pas du tout dans le premier message websocket reçu de ce que je vois (y’a une pièce jointe plus haut si tu veux le log). C’est plus ça que je tentais de débugger au départ.

Tu peux faire le test sans ton fix. Repars HA et chauffe un peu un thermostat avec un séchoir exemple. Il va s’afficher rapidement. Change le setpoint et il rentre vite aussi.

Même chose pour un état de lumière sûrement. Flip une switch et tu dois la voir apparaître à partir de ce moment-là.

J’ai fait un PR semaine dernière qui élimine quelques warning du log mais ça règle pas tout malheureusement et je suis pas full hot en python/prog en général, c’est juste un hobby que je fais pour le fun.

stetsonandblack commented 10 months ago

@ic-dev21 Mmm, ben avec mon fix la, tout load dés le restart de HA. As-tu essayé voir ?

valleedelisle commented 10 months ago

Salut tout le monde! Désolé, j'suis un peu busy ces temps-ci et j'manque de temps. J'peux même pas tester car, pour une raison obscure, ma passerelle hilo semble avoir perdu contact avec mes devices. Je vais devoir me mettre là dessus éventuellement. Par contre, j'vous fais 100% confiance alors si vous me dites qu'un fix fonctionne, je vais le merger et le release.

Merci à vous tous pour votre implication!

ic-dev21 commented 10 months ago

Salut tout le monde! Désolé, j'suis un peu busy ces temps-ci et j'manque de temps. J'peux même pas tester car, pour une raison obscure, ma passerelle hilo semble avoir perdu contact avec mes devices. Je vais devoir me mettre là dessus éventuellement. Par contre, j'vous fais 100% confiance alors si vous me dites qu'un fix fonctionne, je vais le merger et le release.

Merci à vous tous pour votre implication!

Workin' on it.

Le fix de @stetsonandblack fonctionne à première vue. J'ai encore des warning pour le deviceinitialvaluesreceived car je n'ai pas trouvé moyen de bien le gérer encore.

Je suis pas assez ferré pour ajouter un string dans tes datatypes, mais le hilo_id va rester en warning tant que c'est pas fait.

Je vais essayer de te faire un/des PR bientôt.

julienld commented 10 months ago

J'ai aussi des problèmes avec l'app Hilo Android en ce moment. Les états des thermostat datent de hier au moins dans l'app officielle. Donc vérifiez votre app Hilo avant de faire des tests!

alexcailyer commented 10 months ago

Je viens de vérifier les mesures de température de mes thermostats dans l'app officiel et moi c'est 100% accurate.

Dans la fonction parse_values_received, on tente de la retirer avec la méthode pop sans valider si ValueType existe. Je viens de lire qu'on peut ajouter un 2e argument à la méthode pop qui au lieu de retourner une "KeyError", va retourner la valeur entrée.

val.pop("valueType") ==> val.pop("valueType", None)

Si ça fonctionne, ça serait peut-être un peu plus propre que d'inventer une nouvelle valeur pour la retirer par la suite, même si le résultat sera le même...

https://stackabuse.com/python-how-to-remove-a-key-from-a-dictionary/

Ça n'a pas rapport, mais test.py ça m'a l'air brisé. Hilo n'est jamais déclaré... Est-ce que c'était avant SignalR? J'essaie de monter un environnement test pour ne pas briser mon instance HA. from pyhilo import API, Hilo

ic-dev21 commented 10 months ago

Je viens de vérifier les mesures de température de mes thermostats dans l'app officiel et moi c'est 100% accurate.

Dans la fonction parse_values_received, on tente de la retirer avec la méthode pop sans valider si ValueType existe. Je viens de lire qu'on peut ajouter un 2e argument à la méthode pop qui au lieu de retourner une "KeyError", va retourner la valeur entrée.

val.pop("valueType") ==> val.pop("valueType", None)

Si ça fonctionne, ça serait peut-être un peu plus propre que d'inventer une nouvelle valeur pour la retirer par la suite, même si le résultat sera le même...

https://stackabuse.com/python-how-to-remove-a-key-from-a-dictionary/

Ça n'a pas rapport, mais test.py ça m'a l'air brisé. Hilo n'est jamais déclaré... Est-ce que c'était avant SignalR? J'essaie de monter un environnement test pour ne pas briser mon instance HA. from pyhilo import API, Hilo

Je confirme, tout est spot-on côté valeurs ici aussi sous iOS.

J'ai du temps aujourd'hui (blonde travaille et enfant chez mamie, wouhou!) si ton environnement de test te fait trop chier je peux l'essayer ici en local.

stetsonandblack commented 10 months ago

@alexcailyer Mon fix est surement pas la meilleur chose a merger tel quel, moi en gros je testais des affaires pour que sa fonctionne et j'ai juste posté la première chose qui fonctionnait car je travaillais en même temps lol. Donc oui le deuxième argument pour pop serait plus clean. Moi je n'ais pas oser balancer une valeur None dans la nouvelle propriété device_attribute, je me disais que ca peterais p-e plus loin.Je n'ai pas regardé ce qui se passe après dans

readings.append(DeviceReading(**val))
        return self._map_readings_to_devices(readings)
ic-dev21 commented 10 months ago

Je viens de l'essayer live @alexcailyer , fonctionne.

ic-dev21 commented 10 months ago

@valleedelisle PR prête

nlz242 commented 10 months ago

Good job guys! Désolé de pas être plus disponible, je suis à l'extérieur en vacances.

Le dim. 20 août 2023, 19 h 30, Ian C. @.***> a écrit :

@valleedelisle https://github.com/valleedelisle PR prête

— Reply to this email directly, view it on GitHub https://github.com/dvd-dev/hilo/issues/274#issuecomment-1685424984, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAZNVCJHXKOROSGQDWQS56DXWKMZFANCNFSM6AAAAAA3FI2PWU . You are receiving this because you were mentioned.Message ID: @.***>

zadori commented 10 months ago

@valleedelisle PR prête

J'aimerais essayer ta PR par contre je ne trouve pas ou appliquer les modifications manuellement dans pyhilo (vu que c'est un package) dans HomeAssistant. Quand je vais dans mon Studio Code sur HA, dans /lib/Pyhon3.11/ je n'ai rien qui réfère à pyhilo

ic-dev21 commented 10 months ago

@valleedelisle PR prête

J'aimerais essayer ta PR par contre je ne trouve pas ou appliquer les modifications manuellement dans pyhilo (vu que c'est un package) dans HomeAssistant. Quand je vais dans mon Studio Code sur HA, dans /lib/Pyhon3.11/ je n'ai rien qui réfère à pyhilo

Salut, je roule sous docker. Je vais dans le terminal de docker et avec

pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo

J’installe mon fork.

zadori commented 10 months ago

@valleedelisle PR prête

J'aimerais essayer ta PR par contre je ne trouve pas ou appliquer les modifications manuellement dans pyhilo (vu que c'est un package) dans HomeAssistant. Quand je vais dans mon Studio Code sur HA, dans /lib/Pyhon3.11/ je n'ai rien qui réfère à pyhilo

Salut, je roule sous docker. Je vais dans le terminal de docker et avec

pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo

J’installe mon fork.

Ah ok ouin, je suis sur HA OS pi je viens de voir que c'est pas mal plus compliqué pour tester des packages de dépendences. Demain je vais peut-être avoir le temps de setup ça

valleedelisle commented 10 months ago

Je viens de tout merger et releaser

ic-dev21 commented 10 months ago

Ceux qui le peuvent, pouvez-vous updater Hilo et nous donner des news?

alexcailyer commented 10 months ago

J’essaie ça en revenant de la job.

Le mar. 22 août 2023 à 17:54, Ian C. @.***> a écrit :

Ceux qui le peuvent, pouvez-vous updater Hilo et nous donner des news?

— Reply to this email directly, view it on GitHub https://github.com/dvd-dev/hilo/issues/274#issuecomment-1688981026, or unsubscribe https://github.com/notifications/unsubscribe-auth/AK4537TTWP2CVOZM2FCT5DDXWUTCFANCNFSM6AAAAAA3FI2PWU . You are receiving this because you were mentioned.Message ID: @.***>

skimaniac commented 10 months ago

J'ai fait l'update sur mon raspberry HAOS et sur Docker et rien n'a changé 🤔

Je vais essayé de regarder les log pour voir si il y a de quoi de différents d'avant.

zadori commented 10 months ago

J’ai fait lupdate sur mon Proxmox avec HAPS et tout fonctionne parfaitement!

Sonoflex3 commented 10 months ago

Malheuresement je viens de faire l'update et j'ai toujours 0⁰ comme données sur tout les thermostat et ainsi que 0w pour le compteur électrique plusieurs code d'erreur dans mon log je vais essayer de verifier si je peux trouve de quoi 😮‍💨

maxiemusic commented 10 months ago

Ca fonctionne pour moi! Peut être tu peut juste commercer avec la dernière étape pour éviter un reinstall, ça c’est que j’ai fais:

effacer l’intégration et le repo hacs. File editor > effacer hilo_state.yaml Reboot HA Va dans Développer Tools > statistics et « fix issue » pour tout hilo. Ca va effacer les vieux sensors. Reboot HA rajoute repo hacs et integration Hilo. Fait ton configuration. Attends 5 minute et reboot HA

important reboot ton gateway hilo dans l’appli iOS our Android. Après que j’ai fait ça, les donnes sont apparu

Sent from Outlook for iOShttps://aka.ms/o0ukef


From: Sonoflex3 @.> Sent: Tuesday, August 22, 2023 6:53:55 PM To: dvd-dev/hilo @.> Cc: maxiemusic @.>; Comment @.> Subject: Re: [dvd-dev/hilo] Pas de données pour tous les capteur de température des thermostats et du compteur électrique (Issue #274)

Reopened #274https://github.com/dvd-dev/hilo/issues/274.

— Reply to this email directly, view it on GitHubhttps://github.com/dvd-dev/hilo/issues/274#event-10163785861, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AV363M2ZM6EQFRSGKCKJ4S3XWU2AHANCNFSM6AAAAAA3FI2PWU. You are receiving this because you commented.Message ID: @.***>

ic-dev21 commented 10 months ago

Câline y’a quelque chose qui doit nous échapper, de mon côté ça marche tempête IMG_0473 IMG_0472

alexcailyer commented 10 months ago

Pour ma part, ça fonctionne. Les valeurs sont disponible dès le démarrage de Home Assistant Core après l'update.

J'ai tout de même vérifier les logs et parmi quelques avertissements, j'avais une erreur pour le sensor hilo_energy_total. Cependant, il semble OK... Possiblement que ça se produit seulement au démarrage. Je vais surveiller...

Merci et bonne soirée messieurs!


Error while setting up utility_meter platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 362, in _async_setup_platform
    await asyncio.shield(task)
  File "/usr/src/homeassistant/homeassistant/components/utility_meter/sensor.py", line 232, in async_setup_platform
    conf_meter_source = hass.data[DATA_UTILITY][meter][CONF_SOURCE_SENSOR]
                        ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
KeyError: 'hilo_energy_total'
Eradash commented 10 months ago

De mon côté, j'ai toujours pas de données sur chacun de mes thermostats, et rien du tout sur mon énergie totale, les 2 dernières versions n'ont rien changé (même après avoir désinstallé et réinstallé l'intégration) J'ai quand même un log:

Traceback (most recent call last):
  File "/config/custom_components/hilo/__init__.py", line 265, in on_websocket_event
    updated_devices = self.devices.parse_values_received(event.arguments[0])
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyhilo/devices.py", line 44, in parse_values_received
    readings.append(DeviceReading(**val))
                    ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyhilo/device/__init__.py", line 226, in __init__
    if self.device_attribute and self.device_attribute.value_type != "boolean"
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'value_type'
alexcailyer commented 10 months ago

Je viens de comprendre un truc, la méthode pop() permet bien de retirer du dictionary "val", la clé valueType, mais retourne aussi sa valeur. Comme ils sont utilisés pour les deux arguments de la fonction dev_atts(), je suppose qu'avant valueType retournait toujours quelque chose quitte à retourner un str "null", mais que maintenant ça arrive que la clé n'est pas présente ce qui nous causait la KeyError.

En regardant les classes DeviceReading et puis ensuite DeviceAttribute, on retrouve des if,else statement qui indique:

        if self.hilo_value_type in ("null", "OnOff"):
            value = "boolean"
        else:
            value = HILO_UNIT_CONVERSION.get(
                self.hilo_value_type, camel_to_snake(self.hilo_value_type)
            )

On forçait la valeur "boolean" à value_type quand hilo retournait notre str "null" ou "OnOff" dans valueType ou bien on regardait notre constante HILO_UNIT_CONVERSION qui n'a aucune entrée quand la valeur est nulle (None).

Je crois que dans ce cas là, on pourrait retourner le str "null" lorsque valueType n'est pas présent dans val pour que la classe DeviceAttribute puisse forcer la valeur str "boolean.

Je viens de faire le changement dans mon instance HA core et c'est toujours fonctionnel pour moi. J'ai tout de même du mal à comprendre pourquoi ça fonctionne pour certains et pas pour d'autres, mais l'erreur de @Eradash semble être causé par notre None.

    def parse_values_received(self, values: list[dict[str, Any]]) -> list[HiloDevice]:
        readings = []
        for val in values:
            val["device_attribute"] = self._api.dev_atts(
                val.pop("attribute"), val.pop("valueType", "null")
            )
            readings.append(DeviceReading(**val))
        return self._map_readings_to_devices(readings)