ws3080-bild
ws3080-bild

Wetterstation WS3080 

Nach längerem Betrieb einer Wetterstation WS1080 mit WEEWX und dern Totalausfall nach einem Sturm habe ich mich parallel zum Aufbau einer "Eigenkonstruktion" aus den noch vorhandenen alten Komponenten für die Neuanschaffung einer noch erschwinglichen Wetterstation WS3080 entschlossen (auch diese kann Daten über die USB-Verbindung zum Basismodul liefern). Alternativ zur bei der WS1080 verwendeten Software "WEEXW" wollte ich aber einmal die mögliche Alternative pywws zum Einsatz bringen. Also geht es mit der Installation los. Als RASPBERRY habe ich den Rechner MANTELLA gewählt. Nach dem üblichen Update/Upgrade des Systems folgen diese Schritte:

  • Korrekte Zeitzone des Raspberry Pi einstellen:

sudo timedatectl set-timezone Europe/Berlin

Phyton und weitere Bibliotheken installieren

  • Installation von python, libusb, croniter und gnuplot
  • Phyton ist in der Regel bereits vorhanden, jedoch nicht in der richtigen Version. Libusb wird als USB-Verbindung zur Wetterstation benötigt. Gnuplot benötige ich zum Erstellen von Wettergrafiken (Alternative zu WEEWX).

Also geht's los:

sudo pip install --upgrade pip 

pip_install
  • pip ist der Paketmanager für die Programmiersprache Python. Es kann auf einem Linux-System installiert und dann in der Befehlszeile verwendet werden, um Python-Pakete und ihre erforderlichen Abhängigkeiten herunterzuladen und zu installieren.

sudo pip install tzlocal 

  • Dies ist ein praktisches kleines Modul, das Informationen zur lokalen Zeitzone liefert.
tz_local

pip install libusb1

libusb_1
  •  libusb-Systembibliothek

pip install pyusb

pyusb
  • Python-Schnittstelle zur libusb-Systembibliothek

pip install croniter 

croniter
  • Das Modul pywws.regulartasks kann Aufgaben zu bestimmten Zeiten ausführen. Dies erfordert die Croniter-Bibliothek.

pip install python-daemon

python-daemon
  • Das pywws.livelogdaemon-Modul führt pywws live logging als echten UNIX-Daemon-Prozess aus. Es erfordert die Python-Daemon-Bibliothek.

sudo ap-get install gnuplot 

gnuplot
  • Das Pywws.plot-Modul verwendet gnuplot, um Graphen zu zeichnen. Wenn man Diagramme von Wetterdaten erstellen möchte muss man die gnuplot-Anwendung installieren.

Dann installiere ich pywws

cd ~

sudo pip install pywws

pywws.pmg


  • Jetzt kommt der Test ob pywws läuft und die Wetterstation erkannt wird. Dazu muss jetzt die Basisstation der Wetterstation mit dem USB-Kabel an einen der vier USB-Ports des Raspberry verbunden werden. Testbefehl:

sudo python3 -m pywws-testweatherstation

  • Im Terminal sollte einiges an Zahlen erscheinen
testweatherstation


Wenn hier Fehler auftreten, kann im Handbuch von pywws einiges an Hilfestellungen gefunden werden.

Erzeugen der notwendigen Konfigurationsdateien "weather.ini" und "status.ini"

sudo python3 -m pywws.logdata -vvv /home/wetter/station/alternate

Die INI-Dateien werden im Verzeichnis /home/wetter/station/alternate gepeichert und können dort editiert werden.

Einrichtung/Einstellungen

Wenn der Test zu einem positiven Ergebnis geführt hat, dann geht es mit den Einstellungen/der Einrichtung weiter.

  • Abfrage der idVendor und idProduct-Parameter

Um die Wetterstation eindeutig zu identifizieren, müssen diese beiden Parameter abgefragt und bei Bedarf in folgenden Anweisungen ersetzt werden. Die Abfrage geht ganz einfach:

cat /var/log/kern.log | grep hid

identifikation2


Die beiden benötigten Werte sind im mit dem Pfeil gekennzeichneten Bereich zu finden.

