ID.nl logo
Node-RED: apparaten en diensten koppelen zonder code
© Reshift Digital
Huis

Node-RED: apparaten en diensten koppelen zonder code

Node-RED is een populair systeem waarmee je apparaten en diensten aan elkaar koppelt zonder code te hoeven intypen. Het programmeren verloopt immers op een grafische manier door nodes in flows met elkaar te verbinden. Er bestaat een bloeiende community rond Node-RED en naast het automatiseren van zaken, kun je er ook dashboards mee maken. Onlangs kwam versie 1.0 van Node-RED uit. De ideale gelegenheid om er eens mee aan de slag te gaan in dit artikel.

Op de website van Node-RED wordt het programma omschreven als ‘low-code programming for event-driven applications’. Dat is een hele mond vol. Low-code programming betekent gewoon dat je geen code hoeft in te typen, in tegenstelling tot bijvoorbeeld een Python-programma. In de plaats daarvan selecteer je in een webinterface componenten uit een gereedschapskist en koppel je die aan elkaar.

Met ‘event-driven applications’ wordt bedoeld dat je met Node-RED toepassingen bouwt die reageren op gebeurtenissen. Zo kan je programma reageren als je een knop indrukt die je op een Raspberry Pi aansluit, of op een bericht dat via MQTT over je thuisnetwerk wordt verstuurd, of op een sensorwaarde die verandert in je Home Assistant-installatie.

01 Systeemvereisten voor Node-RED

Node-RED kun je op Windows, macOS, Linux, op een Raspberry Pi en zelfs in de cloud installeren. Op de pagina Getting started vind je de installatie-instructies voor de verschillende mogelijkheden.

In deze basiscursus gaan we uit van een installatie via Docker op een Raspberry Pi. Maak je een andere keuze, volg dan op de website van Node-RED de specifieke instructies voor jouw systeem. Na de installatie werkt zo goed als alles hetzelfde, ongeacht het systeem waarop je Node-RED draait.

©PXimport

02 Raspbian met Docker

We gaan ervan uit dat je Raspbian Buster Lite op je Raspberry Pi hebt geïnstalleerd, bijvoorbeeld met balenaEtcher. Op je Raspberry Pi inloggen doe je via de opdracht ssh in de Opdrachtprompt of door een toetsenbord en beeldscherm op je Raspberry Pi aan te sluiten.

Installeer dan Docker op de Raspberry Pi, geef de standaardgebruiker pi toegang tot Docker, installeer pip en Docker Compose, en reboot tot slot met deze commando’s:

curl -sSL https://get.docker.com | sh

sudo usermod pi -aG docker

sudo apt install python3-pip

sudo pip3 install docker-compose

sudo reboot

Zodra je weer ingelogd bent, maak je ook een directory aan waarin je de gegevensbestanden van Node-RED opslaat, zoals je flows en de uitbreidingen die je installeert:

mkdir /home/pi/node-red

03 Installeer Node-RED

We installeren Node-RED met behulp van Docker Compose. Maak daarvoor eerst een Docker Compose-bestand aan:

nano docker-compose-node-red.yml

Plaats daarin de volgende regels:

version: '3.7'

services:

node-red:

image: nodered/node-red

container_name: node-red

restart: always

volumes:

- ./node-red:/data

ports:

- "1880:1880"

environment:

- TZ=Europe/Amsterdam

Hierin definiëren we dat we het Docker-image nodered/node-red downloaden en starten, waarbij we de directory node-red in de huidige directory in de Docker-container van Node-RED aankoppelen op de directory /data. We forwarden poort 1880 van de container naar poort 1880 op de Raspberry Pi. Tot slot stellen we ook onze tijdzone in, zodat Node-RED de juiste tijd gebruikt.

Sla het bestand op met Ctrl+O en sluit nano af met Ctrl+X. Daarna starten we Node-RED eenvoudig op met de volgende opdracht:

docker-compose -f docker-compose-node-red.yml up -d

Dat duurt wel even, want Docker gaat nu het image van Node-RED eerst downloaden. Maar als je de Opdrachtprompt weer te zien krijgt, is Node-RED gestart en in je webbrowser bereikbaar op http://IPADRES:1880. Lukt het niet, bekijk dan met docker logs node-red wat er misloopt.

©PXimport

04 Je eerste flow

De webinterface van Node-RED bestaat uit vier onderdelen. Bovenaan heb je de header met rechts een knopje Deploy en helemaal rechts het menu dat je toegang geeft tot allerlei functionaliteit.

Links heb je het palet, waarin je allerlei ‘nodes’ vindt. Die nodes kun je naar het midden slepen, de werkruimte. Die werkruimte bevat aanvankelijk één tabblad met een ‘flow’ met de naam Flow 1. Rechts heb je dan de zijbalk, die je meer informatie geeft over het geselecteerde onderdeel. Momenteel is dat de lege flow, zodat je daar de naam van de flow te zien krijgt.

Laten we eens een eerste flow maken. Sleep een node inject en een node debug naar de werkruimte. De tekst bij die eerste verandert in timestamp en bij die tweede in msg.payload. Verbind het rechtse grijze vakje van de eerste node met het linkse grijze vakje van de tweede node. Klik dan bovenaan rechts op Deploy.

Klik dan op het omgekeerde driehoekje onder het menu en kies Debug messages. Als je daarna op het grote vierkantje links van de node timestamp klikt, verschijnt de tijd (in aantal seconden sinds 1 januari 1970) in de zijbalk.

©PXimport

05 Installeer extra nodes

Dat tijdstip in het debugvenster is niet heel leesbaar. Zouden we dit kunnen omzetten naar een leesbare datum en tijdstip? Uiteraard, en dat kan bijvoorbeeld met een node function waarin je javascript-code kunt opgeven die de opdracht uitvoert. Maar we zijn dit artikel begonnen met de boodschap dat je niet zou hoeven te programmeren in Node-RED (wat wel kan, zie ook het kader ‘Javascript-code in Node-RED’), dus we gaan dit op een grafische manier uitvoeren.

In het palet links zie je een heel aantal nodes die Node-RED standaard al installeert, maar er zit er geen tussen om tijdstippen in leesbaar formaat te tonen. Gelukkig heeft Node-RED een bloeiend ecosysteem van externe nodes, die eenvoudig te installeren zijn. Klik op het menu en dan op Manage palette.

In het tabblad Install zie je dat er meer dan 2400 modules beschikbaar zijn voor installatie. Typ in het zoekveld eens date in. Je krijgt dan alle mogelijke nodes te zien die iets met een datum doen. Let zeker op de datum van de laatste update, want je vindt hier ook heel wat nodes die niet meer onderhouden worden. Bij elke node kun je op het icoontje naast de naam klikken voor meer informatie.

©PXimport

06 Leesbaar tijdstip

Klik op de knop install bij de node node-red-contrib-moment en bevestig met Install. Sluit daarna het venster. Als je nu in het paneel links helemaal naar onderen scrolt, zie je twee nieuwe nodes: moment en humanizer. Klik je op een ervan, dan krijg je in de zijbalk nuttige informatie over het gebruik te zien.

Verbreek de verbinding tussen timestamp en msg.payload door ze te selecteren en op de Delete-toets te drukken. Sleep dan de node moment naar de werkruimte. Ze krijgt dan de naam Date/Time Formatter. Verbind de uitvoer van timestamp met de invoer van deze node, en de invoer van msg.payload met de uitvoer.

Deploy de flow opnieuw en klik weer op de timestamp. In het debugvenster moet nu een tijdstip zoals “2020-02-11T14:15:56.321Z” verschijnen. Indien de tijd verkeerd is, dubbelklik dan op de node en kijk na of je tijdzone correct staat. Indien nodig tel je bij Adjustment een uur op. Vergeet niet na elke aanpassing op Deploy te klikken.

©PXimport

07 Download elke vijf minuten

Node-RED doet nu iets wanneer we op de eerste node klikken, maar we kunnen onze flow ook automatisch laten uitvoeren, bijvoorbeeld elke vijf minuten. Klik op de eerste node, kies bij Repeat voor interval en vul dan every 5 minutes in. Wijzig ook de naam van de node in Elke 5 minuten, zodat de functie duidelijker is. Sla op met Done en klik dan op Deploy. Je krijgt nu in het debugvenster elke vijf minuten de huidige tijd te zien.

Nu we Node-RED om de vijf minuten iets kunnen laten doen, gaan we daar iets nuttigers van maken: weergegevens downloaden. Verwijder de node Date/Time Formatter en zet in de plaats daarvan een node http request. Dubbelklik erop en vul bij de url http://xml.weerslag.nl/xmlfeed.xml in. Geef de node de naam Weerslag.NL.

Als je nu op het vierkantje bij de eerste node klikt (of vijf minuten wacht), wordt het xml-bestand van Weerslag.NL gedownload en de inhoud in het debugvenster getoond. Maar je bent uiteraard alleen geïnteresseerd in het weer bij jou. Open de feed in je webbrowser en zoek naar een weerstation bij je in de buurt. Noteer de stationscode.

©PXimport

08 Filter de xml-code

De xml-code van de feed van Weerslag.NL filter je eenvoudig zodat je alleen de informatie te zien krijgt van het weerstation waarin je geïnteresseerd bent. Plaats daarom een node xml tussen je node http request en de node debug. Deze node zet de xml om in een javascript-object. Bekijk het resultaat eerst maar eens in het debugvenster.

Voeg dan een node change toe tussen xml en debug, en dubbelklik daarop. Verander nu achter to het type uitvoer naar expression (getoond als een gestileerde hoofdletter J). Vul daarachter de volgende expressie in:

payload.**.weerstation[stationcode[0]='11179']

Vervang hierin 11179 door de stationscode van in je buurt. Wil je meer weten over dit soort expressies, lees dan de documentatie van JSONata. Na een deploy en een klik op de eerste node krijg je in het debugvenster alleen de informatie van het ene weerstation te zien.

©PXimport

Javascript-code in Node-RED

Bestaat er geen node die doet wat je nodig hebt, dan kun je nog altijd gaan programmeren. Node-RED is immers in javascript geschreven en ondersteunt via de node function ook javascript-code. Zo zou je de node moment kunnen vervangen door een node function, waarin je javascript-code schrijft die een Date-object aanmaakt op basis van de payload, en de payload vervangt door de stringversie van dat object. Dit is een eenvoudig voorbeeld, maar je kunt nog veel complexere functies schrijven. Zie de online documentatiepagina Writing functions voor meer informatie.

©PXimport

09 Temperatuur en luchtdruk

Tot nu toe toonden we volledige javascript-objecten in het debugvenster, maar we zijn eigenlijk alleen geïnteresseerd in de temperatuur en luchtdruk. De temperatuur filteren we er eenvoudig uit met een node change na de vorige node change. We veranderen het type achter to naar msg en vullen daar in:

payload.temperatuurGC[0]

Hang achter deze node weer een debug-node. Doe nu hetzelfde om de luchtvochtigheid eruit te filteren. Bestudeer in het debugvenster de inhoud van het volledige javascript-object van het weerstation om te zien wat je in de node change dient in te typen.

Als je nu de flow uitvoert, krijgt je de waardes van de temperatuur en luchtvochtigheid in het debugvenster te zien.

©PXimport

10 Dashboard

Het debugvenster is handig als je in Node-RED een flow aan het opbouwen bent, maar zodra die werkt, wil je uiteraard je gegevens wat mooier weergeven. Gelukkig kent Node-RED ook een dashboard. Daarvoor dienen we eerst een extra node te installeren.

Open weer Manage palette in het menu en installeer daar de node node-red-dashboard. Dat voegt maar liefst zestien nieuwe types nodes toe in je palet.

Hang dan een node gauge achter de node voor de temperatuur. Dubbelklik erop en klik naast Group op het icoontje van het potlood. Geef de groep een naam (bijvoorbeeld Temperatuur) en klik naast Tab op het potloodicoontje. Geef het tabblad een naam (bijvoorbeeld Weer), klik op Add en nog eens op Add. Dan ben je weer in de eigenschappen van de node gauge. Vul bij Label een naam zoals Temperatuur in, bij Units de eenheid °C, en bij Range een minimum- en maximumtemperatuur. Klik op Done om de node op te slaan.

