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 &quot;Temperatur in den Luftverteilern  $(date +%a-%F-%H\:%M)&quot;
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 &quot;%H:%M:$S&quot;  # The dates in the file look like 2007-05-07
set format x &quot;%H:%M&quot;       # On the x-axis, we want tics like 12:00
#set xlabel &quot;Temperatur-Messwerte vom $(date --iso)&quot;
#set ylabel &quot;Relative Feuchte in Prozent&quot;
set y2label &quot;Temperatur in Celsius Zuluft, Abluft&quot;
set out &quot;/var/www/html/ztemperatur$(date --iso).png&quot;
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=&quot;DATE&quot; CONTENT=&quot;`date '+%Y-%m-%d'`&quot;>
<META TITLE=&quot;Aktuelle Temperaturen `date '+%Y-%m-%d'`&quot;>
<meta http-equiv=&quot;refresh&quot; content=&quot;150&quot; > 

<html>
  <body>
<table>
  <tr>
    <td>
      <img src=&quot;ztemperatur$(date --iso).png&quot; alt=&quot;Temperatur&quot;>
    </td>
  </tr>
  <tr>
    <td>
      <img src=&quot;ztemperatur$(date --date=&quot;yesterday&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
    </td>
  </tr>
  <tr>
    <td>
      <img src=&quot;ztemperatur$(date --date=&quot;2 days ago&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
    </td>
  </tr>
  <tr>
    <td>
      <img src=&quot;ztemperatur$(date --date=&quot;3 days ago&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
    </td>
  </tr>
  <tr>
    <td>
      <img src=&quot;ztemperatur$(date --date=&quot;4 days ago&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
    </td>
  </tr>
</table>
</body>
</html>

EOF

Ergebnis:

https://www.fee-owl.de/download/220305_html.png

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

KurtGramlich/TemperaturDatenErfassen (zuletzt geändert am 2022-03-20 22:16:53 durch KurtGramlich)

Alle Inhalte in diesem Wiki stehen unter der Creative Commons SA 4.0 DE Lizenz