1-Wire, der Ein-Draht-Bus, ist eine handliche Eigenbaulösung für viele Szenarien, zum Beispiel die Temperaturmessung im Serverraum. Die Open-Source-Programme Digitemp, Owfs und W1retap helfen aber auch Aquariumbesitzern, Klimaforschern oder Hobbyönologen .
Fahrlässig agiert, wer im Serverraum nur die Temperatur von CPUs, Festplatten oder anderen Mainboard-Komponenten überwacht. Es ist wichtig, auch die Lufttemperatur konstant zu halten und für eine gleichmäßige Kühlung zu sorgen. Der Admin muss Zonen mit zu viel Abwärme vermeiden und sollte erfahren, wenn die Klimaanlage ausfällt und die Raumtemperatur plötzlich ansteigt. Dann ist schnelles Handeln angesagt, um eine Überhitzung des Serverraums und somit einen Ausfall der Rechner zu vermeiden. Mit Temperatursensoren an einem 1-Wire-Bus lässt sich solch eine Überwachung günstig, einfach und doch flexibel realisieren.
Zwei Drähte
Der Ein-Draht-Bus (Synonyme sind 1W-Bus, W1-Bus oder One-wire Bus) ist ein serieller, bidirektionaler und asynchroner Bus ([1], [2]). 1-Wire ist ein eingetragenes Markenzeichen von Maxim Inte- grated Products, ehemals Dallas Semiconductor. Die Bezeichnung “Ein Draht” ist etwas irreführend, da der Bus immer mindestens zwei Adern hat.
Allerdings dient davon nur eine als Da- tenleitung. Der 1-Wire-Bus ist dennoch keine Einbahnstraße, sondern lässt sich bidirektional einsetzen, der Admin kann auch Geräte über den Bus steuern. Die theoretische Gesamtlänge des Busses liegt bei etwa 750 Metern, in der Praxis jedoch eher unter 300 bis 500 Meter. Die maximale Länge hängt in der Realität von Faktoren wie der Anzahl der Sensoren, der Kapazität der Leitung und dem ver- wendetem Busmaster ab ([3], [4]).
Topologien
Für kleinere Netze bis 100 Meter lässt sich neben der seriellen Verkabelung auch eine baumförmige oder sternför- mige Verkabelung ohne extra Hardware wählen. Mit speziellen 1-Wire-Hubs ist es möglich, ein großes sternförmiges Netz aufzubauen. Für die Verdrahtung größerer Netze dienen CAT-5-Kabel, bei kleineren reicht bereits verdrillter Klingeldraht.
Den 1-Wire-Bus kann der Admin sowohl mit Adaptern für die RS232- als auch für die USB-Schnittstelle ansprechen ([5], [6]). RS232-Schnittstellen kommen in neueren Rechnern aber immer seltener vor, verbreiteter sind daher Adapter wie der USB-DS9490R [7], den auch alle drei hier im Weiteren vorgestellten Programme direkt unterstüzten. Wichtig ist dabei, dass die Linux-1-Wire-Kernelmodule nicht geladen sind (siehe Kasten “USB-Sensoren”). Bei der Auswahl des Adapters sollte der Interessierte unbe- dingt drauf achten, dass er ein mit einem passenden sechspoligen RJ12-Stecker (Abbildung 1) versehenes Anschlusskabel gleich mit erwirbt.
|
USB-Sensoren |
|---|
|
Für alle drei vorgestellten Programme gilt: Die Kernelmodule »ds9490r« und »ds2490« dürfen nicht geladen sein, wenn die Software den Adapter ansprechen will. Ist das doch der Fall, dann muss der Admin sie erst entfernen, weil sonst die Module die exklusiven Zugriffsrechte für den USB-Adapter für sich beanspruchen und die Programme nicht mehr via USB-Programmbibliothek auf den Adapter zugreifen können. Zur Überprüfung führt Root folgendes Kommando aus: »/sbin/lsmod | grep ds9490r« beziehungsweise »/sbin/lsmod | grep ds2490«. Mit »modprobe -r ds9490r« oder »modprobe -r ds2490« entfernt er die Module. Ob das System den Adapter am USB-Bus erkannt hat, zeigt »lsusb -d 04fa:2490« (oder »cat /proc/bus/usb/devices | grep “Vendor=04fa ProdID=2490″«). Wenn alles korrekt ist, sieht die Antwort ungefähr so aus: »Bus 1 Device 2: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter«. |

Abbildung 1: Schon beim Kauf zu beachten: Ohne passenden RJ12-Stecker hilft meist nur der Griff in die Werkzeugkiste und zum Lötkolben. Die Abbildung zeigt die Pinbelegung des 1-Wire-Bus-USB-Adapters DS9490R.
Feinfühlig
Für den 1-Wire-Bus gibt es eine große Anzahl verschiedener Sensoren und Geräte [8], die sich nicht auf Temperaturmessung beschränken, zum Beispiel Sen- soren zum Messen des Luftdrucks, der Luftfeuchtigkeit, der Bodenfeuchtigkeit, der Windgeschwindigkeit, des gefallenen Regens, zum Ermitteln der Schneedicke [9] oder zur Gewitteraufzeichnung [10]. Alle Sensoren haben eine eindeutige Identifikationsnummer, die beim Abruf der Messwerte mit übermittelt wird und somit eine Zuordnung von Messfühler und -wert ermöglicht.
Den im folgenden besprochenen Temperatursensor DS18S20 bezieht man über Ebay-Händler (Tabelle 1) zu Stückpreisen von etwa 1,40 Euro oder bei großen Elektronikhändlern wie Conrad oder Reichelt für 3 bis 5 Euro. Der Temperatursensor DS18S20 [11] misst Temperaturen zwischen -55 und +125 Grad Celsius, und zwar mit einer Genauigkeit von 0,5 Grad im Wertebereich von -10 bis +85 Grad Celsius.
Auf Wunsch ein Parasit
Das Bauteil hat insgesamt drei Anschlüsse, und deren Belegung entscheidet über den Betriebsmodus (siehe Abbildung 2): Explizite Stromversorgung von 3 bis 5,5 Volt an VCC (drei Drähte) oder parasitärer Modus mit Masse an VCC (zwei Drähte). Letzteres bedeutet, dass die Datenleitung gleichzeitig für die Stromzufuhr des Bauteils dient. Ein Pullup-Widerstand versorgt die Datenleitung mit Spannung und ist in dem USB-Adapter eingebaut.

Abbildung 2: Die Betriebsmodi eines 1-Wire-Busses mit Temperatursensoren sowie Pinbelegung des Temperatursensors DS18S20.
Im parasitären Modus gibt es Probleme mit dem Auslesen von Werten über +85 Grad Celsius, weil bei einem Auslesevorgang der Sensor intern vom Datenbus getrennt ist und seinen Strom aus einem internen Kondensator bezieht. Der kann aber nur die Zeit zum Abtasten kleinerer Werte problemlos überbrücken. Wer das gesamte Spektrum des Temperatursensors nutzen will, benötigt drei Kabel. Manche Bauanleitungen schließen VCC gar nicht an und lassen es undefiniert. Das ist nicht zu empfehlen, da Owfs in der Version 2.7 damit Probleme hat und dann immer die Temperatur von +85 Grad als Antwort liefert.
Ist die Hardware anschlussfertig, geht es ans Einrichten der Software. Derzeit existieren drei ausgereifte Softwarepakete, die Temperatursensoren an einem 1-Wire-Bus auslesen. Weil jede der Softwarevarianten den Adapter exklusiv belegen will, empfehlen sich Root-Rechte, um Fehlerquellen auszuschließen.
Digitemp
Die Software von Brian C. Lane [12] ist das am häufigsten genutzte Programm, wenn es um reine Temperaturmessung mit Linux geht. Es lässt sich einfach übersetzen und installieren, beschränkt sich auf das Wesentliche und hat keine Abhängigkeiten von anderer Software. Neben dem USB- und RS232-Adapter unterstützt es auch einfache Selbstbau- Adapter, die den seriellen 1-Wire-Bus an eine serielle RS232-Schnittstelle adaptieren, indem sie das spezielle Timing des 1-Wire-Busses abbilden. Diese finden häufig aufgrund ihrer geringen Kosten im Hobby-Bereich Einsatz und es gibt außerdem eine Vielzahl von Webseiten mit ähnlichen Aufbauten.
Inzwischen unterstützt Digitemp auch noch Sensoren für die Luftfeuchtigkeit und mehr (Tabelle 2). Eine genaue Be- schreibung der vielen einzelnen Kompo- nenten findet sich unter [8] oder auf der Homepage.
Für den USB-Adapter übersetzt und in- stalliert der Admin Digitemp mit »make ds2490« und »make install«. Im Archiv-File gibt es neben der eigentlichen Applikation noch diverse Perl- und Python-Skripte zur Visualisierung der Daten. Das Skript aus Listing 1 lässt sich direkt nach der Installation starten. Es erzeugt die Resource-Datei und ruft Digitemp auf. Das Ergebnis ist eine Liste mit Sensoren und den zugehörigen Temperaturwerten in der Form: »Dec 28 14:05:56 Sensor 0 C: 15.38 F: 59.67«.
|
Listing 1: Digitemp |
|---|
#!/bin/bash DIGITEMP="./digitemp_DS2490" if ! test "`whoami`" = "root" then echo "Du musst root sein" exit 0 fi if ! test -e .digitemprc then $DIGITEMP -sUSB -w $DIGITEMP -sUSB -i fi $DIGITEMP -sUSB -a -r750 |
Owfs
Das sehr umfangreiche Projekt One wire file system (Owfs) von Paul Alfille und Kollegen [13] geht einen ganz anderen Weg, um die Sensoren zu repräsentieren. Ein eigenes Fuse-Dateisystem ermöglicht den Zugriff auf die virtuellen Dateien mit den Werten der Sensoren. Dabei bildet das Sensordateisystem nur die unterste Schicht, auf der andere Applikationen aus dem Owfs-Projekt aufsetzen, um die Daten auszulesen.
Zu diesen Anwendungen gehören zum Beispiel Monitoringprogramme, ein FTP-Server oder ein eigener kleiner Webserver, mit dem der Surfer via Weboberfläche direkt im Dateisystem navigiert und sich die Inhalte der Dateien anzeigen lässt. Von den hier vorgestellten Lösungen erkennt Owfs die meisten Devices (Tabelle 2, [14]).

