gduteil / cozytouch

Atlantic Cozytouch integration for Home Assistant
12 stars 0 forks source link

Compatibilité Alfea Extensa Duo A.I. 3 R32 #12

Open Eoras opened 1 week ago

Eoras commented 1 week ago

Bonjour, J'ai une PAC Alfea Extensa Duo A.I. 3 R32 qui gère la production d'eau chaude sanitaire et mes deux zones de chauffage.

Mon chauffage est réglé en loi d'eau (donc je met seulement une température de consigne sur mon thermostat 1 et mon thermostat 2

Lors de l'installation voici ce que j'ai eu : 001

Ma PAC est bien reconnu, par contre UI_0, 1 2 3 et 4 c'est quoi ? Est-ce que se sont mes SPLIT TAKAO M3 de ma climatisation (connectée avec cozytouch aussi). Jusqu'à là, je ne les ai pas ajoutée.

Ensuite sur mon appareil j'ai : image Dans devices, modelId = 211 il me le sort en Unknown (Unknown product (211))

Ensuite j'ai deux chauffage (surement zone 1 et zone 2, ma zone 1 = Etage et ma zone 2 = RdC) unknown_product_211_chauffage && unknown_product_211_chauffage_2 Dans le json visiblement "capabilityId": 154 est le nom du chauffage de la zone 1 et "capabilityId": 155 est le nom de la zone de chauffage 2 Se serait bien que les nom des chauffages soit les nom des "capabilityId": 154 (zone 1) et "capabilityId": 155 (zone 2) exemple: climate.xxxxxxxxxx_chauffage_rdc et climate.xxxxxxxxxx_chauffage_etage

"capabilityId": 22 et "capabilityId": 23 Température de consigne du ballon d'eau chaude et température réelle du ballon ?

"capabilityId": 110 semble être la température du thermostat de la zone 1 (chez moi l'étage, actuellement 27.1) "capability 118 remonté de témpérature du thermostat de la zone 2 (RDC chez moi)

Actuellement le chauffage est éteint, j'ai un Mode Chauffage : Undefined, c'est normal ? (Il devrait être sur Eteint non ?)

Petites idées d'améliorations : entitée switch.xxxxx_eau_chaude devrait être = switch.xxxxx_production_eau_chaude

Après il y a plein d'autre information non listée : image

Et dans les Diagnotstic: image image image

Je suis disponible en tout cas pour améliorer ton extension qui semble bien plus complète que celle de Overkidz :)

Cozytouch.json

gduteil commented 1 week ago

Bonsoir,

"CLIF_Default" est le hub Naviclim, les clims sont ROOM_x, les UI_x sont des appareils "enfants" de chacune, je ne suis pas sûr de savoir à quoi ça correspond, mais il n'y a qu'une seule entité à chaque fois qui n'a pas l'air d'évoluer donc je ne pense pas que ça soit très interessant. Je pense que ça doit correspondre au récepteur des télécommandes (UI -> User Interface ?).

Je ne suis pas encore tombé sur ce modèle de PAC, c'est pour ça que le modelId 211 n'est pas encore reconnu, je vais l'ajouter, l'intégration se comporte differemment selon le type d'appareil lorsqu'il est reconnu (surtout les entités climate).

Les 154 et 155 sont bien les identifiants des zones, pour leur nommages je vais voir pour les renommer correctement si c'est pas trop galère (il y a pas mal de caractères interdits dans les ID d'entités), sinon au pire je pourais mettre "xxx_zone_1" et "xxx_zone_2", sachant qu'elle sont facilement renommables via l'interface.

Les 22 et 23 n'ont pas encore été identifiés, il faudrait confirmer avec leur evolutions sur plusieurs jours pour voir si c'est effectivement ça.

110 n'a pas encore été identifié, j'avais 118 pour la température Z2 et 119 température Z1 mais il est possible qu'il y ait une erreur.

Le "mode chauffage" correspond à la 87, et l'entité doit savoir à quel mode correspond les différentes valeurs, pour le moment c'est mappé que pour cumulus. Dans le cas d'une PAC, je pense que ça correspond à la partie eau chaude. Si c'est bien le cas il faudrait que je renomme l'entité, et les valeurs que j'avais vu étaient :

Quels sont les modes dispo dans l'appli pour la partie eau chaude ?

Pour le renommage "switch.xxxxx_eau_chaude" -> "switch.xxxxx_production_eau_chaude", l'ID est pris depuis le nom de l'entité, et en général j'évite d'avoir des noms trop longs pour ne pas que ça soit coupé à l'affichage dans HA.

Pour information l'intégration permet de récupérer toutes les infos envoyées par l'API Cozytouch, mais chaque "capability" doit être identifiée. Les identifiants sont identiques d'un type d'appareil à un autre, les PAC sont les appareils qui ont le plus de travail d'identification restant, les clims devraient être assez complètes.

