Web-1/NodeRed

Uit Inf2019
Naar navigatie springen Naar zoeken springen
Web1
Netwerken

Zie ook Regels en richtlijnen
Zie ook Artikelen bewerken

NodeRed

In Node-RED [1] maak je op een grafische manier, via de browser, een webserver. Je kunt dit gebruiken voor IoT-toepassingen, maar ook voor meer klassieke websites en web-apps. NodeRed is, zoals de naam al suggereert, gebaseerd op nodejs.

Met de standaard-nodes kun je al eenvoudige toepassingen maken. Een toepassing bestaan uit één of meer "flows": een pagina (tab) met een netwerk van knopen en verbindingen. Er zijn nodes voor allerlei protocollen en interfaces. Hiermee kan je toepassing bijvoorbeeld MQTT-boodschappen ontvangen en in een database opslaan. Een andere flow verwerkt een http GET-request, met als respons een pagina met deze MQTT-gegevens uit de database.

Voordat je NodeRed kunt gebruiken moet je dit eerst installeren. Daarna kun je de eerste experimenten doen. Voor de volgende stappen is het handig om de configuratie aan te passen. Voor sommige opdrachten heb je een database (MongoDB) nodig; die moet je afzonderlijk installeren.

Gebruik van NodeRed: je eerste flow

NodeRed http voorbeeld

Een flow in NodeRed bestaat uit een netwerk van nodes en verbindingen daartussen, op een enkele pagina (tab). Een toepassing kan uit meerdere flows (pagina's) bestaan. De inputs van een node zijn de verbindingen aan de linkerzijde, de outputs staan aan de rechterzijde. Als een node een bericht (message) krijgt via één van de inputs, of via een externe input (bijvoorbeeld: http request), dan voert deze daarop een bewerking uit, en genereert één of meer messages naar de output(s). Deze kan weer verbonden zijn met de input van een andere node; het kan ook een externe output zijn. Er zijn verschillende soorten nodes. Een input-node heeft alleen externe inputs; een output-node heeft alleen externe outputs.

Een handige input-node is "inject": daarmee kun je een input voor een flow genereren. Dit kan met de hand, door op de node te klikken; of automatisch, op regelmatige tijdstippen. Een andere handige output-node is "debug": hiermee kun je de message in een flow zichtbaar maken in het debug-venster (helemaal rechts, debug-tab selecteren).

De linkerkolom bevat een palet van nodes; deze sleep je naar het flow-gedeelte in het midden, om te gebruiken in een flow. De nodes in het palet zijn ingedeeld in verschillende rubrieken.

Opdracht

Je eerste flow, om te zien of alles werkt, maak je met deze twee nodes:

soort node figuur naam
input
Inject-node.png
inject-node
output debug-node
  • sleep een inject-node vanuit het Node-palet links naar het flow-gedeelte in het midden
  • plaats op dezelfde manier de debug-node;
  • verbind de output (rechts) van de inject-node met de input (links) van de debug-node.

Je krijgt dan de volgende flow:

NodeRed: eerste flow

  • activeer deze flow (rechts boven: Deploy)
  • test deze flow, door links op de input-node ("timestamp") te klikken.

Als het goed is, krijg je in het debug-venster rechts nu de output van deze flow te zien.

  • verander de configuratie van de inject-knoop: zorg ervoor dat deze elke minuut een timestamp oplevert.
    • de configuratie van een knoop krijg je te zien door een dubbel-klik op die knoop.
  • verander de configuratie van de inject-knoop: zorg ervoor dat deze een tekst levert als payload.
  • verbindt meerdere inject-knopen met dezelfde debug-knoop.

Importeren en exporteren van flows

Voor het maken van de praktische opdrachten gebruik je vaak flows die eerder gemaakt zijn.

Importeren van een flow:

  • kopieer de flow naar het clipboard
    • met de "Copy" van je host-OS; of met de "Copy" van Cloud9
  • selecteer in het hamburger-menu->Import->Clipboard
  • kopieer ("Paste") de inhoud van het clipboard in het venster;
  • klik op "Import"

Exporteren van een flow:

  • selecteer de nodes/flow die je wilt exporteren;
    • controleer of je de juiste nodes geselecteerd hebt, via de rode rand;
  • selecteer in het hamburger-menu->Export->Clipboard;
  • (pas eventueel de selectie aan: huidige selectie/huidige flow/alle flows)
  • klik op "Export to clipboard".

Opdracht

  • Kopieer de onderstaande flow naar NodeRed:
[{"id":"678b8c4c.974984","type":"inject","z":"b7f5ac90.8cf17","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":146,"y":80,"wires":[["654b6309.c742ec","d272daf8.c48e38"]]},{"id":"65beec84.75ffe4","type":"debug","z":"b7f5ac90.8cf17","name":"","active":true,"console":"false","complete":"false","x":502,"y":81,"wires":[]},{"id":"654b6309.c742ec","type":"delay","z":"b7f5ac90.8cf17","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":323.5,"y":82,"wires":[["65beec84.75ffe4"]]},{"id":"d272daf8.c48e38","type":"debug","z":"b7f5ac90.8cf17","name":"","active":true,"console":"false","complete":"false","x":323.5,"y":134,"wires":[]}]
  • test deze flow.

Meer over NodeRed: geavanceerde technieken

In de module Web1 komen verschillende NodeRed-technieken aan de orde, onder andere:

In de module over het Internet of Things komen nog andere NodeRed-technieken aan bod, zoals:

uitschakelen van een flow

Je configureert de flow van een pagina door een double-click op de betreffende tab. Daarna kun je de flow in- of uitschakelen. Je kunt hierin ook een beschrijving maken van de betreffende flow.

link nodes

Webpagina's met dezelfde opmaak delen dezelfde "staart": de laatste nodes, met de pagina-template en de html-output node. Als je veel webpagina's hebt wordt dit al snel onoverzichtelijk. Een andere manier om deze gemeenschappelijke (gedeelde) staart aan te geven is met behulp van de link-nodes: hiermee maak je een "virtuele verbinding".

  • in plaats van een verbinding naar de gemeenschappelijke staart, maak je een verbinding met een link input-node;
  • je maakt een aparte subflow voor de gemeenschappelijke staart, en begint deze met een link output-node;
  • je gebruikt voor deze beide link-nodes dezelfde naam.

In het bovenstaande voorbeeld krijgen we dan de volgende flow:

<<fig>>

subflows

Links werken alleen goed voor een gemeenschappelijke "staart": een aantal nodes dat eindigt met een output-node. Als je een tussenstuk hebt dat gemeenschappelijk is, dan kun je gebruik maken van een subflow. Dit kun je zien als een flow "function".

  • hoe "keer je terug uit een subflow"?

function nodes voor het zetten van msg-eigenschappen

Zoals we gezien hebben kun je eenvoudige msg-eigenschappen (properties) zetten met behulp van template-nodes. Maar je moet dan wel voor elke eigenschap een aparte node gebruiken. In een function-node kun je eenvoudig een aantal van deze eigenschappen combineren.

Voorbeeld:

change-nodes voor het zetten van msg-eigenschappen

Een function-node is eigenlijk grof geschut als je alleen maar een aantal msg-eigenschappen wilt zetten. Je kunt dat eenvoudig(er) doen met behulp van de change-node.

ip-adres

Het ip-adres van de client (browser) vind je via de request-header: request.headers['x-forwarded-for']

tutorials e.d.