Wenn ihr die Raumtemperatur z.B. von einem Serverraum überwachten wollt und dazu deinen Raspi (Raspberry Pi) verwendet wollt, dann möchte ich euch folgende Seite ans Herz legen.
Sie war mir wirklich sehr, sehr behilflich, als ich so ein Projekt zum umsetzten hatte. Allerdings hatte ich bei mir auch noch einige Problemchen, welche ich hier ergänzend zu obigen Post aufführen möchte.
Als ich „w1-gpio“ und „w1-therm“ installiert hatte, wollte ich im angegebenen Pfad nachschauen, ob da mein Sensor auftaucht. Tat er nicht.
Somit machte ich mich auf die Suche nach dem Problem und bin auch folgende Seite gestossen:
Auf diesem Forumseintrag ist die entscheidende Passage:
Mit neuer Firmware muss man unter: /boot/config.txt folgenden Eintrag ergänzen:
dtoverlay=w1-gpio,gpiopin=4,pullup=on
Als ich das gemacht hatte, wurde der Sensor (nach einem Reboot) bei mir erkannt und ich konnte damit die gemessene Temperatur auslesen.
Dann hatte ich noch ein größeres Problem. Ok, die Temperatur wurde nun gemessen, aber das Script wollte nicht das tun, was es sollte.
Es wurde einfach keine Warn-Email verschickt.
Ok, jetzt bin ich nicht der Shell-Guru. Aber nachdem ich mir das Script etwas länger und genauer angeschaut habe, bin ich (für mich) zu dem Schluss gekommen, dass die Bedingungen in der If-Then-Else-Schleife falsch bzw. vertauscht angegeben waren und habe diese nun einfach mal „umgedreht“.
Und was soll ich sagen? Nach dieser „Drehung“ funktioniert das Script bei mir tadellos und tut das, was es soll. Meine Version des Script schaut jetzt so aus:
#!/bin/sh
# Variablen-Definitionen
# Temperaturen
tempok=30
tempfile="/home/pi/temp.txt"
tempfile2="/home/pi/temp_zu_hoch.txt"
# Datum
d=`date +%Y-%m-%d-%H-%M`
d2=`date +%Y-%m-%d`
# Mailversand
subject="!!!!! WARNUNG !!!!! TEMPERATUR IM SERVERRAUM KRITISCH!"
email="markus@ostermeier.net"
emailmessage="/home/pi/tempmail.txt"
# Temperatur auslesen, bewerten und reagieren
temp=`echo "scale=0; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000007741036/w1_slave | awk -F't=' '{print $2}')/1000" | bc -l`
if [ $temp -ge $tempok ]
then
# Nur Mail versenden, wenn nicht bereits eine Mail an diesem Tag verschickt wurde!
grep -i $d2 $tempfile2
if [ $? -eq 0 ]
then
# Logdatei befuellen
echo "$d -- T=$temp" >> $tempfile2
# Inhalt der Mail erstellen und in emailmessage.txt zwischenspeichern
echo "!!ACHTUNG!! Die kritische Temperatur von 30 Grad im Serverraum wurde ueberschritten!" >>$emailmessage
echo " " >> $emailmessage
echo "Ein Ausfall der Klimaanlage bei einer Raumtemperatur von T=$temp Grad Celsius ist wahrscheinlich." >>$emailmessage
echo " " >> $emailmessage
echo "Bitte Klimatisierung pruefen und ggf. Server herunterfahren!" >> $emailmessage
echo " " >> $emailmessage
echo " " >> $emailmessage
echo "Beste Gruesse, der Severraum" >> $emailmessage
# emailmessage verschicken
mail -s "$subject" "$email" < $emailmessage
# temporäre emailmessege.txt löschen
rm $emailmessage
else
echo "$d -- T=$temp" >> $tempfile2
fi
else
echo "$d -- T=$temp" >> $tempfile
fi