Je suis preneur d'identifications pour les capabilities manquantes, particulièrement pour les PAC. La seule solution est de regarder les valeurs et voir leur évolution, en comparant avec ce qui est affiché dans l'appli Cozytouch (ou sur la PAC elle-même).

Si tu te sens à l'aise avec la modification des scripts je peux te guider, sinon on peut envisager que je fasse les modifs dans la branche "main", tu peux regarder dans HACS s'il te propose de choisir la version "main" dans "retélécharger" (menu avec les 3 petits points en haut à droite dans la page de Cozytouch dans HACS)

Eoras commented 1 week ago

Hello, merci pour ta réponse rapide ;)

Concernant les identifiants des zone, tu peux utiliser encode() ou unicode() je crois en python pour remplacer les caractères spéciaux et majuscules etcs...

Pour les 22 et 23 ont comme valeur 55, et la seule configuration que j'ai sur la PAC avec ce chiffre c'est la température de consigne de la production d'eau chaude sanitaire. A mon avis, le 22 c'est la consigne (car j'ai un switch avec le 22, donc je peux régler la consigne de l'eau chaude sanitaire) et le 23 c'est la température réelle de l'eau du ballon (Pour l'instant dans mon historique elle n'a pas changé cette valeur est toujours à 50) par contre j'ai vu que la 111 était bien mappé et j'ai 55.734375 ça semble correspondre à la température réelle de l'eau actuellement dans le ballon (DHW Temperature (domestic hot water)) image

Je te confirme bien, 118 c'est la température de la zone 2 et 119 c'est la température de la zone 1

Le Mode chauffage correspond effectivement au mode pour le cumullus, par contre les différentes valeurs je sais pas du tout. Je sais que moi je suis en mode "production quand nécessaire" donc je dirais manuel (et je suis bien à 0) sur l'application je n'ai as de choix de mode pour la production d'eau chaude (car la pompe à chaleur est réglée pour ne pas pouvoir changer ça justement). Par contre sur l'appli j'ai bien le mode "boost" en switch

Pour le chauffage, j'ai remarqué que lorsque j'active le mode Chauffe, rien ne se passe et ça ne l'active pas : image

Pour les clim effectivement, j'ai trouvé tout mon bonheur c'est top ;) merci beaucoup

Pour les autre capabilities, je vais fouiner dans les réglage de ma PAC et je vais essayer de voir un peur ce qu'il y a de noté pour essayer de déceler celles manquantes.

Voici ce que j'ai remarqué : 1, 2 et 3 sont des switch (ON / OFF) => 1 et 2 s'active quand j'active mon chauffage (comme si c'était la chauffe de la zone 1 et de la zone 2). 3 s'active quand mon chauffe-eau se met en route.

Capability_107106 est passé en 3 quand la PAC est passé en production d'eau chaude. (en même temps que la capability 3

Je veux bien être guidé si tu veux, je suis dev (web) mais si tu m'explique je pourrais faire les modifs de mon côté pour t'aider. Par default, ça télécharge le dernier tag dans HACS c'est ça ? Je peux pointer sur main si tu veux.

Par ailleurs voici quelques erreurs au niveaux des logs :

Enregistreur: homeassistant.util.loop
Source: util/loop.py:84
S'est produit pour la première fois: 25 juin 2024 à 18:22:35 (99 occurrences)
Dernier enregistrement: 26 juin 2024 à 23:33:22

