. .

Wetterdatenerfassung – Erstellung der Software „weatherlogd“


Wetterstationsempfänger & Raspberry Pi (das linke)

Inhalt

Beschreibung & Infrastruktur

Über die Wetterstation WH-1050 erhalte ich Wetterdaten wie Temperatur, Windgeschwindigkeit oder Luftfeuchtigkeit.

Um diese Daten auslesen zu können, habe ich den Empfänger der Wetterstation per USB an einen Raspberry Pi angeschlossen.
Auf dem Raspberry Pi läuft ein Raspbian „wheezy“ Linux Betriebssystem mit dem Hostname „weatherfish“.

Sehr schön ist, dass zum Auslesen der Wetterstation diesen Typs bereits ein Python-Projekt namens „pywws“ besteht. Über diese Software können die RAW-Daten der Wetterstation bezogen werden.

Leider bietet pywws keine Möglichkeit, die gewonnenen Daten in eine Datenbank speichern zu können.
Daher habe ich einen relativ kleinen Daemon in C/C++ geschrieben, der unter anderem diese Aufgabe übernimmt: weatherlogd.

Infrastruktur Netzwerk weatherlogd

Das Betriebssystem des Raspberry Pi liegt auf einer SD-Karte, die zur Erhöhung der Lebensdauer nur read-only gemountet ist.
Da das Raspberry Pi nur über zwei USB-Schnittstellen verfügt (die lt. Grafik belegt sind), bot es sich an – auch aus ästhetischen Gründen (Box liegt im Wohnzimmer) – die variablen Daten wie Fotos, Zeitraffervideos und Messdaten nicht auf einer USB-Festplatte abzuspeichern, die am Raspberry Pi angeschlossen wäre.

In einem anderen Raum steht ein Alix System Board, auf dem ein OpenBSD mit dem Hostnamen „lowfish“ installiert ist. Das Alix bietet ähnlich wie Raspberry Pi ein kleines und schlankes Layout, ist aber auf Grund des Alters diesbezüglich zum Raspberry Pi eindeutig im Nachteil. Auch auf dem „lowfish“ ist das Betriebssystem auf einer SD-Karte, die read-only gemountet ist.

Auf dem „lowfish“ ist ein mySQL-Datenbankserver installiert. Außerdem wird Datenspeicher der externen USB-Festplatte über NFS zur Verfügung gestellt.
Die Messdaten, die weatherlogd durch pywws erhält, werden auf diesem Datenbankserver abgespeichert, die Fotos und Zeitraffervideos wiederum werden per NFS-Mount auf der externen Festplatte des OpenBSD-Systems abgelegt.

Die Datenbank sowie die abgelegten Dateien werden einmal in der Nacht auf einem kleinen NAS System gesichert.

Auswertung der Daten

Da die Messdaten in der Datenbank alleine nicht viel nutzen, werden über eine PHP-Seite die Daten grafisch dargestellt und Statistikdiagramme mit jpGraph erstellt. Somit läuft auf dem Host lowfish ebenfalls ein Apache-Web-Server.



Funktionen

Über die Konfigurationsdatei /etc/weatherlogd.conf können nach der Installation folgende Programmteile aktiviert bzw. beeinflusst werden:

  • Einlesen der Messdaten
  • Erstellung von Fotos über eine angeschlossene Webcam (mit zum Beispiel mplayer oder fswebcam)
  • Erstellung von Zeitraffervideos aus den Fotos (zu Mitternacht mit zum Beispiel mplayer)
  • Zeitabgleich über einen NTP-Server (Uhrzeit muss mit Wetterstation übereinstimmen)
  • Rückstellung des Datenzählers im Wetterstationsempfänger über pywws
  • Warnung per eMail bei Fehlfunktionen von weatherlogd bzw. pywws
  • Warnung per eMail bei Unter- bzw. Überschreiten von Grenzwerten, z.B. Windböen zu stark



Quellcode

Der Quellcode zu weatherlogd ist hier verfügbar:
https://gitorious.org/weatherlogd.

Mit git kann der Quellcode ohne Schlüsselpaar so geladen werden:
    git clone https://git.gitorious.org/weatherlogd/weatherlogd.git
Beim Webfrontend das gleiche Prinzip:
    git clone https://git.gitorious.org/weatherlogd/webfrontend.git



Projektdaten

Curl-Fehler: OpenSSL SSL_connect: Connection reset by peer in connection to gitorious.org:443
Daten aus https://gitorious.org/weatherlogd.xml

Eingestellt am: 16.04.2021 um 05:11:40
Lizenz:
Owner:
Repositories:



Demo

Hier gibt es eine kleine Live-Demo: teich.no-ip.org.



Ausblick

Eventuell – falls es die Zeit hergibt – besteht die Möglichkeit, in späteren Versionen die Abhängigkeit von pywws zu lösen, in dem die RAW-Daten über weatherlogd direkt vom Empfänger gelesen werden.

Die Webcam – geplant ist, diese draußen wetterfest anzubringen, damit es keine Spiegelungen im Foto gibt.


