[HACS] Integration APSystems ECU Marchotte

Hello,
Désolé par avance pour mon vocabulaire. Je suis en pleine migation de Domoticz vers HA.
Du coup, entités, relations, automatisations, c’est encore un peu brumeux

Mon problème

J’ai installé l’intégration APSystem dans Hacs , sans problème .
Les valeurs remontés correspondent à ce que je m’attend.
Ca s’est gâté quand j’ai rajouté un second ECU (oui, j’ai 2 ECU-B dans mon installation) . Depuis ce temps là, en moyenne, une fois par jour, je n’ai plus de valeurs remontées et suis obligé de supprimer /réintégrer un Ecu dans l’intégration pour que ça remarche.

##Ma question:

Avant de vous poser plein de questions, j’en ai une toute simple
Quand nous avons un soucis dans une intégration gérée par Hacs , on ouvre une issue sur Git directement ?

Bonnes fêtes de fin d’année
Sylvain

Edit: Résolu . root cause: Un seul Ecu supporté par intégration

. Pour plusieurs ECU, il faut plusieurs intégrations (cf plus bas)

Bonjour,

Oui sur le GitHub de l’intégration et non de HA. Donc ici je dirai la :

Merci beaucoup pour la réponse rapide :slight_smile:
Bonne soirée

Il semblerait que le souci vient de la configuration de vos ÉCU par rapport aux numéros de série des micro onduleurs.
J’ai vérifié le code de l’intégration et elle gère bien les unique id. Par contre, l’unique id des entités = numéro de série des micros onduleurs.
Donc si sur vos 2 ECU, le même numéro de série est présent ça crée le problème que vous rencontrez

Hello,
Merci pour avoir regardé . C’est bizarre le coup de l’unique id géré ? Mes logs me sortent l’inverse (Platform apsystems_ecur does not generate unique IDs)

J’ai ouvert une issue sur git hier (et ai attachés les logs à l’instant) car, là, ça me dépasse . Sur Domoticz, j’avais un script bash qui marchait bien, mais, ici , le python, c’est trop fort pour moi.

Je vais tester de laisser qu’un seul ECU pendant 2/3 jours pour voir si mon soucis a bien un rapport avec le fait que j’ai 2 ECU.

Bonne journée

Pour le logs, il semble apparaître quand une intégration crée une entité dont le unique ID existe déjà (même si l’intégration gère bien un unique Id)

Est-ce que quand vous supprimez l’intégration donc les 2 ÉCU sur HA vous supprimez également les entités qui resteraient ?

Je procèderai ainsi :

  • Paramètres > appareils et services : suppression de l’intégration/des entrées des ECU
  • Redémarrer HA
  • Paramètres > appareils et services > Entités : supprimer toutes les entités des ECU qui seraient encore là
  • redémarrer HA
  • Ajouter les ECU

Alors, j’ai suivit votre modop:

  • Paramètres > appareils et services : suppression de l’intégration/des entrées des ECU => tout supprimé

  • Redémarrer HA =>Done

  • Paramètres > appareils et services > Entités : supprimer toutes les entités des ECU qui seraient encore là => Plus rien (via recherche par nom ou integration)

  • Redémarrer HA =>Done

  • Ajouter les ECU => Done. Ils apparaissent bien

  • RedemarrerHA => patatra :frowning:

Bon, j’ai peut-être une piste du quoiquimarchepas

Aprés avoir suivi les étapes, tout allais bien. Mais suite au redemarrage final de HA, j’ai un ECU qui se retrouve dans les 2 intégrations

integration:
integration

1er ECU:

Second Ecu:

Je le vois bien à droite que l’Ecu en rouge se retrouve dans les 2 integrations

Les logs d’erreur correspondent à l’ECU qui est dans les 2 integrations


