Node-RED: programmeren zonder coderen
Met Node-RED kun je allerlei apparaten en diensten aan elkaar koppelen zonder dat je daarvoor iets hoeft te programmeren. Door nodes naar een werkblad te slepen en verbindingen te leggen, bouw je in feite op een visuele manier alle logica op. Hoewel het breed inzetbaar is, gaan we het in dit artikel gebruiken als alternatief voor de automatiseringen in Home Assistant.
In dit artikel gaan we Node-RED gebruiken binnen Home Assistant. Ook geven we enkele praktische voorbeelden voor automatiseringen mee, zoals:
- Ledstrip automatisch aan laten gaan als een deur opengaat
- Lamp aan laten gaan bij beweging
- Lamp vanzelf weer uit laten gaan
Ouderwets code inkloppen behoort steeds meer tot het verleden. Veel programmacode komt uit de koker van ChatGPT of Copilot. Je hoeft zelf alleen nog maar de eindjes aan elkaar te knopen. Een andere trend is het visuele programmeren, waarbij je helemaal geen programmacode meer ziet, maar bouwstenen die je op een logische manier kunt koppelen.
Node-RED is een treffend voorbeeld waarmee je kunt automatiseren aan de hand van zogenoemde flows. Hoewel het breed inzetbaar is, richten we ons in dit artikel grotendeels op het gebruik in combinatie met Home Assistant. De installatie heb je snel geregeld als je de add-on binnen Home Assistant OS gebruikt.
Desgewenst kun je het ook op andere systemen installeren. Dat kan zelfs een desktop met Windows of macOS zijn. Dat is echter niet heel praktisch als het systeem altijd actief moet zijn om je automatiseringen te laten werken. Andere installatiemethoden behandelen we hier niet, maar er zijn online genoeg aanwijzingen voor te vinden (zie kader ‘Installatie Node-RED’).
Na de installatie gaan we enkele eenvoudige automatiseringen maken en daarbij steeds meer de diepte in. Je kunt uiteraard nog steeds automatiseringen in Home Assistant maken zoals je dat gewend bent. Als je wat langer met Node-RED werkt, zul je merken dat deze tool vooral voor wat complexere automatiseringen veel praktischer is.
Installatie Node-RED Je kunt Node-RED op uiteenlopende manieren installeren. De Getting Started-gids geeft hier veel aanwijzingen voor. Op een Raspberry Pi met Raspberry Pi OS of op een server met Debian of Ubuntu raden we aan het installatiescript voor de Raspberry Pi te gebruiken. Via een parameter heb je hierbij nog invloed op de versie van Node.js. Let daar goed op, want Node-RED 4.0 zal geen Node 14.x meer ondersteunen, dat rond die tijd ook aan het einde van zijn levenscyclus is. Het is dus aan te raden om alvast Node 18.x of 20.x te gebruiken.
Op veel systemen is overigens ook een installatie via Docker mogelijk. Hier is Node.js al ingebakken. Er kunnen wel andere beperkingen zijn. Zo is het wat uitdagender om vanuit de container toegang te krijgen tot bepaalde apparaten op de host, zoals de seriële poort of de GPIO-poorten van bijvoorbeeld een Raspberry Pi.
1 Wat heb je nodig
Als je een systeem met Home Assistant OS gebruikt, kun je Node-RED eenvoudig als add-on installeren. Dit behandelen we in de volgende paragrafen. Voor dit artikel gebruiken we zelf de Odroid N2+, maar op andere systemen zal het geen problemen geven, omdat het een relatief lichte toepassing is. Voor de add-on is geen verdere configuratie nodig. Kies je voor een andere installatiemethode, dan zijn er wél extra stappen. Het is handig als je al wat integraties hebt toegevoegd aan Home Assistant, zodat je daarmee kunt oefenen.
2 Accessoires
In dit artikel richten we ons zoals gezegd op de combinatie met Home Assistant. Om wat praktische voorbeelden te kunnen maken, hebben we verschillende Zigbee-accessoires toegevoegd aan Home Assistant. Het gaat om een deur- en raamsensor, een bewegingssensor met ingebouwde lichtsensor en een schakelaar in de vorm van een tussenstekker. Verder gebruiken we een programmeerbare ledstrip met WLED-software die via wifi is aangesloten.
Voor Zigbee hebben we Zigbee2MQTT gebruikt, maar je kunt ook prima Zigbee Home Automation (ZHA) gebruiken, de directe integratie van Zigbee in Home Assistant. Dit maakt in Node-RED niet veel verschil, omdat je daarin gewoon de entiteiten van Home Assistant gebruikt, ongeacht wat daar achter zit. Een voordeel van Zigbee2MQTT is dat je er wel voor zou kunnen kiezen om Zigbee2MQTT rechtstreeks aan te spreken in Node-RED, zonder tussenkomst van Home Assistant.
3 Bibliotheek met nodes
Er is een enorme bibliotheek met nodes die je kunt toevoegen vanuit de beheeromgeving van Node-RED. De add-on voor Node-RED voor Home Assistant OS bevat de meest gangbare nodes. Ook voor Home Assistant zijn de vereiste nodes al toegevoegd en vooraf geconfigureerd. Dit neemt veel werk uit handen.
De entiteiten die in Home Assistant beschikbaar zijn, kun je direct binnen Node-RED gebruiken. Bij een installatie op een aparte server zijn wat extra configuratiestappen nodig. Zo moet je minimaal de module node-red-contrib-home-assistant-websocket toevoegen. Zodra je een van de nodes voor Home Assistant gaat gebruiken, moet je eenmalig de server met Home Assistant configureren. Hierbij heb je een toegangstoken met lange levensduur nodig, die je via je profiel in Home Assistant kunt maken.
4 Installatie add-on
Als je Home Assistant OS gebruikt, kun je de Node-RED-uitbreiding eenvoudig als add-on toevoegen onder Instellingen / Add-ons. Klik hier op Add-on winkel. Je vindt Node-RED onder het kopje Home Assistant Community Add-ons. Klik erop en kies Installeer. Zet vinkjes bij Watchdog en Weergeven in zijbalk. Klik daarna op Starten. Voor eventuele bijzonderheden kijk je op het tabblad Logboek.
Afhankelijk van je systeem kan het nodig zijn om op het tabblad Configuratie via een vinkje de optie ssl uit te zetten. Je opent Node-RED met de optie Open web-ui (op het tabblad Informatie) of rechtstreeks via de link in de zijbalk links. Het is niet nodig om in te loggen.
Als je de add-on gebruikt, hoef je Node-RED in principe niet te herstarten als je namen van entiteiten in Home Assistant wijzigt, of nieuwe entiteiten toevoegt, al kan dit eventueel wel via de add-on. Bij een installatie op een aparte server is het in zo’n geval meestal wel nodig om te herstarten.
5 Werking testen
Node-RED gebruikt zoals de naam al aangeeft nodes voor elk onderdeel van een automatisering. Aan de linkerkant zie je je palet met alle beschikbare nodes. Onder het kopje home assistant zie je ook nodes die specifiek zijn voor Home Assistant.
Je kunt een node naar je werkruimte slepen en verbinden met andere nodes. Om de werking te testen kun je de node events: all (onder het kopje home assistant) naar je werkblad slepen. Deze node luistert naar alle gebeurtenissen in Home Assistant. Dubbelklik vervolgens op deze node. Zorg dat onder Properties bij het veld Server de optie Home Assistant actief is. Deze hoef je als je de add-on gebruikt niet te configureren. Klik vervolgens op Done.
Als je nu op Deploy klikt, wordt de flow in werking gesteld. Als het goed is, zie je de regel onder de node events: all kort veranderen als er ook maar iets gebeurt in Home Assistant, bijvoorbeeld het schakelen van een lamp. Als je hier een debug-node aanhangt (die bespreken we in paragraaf 10 en in het kader ‘Debug-meldingen bekijken’), dan zie je dat er zeer veel berichten langskomen. Daarom zul je in de praktijk veel specifieker willen zijn.
6 Flows
Je hebt in de vorige paragraaf je eerste flow gemaakt. Aan de bovenkant zie je voor elke flow een tabblad. Via het plusteken maak je aanvullende flows en met het icoontje daarnaast kun je flows bijvoorbeeld verbergen of uitschakelen. Dubbelklik je op een flow dan kun je de naam of omschrijving veranderen of de flow verwijderen. In de zijbalk rechts kun je onder andere informatie over nodes raadplegen of onderdelen configureren.
Het is handig om je flows een logische naam te geven. Merk op dat je in de praktijk vaak meerdere (gerelateerde) automatiseringen in één flow zult opnemen om het aantal flows binnen de perken te houden.
Lees ook: Blueprints voor Home Assistant: nog gemakkelijker je huis automatiseren
7 Trigger
Binnen Home Assistant begint een automatisering met een trigger en eventuele aanvullende voorwaarden die worden getest. In Node-RED bereik je dit door de status van een bepaalde entiteit uit te lezen. Als voorbeeld willen we een ledstrip in de berging aanzetten als het luik open is. Daarvoor is het luik voorzien van een deur- en raamsensor.
We slepen eerst de node genaamd events:state naar de werkruimte. Dubbelklik op de node en vul een herkenbare naam in. Zorg dat achter Server de optie Home Assistant is geselecteerd. Bij Entity zoek je de bewuste sensor op. De sensor geeft de status on voor open en off voor gesloten. Daarom kies je bij If State de optie is met de string on.
De mogelijke statussen kun je voor elke sensor opzoeken in Home Assistant. Ga daarvoor naar Ontwikkelhulpmiddelen / Statussen en zoek de sensor op. Klik op Done als je klaar bent. Je kunt de werking controleren via Deploy. Onder de node kun je nu steeds de status (on of off) van de deursensor aflezen. Rechts van de zojuist toegevoegde node zie je twee uitgangen: de bovenste voor als de status waar is (het luik is open), de tweede voor onwaar (het luik is dicht). We gaan in de volgende paragraaf deze uitgangen gebruiken en verbinden met de gewenste acties.
8 Service aanroepen
We kunnen nu acties toevoegen voor het aan- of uitzetten van de verlichting. De bovenste uitgang moet de lamp via een serviceaanroep aanzetten als het luik opengaat. Sleep hiervoor de node call service naar de werkruimte, rechts van de bestaande node, en verbind deze met de bovenste uitgang. Dubbelklik op de node. Kies bij Domain de optie light, bij Service selecteer je turn_on en bij Entitity zoek je de gewenste lamp op. Je kunt onder Data extra opties of ‘properties’ meegeven, zoals kleur en helderheid. Als je naar onderen bladert, zie je hier suggesties voor. Je kunt ook de ontwikkelhulpmiddelen van Home Assistant gebruiken om waarden te achterhalen voor bijvoorbeeld kleur en helderheid (zie kader ‘Ontwikkelhulpmiddelen Home Assistant’). Als voorbeeld kiezen we bij Data de optie JSON en vullen het volgende in:
{"transition":"3","rgb_color":[127,172,255],"brightness_pct":"100"}
Klik op Done. Sleep nu een tweede node call service naar je werkruimte en sluit die op de tweede uitgang aan. Herhaal de stappen, maar kies nu bij Service uiteraard turn_off. Gebruik voor een rustige overgang eventueel onderstaande JSON-code achter Data.
{"transition":"3"}
Klik tot slot op Deploy om je automatisering in werking te stellen.
Ontwikkelhulpmiddelen Home Assistant Met de ontwikkelhulpmiddelen van Home Assistant kun je vooraf alvast onderzoeken op welke manier je een service moet aanroepen. Dit helpt je bij het opstellen van je acties in Node-RED. Voor de ledstrip kun je bijvoorbeeld een gewenste kleur en helderheid meegeven. Het kan lastig zijn om de waarde voor een bepaalde kleur te vinden. Wat je kunt doen, is de lamp instellen via de beheeromgeving. De waarde kun je dan aflezen onder Ontwikkelhulpmiddelen / Statussen.
In ons voorbeeld kiezen we voor een rustige overgang (transition) en bepaalde RGB-kleur en helderheid. De RGB-kleur zijn drie gehele getallen tussen 0 en 255 die de waarden rood, groen en blauw vertegenwoordigen. We kozen lichtblauw (127, 172, 255). Voor de helderheid kiezen we 100 procent. De serviceaanroep kun je oefenen in Home Assistant onder Ontwikkelhulpmiddelen / Services. Kies bijvoorbeeld de service light.turn_on om een lamp aan te zetten. Klik dan op Entiteit kiezen en selecteer de entiteit, in ons voorbeeld light.wled. Je ziet dat je voor deze entiteit nu ook de extra details op kunt geven, waaronder de gewenste RGB-kleur en helderheid.
9 Lamp aan bij beweging
In dit tweede voorbeeld gaan we de bewegingssensor gebruiken. We willen een lamp aanzetten bij beweging en vervolgens na een bepaalde periode weer uitzetten. Er zijn meerdere manieren om dit op te lossen.
We beginnen met een node events:state voor de statusverandering van de bewegingssensor. Die sensor geef na een detectie de status on. Daarom zoek je bij Entity de bewegingssensor op en kies je bij If State de optie is met de string on. Voeg een node call service toe, zoals uitgelegd in de vorige paragraaf, om de lamp aan te zetten. Sleep dan een node delay naar je werkruimte. Deze node geeft in feite een bericht na een instelbare vertraging door aan de volgende node. Als voorbeeld kiezen we een vertraging van vijf minuten. Voeg tot slot weer een node call service toe. Deze moet de lamp uitzetten na de gekozen vertraging.
Verbind alle nodes met elkaar en test de werking. Er is één praktische beperking: na bewegingsdetectie wordt de lamp na de gekozen vertraging uitgezet, óók als er binnen die periode nog een keer iemand langs de bewegingssensor loopt. Liever wil je dat de lamp aan blijft en pas vijf minuten na de laatste detectie uitgaat. We zullen twee methoden laten zien om dat op te lossen.
10 Trigger met vertraging
Bij de eerste methode voegen we zoals eerder de node events:state voor de bewegingssensor toe. Voeg vervolgens de node genaamd trigger toe. Deze vind je onder het kopje function. Voeg als laatste weer een node call service toe voor het aan- of uitzetten van de verlichting. Dubbelklik op de node trigger en vul bij Send de onderstaande regel in (dit is de serviceaanroep voor het aanzetten van de lamp).
{"service": "turn_on"}
Kies bij then de optie wait for. Vul dan de tijd in (bijvoorbeeld twintig seconden of wederom vijf minuten). Zet een vinkje bij extend delay if new message arrives. Dit zorgt ervoor dat de tijd steeds opnieuw ingaat na een detectie door de bewegingssensor. Bij then send vul je de serviceaanroep voor het uitzetten van de lamp in:
{"service": "turn_off"}
Bij het zoeken naar fouten is het handig om de node debug te gebruiken, zoals we in dit voorbeeld doen (zie de afbeelding). Deze node kun je met een uitgang verbinden, om te zien welke berichten daar passeren (zie kader ‘Debug-meldingen bekijken’).
Debug-meldingen bekijken Om Node-RED beter te begrijpen, is het erg nuttig om een debug-node aan een uitgang te hangen. Je kunt er ook meerdere gebruiken en ze een eigen naam geven. In paragraaf 10 hebben we drie nodes van dit type gebruikt die we debug 1, debug 2 en debug 3 noemen. Je ziet nu steeds bij welke node een bericht hoort.
In de zijbalk rechts kun je de berichten bekijken die deze nodes ontvangen. Deze zijbalk kun je met Ctrl+Spatie tonen of verbergen. Open dan het venster Debug messages (of Ctrl+G en dan D). Selecteer in dit venster de filteroptie current flow om alleen de berichten voor de huidige flow te kunnen zien. Via het prullenbakicoontje kun je eventueel het venster leegmaken, zodat je alleen nieuwe meldingen te zien krijgt.
11 Extra node toevoegen
Een andere manier om de bewegingsdetectie te verbeteren, is het toevoegen van een tweede node die actief wordt als er een bepaalde tijd geen beweging is, zoals vijf minuten of twintig seconden (de duur bepaal je zelf). De eerste node events:state gebruiken we ook, nu voor de detectie van beweging waarbij de sensor een on-status geeft. De tweede events:state-node zet je eronder. Deze wacht gedurende de ingestelde tijd tot er geen beweging is gedetecteerd. Bij de configuratie van deze tweede node kies je bij If State de optie is met de optie string en de waarde off. Bij For kies je de gewenste tijd, in dit voorbeeld vijf minuten. De bovenste node zet de lamp aan bij beweging, de onderste zet de lamp uit als er niets is gedetecteerd, ofwel: na vijf minuten lang de status off te hebben.
12 Conditie toevoegen
Je kunt relatief eenvoudig extra condities toevoegen aan de bovenstaande flow, zodat de lamp bijvoorbeeld alleen aan wordt gezet als deze uit staat en als het donker is. In het voorbeeld testen we eerst of de lamp aan is, met een node van het type current state. We gebruiken de tweede uitgang (lamp is uit). Deze node zorgt dat er niet onnodig wordt geschakeld. Daarachter voegen we een tweede node toe, ook van het type current state, die test of het donker is. Merk op dat onze bewegingssensor zelf deze helderheid rapporteert via een sensor. Voor deze node kiezen we bij If State het kleiner-dan-teken (<), en dan de optie number met het gewenste helderheidsniveau (hier kiezen we 600 lux). Bij het ontwerpen zul je merken dat je een node gewoon tussen bestaande nodes kunt slepen, waarbij automatisch de verbindingen worden gemaakt.
13 Schakelen op tijd
Wil je schakelen op tijd of herinneringen versturen op vaste tijden, dan komt de node bigtimer goed van pas. Je kunt het zien als een tijdschakelaar die een aan- of uitsignaal geeft. Bij de add-on is deze module al toegevoegd, bij een aparte installatie van Node-RED kun je hem toevoegen via het menu, onder Manage palette / Install.
Bij de configuratie van deze node geef je bij On Time en Off Time aan wanneer de schakelaar een aan- en uitsignaal moet sturen. Bij On Msg vul je on in en bij OFF Msg de waarde off. Er is één uitgang (one-off message) die je aansluit op een node van het type switch. We gaan in het grote vak twee uitgangen toevoegen voor de berichten on en off. Vul bij de eerste uitgang de string on in. Voeg met add een tweede uitgang toe met de string off. De twee uitgangen kun je nu gebruiken voor het aan- en uitzetten van een lamp.
14 Schakelen met de zon
Naast een specifieke tijd kun je bij de node bigtimer ook kiezen voor onder andere Sunset (zonsondergang) of Sunrise (zonsopgang) om te schakelen aan de hand van de stand de zon. Bij de velden On Offset en Off Offset kun je bovendien een offset invullen, om verlichting bijvoorbeeld een uur voor zonsondergang in te schakelen. Voor correcte tijden voor zonsondergang en -opgang moet je de velden Latitude en Longitude invullen. In Home Assistant vind je deze door onder Ontwikkelhulpmiddelen / Statussen te zoeken naar zone.home.
Voor een uitgebreider artikel over hoe je je huis samen laat werken met de zon, lees je: Zo laat je je huis reageren op de zon
Importeren en exporteren Als je gaat oefenen met Node-RED zul je vaak gebruikmaken van voorbeelden die je op internet tegenkomt. Node-RED biedt een handige import- en exportvoorziening voor zulke voorbeelden. Hiervoor open je het menu via de drie streepjes rechtsboven. Kies dan Import (Ctrl+I) of Export (Ctrl+E). Voorbeelden die je hebt gekopieerd, kun je importeren vanaf je klembord onder Clipboard. Daarna pas je ze uiteraard voor jouw situatie aan.