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 ?>
|