3.15.3. Tweede flow: HTTP request¶
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 |
function (in/out) |
|
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.
Opdracht A
Maak de bovenstaande flow
Configureer de HTTP-request-node: Method:
GET
; URL:https://ieni.org
Configureer de HTML-node: Selector: h1
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.
Verander de bovenstaande flow door het configureren van de inject-node zodat deze elke 5 minuten het HTTP-request verstuurt,
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”.
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
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.
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 voorxxxx
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
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
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.