Nadat je op Deploy geklikt hebt, klik je op het icoontje van het grafiekje bovenaan rechts (links naast het omgekeerde driehoekje). Klik daarna op het icoontje van het vierkantje met het pijltje eruit. Je krijgt nu je eerste dashboard van Node-RED te zien. Uiteraard is dit nog maar het begin. Het toevoegen van de luchtvochtigheid en van enkele andere interfacecomponenten zoals een lijnplot laten we aan jou als lezer over.

©PXimport

11 Controleer of het vriest

Node-RED kan nog veel meer. Zo kun je bijvoorbeeld waarschuwingen uitsturen als het vriest. Om te weten wanneer het vriest, voeg je een switch toe achter de node voor de temperatuur. Geef die switch de naam Test op vorst en zet de test op <= 0, waarbij je vlak voor de 0 het datatype number kiest.

De node aan de uitgang van de switch wordt nu alleen uitgevoerd wanneer de temperatuur in het weerstation lager dan 0 is. Test dat door een inject-node aan de ingang te koppelen met als waarde -15 met datatype string, en door een debug-node aan de uitgang te koppelen. Als je nu na een deploy op de inject klikt, zie je in het debugvenster de temperatuur -15 graden. En als je de -15 in de inject-node verandert naar 15 en op de inject-node klikt, gebeurt er niets.

©PXimport

12 Vorstwaarschuwing

Dan hoeven we alleen nog maar die laatste debug-node te vervangen door een node die ons waarschuwt. We geven hier het voorbeeld van een waarschuwing met een e-mail. Installeer daarvoor de node node-red-node-email.

Voor je nu die node toevoegt, voeg je een node change toe achter de switch. Geef die de naam E-mail en zet msg.topic op Het vriest. Dit wordt het onderwerp van onze e-mail. Het bericht zelf komt in msg.payload, en dat bevat nog altijd de temperatuur, dus dat houden we.

Voeg dan de node email toe achter de node change. Vul de juiste gegevens in: het e-mailadres van de ontvanger, de smtp-server, poort, gebruikersaccount en wachtwoord. Als je een mailserver met STARTTLS gebruikt, dien je Use TLS? wel aan te vinken, maar Use secure connection niet. En als je tweefactorauthenticatie voor Gmail ingesteld hebt, dien je eerst een app-wachtwoord aan te maken. Als je daarna je flow deployt, krijg je via e-mail een melding wanneer het vriest.

Uiteraard is dit maar een eerste versie. Momenteel zou je elke vijf minuten een e-mail krijgen zolang het vriest. Dat aantal e-mails zou je zeker nog moeten beperken. Maar Node-RED biedt voldoende componenten om deze basisflow verder uit te werken. En als de standaardnodes niet volstaan, installeer je gemakkelijk extra nodes van de community of programmeer je zelf je eigen nodes in javascript.

©PXimport

▼ Volgende artikel
Waar voor je geld: 5 magnetrons met bijzondere functies voor minder dan 250 euro
Huis

Waar voor je geld: 5 magnetrons met bijzondere functies voor minder dan 250 euro

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Daarom speuren we een paar keer per week binnen een bepaald thema naar zulke deals. Magnetrons kun je inzetten voor verschillende bereidingen. Tegenwoordig vind je er ook handige functies op terug, zoals een stoomfunctie of hetelucht voor bakken en braden. Vijf modellen die deze extra mogelijkheden bieden hebben we voor je op een rijtje gezet.

De gemiddelde magnetron kan meer dan alleen kant-en-klare maaltijden bereiden, ze gaan qua functionaliteit meer en meer richting de oven. Zo zie je bijvoorbeeld steeds vaker een hetelucht- en stoomfunctionaliteit. Een aantal van de hier besproken modellen zijn voorzien van zo'n heteluchtfunctie, en soms ook de stoomfunctionaliteit.

Inventum IMC6125F (inbouwmodel)

Dit inbouwmodel van Inventum is een uitzondering in zijn prijsklasse, omdat hij zowel hetelucht- als stoomfunctie heeft. Dit maakt het een veelzijdig apparaat voor de kleine tot middelgrote keuken. De bediening werkt met knoppen en is overzichtelijk, waardoor je snel de juiste instelling kiest voor een gerecht. Met 25 liter inhoud is de magnetron niet de grootste, maar voldoende voor dagelijkse maaltijden en het bereiden van kleinere ovenschalen. Het draaiplateau zorgt voor een gelijkmatige opwarming, en de heteluchtfunctie kan temperaturen tot 220 graden bereiken. Het is een compacte machine die veel opties biedt voor de bewuste kok die gezond wil stomen en af en toe een ovengerecht wil bereiden.

Inhoud: 25 liter
Maximum wattage: 900 W
Temp. heteluchtoven: tot 220 °C
Stoomfunctie: Ja

Etna CMV328ZT

De Etna CMV328ZT is een vrijstaande combimagnetron die uitblinkt in zijn eenvoud en efficiëntie. Dit apparaat heeft een inhoud van 28 liter en dankzij de turbofunctie warmt hij snel op, ideaal voor het bakken van broodjes of een pizza. De bediening is intuïtief met een draaiknop en druktoetsen. Hoewel dit model niet is uitgerust met een speciale stoomfunctie, biedt hij wel de nodige veelzijdigheid voor het bereiden van diverse gerechten met de magnetron, grill en hetelucht.

Inhoud: 28 liter
Maximum wattage: 900 W
Temp. heteluchtoven: tot 230 °C
Stoomfunctie: Nee

Samsung MC28H5015AK

Deze compacte combimagnetron van Samsung heeft een inhoud van 28 liter en is uitgerust met een heteluchtfunctie en een grill, perfect voor het opwarmen en bereiden van diverse maaltijden. De Samsung heeft een keramische binnenwand die gemakkelijk schoon te maken is. Een opvallend kenmerk is de stoom- en grilloptie, waarmee je gerechten kunt bereiden die zowel knapperig als gezond zijn. De bediening via drukknoppen is eenvoudig en het apparaat is voorzien van 35 voorgeprogrammeerde kookprogramma's.

Inhoud: 28 liter
Maximum wattage: 900 W
Temp. heteluchtoven: tot 200 °C
Stoomfunctie: Ja

Inventum MN325CS

Met de Inventum MN325CS haal je een ruime, vrijstaande combimagnetron in huis met een inhoud van 32 liter. Het apparaat is functioneel en robuust. Naast de gangbare magnetronfuncties is er ook een heteluchtfunctie tot 240 graden, die het mogelijk maakt om een complete maaltijdschotel te bereiden. Het digitale display en de draaiknop zorgen voor een makkelijke bediening. De magnetron is een goede keuze als je een model zoekt met een grote inhoud en een betrouwbaar apparaat zoekt voor de alledaagse keukenwerkzaamheden. Een stoomfunctie heeft dit model niet.

Inhoud: 32 liter
Maximum wattage: 1000 Watt
Temp. heteluchtoven: tot 240 °C
Stoomfunctie: Nee

Etna ECM243RVS

De Etna ECM243RVS is een compacte, maar complete combimagnetron en afgewerkt in RVS. Het is een alles-in-één-apparaat voor een kleine keuken. Het apparaat combineert een magnetron, grill en heteluchtoven en kan tot 230 graden opwarmen, wat de functionaliteit van een kleine oven nabootst. Hoewel er geen speciale stoomfunctie is ingebouwd, kan hij met zijn diverse standen en grillmogelijkheden alsnog veel meer dan alleen opwarmen. De bediening gaat alleen via knoppen en heeft een bescheiden inhoud van 25 liter, wat voldoende is voor kleine (oven)schalen of borden.

Inhoud: 25 liter
Maximum wattage: 900 W
Temp. heteluchtoven: tot 230 °C
Stoomfunctie: Nee

▼ Volgende artikel
ZinVolt Power: de slimme thuisbatterij die je energiekosten drastisch verlaagt
Energie

ZinVolt Power: de slimme thuisbatterij die je energiekosten drastisch verlaagt

Een slimme thuisbatterij kopen zonder installatiegedoe? De ZinVolt Power is een plug-and-play oplossing waarmee je eenvoudig stroom opslaat, kosten bespaart en meer haalt uit je zonnepanelen of dynamisch energiecontract.

Partnerbijdrage - in samenwerking met ZinVolt

De energiemarkt is grilliger dan ooit. Terwijl tarieven schommelen en netbeheerders piekverbruik willen afvlakken, groeit bij consumenten de behoefte aan grip op hun stroomverbruik. De ZinVolt Power speelt hier feilloos op in. Deze slimme, draagbare thuisbatterij is ontworpen voor huishoudens die zélf willen bepalen wanneer ze stroom gebruiken en wat die mag kosten. Geen installatie nodig, geen technische kennis vereist. Gewoon inpluggen en besparen.

Plug-and-play thuisbatterij zonder installatiegedoe

Terwijl alles om ons heen complex lijkt te worden, brengt de ZinVolt Power juist eenvoud. Geen elektricien, geen hak- en breekwerk: deze batterij werkt direct uit de doos. Je sluit hem aan via een gewoon stopcontact, waarna hij zelfstandig energie begint op te slaan op de meest gunstige momenten. Denk aan zonnige middagen waarop je zonnepanelen overproduceren, of aan de stille uren 's nachts met lage dynamische tarieven. Op drukke momenten, wanneer de stroomprijs piekt, levert hij die energie weer terug aan je apparaten. Zo optimaliseer je je verbruik zonder dat je er voortdurend naar hoeft om te kijken.

©ZinVolt

Flexibel uitbreidbare thuisbatterij: van 1 tot 6 kWh

De basisuitvoering van de ZinVolt Power heeft een opslagcapaciteit van 1,024 kWh, wat ruimschoots voldoende is om de belangrijkste huishoudelijke apparaten tijdelijk van stroom te voorzien. Maar wie méér wil – denk aan grotere woningen, meer verbruik of langere back-up bij storingen – kan de capaciteit uitbreiden tot maar liefst 6,144 kWh. Dat doe je met losse Mate-modules die je eenvoudig op elkaar stapelt. Deze modulaire opbouw maakt de batterij uniek: je investeert wat je nú nodig hebt, en breidt uit zodra je verbruik groeit. Bovendien biedt ZinVolt zekerheid met drie jaar garantie op de hoofdunit en zelfs tien jaar op de uitbreidingsmodules.

Energie besparen met realtime-inzicht en slimme sturing

Zonder inzicht geen optimalisatie, en dat begrijpt ZinVolt als geen ander. Dankzij de bijgeleverde P1-dongle koppel je de thuisbatterij aan je slimme meter, waardoor hij continu weet wat jouw verbruik is én wat stroom op dat moment kost. Via de bijbehorende app stem je het laad- en ontlaadmoment precies af op jouw verbruiksprofiel en de actuele energieprijzen. Hierdoor bespaar je automatisch, zonder handmatig in te grijpen. Vooral bij dynamische energietarieven levert dat forse winst op. De batterij kiest zelf de voordeligste strategie: laden als het goedkoop is, leveren als het loont. En dat allemaal op de achtergrond, zonder dat jij daar iets van merkt.

©ZinVolt

Slimme thuisbatterij: praktisch, krachtig en compleet

Achter het compacte ontwerp van de ZinVolt Power gaat serieuze techniek schuil. Naast stroomopslag biedt hij ook directe stroomvoorziening met drie ingebouwde stopcontacten, usb-a- en usb-c-poorten én twee Anderson PV-ingangen. Daarmee sluit je zowel je apparaten als extra zonnepanelen aan. Ideaal voor wie off-grid wil kunnen functioneren, bijvoorbeeld bij stroomstoringen of in een tuinhuis zonder netaansluiting. De batterij levert dan tot 2000 watt aan vermogen, genoeg voor het gelijktijdig draaien van meerdere apparaten. Let wel: voor het maximale vermogen is een aparte stroomgroep in de meterkast vereist. In standaardmodus levert hij 800 watt aan teruggeleverde netstroom, ruim voldoende voor de meeste huishoudelijke toepassingen.

Grip op je stroomverbruik met een slimme thuisbatterij

De ZinVolt Power is een slimme, schaalbare thuisbatterij die je energieverbruik naar je eigen hand zet. Door pieken af te vlakken, stroom slim in te kopen en overtollige zonne-energie te benutten, bespaar je structureel op je energiekosten. De installatie is kinderspel, het systeem groeit met je mee en de slimme software doet het denkwerk voor je. Voor wie onafhankelijker wil worden van het net en tegelijk wil besparen zonder comfortverlies, is dit een toekomstbestendige oplossing die nú al rendeert.

Meer weten?

Bekijk alle specificaties en prijzen op Zinvolt.com!