USB Thermometer und Debian the right way

Nachdem mich der Artikel von Frank

http://www.intux.de/2013/12/temperaturmessung-mit-dem-raspberry-pi/

angefixt hatte, musste natürlich sofort auch ein USB TempER1 her.

http://www.amazon.de/gp/product/B009RETJIO/

Nach 8 Tagen war das gute Stück Silizium dann auch da.

Zunächst hielt ich mich an die Anleitung auf Intux.de, aber ich hatte doch noch genug Anmerkungen für einen eigenen Blogpost.

pcsensor hat in der verlinkten git version gar keinen -d switch und auch den Messfehlern musste sich angenommen werden.

Mein noch in den Kommentaren bei intux auffindbarer Lösungsansatz für das Problem ist jedoch relativ sinnfrei.

Also ein neues Tutorial 2.0

Vorab: Ich nutze das Thermometer mit einem auf einem USB Stick installierten Debian Wheezy als root.

$ apt-get install libusb-dev rrdtool git build-essential

Als erstes installieren wir alle nötigen Pakete

$ git clone https://github.com/petervojtek/usb-thermometer.git
cd usb-thermometer/
cp 99-tempsensor.rules /etc/udev/rules.d/
make
cp pcsensor /usr/local/bin/

Wir klonen das Github repo, bauen es und installieren pcsensor nach /usr/local/bin.

(Die udev rule ist bei der reinen Nutzung als root nicht erforderlich. Sollte jedoch ein normaler Nutzer den Sensor nutzen können, so ist ggf. ein reboot/reload der udev rules erforderlich)

$ rrdtool create /root/.temp_36.rrd --step 60 DS:tempsensor1:GAUGE:120:0:50 RRA:MAX:0.5:1:2160

Der Pfad zur Datenbank ist ggf anzupassen. Zu beachten ist der im Vergleich zum anderen Tutorial abgeänderte Wert von 60 auf 120. Bei meinen Tests zur minimierung der Messfehler bekam ich leider nur allzu oft NaN in die Datenbank. Recherchen dazu ergaben, dass das jede Minute ausgeführte Script leider zu lange braucht. Ein “timeout” von 60 Sekunden für das Schreiben eines Wertes ist daher zu niedrig angesetzt.

Folgendes mit exec bit nach /usr/local/bin/tempread.sh


#!/bin/bash
# temp liest die Temperatur aus
trys=0
function gettemp {
temp=`pcsensor -cm | head -n1`
if (( trys < 3 )); then
if [[ $temp = '*Fatal error> USB read failed*' ]] || [[ $temp = '0.00' ]]; then
trys=$((trys+1))
gettemp
else
rrdtool update /root/.temp_36.rrd N:$temp
fi
else
exit 0
fi
}
gettemp

Das neue Script versucht die falschen Messungen die ich finden konnte herauszufiltern. Ich bin mir jedoch ziemlich sicher, dass das noch nicht perfekt ist. Stay tuned.

An das Ende der /etc/crontab hängen wir noch
*/1 * * * * root /usr/local/bin/tempread.sh
und starten cron mit

$ /etc/init.d/cron restart

neu, um den neuen cronjob zu aktivieren.

Zum Abschluss noch mein persönlicher Weg, um das Diagramm über HTTP bereitzustellen. Hierfür wird socat benötigt.

$ apt-get install socat

Der Einfachheit halber liegt das Script für die Ausgabe im ~ und wird auch nur per Screen ausgeführt. Ein Initscript dafür kann man aber ggf. auch leicht anlegen.

Wir nennen es webtemp.sh und füllen es mit folgendem:

#!/bin/bash
echo -e "HTTP/1.1 200 OK\n\n"
echo "<html>"
echo "<body>"
date=`date`
image=`rrdtool graph - -a SVG --title="Temperatur im Zimmer" --start -129600 --vertical-label "Grad Celsius" 'DEF:probe1=/root/.temp_36.rrd:tempsensor1:MAX' 'AREA:probe1#009bc2:Temperaturverlauf' 'GPRINT:probe1:LAST:Letzte Messung\: %2.1lf'" °C" --watermark "$date"`
echo "<svg>$image</svg>"
echo "</body>"
echo "</html>"

$ socat TCP4-LISTEN:1501,fork,reuseaddr EXEC:"bash ./webtemp.sh"

lässt das Script auf port 1501 lauschen. Wenn man nun mit dem Browser seiner Wahl IP:1501 aufruft, so bekommt man eine HTML-Seite mit eingebettetem Diagramm serviert.
Sollte man socat nicht als root ausführen wollen sollte man beachten, dass man einen Port über 1024 wählen muss.

Ich bin immer offen für Verbesserungsvorschläge. 🙂

 

graph

5 Gedanken zu „USB Thermometer und Debian the right way“

  1. Ziemlich coole Sache mit dem Aufzeichnen der Temperatur. Der spannendste Teil war die Bereitstellung einer HTML Datei mittels “socat”. Wirklich nette Sache…war mir nicht bekannt.

    Viele Grüße
    Nedy

  2. Nicht schlecht…ich habe es (hostapd-statistics) jetzt nicht ausprobiert, aber eine kleine Statistik über die Memory Auslastung fehlt noch…sonst schon einmal ein super Überblick.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.