Hallo zusammen,
Ich habe einen Raspberry mit der Überwachung diverser Klimadaten im Schwiegerväterlichen Gewächshaus betraut.
Zur erfassung der Innen-/Außentemperatur und -Feuchte setze ich DHT11 ein die je über ca. 2m Litze verdrahtet sind.
Folgende Zeile in der /etc/crontab startet jede Minute ein Script welches die Klimadaten "einsammelt":
Das Script sieht wie folgt aus:
#!/bin/bash
# Pfad der Datei: /home/pi/Scripte/GetKlimadaten_rrd.sh
# Script zum auslesen der Schaltschranktemperatur des Greenhouse-PI
# Daten Werden in RRD-Datenbank abgelegt
# DaZeller 20150818 Script erstellt
# DaZeller 20150829 Auslesen der Außentemperatur/Feuchte ergänzt
# DaZeller 20150830 Parallelausgabe in 5min RRD-Datenbank eingerichtet
# Aktuellen zeitpunkt in variable speichern
Zeitpunkt=$(date '+%d.%m.%Y %H:%M:%S')
# variablen mit 'U' initialiseren, so dass dies bei nicht vorhandenen neuwerten in RRD geschrieben wird
# ('U' steht in RRD-Datebank für Undefiniert)
InsideTemp='U'
InsideHum='U'
HousingTemp='U'
RaspberryTemp='U'
OutsideTemp='U'
OutsideHum='U'
GroundTemp='U'
Dummy1='U'
Dummy2='U'
Dummy3='U'
# Im Skript den Ordner wechseln und die Temperaturdaten auslesen
cd /home/pi/adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/
ErrCnt=0
while true; do
WERTE=$(sudo ./Adafruit_DHT 11 23 | grep 'Hum')
[[ ! -z "$WERTE" ]] && break
echo "Konnte keine Innenwerte auslesen, Wiederholung in 2 Sekunden"
sleep 2
(( ErrCnt++ )) # Incrementiert den Fehlerzähler um dei Anzahl der fehlgeschlagenen versuche zu ermitteln
done
InsideTemp=( $(echo $WERTE | awk '{print $3}'))
InsideHum=( $(echo $WERTE | awk '{print $7}'))
cd ~
echo $InsideTemp > /var/www/Messwerte/InsideTemp.txt
echo $InsideHum > /var/www/Messwerte/InsideHum.txt
# Aktuelle Schaltschranktemperatur leesen und herausfiltern
temp=$(cat /sys/devices/w1_bus_master1/28-0000064a0e56/w1_slave | grep t= | cut -d "=" -f 2)
# Normierung der Temperatur auf °C mit einer Nachkommastelle
HousingTemp=$(LC_ALL=C printf "%.1f" $(echo "scale=2;(($temp / 1000)+0.05)" | bc))
echo $HousingTemp > /var/www/Messwerte/HousingTemp.txt
# Die Temperatur des Raspberry-Pi auslesen
RaspberryTemp=$(vcgencmd measure_temp | cut -d "=" -f 2 | cut -d "'" -f 1)
echo $RaspberryTemp > /var/www/Messwerte/RaspberryTemp.txt
# Im Skript den Ordner wechseln und die Temperaturdaten auslesen
cd /home/pi/adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/
OutsideErrCnt=0
while true; do
WERTE=$(sudo ./Adafruit_DHT 11 22 | grep 'Hum')
[[ ! -z "$WERTE" ]] && break
echo "Konnte keine Außenwerte auslesen, Wiederholung in 2 Sekunden"
sleep 2
(( OutsideErrCnt++ )) # Incrementiert den Fehlerzähler um dei Anzahl der fehlgeschlagenen versuche zu ermitteln
done
OutsideTemp=( $(echo $WERTE | awk '{print $3}'))
OutsideHum=( $(echo $WERTE | awk '{print $7}'))
cd ~
echo $OutsideTemp > /var/www/Messwerte/OutsideTemp.txt
echo $OutsideHum > /var/www/Messwerte/OutsideHum.txt
rrdtool update Messwerte/Klimadaten.rrd N:$InsideTemp:$InsideHum:$HousingTemp:$RaspberryTemp:$OutsideTemp:$OutsideHum:$GroundTemp:$Dummy1:$Dummy2:$Dummy3
rrdtool update Messwerte/Klimadaten_5min.rrd N:$InsideTemp:$InsideHum:$HousingTemp:$RaspberryTemp:$OutsideTemp:$OutsideHum:$GroundTemp:$Dummy1:$Dummy2:$Dummy3
echo $Zeitpunkt $InsideTemp $InsideHum ErrCnt: $ErrCnt $HousingTemp $RaspberryTemp $OutsideErrCnt $OutsideTemp$OutsideHum >> GetKlimadaten_rrd.log
echo $Zeitpunkt > /var/www/Messwerte/LastUpdate.txt
Alles anzeigen
Bitte verzeiht, wenn das Script etwas diletantisch ausgeführt ist... Ich versuche dazu zu lernen und mich zu verbessern.
Eigentlich geht es ja aus dem Script hervor, um jedoch unklarheiten vorzubeugen, ich verwende den "Adafruit_DHT_Driver" zum lesen der DHTs.
So, zum Problem:
Schon als nur ein DHT in betrieb war gab es immer mal wieder den Fall, das es innerhalb einer Minute kein ordentlicher Wert ausgelesen werden konnte. Seid jetzt der zweite DHT auch noch in betrieb ist, bekomme ich nur noch alle paar Minuten mal einen Wert ausgelesen.
...Hat jemand von euch evtl. eine Idee woran das liegen könte bzw. was ich dagegen tun könnte?
Zur verdeutlichung hänge ich mal noch einen Graphen an auf dem man gut die Lücken (da wo keine Werte gelesen werden konnten) erkennen kann.
Auf dem zweiten Bild erkennt man, in welchem Verhältniss "gute Werte" / "keine Werte" stehen.
Ich freue mich auf eure Hinweise, Vorschläge und Anregungen.
Vielen Dank vorab und viele Grüße
DaZeller