|
Größe: 2786
Kommentar:
|
← Revision 6 vom 2022-03-20 22:16:53 ⇥
Größe: 5654
Kommentar: python script
|
| Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
| Zeile 1: | Zeile 1: |
| <<TableOfContents(3)>> | |
| Zeile 6: | Zeile 7: |
| == per Onewire mit digitemp = | == per Onewire mit digitemp == |
| Zeile 8: | Zeile 9: |
| digitemp.sh | === digitemp.sh === |
| Zeile 10: | Zeile 11: |
| /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 | /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 |
| Zeile 13: | Zeile 14: |
| ztempertur.gnuplot.sh | === ztemperatur.gnuplot.sh === Wird alle fünf Minuten mit systemd aufgerufen. |
| Zeile 28: | Zeile 32: |
| set title "Temperatur in den Luftverteilern $(date +%a-%F-%H\:%M)" | set title "Temperatur in den Luftverteilern $(date +%a-%F-%H\:%M)" |
| Zeile 33: | Zeile 37: |
| 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" |
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" |
| Zeile 48: | Zeile 52: |
Webseite erstellen, es werden die Grafiken der letzten Tage angezeigt. |
=== ztemperatur.htmlpage.sh === Die Webseite wird einmal pro Tag erstellt, es werden die Grafiken der letzten Tage angezeigt. |
| Zeile 56: | Zeile 59: |
| <META NAME="DATE" CONTENT="`date '+%Y-%m-%d'`"> <META TITLE="Aktuelle Temperaturen `date '+%Y-%m-%d'`"> <meta http-equiv="refresh" content="150" > |
<META NAME="DATE" CONTENT="`date '+%Y-%m-%d'`"> <META TITLE="Aktuelle Temperaturen `date '+%Y-%m-%d'`"> <meta http-equiv="refresh" content="150" > |
| Zeile 65: | Zeile 68: |
| <img src="ztemperatur$(date --iso).png" alt="Temperatur"> | <img src="ztemperatur$(date --iso).png" alt="Temperatur"> |
| Zeile 70: | Zeile 73: |
| <img src="ztemperatur$(date --date="yesterday" +%Y-%m-%d).png" alt="Temperatur"> | <img src="ztemperatur$(date --date="yesterday" +%Y-%m-%d).png" alt="Temperatur"> |
| Zeile 75: | Zeile 78: |
| <img src="ztemperatur$(date --date="2 days ago" +%Y-%m-%d).png" alt="Temperatur"> | <img src="ztemperatur$(date --date="2 days ago" +%Y-%m-%d).png" alt="Temperatur"> |
| Zeile 80: | Zeile 83: |
| <img src="ztemperatur$(date --date="3 days ago" +%Y-%m-%d).png" alt="Temperatur"> | <img src="ztemperatur$(date --date="3 days ago" +%Y-%m-%d).png" alt="Temperatur"> |
| Zeile 85: | Zeile 88: |
| <img src="ztemperatur$(date --date="4 days ago" +%Y-%m-%d).png" alt="Temperatur"> | <img src="ztemperatur$(date --date="4 days ago" +%Y-%m-%d).png" alt="Temperatur"> |
| Zeile 97: | Zeile 100: |
| {https://www.fee-owl.de/download/220305_html.png} | {{https://www.fee-owl.de/download/220305_html.png}} |
| Zeile 100: | Zeile 103: |
| == per Funk mit Jeelink == | |
| Zeile 101: | Zeile 105: |
| == 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 |
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