6 Antworten auf Wetterdatenerfassung – Erstellung der Software „weatherlogd“

  1. Ralf Seidler sagt:

    Hallo Herr Hoffmann,

    vielen Dank für dieses Super Tool. Ich selbe nutze eine Wetterstation WH3080, diese liefert zusätzlich Daten über Lichtstärke und den UV-Index. Ich musste einige Anpassungen vornehmen, aber nun läuft es sehr stabil. Ihre Arbeit hat mir jedenfalls sehr viel abgenommen.

    Mit freundlichen Grüßen

    R. Seidler

  2. Pingback: Raspberry Pi; Thermometer. « robrico

  3. Hummer sagt:

    Sehr geehrter Herr Hofmann,

    Erstmal vielen Dank für diese hervorragende Anleitung bzw. die Software, nur eines wäre vielleicht noch zu ergänzen.
    Wie sollte denn das Datenbank-designe dahinter aussehen?
    Ich bin nur ein Hobby-Bastler und darum kenne mich nicht so gut aus.
    Eine kleine Zeichnung des Datenbank-designes würde schon reichen.

    Mit bestem Dank
    Florian Hummer

    • Julian Hofmann sagt:

      Hallo Herr Hummer,

      Vielen Dank für Ihre Nachricht.
      „weatherlogd“ legt die Tabelle(n) eigentlich von selbst an.

      Sie müssen voher nur eine Datenbank erstellen (die, die Sie in /etc/weatherlogd.conf unter
      dem Punkt „mysql“ konfigurieren können) und einen Benutzer auf diese Datenbank berechtigen.

      Hierzu in der Konsole des Datenbankservers in etwa folgendes angeben:
      > mysql -u -root -p
      mysql > CREATE DATABASE weatherlogd;
      mysql > GRANT ALL PRIVILEGES ON weatherlogd.* TO ‚weatherlogd@(raspberry_hostname)‘ IDENTIFIED BY ‚(geheimes_passwort)';
      mysql > FLUSH PRIVILEGES;

      Dann weatherlogd starten – danach sollten Sie in der Datenbank „weatherlogd“ eine Tabelle namens „00_WeatherData_2014″
      finden. Die Struktur der Tabelle ist nichts besonderes:

      +—————————+———————+——+—–+———+—————-+
      | Field | Type | Null | Key | Default | Extra |
      +—————————+———————+——+—–+———+—————-+
      | 00_PKAID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
      | 00_TimeStamp_UTC | int(10) unsigned | NO | | NULL | |
      | 00_Intervall | tinyint(3) unsigned | NO | | NULL | |
      | 00_FotoID | int(10) unsigned | NO | | NULL | |
      | 00_Luftfeuchtigkeit_Innen | tinyint(3) unsigned | NO | | NULL | |
      | 00_Temperatur_Innen | float(3,1) | NO | | NULL | |
      | 00_Luftfeuchtigkeit | tinyint(3) unsigned | NO | | NULL | |
      | 00_Temperatur | float(3,1) | NO | | NULL | |
      | 00_Luftdruck | float(5,1) | NO | | NULL | |
      | 00_Windstaerke_AVG | float(4,1) | NO | | NULL | |
      | 00_Windstaerke_MAX | float(4,1) | NO | | NULL | |
      | 00_Windrichtung | tinyint(3) | NO | | NULL | |
      | 00_Regen | float(6,1) | NO | | NULL | |
      | 00_Status | tinyint(1) | NO | | NULL | |
      +—————————+———————+——+—–+———+—————-+

      Vom Datenbankdesign her ist es nur diese eine Tabelle, bzw. für jedes Jahr eine gleiche mit dem entsprechenden Suffix.
      Sollte etwas nicht klappen, geben Sie mir einfach Bescheid – das Projekt ist ja leider noch in
      der Beta-Phase. In /var/log/messages sollten Sie auch Hinweise erhalten, wenn etwas bei weatherlogd nicht stimmt.

      Viele Grüße
      Julian Hofmann

  4. A. Heinrich sagt:

    Hallo Herr Hofmann,
    mit Interesse habe ich den Artikel „weatherlogd“ gelesen. Genau das, was ich suche. Gibt es denn das Script irgendwo zum testen?
    MfG
    A. Heinrich

    • Julian Hofmann sagt:

      Hallo Herr Heinrich,

      ich habe das Repo unter https://gitorious.org/weatherlogd gerade initial befüllt.
      Aktuell ist das die Version 0.1.0 beta.
      Es gibt auch noch keine Dokumentation zur Software; Sie werden aber im jeden Fall die
      weatherlogd.conf anpassen müssen. Die Datei weatherlogd.conf.example wird beim Installieren
      (prefix=/usr/local) nach /etc/weatherlogd.conf kopiert (falls nicht vorhanden).

      Sie benötigen zum Kompilieren der Software ebenfalls die libmysqlclient-Bibliothek.
      Mit `weatherlogd -h‘ erhalten Sie eine kleine Hilfe und Informationen.

      Viele Grüße
      Julian Hofmann

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>