Wetterstation

Hier beschreibe ich die Installation einer Wetterstation und die Auswertung der Daten mit einer in Python geschriebenen Software namens "WEEWX" auf einem Raspberry Pi. Diese Daten werden auf  dieser Homepage unter dem Menu Wetterdaten zu sehen sein.

Es gibt wahrscheinlich noch einige Dutzend Beiträge zu diesem Thema, aber ich wollte es eben selbst erarbeiten. Daher werden wohl auch viele Unterschiede zu bestehenden Publikationen existieren.

Hier kann man die ermittelten Daten sehen (werden lokal alle 5 Minuten aktualisiert und zeitverzögert auf den Webserver übertragen): LITORIA

Hier eine kurze Beschreibung der Vorgehensweise:

Als erstes habe ich die Wetterstation "WH1080" an einem kleinen Gartenhaus befestigt. Der Anbau erfolgte mittels der mitgelieferten Befestigungsmaterialien, der kleine Mast ist in eine ausgebohrte Dachlatte eingesteckt und gegen Verdrehen mit Schrauben seitlich fixiert. Die Kabel sind einfach mit Kabelbindern an den Trägern befestigt. 

 
wh1080
Wetterstation WH1080

Noch ist hier der standardmäßige Regenmesser zu sehen. Die Messwerte erschienen mir aber nicht korrekt zu sein. Ich habe dann aus einer alten Kaffedose und einem handelsüblichen Trichter eine Erweiterung gebaut und die ganze Station erneut "kalibriert" und in absoluter Waage (die Befestigung am Haus hatte sich  leicht geneigt) neu aufgebaut.

 Trichter zur Erweiterung des Regenmessers

Haushaltstrichter und ausgediente Kaffedose als Erweiterung.
Mit einfachen Möbelwinkeln auf einem Brett fixiert.
Unter dem Regenmesser eine große Bohrung für das Wasser
aus dem Kipplöffel gebohrt.

 Wetterstation Regenmessererweiterung

So sieht das Ganze von oben aus.

 

Als nach relativ starken Regen keine Messwerte erkennbar waren stellte ich fest, daß der Sensor mit kleinem Laub "verstopft" war. Also mußte ich mir noch etwas einfallen lassen. Die Lösung besteht aus dünnem Aluminiumstreckgitter (Baumarkt) welches einfach um den Trichterrand "gebördelt" und mit einer einfachen Blechschere zugeschnitten wird.

Streckgitter auf dem TrichterRegenmesser3 Um den Tricherrand "gebördelt"Regenmesser2 Und mit ein wenig weißer Farbe dem Rest angepaßt.Regenmesser, weiss

Und schon wiedererstopft. Diesmal zeigte sich bei Starkregen wieder einmal nur geringer Niederschlag. Zunächst dachte ich, daß das Drahtgeflecht, welches ja nur Blätter fernhalten soll vielleicht durch die ebene Anbringung daran schuld sein könnte. Aber vermutlich wurde  beim großen Sylvesterfeuerwerk so viel Staub mit heruntergespült, daß die Öffnung des kleinen Trichters für die Kipplöffel verstopft wurde. Da war wirklich einiges an verklumptem Feinstaub herauszuholen. Aber bei der Gelegenheit habe ich den Trichter in der Form modifiziert, daß des Metallgewebe nach unten gewölbt nur noch "lose" Trichter liegt. Dann kann ich es bei Bedarf zum Reinigen leichter entnehmen. Das Ganze sieht nun so aus:

Regenmessertrichter, Sieb erneuert

Innen mit Aluminium-Klebeband ausgekleidet (Verwirbelung).

Regenmessertrichter, Sieb erneuert1

Lose eingelegtes Aluminiumgewebe.

Regenmessertrichter, Sieb erneuert3

Und so sieht das ganze dann jetzt im grauen Januar aus.

Wetterstation, Schnee

Auch wenn man bei Schnee nicht allzuviel sehen kann. Soll da noch eine Heizung eingebaut werden?

Nun hoffe ich, daß eine Verstopfung des inneren Trichters nur noch alle paar Monate eine Reinigung erforderlich macht. Die beim Abbau und der Reinigung entstandenen Schaltimpulse ergaben ein interessantes Ergebnis:

Regenrate bei der Reinigung

Zu dieser Uhrzeit war es absolut trocken. Eigentlich sollte man ja nun auch die Datenbankwerte manipulieren. Aber das hebe ich mir für später auf. 

Im Inneren steht der Empfänger mit Touch-Display, angeschlossen an einen Raspberry Pi (via USB). Die Daten werden im Intervall von 5 Minuten übertragen und in einer SQLite-Datenbank gespeichert. Um die begrenzte Speicherkapazität der SD-Ram zu erweitern, aber auch die durch die häufigen Schreibzugriffe zu erwartende Verkürzung der Lebensdauer der Karte zu verhindern sind 2 externe Festplatten (ebenfalls USB) mit Spiegelung angebracht. 

Wetterstation, Raspberry und externe Festplatten

Die mit der Software WEEWX gelieferten Daten werden nicht nur auf der Website des Raspberry dargestellt, sondern via Cron regelmäßig auf dieser Website gespeichert (www.commentum.de/SAMBUCUS/WEEWX).

Anmerkung: Mittlerweile arbeitet der Rechner nur mit einer Festplatte, die Sicherung der Daten erfolgt via Rsync auf einem anderen Raspberry.

Mit einem kleinen Script habe ich zunächst auf dem Raspberry geprüft, ob er denn für diese Aufgabe gerüstet ist. Ich habe dieses Script mal einfach "sysinfo.sh" genannt.

#!/bin/bash
VERSION="0.0.1"
# Mit diesem Script werden die verfügbaren
# Systeminformation eines Raspberry Pi ausgelesen
# und in ein Logfile  geschrieben

# Prüfe, ob Root es ausführt, sonst Beendigung.
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "$0 als ROOT ausführen!"
    exit
fi

# BC muß installiert sein, dahr diese Prüfung!
if [ ! -f /usr/bin/bc ]; then
    echo -e "ERROR: bc ist nicht installiert.\nVersuche doch einmal 'apt-get install bc' auf fast allen populären RaspberryPi Linux Distributionen."
    exit
fi
sysinfo="sysinfo.log"
sysmem=`/opt/vc/bin/vcgencmd get_mem arm  | sed 's/[A-Za-z]*//g' | cut -c 2-`
gpumem=`/opt/vc/bin/vcgencmd get_mem gpu  | sed 's/[A-Za-z]*//g' | cut -c 2-`
totalmem=`expr $sysmem + $gpumem`

# Model A sollte keinen 'smsc95xx' eingebaut haben! Return 1 wenn es Modell B ist.
modelB=`lsusb -t | grep -c smsc95xx`
rpiSerialNum=`grep Serial /proc/cpuinfo | cut -d " " -f 2`

rpiOverVolt=`grep Revision /proc/cpuinfo | cut -d " " -f 2 | tr -d [A-Z][a-z]`

echo "*** Systeminformation für Raspberry Pi $VERSION ***" >$sysinfo
if [ "$modelB" = "1" ]
then
  echo "Model B serial $rpiSerialNum entdeckt mit $totalmem MB ($sysmem Sys/$gpumem GPU)">>$sysinfo
else
  echo "Model A serial $rpiSerialNum entdeckt mit $totalmem MB installiert ($sysmem sys / $gpumem gpu split)">>$sysinfo
fi

fdiskOutput=`fdisk -l /dev/mmcblk0 | head -n 2 | tail -n 1 | cut -d \  -f 3,4`
echo "SD Kartenkapazität: ${fdiskOutput:0:-1}">>$sysinfo

# Check if overvolted and display warning.
if [ "$rpiOverVolt" -gt "1000" ]
then
  echo "Warnung: Übertaktung wurde mindestens 1 mal eingerichet!">>$sysinfo
else
  echo "Keine Übertaktung. ">> $sysinfo
fi

echo -n "Firmware Version: ">>$sysinfo
/opt/vc/bin/vcgencmd version | grep -v Broadcom
echo " ">>$sysinfo
tm=`/opt/vc/bin/vcgencmd measure_temp`
tc=`echo $tm| cut -d '=' -f2 | sed 's/..$//'>>$sysinfo`
tf=$(echo "scale=1; (1.8*$tc)+32">>$sysinfo | bc)
echo -e "temp:\t $tf'F ($tc'C)">>$sysinfo
echo " ">>$sysinfo
#echo -e "temp:\t $(/opt/vc/bin/vcgencmd measure_temp)" ;
for src in arm core v3d uart emmc pixel hdmi ; do echo -e "$src:\t $(/opt/vc/bin/vcgencmd measure_clock $src)">>$sysinfo ; done
echo " ">>$sysinfo
for id in core sdram_c sdram_p ; do echo -e "$id: $(/opt/vc/bin/vcgencmd measure_volts $id)">>$sysinfo ; done
echo " ">>$sysinfo
for codec in MPG2 WVC1 ; do echo -e "$codec:\t $(/opt/vc/bin/vcgencmd codec_enabled $codec)">>$sysinfo ; done

Das Ergebnis wird in der "sysinfo.log" wiedergegeben:

*** Systeminformation für Raspberry Pi 0.0.1 ***
Model B serial 0000000094913f85 entdeckt mit 512 MB (448 Sys/64 GPU)
SD Kartenkapazität: 14,8 GiB
Keine Übertaktung.
Firmware Version:
38.5
scale=1; (1.8*)+32
temp:    'F ('C)

arm:     frequency(45)=700074000
core:    frequency(1)=250000000
v3d:     frequency(43)=250000000
uart:    frequency(22)=47999000
emmc:    frequency(47)=250000000
pixel:   frequency(29)=148500000
hdmi:    frequency(9)=163682000

core: volt=1.2000V
sdram_c: volt=1.2000V
sdram_p: volt=1.2250V

