Intégration IPX800 Home Assistant

Cool, cela va permettre de réduire la fréquence d’interrogation de ton intégration tout en amiliorant la réactivité. De plus avec ça on pourra utiliser le même Push pour l’ensemble des voies de l’PX, se qui va faire gagner pas mal de temps lors du setup côté IPX.

Pas de soucis, j’ai jamais ouvert d’issue mais je vais regarder comment faire.

Le projet a vraiment bien avancé, je me rappel encore du jour où tu as créé ce post, j’etais le premier à te répondre en mai 2020, c’est cool de voir que 2 ans après tu es encore actif et ouvert aux modifications. Un grand merci à toi !

1 « J'aime »

Super merci pour le lien. Ça marche se passe
Bonne soirée

Normalement j’ai ouvert l’issue, peux-tu me dire si c’est OK pour toi ?

Hors sujet :
La nostalgie me gagne, je viens en fait de retomber sur Mon premier message sur ce forum, il date de novembre 2019 et j’avais justement contribué à l’intégration de l’ipx800 dans HA qui a l’époque était un gros frein pour ma migration de Domoticz à HA.

J’avais d’ailleur par la suite fait la promotion de l’intégration de @Mati24 sur le forum officiel ICI en mai 2020.

Home assistant et l’intégration de l’IPX ont bien évolué en 2ans et demi ! Et je vois qu’il règne tjrs içi une excellente ambiance comme avec Home Assistant, ça fais plaisir à voir !

3 « J'aime »

Yes c’est bon pour l’issuen je m’absente quelques semaines, je ferais à mon retour

2 « J'aime »

Merci pour la mise à jour @Mati24, je testerai la nouvelle version dès que possible pour moi car actuellement je suis en vacances puis après ce sera préparation du baptême de ma deuxième.

Du coup s’il y a des volontaires pour tester, ce sera certainement plus rapide que moi :wink:

Merci beaucoup @Mati24 pour la nouvelle version d’intégration d’aujourd’hui qui fonctionne à merveille !

Je partage ici ma config pour ceux que ça intéresse :

Le matos :
1x Ipx800 v4
1x X-8R
2x X-Dimmer

1 push global :

3 scenes pour déclencher le push global :

2 « J'aime »

Bonjour,
je me permet de relancer le sujet, car je galère avec l’intégration de ma V4 dans HA.
J’arrive à remonter l’état des relais physiques, à les actionner dans HA, et lors de la manip depuis le dashboard de l’ipx tout se met à jour dans HA.
Le soucis vient des entrées analogiques : impossible de remonter la valeur d’une tc-100 (sur l’entrée analogique 1), j’ai même testé la syntaxe de David69, sans succès. J’ai systématiquement une erreur dans HA. :

