Eigene Raspberry Pi Wetterstation mit OpenHAB 2 bauen

Eines der beliebtesten Projekten neben der Hausautomatisierung und Robotern ist die eigene Raspberry Pi Wetterstation. Diese kann sowohl für den Innen- als auch Außenbereich verwendet werden und ist dazu beliebig erweiterbar. Die Daten lassen wir entweder über eine Weboberfläche von anderen Geräten aus anzeigen, oder nutzen den Raspberry Pi Touchscreen.

In diesem Tutorial erstellen wir eine funktionsfähige und erweiterbare Wetterstation, die über einen Touchscreen abgerufen und gesteuert werden kann.

 

Zubehör für die Raspberry Pi Wetterstation

Für die Wetterstation wirst du folgendes Zubehör benötigen. Dabei können natürlich auch einzelne Komponenten weg gelassen oder hinzugefügt werden. Der Code muss dann allerdings auch entsprechend angepasst werden.

Darüber hinaus sind weitere Sensoren wie bspw. Gas Sensoren, Helligkeitssensoren oder aber Windstärke Sensoren auch eine Möglichkeit, welche eingebunden werden können.

Eine weitere Möglichkeit ist es einen ESP8266 NodeMCU oder Raspberry Pi Zero W als Außenposten für die Wetterstation zu nutzen. Auf die Anzeige auf einem LCD Display wird in diesem Tutorial nicht explizit eingegangen. Wie man darauf Daten anzeigen lässt ist in einem vorherigen Tutorial genauer erklärt und kann ggf. angepasst werden.

 

 

Aufbau & Verkabelung

Beginnen wir mit der Verkabelung aller Module. Am einfachsten ist dies beim offiziellen Raspberry Pi Touchscreen. Dieser kann über das Ribbon Kabel an den DSI Port des Raspberry Pi’s angeschlossen werden. Strom bekommt es entweder über den 5V Pin oder per USB Anschluss. Eine genaue Beschreibung gibt es hier.

Anschließend sind die Sensoren dran. Auch diese wurden in vorherigen Tutorials genauer besprochen, aber an dieser Stelle gibt es erneut den Aufbau:

Der DHT11 Sensor wird wie in der Abbildung zu sehen mit 3.3V und GND verbunden. Der Datenpin geht an GPIO23 und gleichzeitig über einen 10kΩ Widerstand an 3.3V.

Der BMP180 wird lediglich an den I2C Bus angeschlossen und bekommt ebenfalls eine Verbindung zu 3.3V und GND.

Raspberry Pi Wetterstation OpenHAB Steckplatine

Raspberry Pi Wetterstation Steckplatine der Sensoren

 

Vorbereitung: OpenHAB & Pakete installieren

Als Oberfläche nutzen wir OpenHAB, welches generell ein sehr guter Einstieg in die Hausautomatisierung ist. Da es verschiedene grafische Oberflächen bietet, ist es nicht notwendig, dass wir unsere eigene GUI erstellen. Diese können wir später noch individualisieren.

Daher beginnen wir damit OpenHAB 2 auf dem Raspberry Pi zu installieren. Ist dies vollendet öffnen wir http://openhabianpi:8080/paperui/index.html#/extensions und suchen unter „Binding“ das Paket „Exec Binding“ sowie unter den Tabs „Persistence“ das Paket „RRD4j Persistence“ und unter „Transformations“ das Paket „RegEx Transformation“. Alle werden installiert.

Nun loggen wir uns per SSH ein und installieren die benötigten Pakete für den DHT und BMP180 Sensor:

sudo apt-get update
sudo apt-get install build-essential python-dev python3-dev python3-openssl python3-smbus python3-pip i2c-tools git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python3 setup.py install
cd ..
git clone https://github.com/adafruit/Adafruit_Python_BMP && cd Adafruit_Python_BMP
sudo python3 setup.py install

Falls du Python2 statt Python3 nutzen willst, musst du die Pakete und Installationsaufrufe entsprechend anpassen.

Anschließend müssen wir noch I2C aktivieren:

sudo raspi-config

Unter „Interfacing Options“ -> „I2C“ aktivieren wir es (dies kann von Raspbian Version variieren, aber ist immer in der raspi-config enthalten).

Sofern der BMP Sensor bereits angeschlossen ist, können wir testen, ob er bereits erkannt wurde:

i2cdetect -y 1

Das Ergebnis sollte so aussehen:

 0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

 

 

Raspberry Pi Wetterstation einrichten

Die Funktionen, die wir nutzen werden, brauchen Tools, die uns die Daten ausliefern. Am einfachsten geht dies mit Python, wofür es viele Bibliotheken gibt (u.a. die wir bereits genutzt und installiert haben). Wir starten also mit dem Hauptskript:

