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 feuchte.py
    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
    sudo apt-get update
    sudo apt-get install build-essential python-pip python-dev python-smbus git
    git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
    cd Adafruit_Python_GPIO
    sudo python setup.py install

    Jetzt mit:

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


    folgendes Python-Script erstellen:

    Das zweite Python-Script:

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

    Beide Scripte werden mit:

    Code
    python bme280_1.py option oder python bme280_2.py option aufgerufen.
     version = Nur das Datum der letzten Änderung
     all     = Die Werte in lesbarer Form
     snmp    = 7 Files in /tmp mit der Endung .snmp
     file    = 1 File in /tmp mit der Endung .snmp
     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
    sudo vi /usr/local/bin/feuchte.py
    Code
    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
    sudo vi /etc/cron.d/bme280


    Mit dem Inhalt:

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


    Das nächste File anlegen:

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


    Inhalt:

    Bash
    #!/bin/sh
    #if [ -e /usr/local/bin/bme280_1.py ] ; then /usr/bin/python /usr/local/bin/bme280_1.py snmp 2>&1 ; fi
    #sleep 1
    if [ -e /usr/local/bin/bme280_1.py ] ; then /usr/bin/python /usr/local/bin/bme280_1.py file 2>&1 ; fi
    sleep 1
    #if [ -e /usr/local/bin/bme280_2.py ] ; then /usr/bin/python /usr/local/bin/bme280_2.py snmp 2>&1 ; fi
    #sleep 1
    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
      sudo vi /usr/local/bin/snmp_temp_(1,2).sh
      Bash
      #!/bin/bash
      echo .1.3.6.1.2.1.25.1.40.1
      # echo .1.3.6.1.2.1.25.1.40.3
      echo gauge
      cat /tmp/temperature_1.snmp
      # cat /tmp/temperature_2.snmp
      exit 0
    • Luftfeuchte / Humidity


      Code
      sudo vi /usr/local/bin/snmp_hum_(1,2).sh
      Bash
      #!/bin/bash
      echo .1.3.6.1.2.1.25.1.41.1
      #echo .1.3.6.1.2.1.25.1.41.3
      echo gauge
      cat /tmp/humidity_rel_2.snmp.txt
      #cat /tmp/humidity_rel_2.snmp.txt
      exit 0
    • Luftdruck / Pressure


      Code
      sudo vi /usr/local/bin/snmp_press_(1,2).sh
      Bash
      #!/bin/bash
      echo .1.3.6.1.2.1.25.1.42.1
      #echo .1.3.6.1.2.1.25.1.42.3
      echo gauge
      cat /tmp/pressure_1.snmp
      #cat /tmp/pressure_2.snmp
      exit 0
    • Absolute Luftfeuchtigkeit / Absolute Humidity


      Code
      sudo vi /usr/local/bin/snmp_Abs_Humidity_(1,2)_(1,2).sh
    • Die Ergänzung für SNMP


      Code
      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
    sudo vi /usr/local/bin/bme280_(1,2).sh


    Und die Ergänzung für SNMP

    Code
    sudo vi /etc/snmp/snmpd.conf

    Und nun SNMP neustarten, kurz überprüfen:

    Code
    snmpget -v1 -c public 192.168.2.13 .1.3.6.1.2.1.25.1.43.1
    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
    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
      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
      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
      sudo vi /etc/mrtg/raspi-I2C-hum_(1,2).inc


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

    • Taupunkt und absolute Luftfeuchtigkeit


      Code
      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
    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

  • Monitoring BME280 (Temperatur, Luftdruck, Luftfeuchtigkeit, Taupunkt ...)? Schau mal ob du hier fündig wirst!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!