Commentum

Der Einfall, die Lüge, die Erdichtung

Scripte zur Erstellung und Aktualisierung der Website

Mit diesem Shellscript wird die RRD-Datenbank erzeugt:


Dieses Script liest die Daten des DS18B20 (Bodentemperatur) und des DHT22 (Lufttemperatur und Luftfeuchtigkeit) aus und schreibt die Daten in die RRD:

#!/bin/bash
rrdtool create keller.rrd DS:bodentemp:GAUGE:600:U:U DS:lufttemp:GAUGE:600:U:U \
DS:feucht:GAUGE:600:U:U RRA:AVERAGE:0.5:1:5040 RRA:AVERAGE:0.5:12:9600

Ein weiteres Script liest die Daten aus dem DS18B20 und dem DHT22 aus und erzeugt eine Textdatei mit den Werten:

#! /bin/bash
# Temperatur des DS18B20  auslesen
tempread=`cat /sys/bus/w1/devices/28-000009fccbb0/w1_slave`
# Formatieren des Wertes
temp1=`echo "scale=2; "\`echo ${tempread##*=}\`" / 1000" | bc`
# Ausgabe in Datei
ds18b20log="/home/pi/Share/temphum/ds18b20"
echo "Die gemessene Temperatur (erste Messung) beträgt" $temp1 "°C"
counter="0"
# Sollte eine unsinnige Temperatur gemeldet werden wird bis zum Erfassen
# stimmiger Werte eine Schleife durchlaufen
while [ $temp1 = "-.06"  ]; do
        sleep 2
        tempread=`cat /sys/bus/w1/devices/28-000009fccbb0/w1_slave`
        echo "Leseergebnis: "$tempread
# Binary Count (bc) muß installiert sein
        temp1=`echo "scale=2; "\`echo ${tempread##*=}\`" / 1000" | bc`
        echo "Bereinigt: "$temp1
        counter=$[ counter + 1 ]
        echo "Versuch Nummer: "$counter
        echo "Temperatur: "$temp1
done
echo "Die gemessene Temperatur beträgt bereinigt:" $temp1 "°C" >> $ds18b20log
# Temperatur und Luftfeuchtigkeit des DHT22 auslesen
# Hierzu wird das Python-Programm DHT22.py verwendet und dessen Ausgabe eingelesen
python dht22.py 22 4
# Ausgabe von dht22.py einlesen
dht22log="/home/pi/Share/temphum/dht22log"
# Nun díe Lufttemperatur für die RRD
read line < $dht22log
temp2="${line:11:4}"
echo "Lufttemperatur: "$temp2
# Nun noch die Luftfeuchtigkeit
hum="${line:35:4}"
echo "Luftfeuchtigkeit: "$hum
# die Werte werden an die RRD übertragen
/usr/bin/rrdtool update /home/pi/Share/temphum/keller.rrd N:$temp1:$temp1:$hum
#


Hier das Script zum Update der RRD-Datenbank und der entsprechenden Grafiken:

#!/bin/bash
# Zuerst die RRD-DB updaten
#
# Schreibe Logfile/Status

echo "Status: = N" > updatetemp.log
python /home/pi/Share/Temperaturen/Temperaturauslesen.py
# Wenn die Dateien die RRD  eingetragen sind können die Grafiken erneuert werden 
sleep 5
# 5-Minutengrafik
rrdtool graph /home/pi/Share/Temperaturen/5min.png -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff \
--start 'now -5 minute'  --title "Kellertemperatur, 5 Minuten" --vertical-label "Grad Celsius" -w 500 -h 200  \
DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE \
LINE2:temp0#0000FF:"Bodentemperatur" \
DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE \
VDEF:temp0last=temp0,LAST \
  "GPRINT:temp0last:%.1lf °C" \
LINE2:temp1#ff0000:"Lufttemperatur" \
VDEF:temp1last=temp1,LAST \
  "GPRINT:temp1last:%.1lf °C" \
#DEF:temp0max=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:MAX \
#DEF:temp0min=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:MIN \
#LINE2:temp0max#fefefd:"Boden, Maximum" \
#LINE2:temp0min#fdfefe:"Boden, Minimum"
sleep 2
# 30-Minutengrafik
rrdtool graph /home/pi/Share/Temperaturen/30min.png -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff \
--start 'now -30 minute'  --title "Kellertemperatur, 30 Minuten" --vertical-label "Grad Celsius" -w 500 -h 200  \
DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE \
LINE2:temp0#0000FF:"Bodentemperatur" \
VDEF:temp0last=temp0,LAST \
 "GPRINT:temp0last:%.1lf °C" \
DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE \
LINE2:temp1#ff0000:"Lufttemperatur" \
VDEF:temp1last=temp1,LAST \
  "GPRINT:temp1last:%.1lf °C"
# 60-Minutengrafik
sleep 2
rrdtool graph /home/pi/Share/Temperaturen/60min.png -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff \
--start 'now -1 hour'  --title "Kelleremperatur, 1 Stunde" --vertical-label "Grad Celsius" -w 500 -h 200  \
DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE \
LINE2:temp0#0000FF:"Bodentemperatur" \
VDEF:temp0last=temp0,LAST \
  "GPRINT:temp0last:%.1lf °C" \
# 12 Stundengrafik
sleep 2
rrdtool graph /home/pi/Share/Temperaturen/12stunden.png -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff \
--start 'now -12 hour'  --title "Kellerttemperatur, 12 Stunden" --vertical-label "Grad Celsius" -w 500 -h 200  \
DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE \
LINE2:temp0#0000FF:"Bodentemperatur" \
DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE \
LINE2:temp1#ff0000:"Lufttemperatur"
# 24 Stundengrafik
sleep 2
/usr/bin/rrdtool graph /home/pi/Share/Temperaturen/24stunden.png\
  -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff\
  --vertical-label "Grad Celsius"\
  --start 'now -24 hour'  --title "Kelleremperatur, 24 Stunden" --vertical-label "Grad Celsius" -w 500 -h 200\
  DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE\
  LINE2:temp0#0000FF:Bodentemperatur\
  DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE\
  LINE2:temp1#ff0000:Lufttemperatur
sleep 2
# 72 Stundengrafik
/usr/bin/rrdtool graph /home/pi/Share/Temperaturen/72stunden.png\
  -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff\
  --title "Kellertemperatur, 72 Stunden"  --vertical-label "Grad Celsius"  -w 500 -h 200\
  -s 'now - 72 hour' -e 'now'\
  DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE\
  LINE2:temp0#0000FF:"Bodenttemperatur"\
  DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE\
  LINE2:temp1#ff0000:"Lufttemperatur"
sleep 2
# Wochengrafik
/usr/bin/rrdtool graph  /home/pi/Share/Temperaturen/woche.png\
  -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff\
  --start 'now -1 week' -e 'now'  --title "Kellertemperatur, Woche"\
  --vertical-label "Grad Celsius" -w 500 -h 200\
  DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE\
  LINE2:temp0#0000FF:"Bodentemperatur"\
  DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE\
  LINE2:temp1#ff0000:"Lufttemperatur"
sleep 2
# Monatsgrafik
/usr/bin/rrdtool graph /home/pi/Share/Temperaturen/monat.png\
  -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff \
  --start 'now -1 month' -e 'now' --title "Kellertemperatur, Monat"\
  --vertical-label "Grad Celsius" -w 500 -h 200\
  DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE\
  LINE2:temp0#0000FF:"Bodentemperatur"\
  DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE\
  LINE2:temp1#ff0000:"Lufttemperatur"
sleep 2
# Jahresgrafik
/usr/bin/rrdtool graph /home/pi/Share/Temperaturen/jahr.png\
  -c GRID#0000FF -c BACK#CCEEFF -c SHADEA#ffffff -c SHADEB#ffffff\
  --start 'now -1 year' -e 'now' --title "Kellertemperatur, Jahr"\
  --vertical-label "Grad Celsius" -w 500 -h 200\
  DEF:temp0=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp0:AVERAGE\
  LINE2:temp0#0000FF:"Bodentemperatur"\
  DEF:temp1=/home/pi/Share/Temperaturen/TemperaturAufzeichnung.rrd:temp1:AVERAGE\
  LINE2:temp1#ff0000:"Lufttemperatur"
# Nun ab ins Netz
sleep 2
python /home/pi/Share/Temperaturen/sendetempdaten.py
# So müsste es gehen


