Aus Linux-Magazin 03/2006

Temperatursensoren mit Perl auslesen (Seite 2)

Zu Testzwecken lasse ich nun einen Sensor im Zimmer und führe den anderen durchs Fenster ins Freie. Das OWFS-Projekt liefert mit dem Modul »OW« eine generische Perl-Schnittstelle mit, die das Modul »OWTemp.pm« (siehe Listing 1) auf die konkret verwendeten Temperaturfühler zuschneidet.

Abbildung 1: Die Temperatursensoren sind über den One-Wire-Bus mit dem USB-Dongle verbunden.

Abbildung 1: Die Temperatursensoren sind über den One-Wire-Bus mit dem USB-Dongle verbunden.

Such den Sensor

Zunächst ist nicht bekannt, wie viele Geräte am Bus hängen, welche davon Temperaturfühler sind und was ihre eindeutigen IDs sind. Die vom Konstruktor »new« aufgerufene »discover«-Methode findet dies heraus, indem sie einfach die »type«-Einträge aller am Bus hängenden Geräte öffnet und nachsieht, ob sich dort ein DS18S20 zu erkennen gibt.

Mit »OW::init(\’u\’)« nimmt das Modul dann Kontakt zum USB-Dongle auf, die nachfolgenden Aufrufe der Methode »temperatures()« liefern Paare aus Fühlernummer und ausgelesenem Temperaturwert. Der Destruktor in Zeile 44 ruft »OW::finish()« auf, um die Verbindung zum USB-Dongle aufzulösen.

Das Skript »rrdmon« (siehe Listing 2) zeigt eine typische Sensor-Anwendung. Es nutzt das Modul »RRDTool::OO« vom CPAN, das eine objektorientierte Schnittstelle zu Tobi Oetikers Werkzeug RRDtool bereitstellt.

Abbildung 2: Abfrage des One-Wire-USB-Dongle mit den angeschlossenen Temperatursensoren von der Kommandozeile aus.

Abbildung 2: Abfrage des One-Wire-USB-Dongle mit den angeschlossenen Temperatursensoren von der Kommandozeile aus.

Kurven malen

Ohne Optionen aufgerufen liest es alle Sensoren aus und legt ihre aktuellen Werte in der Round-Robin-Datenbank ab. Falls diese noch nicht existiert, legt die »create()«-Methode in Zeile 26 sie mit zwei Datensourcen, »Inside« und »Outside«, für den Zimmer- und den Außentemperaturfühler an. Die Zeilen 15 und 16 ordnen den Sensoren-IDs diese einfacher zu merkenden Bezeichnungen zu. Diese IDs sind weltweit eindeutig, neu gekaufte Sensoren haben jeweils eigene Identitäten. Welcher Sensor welche ID hat, lässt sich einfach herausfinden, indem man nur einen Sensor anschließt und dann die Verzeichnisstruktur anzeigen lässt (Abbildung 2).

Abbildung 3: Vor dem Anlöten: Grün ans linke, rot ans mittlere Bein des DS18S20.

Abbildung 3: Vor dem Anlöten: Grün ans linke, rot ans mittlere Bein des DS18S20.

Der Parameter »step« in Zeile 27 gibt mit 300 ein Auffrischintervall von 300 Sekunden (5 Minuten) vor, und die Datenbank speichert 5000 Werte, bevor sie alte überschreibt. Ab Zeile 56 findet dann der Auslese- und Auffrischungsvorgang statt, mit den von »OWTemp« bereitgestellten Methoden und »update()« von »RRDTool::OO«. Die Zeilen 15 und 16 weisen den wenig aussagekräftigen Fühler-IDs lesbare Bezeichnungen zu: »Outside« und »Inside«. Wird »rrdmon« mit dem Parameter »-g« aufgerufen, erzeugt es aus den RRD-Daten eine grafische Darstellung der Temperaturverläufe beider Fühler und legt sie in der PNG-Datei »/tmp/temperature.png« ab (Abbildung 7). Der Innensensor wird rot, der Außensensor grün dargstellt.

Abbildung 4: Der Sensor in der Klemme mit einem angelöteten Kabel.

Abbildung 4: Der Sensor in der Klemme mit einem angelöteten Kabel.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Comments
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben