Unterschiede zwischen den Revisionen 1 und 6 (über 5 Versionen hinweg)
Revision 1 vom 2022-03-05 13:35:38
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&quot;%y%m%d %H:%M:%S Sensor %s %R C: %.2C&quot; -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 &quot;Temperatur in den Luftverteilern $(date +%a-%F-%H\:%M)&quot;
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 &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;
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=&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; >
Zeile 65: Zeile 68:
      <img src="ztemperatur$(date --iso).png" alt="Temperatur">       <img src=&quot;ztemperatur$(date --iso).png&quot; alt=&quot;Temperatur&quot;>
Zeile 70: Zeile 73:
      <img src="ztemperatur$(date --date="yesterday" +%Y-%m-%d).png" alt="Temperatur">       <img src=&quot;ztemperatur$(date --date=&quot;yesterday&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
Zeile 75: Zeile 78:
      <img src="ztemperatur$(date --date="2 days ago" +%Y-%m-%d).png" alt="Temperatur">       <img src=&quot;ztemperatur$(date --date=&quot;2 days ago&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
Zeile 80: Zeile 83:
      <img src="ztemperatur$(date --date="3 days ago" +%Y-%m-%d).png" alt="Temperatur">       <img src=&quot;ztemperatur$(date --date=&quot;3 days ago&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
Zeile 85: Zeile 88:
      <img src="ztemperatur$(date --date="4 days ago" +%Y-%m-%d).png" alt="Temperatur">       <img src=&quot;ztemperatur$(date --date=&quot;4 days ago&quot; +%Y-%m-%d).png&quot; alt=&quot;Temperatur&quot;>
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

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&quot;%y%m%d %H:%M:%S Sensor %s %R C: %.2C&quot;   -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