Concept Entrées Entitées Variables et Matériels - Débutant

Bonjour,

Je souhaitais créer un bouton de type interrupteur dans le tableau de bord qui lorsque je cliques dessus change de couleur et soit lié également à un bouton poussoir physique ZigBee de marque Aqara et de modèle WXKG11LM.

*Mais cela ne fonctionnait pas. J’ajoutais une carte avec le matériel de mon bouton. J’ai donc chercher, chercher, chercher pour enfin trouver la solution. J’ai créé une Entrée dans le menu /Paramètres/Appareils et Services/Entrées et je l’ai nommée pareil que mon bouton. Mon bouton s’appelle bouton2 et mon Entrée s’appelle bouton2_valeur.

Voici le code au niveau du tableau de bord :

show_name: true
show_icon: true
type: button
entity: input_boolean.bouton2_valeur
name: Bouton 2
hold_action:
  action: none
show_state: true

Une capture écran :

image

Voici la capture écran de l’entrée que j’ai créé :

Et cela fonctionne bien. Je clique sur le bouton poussoir physique, j’obtiens :

image

Je recliques dessus, j’obtiens :

image

Je cliques de la même manière sur l’interface, cela fonctionne aussi.

Question

C’est d’une magie fantastique. Je n’ai rien fait de plus. Et bien, je me pose la question suivante :

Pourquoi cela fonctionne ? Cela vient de mon nommage ? Autre ?

Je ne vois pas le lien qui existe entre mon entrée et mon bouton physique :frowning:

J’utilise zigbee2mqtt et mosquitto en mode supervisé intégrés dans Home Assistant.

Remarque : Et par rapport à Jeed… avec le même matériel, il n’y a aucune latence. Cela réagi instantanément. Une efficacité redoutable ce Home Assistant …

Ma configuration


System Information

version core-2024.6.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.29-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 4998
Installed Version 1.34.0
Stage running
Available Repositories 1392
Downloaded Repositories 1
HACS Data ok
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.3
update_channel stable
supervisor_version supervisor-2024.06.0
agent_version 1.6.0
docker_version 25.0.5
disk_total 30.8 GB
disk_used 5.1 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), Advanced SSH & Web Terminal (18.0.0), Studio Code Server (5.15.0), Mosquitto broker (6.4.1), Zigbee2MQTT (1.38.0-1)
Dashboards
dashboards 2
resources 0
views 4
mode storage
Recorder
oldest_recorder_run 3 juin 2024 à 09:37
current_recorder_run 9 juin 2024 à 17:25
estimated_db_size 24.35 MiB
database_engine sqlite
database_version 3.44.2
___

Salut,
Il n’y a aucune raison, avec ce que tu as expliqué pour que cela marche :slight_smile:
De base un bouton de ce type-là n’a normalement pas d’état on/off, tout ce qu’il fait c’est envoyer l’info quand il a été cliqué.

Donc si au travers de HA tu veux l’utiliser pour un créer un interrupteur avec un état on/off, c’est faisable avec exactement ce que tu as utilisé, un input_boolean.

A moins qu’il y a une fonction récente qui le fasse, un input_boolean, ne peux être automatquement lié à une autre entité par son nom ou autre chose.

Il faudrait quelque chose comme une automatisation qui se déclenche au clic sur le bouton physique pour appeler le servive input_boolean.toggle par exemple, pour faire ce que tu as décrit.

Alors je ne sais pas si tu as quelque chose que tu as testé avant qui reste et qui donne ce résultat. Mais en tous cas il doit y avoir quelque chose…

Bonjour @AlexHass

Pardon. J’ai créé une automatisation (automation). La voici :

- id: '17xxxxxxxxxxxxxxxxxx'
  alias: automation_appui_bouton2
  description: Appui court sur le bouton2 de la maison
  trigger:
  - platform: device
    domain: mqtt
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    type: click
    subtype: single
  condition: []
  action:
  - parallel:
    - service: input_boolean.toggle
      metadata: {}
      data: {}
      target:
        entity_id: input_boolean.bouton2_valeur
  mode: single