In der Ausgabe finde ich also folgenden Wert „0003:1941:8021.0001“. 

Dies bedeutet folgende Zuweisung:

idVendor=1941
idProduct=8021

Gruppe wetter anlegen

sudo addgroup wetter

Benutzer der Gruppe wetter zuordnen

sudo usermod -a -G wetter wetter


Udev-Rule zuweisen

Um die zuvor erstellte Gruppe auch dauerhaft der Wetterstation zuzuweisen, muss die nachfolgende Regel erstellt werden. 

Also editiere ich eine Datei mit dem Namen 38-weather-station.rules im Verzeichnis /etc/udev/rules.d

udev_rules
udev_rules


# Wetterstation
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1941", ATTRS{idProduct}=="8021", GROUP="wetter", MODE="0660"
ACTION=="change", SUBSYSTEM=="usb", ATTRS{idVendor}=="1941", ATTRS{idProduct}=="8021", GROUP="wetter", MODE="0660"


Raspberry rebooten

Nun wird der Raspberry neu gestartet. 

sudo shutdown -r now

  • Dann teste ich die Verbindung zur Wetterstation erneut:
pywws-testweatherstation_2
pywws-testweatherstation_2



pywws: Anpassung des Systems


Jetzt geht die "Feinarbeit" los. Anpassungen an Initialisierungsdateien, Einrichten der Umgebung, Verzeichnisse, Rechte.

Das Basis-Verzeichnis soll nicht (wegen der vielen Schreib- und Lesezugriffe) auf der SD-Karte, sondern auf der USB-Festplatte liegen, das Gleiche gilt für das Webverzeichnis.  

Basisverzeichnis

mkdir -p  data

mkdirdata


Erfassungsintervall


Dann setze ich das Erfassungsintervall der WH3080. Dieses Minutenintervall bestimmt die Messungen zwischen zwei Messungen der Wetterstation. Im Standard-Modus sind  dies auf 30 Minuten gestellt, ich möchte aber nun alle 5 Minuten eine Messung durchführen:

sudo pyhon3 -m pywws-setweatherstation -r 5

intervall
intervall


Anpassung der  ini-Datei von pywws

Die ini-Datei, also das Config-File, welches pywws zur Steuerung benutzt, kann im Pfad /home/pi/data/weather/data gefunden werden. Soviel zur Theorie. Bei meinen Tests habe ich das File manuell anlegen müssen:


cd ~/station/alternate/

nano weather.ini


In die Datei schreibe ich folgende Daten:

weatherini


Dies ist das Standard-ini-File, ich werde es erst einmal so verwenden. Weitere Anpassungen werde ich später vornehmen. 

Wie geht es nun weiter?

Wenn bis zu diesem Punkt alles korrekt läuft, kann pywws als Cron-Job eingerichtet werden. Jedoch sollte man dies laut Hersteller nicht mehr machen, da es in der aktuellen Version bessere Wege gibt. Zur Verdeutlichung beschreibe ich dennoch diesen Weg:https://homepagedesigner.telekom.de/.cm4all/widgetres.php/com.cm4all.wdn.PhotoGrid/images/thumbnail-grid.svg
Mit dem nachfolgenden Weg startet man den Datenabzug stündlich:

hourly


sudo python3 -m pywws.hourly -vvv /home/wetter/station


Durch diesen Aufruf werden alle Wetterdaten aus der WH3080 ausgelesen. Im Verzeichnis „raw“ findet man die „Rohdaten“ aus der Wetterstation. Doch pywws kann noch mehr. Es generiert aus den von der Wetterstation zur Verfügung gestellten Rohdaten auch stündliche, tägliche und monatliche Statistikdaten. Diese findet man in den entsprechenden Ordnern. 


/home/wetter/station/data/tmp/output/


In älteren Versionen wurde empfohlen, den stündlichen Aufruf wie folgt per Cron-Job zu implementieren:
0 * * * * python3 -m pywws.hourly /home/wetter/station


Dies kann man testweise eine Weile so durchführen, es gibt elegantere Möglichkeiten.


Pywws-livelog: Der andere Weg


