Triggers
Triggers zijn wijzigingen in de status van een entiteit. Bijvoorbeeld een motion-sensor die van False naar True gaat kan een trigger zijn om een lamp aan te zetten.
Om nu niet de automatisering te moeten wijzigen als een sensor vervangen wordt of als er een sensor bij komt, kunnen we een template gebruiken die de status van een willekeurige sensor in een bepaalde ruimte opvraagt en de automatisering triggert zodra deze sensor-status wijzigt. Zo’n template ziet er bv. als volgt uit:
{{ states.binary_sensor | selectattr('entity_id', 'in', area_entities('Kantoor Nico')) | selectattr('attributes.device_class', 'search', 'motion') | selectattr('state', 'eq', 'on') | list | count > 0 }}
Zoals te zien in bovenstaande code, is de area voor de entiteit bepaald als ‘Kantoor Nico‘. Voorwaarde is dus dat de motion-sensor gekoppeld is aan die ruimte.
Als je de status van de motion-sensor raadpleegt via Ontwikkelhulpmiddelen -> Statussen, zie je bij de attributen de vermelding staan voor de ‘device_class‘, namelijk ‘motion‘ en dat is de 2e regel in de code om de motion-sensor te selecteren.
De 3e regel selecteert een sensor met de ‘status‘ ‘on‘.
Automatisering in Home Assistant
Als aan de selectie-criteria wordt voldaan (er is dus beweging waargenomen) is het aantal gevonden entiteiten meer dan 0 wordt de automatisering getriggert.
Als de motion-sensor nu voor een bepaalde periode de status ‘off’ heeft en dus in die periode geen beweging is waargenomen, dan zouden we de verlichting weer uit kunnen schakelen. De template-code hiervoor is dan voor een periode van 10 minuten als volgt:
{{ states.binary_sensor | selectattr('entity_id', 'in', area_entities('Kantoor Nico')) | selectattr('attributes.device_class', 'search', 'motion') | selectattr('state', 'eq', 'on') | list | count < 1 }} for: "00:10:00"
De teller is hier nu 0 en de duur is 10 minuten.
We kunnen deze zogenaamde value_templates een id geven om te gebruiken als keuze bij de action in de automatisering. In de visuele editor ziet dat er dan zo uit:
Actions
Actions zijn de services die uitgevoerd worden in een automatisering. In dit geval het aanzetten van de verlichting in de ruimte ‘Kantoor Nico’. Voorwaarde is dus dat de diverse lampen toebedeeld zijn aan deze ruimte. In de visiuele automatiserings editor, kiezen we voor Actions -> Keuze. Hierbij maken we twee Opties aan, één voor trigger_id ‘licht_aan‘ en één voor trigger_id ‘licht_uit‘:
De bijbehorende Actions zijn dan respectievelijk Licht: Aanzetten en Licht: Uitzetten.
Het doel voor de verlichting action is in bovenstaand voorbeeld bepaald op ‘Kantoor Nico’. Hiermee wordt alle verlichting in deze ruimte aan- of uitgezet.
Automatisering met Node-RED
Om een flow te maken in Node-RED maken we eerst een sensor-template in de templates.yaml verwijzing onder sensors voor de bewegingsmelders in de ruimte genaamd ‘Tussenhal’:
- name: dynamic_sensor_tussenhal unique_id: 518b2cf8-1739-4c28-b53f-33a3b126f96e state: > {{ states.binary_sensor | selectattr('entity_id', 'in', area_entities('Tussenhal')) | selectattr('attributes.device_class', 'search', 'motion') | selectattr('state', 'eq', 'on') | list | count > 0 }}
Na het valideren en vernieuwen van de templates in Home Assistant is er een sensor.dynamic_sensor_tussenhal bijgekomen en deze kunnen we nu gaan gebruiken in een flow in Node-RED.
Als eerste een event state node die als trigger de status gebruikt die gedurende 10 minuten False is.
Via een input_boolean Helper wordt met een current state node gecontroleerd of de bewegingssensor niet overbrugd is,
Als aan beide voorwaarden wordt voldaan wordt het licht in de ruimte uit gezet met een action node:
Wordt er nu wel beweging gedetecteerd door de sensor, dan zal de sensor.dynamic_sensor_tussenhal de waarde True krijgen en de Event State node triggert de tweede uitgang. Hier volgt weer de controle op de overbrugging waarna nog een controle met een current state node plaatsvind op het feit of het reeds donker is:
Als aan beide voorwaarden wordt voldaan zal de verlichting in de ruimte ‘Tussenhal’ aangezet worden met een action node. De totale flow ziet er dan als volgt uit: