// Weather.chrisge.org – Die Software II/III: OWFS

Nachdem ich das Projekt Weather.chrisge.org bereits in Grundzügen erläutert habe und die verwendete Hardware ebenfalls vorgestellt habe, werde ich in diesem Beitrag auf die Softwarekonfiguration eingehen. Da der gesamte Entwicklungsprozess mehrere Monate in Anspruch nahm, werde ich nur auf die wichtigsten Dinge eingehen. Zu einem späteren Zeitpunkt werde ich gegebenenfalls eine Dokumentation im mein.homelinux.com Wiki erstellt. Falls Fragen auftauchen sollten: melden!

Dieser Beitrag ist Teil der Serie Weather.chrisge.org:

Dieser Post ist bezüglich OWFS Verwendung (nicht Installation) nur für die in den obigen Beiträgen vorgestellte 1-Wire Hardware gültig, kann aber problemlos auf andere übertragen werden. Kompatible Betriebssysteme sollten Debian-basierende Linux-Distributionen (z.B. Ubuntu) sein. Ich habe sie bis jetzt aber nur mit Debian Squeeze getestet.

1-Wire: OWFS

Um die Werte der Sensoren auszulesen verwende ich, wie bereits erwähnt OWFS. Da OWFS nicht in den Paketquellen vorhanden ist, muss es manuell kompilieren werden. Dazu findet sich hier eine detaillierte Anleitung.

Vorbereitungen

Zuerst müssen diverse Kernelmodule deaktiviert werden:

$ sudo modprobe -r ds9490r
$ sudo modprobe -r ds2490
$ sudo modprobe -r wire

…und anschließend in die /etc/modprobe.d/blacklist eingetragen werden:

# OWFS via libusb
blacklist ds9490r
blacklist ds2490
blacklist wire

Nun werden die für das Kompilieren benötigten Pakete installiert:

$ sudo apt-get install build-essential automake autoconf autotools-dev gcc g++ libtool fuse-utils libfuse-dev swig python2.5-dev tcl8.4-dev php5-dev

Kompilieren

libusb

Hier ist es wichtig darauf zu achten, dass man libusb-0.1 (LEGACY) verwendet und in jenem Unterverzeichnis die aktuellst Version bezieht. Zur Zeit dieses Posts wäre dies diese URL:

http://sourceforge.net/projects/libusb/files/libusb-0.1%20%28LEGACY%29/0.1.12/libusb-0.1.12.tar.gz/download

libusb lade ich mit wget wie folgt herunter (wer lieber seinen Browser verwendet, kann gerne jenen verwenden und die Datei nachher an den richtigen Ort verschieben):

$ wget http://sourceforge.net/projects/libusb/files/libusb-0.1%20%28LEGACY%29/0.1.12/libusb-0.1.12.tar.gz/download -O libusb.tar.gz
$ tar xvzf libusb.tar.gz
$ cd libusb-0.1.12/

Nun kompilieren wir libusb:

libusb-0.1.12$ make
libusb-0.1.12$ sudo make install

Folgender Befehl (hier hat die verlinkte Anleitung einen Fehler):

$ libusb-config --version

…sollte 0.1.12 ausgeben.

OWFS

Zuerst besorgt man sich die aktuellste Version von OWFS auf sourceforge.net. In diesem Fall (Stand: Apr. 2012) lautet die URL wie folgt:

http://sourceforge.net/projects/owfs/files/latest/download?source=files

OWFS wird nun wie folgt heruntergeladen (Browser: siehe libusb:

$ wget http://sourceforge.net/projects/owfs/files/latest/download?source=files -O owfs.tar.gz

Nun entpacken wir das Paket:

$ tar xvzf owfs.tar.gz
$ cd owfs-2.8p14/

…anschließend kann der Build beginnen:

owfs-2.8p14$ ./configure --enable-debian
owfs-2.8p14$ make
owfs-2.8p14$ sudo make install

Erster Start

Wer OWFS ohne root-Rechte verwenden will, muss wie in der verlinkten Anleitung beschrieben noch etwas Hand an udev anlegen. Wer auf Nummer sicher gehen will, sollte diesen zusätzlichen Schritt durchführen. Dann könnte OWFS sowie OWSERVER ohne root-Rechte gestartet werden.

Ansonsten kann der 1-Wire Adapter (in meinem Fall der LinkUSB) mit dem fertigen 1-Wire Netz an den Rechner gehängt werden. Da jener Adapter über einen Seriellen Converter verfügt, müssten die benötigten Kernel Module normalerweise automatisch nachgeladen werden. Dies kann anhand der Ausgabe von dmesg | grep usb oder dem Syslog überprüft werden. Dort sollte folgende Meldung erscheinen:

[ 5996.029323] usb 1-1.2.4: new full speed USB device using orion-ehci and address 83
[ 5996.166193] usb 1-1.2.4: New USB device found, idVendor=0403, idProduct=6001
[ 5996.173435] usb 1-1.2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5996.181097] usb 1-1.2.4: Product: FT232R USB UART
[ 5996.185945] usb 1-1.2.4: Manufacturer: FTDI
[ 5996.190237] usb 1-1.2.4: SerialNumber: A900fxuD
[ 5996.205792] usb 1-1.2.4: configuration #1 chosen from 1 choice
[ 5996.227183] usb 1-1.2.4: Detected FT232RL
[ 5996.231342] usb 1-1.2.4: Number of endpoints 2
[ 5996.235939] usb 1-1.2.4: Endpoint 1 MaxPacketSize 64
[ 5996.241057] usb 1-1.2.4: Endpoint 2 MaxPacketSize 64
[ 5996.246139] usb 1-1.2.4: Setting MaxPacketSize 64
[ 5996.252885] usb 1-1.2.4: FTDI USB Serial Device converter now attached to ttyUSB0