sudo nano /etc/openhab2/scripts/weatherstation.py

Es bekommt folgenden Inhalt:

Speichere mit STRG+O und kehre mit STRG+X zur Shell zurück (in den nächsten Schritten ebenso).

Außerdem müssen wir diesem Skript und dem I2C Modul noch Admin Berechtigungen geben, die wir für die GPIO Aufrufe benötigen:

sudo chmod +x /etc/openhab2/scripts/weatherstation.py
sudo chmod a+rw /dev/i2c-*

Damit die Rechte für I2C auch dauerhaft gesetzt werden, lassen wir es bei jedem Reboot ausführen. Dies geht per Crontab:

sudo crontab -e

Sofern du noch keinen Editor eingestellt hast, wähle 2. nano aus. Füge nun am Ende folgende Zeile hinzu und speichere die Datei:

@reboot sudo chmod a+rw /dev/i2c-*

 

Nun geht es weiter mit den Things: Pro Wert (Temperatur, Luftfeuchtigkeit, Luftdruck, etc.) müssen wir ein Thing anlegen. Dazu nutzen wir das vorher installierte Exec Add-On, womit wir Shell Aufrufe starten können. Für die Speicherung brauchen wir ebenso „RRD4j Persistence“ (unter Add-ons -> Persistence). Unser Python Skript nimmt verschiedene Parameter an und gibt entsprechende Werte zurück. Dies nutzen wir:

sudo nano /etc/openhab2/things/weatherstation.things

Als nächstes kommen unsere Items ins Spiel:

sudo nano /etc/openhab2/items/weatherstation.items

Damit die Daten dauerhaft (jede Minute) in der Datenbank gespeichert werden, müssen wir dies angeben, indem wir es in eine .persist Datei schreiben:

sudo nano /etc/openhab2/persistence/rrd4j.persist

Bisher haben wir jeweils zwei Items erzeugt. Das eine als Textwert aus dem Skript und das andere als Zahlwert, den wir ggf. noch verändern können. Dies geht mit Rules:

sudo nano /etc/openhab2/rules/weatherstation.rules

Hier ist auch eine Veränderung über Regex Werte und ein Debug-Logging möglich. Generell können hier andere Ereignisse getriggert werden – bspw. dass wenn die Temperatur über 30 Grad wird, dass der Ventilator (sofern verbunden) angeht. Bei Interesse können wir solche Szenarien in zukünftigen Tutorials durchgehen und erklären.

Nun erstellen wir noch eine schönere Ansicht. Diese ist allerdings nicht mit der PaperUI sichtbar, daher müssen wir in die BasicUI verwenden: http://openhabianpi:8080/basicui/app
Dafür erstellen wir eine Sitemap, in der die bisherigen Items eingefügt werden können:

sudo nano /etc/openhab2/sitemaps/weatherstation.sitemap

Aktualisiere danach die BasicUI Seite und wähle die Sitemap „Weahterstation“. Hier werden nun alle Werte und die vorherigen Werte in einer Tabelle angezeigt. Da die Werte doch recht unterschiedlich sind (Luftdruck ~1000 [hPa], Temperatur 0-30 [°C], Luftfeuchtigkeit ~ 20-70 [%]) können wir ggf. auch verschiedene Graphen/Charts anlegen oder bspw. statt hPa die Einheit Bar verwenden.

Raspberry Pi Weatherstation OpenHAB Panel

 

Darüber hinaus könnten wir die Temperatur natürlich auch mit dem BMP180 messen. Ebenso kann er die Höhe (in Metern) und den Meereslevel-Druck („Sealevel Pressure“) messen. Mit den angegeben Beispielen sollte es ein Kinderspiel sein die Dateien ggf. zu erweitern.

Sollte wider Erwarten etwas nicht so funktionieren, wie es sollte, so hilft oft ein Blick in die Logs. Wie du darauf zugreifen kannst ist in diesem Artikel erklärt (bspw. per Karaf Konsole).

 

Zusatz: Wettervorhersage über Yahoo! einrichten

Unsere Raspberry Pi Wetterstation soll noch ein Zusatzfeature bekommen: Neben den aktuell gemessenen Daten, wollen wir auch Vorhersagen für den nächsten Tag treffen. Dieses Feature ist optimal, aber macht einiges aus. Wir können zwischen verschiedenen Anbietern wir Forecast.io, OpenWeatherMap, Yahoo! uvm. wählen. Je nach Ort sind manche genauer oder besser geeignet. Da man außer für die Vorhersagen von Yahoo überall einen API Key braucht, nutzen wir der einfachheit halber diesen Service. Natürlich kann er aber auch durch einen anderen ersetzt werden.

