Node-RED: programmeren zonder coderen

© Piscine26 - stock.adobe.com

Node-RED: programmeren zonder coderen

Geplaatst: 26 mei 2024 - 08:03

Gertjan Groen

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.

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.

Node-RED: programmeren zonder coderen -W5gUo3ZAS5yrmvp7PZskHA

In de Getting Started-gids vind je uiteenlopende installatiemethoden voor Node-RED.

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.

Node-RED: programmeren zonder coderen -GuNRXKcdSFurGUEb4B_sXw

Gebruik je niet de add-on, voeg dan de nodes voor Home Assistant apart toe.

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.

Node-RED: programmeren zonder coderen -V3n69aSyRdGKHo8GAMRa7Q

We hebben diverse accessoires toegevoegd, onder meer via Zigbee2MQTT. 

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.

Node-RED: programmeren zonder coderen -QPILBfkKTvGfBSGcdPy-1w

Er is een enorme bibliotheek met nodes die je kunt installeren. 

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.

Node-RED: programmeren zonder coderen -f_BeWs5TR82auM1FNHoLrw

Je kunt Node-RED als add-on installeren binnen Home Assistant OS.

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.

Node-RED: programmeren zonder coderen -I2yWsD22Q8eLuFsXwzKUHA

Via een speciale node kun je de werking van Node-RED controleren.

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.

Node-RED: programmeren zonder coderen -eAkS6v5hRpKFD5mJwu1gXg

Aan de bovenkant kun je flows maken en beheren via tabbladen.

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.

Node-RED: programmeren zonder coderen -BJRybE12SLGDKAu1jDSNmw

Deze node controleert alleen de status van onze deursensor.

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.

Node-RED: programmeren zonder coderen -B1MR_aB1RFWA97LIFhOGCQ

Door de service aan te roepen schakelen we de lamp met een bepaalde kleur.

Node-RED: programmeren zonder coderen -CKGjQOV2Tx6aDyt27abuYQ

Via de ontwikkelhulpmiddelen kun je oefenen met serviceaanroepen.

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.

Node-RED: programmeren zonder coderen -G-LBoBkTTU2zEWmwLxdhgQ

Deze flow zet een lamp vijf minuten aan na detectie van beweging.

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’).

Node-RED: programmeren zonder coderen -Qs4ez26oR9W9URBBHEdIsg

Bij deze automatisering zetten we de lamp via een trigger uit en voegen we voor het debuggen van de flow een speciale node toe.

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.

Node-RED: programmeren zonder coderen -MkX71OhrRGyrOHlJfHwe9A

In deze flow hebben we een extra node toegevoegd voor de bewegingssensor.

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.

Node-RED: programmeren zonder coderen -LGzpXL4UT1S-nWM_QQFuoA

We testen in deze flow of de lamp al aan staat en of het donker is.

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.

Node-RED: programmeren zonder coderen -RlXgE3uvS2u372tz4GQe6Q

We voegen twee uitgangen toe aan de node van het type switch.

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.

Node-RED: programmeren zonder coderen -ezc446wIS7yvo2_LREaIpQ

De node bigtime kan ook schakelen als de zon onder is.

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

0

Powered by

logo
Deel dit artikel
Voeg toe aan favorieten