Zum Übersetzen braucht es das Fuse-Entwickungspaket. Einen kleinen Fehler in der Owfs-Configure-Datei umschifft »LDFLAGS=-liconv«, falls das Fuse-Modul in der verwendeten Distribution mit der Iconv-Bibliothek übersetzt ist. Bis zum ersten Aufruf sind es nur ein paar Schritte (Listing 2). Ist das Dateisystem gemountet, ermit teln die Kommandos »ls -l« und »cat« die erhaltenen Werte.
|
Listing 2: Owfs starten und |
|---|
# export LDFLAGS=-liconv # ./configure --enable-usb --enable-owfs --enable-w1 # make # make install # mkdir /tmp/1wire # modprobe fuse # /opt/owfs/bin/owfs --Celsius --usb /tmp/1wire # ls -la /tmp/1wire drwxr-xr-x 1 root root 8 28. Dez 21:15 . drwxrwxrwt 5 root root 20480 28. Dez 21:15 .. drwxrwxrwx 1 root root 8 28. Dez 21:15 10.E46A9C010800 drwxrwxrwx 1 root root 8 28. Dez 21:15 81.2A6E2D000000 [...] # ls -la /tmp/1wire/10.E46A9C010800 drwxrwxrwx 1 root root 8 28. Dez 21:16 . drwxr-xr-x 1 root root 8 28. Dez 21:15 .. -r--r--r-- 1 root root 16 28. Dez 21:15 r_address -r--r--r-- 1 root root 12 28. Dez 21:15 temperature -rw-rw-rw- 1 root root 12 28. Dez 21:16 temphigh -rw-rw-rw- 1 root root 12 28. Dez 21:16 templow -r--r--r-- 1 root root 32 28. Dez 21:15 type [...] |
W1retap
Das Wetterstationen-Programm von Jonathan Hudson [15] ist eher auf die Aufzeichnung von Messwerten ausgerichtet, die es als CSV oder XML oder in MySQL-, PostgreSQL- oder ODBC-kompatiblen Datenbanken ablegt. Dabei kann W1retap auch einige Sensoren für Arten von Messwerten ansprechen, die die beiden anderen Lösungen nicht unterstützen.
W1retap läuft im Vordergrund oder als Daemon. Nach dem »configure« übersetzt ein »make« das Programm. Das in- itiale Setup ist verhältnismäßig aufwändig, da der Admin hier die Zuordnung von Sensor-Identifikationsnummern zu sprechenden Bezeichnungen wie »Serverraum vorne« vornehmen muss. Das Skript in Listing 3 zeigt ein automati- sches Beispiel für den ersten Start. Für einen Test bietet sich dann das Kommando »temp DS2490-1« an. DS2490-1 bezieht sich auf den ersten USB-Adapter.
|
Listing 3: »temp« |
|---|
#!/bin/sh
# Diesen Pfad anpassen!
BASE=/usr/local/
export PATH=$BASE/bin:$PATH
export LD_LIBRARY_PATH=$BASE/lib/w1retap/:$LD_LIBRARY_PATH
if ! test "`whoami`" = "root"
then
echo "Du musst root sein"
exit 0
fi
for I in 0 1 2 3 4 5 6 7 8 9 10
do
T=`w1find DS2490-$I`
if test "`echo $T | grep ^Error `" = ""
then
DEVICE="DS2490-$I"
break
fi
done
echo "USB-Adapter gefunden: $DEVICE"
if ! test -e ~/.config
then
mkdir ~/.config
fi
if ! test -e ~/.config/w1retap
then
mkdir ~/.config/w1retap
fi
if ! test -e ~/.config/w1retap/rc
then
cat > ~/.config/w1retap/rc <<_EOF_
init = w1file
log = w1csv=/tmp/csvlog.txt
altitude = 120
delay = 10
device = $DEVICE
_EOF_
fi
SENSORFILE=~/.config/w1retap/sensors
if ! test -e $SENSORFILE
then
ALLIDS=""
TX=/tmp/w1.$$
w1find $DEVICE > $TX
while read I
do
if ! test "`echo $I | grep 18S20:`" = ""
then
ID=`echo $I | grep "18S20:" | awk {'print $2'} `
if test "`echo $ALLIDS`" = ""
then
ALLIDS=$ID
else
ALLIDS="$ALLIDS,$ID"
fi
echo "$ID:1820:ST:Sensor $ID:C:::" >>$SENSORFILE
echo "$ID:1820:ST:Sensor $ID:C:::"
fi
if ! test "`echo $I | grep 'Serial ID Button'`" = ""
then
CID=`echo $I | grep "Serial ID Button" | awk {'print $2'} `
fi
done < $TX
echo "$CID:Coupler:MAIN:$ALLIDS::AUX:::" >>$SENSORFILE
echo "$CID:Coupler:MAIN:$ALLIDS::AUX:::" fi
w1retap -v
|
Wenn sich der Anwender für eine Software entschieden hat und die Sensorwerte auslesen kann, möchte er meist nicht nur einen Überblick über die aktuellen Messwerte, sondern auch über den zeitlichen Verlauf. Für einfache Ansprüche reichen eine kleine Konvertierung und das Auftragen der Messwerte mit Gnuplot [16]. Für die Darstellung komplexerer Diagramme hat sich Rrdtool von Tobias Oetiker durchgesetzt (siehe Abbildung 3).

