Intégration py-agua-iot - Comment accéder à /usr/local/lib/python3.10?

Mon problème

Bonjour, je suis en train d’essayer d’intégrer mon poêle Nobis à HA via l’intégration py-agua-iot (GitHub - vincentwolsink/py-agua-iot: py-agua-iot provides controlling heating devices connected via the IOT Agua platform of Micronova).

Mon poêle apparaît bien (alias + modèle + différents niveaux de puissance), il y a donc bien des informations récupérées via l’api agua mais le poêle est marqué comme indisponible et donc impossible de le piloter.

En cherchant un petit peu dans les logs, je suis tombé là-dessus :

2023-01-31 12:07:54.269 ERROR (MainThread) [homeassistant.components.climate] Error while setting up aguaiot platform for climate
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 297, in _async_setup_platform
    await asyncio.gather(*pending)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 438, in async_add_entities
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 709, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 804, in add_to_platform_finish
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 556, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 599, in _async_write_ha_state
    attr.update(self.state_attributes or {})
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 297, in state_attributes
    self.current_temperature,
  File "/config/custom_components/aguaiot/climate.py", line 164, in current_temperature
    return self._device.air_temperature
  File "/usr/local/lib/python3.10/site-packages/py_agua_iot/__init__.py", line 583, in air_temperature
    return float(self.__get_information_item('temp_air_get'))
  File "/usr/local/lib/python3.10/site-packages/py_agua_iot/__init__.py", line 430, in __get_information_item
    formula = self.__register_map_dict[item]['formula']
KeyError: 'temp_air_get'

C’est via le fichier init.py situé dans /usr/local/lib/python3.10/site-packages/py_agua_iot que ha communique avec l’api agua (ce fichier est aussi présent dans le github py-agua-iot).

Mon poêle Nobis est un poêle hybride (pellet et bois) alors que l’intégration a été développée pour les poêle à pellet uniquement (c’est mon intuition). Les informations renvoyées par l’api d’agua ne sont donc sans doute pas correctement « formatées » par l’intégration dans le cas de mon poêle.

J’en viens donc maintenant à ma question, comment accéder au fichier /usr/local/lib/python3.10/site-packages/py_agua_iot/init.py pour débugger tout ça ? J’ai essayé via le terminal intégrée ou via l’explorateur de fichier intégré mais le dossier /usr/local/lib est désespérément vide…

Merci pour vos réponses et bonne journée !!

Ma configuration


[center]## System Information

version core-2023.1.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.90
arch x86_64
timezone Europe/Brussels
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4989
Installed Version 1.30.1
Stage running
Available Repositories 1196
Downloaded Repositories 32
Home Assistant Cloud
logged_in true
subscription_expiration 28 février 2023 à 01:00
relayer_connected true
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled true
remote_server eu-central-1-3.ui.nabu.casa
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 9.5
update_channel stable
supervisor_version supervisor-2023.01.1
agent_version 1.4.1
docker_version 20.10.22
disk_total 439.4 GB
disk_used 176.5 GB
healthy true
supported true
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.6.1), File editor (5.5.0), MariaDB (2.5.1), phpMyAdmin (0.8.3), Home Assistant Google Drive Backup (0.110.1), SQLite Web (3.7.0), Ring-MQTT with Video Streaming (5.0.5), Mosquitto broker (6.1.3), Filebrowser (2.23.0), Duck DNS (1.15.0)
Dashboards
dashboards 4
resources 18
views 4
mode storage
Recorder
oldest_recorder_run 23 janvier 2023 à 11:24
current_recorder_run 31 janvier 2023 à 15:49
estimated_db_size 698.48 MiB
database_engine sqlite
database_version 3.38.5
Xiaomi Miot Auto
component_version 0.7.5
can_reach_server ok
can_reach_spec ok
logged_accounts 1
total_devices 7
[/center]

Salut
Dans HAOS et un environnement container, c’est pas facile de faire du débug.
A mon avis tu gagnerai ton temps à ouvrir une issue sur le github de l’auteur. S’il est actif et réactif, ça pourrait ne te couter que quelques messages

Bonjour,

Je rencontre le même problème que toi, cependant mon poele est un Nobias A8 V donc pellet exclusif, je joins mes logs qui ressemblent bcp aux tiens.

Je n’ai pas trouver de solution :s

Logger: homeassistant.components.climate
Source: custom_components/aguaiot/climate.py:164
Integration: Thermostat (documentation, issues)
First occurred: 8 février 2023 à 21:25:41 (18 occurrences)
Last logged: 14:25:03

Error adding entities for domain climate with platform aguaiot
Error while setting up aguaiot platform for climate
Traceback (most recent call last):
File « /usr/src/homeassistant/homeassistant/helpers/entity_platform.py », line 442, in async_add_entities
await asyncio.gather(*tasks)
File « /usr/src/homeassistant/homeassistant/helpers/entity_platform.py », line 717, in _async_add_entity
await entity.add_to_platform_finish()
File « /usr/src/homeassistant/homeassistant/helpers/entity.py », line 814, in add_to_platform_finish
self.async_write_ha_state()
File « /usr/src/homeassistant/homeassistant/helpers/entity.py », line 566, in async_write_ha_state
self._async_write_ha_state()
File « /usr/src/homeassistant/homeassistant/helpers/entity.py », line 609, in _async_write_ha_state
attr.update(self.state_attributes or {})
File « /usr/src/homeassistant/homeassistant/components/climate/init.py », line 297, in state_attributes
self.current_temperature,
File « /config/custom_components/aguaiot/climate.py », line 164, in current_temperature
return self._device.air_temperature
File « /usr/local/lib/python3.10/site-packages/py_agua_iot/init.py », line 583, in air_temperature
return float(self.__get_information_item(‹ temp_air_get ›))
File « /usr/local/lib/python3.10/site-packages/py_agua_iot/init.py », line 430, in __get_information_item
formula = self.__register_map_dict[item][‹ formula ›]
KeyError: ‹ temp_air_get ›

La console ne donne pas accès à toute la fonctionnalité, mais on peut s’en rapprocher en ajoutant pip au conteneur de la console et en y installant les paquets (c.a.d. dans le conteneur de la console).
Perso, j’ai optimisé la console avec un script et de la configuration

Sinon, l’erreur dans votre script est que la clef 'temp_air_get ’ est supposé présente dans une structure or cela ne l’est pas.

Pour déboguer, pour les petits scripts, une execution de type

python3 -m trace --ignore-dir=/usr/lib -t SCRIPT

Permets d’avoir le déroulement du programme dans une trace.

Edit: voir aussi Shell_command et script python - #13 par le_top .

Bonjour,

J’ai fini par réussir à accéder au fichier init.py de /usr/local/lib/python3.10/site-packages/py_agua_iot et en débugguant un petit peu, j’ai vu que dans le cas de mon poêle Nobis, la clé à consulter était temp_air2_get et non temp_air_get… Dés que j’ai eu modifié la clé et redémarrer home assistant, mon entité climat apparaissait bien et je pouvais la contrôler comme toute autre entité climat.

La propriété :

@property
    def air_temperature(self):
        return float(self.__get_information_item('temp_air_get'))

doit donc devenir :

@property
    def air_temperature(self):
        return float(self.__get_information_item('temp_air2_get'))

:warning: Attention, la solution ci-dessous est loin d’être la meilleure et ça peut foutre ton home assistant en l’air si tu fais une mauvaise manipulation. Donc, c’est à tes risques et périls :warning:

