Script zum Auslesen der Sensordaten meiner Ventus W831 Wetterstation mit Rasberry Pi


Display W831 Raspberry Pi
im Tek-Berry Gehäuse

Einsatz:

Einbindung einer Ventus W831 Wetterstation in IP-Symcon. Die Wetterstation Ventus W831 ist ein Clone/ReBrand einer Hideki Wetterstation. Weitere bekannte Modelle sind z.B. TFA Nexus,Mebus TE923,IROX Pro X und ggfls. weitere.

Die Wetterstation (ca.99Eur) habe ich bereits auf meiner Wetterseite beschrieben. Sie besitzt ein grosses LCD-Display mit Innen- und Luftdrucksensor. Mitgeliefert werden außerdem batteriebetriebene Aussensensoren für Wind, Regen und ein Temperatur/Feuchte-Sensor (max 5 möglich, ca. 15-20Eur). Der bei manchen Modellen verfügbare UV-Strahlungssensor ist nicht vorhanden.
Das Problem bei dieser Wetterstation ist, dass sie zu weit Weg von meinem Server steht. Zwar kann mein Ezcontrol XS1 die Sensoren empfangen, aber er kann nicht auf die Daten des internen Sensors der Station zugreifen und macht zudem öfters Probleme beim Abholen der Daten Die mitgelieferte Software ist nicht für IPSymcon nutzbar und das USB-Protokoll wurde nicht veröffentlicht.

Meine Lösung nutzt den sehr preisgünstigen Minicomputer Raspberry Pi als Webserver und dem darauf laufenden Ausleseprogramm te923con als Datenlieferant für ein CGI. IPsymcon kann sich die Daten dann bequem über HTTP abholen.

Der Raspberry Pi Model B ist ein mit ca. 30-50Eur extrem günstiger Minicomputer im Checkkartenformat, welcher mit einem 700MHz ARMv6,512MB Ram, 100MBit Netzwerk, 2USB2.0Ports, frei konfigurierbaren IO-Pins sowie HDMI und Composite Vidioausgang ausgestattet ist. Er wird mit einem speziellen Debian Linux für ARM-Prozessoren betrieben. Mittels günstiger USB-Wlanadapter kann man ihn nach der Ersteinrichtung auch ohne Netzwerkkabel betreiben.

Sourcecode: (V0.3 31.12.2012)

Funktion:

Zur Verarbeitung in IPS wird über ein zyklisches Event durch ein CGI das Programm te923con auf dem Raspberry aufgerufen, welches die Daten der über USB angeschlossenen Wetterstation ausliest und als String via http IPS bereitstellt. Anschliessend wird der String in IPS auf die einzelnen Sensoren aufgesplittet und in selbstständig angelegte Variablen eingetragen. Für bestimmte Felder werden noch Konvertierungen durchgeführt, um über Variablenprofile eine optimale Darstellung zu erreichen. Von der Wetterstation als "Inaktiv" gekennzeichnete Sensoren werden nicht angelegt.

Dynamisch erzeugte Variablen
Dynamisch erzeugte Variablen


Einrichtung Raspberry Pi
Checkliste:

zusätzlich: Jetzt kann mit der Installation begonnen werden. Zunächst ist das Betriebssystem gemäß der Dokumentation zu installieren. Norwalerweise nutzt man dazu NOOBS oder ein fertiges Betriebssystemimage von Rasbian

Software auf Raspberry konfigurieren

Das te923tool muss erst noch aus den Sourcen erstellt werden . Als user root im Homeverzeichnis (copy/paste in Putty, die te923tool version 0.6.1 ggfls anpassen)
#Installierte Packete mit neuen Versionen Online aktualisieren
aptitude update
aptitude upgrade

#installation Webserver, C-Compiler und libusb Bibliotheken
aptitude install gcc make apache2 libusb-dev

#te923tool holen und kompilieren
wget http://te923.fukz.org/downloads/te923tool-0.6.1.tgz 
tar -xvzf te923tool-0.6.1.tgz
cd te923tool-0.6.1/
make all 

#testen
ls -l te923con
#nach /usr/bin kopieren
cp te923con /usr/bin/
	
