Hallo zusammen,
ich habe nach verschiedenen einfachen Schaltern nun ein Thermostat (Eurotronics Spirit) in meine OpenHab-Installation (Snapshot 2.2) eingebunden.
Aufgrund der Fehler, die ich bei den ersten Things und Items in ausreichender Zahl gemacht habe, hat die Inkludierung und die erste Konfiguration des Thermostats nun vergleichsweise fehlerfrei geklappt.
Die Temperatur kann über ein UI und - natürlich - auch über das Thermostat direkt gesteuert werden.
Ich bin nun noch auf der Suche nach der besten - oder zumindest einer sinnvollen - Vorgehensweise für die Konfiguration des Thermostats hinsichtlich der zu den verschiedenen Tageszeiten zu erreichenden Temperaturen.
Auf die erste Idee erscheinen mir die "Rules" als dafür zu kompliziert.
Danke für Eure Unterstützung,
Gruß,
Connor
Beste Vorgehensweise zur Thermostatsteuerung
-
- Beiträge: 2
- Registriert: 26. Nov 2017 13:09
- seppy
- Beiträge: 738
- Registriert: 24. Sep 2015 20:25
- Wohnort: Bonn
Re: Beste Vorgehensweise zur Thermostatsteuerung
Hi Connor,
wenn Du nicht die normalerweise eingebaute Steuerung der Thermostate verwenden willst, bleiben Dir nur die Regeln. Vorteil ist dann eben auch die mögliche Anbindung von weiterer "Intelligenz" wie Temperatur, Kalender, Wettervorhersage, etc..
Du konfigurierst dann quasi nicht die Thermostate sondern überlässt die Steuerung der openHAB Regellogik.
Grüße,
Seppy
wenn Du nicht die normalerweise eingebaute Steuerung der Thermostate verwenden willst, bleiben Dir nur die Regeln. Vorteil ist dann eben auch die mögliche Anbindung von weiterer "Intelligenz" wie Temperatur, Kalender, Wettervorhersage, etc..
Du konfigurierst dann quasi nicht die Thermostate sondern überlässt die Steuerung der openHAB Regellogik.
Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung
-
- Beiträge: 2
- Registriert: 26. Nov 2017 13:09
Re: Beste Vorgehensweise zur Thermostatsteuerung
Moin,
@seppy: Danke für Deine Rückmeldung und Deinen Vorschlag.
Scheinbar muss (darf?) ich mich tatsächlich noch einmal ein wenig genauer mit dem Thema regeln beschäftigen.
Da ich allerdings das Thermostat schnell in Betrieb nehmen musste, bin ich nun erst einmal den Weg über das GCal-Binding gegangen.
Das funktioniert erstaunlich gut. Leider habe ich das über CalDav nicht zum Laufen bekommen.
Danke nochmals für die Denkanstöße,
Gruß,
Connor
@seppy: Danke für Deine Rückmeldung und Deinen Vorschlag.
Scheinbar muss (darf?) ich mich tatsächlich noch einmal ein wenig genauer mit dem Thema regeln beschäftigen.
Da ich allerdings das Thermostat schnell in Betrieb nehmen musste, bin ich nun erst einmal den Weg über das GCal-Binding gegangen.
Das funktioniert erstaunlich gut. Leider habe ich das über CalDav nicht zum Laufen bekommen.
Danke nochmals für die Denkanstöße,
Gruß,
Connor
-
- Beiträge: 45
- Registriert: 12. Feb 2018 17:53
Re: Beste Vorgehensweise zur Thermostatsteuerung
Hallo zusammen,
weiß jemand ein paar mehr Details zu diesem Thema?
ich selber habe openhabian auf einem Raspberry 3 laufen und habe derzeit einen Heizkörperthermostat über z wave am laufen.
Also über die Paper UI und die Basic UI kann ich die Temperatur einstellen.
nun würde ich gern eine Regel dazuschreiben, habe aber keine Ahnung wie ich sowas anfange.
mach ich das am besten mit virtuellen switches? oder kann man Temperatur und Zeit direkt in die Regel schreiben?
Wie würde das mit dem CalDav Binding funktionieren?
und wie würde ich ein Fensterkontakt einbeziehen?
weiß jemand ein paar mehr Details zu diesem Thema?
ich selber habe openhabian auf einem Raspberry 3 laufen und habe derzeit einen Heizkörperthermostat über z wave am laufen.
Also über die Paper UI und die Basic UI kann ich die Temperatur einstellen.
nun würde ich gern eine Regel dazuschreiben, habe aber keine Ahnung wie ich sowas anfange.
mach ich das am besten mit virtuellen switches? oder kann man Temperatur und Zeit direkt in die Regel schreiben?
Wie würde das mit dem CalDav Binding funktionieren?
und wie würde ich ein Fensterkontakt einbeziehen?
- seppy
- Beiträge: 738
- Registriert: 24. Sep 2015 20:25
- Wohnort: Bonn
Re: Beste Vorgehensweise zur Thermostatsteuerung
Hi,
hier mal ein Ausschnitt meiner Lösung:
Läuft bei mir seit drei Jahren. Neu ist die Ofensteuerung. Ich habe das Wanddthermostat in der Nähe des Ofens. Wenn dort die Temperatur in der Heitperiode über 24C°steigt, weiß ich mit Sicherheit das der Ofen an ist und die Heizung wird runtergefahren:
Viele Grüße,
Seppy
hier mal ein Ausschnitt meiner Lösung:
Code: Alles auswählen
/***********************************************************************************
* HEIZUNGSSTEUERUNG Wohnbereich
*
* Komforttemperatur nach Zeit. Für die automatische Regelung ist ein Zeitfenster von 5 Mins. vorgesehen. In
* diesem Zeitraum werden manuelle Regelungen überschrieben. Danach kann bis zum nächsten Steuervorgang die Temperatur
* manuell geregelt werden.
*
* Drei Heizphasen:
* 1) Morgens um die Räume auf eine angenehme Temperatur zu bringen (6-8 Uhr)
* 2) Tagsüber auf erweiterter Konforttemperatur
* 3) Absenktemperatur für die Nacht, je nach Wochentag/Wochenende unterschiedlich
*/
rule "Cron_Heating_Wohnbereich"
when
Time cron "0 0/5 * * * ?" or
System started
then
var Integer hour = now.getHourOfDay
var Integer min = now.getMinuteOfHour
var Integer wd = now.getDayOfWeek
//Prüfen ob Job läuft
logDebug("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "JOB läuft")
//Sicherstellen, dass die Temperaturstufen gesetzt sind
if (GlobalHeatingSetBackTemp.state !== NULL && GlobalHeatingComfortTemp1.state !== NULL && GlobalHeatingComfortTemp2.state !== NULL){
// Wochentags (Mo - Fr)
if (GlobalHeatingPeriod.state.equals(ON) && wd <= 5){
logDebug("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Parameter für Heizungssteuerung: Heizperiode=ON, Wochentag=" + wd + ", Uhrzeit: " + hour + ":" + min)
//6:00 Uhr Aufheizperiode Wohnbereich
if ((hour == 6 && min <= 5) && gEGWohnbereichTargetTemp.state != GlobalHeatingComfortTemp1.state) {
logInfo("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Setze Temperatur Wohnbereich auf Komforttemperatur " + GlobalHeatingComfortTemp1.state.toString + "°C geregelt")
gEGWohnbereichTargetTemp.sendCommand(GlobalHeatingComfortTemp1.state as Number)
}
//23:00 Uhr außer Freitag Absenktemperatur zur Nacht
else if ((hour == 23 && min <= 5 && wd < 5) && gEGWohnbereichTargetTemp.state != GlobalHeatingSetBackTemp.state) {
logInfo("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Setze Temperatur Wohnbereich auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
gEGWohnbereichTargetTemp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
}
//23:50 Uhr Freitag Absenktemperatur zur Nacht
else if ((hour == 23 && min <= 55 && wd == 5) && gEGWohnbereichTargetTemp.state != GlobalHeatingSetBackTemp.state) {
logInfo("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Setze Temperatur Wohnbereich auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
gEGWohnbereichTargetTemp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
}
}
// Wochenende (Sa - So)
else if (GlobalHeatingPeriod.state.equals(ON) && wd >= 6){
logDebug("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Parameter für Heizungssteuerung: Heizperiode=ON, Wochentag=" + wd)
//8:00 Uhr Aufheizperiode Wohnbereich
if ((hour == 8 && min <= 5) && gEGWohnbereichTargetTemp.state != GlobalHeatingComfortTemp1.state) {
gEGWohnbereichTargetTemp.sendCommand(GlobalHeatingComfortTemp1.state as Number)
logInfo("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Temperatur Wohnbereich auf Komforttemperatur " + GlobalHeatingComfortTemp1.state.toString + "°C geregelt")
}
//Samstag 23:50 Uhr Absenktemperatur zur Nacht
else if ((hour == 23 && min <= 55 && wd == 6) && gEGWohnbereichTargetTemp.state != GlobalHeatingSetBackTemp.state) {
gEGWohnbereichTargetTemp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
logInfo("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Temperatur Wohnbereich auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
}
//Sonntag 20:00 Uhr Absenktemperatur zur Nacht
else if ((hour == 23 && min <= 5 && wd == 7) && gEGWohnbereichTargetTemp.state != GlobalHeatingSetBackTemp.state) {
gEGWohnbereichTargetTemp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
logInfo("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Temperatur Wohnbereich auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
}
}
logDebug("HomeBox.HeatingRules:Cron_Heating_Wohnbereich", "Prüfung erfolgreich")
}
end
/***********************************************************************************
* Ereignissteuerung bei geöffneter Tür im Wohnbereich
*
* Wir im Wohnbereich eine Tür während der Heizperiode geöffnet und ist länger als
* 5 Minuten geöffnet, werden alle Heizkörper abgeschaltet.
* Sobald alle Türen wieder geschlossen sind, wird die ursprüngliche Temperatur
* wieder hergestellt.
*/
rule "Event_WohnbereichDoor_open"
when
Item InnenEGEsszimerTuersensorLinks changed or
Item InnenEGEsszimerTuersensorRechts changed or
Item EGKuecheTuersensorState changed or
Item EGWohnzimmerTuersensorState changed
then
//Sämtliche Logik nur ausführen, wenn Heizperiode und der Ofen aus ist.
if(GlobalHeatingPeriod.state == ON && GlobalFireplace.state == OFF){
// Kein Timer läuft und alle Fenster sind geschlossen --> Wiederherstellen der letzten Temperatur
if (previousState == OPEN && doorOpenTimerWohnbereich === null && InnenEGEsszimerTuersensorLinks.state == CLOSED && InnenEGEsszimerTuersensorRechts.state == CLOSED && EGKuecheTuersensorState.state == CLOSED && EGWohnzimmerTuersensorState.state == CLOSED){
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Alle Fenster und Türen im Wohnbereich geschlossen, setze letzte Zieltemperatur")
//States wiederherstellen
gEGWohnbereichTargetTemp.sendCommand(sysWohnbereichTargetTempState.state as Number)
}
// Kein Timer läuft und ein Fenster wird geöffnet
else if (doorOpenTimerWohnbereich === null && (InnenEGEsszimerTuersensorLinks.state == OPEN || InnenEGEsszimerTuersensorRechts.state == OPEN || EGKuecheTuersensorState.state == OPEN || EGWohnzimmerTuersensorState.state == OPEN)){
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Fenster oder Tür im Wohnbereich geöffnet")
//Aktuelle Zieltemperatur speichern
//States speichern
sysWohnbereichTargetTempState.postUpdate(gEGWohnbereichTargetTemp.state as Number)
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "gEGWohnbereichTargetTemp " + sysWohnbereichTargetTempState.state.toString + "°C gespeichert")
//Timer mit gewünschtem Delay (doorOpenDelay) setzen
doorOpenTimerWohnbereich = createTimer(now.plusSeconds(doorOpenDelay)) [|
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Delay " + doorOpenDelay + " verstrichen ,schalte Heizkörper aus")
gEGWohnbereichTargetTemp.sendCommand(0)
doorOpenTimerWohnbereich.cancel()
]
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Starte Timer mit Delay " + doorOpenDelay)
}
// Timer läuft und alle Türen sind wieder geschlossen
else if (previousState == OPEN && doorOpenTimerWohnbereich !== null && InnenEGEsszimerTuersensorLinks.state == CLOSED && InnenEGEsszimerTuersensorRechts.state == CLOSED && EGKuecheTuersensorState.state == CLOSED && EGWohnzimmerTuersensorState.state == CLOSED){
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Alle Fenster und Türen im Wohnbereich geschlossen, setze letzte Zieltemperatur (" + sysWohnbereichTargetTempState.state.toString + "°C)")
//States wiederherstellen
gEGWohnbereichTargetTemp.sendCommand(sysWohnbereichTargetTempState.state as Number)
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Beende laufenden Timer")
doorOpenTimerWohnbereich.cancel()
doorOpenTimerWohnbereich = null
}
// Timer läuft und weitere Tür wird geöffnet
else if (previousState == CLOSED && doorOpenTimerWohnbereich !== null) {
logInfo("HomeBox.HeatingRules:Event_WohnbereichDoor_open", "Laufenden Timer gefunden, starte erneut mit Delay " + doorOpenDelay)
doorOpenTimerWohnbereich.reschedule(now.plusSeconds(doorOpenDelay))
}
}
end
/***********************************************************************************
* Steuerung über Wandthermostat
*
* Die Steuerung über das Wandthermostat übersteuert die Zeitsteuerung. Sie wirkt
* immer, dass heißt auch wenn bei deaktivierter Heizperiode die Zieltemperatur
* verändert wird, werden die Heizkörper angeschaltet.
*
* Ausnahme: Der Ofen (GlobalFirePlace == ON)
*/
rule "Event_WT_change"
when
Item EGWohnzimmerWTTargetTemp changed
then
if(GlobalFireplace.state == OFF){
logInfo("HomeBox.HeatingRules:Event_WT_change", "Temperatur am WT oder manuell geregelt: " + EGWohnzimmerWTTargetTemp.state.toString + "°C")
EGWohnzimmerManuMode.sendCommand(EGWohnzimmerWTTargetTemp.state as Number)
logInfo("HomeBox.HeatingRules:Event_WT_change", "Setze Betriebsmodus MANUELL: " + EGWohnzimmerManuMode.state.toString + "°C")
InnenEGEsszimmerHKTTargetTemp.sendCommand(EGWohnzimmerWTTargetTemp.state as Number)
InnenEGWohnzimmerHKTLinksTargetTemp.sendCommand(EGWohnzimmerWTTargetTemp.state as Number)
InnenEGWohnzimmerHKTRechtsTargetTemp.sendCommand(EGWohnzimmerWTTargetTemp.state as Number)
logInfo("HomeBox.HeatingRules:Event_WT_change", "Zieltemperatur Wohnbereich auf " + EGWohnzimmerWTTargetTemp.state + "°C geregelt")
if (GlobalHeatingPeriod.state == OFF) {
pushover('Heizung im Wohnbereich außerhalb der Heizperiode aktiviert!')
}
}
end
Code: Alles auswählen
/**
* Ofen Erkennung
*
* Bei überproportionalem Temperaturanstieg am Wandthermostat kann man davon ausgehen, dass der
* Ofen angeheizt wurde
*/
rule "Event_Ofen_an"
when
Item EGWohnzimmerWTCurrTemp changed
then
if(GlobalHeatingPeriod.state == ON){
var Integer hour = now.getHourOfDay
var Integer min = now.getMinuteOfHour
if ((EGWohnzimmerWTCurrTemp.state as Number) >= (GlobalHeatingComfortTemp1.state as Number) && GlobalFireplace.state == OFF) {
logInfo("HomeBox.HeatingRules:Event_Ofen_an", "Temperatur Wandthermostat > " + GlobalHeatingComfortTemp1.state.toString + "°C (Komforttemperatur) => Ofen an, setze Heizkörper Wohnbereich 0°C")
pushover("HomeBox Ofenerkennung: Temperatur Wandthermostat > " + GlobalHeatingComfortTemp1.state.toString + "°C (Komforttemperatur) => Ofen an, setze Heizkörper Wohnbereich 0°C")
GlobalFireplace.sendCommand(ON)
//States speichern
sysWohnbereichTargetTempState.postUpdate(gEGWohnbereichTargetTemp.state as Number)
gEGWohnbereichTargetTemp.sendCommand(0)
} else if ((EGWohnzimmerWTCurrTemp.state as Number) < (GlobalHeatingComfortTemp1.state as Number) && GlobalFireplace.state == ON) {
logInfo("HomeBox.HeatingRules:Event_Ofen_an", "Ofen aus, stelle letzten Zustand wieder her")
GlobalFireplace.sendCommand(OFF)
//Prüfen ob nicht schon Absenktemperatur bleiben kann
if (hour <= 23 && min <= 5){
//State wiederherstellen
gEGWohnbereichTargetTemp.sendCommand(sysWohnbereichTargetTempState.state as Number)
pushover("HomeBox Ofenerkennung: Ofen aus, stelle letzten Zustand wieder her (" + sysWohnbereichTargetTempState.state.toString + "°C)")
}
}
}
end
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung