Hallo,
ich werde meine ältere Ölheizung in smarthomeNG einbinden. Grundlage ist dieser Thread aus dem homematic-forum.
Im Grunde wird mittels Widerstanden eine Fernbedienung simuliert. Mit der Schaltung der Widerstände kann der Fußpunkt der Heizkurve verändert werden. Mit einem 4-fach Schaltaktor lassen sich über die Zuschaltung von Widerständen 5 Zustände einstellen.
Zwischenablage01.jpg
Die Schaltzustände:
- Tag_max
- Tag_med
- Tag_low
- Nacht
- Frostschutz
Je nach Fußpunkt sollen die Schaltzustände aktiviert werden. Damit im Grenzbereich zwischen 2 Temperaturschwellen die Schaltzustände nicht ständig wechseln, soll das "Abschalten" immer ca. 1°C unterhalb des Einschaltschwelle erfolgen.
Das Ganze habe ich in einer Logik umgesetzt, die durch Veränderung des errechneten Fußpunktes und der Außentemperatur ausgelöst wird.
Die Logik sieht so aus:
Geht die Logik auch eleganter?
Dankeschön
ich werde meine ältere Ölheizung in smarthomeNG einbinden. Grundlage ist dieser Thread aus dem homematic-forum.
Im Grunde wird mittels Widerstanden eine Fernbedienung simuliert. Mit der Schaltung der Widerstände kann der Fußpunkt der Heizkurve verändert werden. Mit einem 4-fach Schaltaktor lassen sich über die Zuschaltung von Widerständen 5 Zustände einstellen.
Zwischenablage01.jpg
Die Schaltzustände:
- Tag_max
- Tag_med
- Tag_low
- Nacht
- Frostschutz
Je nach Fußpunkt sollen die Schaltzustände aktiviert werden. Damit im Grenzbereich zwischen 2 Temperaturschwellen die Schaltzustände nicht ständig wechseln, soll das "Abschalten" immer ca. 1°C unterhalb des Einschaltschwelle erfolgen.
Das Ganze habe ich in einer Logik umgesetzt, die durch Veränderung des errechneten Fußpunktes und der Außentemperatur ausgelöst wird.
Die Logik sieht so aus:
Code:
#!/usr/bin/env python3
# heizung_vorlauf.py
# 4-Stufen-Steuerung des Vorlaufes in Abhängigkeit vom berechneten Fusspunkt
# Ausgelöst durch "Fusspunkt" und Außentemperatur
logger.info("Logik HeizungVorlauf ausglöst durch:" + trigger['by'] )
# Aussentemperaturen einlesen
aussentemp_aktuell = sh.rpi1wire.temp_1()
aussentep_tagesmittel = sh.rpi1wire.temp_1.tagesmittel_gleitend()
fusspunkt = sh.heizung.vorlauf.fusspunkt()
# Prüfung ob Heizung aufgrund Aussentemperatur gebraucht wird
if (aussentemp_aktuell < 20.0) or (aussentep_tagesmittel < 11.0):
heizung = true
# Prüfung, ob persistente Variablen vorhanden, wenn nicht setzen dieser
if not hasattr(logic, 'fusspunkt_alt'):
logic.fusspunkt_alt = fusspunkt
# Prüfung, ob neuer Fußpunkt größer oder kleiner ist, um die Verlaufsrichtung des Fußpunkts festzustellen
richtung = round(fusspunkt - logic.fusspunkt_alt, 1)
logger.info("Richtung " + str(richtung))
#Konstanten (Schaltschwellen)
nachtaus = 15.0
tagminaus = 18.5
tagnormaus = 20.5
tagmaxaus = 22.5
nachtein = 16.5
tagminein = 19.5
tagnormein = 21.5
tagmaxein = 23.5
#Stufen
if (heizung == 'true') and ((richtung >= 0) and (fusspunkt >= tagmaxein)) or ((richtung < 0) and (fusspunkt > tagmaxaus)):
zustand = 'tag_max'
elif (heizung == 'true') and ((richtung >= 0) and (fusspunkt >= tagnormein)) or ((richtung < 0) and (fusspunkt > tagnormaus)):
zustand = 'tag_med'
elif (heizung == 'true') and ((richtung >= 0) and (fusspunkt >= tagminein)) or ((richtung < 0) and (fusspunkt > tagminaus)):
zustand = 'tag_min'
elif (heizung == 'true') and ((richtung >= 0) and (fusspunkt >= nachtein)) or ((richtung < 0) and (fusspunkt > nachtaus)):
zustand = 'nacht'
else:
zustand = 'frost'
logger.info("Zustand gesetzt auf " + str(zustand))
#Aktionen
if zustand == 'tag_max':
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(1)
logger.info("Tag_Max aktiviert")
elif zustand == 'tag_med':
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(0)
logger.info("Tag_Med aktiviert")
elif zustand == 'tag_min':
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(0)
sh.heizung.vorlauf.widerstand1(0)
logger.info("Tag_Min aktiviert")
elif zustand == 'nacht':
sh.heizung.vorlauf.widerstand1(1)
sh.heizung.vorlauf.widerstand1(0)
sh.heizung.vorlauf.widerstand1(0)
sh.heizung.vorlauf.widerstand1(0)
logger.info("Nacht aktiviert")
elif zustand == 'frost':
sh.heizung.vorlauf.widerstand1(0)
sh.heizung.vorlauf.widerstand1(0)
sh.heizung.vorlauf.widerstand1(0)
sh.heizung.vorlauf.widerstand1(0)
logger.info("Frostschutz aktiviert")
logic.fp_alt = fp
logger.info("Fußpunkt_alt gesetzt auf " + str(logic.fp_alt))
Dankeschön


Kommentar