Deux bugs identifiés dans light.py et entity.py provoquant des erreurs répétées à chaque cycle de polling du coordinator lorsque des appareils XDimmer et/ou XPWM sont configurés.
Bug 1 — KeyError: 'G1' à 'G4' sur les entités XDimmer
Lors du rafraîchissement du coordinator, si coordinator.data est None ou pas encore alimenté (ex: au démarrage de HA ou après une erreur de connexion passagère), la propriété XDimmerLight.is_on lève une KeyError non gérée qui remonte jusqu'à la couche entité de HA et génère des entrées ERROR en boucle dans les journaux.
Stack trace relevée en production :
ERROR [custom_components.ipx800v4] Unexpected error updating listener for ipx800v4
File "homeassistant/helpers/entity.py", line 1731, in state
if (is_on := self.is_on) is None:
File "custom_components/ipx800v4/light.py", line 154, in is_on
return self.coordinator.data[f"G{self._id}"]["Etat"] == "ON"
KeyError: 'G1'
Cause racine : is_on et brightness accèdent directement à coordinator.data sans vérifier la disponibilité au préalable. HA appelle is_on avant que les données soient prêtes.
Correction — ajouter la propriété available dans entity.py :
@property
def available(self) -> bool:
"""Return entity availability based on coordinator data presence."""
if not super().available or not self.coordinator.data:
return False
if self._ipx_type == TYPE_XDIMMER and self._id:
return f"G{self._id}" in self.coordinator.data
if self._ipx_type == TYPE_RELAY and self._id:
return f"R{self._id}" in self.coordinator.data
if self._ipx_type in [TYPE_XPWM, TYPE_XPWM_RGB, TYPE_XPWM_RGBW]:
if self._ids:
return all(f"PW{i}" in self.coordinator.data for i in self._ids)
if self._id:
return f"PW{self._id}" in self.coordinator.data
return True
Bug 2 — Préfixe de clé incorrect PWM au lieu de PW pour les entités XPWM
light.py utilise f"PWM{self._id}" pour lire les valeurs XPWM depuis coordinator.data, mais la clé réellement retournée par l'API IPX800 (Get=all) est PW1, PW2, etc. — et non PWM1.
Preuve — réponse brute de l'API IPX800 V4 :
"PW1": 0,
"PW2": 0,
...
"PW32": 0
La clé PWM{n} n'existe pas dans la réponse de l'API. Cela provoque une KeyError pour tout utilisateur disposant d'appareils XPWM.
Lignes concernées dans light.py :
| Classe |
Propriété |
Incorrect |
Correct |
| XPWMLight |
is_on |
f"PWM{self._id}" |
f"PW{self._id}" |
| XPWMLight |
brightness |
f"PWM{self._id}" |
f"PW{self._id}" |
| XPWMRGBLight |
rgb_color |
f"PWM{self._ids[x]}" |
f"PW{self._ids[x]}" |
| XPWMRGBWLight |
rgbw_color |
f"PWM{self._ids[x]}" |
f"PW{self._ids[x]}" |
Environnement
Version Home Assistant : 2026.5.4
Intégration installée via HACS
Version pypx800 : 2.5.1
Matériel : IPX800 V4
Extensions : X-Dimmer (4 canaux), pas de module X-PWM physique présent
Les deux corrections ont été testées en production et confirmées fonctionnelles. Plus aucune erreur dans les journaux après rechargement de l'intégration.
Deux bugs identifiés dans light.py et entity.py provoquant des erreurs répétées à chaque cycle de polling du coordinator lorsque des appareils XDimmer et/ou XPWM sont configurés.
Bug 1 — KeyError: 'G1' à 'G4' sur les entités XDimmer
Lors du rafraîchissement du coordinator, si coordinator.data est None ou pas encore alimenté (ex: au démarrage de HA ou après une erreur de connexion passagère), la propriété XDimmerLight.is_on lève une KeyError non gérée qui remonte jusqu'à la couche entité de HA et génère des entrées ERROR en boucle dans les journaux.
Stack trace relevée en production :
Cause racine : is_on et brightness accèdent directement à coordinator.data sans vérifier la disponibilité au préalable. HA appelle is_on avant que les données soient prêtes.
Correction — ajouter la propriété available dans entity.py :
Bug 2 — Préfixe de clé incorrect PWM au lieu de PW pour les entités XPWM
light.py utilise f"PWM{self._id}" pour lire les valeurs XPWM depuis coordinator.data, mais la clé réellement retournée par l'API IPX800 (Get=all) est PW1, PW2, etc. — et non PWM1.
Preuve — réponse brute de l'API IPX800 V4 :
La clé PWM{n} n'existe pas dans la réponse de l'API. Cela provoque une KeyError pour tout utilisateur disposant d'appareils XPWM.
Lignes concernées dans light.py :
Environnement
Version Home Assistant : 2026.5.4
Intégration installée via HACS
Version pypx800 : 2.5.1
Matériel : IPX800 V4
Extensions : X-Dimmer (4 canaux), pas de module X-PWM physique présent
Les deux corrections ont été testées en production et confirmées fonctionnelles. Plus aucune erreur dans les journaux après rechargement de l'intégration.