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 11 months ago

Sonoflex3 commented 12 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.
stetsonandblack commented 11 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)

C'est exactement pour ce genre de raison que j'avais forcé OnOff lol. La raison pour laquelle sa fonctionne pour certain est peut etre a cause de la version du python qui interprète les none et null d'une façon différente?

alexcailyer commented 11 months ago

Quand j’ai lu le message de @Eradash, je pensais à toi. Je ne connais pas le python… mais avec le reverse engineering, on peut tout faire!

De ce que je comprends, le keyword None, c’est le nulle en python alors que "null", c’est simplement un string retourné par hilo.

Pour retrouver "null" un peu plus loin dans les classes comme moyen de remplacement vers "boolean". Je suppose qu’avant hilo retournait "null" dans valueType quand il n’avait pas de valeur alors qu’aujourd’hui parfois valueType n’est pas présent à la place.

Le mer. 23 août 2023 à 06:53, stetsonandblack @.***> a écrit :

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 https://github.com/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)

C'est exactement pour ce genre de raison que j'avais forcé OnOff lol. La raison pour laquelle sa fonctionne pour certain est peut etre a cause de la version du python qui interprète les none et null d'une façon différente?

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

ic-dev21 commented 11 months ago

Je suis dispo pour faire des tests au besoin! À la gang on va l’avoir.

Pour l'instant j'ai pris le temps de bien linter le code pour partir sur une base propre.

ic-dev21 commented 11 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)

Je vais essayer ça dans les prochains jours. Merci encore à tous pour le coup de main, vous m'en apprenez beaucoup!

ic-dev21 commented 11 months ago

Bonsoir, j'avais quelques minutes, j'ai donc tenté l'expérience avec la suggestion de @alexcailyer sur mon install. Fait un commit dans mon fork et installé celui-ci avec: pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo à l'intérieur de mon container HA.

Rebooté HA par la suite car sinon installer mon fork n'a aucun effet.

Tout fonctionne numéro 1 ici, autant les thermostats que le compteur.

S'il y a d'autres volontaires pour faire le test, car mon échantillon de 1 n'est pas nécessairement gage de succès. @julienld @stetsonandblack @Eradash @skimaniac @Sonoflex3

Merci d'avance!

skimaniac commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇

C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂

Merci @alexcailyer, @ic-dev21 et tous les autres :)

ic-dev21 commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇

C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂

Merci @alexcailyer, @ic-dev21 et tous les autres :)

Pour HA OS, méchante bonne question, est-ce que le OS donne accès à un interface CLI?

zadori commented 11 months ago

Il y a un add on pour ajouter SSH et Terminal pour y avoir accès

skimaniac commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇 C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂 Merci @alexcailyer, @ic-dev21 et tous les autres :)

Pour HA OS, méchante bonne question, est-ce que le OS donne accès à un interface CLI?

Oui y a un terminal, la mémoire me revient, @valleedelisle m'avait fait jouer dans ça y a un bout, faut désactivé la protection de l'addon et le redémarrer, ensuite dans le terminal de HA tu peux aller dans le docker de HA via la commande "docker exec -it homeassistant bash" et ensuite tu entre ta ligne de commande " pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo" tu redémarre HA et bingo ça marche :)

Ne pas oublier de remettre la protection de l'addon après ;)

ic-dev21 commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇 C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂 Merci @alexcailyer, @ic-dev21 et tous les autres :)

Pour HA OS, méchante bonne question, est-ce que le OS donne accès à un interface CLI?

Oui y a un terminal, la mémoire me revient, @valleedelisle m'avait fait jouer dans ça y a un bout, faut désactivé la protection de l'addon et le redémarrer, ensuite dans le terminal de HA tu peux aller dans le docker de HA via la commande "docker exec -it homeassistant bash" et ensuite tu entre ta ligne de commande " pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo" tu redémarre HA et bingo ça marche :)

C'est ce que je fais, mais comme je suis un peu jambon en terminal j'utilise Portainer-CE pour mes dockers et je peux ouvrir le terminal du docker direct dans un browser.

skimaniac commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇 C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂 Merci @alexcailyer, @ic-dev21 et tous les autres :)

Pour HA OS, méchante bonne question, est-ce que le OS donne accès à un interface CLI?

Oui y a un terminal, la mémoire me revient, @valleedelisle m'avait fait jouer dans ça y a un bout, faut désactivé la protection de l'addon et le redémarrer, ensuite dans le terminal de HA tu peux aller dans le docker de HA via la commande "docker exec -it homeassistant bash" et ensuite tu entre ta ligne de commande " pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo" tu redémarre HA et bingo ça marche :)

C'est ce que je fais, mais comme je suis un peu jambon en terminal j'utilise Portainer-CE pour mes dockers et je peux ouvrir le terminal du docker direct dans un browser.

