Blog/des automatisations.md

des automatisations.md

Télécharger

Rechercher

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.