Automatisering in Home Assistant


De regels in Home Assistant om acties uit te voeren op basis van sensors en andere parameters worden 'Automations' genoemd. Een automation bestaat uit minimaal de volgende zaken:

  • Een 'trigger': dit is een verandering die er voor zorgt dat de automatisering gestart wordt; meestal is dit een statusverandering (bijvoorbeeld een knop of sensor die aan- of uitgaat), maar het kan ook een verandering in waarde zijn van een sensor beneden of boven een bepaalde grenswaarde.
  • Een of meer 'Actions': dit zijn de acties die de automatisering moet uitvoeren als de automatisering wordt uitgevoerd.
Daarnaast zijn er nog meer mogelijkheden:
  • Conditions: dit zijn voorwaarden die gecontroleerd worden: als aan deze voorwaarden wordt voldaan, wordt de automatisering uitgevoerd.
  • 'Choose - Default' constructies: hierbij wordt bij de uitvoering van de automation een keuze gemaakt tussen verschillende acties, op basis van bepaalde condities.
Een (relatief) simpele automation ziet er als volgt uit (opmaak in YAML):

- alias: Knop Keuken
  id: knop_keuken
  trigger:
  - device_id: 8aff222da27449a5869894917c6f00a9
    discovery_id: mk_button3
    domain: mqtt
    platform: device
    subtype: button_3
    type: button_short_release
  action:
  - entity_id: light.keuken
    service: homeassistant.toggle

De betekenis hiervan is als volgt:
  • id: dit is een unieke identifier van de automation, deze wordt gebruikt om de automation aan te roepen; deze automation wordt de entity 'automation.knop_keuken'
  • alias: een makkelijk leesbare naam voor de automation, deze hoeft niet uniek te zijn
  • trigger: dit is een redelijk gecompliceerde trigger, gebaseerd op de mqtt discovery functionaliteit. In dit geval dient de activiteit 'button_short_release' op button_3 van dit device als trigger.
  • action: de entiteit 'light.keuken' wordt 'getoggled', dus aan als hij uit is, uit als hij aan is.

Choose - Default constructies

In het voorbeeld hierboven wordt geen gebruik gemaakt van condities, het is een simpele 'als…dan' constructie, een druk op de knop leidt tot een actie.
Dit is voor veel toepassingen te gebruiken, zeker met de 'toggle' functie is dit een snelle en efficiƫnte manier om direct een bruikbare configuratie te maken.
Bij het gebruik van bewegingssensoren kwam ik echter al gauw een wat lastiger toepassing tegen:
  • Bij het detecteren van beweging is het een simpel 'als…dan' probleem: bijvoorbeeld licht aan bij beweging
  • Bij het niet langer detecteren van beweging is het iets lastiger: het licht moet eigenlijk nog een tijdje aan blijven. Dit is op te lossen met een delay:
- alias: PIR Fietsenhok aan
  id: fietsenhok_on_pir
  trigger:
  - entity_id: binary_sensor.pir_fietsenhok
    from: 'off'
    platform: state
    to: 'on'
  action:
    service: homeassistant.turn_on
    entity_id:
    - light.lamp_fietsenhok
- alias: PIR Fietsenhok Uit
  id: fietsenhok_off_pir
  trigger:
  - entity_id: binary_sensor.pir_fietsenhok
    platform: state
    for:
      minutes: '10'
    to: 'off'
  action:
    service: homeassistant.turn_off
    entity_id:
    - light.lamp_schuur
    - light.lamp_fietsenhok

Dit betekent dus wel dat er voor elke bewegingssensor 2 automations nodig zijn, en soms nog meer, als je bijvoorbeeld de lamp op 50% wil zetten na 5 minuten.
Met de 'Choose…Default' constructie is het mogelijk om dit in 1 automation op te lossen:

- alias: PIR Fietsenhok
  id: pir_fietsenhok
  trigger:
  - platform: state
    entity_id: binary_sensor.pir_fietsenhok
  mode: restart
  action:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state == ''on'' }}'
      sequence:
      - entity_id: light.lamp_fietsenhok
        service: homeassistant.turn_on
    default:
    - delay:
        minutes: 10
    - service: homeassistant.turn_off
      data:
        entity_id:
        - light.lamp_schuur
        - light.lamp_fietsenhok

Hierbij wordt er dus getriggerd op een verandering van de 'state' van een sensor, dit kan zowel het begin als het einde van de beweging zijn. In de 'choose' constructie wordt gekozen welke van de twee hier het geval is, met behulp van de 'trigger.to_state.state' variabele. In alle andere gevallen wordt de 'default' keuze gebruikt.
Deze zelfde constructie met 3 keuzes:

- alias: PIR Badkamer
  id: pir_badkamer
  trigger:
  - platform: state
    entity_id: binary_sensor.sensor_badkamer_occupancy
  mode: restart
  action:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.state == "on" }}'
      sequence:
      - brightness_pct: 100
        device_id: 36914d0a043b4435bc9fceb42065ce4b
        domain: light
        entity_id: light.badkamer_level_on_off
        type: turn_on
    default:
    - delay:
        minutes: 3
    - choose:
      - conditions:
        - condition: state
          entity_id: light.badkamer_level_on_off
          state: 'on'
        sequence:
        - service: light.turn_on
          entity_id: light.badkamer_level_on_off
          data:
            brightness_pct: 50
            transition: 3
    - delay:
        minutes: 2
    - service: homeassistant.turn_off
      data:
        entity_id:
        - light.badkamer_level_on_off

In dit geval dus bijna dezelfde constructie, alleen komt er bij de 'default' clausule nog een extra condition, die er na 3 minuten voor zorgt dat als het licht niet inmiddels op een andere manier is uitgezet, deze op 50% wordt gezet. Na nog eens 2 minuten wordt het licht helemaal uitgezet.
De 'restart' mode van deze automation zorgt ervoor dat bij een tussentijdse beweging deze automation wordt gestopt, en een nieuwe begint (de teller begint dus weer van voor af aan).

Op deze manier heb ik een groot aantal van mijn automatiseringsregels kunnen combineren.

Reacties

Populaire posts van deze blog

NFC Scanner voor toegangscontrole