La capture écran, pour être plus clair pour les nouveaux venu(e)s comme moi :

J’ai compris. Je te remercie pour tes explications claires :slight_smile:

Faire le Ninja n’est pas encore pour maintenant. :wink: Je ne me suis pas encore noyé dans la documentation YAML de HA. Je fais pour le moment tout avec l’éditeur visuel pour comprendre le code YAML généré. Mais ce principe de programmation en YAML est très riche. On peut demander ce que l’on souhaite au système. Je suis très content d’utiliser un système domotique, enfin, qui tienne la route !

PS: L’épais brouillard se dissipe petit à petit, lentement…

Dans l’automatisation du bouton,

- id: '17xxxxxxxxxxxxxxxxxx'
  alias: automation_appui_bouton2
  description: Appui court sur le bouton2 de la maison
  trigger:
  - platform: device
    domain: mqtt
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    type: click
    subtype: single
  condition: []
  action:
  - parallel:
    - service: input_boolean.toggle
      metadata: {}
      data: {}
      target:
        entity_id: input_boolean.bouton2_valeur
  mode: single

Il est dommage que la valeur de -id est un nombre. Je m’en sort pour me repérer avec l’alias.
Idem avec la valeur de device_id: qui est une suite alphanumérique. Je m’en sors en renommant mon bouton physique bouton2 et en nommant l’Entrée, bouton2_valeur. Je sais donc que si l’entrée est bouton2_valeur, cela correspond à un bouton physique qui se nomme bouton2 :stuck_out_tongue:

Utile quand sa propre mémoire approche celle de Dory …

J’aurai certainement dû l’appeler bouton2_interrupteur d’ailleurs. Puisque c’est bien son Type à l’Entrée, un interrupteur On/Off.

Quand penses-tu @AlexHass stp ? Ma convention de nommage est t’elle suffisante pour le syndrome Dory ?

Je dirais, de base nommer une entitié « bouton2 » ce n’est pas forcément suffisant, quand tu n’as rien de configuré dans le système ,ça va, mais si tu penses arriver sur un système plus gros, très vite « bouton2 » ça va devenir trop abstrait :slight_smile:
Après la notion de « valeur » c’est un peu vague, mais « interrupteur » l’est tout autant, d’autant que l’entité a déjà un type input_boolean… qui renseiogne sur la fonction :slight_smile:

Pour le côté YAML dans les automatisations, c’est simple pour partager, mais dans les faits utiliser l’interface graphique c’est qd même plus facile, je n’utilise que ça.
De la même façon l’ID de l’automatisation, je n’ai pas ouvert le ficheir automations.yaml depuis un long moment, si je veux voir le yaml d’une automatisation, je fais ça directement depuis l’interface graphique:

Bonjour @AlexHass. Je suis d’accord. bouton2 était juste pour le test. J’apprends que input_boolean est en fait un interrupteur. Je vais réfléchir à un nommage correct… Je compte donc également utiliser à outrance l’éditeur visuel suite à ton conseil. Cela évitera une infinité d’erreurs de conception yaml.

Merci beaucoup pour tes conseils avisés. :slight_smile:

Petite remarque pour ceux qui débute comme moi. J’essai de ne pas écrire de choses en double dans l’automation. J’aimerai donc utiliser des variables. Par exemple, pour des seuils de déclenchement ou autre.

Voici pour l’instant, ma configuration YAML :

/config/configuration.yaml:

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

homeassistant: !include homeassistant.yaml

http: !include http.yaml

#conversation:

lovelace:

/config/automation.yaml:

- variables: !include variables.yaml

- id: 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
  alias: automation_appui_bouton2
  description: Appui court sur le bouton2 de la maison
  trigger:
  - platform: device
    domain: mqtt
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    type: click
    subtype: single
  condition: []
  action:
  - parallel:
    - service: input_boolean.toggle
      metadata: {}
      data: {}
      target:
        entity_id: input_boolean.bouton2_interrupteur
  mode: single