Hier das Script zur Übermittlung der Sensordaten an den Webserver:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import sys
import time
import pysftp
import paramiko
import datetime
import smtplib
import string
import os
#import email.MIMEImage.MIMEImage
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from paramiko.py3compat import input
# Setze die Protokolldatei auf
paramiko.util.log_to_file("/home/pi/Share/Temperaturen/log/Temperaturdaten_Senden.log")
# Schalte HOSTS aus
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
srv = pysftp.Connection(host="Dein Hostname", username="Dein Benutzername",password="Dein Passwort",cnopts=cnopts,log="Kellertemp.$
logfile="/home/pi/Share/Temperaturen/log/Temperatursenden_FTP.log"
logout=open(logfile,"a")
zeitpunkt=time.strftime("%d.%m.%Y um %H:%M:%S Uhr")
print(zeitpunkt)
with srv.cd('/home/www/public_html/Keller'): # Wechsele in das Webverzeichnis für die HTML-Datei
# Zuerst das HTML-File
     datei1="temp.html"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/temp.html') # Lade die neue HTML-Datei in das Webverzeichnis
     if ( not srv.exists(datei1)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei1)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei1)
         logout.write(zeitpunkt + "\n")
# Nun die 5-Minuten-Grafik
     datei2="5min.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/5min.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei2)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei2)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei2)
         logout.write(zeitpunkt + "\n")
     datei3="30min.png"
     liste=srv.listdir()
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/30min.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei3)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei3)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei3)
         logout.write(zeitpunkt + "\n")
# Es folgt die 30-Minuten-Grafik
     datei3="30min.png"
     liste=srv.listdir()
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/30min.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei3)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei3)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei3)
         logout.write(zeitpunkt + "\n")
# Nun auch die Stundengrafik
     datei4="60min.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/60min.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei4)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei4)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei4)
         logout.write(zeitpunkt + "\n")
# Die 12 Stundengrafik kommt als nächstes dran
     datei5="12stunden.png"
     liste=srv.listdir()
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/12stunden.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei5)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei5)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei5)
         logout.write(zeitpunkt + "\n")
# Und nun der Tag
     datei6="24stunden.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/24stunden.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei6)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei6)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei6)
         logout.write(zeitpunkt + "\n")
# Die 3-Tage-Ansicht
     datei7="72stunden.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/72stunden.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei7)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei7)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei7)
         logout.write(zeitpunkt + "\n")
# Die Wochenansicht
     datei8="woche.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/woche.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei8)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei8)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei8)
         logout.write(zeitpunkt + "\n")
# Die Monatsansicht
     datei9="monat.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/monat.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei9)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei9)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei9)
         logout.write(zeitpunkt + "\n")
# Die Jahreansicht
     datei10="jahr.png"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/jahr.png') # Lade die neue PNG-Datei in das Webverzeichnis
     if ( not srv.exists(datei10)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei10)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei10)
         logout.write(zeitpunkt + "\n")
# Und zur Vorsicht noch das CSS
     datei11="style.css"
     liste=srv.listdir()
     print (liste)
     print("Starte den Transfer.")
     srv.put('/home/pi/Share/Temperaturen/style.css') # Lade die neue CSS-Datei in das Webverzeichnis
     if ( not srv.exists(datei11)):
         print("Fehler: %s Datei wurde nicht übertragen!" % datei11)
         logout.write(zeitpunkt + "\n")
     else:
         print("Datei %s übertragen!" % datei11)
         logout.write(zeitpunkt + "\n")
     srv.put('/home/pi/Share/Temperaturen/style.css') # Lade die neue CSS-Datei in das Webverzeichnis
# Schließe die Verbindung
srv.close()


Dieses kleine PHP-Script erzeugt mit dem Aufruf eines BASH-Scripts die Fotos und mit der Ausführung eines Python-Scripts die Übertragung auf den Webserver:

<?php
// Hier wird das aktuelle Foto erstellt
        exec('/home/pi/Share/Kellercam/Kellerfoto.sh');
// Und nun wird die Übertagung auf den Webserver gestartet
        exec('python /home/pi/Share/Kellercam/sendefoto.py');
// Eine Aktualisierung der HTML-Seite erfolgt ja bereits über
// die Übertragung der Temperaturen

?>


Script zur Erstellung der Analog-Thermometerfotos
BASH-Script für die Erstellung der Fotos des Analogthermometers.
Kellerfoto.sh (1.55KB)
Script zur Erstellung der Analog-Thermometerfotos
BASH-Script für die Erstellung der Fotos des Analogthermometers.
Kellerfoto.sh (1.55KB)


Fotoversand
Python-Programm zum Versand der Analogdaten auf den Webserver
sendefoto.py (1.44KB)
Fotoversand
Python-Programm zum Versand der Analogdaten auf den Webserver
sendefoto.py (1.44KB)


Zurück zu BUFOVIRIDIS
E-Mail
Infos