MPG2:    MPG2=disabled
WVC1:    WVC1=disabled

Nun schauen wir uns noch Betriebssystem ("os.sh") und speichern die Angaben in einem Logfile("os.log").

#!/bin/bash
VERSION="0.0.1"
#Systeminformationen fur Linux-System auslesen
# Datei für die Ausgabe
osfile="os.log"
S="Name des Kernels: "
N="Netzwerkname der Maschine: "
R="Kernelrelaese: "
V="Kernelversion"
M="Maschinentyp (Hardware): "
P="Prozessor: "
I="Harwareplattform: "
O="Betriebssystem: "

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "$0 not running as root!"
    exit
fi
echo $S > $osfile
uname -s >> $osfile
echo $N >> $osfile
uname -n >> $osfile
echo $R >> $osfile
uname -r >> $osfile
echo $V >> $osfile
uname -v >> $osfile
echo $M >> $osfile
uname -m >> $osfile
echo $P >> $osfile
uname -p >> $osfile
echo $I >> $osfile
uname -i >> $osfile
echo $O >> $osfile
uname -o >> $osfile

Als Ergebnis erhalten wir folgende Ausgabe:

Name des Kernels:
Linux
Netzwerkname der Maschine:
LITORIA
Kernelrelaese:
4.9.35+
Kernelversion
#1014 Fri Jun 30 14:34:49 BST 2017
Maschinentyp (Hardware):
armv6l
Prozessor:
unknown
Harwareplattform:
unknown
Betriebssystem:
GNU/Linux

Der Rasperry scheint also durchaus für größere Aufgaben geeignet zu sein. Also starten wir die Installation von WEEWX.

Nachdem die Wetterstation via USB mit dem Raspberry verbunden wurde schauen wir einmal nach ob sie auch erkannt wurde.

lsusb

 Okay, die Wetterstation wurde erkannt. Nun werden mit Python die Software installieren. Prüfen wir erst ob Python installiert ist:

which python

 Zunächst bringen wir as System auf einen aktuellen Stand:

 sudo apt-get update

apt get update

 Der Python-Setup benötigt aber noch ein paar Pakete mehr. Diese installieren wir mit apt-get.

sudo apt-get install python-configobj

sudo apt-get install python-cheetah

sudo apt-get install python-imaging

 python configobj python cheetah python imaging

  Wenn das erledigt ist, dann installieren wir noch die Python-Erweiterung für USB: 

apt get install puython usb

  So, damit sind die Vorbereitung zur Installation abgeschlossen. Nun laden wir noch bei  

 http://weewx.com/downloads/ das aktuelle Installationspaket herunter und speichern es in das Installationsverzeichnis (beliebig). Ich habe hierzu ein Verzeichnis "Share"  angelegt. Nun wird das Paket entpackt:

tar-xvfz weewx-3.7.1.tar.gz

 tar weewx

  Nach dem Entpacken wechseln wir in das vom Paket angelegte Verzeichnis weewx.3.7.1

 tar weewx1

und starten die Installation mit dem Aufbau der Konfiguration: 

  • ./setup.py build

setup py build

Nun beginnt die Installation als "root" mit

  • sudo ./setup.py install

 setup py install

sudo ./bin/weewxd weewx.conf

Wir starten auf Kommandozeilenebene mit der Standardkonfiguration:

 weewx conf

 Nun werden die Parameter für die Station abgefragt und eingegeben:

 weewxparameter

Nachdem wir den Namen  der Wetterstation,  die Höhe über dem Meeresspiegel (altitude), die geographische Breite (Breitengrad, latitude) undgeographische Länge (Längengrad, longitude) und die Anzeigeeinheit (metrisch) eingegeben haben können wir nach einer kurzen Zeit die ersten Werte erkennen. Dazu einfach mit 

  • tail -f /var/log/syslog

den Systemlog auslesen:

 weewxsyslog

Hier wird noch die Standarddatenbank sqlite (SDB) mit Daten versorgt. Ein Wechsel auf Mysql ist allerdings auch möglich. Aber das kommt auch auf die Raspbian-Version an. Stretch ist da etwas zickig. Vielleicht kommt aber noch eine andere Lösung in Betracht, z.B. Export/Import sqlite/mysql mit einem Script.

Anmerkung: Am 10.03.2019 kam es nach dem Sturmtief "Eberhard" mit einem heftigen Gewitter zu massiven Ausfällen der Funkverbindung. Daher fehlen in diesem Zeitraum einige Daten.

Im Juli 2019 setzte die Funkverbindung öfters aus. Ein ersichtlicher Grund war nicht zu erkennen. Stromversorung bei Sender und Empfänger sind im normalen Bereich. Die Anlage wird doch nicht schon ausfallen?

Auch die Kamera hat einiges mitbekommen und mußte getrocknet und wieder "zum Leben" erweckt werden.

 Und hier kann man das Wetter beobachten: LITORIA

Zurück zur Startseite

 

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok Ablehnen