3.15.3. Tweede flow: HTTP request#

../../_images/http-flow-1.png

Fig. 3.11 HTTP-flow met selectie uit HTML-document#

In deze tweede flow gebruiken we de http-request node: dit is een knoop waarmee je een http request naar een webserver kunt sturen.

Dit kun je bijvoorbeeld gebruiken voor het raadplegen van een web-API, zoals we later zullen zien.

In dit geval gebruiken deze node voor het opvragen van de webpagina (HTML-document) van i&i. Daarmee kunnen we controleren of deze website online is. We gebruiken de HTML-node om de “H1”-elementen van het HTML-document te selecteren.

We gebruiken voor deze flow de volgende nodes:

figuur

naam

soort node

http-request-node

http-request-node

function (in/out)

html-node

html-node

function (in/out)

Met de http-request-node verstuur je een HTTP-request; het resultaat is de response van de server. Dit kun je dan weer verder bewerken.

Met de html-node kun je elementen in een HTML-document selecteren.

../../_images/nodered-checkserver-flow-a.png

Fig. 3.12 Flow met HTTP-request node#

Opdracht A

  1. Maak de bovenstaande flow

  2. Configureer de HTTP-request-node: Method: GET; URL: https://ieni.org

  3. Configureer de HTML-node: Selector: h1

  4. Deploy

Als je nu de inject-node activeert (klik op de knop links), dan stuurt NodeRed een HTTP-request met de opgegeven URL. Het HTML-document dat de webserver terugstuurt wordt gefilterd: het resultaat (msg.payload) is een array met alle H1-titels. Controleer dit.

  1. Verander de bovenstaande flow door het configureren van de inject-node zodat deze elke 5 minuten het HTTP-request verstuurt,

  2. Deploy

Controleer dat je elke 5 minuten een bericht van de website krijgt. Als de server de juiste HTML-pagina terugstuurt, is de website nog “online”.

  1. De-activeer de flow, door een dubbele klik op de flow-tab, en in het configuratie-venster van de flow de “enabled”-schakelaar op “uit” te zetten.

Controleer dat je nu geen berichten meer krijgt.

Opdracht B

../../_images/nodered-checkserver-flow-b.png

Fig. 3.13 Aansturen van een paar LEDs in een IoT-knoop#

Een volgende stap is dat je dit hele proces automatiseert, en afhankelijk van het resultaat de ene of de andere LED van je IoT-knoop aanstuurt. We beginnen met het aan- en uitzetten van de LEDs van de IoT-knoop.

  1. Maak de bovenstaande flow:

De template-node “Led 1 on, Led 0 off” configureer je als volgt:

  • Format: plain text

  • Syntax Highlight: JSON

  • Output as: plain text (of: parsed JSON)

  • Template: {"0": {"dOut": 0}, "1": {"dOut": 1}}

Bij de template-node “Led 0 on, Led 1 off” zijn de getalwaarden voor de actuatoren net omgekeerd.

De MQTT-output-node configureer je als volgt:

  • topic: node/xxxx/actuators, met voor xxxx de node-ID van je eigen knoop.

  • Server:

    • als je al een server hebt, selecteer je de juiste server;

    • als je nog geen server hebt, selecteer je: “add new mqtt broker…”

    • klik op het pen-symbool ernaast om de server te configureren:

    • vul onder de tab Connection de domeinnaam van de server in, en het poortnummer (meestal 1883)

    • vul onder de tab Security de username en het password van de server in; vraag dit eventueel aan je docent.

  • Deploy

Controleer nu of je met behulp van de inject-nodes de LEDs aan- en uit kunt zetten. De ene knop zet de ene LED aan en de andere uit, en omgekeerd.

Opdracht C

../../_images/nodered-checkserver-flow-c.png

Fig. 3.14 Controleren van de inhoud van een webpagina#

  1. Maak de bovenstaande flow:

In de functie-node gebruik je de volgende tekst voor de functie:

var title = msg.payload[0] || "";
if (title == "Informatica is de Toekomst.") {
    result = [{payload: title}, null];
} else {
    result = [null, {payload: "ERROR"}];
}
return result;

Zoals je ziet levert de functie een array op met twee resultaten, waarvan in dit geval altijd één “leeg” is (null). Configureer ook de function-node zo dat deze twee outputs oplevert. Je krijgt dan een function-node met twee output-bolletjes, waaraan je twee verschillende flows kunt verbinden. Op deze manier kun je, afhankelijk van een voorwaarde, verschillende flows activeren.

Opdracht D

../../_images/nodered-checkserver-flow-d.png

Fig. 3.15 Controleren en signaleren van de server-activiteit#

Als laatste stap combineer je de verschillende onderdelen, in een flow zoals hierboven.

Als het goed is brandt alleen LED1 van de IoT-knoop, omdat de server meestal “up” is.

Test Je kunt met de hand de LED0 aanzetten, door een inject-node te verbinden met de input van “Led 0 on, led 1 off”. Controleer hiermee dat LED0 aangaat, en na verloop van tijd LED1 - als de server “up” is. Verwijder na deze test de inject-node weer.