Récupérer une valeur d'état d'un appareil (Z2M)

Bonjour,
Contexte : Pi5 8Go Home Assistant OS 6.12.47-haos-raspi.
Expériences
langages (C++, Python, …) YAML : aucune
domotique ESP32, etc., MQTT (C)

Question : Comment récupérer la valeur « Température » d’un appareil connecté en Z2M pour agir sur une prise connectée (d’un chauffage) ce fonction d’une valeur de consigne.
La valeur T° de l’appareil (TH01) est visible dans l’aperçu global (par pièce) et dans le tableau de bord Zigbee2MQTT.
MQTT global (capteur Température et Humidité type TH01) :
" zigbee2mqtt/T°H% 2 - Chambre"
Nom convivial : « T°H% 2 - Chambre »
Topic (?) : T°H% 2 - Chambre Température

État :

{
    "battery": 100,
    "humidity": 54.17,
    "linkquality": 15,
    "temperature": 15.73,
    "voltage": 2800
}

Merci.

Hello,

tu as vérifié que ce n’est pas juste désactivé dans ton matériel ?

si tu vois l’entité là ça sera simple de la retrouver

cdt

La température évoluant dans les différents aperçus et historique graphique, l’appareil est bien activé.
Le problème est de:

  1. Récupérer cette valeur, non sur changement d’état, mais épisodiquement.
  2. Comparer cette valeur avec une température de consigne (valeur numérique, constante pour une pièce dans une première approche)
  3. Connecter une prise si T° < consigne - hystérésis
    Déconnecter la prise si T° > consigne + hystérésis.

Le premier problème est donc d’interroger l’état du capteur, et de savoir récupérer la température dans une variable.
cordialement

Il faut utiliser les template pour récupérer l’état de ton capteur tu trouvera le nom de cet état dans la partie outils développeurs de HA dans l’onglet et etat tu peux trier tes valeur pour retrouver ton état

puis dans l’onglet template tu peux tester ton template

cela utilise le langage jinja2

mais dans ton cas pourquoi ne pas utiliser des éléments tous fait comme un vterm (virtual thermostat) ou versatile thermostat .?

1 « J'aime »

Bonjour,
Merci pour la réponse, même si j’ai buté - partiellement - sur l’interprétation de celle-ci.

  1. Pourquoi ne pas utiliser vterm ou versatile thermostat ?
    Je ne l’exclue pas ultérieurement, mais en tant qu’informaticien, j’essaye d’abord de comprendre les bases sous-jacentes (d’autant plus que j’ignore tout au départ de YAML et que jinja2 m’est plus explicite), quitte à utiliser ensuite un ensemble plus élaboré existant.
    J’ai pris l’exemple d’un capteur température, mais la demande est générique car la méthode - une fois comprise - devrait s’appliquer à d’autres capteurs et actionneurs : Présence, 4-boutons, mouvement, ouverture, prises commutées, clavier RFID codé, etc.
    En fait, pour ce qui concerne la température j’ai déjà téléchargé versatile thermostat, mais j’en diffère l’usage pour l’instant pour les raisons évoquées plus haut.
  2. J’ai récupéré - via « outils de développement » - (pour la température) :
  • T°H% 2 - Chambre (capteur)
  • sensor.tdegh_2_chambre_temperature
  • : Attributs d’état YAML
    Note : capteur renommé pour simplification (soupçon [injustifié] sur le « % » inclus dans le nom pouvant interférer) : Temp_Hum_2_Chambre
    (via Zigbee > Appareils )
    ET via Paramètres > Appareils et services > MQTT >
    … renommage (icone crayon)
    (Pourquoi les deux ne sont pas [toujours…] synchronisés ?)
    Note : Le capteur 2 semble légèrement différent des autres (achetés ensemble) en ajoutant détection d’ouverture et de vibration n’existant pas chez les autres du même lot !
    (Peut-être une erreur dans deux approches (identifications] pour un même capteur)

state_class: measurement
unit_of_measurement: °C
device_class: temperature
friendly_name: Temp_Hum_2_Chambre

Mon erreur initiale vient de la confusion entre l’utilisation du friendly_name (Temp_Hum_2_Chambre) et le nom du capteur avec sa composante temperature
(sensor.temp_hum_2_chambre_temperature)

Test 1 (erroné) :

{{states('Temp_Hum_2_Chambre_temperature') }}

=> unknown

Test 2 (OK) :

{{states('sensor.temp_hum_2_chambre_temperature') }}

=> (Résultat)
15.89
Type de résultat: number
Ce modèle écoute les événements de changement d’état suivants :
Entité: sensor.temp_hum_2_chambre_temperature

Pour éviter éventuellement à d’autres la confusion initiale sur le nommage (entre les id, les friendly name et les noms utilisés dans les templates), j’ai entouré - en pas à pas (en image) - les endroits ou on trouve certaines des informations utiles :


En espérant que cela puisse être utile pour éliminer certaines confusions.

Pour la suite, le test :

{% set tempe = states('sensor.temp_hum_2_chambre_temperature') | float %}
{{ tempe }}    {# affichage de variable "tempe" #}

renvoie bien la valeur de température,
suivi d’une tentative de comparaison :

{% set tempe = states('sensor.temp_hum_2_chambre_temperature') | float %}
{{ tempe }}    {# affichage de variable "tempe" #}
{% if tempe < 19 %}
 {# ultérieurement appel de macro_chauffage ON #}
{% elif tempe > 20 %}
 {# chauffage OFF #}
{% else %}
 {# Ne rien faire #}
{% endif %}

Renvoie (résultat):
15.41
Type de résultat: number
En bonne voie.
Note : L’oubli bête du % final dans une occurrence du test provoque un message un peu difficile à comprendre initialement :
TemplateSyntaxError: unexpected ‹ } ›
car la ligne en défaut n’est pas indiquée.

À suivre (pour paramétrer les valeurs de consigne selon un certain nombre de critères)