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