oui pour un installation avec Docker, mais avec HAOS tu peux pas faire ça, mais il y a un docker dans ça aussi, je peu pas l'expliquer mais c'est comme ça 🤪

l'important c'est que ça fonctionne pour moi sur mes 2 machines 🎉

ic-dev21 commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇 C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂 Merci @alexcailyer, @ic-dev21 et tous les autres :)

Pour HA OS, méchante bonne question, est-ce que le OS donne accès à un interface CLI?

Oui y a un terminal, la mémoire me revient, @valleedelisle m'avait fait jouer dans ça y a un bout, faut désactivé la protection de l'addon et le redémarrer, ensuite dans le terminal de HA tu peux aller dans le docker de HA via la commande "docker exec -it homeassistant bash" et ensuite tu entre ta ligne de commande " pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo" tu redémarre HA et bingo ça marche :)

C'est ce que je fais, mais comme je suis un peu jambon en terminal j'utilise Portainer-CE pour mes dockers et je peux ouvrir le terminal du docker direct dans un browser.

oui pour un installation avec Docker, mais avec HAOS tu peux pas faire ça, mais il y a un docker dans ça aussi, je peu pas l'expliquer mais c'est comme ça 🤪

l'important c'est que ça fonctionne pour moi sur mes 2 machines 🎉

Incluant ton compteur? M'semble ça fait un bon moment qu'il marchait plus pour toi? Si oui, tant mieux!

skimaniac commented 11 months ago

Yahoo! ça fonctionne avec mon installation docker 🥇 C'est faisable sur HAOS sans avoir à faire un BAC en informatique? 😂 Merci @alexcailyer, @ic-dev21 et tous les autres :)

Pour HA OS, méchante bonne question, est-ce que le OS donne accès à un interface CLI?

Oui y a un terminal, la mémoire me revient, @valleedelisle m'avait fait jouer dans ça y a un bout, faut désactivé la protection de l'addon et le redémarrer, ensuite dans le terminal de HA tu peux aller dans le docker de HA via la commande "docker exec -it homeassistant bash" et ensuite tu entre ta ligne de commande " pip install -e git+https://github.com/ic-dev21/python-hilo.git#egg=python-hilo" tu redémarre HA et bingo ça marche :)

C'est ce que je fais, mais comme je suis un peu jambon en terminal j'utilise Portainer-CE pour mes dockers et je peux ouvrir le terminal du docker direct dans un browser.

oui pour un installation avec Docker, mais avec HAOS tu peux pas faire ça, mais il y a un docker dans ça aussi, je peu pas l'expliquer mais c'est comme ça 🤪 l'important c'est que ça fonctionne pour moi sur mes 2 machines 🎉

Incluant ton compteur? M'semble ça fait un bon moment qu'il marchait plus pour toi? Si oui, tant mieux!

Oui le compteur... il a arrêter le 21 juin, il était temps qu'il reprenne du service 😂

skimaniac commented 11 months ago

Le seul bug que j'ai rencontré à date c'est que la mise a jour de HA core 2023-8-4 a arrêter le compteur (j'ai pas regarder les thermostats) je suis en vacances à 1800km et le réseau est pas toujours sur la coche ;)

Mais en refaisant la correction via la CLI c'est revenu.

Sonoflex3 commented 11 months ago

Bon petit update! J'ai essayé de desinstaller selon les étapes de @maxiemusic mon compteur ne fonctionne toujours pas mais j'ai vu une amélioration que je n'avais peut-être pas remarqué apres la mise à jour! Les données des thermostats s'affiche après un changement comme mentionné plus haut cepandant silence radio pour mon compteur encore et ce depuis fin juin j'ai même essayé de lui definir un état mais je ne pas réussi😔 alors j'ai essayé @ic-dev21 avec le terminal et les commandes que tu a mentionnés et j'ai vu qu'une certaine mise a jour était disponible donc je l'ai faite mais je crois avoir fait un erreur dans ta deuxième commande car mon compteur ne fonctionne toujours pas je me débrouille mais si quelqu'un peut voir une erreur peut-être je pourrais me réessayer !

20230825_202127.jpg

20230825_202328.jpg

Screenshot_20230825_204343_Home Assistant.jpg

Screenshot_20230825_204403_Home Assistant.jpg

alexcailyer commented 11 months ago

@Sonoflex3, je vois une typo: https://github.com-ic-dev21/python-hilo.git => https://github.com/ic-dev21/python-hilo.git

Sonoflex3 commented 11 months ago

Problème réglé 😁 !!! Merci énormément @ic-dev21 ainsi que @alexcailyer et tous les autres évidemment

Screenshot_20230825_214558_Home Assistant.jpg

ic-dev21 commented 11 months ago

Wouhou!