Sollte dies nicht der Fall sein, kann die Installation des Paketes libftdi1 helfen.
Aus der letzten Zeile geht hervor, dass der Adapter über /dev/ttyUSB0 angesprochen werden kann. OWFS (genauer gesagt OWSERVER) wird nun so gestartet:

$ sudo /opt/owfs/bin/owserver -p 4304 -d /dev/ttyUSB0 -t 30 --link --error_level 9

Aus einem mir bis jetzt unbekannten Grund, ist der Bus direkt nach dem Start nicht benutzbar. Ich warte normalerweise 5-10 Minuten und starte erst dann OWFS und binde damit den Bus als „Dateisystem“ ein:

$ sudo mkdir /media/owfs    #Anlegen des Mountpoints
$ sudo /opt/owfs/bin/owfs -s localhost:4304 --allow_other /media/owfs

Sollte das mit einer Fehlermeldung enden, dass kein 1-Wire Bus gefunden werden konnte, wartet man am besten einfach noch mal ein paar Minuten. Diese Unberechenbarkeit ist der Grund, dass ich kein Startskript einsetze, sondern OWFS immer per Hand starte. Das Problem liegt wahrscheinlich an der verwendeten Hardwarekonfiguration (Dockstar, USB-Hub und LinUSB) - mit einer anderen, könnte es ohne Probleme funktionieren.

Zusätzlich starte ich noch OWHTTPD:

$ /opt/owfs/bin/owhttpd -p 4305 -s localhost:4304

….und rufe nun die URL

http://host:4305

auf, die ein Listing des Buses anzeigt. Hier kann ich auch die Werte der Sensoren auslesen.

Werte auslesen

In obigem Beispiel wurde der Bus in /media/owfs gemountet. Folgendes befindet sich nun in dem Verzeichnis:

$ ls /media/owfs/
26.E67023010000  28.4F523C020000  28.75798C020000  alarm  bus.0  settings  simultaneous  statistics  structure  system  uncached

Die ZAHL.BLABLA benannten Verzeichnisse sind die IDs der Sensoren, in dem Verzeichnis befinden sich dann die Werte:

$ ls /media/owfs/26.E67023010000/
address  B1-R1-A  crc8  disconnect  endcharge  HIH3600  HTM1735   IAD  locator      offset  r_address  r_locator  temperature  udate  VDD
alias    CA       date  EE          family     HIH4000  humidity  id   MultiSensor  pages   r_id       S3-R1-A    type         VAD    vis

Der obige Sensor ist ein MS-TH, d.h. er verfügt über Temperatur und Luftfeuchtigkeit:

$ cat /media/owfs/26.E67023010000/humidity ; echo
     41.4725
$ cat /media/owfs/26.E67023010000/temperature ; echo
      7.5625

So kann man mit cat ganz einfach die Werte auslesen. Die Verwendung in Skripten ist somit wirklich einfach.

Comments

No. 1 @ 2012/04/10 21:16

[…] OWFS […]

Hannes
No. 2 @ 2012/09/04 10:44

Nur ein Schönheitsfehler: das heisst nicht komplimieren - sondern kompilieren ;)

Mal abgesehen von meinem Besserwissergehabe: Ein wunderbares Projekt… ich bin drauf und dran mir auch eine kleine Wetterstation zu bauen!!!

Danke!

No. 3 @ 2012/09/04 16:46

@Hannes: Dass mir der Fehler immer wieder passiert – ist ausgebessert ;-)

Kleiner Tipp: Wenn du ebenfalls 1-Wire verwenden willst und einen Raspberry Pi oder Arduino hast, könntest du z.B. als Temperatursensor den DS18B20 (um die 2€) direkt an den Raspberry Pi/Arduino hängen (GND, V+, Daten und dann noch einen Buswiderstand von 4,7kOhm).
Das würde das Projekt dann wesentlich preiswerter machen ;-)

Comments are closed

Hello World!

This is the personal website of Christoph Winkler.
Here you will find a sort of blog and some information about me and my projectshave fun!

Recent Comments
QR-Code: aktuelle Seiten-URL
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 3.0 Unported