<> = 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. {{{ #!/bin/bash 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. {{{ #!/bin/sh # holt die letzten Temperaturwerte und stellt Sie auf den Webserver. cat < /var/www/html/ztemperatur.html
"Temperatur"
"Temperatur"
"Temperatur"
"Temperatur"
"Temperatur"
EOF }}} Ergebnis: {{https://www.fee-owl.de/download/220305_html.png}} == per Funk mit Jeelink == === funkdaten_sammeln.sh === {{{ #!/bin/sh $HOME/bin/lacrosse_loggerd.py >> $HOME/log/funkdaten.log }}} === lacrosse_loggerd.py === {{{ #!/usr/bin/python3 """ 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