2022-12-20 15:50:48.370 ERROR (MainThread) [homeassistant.components.binary_sensor] Platform apsystems_ecur does not generate unique IDs. ID 216300010XXX_data_from_cache already exists - ignoring binary_sensor.ecu_using_cached_data_2
2022-12-20 15:50:48.371 ERROR (MainThread) [homeassistant.components.binary_sensor] Platform apsystems_ecur does not generate unique IDs. ID 216300010XXX_restart_ecu already exists - ignoring binary_sensor.ecu_restart_2
2022-12-20 15:50:48.372 ERROR (MainThread) [homeassistant.components.switch] Platform apsystems_ecur does not generate unique IDs. ID 216300010XXX_query_device already exists - ignoring switch.ecu_query_device_2

Enfin, mon graphe qui fonctionne , mais, je me demande comment car, il est lié aux 2 intégrations:

Je vais peut-être me pencher sur ce log d’erreur. Au démarrage de l’intégration, y’aurais un effet indésirable ?


2022-12-20 15:50:48.261 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up apsystems_ecur platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 281, in _async_setup_platform
    await asyncio.shield(task)
  File "/config/custom_components/apsystems_ecur/sensor.py", line 63, in async_setup_entry
    inverters = coordinator.data.get("inverters", {})
AttributeError: 'NoneType' object has no attribute 'get'

Bonne soirée

Le fait que les 2 remontent au même endroit ça sent le bug dans l’intégration. Est-ce que vous pouvez à nouveau tout supprimer, activer les logs en debug pour cette intégration et ajouter à nouveau les ECU ?
Il y aura beaucoup plus d’informations.

Je suis désolé, mais là, ça dépasse mes (faibles) compétences.
Je ne sais pas encore comment activer les logs de debug , avant de rajouter les Ecu, et , comment faire ‹ survivre › le debug à un restart de HA

Pour la survie des logs, il y aune rotation au démarrage de HA. L’ancien log devient home-assistant.log.1.

Pour l’activation du debug, dans le fichier configuration.yaml il faut ajouter :

logger:
  default: warning
  logs:
    custom_components.apsystems_ecur: debug

Merci pour le tips , ça m’aide bien :slight_smile:

Les logs (pi, j’ai 2 inverters offline, c’est normal, il fait presque nuit, du coup, ils produisent plus)
Et, ‹ ai changé les n › de serie