Error doing job: Task exception was never retrieved

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 168, in _handle_refresh_interval
    await self._async_refresh(log_failures=True, scheduled=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 316, in _async_refresh
    self.async_update_listeners()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 121, in async_update_listeners
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 381, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 545, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 583, in _async_write_ha_state
    state = self._stringify_state(available)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 551, in _stringify_state
    if (state := self.state) is None:
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 680, in state
    value = self.native_value
  File "/config/custom_components/ipx800v4/sensor.py", line 95, in native_value
    return self.coordinator.data[f"A{self._id}"]
KeyError: 'A1'

et

Unexpected exception from <bound method DataUpdateCoordinator.async_refresh of <homeassistant.helpers.update_coordinator.DataUpdateCoordinator object at 0x7f995a3970>>

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/debounce.py", line 109, in _handle_timer_finish
    await task
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 201, in async_refresh
    await self._async_refresh(log_failures=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 316, in _async_refresh
    self.async_update_listeners()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 121, in async_update_listeners
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 381, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 545, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 583, in _async_write_ha_state
    state = self._stringify_state(available)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 551, in _stringify_state
    if (state := self.state) is None:
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 680, in state
    value = self.native_value
  File "/config/custom_components/ipx800v4/sensor.py", line 95, in native_value
    return self.coordinator.data[f"A{self._id}"]
KeyError: 'A1'

Lorsque je lance la commande en http, j’ai bien une réponse en A1 :
http://192.168.1.28:85/api/xdevices.json?key=la_clé_API&Get=A

ipx800_v4_analogique

Cela parle-t-il à quelqu’un?

–>Mike

L’erreur arrive quand l’IPX800 renvoie une réponse incomplète car il est surchargé
Il faut réduire le délais entre deux interrogations d’état, et éviter d’avoir plusieurs systèmes à l’interroger en même temps

Merci pour la réponse… :slightly_smiling_face:
J’ai désactivé domoticz, qui tournait en //, (après de longues années, je migre de DZ vers HA, & je garde celui-ci actif, le temps que la migration & tous les capteurs/actionneurs/scénarios soient opérationnels dans HA… :innocent:).
J’avais 2 sources de données :
une pour une ipx800 V.3 + extension x8R
et une pour l’ipx800 V.4 en question,
les 2 avec un taux de rafraichissement de 5sec que j’ai passé à 30 sec pour les tests.
Mais l’erreur persiste, dès que j’actionne un relais, les valeurs devraient s’adapter avec le push global mis en place comme sur les screens de Neuvidor, mais, à la place, j’ai toujours ces 2 erreurs…
(J’ai même tenté le remplacement du code du fichier sensor.py de la version stable, par celui de la branche dev du github, mais sans succès.) :thinking:
Je sèche.

Tu n’as jamais la valeur qui remonte ? Car tu pourrais remplacer la ligne 95 par return self.coordinator.data.get(f"A{self._id}"), pour ignorer les retours incomplets.
si tu fais un http://192.168.1.28:85/api/xdevices.json?key=la_clé_API&Get=all, tu as bien le A1 ?

Bonjour,
d’abord, merci de t’intéresser à mon problème… :smile:
comme je l’ai indiqué dans un message précédent, la commande manuelle via le browser me donne bien une valeur dans A1 (à chaque fois, même en appuyant pleins de fois de suite sur F5, pour forcer un rafraichissement)
Mais je n’ai même pas eu une seule fois la valeur remontée dans HA. Ce qui est bizarre, c’est que la commande de relais fonctionne et s’actualise des 2 sens. Donc, cela ne devrait pas être un problème de clé API…
Mon niveau en pithon est nul! :sweat_smile:, mais je vais tester le changement que tu proposes, ça, c’est dans mes corde… :laughing:
–>Mike

Avec la modif de code proposée, j’ai un petit mieux :
dans la valeur du capteur, au lieu de « Indisponible », j’ai « (None,) °C » et plus d’erreurs dans les Logs…
Mais j’ai toujours pas ma température affichée… :sweat_smile:

je voulais que tu testes avec un Get=all et non juste Get=A, qui sollicite plus l’iPX

Oups, j’avais mal lu, désolé… : :face_with_hand_over_mouth:
Get=all ou Get=A, me donnent bien la même réponse dans firefox :

ipx800_v4_analogique_2

j’ai publié une nouvelle version dev si tu veux tester

ok, je vais tester…
je remplace tous les fichiers par ceux de dev, ou juste le code du fichier sensor.py?

Bon, j’ai testé avec le nouveau code du fichier python « sensor.py » :
Je n’ai plus d’erreur remontée dans les logs, mais toujours rien au niveau du capteur : J’ai « inconnu » au lieu de « indisponible »

ipx800_v4_analogique_3

Edit : Par contre j’ai testé avec la modif de tous les fichiers, et j’ai 1 soucis avec le « switch.py » : avec le code de la version dev, je n’ai plus le retour des relais, ils restent tous sur « ON ».
J’ai remis la version stable et cela refonctionne.
N’ayant pas encore déclaré de binary sensor et autres, je ne sait pas si cela fonctionne ou non pour ceux-ci.

il faudrait que tu actives les logs en debug pour voir si quelque chose remonte

Bonjour,
j’ai activé les debug logs (dans l’intégration) comme demandé :slightly_smiling_face:, & ça ne change rien, je n’ai aucune remontée dans les journaux HA…
Toutefois, j’ai ajouté les 8 entrées digitales dans la config HA hier soir et :
avec le nouveau code « binary_sensor.py » de la branche dev, les entrées sont toutes à « on ».
Si je remet la version stable, l’état reflété est celui sur l’ipx (en gros j’en ai la 5 forcée à ON en permanence pour les tests, donc, je vois directement si ok ou non)
(même chose avec « switch.py »)

Je suis sous raspi os 64bit avec HA sous docker, cela jouerait-il qqpart?

Après quelques moments de fonctionnement avec les debug logs activés, j’ai ceci qui remonte comme erreur :

Logger: frontend.js.latest.202212131
Source: components/system_log/__init__.py:256
First occurred: 12:35:36 (29 occurrences)
Last logged: 14:49:11

:0:0 ResizeObserver loop completed with undelivered notifications.
ERROR (MainThread) [frontend.js.latest.202212131] :0:0 ResizeObserver loop completed with undelivered notifications.