nabend
ich mache alles mit einem Raspberry PI2: auswerten, speichern und Anzeige (also Webserver)
Die Ansteuerung der Schaltung mache ich über einen Python Script
hier mein Script (nicht schön aber selten und wird immer besser

)
Code: Alles auswählen
#!/usr/bin/python
import time
import logging
import RPi.GPIO as GPIO
GPIO_PIN1 = 17
NAME_PIN1 = "Met1"
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN1, GPIO.IN)
co2counter = 0
zeit_org = time.time()
zeit_div_wait = 1
zeit_delta1 = time.time()
zeit_delta2 = time.time()
zeit_delta3 = time.time()
zeit_delta4 = time.time()
zeit_delta5 = time.time()
zeit_temp2 = 0
errcounter = 0
tempfile = open ("/sys/bus/w1/devices/28-0315728b5eff/w1_slave")
tempread = tempfile.read()
tempfile.close()
tempdata = tempread.split("\n")[1].split(" ")[9]
temperature = float(tempdata[2:])
temperature = temperature / 1000
#Endlosschleife
while True:
while GPIO.input(GPIO_PIN1) == GPIO.LOW:
zeit = time.time()
time.sleep(0.001)
zeit_temp1 = time.strftime('%M', time.localtime(zeit))
if zeit_temp1 != zeit_temp2:
fout = open("/var/www/dimple/data/met.csv","a")
zeit_chart = time.strftime('%Y-%m-%d %H:%M', time.localtime(zeit))
fout.write(zeit_chart + "," + str(NAME_PIN1) + ","+ str(co2counter) + "," + str(round(temperature,1)) + '\n')
co2counter = 0
zeit_temp2 = time.strftime('%M', time.localtime(zeit))
fout.close()
zeit = time.time()
if zeit > (zeit_org + zeit_div_wait):
co2counter += 1
tempfile = open ("/sys/bus/w1/devices/28-0315728b5eff/w1_slave")
tempread = tempfile.read()
tempfile.close()
tempdata = tempread.split("\n")[1].split(" ")[9]
temperature = float(tempdata[2:])
temperature = temperature / 1000
# letzte 5 Zeiten
zeit_delta_temp = zeit_delta5
zeit_delta5 = zeit_delta4
zeit_delta4 = zeit_delta3
zeit_delta3 = zeit_delta2
zeit_delta2 = zeit_delta1
zeit_delta1 = time.time()
# halber mittelwert der letzten 5 Zeiten
zeit_delta = (zeit_delta1 - zeit_delta_temp)
zeit_div_wait = int((zeit_delta / 5) / 4)
zeit_div_wait_out = zeit_div_wait * 4
if zeit_div_wait > 60:
zeit_div_wait = 60
zeit_org = time.time()
fout2 = open("/var/www/dimple/data/last_blubb.txt","w")
fout2.write("aktuelle Temperatur: " + str(round(temperature,1)) + ' Grad Celsius\n')
fout2.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit_delta1))+'\n')
fout2.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit_delta2))+'\n')
fout2.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit_delta3))+'\n')
fout2.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit_delta4))+'\n')
fout2.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit_delta5))+'\n')
fout2.write("Durchschnittszeit letzte 5 Aktivitaeten: " + str(zeit_div_wait_out) + " Sekunden\n")
fout2.close()
Hier werden die Blubbs pro Minute gesammelt und dann in eine CSV geschrieben.
Um nicht so extreme Fehlwerte beim Schwenken zu bekommen, protokolliere ich nur blubbs, die nach frühestens 1/4 der Durchschnittszeit der letzten 5 Blubbs kommen (aber nicht über 60 Sekunden)
Und ich müsste die letzten 5 Aktivitäten mal als Array machen.
Interessant wird es beim zweiten Ansatz. Da ich dann über den gesamten Verlauf protokollieren kann und dann auch besser die Scripte optimieren kann.
Logische und technische Verbesserungsvorschläge werden gerne angenommen.