2022-12-20 16:54:04.073 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration apsystems_ecur which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2022-12-20 16:54:09.312 DEBUG (MainThread) [custom_components.apsystems_ecur] config={'host': '192.168.1.189', 'scan_interval': 300}
2022-12-20 16:54:09.312 DEBUG (MainThread) [custom_components.apsystems_ecur] config={'host': '192.168.1.184', 'scan_interval': 300}
2022-12-20 16:54:09.313 DEBUG (SyncWorker_5) [custom_components.apsystems_ecur] Querying ECU
2022-12-20 16:54:09.314 DEBUG (SyncWorker_3) [custom_components.apsystems_ecur] Querying ECU
2022-12-20 16:54:24.332 DEBUG (SyncWorker_5) [custom_components.apsystems_ecur] Got data from ECU
2022-12-20 16:54:24.333 DEBUG (SyncWorker_5) [custom_components.apsystems_ecur] Returning {'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [230, 230], 'inverters': {'703000108888': {'uid': '703000108888', 'online': True, 'signal': 71, 'frequency': 49.9, 'temperature': 21, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [231, 231]}, '703000098899': {'uid': '703000098899', 'online': True, 'signal': 70, 'frequency': 49.9, 'temperature': 22, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [230, 230]}}, 'ecu_id': '216300010123', 'today_energy': 1.33, 'lifetime_energy': 521.4, 'current_power': 0, 'qty_of_inverters': 2, 'qty_of_online_inverters': 2, 'data_from_cache': False, 'querying': True, 'restart_ecu': False}
2022-12-20 16:54:24.333 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 15.021 seconds (success: True)
2022-12-20 16:54:24.337 DEBUG (SyncWorker_3) [custom_components.apsystems_ecur] Got data from ECU
2022-12-20 16:54:24.337 DEBUG (SyncWorker_3) [custom_components.apsystems_ecur] Returning {'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0], 'inverters': {'703000095555': {'uid': '70300009555', 'online': False, 'signal': 0, 'frequency': 0.0, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0]}, '703000099999': {'uid': '703000099999', 'online': False, 'signal': 0, 'frequency': 0.0, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0]}}, 'ecu_id': '216300028888', 'today_energy': 1.38, 'lifetime_energy': 123.4, 'current_power': 0, 'qty_of_inverters': 2, 'qty_of_online_inverters': 0, 'data_from_cache': False, 'querying': True, 'restart_ecu': False}
2022-12-20 16:54:24.337 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up apsystems_ecur platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 281, in _async_setup_platform
    await asyncio.shield(task)
  File "/config/custom_components/apsystems_ecur/sensor.py", line 63, in async_setup_entry
    inverters = coordinator.data.get("inverters", {})
AttributeError: 'NoneType' object has no attribute 'get'
2022-12-20 16:54:24.342 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 15.029 seconds (success: True)
2022-12-20 16:54:24.343 ERROR (MainThread) [homeassistant.components.binary_sensor] Error adding entities for domain binary_sensor with platform apsystems_ecur
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 428, in async_add_entities
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 692, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 789, in add_to_platform_finish
    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/binary_sensor/__init__.py", line 211, in state
    if (is_on := self.is_on) is None:
  File "/config/custom_components/apsystems_ecur/binary_sensor.py", line 63, in is_on
    return self.coordinator.data.get(self._field)
AttributeError: 'NoneType' object has no attribute 'get'
2022-12-20 16:54:24.347 ERROR (MainThread) [homeassistant.components.binary_sensor] Error while setting up apsystems_ecur platform for binary_sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 289, in _async_setup_platform
    await asyncio.gather(*pending)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 428, in async_add_entities
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 692, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 789, in add_to_platform_finish
    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/binary_sensor/__init__.py", line 211, in state
    if (is_on := self.is_on) is None:
  File "/config/custom_components/apsystems_ecur/binary_sensor.py", line 63, in is_on
    return self.coordinator.data.get(self._field)
AttributeError: 'NoneType' object has no attribute 'get'
2022-12-20 16:54:24.367 ERROR (MainThread) [homeassistant.components.binary_sensor] Platform apsystems_ecur does not generate unique IDs. ID 216300028888_data_from_cache already exists - ignoring binary_sensor.ecu_using_cached_data
2022-12-20 16:54:24.369 ERROR (MainThread) [homeassistant.components.binary_sensor] Platform apsystems_ecur does not generate unique IDs. ID 216300028888_restart_ecu already exists - ignoring binary_sensor.ecu_restart
2022-12-20 16:54:24.369 ERROR (MainThread) [homeassistant.components.switch] Platform apsystems_ecur does not generate unique IDs. ID 216300028888_query_device already exists - ignoring switch.ecu_query_device

Aprés une suppression d’un ECU , un restart de Ha et un rajout, j’ai des logs de debugs qui sont top clean:

2022-12-20 17:04:08.607 DEBUG (MainThread) [custom_components.apsystems_ecur] config={'host': '192.168.1.184', 'scan_interval': 300}
2022-12-20 17:04:08.608 DEBUG (SyncWorker_4) [custom_components.apsystems_ecur] Querying ECU
2022-12-20 17:04:23.657 DEBUG (SyncWorker_4) [custom_components.apsystems_ecur] Got data from ECU
2022-12-20 17:04:23.657 DEBUG (SyncWorker_4) [custom_components.apsystems_ecur] Returning {'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0], 'inverters': {'703000095555': {'uid': '703000095555', 'online': False, 'signal': 0, 'frequency': 0.0, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0]}, '703000099999': {'uid': '703000099999', 'online': False, 'signal': 0, 'frequency': 0.0, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0]}}, 'ecu_id': '216300028000', 'today_energy': 1.38, 'lifetime_energy': 123.4, 'current_power': 0, 'qty_of_inverters': 2, 'qty_of_online_inverters': 0, 'data_from_cache': False, 'querying': True, 'restart_ecu': False}
2022-12-20 17:04:23.657 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 15.050 seconds (success: True)
2022-12-20 17:05:03.622 DEBUG (MainThread) [custom_components.apsystems_ecur.config_flow] Starting config flow class...
2022-12-20 17:05:03.622 DEBUG (MainThread) [custom_components.apsystems_ecur.config_flow] Starting step_user
2022-12-20 17:05:03.622 DEBUG (MainThread) [custom_components.apsystems_ecur.config_flow] Returning to show form
2022-12-20 17:05:08.931 DEBUG (MainThread) [custom_components.apsystems_ecur.config_flow] Starting step_user
2022-12-20 17:05:08.931 DEBUG (MainThread) [custom_components.apsystems_ecur.config_flow] User Input is not none
2022-12-20 17:05:24.061 DEBUG (MainThread) [custom_components.apsystems_ecur] config={'host': '192.168.1.189', 'scan_interval': 300}
2022-12-20 17:05:24.062 DEBUG (SyncWorker_2) [custom_components.apsystems_ecur] Querying ECU
2022-12-20 17:05:39.169 DEBUG (SyncWorker_2) [custom_components.apsystems_ecur] Got data from ECU
2022-12-20 17:05:39.169 DEBUG (SyncWorker_2) [custom_components.apsystems_ecur] Returning {'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0], 'inverters': {'703000108000': {'uid': '703000108000', 'online': False, 'signal': 0, 'frequency': 0.0, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0]}, '703000097777': {'uid': '703000097777', 'online': False, 'signal': 0, 'frequency': 0.0, 'model': 'YC600/DS3/DS3D-L', 'channel_qty': 2, 'power': [0, 0], 'voltage': [0, 0]}}, 'ecu_id': '216300010000', 'today_energy': 1.33, 'lifetime_energy': 521.4, 'current_power': 0, 'qty_of_inverters': 2, 'qty_of_online_inverters': 0, 'data_from_cache': False, 'querying': True, 'restart_ecu': False}
2022-12-20 17:05:39.170 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 15.108 seconds (success: True)


J’imagine qu’un restart de HA va me ressortir le premier pavé avec les erreurs …

Il faudrait ajouter tout ça dans votre issue sur GitHub, ca devrait aider à résoudre le souci

Bon, la réponse de l’issue sur git est claire :

If you really own 2 ECU-B units, the integration has not anticipated on this because settings are stored under the same key

Je vais me pencher en profondeur dans le code, quand j’aurais du temps. Non pas pour l’adapter (j’en ai pas les capacités), mais, je me dit que si j’arrive à cloner le repos existant, en changeant 1/2 paramétres et son nom, j’aurais peut-être un workaround.

Bon, mon aventure avec Ha commence mal du coup . 2 jours et déjà un bug lol :slight_smile:

Au moins on est fixé. Par contre, je ne pense pas qu’il y ait tant de modifications à faire dans le code. HA gère déjà nativement plusieurs instance d’une même intégration, il suffit seulement que l’intégration génère des unique id vraiment uniques.
Je vais tenter de trouver ce qu’il faut changer dans le code, on ne sait jamais

Sur Git, aprés avoir un peu discuté dans l’issue que j’ai ouvert, j’ai tenté un truc et, pour l’instant , ça marche :
What i do:
Copie du répertoire apsystems_ecur vers le repertoire apsystems_ecur2

Modification des paramètres (rajout du chiffre 2):
param

Restart de Ha . L’integration apparait
integ

Rajout d’un ECU dans chaque intégration. Ca semble ok . J’ai un petit soucis d’icone, mais, pas bien grave

Plus qu’a attendre quelques jours pour vérifier si ce workaround marche bien

2 « J'aime »

Pas mal ! Bien trouvé !!

Hello,

Je passe en résolu .
Ca fait maintenant 4 jours, et , plus aucuns soucis !
Bonne année

Bonjour @syl2222_fr
J’ai installé hier l’intégration APS.
Je ne vois pas d’entité correspondant à l’injection sur le réseau.
Sais tu si il y a ça ?
Mathieu

Salut
N’ayant que des ECU-B , je ne saurais pas te répondre (mes ECU n’ont pas de pince permettant de contrôler l’injection réseau).
Perso, je passe par mon routeur solaire pour récupérer cette info.

Bonne journée

Je suis également possesseur de ecu-R de APS et pour connaitre la valeur d’injection tu peux suivre mon tuto :