La configuration des automatisations peut-être assez contre intuitive. J'ignore si mon approche a été toujours la plus dogmatique, ou si comme souvent, j'ai contourné les solutions officielles pour bricoler à ma façon une méthode alternative plus geek mais moins propre. Comme pour beaucoup de logiciels, la documentation de home assistant n'est pas à jours. Elle contient peu d'exemples, et beaucoup des exemples en ligne sont eux aussi obsolètes. Mais à force d'expérimentations, on arrive à s'en sortir.
Nous avons donc plusieurs points à regarder :
- paramètres > système > Journaux, qui permet de voir les problèmes éventuels
- Outils de développement > yaml, qui permet de recharger ou redémarrer le YAML de configuration de home assistant.
- Outils de développement > Services, qui permet de lancer des services. On peut par exemple supprimer la configuration d'un device MQTT en effectuant la commande suivante dans le service MQTT:Publier:
yaml service: mqtt.publish data: topic: homeassistant/camera/esp_4005825060/config qos: "2" retain: true
- Outils de développement > évenements permet d'écouter des évenements et donc éventuellement de débug par ce moyen des scripts pythons.
- paramètres > Appareils et services, pour connecter des choses du genre freebox, NAS, ou le serveur MQTT
- paramètres > Automatisations et sènes, pour effectuer des déclancheurs : quand ces conditions sont réalisées, effectuer l'action [...] C'est le coeur de mes automatisations.
- Les timers (à configurer manuellement)
- L'interface
Commençons par un point crutial des automatisations : on a souvent besoin de choses qui durent un certain temps. Par exemple, de l'éclairage extérieur, une pompe de jardin, une VMC, etc... Pour ça, il suffit d'ajouter dans la configuration.yaml les lignes suivantes :
timer:
lampe_exterieur:
duration: "00:01:00"
pompe_jardin:
duration: "00:10:00"
vmc:
duration: "00:30:00"
On peut aussi avoir besoin d'un "mode" pour savoir dans quel état se trouve la maison : sommes nous en vacances ? Avons nous des invités ? etc...
input_select:
home_mode:
name: Mode de gestion de la maison
options:
- Tout seul
- Invités nuit
- Vacances
initial: Tout seul
icon: mdi:panda
Ce code permet d'avoir une entity qui permet de sélectionner ce mode.
Pour lancer ces timers, on peut faire ce genre de chose dans les scripts (paramètres > automatisations et scènes > Automatisations)
alias: allumer lampe extérieur
description: ""
trigger:
- platform: event
event_type: timer.started
event_data:
entity_id: timer.lampe_exterieur
condition: []
action:
- service: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.esp_11946807
mode: single
Ou bien pour la VMC :
alias: auto vmc
description: ""
trigger:
- type: humidity
platform: device
device_id: 27f5f3e8b31d140c77c36fbf14162fa3
entity_id: e8d3654c33f7f1cc8149cce76de826f3
domain: sensor
above: 85
condition:
- condition: state
entity_id: timer.vmc
state: idle
- condition: time
before: "23:00:00"
after: "11:00:00"
action:
- service: timer.start
metadata: {}
data: {}
target:
entity_id: timer.vmc
mode: single
Notez qu'il s'agit de s'accrocher à des conditions pour allumer ou éteindre des devices. Il faut donc capter le lancement ou l'extinction des timers pour allumer ou éteindre ces appareils.
Pour pouvoir lancer ces timers, il nous faut des scripts (paramètres > automatisations et scènes > Scripts)
alias: Lampe ext
sequence:
- if:
- condition: state
entity_id: timer.lampe_exterieur
state: active
then:
- service: timer.finish
metadata: {}
data: {}
target:
entity_id: timer.lampe_exterieur
else:
- service: timer.start
metadata: {}
data: {}
target:
entity_id: timer.lampe_exterieur
mode: single
icon: mdi:spotlight-beam
ce script là permet par exemple de lancer ou couper le timer de la lampe extérieure quand on déclanche le script (en fonction de l'état actuel de la lampe)
Certains scripts peuvent avoir des paramètres, ça peut être utile par exemple pour gérer une télécommande. On les gère avec le champ fields.
Et pour les afficher dans l'interface, un code de ce genre fonctionne :
type: entities
entities:
- entity: timer.pompe_jardin
icon: mdi:water-pump
tap_action:
action: call-service
service: script.pompe_jardin
target: {}
- entity: timer.vmc
icon: mdi:hvac
tap_action:
action: call-service
service: script.vmc
target: {}
- entity: timer.lampe_exterieur
icon: mdi:coach-lamp
tap_action:
action: call-service
service: script.lampe_ext
target: {}
- entity: script.dodo
title: Routines
state_color: true
Dans l'interface, on peut avoir aussi parfois besoin de modifier l'affichage d'un sensor. Exemple simple, mes machines renvoient des informations à home assistant : utilisation du disque, uptime, etc... et j'avais envie d'afficher l'uptime avec autre chose qu'un gros chiffre. Pour faire ça, il faut regarder les propriétés du sensor, puis regarder les options du template, et le modèle d'état.
{% set secs = states('sensor.grosse_debian')|int %} {% set mins = secs / 60 %} {% set hours = mins / 60 %} {% set days = hours / 24 %} {{ days | int }} days {{ (hours % 24) | int }}:{{ (mins % 60) | int }}:{{ (secs % 60) | int }}
Conclusion : on ajoute des timers, des automatisations pour les relier aux devices, des scripts pour les lancer, et enfin une interface pour pouvoir cliquer sur un bouton qui lance le script. ça fait beaucoup de trucs dans des menus différents pour une action mais c'est d'une souplesse assez agréable. Surtout qu'on a pas vraiment à coder ces choses, il s'agit vraiment de savoir ou cliquer et comment remplire les formulaires.
Je n'ai pas exploité l'entièreté des possibilités de Home Assistant, mais voilà déjà de quoi gérer pas mal de choses de façon à avoir une utilisation très agréable. Au début, j'étais un peu perdu, je le suis parfois mais globalement c'est vraiment bien.