Temperaturüberwachung mit DigiTemp

artpic_digitemp

Es gibt Lösungen für den professionellen Einsatz von z.B. W&T, kosten aber ca. 250€, oder eine USV mit Temperatur Modul.
Diese haben dann einen integrierten Webserver, automatische Emailbenachrichtigung, etc. Für den Einsatz in der Firma.

Für den privaten Gebrauch kommen wir mit folgendem Bastelvorschlag auf ca. 5€ pro Sensor mit Schaltung.
Benötigt aber einen vorhandenen Linux Server mit serieller Schnittstelle und DigiTemp Software.

  • Die Schaltung mit der kleinen Platine kommt bei mir in eine CAT Connector Box, passt aber auch komplett in das Sub-D Gehäuse.
  • Alle Bauteile waren bei Reichelt verfügbar und wurden auch dort bestellt. (Bauteilliste und Bestellnummern als Bild unten.)
  • Benötigt werden noch: RJ45 Crimp Stecker, Patchkabel, Lochrasterplatine, Sub-D Stecker mit Gehäuse. (Hat der Bastler ja vorrätig.)
  • !! Schaltung und Anleitung ohne Gewähr !!
  • Wer nicht selber zum Lötkolben greifen will oder kann findet z.B. bei Fuchs-Shop und 1-Wire auch fertige Produkte und Lösungen.

Jeder DS1820 Sensor hat eine eindeutige 64-bit Adresse. Mehrere Sensoren werden einfach parallel geschaltet.
Dadurch können wir mehrere Sensoren an einem seriellen Anschluß mit einer Schaltung betreiben.
Im Parasitic Mode wird der VDD (Pin 3) nicht benutzt und muss geerdet werden, auf GND schalten. (steht so im Datenblatt des DS1820)

In meinem Fall, mit bestehender Netzwerkverkabelung, habe ich die externe Schaltung in ein Patchpanel geschliffen und zu den entsprechenden Netzwerkdosen gepatcht und dort die Sensoren abgegriffen. Die Steuerung mit DigiTemp und grafische Auswertung der Sensoren übernimmt bei mir der vorhandene Ubuntu Nagios Server.


Installation und Konfiguration

DigiTemp ist als Paket für Ubuntu verfügbar

$ apt-get install digitemp
$ dpkg -l | grep digitemp
ii digitemp 3.5.0ds1-1 read temperature sensors in a 1-Wire net

Wir erstellen einen symbolischen link zu digitemp

$ ln -s /usr/bin/digitemp_DS9097 /usr/bin/digitemp
$ ls -la /usr/bin/digitemp*
lrwxrwxrwx 1 root root 15 2011-12-22 19:45 /usr/bin/digitemp -> digitemp_DS9097
-rwxr-xr-x 1 root root 59848 2008-08-20 12:46 /usr/bin/digitemp_DS2490
-rwxr-xr-x 1 root root 55696 2008-08-20 12:46 /usr/bin/digitemp_DS9097
-rwxr-xr-x 1 root root 63920 2008-08-20 12:46 /usr/bin/digitemp_DS9097U

Zuerst die ROM Werte der angeschlossenen Sensoren auslesen und die .digitemprc Datei erstellen lassen.

$ digitemp -s /dev/ttyS0 -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - <a href="http://www.digitemp.com/">http://www.digitemp.com
Turning off all DS2409 Couplers
Searching the 1-Wire LAN
10761954020800B1 : DS1820/DS18S20/DS1920 Temperature Sensor
100E25540208002D : DS1820/DS18S20/DS1920 Temperature Sensor
10A1A25302080049 : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 10761954020800B1
ROM #1 : 100E25540208002D
ROM #2 : 10A1A25302080049
Wrote .digitemprc

Die erstellte .digitemprc Datei

TTY /dev/ttyS0
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 3
ROM 0 0x10 0x76 0x19 0x54 0x02 0x08 0x00 0xB1
ROM 1 0x10 0x0E 0x25 0x54 0x02 0x08 0x00 0x2D
ROM 2 0x10 0xA1 0xA2 0x53 0x02 0x08 0x00 0x49

Der erste Testlauf für Sensor 0, 10 Messwerte im 5 Sekundentakt.

$ digitemp -T0 -d 5 -n 10
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Dec 25 18:18:48 Sensor 0 C: 13.88 F: 56.97
Dec 25 18:18:54 Sensor 0 C: 13.88 F: 56.97
Dec 25 18:18:58 Sensor 0 C: 13.88 F: 56.97
Dec 25 18:19:03 Sensor 0 C: 13.88 F: 56.97
Dec 25 18:19:09 Sensor 0 C: 13.94 F: 57.09
Dec 25 18:19:13 Sensor 0 C: 13.88 F: 56.97
Dec 25 18:19:18 Sensor 0 C: 13.88 F: 56.97
Dec 25 18:19:24 Sensor 0 C: 13.94 F: 57.09
Dec 25 18:19:28 Sensor 0 C: 13.94 F: 57.09
Dec 25 18:19:33 Sensor 0 C: 13.94 F: 57.09

Das Nagios script

#!/bin/bash
temp=`/usr/bin/digitemp -t0 -d2 -n1 -q -c /etc/digitemp.conf -o%.1C`
standort="Speicher"

# den Messwert 85.0 rausfiltern und verwerfen, keine Ausgabe
if [ "$temp" == "85.0" ] ; then
    echo # do nothing
        else
    status=0
    echo "$status Temperatur_Sensor-0 Temperatur=$temp;35;50;0; $temp °C - $standort"
fi

Hier noch ein paar Links zu Anleitungen und Schaltungen:

Schreibe einen Kommentar