Zobelei-Homepage

Zähler

Das Zobel'sche Netz

Familie Theologie Computer Freizeiten Wetter Info

Temperatur in Dohna: Stand: 05.Dec 14
Außen:  Ausgefallen C -  Eiskalt  ( Uhr)
Innen:  Ausgefallen C -  Eiskalt  ( Uhr)
ServerCPU:  29.38 C -  Sehr warm  (17:53:46 Uhr)
 

 

Bitte wählen:

Überblick

Wetter

Werte

Graphen

Technik

Technik

Software

temptag.pl

Technik meiner Temperaturmessung

Hardware

Kern meiner Technik ist der Baustein DS18S20 von Dallas Semiconductor. Er kostet bei Conrad-Elektronik unter 5 Euro. Was ihn auszeichnet, ist, das er mehr als nur ein reines Meßinstrument ist. Dieser Baustein setzt auf die 1-Wire-Technik von Dallas Semiconductor / Maxim auf und läßt sich somit durch 2 Drähte ansteuern. Die Temperatur wird in Digitalwerte umgesetzt und über diesen Bus an den Computer übermittelt. Jedes dieser ICs hat eine eigene Seriennummer, durch die nun die Temperaturwerte unterschieden werden können. Diese 1-Wire-Technik kann mit wenigen Standardbauteilen vom seriellen Port aus direkt angesprochen werden - wunderbar. Also benötigte der Server noch einen weiteren seriellen Port, und los ging es...

Gefunden habe ich die Schaltung im LinuxNetMag. Allerdings ist diese Schaltung nicht dort erfunden worden, sondern stammt aus der Anleitung von Dallas zu diesem Bauteil: Application Note 74, Seite 21, Abb. 13. Im LinuxNetMag steht sie auf deutsch beschrieben, sowie genaue Schemazeichnungen sind auch dabei. Sie kostete mich bei Conrad 1,52 Euro zuzüglich Stecker - billiger kann man die Temperaturen nicht messen. Auch ich habe die Schaltung frei im Gehäuse des Steckers verlötet - und sie funktionierte auf Anhieb. Einfacher kann es nicht sein.

Auch der Datenbus ist sehr billig. Ein einfaches doppeladriges Kabel tut hier seinen Dienst. Zwischen den verschiedenen Stellen hat sich dabei geradezu ein Netz von Leitungen ergeben:

Stecker
Kabel ca. 20 cm.
2 Fühler im Server Ca. 40 cm Kabel Lötverbindungspunkt
Kabel ca. 4m
2 Fühler im Client Ca. 5m Kabel Mono-Klinkenstecker Ca. 9m Kabel 2 Fühler für Außentemperaturen
Ca. 1m Kabel angelötet
1 Fühler für den Innenraum

Keine Dioden auf den Leitungen oder Widerstände, kein Cat5-Kabel, einfache Zwillingslitze (2x0,18qmm) von Conrad tut hier ihren Dienst. Die Werte kommen alle paar Sekunden in den Server, so daß alle 7 Temperaturen innerhalb von gut 40 Sekunden ausgelesen sind.

Sämtliche Fühler werden einfach parallel an die Leitung angeschlossen und über den seriellen Port mit Spannung versorgt. Wenn man in die Datenblätter von Maxim schaut, dann stellt man fest, das 10m für den Bus eine kurze Strecke sind, er ist eher für 100m ausgelegt.

Software

Unter Digitemp gibt es die entsprechende Auslesesoftware. Geschrieben wurde sie von Brian C. Lane, und sie ist genial einfach. Die Installation unter Linux RedHat 7.0 verlief problemlos.

Ausgewählt habe ich Digitemp 1.7, die letzte Version, die noch mit dem einfachen Com-Port-Adapter laufen. Der Com-Port-Adapter Version 2 von Maxim war mir zu teuer, deshalb wählte ich die einfache und alte Version. Digitemp gibt es nun auch als Version 2, aber dann läuft sie eben nicht mit dem einfachen Adapter.

Im Paket war neben den Sourcen und einigen Beispielskripten auch schon eine kompilierte Version von digitemp dabei, einfach starten und los geht es.

digitemp -i analysiert den Bus und liefert die Nummern der Sensoren zurück. Gleichzeitig erstellt es im Ausgangsverzeichnis eine .digitemprc, in der die Daten alle fein aufgelistet sind. Durch Tauschen der ROM-Nummern habe ich die Sensoren für mich in eine sinnvolle Reihenfolge gebracht.

Anfangs lief bei mir regelmäßig ein crongesteuertes /usr/bin/digitemp -a -q -c/etc/digitemprc -l/var/log/digitemp/temp.log (die .digitemprc habe ich nach /etc/digitemprc umkopiert, das erschien mir sinnvoller...). Doch gab es hier ein Problem: Dauerte das Auslesen der Werte länger als die Zeitvorgabe, dann startete ein neues digitemp, bevor das alte beendet war. Mit einigen parallel laufenden, wartenden digitemp-Instanzen kam das System klar. Doch irgendwann störten sich die alten digitemps am seriellen Bus gegenseitig, so daß ich eine andere Lösung realisierte.

Ein Perl-Skript, alle 10 Minuten gestartet, um die 3-Stunden Graphik zu erstellen, ruft am Ende ein system "/usr/bin/digitemp -a -c/etc/digitemprc -q -l/var/log/digitemp/temp.log -n10 -d60" auf. Dadurch liest digitemp 10 mal alle 60 Sekunden die Werte aus, wenn es länger als 60 Sekunden dauert, dann wartet er. Dadurch schafft er meistens das Auslesen in 10 Minuten ohne Probleme. Sollte trotzdem ein digitemp hängen, werden vor dem Aufruf von digitemp durch ein hartes system "killall -HUP digitemp" alle eventuell noch laufenden digitemp-Prozesse beendet. Hart, aber manchmal hilfreich.

Aber das steht alles genauer auf der Softwareseite, dort geht es weiter...


Alle Angaben ohne Gewähr! Die Links habe ich besten Wissens und Gewissens gesetzt, sie entsprachen am Tag der Verlinkung der Beschreibung im Text und verwiesen auf keine mir bekannten Straftaten. Defekte oder geänderte Links bitte mir melden!