Inhaltsverzeichnis
Hier meine Scripte zur Erfassung der Temperatur im Passivhaus
Mein Ziel ist dabe, keine überdimensionalen Software Pakete zu nutzen, sondern möglichst minimal mit wenig Aufwand auszukommen.
per Onewire mit digitemp
digitemp.sh
/usr/bin/digitemp_DS9097 -l /home/debian/log/temperature -o"%y%m%d %H:%M:%S Sensor %s %R C: %.2C" -c /home/debian/.digitemprc -a -s /dev/ttyUSB0
ztemperatur.gnuplot.sh
Wird alle fünf Minuten mit systemd aufgerufen.
cd /home/debian/log DATUM=$(date +%y%m%d) grep $DATUM temperature | grep 1060465500080062 > ZULUFT_DATA grep $DATUM temperature | grep 1036BE8E020800BC > ABLUFT_DATA ZULUFTLAST=$(tail -1 ZULUFT_DATA | awk '{print $7}') ABLUFTLAST=$(tail -1 ABLUFT_DATA | awk '{print $7}') gnuplot << Gnuplot-Ende set title "Temperatur in den Luftverteilern $(date +%a-%F-%H\:%M)" set terminal png medium size 1000,540 # Ausgabeformat png set grid # Gitter anzeigen set key bottom left # Legende links unten set xdata time # The x axis data is time set timefmt "%H:%M:$S" # The dates in the file look like 2007-05-07 set format x "%H:%M" # On the x-axis, we want tics like 12:00 #set xlabel "Temperatur-Messwerte vom $(date --iso)" #set ylabel "Relative Feuchte in Prozent" set y2label "Temperatur in Celsius Zuluft, Abluft" set out "/var/www/html/ztemperatur$(date --iso).png" plot [] [15:35] \ 'ZULUFT_DATA' using 2:7 axes x1y1 with lines lw 2.5 lt 4 title '$ZULUFTLAST Zuluft Temperatur in C ', \ 'ABLUFT_DATA' using 2:7 axes x1y1 with lines lw 2.5 lt 1 title '$ABLUFTLAST Abluft Temperatur in C ' Gnuplot-Ende exit
ztemperatur.htmlpage.sh
Die Webseite wird einmal pro Tag erstellt, es werden die Grafiken der letzten Tage angezeigt.
# holt die letzten Temperaturwerte und stellt Sie auf den Webserver. cat <<EOF > /var/www/html/ztemperatur.html <META NAME="DATE" CONTENT="`date '+%Y-%m-%d'`"> <META TITLE="Aktuelle Temperaturen `date '+%Y-%m-%d'`"> <meta http-equiv="refresh" content="150" > <html> <body> <table> <tr> <td> <img src="ztemperatur$(date --iso).png" alt="Temperatur"> </td> </tr> <tr> <td> <img src="ztemperatur$(date --date="yesterday" +%Y-%m-%d).png" alt="Temperatur"> </td> </tr> <tr> <td> <img src="ztemperatur$(date --date="2 days ago" +%Y-%m-%d).png" alt="Temperatur"> </td> </tr> <tr> <td> <img src="ztemperatur$(date --date="3 days ago" +%Y-%m-%d).png" alt="Temperatur"> </td> </tr> <tr> <td> <img src="ztemperatur$(date --date="4 days ago" +%Y-%m-%d).png" alt="Temperatur"> </td> </tr> </table> </body> </html> EOF
Ergebnis:
per Funk mit Jeelink
funkdaten_sammeln.sh
$HOME/bin/lacrosse_loggerd.py >> $HOME/log/funkdaten.log
lacrosse_loggerd.py
""" logger for lacrosse temperature sensors """ import sys import serial import datetime BAUDRATE = 57600 PORT = '/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AJ02W97M-if00-port0' MAXLINES = 10 # diese Zeile entscheidet über die Laufzeit # Wenn neue Sensoren abgefragt werden, muss die Zeilenzahl erhört werden # ----------------------------------------------------------------------------- def get_values(time, int_list2): time=datetime.datetime.now().strftime("%y%m%d %H:%M") sensorID = int_list2[0] hexSensorID = ("{0:2X}").format(sensorID) batNew = bool((int_list2[1]&128)>>7) batWeak = bool((int_list2[4]&128)>>7) sensorType = int_list2[1]%127 temp = float(int_list2[2]*256+int_list2[3]-1000)/10 if int_list2[4]%127 != 106: humidity = int_list2[4]%127 else: humidity = 0 return time + " {id:02X} {id:2d} {type:1d} {temp:2.1f} {humidity:2d} {batNew:1d} {batWeak:1d}".format(id=sensorID, type=sensorType, temp=temp, humidity=humidity, batNew=batNew, batWeak=batWeak) #return(hexSensorID, sensorID, sensorType, temp, humidity, batNew, batWeak) # ----------------------------------------------------------------------------- def read_lacrosse(): """get laCrosse sensor ids from jeelink usb stick""" ser = serial.Serial(PORT, BAUDRATE) for _ in range(MAXLINES): sensordata1 = ser.readline().decode() sensordata = sensordata1.splitlines()[0] if "OK 9" in sensordata: stringvalue = sensordata.split(" ", 9) int_list = [int(s) for s in stringvalue[2:]] if len(int_list) == 5: print(get_values(datetime.date.today(), int_list)) sys.stdout.flush() elif sensordata != '': print(sensordata) # print('(Datum, Uhrzeit, sensorIDhex, sensorID, sensorType, temp, humidity, batNew, batWeak)') return # ----------------------------------------------------------------------------- if __name__ == '__main__': try: read_lacrosse() except KeyboardInterrupt: print("\nWarning: Program terminated by keyboard interrupt.") sys.exit(0)
systemd service statt crontab
in Arbeit