OneWire von Check MK nutzen
Eine der einfachsten Möglichkeiten mit einem Linux-System Temperaturen zu erfassen und auszuwerten, ist der Einsatz des One-Wire-Bussystems. Eigentlich ist dieser Begriff etwas irreführend, denn es sollte besser Drei-Draht- oder im parasitären Betrieb Zwei-Draht-Bussystem heißen. Dieses Bussystem wird ursprünglich direkt an eine serielle Schnittstelle angeschlossen. Da aber die heutigen PC's nicht mehr über derartige Schnittstellen verfügen, empfiehlt sich ein entsprechender USB-Adapter.
An diesen Adapter werden dann Temperatursensoren vom Typ DS18S20 angeschlossen. Ich habe mich für den Drei-Draht-Betrieb entschlossen, da ich in dieser Betriebsart einen größeren und sichereren Messbereich erhalte.
![]() |
![]() |
![]() |
![]() |
Die Temperaturfühler werden an den UBS-Adapter mit einem RJ11-Stecker verbunden. Ich habe ein altes Telefonkabel missbraucht und von den sechs Adern werden nur die ersten drei Adern benötig. Bei mir ist:
- weiß mit 5V
- braun mit Masse (GND)
- grün mit Daten
belegt. Wer mehr Details benötig, der sollte einen Blick in das Datenblatt werfen.
Dieser One-Wire-Bus darf 100 m lang werden und kann auch Abzweigungen/Verästelungen haben. Für den normalen Hausgebrauch sollten 100 m eigentlich reichen. Wer will, kann ja noch zusätzlich jedem Temperaturfühler eine Pufferkapazität von ca. 10 nF für die Stromversorgung spendieren.
Um unter Linux Daten aus dem One-Wire-Bus auszulesen, scheint es mehrere grundsätzliche Wege zu geben:
- DigiTemp
- OWFS 1-WireFilesystem
- w1retap
Ich habe mich für das OWFS 1-WireFilesystem entschieden, denn ich hatte keine Lust Kernel-Treiber zu entfernen und einen anderen zu installieren. Anleitungen für OWFS scheint es recht viele zu geben. Nur leider haben die meisten bei mir nicht funktioniert. Deshalb möchte ich hier meine Vorgehensweise vorstellen:
Vorbereitung:
apt-get update
apt-get upgrade
Den Adapter einstecken und mit lsusb nachsehen, ob dieser erkannt wird. Normalerweise sollte man eine solche Auflistung zu sehen bekommen und den Dallas Semiconductor finden.
root@check-mk-3:/home/thoj# lsusb
Bus 002 Device 004: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 002 Device 005: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter
Bus 002 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 136b:0003 STEC STEC USB 2.0
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@check-mk-3:/home/thoj#
Danach einfach diese beiden Befehle:
apt-get update
apt-get install owserver
Im nächsten Schritt wird die owfs.conf editiert.
Ich erledige dies mit vi.
vi /etc/ows.conf
Jetzt ist darauf zu achten, dass diese Zeile auskomentiert ist:
server: FAKE = DS18S20,DS2405
Nun ist dafür zu sorgen, dass folgende Zeile vorhanden ist.
server: usb = all
Falls die Zeile fehlt folgende Zeile hinzufügen:
server: usb = scan
Danach die owfs.conf speichern und den owserver neu starten:
/etc/init.d/owserver restart
Um eine eine Übersicht über den Web-Browser zu bekommen, installieren ich das Paket owhttpd mit folgendem Kommando:
apt-get install owhttpd
Danach sollte der owserver per http erreichbar sein:
http://adresse:2121
![]() |
Im nächsten Schritt wird OWFS installiert mit folgendem Kommando:
apt-get install owfs
Danach muss ein Verzeichnis angelegt werden, auf welchen gemappt werden soll. Bei mir liegt diese Verzeichnis in /home/thoj
mkdir owfs
chmod 777 owfs
Das Mapping erflogt mit diesem Befehl:
owfs -C -m /home/thoj/owfs --allow_other
Und schon kann mit nachfolgendem Befehl die Temperatur per owfs abgefragt werden:
cat /home/thoj/owfs/10.EEA654020800/temperature
In Check MK ist es möglich lokale Checks durchzuführen. Die Scripte dazu liegen bei mir im Verzeichnis /usr/lib/check_mk_agent/local/90/
Die 90 steht dafür, dass alle 90 Sekunden die dort abgelegen Scripte ausgeführt werden.
Das Script zum Abfragen des ersten 1Wire-Temperatursensors sieht wie folgt aus:
#!/bin/bash
################################################################################
# 23.09.2024 - Juergen Thoens
# 1Wire Temperatursensor 1 Adresse: 10.EEA654020800
# Front-Temperatur
Temp=`cat /home/thoj/owfs/10.EEA654020800/temperature`
STNO=0
TEXT="Temp = $Temp °C"
TEMP="$Temp"
echo "P Temp-1Wire-Front Temp=$TEMP;25;28 $TEXT"