Zet licht aan als het donker wordt

Node-RED is uitermate geschikt om flows aan te maken waarbij verlichting aan geschakeld moet gaan worden als een sensor een bepaalde status krijgt. Voor het detecteren van de hoeveelheid licht kunnen diverse sensors gebruikt worden, ik gebruik in dit voorbeeld twee sensors:

  • lichtintensiteit van Buienradar
  • lichtmeting van een HUE sensor

Voor het moment waarop het licht geschakeld moet worden, maak ik gebruik van een input_number die ik via een Dashboard kan wijzigen als dat nodig is en dan hoef ik de Node-RED flow zelf niet aan te passen. Het ophalen van de input_number zet ik dan in een global-variable zodat deze ook in andere flows gebruikt kan worden. Dit ziet er zo uit:

Met opstarten van Node-RED wordt via een ‘inject‘ node de waarde opgehaald via een ‘current state‘ node en mocht deze later wijzigen dan geeft een ‘Events: state‘ node dit door. In beide gevallen wordt de payload aan de global variable doorgegeven.

De toevoeging van Buienradar wordt hier uitgelegd. De zon-intensiteit is Irradiance. De sensor in Home Assistant is: sensor.br_irradiance

De HUE motion-detector kan naast beweging, ook de temperatuur en licht-intensiteit doorgeven. De sensor voor het licht is in Home Assistant: sensor.hue_sensor_light_level en heeft andere waardes dan die van Buienradar dus een tweede input_number wordt aangemaakt om de waarde hiervan te sturen.

De flow om beide licht-sensors op te vragen en te vergelijken met de global variabelen is als volgt:

Indien het resultaat van één van beide sensors ‘true‘ is wordt een ‘change‘ node gebruikt om de inhoud van ‘msg.payload‘ op ‘on‘ te zetten, is de uitkomst van een sensor ‘false‘ dan wordt de ‘msg.payload‘ op ‘off‘ gezet.

Vervolgens wordt een ‘schedex‘ node gebruikt om te bepalen op welke tijdstippen de verlichting aan- of uitgezet dient te worden.

Een ‘schedex‘ node kan ingesteld worden om op bepaalde tijden een ‘ON’ en/of een ‘OFF’ uit te sturen. Indien aan de ingang van deze node niets wordt gewijzigd, zullen deze tijden niet wijzigen t.o.v. wat ingesteld is. De details van de ‘on’ en ‘off’ instellingen in deze node:

Aan de uitgang van deze node wordt de ‘action‘ node gekoppeld die het licht aan- of uitschakelt, afhankelijk van de payload die binnen komt.

In deze ‘action‘-node kan vervolgens in de Targets aangegeven worden welke ‘Area‘, ‘Device‘, ‘Entity‘, ‘Floor‘ of ‘Label‘ geschakeld moet gaan worden.

Mocht het nu donker worden en de licht-sensors dat aangeven, dan wordt een ‘msg.payload’ met de string ‘on’ naar de ‘schedex‘ node gestuurd die dit gelijk doorgeeft aan de ‘service’ node waardoor het licht op dat moment aan gaat. Indien het weer licht wordt zal de verlichting uit gaan.

De complete flow:

Het voordeel van deze opzet is dat indien een sensor niets doorgeeft, de ‘schedex‘ node toch de verlichting zal aansturen.

Mocht je de verlichting uitsluitend willen schakelen tussen bepaalde tijden zonder dat deze dynamisch gewijzigd kunnen worden, gebruik dan de ‘normale’ ‘time range‘ node:

Zodra het weer licht wordt zal de verlichting weer uitgezet worden indien deze aan staat.

Een combinatie geeft de mogelijkheid om het licht aan te schakelen zodra het donker wordt en uit te schakelen zodra het weer licht wordt, echter het licht aanzetten als het donker wordt beperken tot een half uur vóór de zonsondergang.

De ‘schedex‘ node geeft standaard een on/off tussen sunset en 23:00 uur en de licht-sensors kunnen dat beïnvloeden. Een ‘on‘ payload wordt nu naar een ‘time-range‘ node gestuurd die het doorlaat tussen ‘sunset-30 minuten‘ en 23:00 uur. Een ‘off‘ payload zet altijd de lamp uit.