- id: 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
  alias: gestion_charge_telephone_s9
  description: Gestion de la charge du téléphone S9 avec notifications
  trigger:
  - type: not_plugged_in
    platform: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: binary_sensor
  condition:
  - type: is_battery_level
    condition: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: sensor
    above: 0
    below: '{{ battery_level_below }}'
  action:
  - service: persistent_notification.create
    data:
      message: Le niveau de charge n'est pas à 100%, veuillez rebrancher votre téléphone
        S9
      title: Le téléphone S9 a été débranché.
  - device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: mobile_app
    type: notify
    message: Le niveau de charge n'est pas à 100%, veuillez rebrancher votre téléphone
      S9.
    title: Votre téléphone S9 a été débranché.
  mode: single
- id: 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
  alias: gestion_charge_telephone_s20
  description: Gestion de la charge du téléphone S20 avec notifications
  trigger:
  - type: not_plugged_in
    platform: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: binary_sensor
  condition:
  - type: is_battery_level
    condition: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: sensor
    above: 0
    below: '{{ battery_level_below }}'
  action:
  - service: persistent_notification.create
    data:
      message: Le niveau de charge n'est pas à 100%, veuillez rebrancher votre téléphone
        S20.
      title: Le téléphone S20 a été débranché.
  - device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: mobile_app
    type: notify
    message: Le niveau de charge n'est pas à 100%, veuillez rebrancher votre téléphone
      S20.
    title: Le téléphone S20 a été débranché.
  mode: single
- id: 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
  alias: Alerte Baie Serveurs
  description: Gestion de la temperature de la baie serveurs
  trigger:
  - type: temperature
    platform: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: sensor
    for:
      hours: 0
      minutes: '{{ rack_server_temperature_critical_stay_for_minutes }}'
      seconds: 0
    above: '{{ rack_server_temperature_critical }}'
  condition: []
  action:
  - service: persistent_notification.create
    metadata: {}
    data:
      message: Niveau critique atteint de la température de {{ rack_server_temperature_critical }}° de la baie serveurs.
      title: ALERTE TEMPERATURE {{ rack_server_temperature_critical }}° BAIE SERVEURS
  - device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: mobile_app
    type: notify
    message: Niveau critique atteint de la température de {{ rack_server_temperature_critical }}° de la baie serveurs.
    title: ALERTE TEMPERATURE {{ rack_server_temperature_critical }}° BAIE SERVEURS
  - device_id: xxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: mobile_app
    type: notify
    message: Niveau critique atteint de la température de ({{ rack_server_temperature_critical }}°) de la baie serveurs.
    title: ALERTE TEMPERATURE {{ rack_server_temperature_critical }}° BAIE SERVEURS
  mode: single

Et le fichier /config/variables.yaml:

battery_level_below: 95
rack_server_temperature_critical_stay_for_minutes: 30
rack_server_temperature_critical: 36

Je compte prendre comme prochain appareil connectée, 2 prises connectées ZigBee. Je pourrai ainsi réguler la température de ma petite baie serveur en branchant des petits ventilateurs dedans…

Mais évidemment, je me rends compte que j’ai un problème sur chaque automatisation. Le code ci-dessus n’est donc pas correcte et ne fonctionne pas. :frowning:

Par exemple, celle-ci :

L’automatisation n’est pas disponible
Conditions: expected float for dictionary value @ data[‹ below ›]

- id: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  alias: gestion_charge_telephone_s9
  description: Gestion de la charge du téléphone S9 avec notifications
  variables: 
    battery_level_below: 95.0
  trigger:
  - type: not_plugged_in
    platform: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: binary_sensor
  condition:
  - type: is_battery_level
    condition: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    domain: sensor
    above: 0
    below: "{{ battery_level_below }}"
  action:
  - service: persistent_notification.create
    data:
      message: Le niveau de charge n'est pas à 100%, veuillez rebrancher votre téléphone
        S9
      title: Le téléphone S9 a été débranché.

Une idée @AlexHass ?

Dois-je utiliser un script pour variabiliser tout ceci ?
J’ai lu : Syntaxe de script - Home Assistant (home-assistant.io)