Monitoring BME280 (Temperatur, Luftdruck, Luftfeuchtigkeit, Taupunkt ...)

  • Einleitung
    (Zurück zum Inhaltsverzeichnis)
    Voraussetzung ist, das SNMP, MRTG und der I2C-Bus bereits eingerichtet sind.
    Desweiteren habe ich mich an diese (private!) OID-Liste gehalten


    Für diese Anleitung musste dieses BME280-Breakout-Board leiden.
    Derzeit laufen 2 dieser Boards hier, eines auf einen RPi1B(r2) und eines auf einen RPi2B mit jeweils 2 unterschiedlichen Algorithmen.


    Man bekommt vom Breakout-Board 3 Werte:
    Temperatur
    Luftfeuchtigkeit
    Luftdruck


    Den ersten Algorithmus findet man hier
    und den zweiten hier


    Errechnen kann daraus man noch 2 weitere Werte:
    Taupunkt
    Absolute Feuchte


    Auch hier habe ich 2 Algorithmen gefunden, den ersten findet man hier
    und den zweiten hier.


    Und hier noch eine Anleitung zum kalibrieren des Feuchtesensors.
    Für den Luftdruck könnte vielleicht diese Webseite interessant sein.


    Die Client-Software ist zweiteilig, der erste Teil liest den BME280 aus und speichert die Ergebnisse in /tmp.
    Der zweite Teil übernimmt die Abfragen mittels SNMP.
    Das Auslesen des BME280 erfolgt alle 5 min. über Cron zu einem definierten Zeitpunkt, damit geht man auch Schwierigkeiten mit dem I2C-Bus aus dem Weg.
    Der Nachteil ist, das die SD-Karte zusätzlich belastet wird.


    Die Software zum Auslesen des BME280
    Das erste Python-Script braucht noch eine Library von Adafruit:

    Code
    1. sudo apt-get update
    2. sudo apt-get install build-essential python-pip python-dev python-smbus git
    3. git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
    4. cd Adafruit_Python_GPIO
    5. sudo python setup.py install


    Jetzt mit:

    Code
    1. sudo vi /usr/local/bin/bme280_1.py


    folgendes Python-Script erstellen:


    Das zweite Python-Script:

    Code
    1. sudo vi /usr/local/bin/bme280_2.py



    Beide Scripte werden mit:

    Code
    1. python bme280_1.py option oder python bme280_2.py option aufgerufen.
    2. version = Nur das Datum der letzten Änderung
    3. all = Die Werte in lesbarer Form
    4. snmp = 7 Files in /tmp mit der Endung .snmp
    5. file = 1 File in /tmp mit der Endung .snmp
    6. debug = Die Werte so wie sie in den Files in /tmp stehen werden


    Beide Scripte wurden durch die Taupunkt- und abs. Feuchte-Berechnung, eine Kalibrierung,
    eine Debug-Ausgabe und das Abspeichern der ermittelten Werte in /tmp ergänzt.


    Taupunktes und absolute Luftfeuchtigkeit
    Was hier noch fehlt, sind die beiden Programme für das berechnen des Taupunktes und der absoluten Luftfeuchtigkeit.
    Die Files feuchte.py und humid.py werden in /usr/local/bin abgelegt und brauchen nicht weiter bearbeitet werden.

    Code
    1. sudo vi /usr/local/bin/feuchte.py



    Code
    1. sudo vi /usr/local/bin/humid.py



    Der Cron-Job
    Da ich nicht 2 Jobs gleichzeitig auf das Breakout-Board loslassen wollte, lasse ich mittels cron ein Bash-Script aufrufen:

    Code
    1. sudo vi /etc/cron.d/bme280


    Mit dem Inhalt:

    Code
    1. */5 * * * * root /bin/bash /usr/local/bin/BME280.cron


    Das nächste File anlegen:

    Code
    1. sudo vi /usr/local/bin/BME280.cron


    Inhalt:

    Shell-Script
    1. #!/bin/sh
    2. #if [ -e /usr/local/bin/bme280_1.py ] ; then /usr/bin/python /usr/local/bin/bme280_1.py snmp 2>&1 ; fi
    3. #sleep 1
    4. if [ -e /usr/local/bin/bme280_1.py ] ; then /usr/bin/python /usr/local/bin/bme280_1.py file 2>&1 ; fi
    5. sleep 1
    6. #if [ -e /usr/local/bin/bme280_2.py ] ; then /usr/bin/python /usr/local/bin/bme280_2.py snmp 2>&1 ; fi
    7. #sleep 1
    8. if [ -e /usr/local/bin/bme280_2.py ] ; then /usr/bin/python /usr/local/bin/bme280_2.py file 2>&1 ; fi


    Die Aufrufe mit snmp sind hier bereits auskommentiert, sie würden alle 5 Min. 14 Files auf die SD-Karte schreiben, so sind es nur 2 Files.


    Die Bash-Scripte für die Option snmp


    Das Abfragen der Werte über SNMP erfolgt über Bash-Scripte, die eigentlich nichts anderes tun,
    als die Werte bei Anforderung des Servers herauszugeben. Da diese Scripte fast identisch sind,
    habe ich die zweite (dritte, vierte) Variante auskommentiert. Die Files in /tmp werden dann erstellt,
    wenn man /usr/local/bin/bme280_(1,2).py mit der Option "snmp" aufruft. Das ganze ist nicht optimal,
    nur wenn man 1 oder 2 Werte braucht, sollte man diese Option wählen, alles andere sollte man schon im Pythonscript auskommentieren.
    Hier ist es nur der Vollständigkeit halber.


    • Temperatur



      Code
      1. sudo vi /usr/local/bin/snmp_temp_(1,2).sh


      Shell-Script
      1. #!/bin/bash
      2. echo .1.3.6.1.2.1.25.1.40.1
      3. # echo .1.3.6.1.2.1.25.1.40.3
      4. echo gauge
      5. cat /tmp/temperature_1.snmp
      6. # cat /tmp/temperature_2.snmp
      7. exit 0


    • Luftfeuchte / Humidity



      Code
      1. sudo vi /usr/local/bin/snmp_hum_(1,2).sh


      Shell-Script
      1. #!/bin/bash
      2. echo .1.3.6.1.2.1.25.1.41.1
      3. #echo .1.3.6.1.2.1.25.1.41.3
      4. echo gauge
      5. cat /tmp/humidity_rel_2.snmp.txt
      6. #cat /tmp/humidity_rel_2.snmp.txt
      7. exit 0


    • Luftdruck / Pressure



      Code
      1. sudo vi /usr/local/bin/snmp_press_(1,2).sh


      Shell-Script
      1. #!/bin/bash
      2. echo .1.3.6.1.2.1.25.1.42.1
      3. #echo .1.3.6.1.2.1.25.1.42.3
      4. echo gauge
      5. cat /tmp/pressure_1.snmp
      6. #cat /tmp/pressure_2.snmp
      7. exit 0


    • Absolute Luftfeuchtigkeit / Absolute Humidity



      Code
      1. sudo vi /usr/local/bin/snmp_Abs_Humidity_(1,2)_(1,2).sh



    • Die Ergänzung für SNMP



      Code
      1. sudo vi /etc/snmp/snmpd.conf



      Es gibt aber noch eine elegantere Möglichkeit, daher ist dies hier auskommentiert.


    Das Bash-Script für die Option "file"
    Kommen wir zur Option "file".
    Hier wird das File im Python-Script zusammengebaut und mittels eines Bash-Scripts in ein Array eingelesen.
    Hier ist es wichtig, das dieses Script mit der Bash aufgerufen wird, den Befehl "mapfile" habe ich nur hier gefunden.


    Das Script

    Code
    1. sudo vi /usr/local/bin/bme280_(1,2).sh




    Und die Ergänzung für SNMP

    Code
    1. sudo vi /etc/snmp/snmpd.conf



    Und nun SNMP neustarten, kurz überprüfen:

    Code
    1. snmpget -v1 -c public 192.168.2.13 .1.3.6.1.2.1.25.1.43.1
    2. iso.3.6.1.2.1.25.1.43.1 = Gauge32: 11560


    Das sollte man jetzt auch mit den anderen OIDs testen.


    Die Ergänzung für MRTG
    Achtung, jetzt geht es mit der Serverseite weiter.
    Da ich das testweise auf den Client raspi13 installiert habe, wird dessen Config-File modifiziert. Einfach ans Ende dranhängen.

    Code
    1. sudo vi /etc/mrtg/raspi13_mrtg.cfg



    Die Include-Dateien
    Wer richtig mit gezählt hat, kommt auf 10 Includes, je 2 für Temperatur, Luftfeuchtigkeit und Luftdruck,
    und noch 4 Berechnungen für Taupunkt und absoluter Luftfeuchtigkeit.
    Minimal reichen 4, hier war es nur, um die Algorithmen zu vergleichen.
    Da die Include-Dateien zum Teil fast Idendisch sind, habe ich die Unterschiede in Klammern angegeben.
    Man entscheide sich für 1 Möglichkeit, ohne die Klammern.



    • Luftdruck



      Code
      1. sudo vi /etc/mrtg/raspi-I2C-press_(1,2).inc



      Hier ist unter Options zu beachten das der Graph mit "expscale" nicht linear ist,
      sondern im unteren Bereich gestaucht und im oberen Bereich gedehnt wurde.
      Hier ist nur der Bereich von ca. 850hPa bis ca. 1100hPa interessant.
      Es ist nur ein Notbehelf, so schön wie es David Taylor hinbekommen hat,
      ist es mir noch nicht gelungen. Maxbytes2 zeichnet eine Linie bei 850hPa und MaxBytes1 eine bei 1050hPa.

    • Temperatur



      Code
      1. sudo vi /etc/mrtg/raspi-I2C-temp_(1,2).inc



      Auch hier habe ich expscale gewählt, weil die Temperaturschwankungen stärker ins Auge fallen.<br />
      Anmerkung: Das funktioniert bis jetzt nur bei Plusgraden.

    • Luftfeuchtigkeit



      Code
      1. sudo vi /etc/mrtg/raspi-I2C-hum_(1,2).inc



      Auch hier sieht es mit "expscale" wesentlich dramatischer aus.

    • Taupunkt und absolute Luftfeuchtigkeit



      Code
      1. sudo vi /etc/mrtg/raspi-taupunkt_(1,2,3,4).inc



      Hier werden 2 Diagramme zusammengefasst, das sich die Graphen (zumindestens bei mir) fast immer nah beieinander befinden.
      Es sieht auch ohne "expscale" dramatisch genug aus.


    Es sind zwar ein paar mehr Include-Dateien, aber als Trost sei angemerkt, das man sie receyceln kann.


    Finale
    Fehlt nur noch:

    Code
    1. sudo indexmaker --output=/var/www/mrtg/raspi13/index.html /etc/mrtg/raspi13_mrtg.cfg


    Also ein neues Index-File, spätestens nach 5 min. sollte sich leere Diagramme zeigen, das sich weitere 5 min. später langsam mit Inhalten füllen.


    Edit: Fiptehler korrigiert

    Edit2: Link überarbeitet

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


    Edited 5 times, last by Jürgen Böhm ().