Sensor |
Zustand / Messwert |
Folgerung |
R |
20°C < sensor(R) < 30°C | Raumtemperatur ist valide |
R |
sonst | Warnung ausgeben! |
L |
sensor(L) <= sensor(R) |
die Heizung ist ausgeschaltet oder defekt |
L |
sensor(R) < sensor(L) <= 40°C |
der Speicher wird gerade erwärmt |
L |
40°C < sensor(L) <= 60°C |
warmes Wasser steht im Speicher bereit |
L |
wenn sensor(L) > 60°C |
Anti-Legionellen-Funktion der Heizung läuft |
L |
Wert steigt |
das Wasser im Speicher wird erwärmt |
E |
sensor(E) <= sensor(R) |
die Rohre sind kalt |
E |
sensor(E) <= 40°C |
die Rohre sind kalt |
E |
40°C < sensor(E) < 60°C |
warmes Wasser wird oder ist im Haus bereitgestellt |
E |
sensor(E) > 60°C |
Anti-Legionellen-Funktion der Heizung läuft |
E |
Wert steigt | warmes Wasser wird entnommen oder umgewälzt |
E |
Wert sinkt |
es wird kein warmes Wasser entnommen und
nicht umgewälzt |
Z |
sensor(Z) <= sensor(R) |
das warme Wasser wird nicht umgewälzt |
Z |
sensor(R) < sensor(Z) <= 40°C |
Umwälzung läuft, ist aber noch nicht abgeschlossen |
Z |
40°C < sensor(Z) <= 60°C |
Umwälzung läuft und kann demnächst beendet werden |
Z |
sensor(Z) >= (sensor(E)-delta) |
in den Rohren steht warmes Wasser / Umwälzung kann beendet werden |
Z |
sensor(Z) > 60°C | Anti-Legionellen-Funktion der Heizung kann
demnächst beendet werden |
setup: initSensors() // dummy-read für "Temperature Conversion Time" clearSensorData_subMinuteArray() // Speicher initialisieren clearSensorDataArray() connectSocketServer() // mit WLAN und SocketServer verbinden setSystemDateTime(getDateTimeFromSocketServer()) // Zeit holen und einstellen setSensorAssignment(getSensorAssignmentFromSocketServer()) // Sensor-Funktions-Zuordnung übernehmen disconnectSocketServer() // Verbindung beenden lastSync=systemDateTime-1[Tag] // Timestamp, wann zuletzt gesync't wurde newMinute=systemTime.Minute // die derzeitige Minute switchOffTime=-1 // negativ für "Pumpe aus", sonst Ausschaltzeit loop: if newMinute!=systemTime.Minute: // wenn eine neue Minute anfängt // die in der letzten Minute gesammelten Daten zu einem Minuten-Wert zusammenfassen und speichern storeSensorData(average(sensorData_subMinute)) newMinute=systemTime.Minute clearSensorData_subMinuteArray()Ich will im Heizungsraum nicht mit fliegenden 230V-Strippen rumhantieren müssen. Folglich muss ich mich parallel zur Pumpenansteuerungs-Firmware auch gleich um die Gehäuse-Bearbeitung kümmern. Und irgendwie gefällt mir die ursprüngliche Idee nicht mehr, alles in ein Gehäuse zu stecken.
storeSensorData_subMinute() // Sensordaten im Minuten-Speicher ablegen
if systemTime>=03:30 && lastSync+23[Stunden]<=systemDateTime: // wenn es Zeit für den Sync ist connectSocketServer() // SystemZeit korrigieren und Daten senden setSystemDateTime(getDateTimeFromSocketServer()) sendSensorDataArray() clearSensorDataArray() disconnectSocketServer() lastSync=systemDateTime
if switchOffTime==-1: // wenn die Pumpe z.Zt. aus ist if systemTime>=05:45 && systemTime<22:00: // und wenn die aktive Zeit läuft if sensorValue(Z)<40[°C]: // und wenn die Temperatur im Zirkulations-Rohr zu niedrig ist switchPump(On) // Pumpe einschalten switchOffTime=systemTime+10[Minuten] // für mindestens 10 Minuten else: // wenn die Pumpe z.Zt. eingeschaltet ist if systemTime>=switchOffTime: // und wenn die Pumpe 10 Minuten an war if sensorValue(Z)+5[°C]<sensorValue(E): // und wenn sich die Temperatur noch nicht hinreichend an die des Entnahme-Rohrs angeglichen hat switchOffTime=systemTime+5[Minuten] // Pumpe weitere 5 Minuten eingeschaltet lassen else: switchPump(Off) // ansonsten Pumpe ausschalten switchOffTime=-1
delay(5[Sekunden])