Der andere Weg heißt “Live-Log”. Der Aufruf für diesen Befehl lautet:


sudo python3 -m  pywws.livelog 


Damit “Live-Log” funktioniert, müssen noch einige Anpassungen vorgenommen werden. Zuerst benötigt der Job einen „tmp“-Ordner, in dem Daten zwischengespeichert werden können:
Wenn der Job ohne Fehlermeldung startet, lasse ich den Job fünf bis zehn Minuten lang laufen. Abbrechen kann ich den Job mittels ‘STRG + C’. Nun ist es angebracht, die Logs zu prüfen und sich mit dem Dateisystem auseinanderzusetzen. Es wurden neue Ordner angelegt und mit Daten gefüllt.

livelog_1
livelog_1


Der Daemon

Eine weitere Möglichkeit ist es, die Datensammlung einem Daemon zu überlassen.

sudo python3 -m pywws.livelogdaemon -v /home/wetter/station /home/wetter/station/pywwstask.log start

livelogdaemon

Der Start und die Ausführung werden mit der Option -v unter Angabe des Pfades und Dateinamens (hier pywwstask.log) protokolliert.

pywwslog
pywwslog


So lassen sich nach kurzer Zeit bereits die ersten Grafiken anblicken:


Da pywws noch mehr kann und ich eigentlich nur bestimmte Daten möchte habe ich mich für die nächste Variante entschieden: Der klassische CRON-Job. Hierzu startet alle 10 Minuten ein BASH-Script, sammelt die Daten ein, generiert aus den Templates Grafiken und erzeugt Textdateien zur Einbindung in eine Website. Weiterhin erzeugt es die CSV-Dateien, die ich zum "Füttern" einer Mysql-Datenbank benötige.

/home/wetter/station/stunde.sh

stunde.sh

#!/bin/bash
# Startet Python zur Abfrage der Daten der Wetterstation WS3080
log=/home/wetter/station/stunde.log
aktuellesdatum=$(date '+%d-%m-%Y')
aktuellezeit=$(date '+%H-%M-%S')
python3 -m pywws.hourly -v /home/wetter/station >> $log 2>&1
python3 -m pywws.logdata -v /home/wetter/station >> $log 2>&1
echo "Logdateien/Bilder/Texte wurden erzeugt am: "$aktuellesdatum" um: "$aktuellezeit >> $log

Das Script wird jede Stunde über einen Cronjob ausgeführt.  So erfolgt dann auch die Aktualisierung der Website jede Stunde.

Die Seite findest Du unter:  https://www.commentum.de/Wetter/WS3080/Wetter.html oder mit dem Button ganz unten auf dieser Seite.

stunde.sh


Die ausführbaren Dateien und Profile für pywws findet man übrigens im Verzeichnis "/usr/local/lib/python3.9/dist-packages".

Der Aufbau der als Textdatei gespeicherten Stationsdaten ist folgender:

key_list= ['idx', 'delay', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'status', 'illuminance', 'uv']

Für eine Umwandlung in eine für Mysql (je nach Datenbankstruktur) lesbare CSV-Datei ergibt sich damit folgende Ausgangsstruktur:

Datum/Uhrzeit

Verzögerung

Zähler

Luftfeuchtigkeit innen

Temperatur innen

Luftfeuchtigkeit aussen

Temperatur aussen

Luftdruck

Windgeschwindigkeit (Durchschnitt)

Windgeschwindigkeit (Böen)

Windrichtung

Regen

Status

Helligkeit

UV-Wert

2022-05-16 14:37:03

 

5

40

25.1

73

20.8

1008.6

1

2.7

10

45.3

0

24676

1

2022-05-17 09:17:03

5

49

24.7

58

22.5

1013.1

0

0.7

1

45.3

0

55009

4

2022-05-17 10:57:03


5

48

24.5

55

23.8

1012.6

0

0

8

45.3

0

66278

5

Also kann es an die Arbeit gehen und mit der Programmierung der Übergabe-/Übernahme-Scripte der ausgegebenen Werte  in die Datenbank begonnen werden. Ziel ist es einfach, eine abfragbare Historie zu erhalten. Aber das wird dann das nächste Kapitel...