Dazu nutzen wir das OpenHAB Wetter Binding. Gehe in der PaperUI wieder auf „Add-Ons“ -> „Bindings“ und installiere das „Weather Binding“.

Außerdem brauchen wir eine sog. WOEID. Diese benötigte WOEID Nummer für deine Stadt bekommst du auf dieser Website. Suche deinen Ort und kopiere die Nummer.

Nun erstellen wir eine Konfigurationsdatei:

sudo nano /etc/openhab2/services/weather.cfg

Folgender Inhalt kommt hinein:

Nun müssen wir noch entsprechende Items erstellen. Dazu bearbeiten wir die vorher angelegte Things-Datei und fügen folgende Zeilen hinzu (forecast=1 gibt an, dass die Werte für den nächsten Tag abgerufen werden, 2 für den übernächsten Tag, usw.). Wir können auch verschiedene Orte in der Konfigurationsdatei erstellen (bei uns ist nur „home“ definiert) und danach Items für verschiedene Orte anlegen:

Außerdem muss die Sitemap noch angepasst werden:

Weitere Dateien müssen nicht angepasst werden, da wir keine Speicherung von Vorhersagen möchten. Möchtest du andere Icons in der Sitemap nutzen, kannst du entweder eigene hochladen oder auf die Standardicons zurückgreifen.

Um die gesamte Bandbreite der Werte (Wind, Wolken, Niederschlag, Schnee, gefühlte Außentemperatur, Nebel/Sichtweite etc.) nutzen zu können, kannst du dir die weiteren Beispiele ansehen.

 

Raspberry Pi Wetterstation Daten auf Touchscreen anzeigen

Bevor wir mit der Installation starten, muss das Display angeschlossen und mit Strom versorgt sein.

Da openHAB auf Raspbian Lite basiert, hat es dementsprechend keine grafische Oberfläche. Um das Webpanel auf dem Touchscreen automatisch anzeigen zu lassen, müssen wir diese also erst nachinstallieren. Wir wählen die PIXEL Oberfläche und den Chromium Browser. Die Installation läuft über SSH.

sudo apt-get install --no-install-recommends xserver-xorg --yes
sudo apt-get install --no-install-recommends xinit --yes
sudo apt-get install raspberrypi-ui-mods --yes
sudo apt-get install chromium-browser --yes

Wir aktivieren zunächst das automatische Login auf den Desktop:

sudo raspi-config

Wähle unter „Boot Options“ -> „Desktop / CLI“ -> „Desktop“ aus.

Nun stellen wir das automatische Login in die GUI ein:

sudo nano /etc/lightdm/lightdm.conf

Wir suchen die Zeile „#autologin-user=“ (Suchen geht einfach mit STRG+W) und entfernen die Raute am Anfang und setzen am Ende den User „openhabian“, sodass sie so aussieht:

autologin-user=openhabian

Speichere mit STRG+O und gehe zurück in die Konsole mit STRG+X.

Nun stellen wir noch sicher, dass der Browser mit der entsprechenden Seite beim Start auch

sudo nano /home/openhabian/.config/lxsession/LXDE-pi/autostart

Ganz ans Ende der Datei kommt folgende Zeile.

@xset s noblank
@xset s off
@xset -dpms 
@sudo chmod a+rw /dev/i2c-*
@/usr/bin/chromium-browser --kiosk --disable-restore-session-state http://http://openhabianpi:8080/basicui/app?sitemap=weatherstation

Außerdem müssen wir noch eine weitere Datei bearbeiten:

sudo nano /etc/kbd/config

Hier ändern die Werte der folgenden beiden Einträge auf Null:

BLANK_TIME=0
POWERDOWN_TIME=0

Nach dem Speichern starten wir den Raspberry Pi neu:

sudo reboot

Nun wird der Browser gestartet, jedoch dauert es einen Moment, bis auch OpenHAB gestartet ist und das Panel sichtbar wird.

