Modifier l'attribut "hvac_action" via un switch

Mon problème

J’ai une entité climate, une TRV qui ne gère pas nativement l’attribut « HVAC_action ». Cet attribut m’est nécessaire pour faire fonctionner une intégration de gestion plus « fine » du thermostat.

Du coup, je cherche, via un switch, à « émuler » cet attribut.

J’ai donc ce switch :

- platform: template
  switches:
    switch_climate_bureau:
      value_template: "{{ is_state('climate.bureau', 'heat') }}"
      turn_on:
        - service: climate.set_hvac_mode
          data:
            hvac_mode: 'heat'
          target:
            entity_id: climate.bureau
        - service_template: "{{ state_attr('climate.bureau', 'hvac_action', 'heating') }}"
      turn_off:
        service: climate.set_hvac_mode
        data:
          hvac_mode: 'off'
        target:
          entity_id: climate.bureau

Il fonctionne pour la partie climate.set_hvac_mode et passe bien ma vanne de régulation en mode chauffage/off.

Ce qui me chagrine, c’est la partie - service_template: "{{ state_attr('climate.bureau', 'hvac_action', 'heating') }}"

J’ai beau retourner le problème dans tous les sens, je n’y arrive pas.

…:: Ce que je cherche donc en finalité ::…
(toutes les idées sont les bienvenues)

Soit trouver une méthode pour émuler l’attribut hvac_action (s’il existe un moyen de lier l’attribut hvac_mode d’origine avec hvac_action) du genre :
hvac_mode: 'heat' == hvac_action: 'heating'
et à l’inverse :
hvac_mode: 'off' == hvac_action: 'idle'

OU ALORS :

M’expliquer où je me plante dans ce switch qui fait que j’ai cette erreur :
Échec de l'appel du service switch/turn_on. Error rendering service name template: TypeError: state_attr() takes 3 positional arguments but 4 were given

Parce que je ne vois pas où est le 4e argument dont il me parle !

Ma configuration


System Information

version core-2024.2.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.1
os_name Linux
os_version 6.6.16-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1403
Downloaded Repositories 28
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.0
update_channel stable
supervisor_version supervisor-2024.02.1
agent_version 1.6.0
docker_version 24.0.7
disk_total 30.8 GB
disk_used 10.5 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), FTP (5.0.1), Mosquitto broker (6.4.0), Zigbee2MQTT (1.35.3-1), WireGuard (0.10.2), Studio Code Server (5.15.0)
Dashboards
dashboards 3
resources 18
views 9
mode storage
Recorder
oldest_recorder_run 24 février 2024 à 10:44
current_recorder_run 5 mars 2024 à 13:37
estimated_db_size 85.22 MiB
database_engine sqlite
database_version 3.44.2
Sonoff
version 3.6.0 (8dd8af9)
cloud_online 3 / 3
local_online 0 / 0
___

Slt…
Il te dit qu’ily a un argument en trop !
Déjà passe par le Mode développement état et vérifie ton climate , tu auras les attributs !
Puis dans modele , essaye ton template ?

Slt @Doubledom ,

je connais les attributs de l’entité. hvac_action n’y figure pas nativement. Je l’ai rajouté via un custom attribute dans mon fichier configuration.yaml :

homeassistant:
  customize:
    climate.bureau:
      hvac_action: "off"

Du coup j’ai bien l’attribut dans HASS de mon climate.bureau :

hvac_modes: off, heat
min_temp: 5
max_temp: 30
target_temp_step: 0.5
preset_modes: none, auto, manual, holiday
current_temperature: 10.5
temperature: 30
preset_mode: manual
friendly_name: Bureau
supported_features: 401
hvac_action: off

Jusque là tout est bon. Le code indiqué dans le post original fonctionne. La partie que tu m’as mise en évidence n’est pas concernée puisqu’elle fonctionne. Je n’ai que la ligne où je cherche à modifier le hvac_action qui déconne.

J’ai tenté, bien avant de poster ce message, les outils de devs. Ces derniers me renvoient la même erreur concernant les 4 arguments ! Et c’est là que je pêche… Je n’arrive pas à lui demander de me modifier la valeur de l’attribut hvac_action. J’ai cherché la syntaxe sur le web pendant quasi 3h hier et 1 bonne heure aujourd’hui. Et j’arrive au bout de mes investigations. Je n’ai sûrement pas les connaissances suffisantes pour ça, j’en convient de bonne grâce. Mais cette particularité ne semble pas faire partie de la doc de hass ou alors je n’ai pas su lire correctement la doc. Pour ça que tout seul, je tourne en rond :grimacing:

