Weerstation bouwen met RRDtool

      1 reactie op Weerstation bouwen met RRDtool

Je eigen weerstation met daggrafiek “from scratch”!

Een weerstation bouwen is met de Pi makkelijk te doen en je hebt alles zelf in de hand. Als voorbeeld nemen we sensors voor de temperatuur, luchtvochtigheid en luchtdruk. De data hiervan willen we in een grafiek weergeven die via het netwerk toegankelijk moet zijn. We gebruiken hiervoor het programma RRDtool.

Waarom RRDtool?

Meestal wordt voor dit soort toepassingen een mysql- of sqlite-database gebruikt om de waarden in op te slaan gecombineerd met een (betaalde) online service voor de grafische weergave en de toegang via internet. Het aantal van deze webservices dat dashboards voor de weergave van allerhande gegevens aanbiedt, groeit onder invloed van de IoT-hype. Je betaalt dan meestal ook nog voor een abonnement. Voorbeelden zijn plot.ly, pubnub.com, initialstate.com, iot-dashboard.org en adafruit.io. Maar wij willen niet afhankelijk zijn van een externe service, die er wellicht op een onbewaakt moment mee ophoudt of plotseling de bijbehorende API verandert, waardoor het niet meer werkt. We houden liever alles in eigen hand. Daarom kiezen we voor de rrdtool van Tobi Oetiker. Dit is een database en grafische tool in een. RRDtool was oorspronkelijk bedoeld voor het in beeld brengen van netwerksnelheden, processor- en harddisktemperaturen, cpu-belasting etc. Maar het is ook zeer bruikbaar voor allerhande andere datastreams.

 

zomerwinter

Hoe is het weer thuis? Warm? Koud? Nat? Droog?

grafiek2

RRDtool laat in de grafiek de gegevens van de afgelopen 24 uur zien.

Wat heb je nodig

Pi 0, 1, 2 of 3 met Raspbian
DHT22 of AM2302 (temperatuur- en luchtvochtigheidsensor)
Adafruit BMP183 SPI (temperatuur- en luchtdruksensor)
4,7 kΩ-weerstand
Breadboard

Hardware aansluiten

De DHT22, of AM2302 (andere naam voor hetzelfde beestje), is een temperatuur- en luchtvochtigheidsensor die erg simpel is aan te sluiten op de Raspberry Pi. Dat kan via een (mini)breadboard, of rechtstreeks, wanneer je de bijbehorende 4,7 kΩ-weerstand aan de pootjes vastsoldeert (zie afbeelding). Met de bijbehorende bibliotheek van Adafruit (zie link onderaan), kun je hem ter controle direct uitlezen:

python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 4

De sensor geeft geen continue stroom aan data, zoals bij analoge temperatuursensors het geval is, maar steeds een losse waarde als het Python-script daar om vraagt. Het script heeft twee parameters nodig: de code voor de sensor (2302) en het GPIO-nummer (4) van de pin op de Pi (fysieke pin 7) waar de datalijn aan vast zit. De output “Temp=17.9* Humidity=38.8%” geeft meteen de beide waardes voor temperatuur en luchtvochtigheid.
Voor onze toepassing willen we alleen de kale waardes gescheiden in een variabele opslaan en dus kopiëren we het originele script naar twee andere scripts (AdaAMtemp.py en AdaAMhumid.py), waarbij we de onderstaande code inkorten, zodat de output alleen de kale waarde van de temperatuur of de vochtigheid oplevert:

print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))

wordt dan

print('{0:0.1f}'.format(temperature))

en