66 Kommentare

  1. Cooles Projekt. Vielen Dank für die ausführliche Beschreibung.
    Aber natürlich wäre es toll, wenn Daten von ausserhalb per WLAN, z. B. durch einen ESP8266 für die Temperatur und Luftdruck zur Verfügung stünden. Dann könnte der Pi mit seinem Display schön in der Wohnung hängen und trotzdem als Wetterstation fungieren.

    Gruß,
    Stefan

    Antworten
    • Das ist kein Problem, da wir Skripte benutzen. Du kannst auch einfach ein anderes Skript aufrufen, welches die Daten von einem ESP8266 o.ä. abfrägt. Bei Bedarf kann ich dazu gerne ein Tutorial machen.

      Antworten
      • Hi Felix,
        Die Idee mit dem ESP8266 find ich Klasse und ein weiteres Tutorial find ich Klasse!!!
        Danke für die tolle Beschreibung.

        LG

  2. Klasse Tutorial! Prima, vielen Dank, da mache ich mich doch gleich ans basteln. Kannst Du evtl. noch ein paar Hinweise geben, wie man die Daten von dem Raspberry mit den Sensoren auf einen zentralen openhab2 server senden kann, d.h. die openhab2 Instanz wird nicht auf dem Raspberry selbst gehostet.

    Antworten
  3. Noch toller wäre es, einen der 433-MHz-Sensoren für Aussentemperatur
    und Aussenfeuchtigkeit der üblichen „Wetter/Funkuhren“ abzulesen.

    Antworten
  4. Bis jetzt finktionieren alle Schaltungen, die ich nachgebaut habe. Mein Kompliment alles wird klar und deutlich erklärt. Ich freue mich auf das nächste Projekt.
    Gruß aus den Niederlanden

    Joost

    Antworten
  5. Hallo Felix, jetzt hat es geklappt.
    Allerdings wenn ich später den Befehl:
    sudo chmod +x /etc/openhab2/scripts/weatherstation.py
    eingebe, kommt die Fehlermeldung:
    chmod: cannot access ‘/etc/openhab2/scripts/weatherstation.py’: No such file or directory

    Antworten
  6. Danke, das du mit mir soviel Geduld hast.
    auf der obersten Ebene wenn ich mich richtig erinnere.
    Bin noch unterwegs und kann erst nach 20:00 schauen.
    Ich melde mich dann.

    Antworten
  7. Ich habe es gefunden:
    Oben müsste anstatt sudo nano /etc/openhab2/weatherstation.py
    –> sudo nano /etc/openhab2/scripts/weatherstation.py heißen.
    Jetzt krieg ich meine Werte angezeigt.

    Wie kann ich mir die Temperatur Werte vom BMP 180 anzeigen lassen, ist jetzt meine nächste Aufgabe. 🙂

    Vielen Dank für das Tutorial

    Antworten
  8. Hallo,

    Ist es möglich eine Aufzeichnung der Temperatur bzw. Feuchtigkeit der letzten 24h hinzuzufügen?

    Wäre „Non + ultra“ wenn das noch ginge?!

    Grüße
    Micha

    Antworten
  9. Es wäre meiner Meinung nach sinnvoller statt dem DHT22 und dem BMP180 den BME280 zu verwenden, da dieser Temperatur, Luftfeuchtigkeit und Luftdruck misst

    Antworten
  10. Hallo Felix,
    ich habe eine Frage. An der Touchscreen anzeige ist das ein neuer Raspberry Pi der da angeschlossen wurde oder ist das der an dem die Sensoren angebracht wurden?

    Antworten
  11. Hallo Felix,
    vielen Dank für die verständliche Beispiel-Beschreibung.
    Dieses Beispiel ist für jeden der sich interdisziplinär mit openHAB2 befasst ein prima Einstieg.

    Ein Tutorial mit einem ESP8266 (ESP8266-12E) der die Sensorwerte von Außen an den internen Raspi sendet währe auch super.

    Antworten
  12. Hallo Felix,
    habe nun doch ein Problem mit der I2C- Aktivierung.

    Der Bildschirm zeigt bei mir an : openhabian@openHABianPi:~$
    Den Befehl „sudo raspi-config“ kennt er nicht, stattdessen soll „openhabian-config“ eingegeben werden; dort finde ich aber keine Möglichkeit „Interfacing Options“ aufzurufen.
    Was kann man da machen ?

    Antworten
    • Hallo!
      Vielen Dank für die sehr guten Tutorials. Hat mir schon viel geholfen. Bin absoluter Neuling.

      Das gleiche Problem habe ich auch. „Interfacing Options“ sind dort nicht zu finden.

      Außerdem werden mir keine Werte auf der PaperUi für den Yahoo Forecast angezeigt.

      Kann mir damit jemand helfen?

      Danke und Grüße
      Carsten

      Antworten
  13. Hallo, ich benutze einen Übersetzer. Ich habe alles gemacht. Ich werde dich wissen lassen, dass ich die Befehle nicht akzeptiere:
    sudo chmod + x /etc/openhab2/scripts/weatherstation.py
    sudo chmod a + rw / dev / i2c *
    Ich habe sie geschrieben
    sudo chmod +x /etc/openhab2/scripts/weatherstation.py
    sudo chmod a+rw /dev/i2c-*
    Ich hoffe es ist richtig
    Das Problem ist, dass ich keinen Wert für Temperatur, Druck und Feuchtigkeit sehe, sondern nur einen „-“
    Ihr Skript läuft von Python funktioniert
    das Signallog:
    [WARN ] [el.core.internal.ModelRepositoryImpl] – Configuration model ‚weatherstation.items‘ has errors, t
    herefore ignoring it:
    [8,34]: mismatched character ‚o‘ expecting set null
    [8,121]: mismatched input ‚ֱ‘ expecting RULE_STRING
    [8,127]: missing ‚}‘ at ‚D‘
    [8,128]: extraneous input “ expecting RULE_ID
    [8,132]: mismatched character “ expecting “‘

    Du kannst mir helfen
    danke

    Antworten
      • Hallo,

        habe das gleiche Problem. Temperatur und Luftfeuchtigkeit ist nur ein -.
        „sudo -u openhab /etc/openhab2/scripts/weatherstation.py temperature“ bringt „4.300000190734863“.
        Sieht also gut aus. In den LOG-Dateien habe ich keine Fehler finden können (oder falsche angeschaut).
        Zur Info: BMP180 fehlt bei mir noch (Liferung steht noch aus).

      • Hello to all!
        At first: Thank you for the great tutorial!
        I had the same problem as Kai&Alex:
        My solution was adding the „python3“ to the thing-Configuration:
        So it is:
        Thing exec:command:weatherstation_temperature „Temperatur“ [command=“python3 /etc/openhab2/scripts/weatherstation.py temperature“, transform=“REGEX((.*?))“, interval=60, timeout=10, aut$
        Thing exec:command:weatherstation_humidity „Luftfeuchtigkeit“ [command=“python3 /etc/openhab2/scripts/weatherstation.py humidity“, transform=“REGEX((.*?))“, interval=10, timeout=10, aut$

        I’m not using the third sensor. Hope it helps!

        Regards

      • Thanks for the answer, I had already tried that. Unfortunately, it did not help me 🙁

      • Fehler gefunden: benötigt wird Exec Binding. Wer das Tutorial zur Einrichtung gelesen hat (mit Demo für CPU Temperatur) der hat das schon drauf. Habe das Tutorial aber nicht gelesen, da die Installation bereits fertig war…
        Danke noch mal für die Anleitung!!!!

  14. Hallo,
    tolle Anleitung. Aber leider wird ein wichtiger Code nicht angezeigt. Im Abschnitt mit der Yahoo Vorhersage, fehlt der Text für das ITEM Programm.

    Antworten
  15. Hallo,

    noch ein Hinweis für alle openHAB Neulinge wie mich. Für die Speicherung in Datenbank (hier rrd4j) wird das Add-on „RRD4j Persistence“ benötigt (Paper UI/ Add-ons/ Persistence).

    Antworten
  16. Hallo Felix,
    danke für das gute Tutorial,soweit alles i.O. bis auf den DHT 11 Sensor der gibt keine Werte aus:
    Fehler :
    RuntimeError: Error accessing GPIO.
    Traceback (most recent call last):
    File „/etc/openhab2/scripts/weatherstation.py“, line 27, in
    humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    File „/usr/local/lib/python3.5/dist-packages/Adafruit_DHT-1.3.2-py3.5-linux-armv7l.egg/Adafruit_DHT/common.py“, line 94, in read_retry
    humidity, temperature = read(sensor, pin, platform)
    File „/usr/local/lib/python3.5/dist-packages/Adafruit_DHT-1.3.2-py3.5-linux-armv7l.egg/Adafruit_DHT/common.py“, line 81, in read
    return platform.read(sensor, pin)
    File „/usr/local/lib/python3.5/dist-packages/Adafruit_DHT-1.3.2-py3.5-linux-armv7l.egg/Adafruit_DHT/Raspberry_Pi_2.py“, line 34, in read
    raise RuntimeError(‚Error accessing GPIO.‘)

    Woran kann das liegen?
    Danke und VG
    Guido

    Antworten
  17. Hallo,
    bei mir wird die Datei /home/openhabian/.config/lxsession/LXDE-pi/autostart nicht gefunden. Es gibt schon den Unterordner /.config nicht. Woran kann das liegen?

    Antworten
  18. Hallo,

    ist der User evtl. nicht in der gpio-Gruppe oder wird nicht python3 genutzt? Versuche doch mal über terminal „sudo -u openhab /etc/openhab2/scripts/weatherstation.py temperature“ bzw.“ sudo -u openhab python3 /etc/openhab2/scripts/weatherstation.py temperature“.
    Für den Fall, dass es mit python3… geht, kann das bei den things ergänzt werden.
    Sollte es an der Gruppe liegen, so kann ein „sudo usermod -aG gpio openhab“ ggf. helfen.
    Ich nutze mein openhab im Textmodus – Zugriff also über SSH –> kein Problem.

    Antworten
  19. Auch von meiner Seite mal ein fettes Danke. Da neu bei OpenHAB, hat mir das Tutorial gut geholfen.
    Nachdem ich jedoch meinen Sensor über ein Cat5-Kabel nach außen verlegt hatte, bekam ich immer mal wieder Messfehler (Temperaturen > 2000…). Habe mir darauf das python-script neu erstellt (offensichtlich falsche Werte werden verworfen). Die Übergabedaten habe ich übernommen. Evtl. hilft es ja jemandem auch als Idee!?!?
    Gibt es eigentlich eine Möglichkeit das als script bei den Kommentaren einzufügen?

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    import Adafruit_DHT
    import Adafruit_BMP.BMP085
    import sys, time
    
    myGPIOPIN = 23	#Pin an dem DHT angeschaltet ist
    
    #Auswahl Sensor
    #mySensor = Adafruit_DHT.DHT11
    #mySensor = Adafruit_DHT.DHT22
    mySensor = Adafruit_DHT.AM2302
    
    #Nur fuer DHT --> Wiederholungen nicht zu hoch waehlen: Achtung bei 10 und 15 sind das 10x15x2 Sekunden = 300 Sekunden!!!!
    myRetries = 3      #Anzahl der Versuche zum Start des Lesens wenn Werte bekommen, diese jedoch nicht plausibel
    myReadRetries = 6  #Anzahl der Versuche zum Lesen der Daten vom DHT (zwischen Lesen 2 Sekunde Pause)
    
    #optionales Log zum Testen - ABER nur fuer DHT
    #nur bei Bedarf auf True setzen --> Datei wird immer groesser!!!
    #myLog = True
    myLog = False
    myLogFile = '/etc/openhab2/scripts/weather.log'
    
    def logging(locReason, locHumidity, locTemperature):
        if (myLog):
            myFile = open(myLogFile,'a')
            myFile.write(time.strftime('%d.%m.%Y  %H:%M:%S') + ' Argument: ' + locReason +' - Luftfeuchtigkeit: '+ str(locHumidity) +'  - Temperatur: ' + str(locTemperature) + 'r')
            myFile.close()
    
    def info():
        print ('Bitte Uebergabe von temperature, humidity, pressure, sealevel_pressure, altitude oder temperature2')
        print ('DHT-Sensor:')
        print ('temperature = Temperatur')
        print ('humidity = Luftfeuchtigkeit')
        print ('BMP-Sensor:')
        print ('pressure = Luftdruck')
        print ('sealevel_pressure = Luftdruck auf Meereshoehe')
        print ('altitude = Hoehe')
        print ('temperature2 = Temperatur')
        
    if len(sys.argv) > 1:
        myArgument = sys.argv[1].lower()
        if (myArgument == 'temperature') or (myArgument == 'humidity'):
            for i in range(myRetries):
                myHumidity, myTemperature = Adafruit_DHT.read_retry(mySensor, myGPIOPIN, myReadRetries)
                #myHumidity, myTemperature = Adafruit_DHT.read(mySensor, myGPIOPIN)
                if (myHumidity is None or myTemperature is None):
                    logging ('KEINE WERTE BEKOMMEN', myHumidity, myTemperature)
                    quit()  #keine Werte (auch keine falschen) bekommen
                else:
                    #falsche Werte anhand gueltiger Luftfeuchtigkeit (0-100) und Temperatur (-50 - 50) bestimmen
                    if (myHumidity>0 and myHumidity-50 and myTemperature <50):
                        logging (myArgument, myHumidity, myTemperature)
                        if (myArgument == 'temperature'):
                            print (myTemperature)
                            quit()
                        elif (myArgument == 'humidity'):
                            print (myHumidity)
                            quit()
                time.sleep (2)
            logging ('WERTE NICHT GUELTIG', myHumidity, myTemperature)
    
        elif (myArgument == 'pressure'):
            myBMP = Adafruit_BMP.BMP085.BMP085()
            print(myBMP.read_pressure() / 100.0) #Ausgabe in  hPa (gebraeuchliche Art)
            #print(myBMP.read_pressure() / 1000.00) #Ausgabe in  kPa (bessere Skalierung im grid)
        elif (myArgument == 'sealevel_pressure'):
            myBMP = Adafruit_BMP.BMP085.BMP085()
            print(myBMP.read_sealevel_pressure() / 100.0) #Ausgabe in  hPa (gebraeuchliche Art)
            #print(myBMP.read_sealevel_pressure() / 1000.00) #Ausgabe in  kPa (bessere Skalierung im grid)
        elif (myArgument == 'altitude'):
            myBMP = Adafruit_BMP.BMP085.BMP085()
            print(myBMP.read_altitude())
        elif (myArgument == 'temperature2'):
            myBMP = Adafruit_BMP.BMP085.BMP085()
            print(myBMP.read_temperature())
        else:
            info()
    else:
        info()
    Antworten
      • @Felix:
        Kannst Du bitte

        if (myHumidity>0 and myHumidity-50 and myTemperature 0 and myHumidity-50 and myTemperature <50):

        ersetzen?!
        Hat er auch nicht richtig übernommen.
        -danke-

      • Und schon wieder nicht (stört sich wohl am kleiner)
        Also dann in Worten:
        if (myHumidity größer 0 and myHumidity kleinergleich 100 and myTemperature größer -50 and myTemperature kleiner 50):

  20. Hallo

    Meine frage ist ob dieses setup auch mit mehreren Temp+Feuchtigkeitssensoren klappt plane einen ähnlichen aufbau allerdings mit 2 solcher sensoren wo 2 im Räucherofen sitzen und die beiden werte gemittelt werden sollen + ein sensor für ausen temp+Feuchtigkeit

    Antworten
  21. Hallo, ich habe eine frage: Wo und wie muss ich die skripte einsetzten? Uns wie kann ich die skripte programmieren? ich bin neu auf dem gebiet. kann mir jemand dringend und schnell helfen? liebe grüsse Vincent

    Antworten
  22. Hallo Felix. Ich bin recht neu auf dem Gebiet und bräuchte mal ausführliche Hilfe. Ich habe ein Problem mit dem file Setup.py. Egal aus welchem Verzeichnis ich den Befehl: sudo python3 setup.py install , ausführen will, es kommt immer die gleiche Fehlermeldung: python3: can’t open file ’setup.py‘: [Errno 2] No such file or directory.
    Kannst du mir vielleicht weiterhelfen?
    Ausserdem wäre ich noch froh wenn ich wüsste in welchem Verzeichnis der Raspberry die Files vom Download speichert. Dann könnte ich mit cd /Verzeichnisname den Befehl im Verzeichnis ausführen. Ich gebe alle Befehle per SSH Verbindung ein. Ist es richtig das alle Befehle über das Terminal laufen? Ich hoffe du kannst mir schnell antworten und Liebe grüsse
    Vincent

    Antworten
  23. Hey Felix. Hat jetzt alles geklappt. Hatte wohl etwas bei der Installation falsch gemacht. Vielen Dank für das Super Tutorial. Eine letzte Frage hätte ich noch, Beim Grafen unter den Daten, ist die Uhrzeit unten und links ist eine Einheit. Mein Problem ist leider das ich nicht weiss was das für eine Einheit ist. Vielleicht kannst du mir da helfen. Liebe grüsse Vincent

    Antworten
  24. Hallo,
    danke für das Tutorial hat bis zum Ende auch alles gut funktioniert.
    Hab nur zwei Probleme:

    1.
    sudo nano /etc/kbd/config –> das Verzeichnis wird nicht gefunden und es wir eine leere Datei in Nano geöffnet.

    2.
    Das Desktop System und Chromium werden gestartet, allerding wird nichts angezeigt weil die Fehlermeldung „DNS-Adresse des Servers von http wurde nicht gefunden“.

    Irgendwelche Ideen an was das liegen kann? Bedingt das erste Problem evtl. das Zweite?

    Danke schonmal und viele Grüße

    Antworten
    • Ok hab den einen Fehler gefunden da war ein http zu viel in der /home/openhabian/.config/lxsession/LXDE-pi/autostart.

      Allerdings kommt jetzt Problem accessing /basicui/app. Reason:
      not found

      Antworten
  25. Ich habe das Tutorial so befolgt wie es dort steht habe OpneHAB installiert und dann die scripte eingefügt . Wenn ich nun jedoch auf das Fenster gehe wo die Temperaturen angezeigt werden erhalte ich kein Ergebniss also es werden keine Temperaturen angezeigt. Ne Idee woran das liegen könnte?
    P.s. ich verwende einen DHT11 da ich keinen DHT22 besitze dies habe ich aber auch in der scriptdatei angepasst

    Antworten
  26. Hallo,
    ich habe auf dem Raspbian OS das OpenHAB2 installiert, soweit so gut.
    Jetzt möchte ich aber anstatt dem BMP180 den BMP280 verwenden. Dazu habe ich das Paket Adafruit_Python_BME280 installiert, beim Aufruf des Scripts Adafruit_BME280_Example.py bekomme ich die Werte des Sensors angezeigt. Allerding bekomme ich die Aufrufe im Script weatherstation.py nicht hin.
    Wie muss das Script angepasst werden, dass die Werte vom BMP280 verwendet werden?

    Antworten
  27. Funktioniert jetzt doch zum teil, ich hatte die Installation im falschen Pfad durchgeführt.
    Allerdings habe ich das Problem, dass beim ausführen des Scrpts
    sudo python /etc/openhab2/scripts/weatherstation.py temperature folgender Fehler angezeigt wird. File „/etc/openhab2/scripts/weatherstation.py“, line 15
    elif call == ‚humidity‘:
    SyntaxError: invalid syntax

    Hier das ganze Script

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-

    from Adafruit_BME280 import *
    import sys, time

    sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)

    if __name__ == ‚__main__‘:
    if len(sys.argv) > 1:
    call = sys.argv[1].lower()

    if call == ‚temperature‘:
    print(sensor.read_temperature()
    elif call == ‚humidity‘:
    print(sensor.read_humidity())
    elif call == ‚pressure‘:
    print(sensor.read_pressure() / 100.0)
    )
    Was ist daran falsch?

    Antworten
  28. Hallo Felix,
    ich habe das Script wie folgt angepasst, die Temperatur wird auch eingelesen, doch beim Druck und der Luftfeuchte bekomme ich Fehlermeldungen.
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-

    from Adafruit_BME280 import *
    import sys, time

    sensor = BME280(t_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8)

    if __name__ == ‚__main__‘:
    if len(sys.argv) > 1:
    call = sys.argv[1].lower()

    if call == ‚temperature‘:
    temperature = None
    while temperature == None:
    temperature = sensor.read_temperature()
    print(temperature)

    elif call == ‚humidity‘:
    humidity = None
    while humidity == None:
    humidity = sensor.read_humidity()
    print (humidity)

    elif call == ‚pressure‘:
    hectopascals = sensor.read_pressure() / 100.0
    print (hectopascals)

    Fehlermeldung:
    Traceback (most recent call last):
    File „/etc/openhab2/scripts/weatherstation.py“, line 22, in
    humidity = sensor.read_humidity()
    File „/usr/local/lib/python3.5/dist-packages/Adafruit_BME280.py“, line 243, in read_humidity
    adc = float(self.read_raw_humidity())
    File „/usr/local/lib/python3.5/dist-packages/Adafruit_BME280.py“, line 209, in read_raw_humidity
    raw = (self.BME280Data[6] << 8) | self.BME280Data[7]
    AttributeError: 'BME280' object has no attribute 'BME280Data'

    Hast du eventuell eine Idee woran es liegen könnte?

    Antworten
  29. Hi
    Ich glaube ich hab einen Fehler entdeckt!
    Bei der Autostartfunktion von Chrome für das Display ist ein „HTTPS://“ zu viel.

    Antworten
  30. Hallo Zusammen,

    ich habe alle schritte wie oben beschrieben ausgeführt jedoch werden in der Basic Ui nur die drei Kästen angezeit aber ohne die Werte.

    Vielen Dank für eure Hilfe
    Marcel

    Antworten
    • Hallo Marcel,

      das Problem hatte ich auch. Schau mal mit einem Editor in /var/lib/openhab2/config/org/openhab/addons.config.

      Dort gibt es unten einen Punkt ui. Wenn die Basic UI dort nicht drin steht, dann füge die einfach hinzu.

      Bei mir sah das so aus: ui=“paper,habpanel“
      Ich habe das dann so geändert: ui=“paper,habpanel,basic“

      Danach konnte ich die Basic UI auswählen.

      Viele Grüße
      Pascal

      Antworten
  31. Hallo Felix!
    Vielen Dank für das super Tutorial. Ich habe es wie beschrieben nachgebaut und soweit hat es funktioniert. Das heißt, es hat fast funktioniert. 😉

    Ich verwende einen DHT22-Sensor. Dieser misst auch die Temperatur und Luftfeuchtigkeit. Nach einiger Zeit bemerke ich aber, dass der Graph bei beiden Werten konstant bleibt. Wenn ich dann ins Log schaue, dann sehe ich, dass nur noch der letzte bekannte Wert regelmäßig in die Datenbank geschrieben wird. Wenn ich dann den Sensor kurz ab- und wieder anstecke, dann wird sofort die Temperatur und Luftfeuchtigkeit auf den aktuellen Wert gesetzt (im Log sehe ich dann, dass er tatsächlich auch wieder misst). Dies bleibt dann für eine bestimmte Zeit (unregelmäßig, mal länger mal kürzer), bis er wieder aufhört zu messen und der Graph wieder konstant bleibt. Dann hilft wieder nur ein an- und abstecken und es geht wieder für eine gewisse Zeit.

    Hast Du vielleicht eine Idee, woran das liegen könnte?

    Viele Grüße
    Pascal

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!