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>
EOFErgebnis:
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
