20221102 InfluxDB vullen vanuit Node-RED

Missie:

We gaan de database vullen met random waarden.

Om een indruk te krijgen hoe eenvoudig het is om Node-RED aan een InfluxDB te koppelen en om er waarden in te schrijven, gaan we een Node-RED flow opbouwen om data naar een InfluxDB database te schrijven, vervolgens uit te lezen en vervolgens in een data tabel van Node-RED te visualiseren.
We gebruiken in deze tutorial een Raspberry Pi, maar het kan natuurlijk ook een ander systeem zijn.

Uitgangspunten:

  • InfluxDB is geïnstalleerd met de database en inloggegevens zoals in deze tutorial is beschreven.
  • Node-Red is Geïnstalleerd zoals in deze tutorial is beschreven.
  • Als er toegang noodazakelijk is vanuit een andere PC, zijn UFW en Fail2Ban juist ingesteld.
    Het poortnummer voor Node-RED is 1880, het standaard poortnummer voor InfluxDB is 8086.
  • Er is een database met de naam TESTDB aangemaakt.
  • Er is een gebruiker met de naam TESTUSER aangemaakt.
  • Het wachtwoord voor die gebruiker is TESTPW.
  • De gerbuiker heeft lees en schrijfrechten op de betreffende database.
  • Het versie nummer van InfluxDB is 1.8.10.

Om lees- en schrijfrechten te geven, gebruik je de volgende commando's in influx, ingelogd als beheerder.

						GRANT READ ON TESTDB ON TESTUSER
						GRANT WRITE ON TESTDB ON TESTUSER

Stap 1 - Node-RED opstarten

We gaan er in deze tutorial van uit dat we een Raspberry Pi gebruiken.
Start de browser op je Paspberry Pi en geef de volgende url in 127.0.0.1:1880.
Het eerste gedeelte van de url (127.0.0.1) is je local host adres, het tweede gedeelte van de url (:1880) is het poort adres.
We krijgen dan het volgende venster te zien:

NRstart.jpg

Stap 2 - Nodes voor InfluxDB toevoegen

Klik op de drie streepjes rechts boven in de hoek.
In het palet dat uitrolt, klik op Manage palette, dan vouwt een palet met user settings uit.
Wissel boven in de tabjes naar Install, in het veld search modules type je contrib- influxdb in.
Dan installeer de node node-red-contrib-influxdb, wacht tot dit klaar is.
Klik op de rode Close knop.
In de nodes palet aan de linker kant heb je nu drie extra nodes ingevoegd.
Je kunt deze zoeken door links boven in het filter nodes venster influx in te geven.

NRinflux.jpg

Stap 3 - Influx node configureren

Sleep de influxdb out node in de flow en dubbel klik er op.
Klik op Add new influxdb, (of het pennetje) en vul het volgende in:

NRtestDB.jpg

Klik op Add

Uitleg:

Property Ingevuld Uitleg
Name Test-1 Verschijnt in de flow in de beschrijving van de node
Version 1.x InfluxDB versie is 1.8.10
Host 127.0.0.1 Dit is de lokale machine
Port 8086 De communicatie poort
Database TESTDB De database die we benutten
Username TESTUSER De gebruiker
Password TESTPW het password van de gebruiker
Laat de checkbox voor Secure connection niet aangevinkt.
Zorg ervoor dat poort 8086 open staat.

In het node out venster vul je bij measurement nog Temperature in.

NRtemp.jpg

Stap 4 - Maak data.

Sleep de inject node in de flow en dubbel klik er op.
Vul het volgende in:

NReject.jpg

Uitleg:
Bij de properties bij Name zetten we Data
Bij het eerste msg venster, veranderen we payload in value.
Daar achter komt de expression 35 * $random(), een random getal tussen 0 en 35.
Klik het vinkje bij inject once aan en laat 0.1 staan.
Bij Repeat gaan we een interval van 2 seconden gebruiken.

Klik op Done.

Stap 5 - Test data.

Om te testen of het genereren van data correct werkt, gaan we een debug node gebruiken.
Sleep een debug node in de flow en dubbel klik er op.
Vul het volgende in:

NRdebug.jpg

Uitleg:
Bij de properties bij Name zetten we debug data
Bij Output veranderen we payload in value.
Bij To laten we het vinkje bij debug window staan, de rest blijft uit.

Klik op Done.

Maak een verbinding tussen de data node en de debug node.
Wissel rechts boven naar het debug venster (het kevertje).
Druk op de Deploy knop om de flow naar NodeRED te sturen en te starten.
In het debug venster zien we data verschijnen, m.a.w. dit stukje is ok en getest. `

NRdataOK.jpg

Stap 6 - Data in InfluxDB formaat brengen.

We moeten de data formateren op een manier die de influx out node begrijpt. Sleep een change node in de flow en dubbel klik er op.
Vul het volgende in:

NRchange.jpg

Uitleg: De change node zet data van het ene formaat om naar een ander formaat.
Daarbij zijn veel keuzes mogelijk.
Bij de properties bij Name zetten we format
Bij eerste rule maken we van msg.tags.type een string met de inhoud temperaure.
Bij de tweede rule maken zetten we msg.payload om in msg.value

Vervolgens verbinden we de data node met de change node.
Dan verbinden we de change node met de influxdb out node.

Reorganiseer de nodes en klik op het groene vlakje bij de debug node om de ouput uit te schakelen.
Sleep een comment node in de flow en noem hem Genereer data

NRflow1.jpg

Dan rechtsboven op Deploy drukken om de flow te activeren
Laat het Debug venster open om eventuele fouten te kunnen zien.

Open een terminal venster en bekijk het resultaat als er geen errors in het debug venster worden getoond.

TWdata.jpg

We zien een lijst met data punten, geordend in tijd met random temperaturen.
Het tijdstempel is de EPOCH tijd als UTC tijd in nano seconden.
Als we het laatste tijdstip (1667477103577804471) omrekenen, krijgen we: Thu, 03 Nov 2022 12:10:17 GMT.

Om het aantal datapunten te begrenzen is het verstandig om in de injectnode de repeat op none te zetten.
met het blauwe vlakje links naast de enject node kunnen we dan een nieuw datapunt genereren.

Stap 7 - De database lezen.

We gaan een zgn. query (een aanvraag doen) binnen de database.
Sleep een comment node in de flow en noem hem Lees data.
Sleep een inject node in de flow en noem hem Lees, bij msg.payload vul je boolean als true in.
Dan sleep je een function node in de flow en vult het volgende in.

NRquery.jpg

Uitleg:
Bij de properties van de function node vil je het volgende in: Bij Name vul je Query in.
Bij On message vul je de volgende tekst in:

						msg.query = 'SELECT * FROM "temperature"';
						return msg;
						
					

Dan sleep je een influxdb in node in de flow, bij de properties vul je Read in bij de Name.
Bij de Server, haal je de gegevens op van de bestaande server die in stap 3 is geconfigureerd.
De rest laat je leeg.
Daarna sleep je een debug node in de flow, maak hier geen wijzigingen aan.
Verbind alles met elkaar en Deploy de flow. Dan open je het Debug en drukt op het grijze vlakje bij Lees.
In het Debug venster worden objecten zichtbaar. Bij de pijltjes kunnen deze uitgevouwen worden.

NRflow2.jpg
Back to top