Schon lange suchte ich nach einer Möglichkeit, die Außentemperatur auf dem Heimserver mitzuloggen. Möglichkeiten gibt es ja genug, nur die Bezahlbarkeit war für ein Heimprojekt nie gegeben.
Letztens fand ich allerdings bei ELV den USB-WDE1 für relativ günstige 30€, der die Temperatur- und Luftfeuchtedaten von Temperatursensoren (S300TH) für je 15€ empfangen kann.
Der Empfänger wird per USB an den Rechner angeschlossen und sendet seine empfangenen Daten live an den PC, ohne Zwischenspeicherung auf einer SD-Karte oder anderen Flashspeicher. Das Datenformat ist das von den LogView-Entwicklern spezifizierte Openlog - eine nach Hörensagen für ELV-Verhältnisse absolute Ausnahme, weil die die Datenformate und -protokolle für ihren anderen Eigenentwicklungen sonst nie offenlegen.
ELV bietet weiterhin auf ihrer Website einen Linuxtreiber ("silabs_virtcom_driver") an, so daß der Einbindung in meinen Heimserver eigentlich nichts entgegenstand. Da die Sterne günstig zu stehen schienen, bestellte ich also gleich den Empfänger und 7 Temperatursensoren.
Kommunikation unter Linux
Nachdem das Paket angekommen war, lud ich mir den bereitgestellten Linuxtreiber herunter und schaute mir die Sourcen an. Wie sich herausstellte, ist der separate "Linuxtreiber" einfach nur der im Linux-Kernel standardmäßig enthaltene cp210x, der zusammen mit usbserial einen seriellen Port unter /dev/ttyUSB* bereitstellt. Auf meinem Laptop (Ubuntu 10.10) und meinem Homeserver (Debian 5.2) wurden die Treiber automatisch geladen und das Device automatisch angelegt, sobald ich den Empfänger ansteckte:
[39955.660141] usb 3-1: new full speed USB device using uhci_hcd and address 2 [39955.980450] usbcore: registered new interface driver usbserial [39955.980471] USB Serial support registered for generic [39955.980534] usbcore: registered new interface driver usbserial_generic [39955.980537] usbserial: USB Serial Driver core [39955.992145] USB Serial support registered for cp210x [39955.992184] cp210x 3-1:1.0: cp210x converter detected [39956.100104] usb 3-1: reset full speed USB device using uhci_hcd and address 2 [39956.254325] usb 3-1: cp210x converter now attached to ttyUSB0 [39956.254359] usbcore: registered new interface driver cp210x [39956.254364] cp210x: v0.09:Silicon Labs CP210x RS232 serial adaptor driver
Was das Handbuch zum Empfänger allerdings verschweigt, ist wie genau man jetzt an die Daten rankommt. Anfangs versuchte ich, an die Daten mittels minicom und moserial heranzukommen, allerdings funktionierte das nicht wirklich.
Mit moserial konnte ich bei der "no handshake"-Einstellung wenigstens partiell mit dem Empfänger kommunizieren, aber nicht wirklich erfolgreich:
? ELV USB-WDE1 v1.1 WRONG VAL WRONG CMD WRONG CMD ... FullBuff->Reset
In meiner Not schrieb ich ich Martin Kompf eine Mail mit der Bitte mir doch mal zu sagen, wie er an die Daten herankommt. Die Antwort war sehr simpel:
$ socat /dev/ttyUSB0,b9600 STDOUT $1;1;;;;22,6;;;;;;;;38;;;;;;;;;;;0 $1;1;;;;22,6;;22,1;;;;;;38;;38;;;;;;;;;0 $1;1;;;22,7;22,6;;22,1;;;;;35;38;;38;;;;;;;;;0 $1;1;;;22,7;22,6;17,8;22,1;;;;;35;38;49;38;;;;;;;;;0 $1;1;;13,8;22,7;22,6;17,8;22,1;;;;59;35;38;49;38;;;;;;;;;0 $1;1;;13,8;22,7;22,6;17,8;22,1;21,2;;;59;35;38;49;38;40;;;;;;;;0 $1;1;;13,8;22,7;22,6;17,8;22,1;21,2;22,9;;59;35;38;49;38;40;35;;;;;;;0 $1;1;;13,8;22,7;22,6;17,8;22,1;21,2;22,9;;59;35;38;49;38;40;35;;;;;;;0
Wie man hier schön sieht, kommt für jedes neue empfangene Datum eine neue Zeile vom Empfänger, in dem die vorher empfangen Daten der anderen Sensoren noch mitgeliefert werden. Dies hat den großen Vorteil, daß man die Daten der einzelnen Sensoren nicht manuell aggregieren muß, sondern den aktuellen Zustand der Sensoren komplett geliefert bekommt.
Auf einigen Systemen gibt es allerdings Probleme: nach ein oder zwei korrekten Datenzeilen kommen die oben beschriebenen Fehler WRONG .... Um dies zu beheben muß einmalig folgendes ausgeführt werden:
$ stty < /dev/ttyUSB0 9600 -brkint -opost -onlcr -echo
Danke an Rene Ejury für diesen Hinweis.
Grafische Auswertung
Die Daten hatte ich nun, aber manuell eine semikolongetrennte Zeile parsen ist nichts, was man im Normalbetrieb machen möchte. Außerdem fehlt bei der Konsolenausgabe der historische Vergleich - kurz, ich musste die Daten mitloggen und eine grafische Auswertung erstellen.
Da ich Munin ja eh mag, war die Integration dahinein auch die erste Idee.
Am letzten Wochenende bin ich dann auch endlich mal dazu gekommen, ein Munin-Plugin zu schreiben und auf dem Server einzubinden:
Der funktionierende Shellscriptcode ist unter git.cweiske.de zu finden und darf gern geforkt werden. Die Tools haben jetzt auch eine Homepage auf cweiske.de.
Probleme
Was man auf den Graphen auch sieht, sind die Aussetzer z.B. bei der Außentemperatur wenn die Tür vom Serverraum geschlossen wird. Dabei ist der Abstand von Außensensor zu USB-Empfänger nur ca. 4m mit einem Fenster - und der Serverraumtür - dazwischen. Der Empfänger ist also wirklich das Drecksding, wie es in Foren beschrieben wird:
Der Empfänger ist sehr schwach ausgelegt, selbst ein Sensor in 4 Meter Entfernung, hinter einer Mauerecke wurde nicht mehr erkannt. Ich habe den eingebauten Empfänger durch das Superhet-Empfangsmodul RX868SH-C3 ersetzt, seit dem werden alle Sensoren problemlos empfangen.
So wie es aussieht werde ich dasselbe tun müssen, um ein akzeptables Empfangsverhalten zu bekommen.
Hersteller
Laut Konformitätserklärung ist der Hersteller des Empfängers und der Temperatursensoren die eQ-3 Entwicklung GmbH aus Leer, und der Herr Lothar Schäfer als Entwicklungsleiter hat unterschrieben.
Links
- USB-WDE1 Auswertungsvarianten, u.a. LCD, Sprachausgabe und Videooverlay
- Bilder vom USB-WDE1, der WS300PC und IPWE1
- WS300 PC unter Linux
- Mikrocontroller und Temperaturerfassung - Temperaturauswertung mit der Volkszähler-Software
- Volkszähler.org - Smart Meter im Eigenbau