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
Een reactie posten