ist hier threading sinnvoll?
Verfasst: Mittwoch 20. Dezember 2017, 10:58
Hallo Zusammen,
ich stehe mal wieder vor dem Problem, das ich eine Lösung für ein Problem gefunden habe, jedoch ich mir nicht sicher bin, ob der Ansatz sinnvoll ist. Vielleicht gibt es einen besseren weg?
Szenario:
thread 1: liest alle 15min Sensor (datum, Temperatur und Luftfeuchtigkeit) am Pi aus und schreibt Messdaten in Datei
thread 2: liest alle 60sec den Sensor aus, wenn die Werte kritisch sind, wird ein Plot erstellt und dieser per Mail versendet.
thread 3: erstellt immer am letzten Tag des Monats einen Graphen des Monates und versendet diesen per Mail
Problem:
Wenn ich thread 1 und 2 starte, misst er mir zwar alle 15min, jedoch 3-6 mal im Abstand von paar Sekunden. Wenn thread 1 alleine läuft, geht alles gut. Auch wird die Mail nicht immer bei Alarm gesendet, mal ja, mal nicht. Ich glaube ich habe hier einen gravierenden Fehler im Kopf.
ich stehe mal wieder vor dem Problem, das ich eine Lösung für ein Problem gefunden habe, jedoch ich mir nicht sicher bin, ob der Ansatz sinnvoll ist. Vielleicht gibt es einen besseren weg?
Szenario:
thread 1: liest alle 15min Sensor (datum, Temperatur und Luftfeuchtigkeit) am Pi aus und schreibt Messdaten in Datei
thread 2: liest alle 60sec den Sensor aus, wenn die Werte kritisch sind, wird ein Plot erstellt und dieser per Mail versendet.
thread 3: erstellt immer am letzten Tag des Monats einen Graphen des Monates und versendet diesen per Mail
Problem:
Wenn ich thread 1 und 2 starte, misst er mir zwar alle 15min, jedoch 3-6 mal im Abstand von paar Sekunden. Wenn thread 1 alleine läuft, geht alles gut. Auch wird die Mail nicht immer bei Alarm gesendet, mal ja, mal nicht. Ich glaube ich habe hier einen gravierenden Fehler im Kopf.
Code: Alles auswählen
import threading
import time
from send_mail import *
from funktionen import *
#Definition der Feuchte:
max_feuchte = 65.0
test_intervall = 60
schreib_intervall = 900
datei_pfad = 'Messdaten.txt'
#####################################################################################
#daten lesen und in datei schreiben
class schreiben(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
#Sensor und Zeit auslesen
zeit = time.strftime("%a:%d.%m.%Y %H:%M:%S")
var_temp, var_hum = sensor_read()
#in datei schreiben
with open (datei_pfad, "a") as fh:
fh.write('{}\t{}\t{}\n'.format(zeit, var_temp, var_hum))
time.sleep(schreib_intervall)
#####################################################################################
#alarm
class alarm(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
#Sensor und Zeit auslesen
zeit = time.strftime("%a:%d.%m.%Y %H:%M:%S")
var_temp, var_hum = sensor_read()
if (var_temp < 10.0 or var_temp > 35.0 or var_hum > max_feuchte):
#in datei schreiben
with open (datei_pfad, "a") as fh:
fh.write('{}\t{}\t{}\n'.format(zeit, var_temp, var_hum))
pfad_mail_anhang = plot_alarm(datei_pfad,5,max_feuchte)
send_mail_warnung(var_temp,var_hum,zeit,pfad_mail_anhang)
time.sleep(43200)#12h
time.sleep(test_intervall)
t1 = schreiben()
t2 = alarm()
t1.start()
t2.start()