Zum Testen habe ich die Wetterstation zuerst einmal an einem ausziehbaren Rohr (stammte noch von einem defekten "Schlammsauger") installiert (dadurch konnte ich auch einen eventuell notwendigen Batteriewechsel vereinfachen). Das Rohr wurde mit Kabelbindern provisorisch an einem Sichtschutz montiert. Auf Dauer aber macht das natürlich keinen Sinn, denn man kann es so gar nicht in eine absolute Senk-/Waagerechte bringen. Für die endgültige Installation habe ich daher die Stromversorgung (Batteriepole) "umgelötet". Die Batterien sind nun in einem wetterfesten Gehäuse am unteren Ende des Installationsmastes mit einem eigenen Schalter (für einen Reset) zugänglich und leichter austauschbar. Der Montagemast sollte eigentlich ja auch einen Durchmesser von 50 mm haben, das Provisorium war deutlich dünner (35 mm). Da bot es sich an, einfache HT Rohre statt teurer Stahlrohre zu verwenden. Die Befestigung an einem Gartenhaus habe ich mit Stützwinkeln und darauf festgeschraubten Holzplatten mit entsprechenden 50 mm Löchern gelöst. Mit Hilfe von 2D-Wasserwaagen konnte so die Installation unabhängig von der waagerechte/senkrechten Standsituation des Gartenhauses (das Haus konnte ich ja wohl kaum noch justieren, oder besser: Das wollte ich auch gar nicht). Für mögliche Erweiterungen habe ich weitere Kabel durch das Rohr gezogen. Deren Polenden münden in wasserdichten Kabelboxen am unteren und oberen Ende des Installationsmastes. Dort werden/wurden Raspberry/Arduino und die Platinen der Sensoren in einem wasserdichten Verteilergehäuse (einfache Boxen zur Stromverteilung, 230V, Bohrungen für externe Kühlung) mit Rohrschellen befestigt. Die Stromversorgung des Raspberry Pi und des Arduino für die zusätzlichen Sensoren wird über eine Insellösung (12V-Akku, Laderegler, Solarpanel) sichergestellt, der Internet Router wird bei Stromausfall auf eine USV geschaltet. Damit ist bei einem Stromausfall die Übertragung der ermittelten Daten für einen längeren Zeitraum (max. 6h) weiterhin sichergestellt. Ist alles eigentlich nicht notwendig, in erster Linie ging es mir hierbei um das Austesten verschiedener Möglichkeiten zur technischen Konfiguration.

Die Datenbank wird mit einem BASH-Script regelmäßig mit den Wetterdaten gefüttert, die Ergebnisse werden mit einem PHP-Programm auf der Homepage mit dazu passenden Grafiken angezeigt.

 Anmerkung: Die USB-Verbindung funktioniert manchmal etwas "zickig". Das passiert bereits beim Einstellen der Uhrzeit am Display. Auch sollte man ein gut abgeschirmtes USB-Kabel möglichst ohne Verlängerung verwenden. Die Kontakte sollten sehr fest sitzen, damit eine Störung zum Beispiel beim Versetzen des Displays verhindert wird.

Es gibt zwar die Möglichkeit einen Reset auf den jeweils betroffen USB-Port zu machen, aber in der Regel ist ein Reboot des Pi die schnellere Lösung.

Und noch eine Anmerkung:

Das Solarzellenfeld der Wetterstation ist durch transparenten Kunstoff abgedeckt. Nach wenigen Monaten hat sich zwischen Telle und Abdeckung bereits Wasser angesammelt.  Ob und ab wann es hierdurch zu Beeinträchtigungen kommen wird steht in den Sternen. Ob auch Feuchtigkeit ins Gehäuse gelangen kann? Hoffen wir es nicht... 

Zur Regenmessung

Die Regenmessung müsste ich noch einmal gesondert überprüfen. Am einfachsten mit einem "klassischem" Regenmesser für ein paar Euro aus einem Baumarkt...


Daten der neuen Wetterstation


Commentum
Der Einfall, die Lüge, die Erdichtung
E-Mail
Infos