Jetzt müssen noch udev-rules für das USB-Gerät angelegt werden:
	vi /etc/udev/rules.d/99-te923.rules
Inhalt:
ATTRS{idVendor}=="1130", ATTRS{idProduct}=="6801", MODE="0660", GROUP="plugdev", RUN="/bin/sh -c 'echo -n $id:1.0 > /sys/bus/usb/drivers/usbhid/unbind'"
mit :x abspeichern!
 udevadm control --reload-rules
Jetzt kann die Wetterstation an den Raspberry angeschlossen werden.
Jetzt brauchen wir noch das CGI, was ein simples Shellscript ist
vi /usr/lib/cgi-bin/get_data.cgi
Nachfolgenden Inhalt reinkopieren
#!/bin/bash
TE923=/usr/bin/te923con
#header content type end empty line
echo "Content-type: text/plain"
echo
#end header

#parameter
PARAM="$QUERY_STRING" #oder $1
#run
if [ -x $TE923 ]; then
#binary must be placed into same dir
#this runs only if apache user www-data is member of group plugdev
#and udev rule is added
  case "$PARAM" in
        data) $TE923 -i 'i';;
        status)  $TE923 -s -i 'i';;
        debug)  $TE923 -D -i 'i';;
        version)  $TE923 -v;;
  esac
fi
Wieder mit :x abspeichern ausführbar machen und testen
chmod a+x vi /usr/lib/cgi-bin/get_data.cgi
export QUERY_STRING=data
/usr/lib/cgi-bin/get_data.cgi
Output:
/usr/lib/cgi-bin/get_data.cgi
Content-type: text/plain

1356296694:23.00:45:9.50:89:10.50:84:i:i:i:i:i:i:1006.9:i:4:0:8:0.7:0.7:7.9:389

Abschliessend muss der Webserver-User noch angepasst werden. Der te923con aufrufender User muss in der Gruppe "plugdev" sein:
adduser www-data plugdev 
invoke-rc.d apache2 stop
invoke-rc.d apache2 start
Wenn alles klappt kann man von seinem PC im Browser die Wetterstations-Daten manuell abholen:
http://<ip_des_raspberry>/cgi-bin/get_data.cgi?data

IPS-Konfiguration:

Es ist ein neues Script mit dem Inhalt von te923_reader.phps zu erstellen. Der Wert von $host ist entsprechend dem Aufruf des eigenen Rasperry zu ändern
$host = 'http://raspbi1/';

Dem Script ist ein neuer zyklischer Event mit der gewünschten Aktualisierungsrate zuzuweisen. dafür im Script-Window auf "Ereignis hinzufügen" klicken und den Screens folgen. Wenn alles richtig war, kann man unter "Ereignisse" das eben erstellte Event sehen.
IPS Event
IPS Event erstellen

IPS-Instanzen
IPS-Instancen

Die Status-Variablen werden automatisch erzeugt und müssen nicht manuell erstellt werden.

Spezielle Konfiguration

Kategorie- und Variablen Erzeugung: Die Automatische Erstellung von Variablen kann man abstellen, wenn $autocreate=false; setzt.
$catname ist der Name der Kategorie unterhalb von IP-Symcon. Der Name wird auch als Parent für die Suche nach den Variablen via Ident genutzt.

$autocreate=true;
$catname='TE923';

Die Namen der Variablen dürfen nicht geändert werden.
Sensoren mit Wert 'i' vom te923con (für Inactive) werden nicht angelegt.

Modifikation der Sensordaten

Tipp: Wenn für einen Sensor an der Station keine Daten mehr anzeigt, kann man häufig durch längers (ca.5s) drücken der PfeilDown-Taste einen neuen Sensor-Suchlauf anstossen. Wenn die Baterien noch OK sind, wird der Sensor dann wieder korrekt empfangen. Bis zur Übertragung eines Wertes durch te923con kann es dann nocheinmal ca. 10-15min dauern.

Referenzen



Index
Disclaimer

© 2012-2014 Thomas Dreßler
Alle Rechte vorbehalten
letzte Änderung 11.10.2014