| 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()
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])
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.