:: fischer-net.de

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.

 

Voraussetzungen

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).

 

Kerneltreiber ds2490

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.

 

DigiTemp

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.

 

Ein erster Test

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:

  • DS18B20 Temperature Sensor
  • DS2406/2407 Dual Addressable Switch + 1Kbit memory
  • Unknown Family Code

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.

 

Konfiguration

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.

 

Werte auslesen

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

 

Cron erledigt den Job

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.

 

Ausblick

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.

Schnäppchen bei reichelt elektronik!
Stark reduzierte Restbestände bei Neuware

Powered by ...

 

 

reichelt elektronik – Elektronik und PC-Technik