Wetterstation (YAWST)

  • Hallo zusammen,

    in diesem Thread möchte ich mein erstes Projekt vorstellen: YAWST - yet another weather station

    Das besondere daran: Der Weg ist das Ziel ! Noch gibt es YAWST nur auf dem Papier bzw. sind die ersten Gehversuche gemacht.

    Wer mich dabei begleiten möchte ist herzlich eingeladen.

    Konzept:

    Es soll also eine (einfache) Wetterstation entstehen.

    Um das Ganze einfach zu halten, sollen vorerst nur folgende Größen erfasst werden:

    • Außentemperatur (aktuell / 24 h min / 24 h max; Verlauf letzte 24 h)
    • rel. Luftfeuchte (aktuell / 24 h min / 24 h max; Verlauf letzte 24 h)
    • rel. Luftdruck (aktuell / 24 h min / 24 h max; Verlauf letzte 24 h)

    Die Erfassung der Messdaten soll alle 5 min erfolgen.

    Aus den gesammelten Daten sollen dann Diagramme und Verläufe zusammengestellt werden, z.B. letzte 3 Tage, letzte 2 Wochen, letzter Monat etc.

    Die Daten und Diagramme sollen dann online auf meiner (zukünftigen) Website abrufbar sein.

    Prinzipiell soll die Station in der Zukunft mit weiteren Sensoren erweiterbar sein.

    Hardware:

    - Raspberry Pi 3B+ oder 4

    - Anbindung der Sensoren zunächst über 1-Wire Interface oder I²C

    - Die gesamte Peripherie soll in Eigenregie erledigt werden (Gehäuse, ggf. Taster, Display, LEDs, ...)

    Software:

    - OS: Raspbian
    - Programmierung in Python

    - Erfassung, Archivierung und Visualisierung der Messwerte mit RRDtool

    - Einbindung der Grafiken und Messwerte in einfachen HTML-Seiten, die die Basis der Website bilden sollen

    Wer Ideen, Anregungen, Kommentare oder Kritik hat - immer gerne her damit !

    Auch Erfahrungswerte von ähnlichen Projekten oder die Thematik "Wetter" interessieren mich.

    Status 2021-02-02:

    Projektstart.

    Bisher umreiße ich ganz grob das Konzept (siehe oben).

    Idee: Temperatur und Luftfeuchte werden natürlich direkt im Feld gemessen, d.h. außen im Garten, 2 m über dem Boden, schattige Ecke;

    Der Luftdruck kann in der Nähe des Pi erfasst werden (Keller), sollte unkritisch sein.

    Durch die Vorarbeiten der letzten 2 Monate (Einarbeitung Raspberry Pi, Python, HTML) funktionieren bis jetzt schon die Erfassung und Visualisierung des Luftdrucks (gemessen mittels SenseHAT) und Darstellung der Ergebnisse auf einem lokalen Webserver.

    Als nächstes geht es an die Auswahl und Beschaffung entsprechender Sensoren für Temperatur, Luftfeuchte, Luftdruck.

    --> Kennt jemand weitere einfache, integrierte Sensoren für andere Parameter wie z.B. Niederschlag, Windgeschwindigkeit und Windrichtung ?

  • - Erfassung, Archivierung und Visualisierung der Messwerte mit RRDtool

    - Einbindung der Grafiken und Messwerte in einfachen HTML-Seiten, die die Basis der Website bilden sollen

    Da würd ich dir ganz stark zur Visualisierung Grafana empfehlen, und zum speichern entweder InfluxDB (mit was ich persönlich nicht so klar komme) oder PostgreSQL mit timescale Erweiterung.

    Auch ohne der eigenen Programmiervisualisierungsarbeit bleibt noch genug für dich zu tun.

    Hier gibts ein paar Bilder von meiner Grafana Seite zu sehen: RE: Wetterstation inkl. Abgleich mit Vorhersagen

    Das schöne an Grafana ist, dass es Interaktiv ist und die Zeiträume sich schnell anpassen lassen und auch neue Abfragen sich schnell erstellen zu lassen.

  • Prinzipiell soll die Station in der Zukunft mit weiteren Sensoren erweiterbar sein.

    Modular denken, ein paar Ideen

    • Jeder Sensor(typ) ist ein Modul
    • Definierter Footprint / API
    • bringt komplette Logik mit
    • hat keine Abhängigkeit zum Core-System
    • kann sich selbst installieren/deinstallieren (z.B. wenn es um DB geht)
    • hat umfangreiche API die sich um alles kümmert
    • Core-System interagiert mit allen Sensor(Klassen) nur über die API, Anstoßen der Messung, Messwerte ..., dazu bekommt es vom Core-System alles mitgeteilt was nötig ist, z.b. DB-Verbindung etc., es erfolgt kein Callback ins Core-System selbst
    • Je nach Datenmodell gibt es Adapter-Klassen mit einheitlichem Footprint, die sich um die Datenspeicherung kümmern, MySQL, Postgres, Influx etc.
      High-End: Alle Werte werden per Definition an einen MQTT gepusht und das Core-System Backend kümmert sich vollständig unabhängig davon was damit gemacht werden soll ...
    • Verknüpfung von Core-System und Sensoren ist eine "config.yaml", die z.B. definiert, welcher Sensor an welchem GPIO oder bei Sensoren die Seriennummer und ob überhaupt aktiv
    • In Config sind auch alle Dinge, die für Charts nötig sind, Auflösung, Einheiten etc.

    Edit

    Hintergrund ist, dass ich ein ähnliches Setup am Laufen habe, aber nicht auf Raspi sondern mit etwas stärkerer Hardware.

    Dort läuft im Moment alles auf einer Hardware, ist aber so gebaut, dass es ggf. komplett auf eigene Hardware auseinander gezogen werden könnte.

    • API als zentrale Verbindung aller Komponenten
    • Datenbank, wird nie direkt angesprochen, ausschließlich über die API, dadurch ggf. frei skalierbar (Master/Slave, Galera Cluster ...)
    • MQTT Server als Drehscheibe, hauptsächlich für Datenempfang aus beliebigen Quellen, aber auch für Observer die z.B. Benachrichtigungen machen etc.
    • Incron überwacht definierte Verzeichnisse da Datenanlieferung auch per (S)FTP möglich ist
      Ebenfalls Überwachung eines Email-Postfaches auf Dateiebene
    • Backend für alle Hintergrundverarbeitungen
      Das System kann verschiedenste Daten empfangen, diese werden erst mal "raw" gespeichert und die Weiterverarbeitung in eine Queue gestellt, die dann nacheinander durchs Backend angestoßen wird, damit geht die Systemlast nicht durch die Decke, wenn mal viele Daten auf einmal kommen
      --> hier die Verbindung zu Modulen/Handlern: die API und der MQTT wissen nix über die Daten, das ist einfach nur eine Bytewolke, erst das Backend entscheidet anhand von Metadaten, wer diese zum Verarbeiten zugewiesen bekommt
      Außerdem Trennung in die Schritte "Convert" und "Import", Convert erstellt aus den raw Daten eine definierte Struktur, Import-Queue schiebt die Daten dann in die DB, natürlich via API :)
    • Frontend für Visualisierung, Stammdaten etc., auch dieses greift ausschließlich über die API auf die DB zu

    Das geht aber nur, da ich auch "nur" mit 5 min Werten arbeite, Realtime würde eine andere Struktur erforden.

    Einmal editiert, zuletzt von KKoPi (3. Februar 2021 um 12:15)

  • Hallo dr.Ian,

    sehr interessantes Projekt und ein guter Ansatz, finde ich. Schon mal vorab: Viel Erfolg.

    Ich habe auch eine lokale Wetterstation (s.Link), allerdings habe ich hierbei einen SQL-Server auf einem Windows PC als zentrale Datenbank verwendet. Das Ganze ist anders aufgebaut, vor allem die Auswertung.

    Die Daten werden nicht alle per Raspi aufgezeichnet, für Regen und Wind verwende ich eine WH1080 und die Cumulus Software. (Der Windrichtungsensor ist übrigens im Moment defekt)

    Alle Solardaten stammen von einem Pyranometer, Basis Raspberry (3b), Sensoren via I2C. Temperaturen, Luftdruck etc. habe ich doppelt, von der WH1080 und vom Raspi.

    Die Seismographdaten nehme ich ebenfalls per Raspberry (4) auf.

    Die Sensoren werden per Python Programm ausgelesen.

    Spontan fallen mir folgende Anregungen für Dein Projekt ein:

    Zur verbesserten Betriebsstabilität, Erweiterung des Raspberry um eine Festplatte, incl. Boot von dieser, vor allem dann, wenn die Datenbank darauf laufen soll. Aus dem selben Grund solltest Du ein möglichst unabhängiges Kontollprogramm schreiben das den Betrieb permanent überwacht und Dich aktiv informiert, wenn etwas nicht funktioniert.

    Gruß, Holger

    "Probleme kann man meist nicht mit derselben Denkweise lösen, durch die sie entstanden sind."

    Wetterstation Nievenheim

  • Da würd ich dir ganz stark zur Visualisierung Grafana empfehlen, und zum speichern entweder InfluxDB (mit was ich persönlich nicht so klar komme) oder PostgreSQL mit timescale Erweiterung.

    Die Grafiken sehen sehr chic aus. Sowas in der Art könnte ich mir später mal vorstellen, wobei ich jedoch für den Anfang mit dem RRDtool erstmal gut vertraut bin.

    Ich habe auch eine lokale Wetterstation (s.Link), allerdings habe ich hierbei einen SQL-Server auf einem Windows PC als zentrale Datenbank verwendet. Das Ganze ist anders aufgebaut, vor allem die Auswertung.

    Ja, deine Online-Wetterstation habe ich mir schon angesehen. Sieht sehr gut und sehr professionell aus. Sowas irgendwann wäre mehr als Deluxe, für den Anfang fange ich allerdings ein paar Stufen tiefer an.

    In meinem Projekt soll sich tatsächlich der Raspi um alles kümmern. Bzgl. der Sensoren wäre für mich eine Erweiterung um Sensoren via 1-Wire oder I²C-Interface willkommen. Hast Du konkrete Empfehlungen ?

    Der Tip mit der Festplatte ist gut, ebenso mit dem Kontrollprogramm. Eine gewisse Stabilität und Verfügbarkeit sollte gegeben sein.

    Status 2021-02-03:

    Heute habe ich erfolgreich den DS1820 (Temperatursensor) am 1-Wire-Bus des Raspi in Betrieb genommen. Vorerst noch auf dem Breadboard auf dem Schreibtisch. Eine Verlängerung nach außen ist aber in Planung, um erst mal provisorisch die Außentemperatur zu messen und zu loggen.

  • Hi,

    danke für Dein Lob :danke_ATDE:

    übrigens, es gibt von Aihasd den DS18b20 als wasserdichten Temperatur Sensor mit 10 m Kabel fertig eingeschweißt, aber Du wirst eh nicht ums Löten herumkommen. Bei der I2C - Schnittstelle bist Du mit 10m, auch mit abgeschirmten Kabeln, schon so ziemlich am Limit, es gibt Umsetzer dafür, die dann auch 100m schaffen sollen.

    Ich habe im Laufe der Zeit z.B. folgende Teile verbaut und mit Python eingebunden :

    I2C:

    BME280 Sensor I2C, BME280 Temperatur-, Luftdruck- und Luftfeuchtsensor (I2C= 0x76), 3.3V

    BMP085 I2C Temperatursensor (I2C= 0x77), 3.3V

    TSL45315 Licht visuell Sensor in LUX kalibriert (I2C= 0x29), 3.3V

    TSL2561 Licht visuell und infrarot Sensor (I2C= 0x39), 3.3V

    AS7262 6-Kanal Spektrometer (I2C= 0x49), 3.3V

    VEML6070 Lichtsensor ultraviolett (I2C= 0x38), 3.3V

    MPU-6050 Modul, 3-Achsen-Gyroskop und 3-Achsen-Accelerometer, Beschleunigung, Neigung, Thermometer, 16-Bit AD-Wandler, (I2C= 0xnn), 3.3V

    ADXL345 Modul, Beschleunigungssensor, 3-Achsen Accelerometer, I2C und SPI, 13-Bit AD-Wandler, (I2C= 0x53), 3.3V

    TCA9548A Multiplexer, macht aus einer I2C-Adresse sieben, die per Programm umgeschaltet werden können, (I2C= 0x70 bis 0x77 wählbar), 3.3V

    --> erzeugt natürlich Zeitverluste, gut bei Mehrfachbelegung derselben I2C-Adresse, z.B. durch identische Sensoren

    SSD1306, Mini OLED Display, (I2C= 0x3C), 3,3 - 5V, Auflösung 128 x 64 Pixel

    HD44780 LCD Display, 4 zeilig, 1 Kanal, I2C, 5V

    TXS0108E Logic Level Converter 8 Kanal, zur Anpassung 3,3 V Raspberry und 5,0 V LCD

    --> immer dann, wenn 5V ins Spiel kommen, die GPIOs vertragen nicht mehr als 3,3V !

    RTC DS3231, Echtzeituhr, I2C– Bus (0x68 --> 0xUU)


    GPIO:

    KY-019 Relais Modul, Schaltrelais Modul 5 V, high Level Trigger, 1 Wechsler 250 V~, 30 V, max. 10 A

    Ich hoffe, es gibt die Teile alle noch. Anbei ein Foto von meinem Pyranometer.

    Gruß und viel Spaß beim Experimentieren,

    Holger

    "Probleme kann man meist nicht mit derselben Denkweise lösen, durch die sie entstanden sind."

    Wetterstation Nievenheim

  • Leider war ich die Tage eher mit Schneeschaufeln und Eiskratzen beschäftigt.

    Dennoch, genau das richtige Wetter um den Temperatursensor auf Herz und Nieren zu testen.

    Status 2021-02-09:

    - Die Außentemperatur wird jetzt zuverlässig per DS1820 über den 1-Wire-Bus erfasst. Einige wenige Fehlmessungen sind aufgetaucht, dort werden dann Messwerte mit Wert 80 °C - 85 °C registriert. Hierfür brauche ich noch einen Filter, der derartige Messungen als "N/A" wertet.

    - Mit dem RRDTOOL kann man tolle Grafiken erzeugen, das funktioniert schon recht gut. Umso schwerer ist es, gezielt auf einzelne Werte der Datenbank zuzugreifen, z.B. um mit diesen zu rechnen oder diese einfach nur anzuzeigen.
    Beispiel: Was ist der MAX und MIN-Temperaturwert der letzten 24 h ?
    Es hat mich einiges an Arbeit und Recherche gekostet, doch nun kann ich auf diese Werte zugreifen und weiterverarbeiten. Der entscheidende Beitrag war übrigens hier im Forum, vielen Dank Unbekannterweise.

    - Den Webseiten-Prototyp habe ich um die MAX und MIN-Werte (24 h) der Temperatur ergänzt.

    - Neue Idee: Der Raspberry soll um ein I²C LC-Display ergänzt werden. Es soll im Normalbetrieb die letzte Messung und der aktuelle Status angezeigt werden.

    Was nun ansteht, ist die Konzeption, Auswahl und Bestellung der Hardware.

  • Hallo dr.lan,

    Zitat

    Der Raspberry soll um ein I²C LC-Display ergänzt werden

    ich habe mal dieses Display verbaut: I²C Display HD44780, Bild im Anhang. Da werden auch alle paar Minuten Temperatur, Druck und Feuchte per WLAN in eine SQL Datenbank geschrieben, allerdings nicht für Ausseneinsatz geeignet.

    Projekt Thermometer Datalogger


    Hardware Komponenten des Thermometers :

    Raspberry Pi Modell Zero, BCM2835 single-core ARMv6 SoC , 1 GB RAM 1,00 GHz, WLAN


    Sensoren über I²C Schnittstelle :

    HD44780 LCD Display, 4 zeilig, 1 Kanal, I²C

    BME280 Temperatur-, Luftdruck- und Luftfeuchtsensor, 3 Kanäle, I²C

    TXS0108E Logic Level Converter 8 Kanal, zur Anpassung 3,3 V Raspberry und 5,0 V LCD

    Die Sensoren und der Raspberry können natürlich auch andere sein, aber Achtung so ein TXS0108E Logic Level Converter (wahlweise natürlich ein anderer) ist bei diesem Display unbedingt erforderlich, weil es mit 5V arbeitet und dann auch 5V anstelle der max. erlaubten 3,3V auf der I²C Schnittstelle des Raspberry anliegen würden !

    Falls Du so ein Display kaufst, achte auf den Preis, es gibt mehrere Anbieter, das Teil ist aber meist dasselbe.

    Gruß,

    Holger


  • Hallo insight-er,

    vielen Dank für die Info zum LC-Display. Ja, sowas in der Art sollte zum Einsatz kommen. Ggf. 2 x 16 oder 4 x 20 Zeilen. Schauen wir mal.

    Status 2021-02-13:

    Die Website der Wetterstation läuft im Moment noch auf einem lokalen lighttpd-Server.

    Hier mal ein Screenshot der Übersicht der aktuellen Messwerte:

    Ich habe die Messwert-Erfassung um die Werte "Absolutes Minimum" und "Absolutes Maximum" erweitert. Dort werden in einer separaten CSV-Datei die Rekorde gespeichert. Dazu noch Ergänzung der Uhrzeiten für Sonnenaufgang und Sonnenuntergang.

    Wie man sieht, fehlen noch Luftdruck- und Luftfeuchte-Sensoren. Diese müssen noch ergänzt werden.

    Unter der weiteren Seite "Werte Verlauf" werden allerhand graphische Verläufe dargestellt. Das ist aber noch in Arbeit.

  • Status 2021-03-03:

    - Zu den "Astronomischen Daten" ist noch die Berechnung und Anzeige der aktuellen Mondphase hinzugekommen.

    - Es gibt nun zwei Status-LEDs: Eine Power-LED (hart gegen die 3,3 V des PI geschaltet), sowie eine LED für "Messung aktiv".

    - In der Zwischenzeit gab es Probleme mit dem 1-Wire-Bus. Dieser wurde von heute auf morgen an Pin 4 nicht mehr erkannt. Seltsam war, dass der Bus an einem anderen GPIO (21) weiterhin ohne Probleme lief und alle Temperatursensoren erkannt wurden. Also ging die Fehlersuche los ... Letztlich scheint der äußerst fragile Aufbau auf einem Breadboard und ungeschirmter 2-Drahtleitung hier schuld zu sein. Den 1-Wire-Bus habe ich bisher parasitär mit 4,7 k als Pullup gegen 3,3 V betrieben. Nach einer Reduzierung des Pullup-Widerstands auf 3,5 k geht alles wieder an GPIO 4. Jedenfalls die letzten 24 h stabil.

    Ich hatte schon Angst das ich mir den GPIO 4 zerschossen habe, was aber eigentlich nicht sein kann, da ich nur 3,3 V und GND benutze.

    Ich bin gespannt, wie stabil das Ganze hinterher dann an einer 5 m Ethernet-Leitung läuft ;)

    Letztlich hat es mir gezeigt, dass ich Fehler oder Ausfälle in der Kommunikation zu den Sensoren in einer sinnvollen Art und Weise noch abfangen muss.

    - Im Hintergrund arbeite ich an einem optisch schöneren HTML-Frontend für die letztendliche Website.

    - Mein derzeit größtes Problem: Die Lieferung der Hardware verzögert sich immer noch ... Insbesondere wird der vorgesehene Raspberry Pi 4 2 GB nicht zeitig eintreffen bzw. muss ich mich nach alternativen Wegen umsehen.

  • Gehst Du jetzt komplett auf die Raspberry Schiene ? Soweit ich mich erinnere, hattest Du doch von einer anderen Hardware gesprochen, oder werden es jetzt zwei Microcontroller sein ?

    Hi,

    ja, das Projekt wird komplett durch einen Raspberry Pi realisiert. Ohne zusätzliche Controller.

    Der Raspi ist quasi ideal dafür - er bietet alles für einen erfolgreichen und schnellen Start. Alle Funktionen sollten sich mit einem Minimum an externer Hardware und Peripherie lösen lassen.

    Ich habe in der Vergangenheit immer mal wieder mit ATMEL Mikrocontroller experimentiert; das war auch sehr interessant. Was mich jedoch größtenteils gestört hat war die Tatsache, dass man teilweise mehr Zeit mit der Fehlersuche den µC überhaupt erfolgreich flashen zu können verbracht hat als mit dem eigentlichen Projekt ...

    Status 2021-03-03:

    - Die Hardware-Lieferung ist - bis auf den Raspberry Pi - nun endlich da. Es kann also losgehen.

    Ernüchterung macht sich breit: Das Hutschienen-Gehäuse ist nun deutlich kompakter als angenommen ... d.h. das 16X2 LCD-Modul findet dort definitiv keinen Platz. Ggf. werde ich eine externe Schnittstelle vorsehen, um das System durch ein Display zu ergänzen. War eigentlich anders vorgesehen, aber egal.

    - Zweifel kommen auf - die Hardware-Gesamtkosten übersteigen die Kosten einer mittelmäßigen, komplett betriebsbereiten Wetterstation um einiges ... Aber egal: Der Weg ist das Ziel ! Und es hat ja auch niemand gesagt, dass es einfach oder billig wird ... ;)

    - Was auch noch ansteht: Organisation einer Internet-Domain, Webspace, Einrichtung etc.

  • Hi,

    ich hoste bei IONOS, ist ganz gut. Allerdings habe ich einen kleinen Cloudserver angemietet, wegen unserer kommerziellen Webseiten, kollenbroich.com und kollenbroich.de

    Das lohnt sich natürlich nicht für eine Wetterstation, aber die haben auch kleinere Pakete.

    Würde mich auch mal interessieren, ob man irgendwo eine Website kostenlos hosten kann ...

    Gruß, Holger

    "Probleme kann man meist nicht mit derselben Denkweise lösen, durch die sie entstanden sind."

    Wetterstation Nievenheim

    Einmal editiert, zuletzt von insight-er (4. März 2021 um 23:18)

  • Status 2021-03-14:

    - Alle 3 Sensoren (DS1820, DHT22, BMP280) sind nun integriert und funktionieren.

    - Von meinem Pi 400 + Breadboard habe ich die Elektronik nun auf den letztendlichen Raspberry Pi 4 im Hutschienengehäuse portiert.
    Weiterhin wurden 3 Status LEDs (Power, Messung aktiv, Reserve) in das Gehäuse integriert. Auch die Buchse für die Anbindung des Außensensors hat ihren Platz gefunden.

    - Die Außensensoren haben ein Gehäuse bekommen und sind nun über ein ca. 5 m langes Kabel angebunden. Erstmal nur "Testweise". Da das Ganze aber auf Anhieb gut funktioniert, muss ich das Kabel und die Stecker noch final konfektionieren.

    - NEU: Für den Luftdruck wird nun auch die Tendenz ermittelt. Basis dafür ist das Delta zwischen dem aktuellen Luftdruck und dem Luftdruck -3 h.

    - Das LC-Display wurde - vorerst - aus Platzgründen verworfen.

    Als nächstes gibt es ein paar Bilder von der Hardware um mal einen Eindruck vom Projekt zu vermitteln.

Jetzt mitmachen!

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