J’ai tenté avec un genre de {{ set state_attr('climate.brueau ... etc. sans plus de succès. Comment définir cette saleté d’attribut :sweat_smile:

Regarde dans les service climate du mode développement, tu vas trouver ce que tu veux !

Pour mes Climate tuya je fais par automation, pour mettre à jour directement sur les radiateurs !
avec les fonctions du tuya …

Non plus mon pauvre. Je peux y modifier les modes CVC (hvac_modes), allumer (climate.turn_on), éteindre par exemple mais pas changer ce fichu attribut.

Justement, je me suis affranchi de tuya pour du Z2M. afin justement de ne plus dépendre de leur cloud.

Mais l’ajout via Z2M ne me retourne pas le hvac_action tant demandé par toutes les intégrations de gestion du chauffage.

EDIT

hvac_action: idle ou heating ? pas off

Je suis en Local Tuya donc pas le cloud maintenant !

Je suis trop neuneu pour du local tuya. Jamais réussi à le faire fonctionner dans la durée.
Alors hvac_action peut revêtir plusieurs valeurs. Parmi elles :

  • heating,
  • idle,
  • cooling,

Les 2 seules valeurs que cet attribut m’intéressent sont : ‹ heating › et ‹ idle ›.

En gros quand ça chauffe : heating
quand je l’éteins : idle.

Et non pas OFF, j’ai mis off comme valeur de base mais je peux mettre « idle » effectivement. Néanmoins, ça ne change rien à mon affaire :confused:

Et ça, tous les blueprint/intégrations de HACS utilisent cet attribut. C’est pour ça. Les vannes gèrent très très mal mon chauffage et « Versatile Thermostat » par exemple fonctionne du feu de Dieu pour mes 2 sèches serviettes. Vu qu’il propose aussi de gérer des vannes thermostatiques, je me suis dit que soit j’investit, soit je trouve une solution pour faire semblant.

Hello,

Pas certain de bien comprendre ta problématique.
Avec Versatile thermostat, un climate over climate sur ton TRV n’est pas suffisant ?
C’est ce que j’ai mis en place sur 2 trv zigbee et ça roule

Non justement ! à cause de ce fameux attribut hvac_action.

J’ai déjà pris contact avec le développeur. Et c’est bien ce qui pêche.
En gros pour comprendre ma problématique c’est simple :

Comment en basculant un switch, tu peux faire revêtir à une entité climate l’attribut hvac_action: 'heating'

{{ states.climate.bureau.hvac_action | default('heating') }} > marche pas.

{{ state_attr('climate.bureau', 'hvac_action', 'heating') }} > me dit que j’ai 4 arguments au lieu de 3 et ne me change pas la valeur de l’attribut

{{ state_attr('climate.bureau', 'hvac_action')=='heating' }} > me retourne True/False suivant la valeur déjà existante de l’attribut.

Quand je me suis lancé là dedans, je ne pensais pas que donner une valeur à un attribut serait une telle sinécure :joy:

Ou alors, au pire, comment je peux créer une automatisation qui permette ceci :

SI :
entity: 'climate.bureau'
hvac_mode='heat'

ALORS :
entity: 'climate.bureau'
hvac_action='heating'
SINON :
hvac_action='idle'

Pour faire simple. Enfin ça paraît simple dans ma tête quoi.

C’est quel modèle ton TRV qui te pose souci ? Un Sonoff ?

celle-ci :
MOES ZTRV-ZX-TV01

Une SONOFF ce serait trop simple, une TRV Shelly aussi, vu que cet attribut est d’office présent.

Je pensais au TRV sonoff car justement il a eu pas mal de soucis avec Z2M

Et bien tu vois, depuis que je suis passé tout sonoff quasiment, je n’ai plus aucun problème. Plus d’indisponibilité des capteurs, plus de lumières qui s’allument ou s’éteignent pour un oui ou pour un non.
Sonoff via Z2M a changé ma vie si je puis dire. Reste que les noname chinois me donnent des cheveux blancs.

Après je ne suis pas parano anti-cloud etc. Mais le défi technique m’avait l’air surmontable de tout passer sous Zigbee2Mqtt. C’était sans compter sur ce truc de définir une valeur à un attribut. Mais c’est plus de la mauvaise connaissance de home assistant qu’autre chose je pense.

1 « J'aime »

Petite question est-ce que tu peux changer dans le développement état la valeur du

 hvac_action: idle 

par autre

hvac_action: "off"

Et bien non !
A part si je demande à mon configuration.yaml de le faire à l’origine (au démarrage) grâce à :

homeassistant:
  customize:
    climate.bureau:
      hvac_action: "off"

Malheureusement, je ne trouve pas la ligne de code qui me permette de le changer de idle à off ou tout autre chose. Et c’est ce dont j’ai besoin.

j’ai tenté dans les outils de dev :

{{ states.climate.bureau.hvac_action | default('heating') }} > marche pas.

{{ state_attr('climate.bureau', 'hvac_action', 'heating') }} > me dit que j’ai 4 arguments au lieu de 3 et ne me change pas la valeur de l’attribut

{{ state_attr('climate.bureau', 'hvac_action')=='heating' }} > me retourne True/False suivant la valeur déjà existante de l’attribut.

Edit : J’ai peut être mal compris : J’arrive à changer l’Etat sans problème. L’état de l’entité climate. L’attribut non.

tu dois pouvoir le faire sur la partie état
image
et écrire directement "off"
image
puis
image
et normalement si ok devrait le faire avec le script python !

voilà alors ça oui bien sûr ! mais comment automatiser ce truc là ?

Je vois que tu me parles de python. Si c’est pas vraiment possible en yaml alors je vais abandonner l’idée. J’ai déjà de grosses lacunes en yaml alors vu que je n’y connais strictement rien en python, je vais pas me lancer dans plus de complexité.

je le fais pour des Bp EDISIO pour changer la valeur ! car revient pas à zéro !
j’ai piqué cela sur forum.io assez vieux ! mais voir le github

2 « J'aime »

Ca me semble parfaitement correspondre. J’avais déjà vu ce forum. Néanmoins, je n’ai pas réussi à implémenter cette solution correctement. Elle me propose de changer l’état général de l’entité, mais pas l’attribut. Je vais retenter, avec une bonne nuit de sommeil, je suis peut-être passé à côté de qqch.

Je retente. Mais selon vous il n’existe pas de moyen simple dans un template de faire ça du coup ?