Pour pouvoir accéder au fichier init.py :

  1. J’ai installé l’add-on terminal du repository GitHub - alexbelgium/hassio-addons: My homeassistant addons et j’ai désactivé le mode protégé de cet addon (n’oublie pas d’activer le mode avancé de ton profil utilisateur si jamais). De cette manière, tu vas pouvoir avoir accès à beaucoup plus de commandes notamment de docker. L’addon terminal officiel de homeassistant est bridé et les commandes sont limitées.

  2. Via la commande docker exec -it homeassistant bash, j’ai lancé un bash sur le container de homeassistant.

  3. J’ai copié le fichier /usr/local/lib/python3.10/site-packages/py_agua_iot/init.py dans /config (un dossier accessible à la plupart des containers). J’ai modifié ce fichier via file editor en corrigeant le nom de la clé et je suis retourné dans mon bash le copier de nouveau dans le container de home assistant via cp /config/__init__.py /usr/local/lib/python3.10/site-packages/py_agua_iot/__init__.py; chown root:root /usr/local/lib/python3.10/site-packages/py_agua_iot/__init__.py; chmod 644 /usr/local/lib/python3.10/site-packages/py_agua_iot/__init__.py

  4. Il ne te reste plus qu’à redémarrer homeassitant.

:warning: Je le répète encore, ce n’est pas une solution propre surtout qu’à la prochaine mise à jour de home assitant core, le fichier init.py sera écrasé… Normalement, le mieux à faire est de publier ça dans le github de homeassistant mais je n’ai pas encore les connaissances nécessaires. Dans ce cas et dans mon cas, il faudrait aussi s’assurer d’abord d’avoir affaire à mon poêle nobis (avec un if) avant de modifier la clé temp_air_get

Bonjour,

D’abord un grand merci pour ton partage , j’ai réussi à récuperer le « climate » de mon poele mais il va me rester encore du chemin pour pouvoir essayer de le contrôler d’avantage:

Pour information j’ai réussi ta procédure cependant j’ai du trouver les syntaxes compte tenu que je n’ai aucune notion de language informatique, voilà comment je m’y suis pris :

~docker exec -it homeassistant bash
bash-5.1# #
~docker cp homeassistant:/usr/local/lib/python3.10/site-packages/py_agua_iot/init.py /config
« J’ai ensuite ouvert et modifier le fichier dans le file editor »
~docker cp /config/init.py homeassistant:/usr/local/lib/python3.10/site-packages/py_agua_iot/init.py

Et je me retrouve avec mon entité climate, cependant il va encore falloir creuser pour trouver toutes les autres informations que je peux remonter du module Agua :

image

Merci pour ton aide, cordialement,

Bonjour,

Bravo pour la manip’ mais n’oublie pas qu’à la prochaine mise à jour de ha core, il faudra recommencer…

De mon côté, je suis en train de tester l’intégration de nouveaux contrôles et capteurs. Si ça se concrétise, je publierai une nouvelle version de l’intégration mais je n’ai malheureusement pas beaucoup de temps à disposition.

image

bonjour,
j’ai forké le git pour faire une installation pour les poeles Nobis est en FR si ça interesse encore quelqu’un:

https://github.com/thetux07/py-agua-iot

image

2 « J'aime »

Bonjour tout le monde,

J’ai également un poêle Ravelli avec le module Micronova T009.

J’ai bien réussi à connecter l’intégration en entrant mes identifiants. Mon entité Climate est bien créée avec la possibilité de définir la température cible, la puissance de la ventilation, Allumer/Eteindre le poêle. Cependant, il me manque des infos, je n’ai aucun retour de la température de la pièce. Secondaire j’aimerais connaitre l’état des alarmes…etc.

image

Je ne sais pas vraiment comment analyser les logs, et je n’y connais pas grand chose en python et en API Rest.

J’aimerais à minima pouvoir récupérer cette donnée de température, sachant que sur mon appli téléphone elle est bien présente.

J’ai vu dans la doc ces lignes, mais je ne sais pas du tout les mettre en application et ou les insérer :

# Print the current air temperature for each device
for device in connection.devices:
  print(device.name + ": " + str(device.air_temperature))

Si quelqu’un d’un peu plus calé que moi pouvais me venir en aide. Je crois qua ça servirait à bien du monde.

Merci par avance,
Cordialement,

Gauthier