print(‘{1:0.1f}'.format(humidity))

In het uiteindelijke bash-script komen dan de volgende twee regels om de variabelen te vullen:

temperature=$(python /home/pi/Adafruit_Python_DHT/examples/AdaAMtemp.py 2302 4)
humidity=$(python /home/pi/Adafruit_Python_DHT/examples/AdaAMhumid.py 2302 4)

Voor de BMP183 doen we hetzelfde, maar van deze gebruiken we alleen de luchtdruk. Nu kunnen we aan de slag met de database.

Aansluitschema van AM2302/DHT22  en BMP183.

aansluitschema

Je hebt niet veel nodig: een Raspberry Pi of een Pi Zero, twee sensors en een weerstand.

Wat is RRDtool?

RRDtool is een database en grafische tool in een. De database is een zogenaamde round robin (circulaire) database. Hierin worden de gegevens niet eeuwigdurend opgeslagen, waardoor de database continu zou groeien. Je geeft de database van te voren een vaste omvang, en die ruimte zal hij innemen en niet meer. In het begin zal hij gevuld zijn met onbekende data (‘NAN’, not a number). Allengs worden de oudste gegevens weggegooid om plaats te maken voor de nieuwe.
De installatie is simpel:

sudo apt-get update
sudo apt-get install rrdtool

Daarna staat de software in /usr/bin/rrdtool/.
In totaal heb je maar drie Linux-commando’s nodig om alles te doen:
een om de database op te zetten,
een om de database te vullen en
een om de data in een grafiek in een plaatje te zetten.
Het plaatje met de grafiek hoef je daarna alleen nog in je website te zetten

Stap 1: opzetten van de database

Het opzetten van de database doen we met onderstaand commando:

/usr/bin/rrdtool create pimeteo.rrd --start N --step 300 \
DS:temp:GAUGE:600:-30:50 \
DS:humid:GAUGE:600:10:100 \
RRA:AVERAGE:0.5:1:288 \
RRA:AVERAGE:0.5:1:2016 \
RRA:AVERAGE:0.5:1:8064 \
RRA:AVERAGE:0.5:288:365

Met rrdtool create maken we de nieuwe database aan die we in ons voorbeeld pimeteo noemen. We moeten altijd een startpunt (–start) voor de database opgeven, normaal in het aantal seconden sinds Epoch (01-01-1970). Maar we kunnen N (now) nemen voor het huidige tijdstip.
Met –step geef je aan in seconden met welk maximum interval de database nieuwe data verwacht, in ons geval is dat om de vijf minuten. Wanneer er geen data binnen dit interval wordt aangeleverd, verschijnt er NAN in de database en een lege plek in de grafiek).
Daarna volgen achter DS (data source) de variabele waarin ze terecht moeten komen, de data source type (hier: GAUGE), de heartbeat (dit is de timeout in seconden) en de datarange (de te verwachten minimum en maximum waarden).
RRA staat voor Round Robin Archive. Hiermee bepalen we hoeveel data we opslaan en voor hoelang.
AVERAGE betekent dat alleen de gemiddelde waarde (indien er meerdere waardes zijn) bewaard moet worden.
288 is het aantal stappen dat we opslaan in de database, in ons geval 288 x 300 = 86400 seconden (=1 dag).
Daarnaast hebben we nog wat extra stappen voor een week, een maand en een jaar.

Stap 2: updaten database

[tekst volgt nog]

Stap 3: grafische weergave

[tekst volgt nog]

1 gedachte over “Weerstation bouwen met RRDtool

  1. Ruud Warnaar

    Goede beschrijving ik wil deze zeker gaan nabouwen.
    Maar ik kwam bij het doorlezen toch een klein ding tegen waar ik nog een vraag over had.
    En voor ik ga starten dacht ik even navragen.
    Er staat: Voor de BMP183 doen we hetzelfde, maar van deze gebruiken we alleen de luchtdruk. Nu kunnen we aan de slag met de database.
    Maar daar loop ik dus vast.
    Moet er geen library worden binnengehaald?
    En met welk commando wordt de barometer aangestuurd?

    Ik hoop dat je me wat duidelijkheden kan geven betreffende deze twee vragen.

    Ruud

Gesloten voor reacties.