Abbildung 3: Die mit Rrdtool erzeugte Grafik zeigt die Temperaturwerte in Abhängigkeit von der Zeit.
Digitemp stellt ein Perl-Skript zur Verfügung, das mit Hilfe der GD-Bibliothek Grafiken erzeugt. Für Owfs gibt es den Temploggerd [17], der Werte aufzeichnet und visualisiert. Und natürlich geht das auch alles direkt mit Perl [18]. Im Contrib-Verzeichnis von W1retap finden sich außerdem einige Ruby-Skripte, die eine kleine Wetterstation-Webseite grafisch ansprechend präsentieren. Aber egal welche Variante der Admin wählt, eine einfache Plug & Play-Lösung existiert bisher noch nicht.
Meldung machen – mit Gnokii auch mobil
Neben der grafischen Darstellung der Werte wünscht man sich auch eine Benachrichtigungsfunktion im Alarmfall, zum Beispiel wenn die Temperatur einen Grenzwert überschreitet. Wer noch ein altes Nokia-Handy mit SIM-Karte und Datenkabel besitzt, kann sich mit der Software Gnokii Kurznachrichten per SMS schicken lassen [19]. Wer es dagegen ganz innovativ wünscht, sendet mit einem Skript die Werte der Temperatursensoren an einen Micro-Blogging-Dienst und verfolgt die Ergebnisse online.
Insgesamt kostet jede dieser Lösungen zur Temperaturüberwachung nur einen Bruchteil vergleichbarer kommerzieller Produkte. Zwar sollte der Anwender wissen, von welcher Seite er einen Lötkolben anfasst, aber dann baut sich die individuelle und preiswerte Überwachungslösung fast von selbst.
Dabei sind Serverräume [20] nur eine von vielen Einsatzmöglichkeiten. Zur Ins- piration bietet das Web faszinierende Be- richte über individuelle Wetterstationen, Aquarienfarmen, Weinkeller (mit einem Sensor in einer gefüllten Flasche, [21]), Heizungs- und Solaranlagen [22] oder auch Gewächshäuser.(mfe)
|
Der Autor |
|---|
|
Dr. Andreas Bohne-Lang arbeitet an der Medizinischen Fakultät Mannheim der Universität Heidelberg und betreut dort neben diverser Hardware auch das komplette Bibliothekssystem. |