Detected blocking call to sleep inside the event loop by custom integration 'cozytouch' at custom_components/cozytouch/hub.py, line 491: time.sleep(1) (offender: /config/custom_components/cozytouch/hub.py, line 491: time.sleep(1)), please create a bug report at https://github.com/gduteil/cozytouch/issues Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 760, in async_handle_set_swing_mode_service await self.async_set_swing_mode(swing_mode) File "/config/custom_components/cozytouch/climate.py", line 438, in async_set_swing_mode await self.coordinator.set_capability_value( File "/config/custom_components/cozytouch/hub.py", line 491, in set_capability_value time.sleep(1)
Detected blocking call to sleep inside the event loop by custom integration 'cozytouch' at custom_components/cozytouch/hub.py, line 491: time.sleep(1) (offender: /config/custom_components/cozytouch/hub.py, line 491: time.sleep(1)), please create a bug report at https://github.com/gduteil/cozytouch/issues Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 760, in async_handle_set_swing_mode_service await self.async_set_swing_mode(swing_mode) File "/config/custom_components/cozytouch/climate.py", line 424, in async_set_swing_mode await self.coordinator.set_capability_value( File "/config/custom_components/cozytouch/hub.py", line 491, in set_capability_value time.sleep(1)
Detected blocking call to sleep inside the event loop by custom integration 'cozytouch' at custom_components/cozytouch/hub.py, line 491: time.sleep(1) (offender: /config/custom_components/cozytouch/hub.py, line 491: time.sleep(1)), please create a bug report at https://github.com/gduteil/cozytouch/issues Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 922, in async_service_temperature_set await entity.async_set_temperature(**kwargs) File "/config/custom_components/cozytouch/climate.py", line 372, in async_set_temperature await self.coordinator.set_capability_value( File "/config/custom_components/cozytouch/hub.py", line 491, in set_capability_value time.sleep(1)
Detected blocking call to sleep inside the event loop by custom integration 'cozytouch' at custom_components/cozytouch/hub.py, line 491: time.sleep(1) (offender: /config/custom_components/cozytouch/hub.py, line 491: time.sleep(1)), please create a bug report at https://github.com/gduteil/cozytouch/issues Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/config/custom_components/cozytouch/climate.py", line 389, in async_set_hvac_mode await self.coordinator.set_capability_value( File "/config/custom_components/cozytouch/hub.py", line 491, in set_capability_value time.sleep(1)
Detected blocking call to sleep inside the event loop by custom integration 'cozytouch' at custom_components/cozytouch/hub.py, line 491: time.sleep(1) (offender: /config/custom_components/cozytouch/hub.py, line 491: time.sleep(1)), please create a bug report at https://github.com/gduteil/cozytouch/issues Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/config/custom_components/cozytouch/switch.py", line 101, in async_turn_on await self.coordinator.set_capability_value( File "/config/custom_components/cozytouch/hub.py", line 491, in set_capability_value time.sleep(1)
Enregistreur: custom_components.cozytouch.hub
Source: helpers/update_coordinator.py:325
intégration: Cozytouch ([documentation](https://github.com/gduteil/cozytouch), [problèmes](https://github.com/gduteil/cozytouch/issues))
S'est produit pour la première fois: 26 juin 2024 à 03:59:52 (4 occurrences)
Dernier enregistrement: 26 juin 2024 à 21:14:37

Error requesting Cozytouch_3127386 data: 0, message='Attempt to decode JSON with unexpected mimetype: application/xml; charset=utf-8', url=URL('https://apis.groupe-atlantic.com/magellan/cozytouch/setupview')
Error requesting Cozytouch_3182934 data: 0, message='Attempt to decode JSON with unexpected mimetype: text/html', url=URL('https://apis.groupe-atlantic.com/users/token')
Error requesting Cozytouch_3182932 data: 0, message='Attempt to decode JSON with unexpected mimetype: text/html', url=URL('https://apis.groupe-atlantic.com/users/token')
Enregistreur: homeassistant
Source: custom_components/cozytouch/sensor.py:380
intégration: Cozytouch ([documentation](https://github.com/gduteil/cozytouch), [problèmes](https://github.com/gduteil/cozytouch/issues))
S'est produit pour la première fois: 26 juin 2024 à 02:22:33 (9 occurrences)
Dernier enregistrement: 26 juin 2024 à 18:35:38

Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 255, in _handle_refresh_interval
    await self._async_refresh(log_failures=True, scheduled=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 411, in _async_refresh
    self.async_update_listeners()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 165, in async_update_listeners
    update_callback()
  File "/config/custom_components/cozytouch/sensor.py", line 380, in _handle_coordinator_update
    self._attr_name,
    ^^^^^^^^^^^^^^^
AttributeError: 'CozytouchSelect' object has no attribute '__attr_name'. Did you mean: '_attr_name'?
gduteil commented 5 days ago

Bonsoir,

Le "Temp_22" était pour un test, j'ai oublié de l'enlever. 22 et 23 n'ont toujours pas évolué ?

Je confirme que le 111 est mappé comme la température d'eau, c'est ce que j'avais trouvé sur ma chaudière gaz, les identifiants de capability sont commun sur tous les type d'appareils.

Pour 1 et 2, ça correspondrait à l'activation du mode chauffage sur les entités climate de la capture d'écran ? il faudrait tester si c'est un juste une valeur d'état en lecture ou si c'est une valeur de consigne, tout comme 3 et 107106 .

Je vais regarder pour les erreurs de logs, je ne les ai pas vues chez moi.

Je viens d'ajouter le mapping de la PAC dans la branche main, le mieux est de passer sur cette branche pour commencer à faire des modifs pour tester.

Dans les grandes lignes, les 2 fichiers de mapping sont :

Le principal fichier à modifier va être le capability.py, en regardant les autres mapping ça devrait donner des exemples sur comment faire.

Voici 2 petits exemples de mapping d'entités modifiables (switch et slider de température) :

    elif capabilityId == 1:
        capability["name"] = "test_capability_1"
        capability["type"] = "switch"
        capability["category"] = "sensor"

Pour ajouter une valeur de réglage de température :

    elif capabilityId == 22:
        capability["name"] = "test_temp_22"
        capability["type"] = "temperature_adjustment_number"
        capability["category"] = "sensor"

Il faut penser à redémarrer HA pour que ça soit pris en compte.