Unter Linux gibt es eine sehr überschaubare Auswahl an Software für 1-Wire. Meines Wissens sind dies derzeit (Stand 04/12) drei Softwarepakete:
Jede Software hat seine Vorzüge. Dabei unterscheiden sich die Softwarepakete durchaus in ihrem Einsatzzweck und den damit unterstützten Sensoren / Aktoren. Das Paket mit einer großen Auswahl an unterstützten 1-Wire Bausteinen ist zweifellos OWFS. In diesem ersten Teil gehe ich auf die Vorausetzungen zur Nutzung der Pakete sowie die Software DigiTemp näher ein.
Natürlich sollten die notwendigen Grundlagen für ein 1-Wire Netzwerk bekannt sein. Um auf die Slaves im 1-Wire Bus zugreifen zu können ist ein 1-Wire Adapter (Busmaster) notwendig. Wie bereits in den Grundlagen beschrieben, gibt es diesen in verschiedenen Ausführungen. In diesem Artikel beziehe ich mich auf den DS9490R USB Adapter.
Da jede der vorgestellten Softwarepakete den Adapter exklusiv belegt, sollte darauf geachtet werden, das auch nur ein Softwarepaket zum aktuellen Zeitpunkt den DS9490R benutzt. Meist sind auch root-Rechte erforderlich (oder man paßt die entsprechenden Rechte an).
Der Linuxkernel bringt seit geraumer Zeit ein passenden Treiber für den DS9490R von Haus aus mit. Dieser kollidiert jedoch mit den Softwarepaketen, so daß dieser nach dem Anstecken des DS9490R an eine USB-Buches entladen werden muss. Manuell (z.B. für einen Test) geschieht dies mit (root-Rechte werden benötigt!):
sudo rmmod ds2490
Sollte die Software permanent zum Einsatz kommen, dann empfiehlt es sich, das Laden des Treibers von vornherein zu unterbinden. Die folgenden Schritte sind nur einmal vorzunehmen, da die Konfiguration auch nach einem Neustart bestehen bleibt. Idealerweise ist der 1-Wire Adapter DS9490R noch nicht angeschlossen.
Im ersten Schritt wird geprüft ob der Kerneltreiber evtl. noch geladen ist:
lsmod | grep ds2490
Bleibt die Ausgabe ohne Ergebnis, ist der Treiber nicht geladen (So soll es sein!). Andernfalls muß dieser mit der oben beschriebenen manuellen Methode entladen werden.
Nun wird eine neue Datei blacklist-ds2490.conf im Verzeichnis /etc/modprobe.d/ angelegt (root-Rechte werden benötigt!):
sudo vi /etc/modprobe.d/blacklist-ds2490.conf
Diese Datei bekommt folgenden Inhalt:
blacklist ds2490
Bei neueren Systemen sollte die Regel nach dem Speichern der Datei sofort Wirkung zeigen. Der DS9490R Busmaster ist nun nach dem Einstecken einsatzbereit.
Geht es um die hauptsächliche Erfassung von Temperaturen und Zählern, so ist DigiTemp die erste Wahl. Laut manual unterstützt DigiTemp in der Version 3.5.0 folgende Slaves:
DS1820, DS18S20, DS18B20, DS1822, DS2406, DS2423
Weitere unterstützte Hardware ist ggf. der Homepage zu entnehmen. Der Vorteil von DigiTemp ist die einfach Nutzung so wie Installation. Darüber hinaus ist DigiTemp in so gut wie jeder Linux Distribution bereits enthalten.
Nachdem der 1-Wire Adapter DS9490R angesteckt wurde, kann DigiTemp sofort genutzt werden:
sudo digitemp_DS2490 -w -sUSB
Mit diesem Aufruf (-w) wird DigiTemp den 1-Wire Bus durchsuchen und alle unterstützten Geräte inkl. der Seriennummer ausgeben. Die Ausgabe könnte zum Beispiel so aussehen:
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Found DS2490 device #1 at 002/020 Turning off all DS2409 Couplers ... Devices on the Main LAN 28F1401502000044 : DS18B20 Temperature Sensor 1279277300000006 : DS2406/2407 Dual Addressable Switch + 1Kbit memory 81A7C02F000000BB : Unknown Family Code
Sollte dennoch die Fehlermeldung "USB ERROR: Failed to set configuration" erscheinen, dann wird mit hoher Wahrscheinlichkeit noch der Kerneltreiber geladen sein (siehe oben).
DigiTemp hat in dem obigen Beispiel 3 Geräte gefunden:
Die ersten zwei Geräte erklären sich von selbst. Das unbekannte Gerät entspricht dem Busmaster DS9490R.
DigiTemp funktioniert also und kann nun zum Einsatz kommen.
Wie viele Softwarepakete benötigt DigiTemp eine Konfigurationsdatei. Diese wird mit dem Parameter -i im aktuellen Pfad unter dem Namen .digitemprc angelegt. Soll DigiTemp seine Konfiguration z.B. unter /etc ablegen und diese dann später auch nutzen, ist der Pfad sowie der Name beim Aufruf mit anzugeben. Ab hier setze ich voraus, das unter dem Benutzer root gearbeitet wird!
Durch den Aufruf
digitemp_DS2490 -i -c /etc/digitemp.conf -sUSB
wird DigiTemp veranlaßt einen Busscan vorzunehmen und die Konfigurationsdatei unter /etc/digitemp.conf anzulegen. Die Konfiguration hat nun folgenden Inhalt:
TTY USB READ_TIME 1000 LOG_TYPE 1 LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C" HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%" SENSORS 1 ROM 0 0x28 0xF1 0x40 0x15 0x02 0x00 0x00 0x44
Um beim Aufruf von DigiTemp nicht immer diverse Parameter mit angeben zu müssen, werden diese hier abgelegt und können je nach Bedarf angepasst werden. In der folgenden Übersicht erkläre ich die wichtigsten Einstellungen:
/etc/digitemp.conf | ||
TTY | Die von DigiTemp zu nutzende Schnittstelle | |
READ_TIME | Der Abstand von Abfragen in Millisekunden. Standardeinstellung ist 750. Dieser Wert sollte nicht unterschritten werden, da z.B. der DS18S20 ca. 750mS zum Auslesen der Temperatur benötigt. | |
LOG_TYPE | Kann den Wert 1, 2 oder 3 annehmen und bestimmt die Ausgabe des Temperaturformats, wobei 1 die Standardeinstellung ist: eine Zeile pro Sensor, inkl. Zeitpunkt, °Celsius und °Fahrenheit. | |
LOG_FORMAT | Formatierung der Ausgabe für Temperatursensoren | |
CNT_FORMAT | Formatierung der Ausgabe für Zähler | |
HUM_FORMAT | Formatierung der Ausgabe für Luftfeuchtesensoren | |
Die folgenden Zeilen beinhalten Informationen zu den gefundenen Sensoren und sollten nicht geändert werden! | ||
SENSORS | Anzahl der gefundenen Sensoren | |
ROM | Laufende Nummer der Sensoren (startet bei 0) und der ROM-ID (Adresse des Sensors) |
Viele der Einstellungen können auch direkt über Parameter beim Aufruf von DigiTemp gesetzt werden. Siehe dazu auch man digitemp.
Um zum Beispiel die Ausgabe der Temperatursensoren so anzupassen, das sie der Logfiles von FHEM entsprechen, könnte der Eintrag wie folgt aussehen:
LOG_FORMAT "%Y.%m.%d %H:%M:%S 4: Sensor %s: %R C: %.4C"
Über FHEM könnte die Ausgabe dann ggf. weiterverarbeitet werden.
Nachdem DigiTemp nun konfiguriert ist, kann damit begonnen werden die Werte der Sensoren auszulesen:
digitemp_DS2490 -c /etc/digitemp.conf -q -a -n 3 -d 10
Der Parameter -q unterdrückt die Copyright Zeile, -a gibt an, das DigiTemp alle gefundenen Sensoren auslesen soll, -n 3 wiederholt die Abfrage dreimal und -d 10 sorgt für 10 Sekunden Pause je Abfrage. Das Ergebnis könnte nun wie folgt aussehen:
2012.04.30 02:21:19 4: Sensor 0: 28F1401502000044 C: 22.3750 2012.04.30 02:21:29 4: Sensor 0: 28F1401502000044 C: 22.4375 2012.04.30 02:21:39 4: Sensor 0: 28F1401502000044 C: 22.4375
Möchte man gezielt einen einzelnen Sensor auslesen und die Daten nun zusätzlich auch noch in ein Logfile schreiben, dann könnte der Aufruf z. B. wie folgt aussehen:
digitemp_DS2490 -c /etc/digitemp.conf -q -t 0 -l /var/log/1-wire_28F1401502000044.log
Damit werden die Daten von Sensor 0 in das Logfile 1-wire_28F1401502000044.log geschrieben:
2012.04.30 02:26:00 4: Sensor 0: 28F1401502000044 C: 22.5000 2012.04.30 02:27:00 4: Sensor 0: 28F1401502000044 C: 22.5000 2012.04.30 02:28:00 4: Sensor 0: 28F1401502000044 C: 22.5625
Natürlich möchte man DigiTemp nicht laufend manuell aufrufen. Um regelmäßig die gemessenen Werte automatisch in das Logfile zu schreiben, wird eine entsprechende Konfiguration für den Cron-Daemon angelegt:
vi /etc/cron.d/digitemp
Wir legen fest, das Cron den Sensor 0 alle 5 Minuten abfragen soll und das Ergebnis in das Logfile schreiben soll:
# /etc/cron.d/digitemp: crontab entries for logging 1-wire devices SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin digitemp_BIN="/usr/bin/digitemp_DS2490" CONF="/etc/digitemp.conf" LPATH="/var/log/" */5 * * * * root test -x ${digitemp_BIN} && ${digitemp_BIN} -c ${CONF} -q -t 0 -l ${LPATH}1-wire_28F1401502000044.log 2&>1 /dev/null
Weitere Sensoren können nach dem gleichen Schema hinzugefügt werden. Das Logfile wird sich nun langsam füllen. Um nicht irgendwann "Out of Space" zu rennen, sollte ggf. eine Logrotate Konfiguration erstellt werden.
Auf Grundlage der nun vorliegenden Informationen sollte man in der Lage sein, Werte von 1-Wire Sensoren manuell sowie automatisiert auszulesen und zu erfassen. Im folgenden Teil 2 beschreibe ich die Installation des Softwarepaketes OWFS - 1-Wire Filesystem.