nach langer Auszeit habe ich mich mal endlich wieder mit unserem SmartHome beschäftigt. Also habe ich mir von tado° die Heizungsthermostate geholt und diese in OH3 eingebunden. Die Rule für die Heizungssteuerung funktioniert auch ohne ausfälle. Aber ich möchte gerne dazu lernen, möchte meine Rules verbessen und schauen wie sich das System optimieren lässt.
Mich würde interessieren, ob man die Rule auch einkürzen kann und wie sowas aussehen könnte? Ich erwarte nicht, dass mir jemand eine komplett neue Rule schreibt, würde mich jedoch über Beispiele freuen.
Hier meine Rule:
Code: Alles auswählen
/*
Heizungssteuerung
*/
rule "Heizung"
when
Item TargetTemperatureClothingHome changed or
Item TargetTemperatureClothingAway changed or
Item TargetTemperatureClothingNight changed or
Item TargetTemperatureOGBathroomHome changed or
Item TargetTemperatureOGBathroomAway changed or
Item TargetTemperatureOGBathroomNight changed or
Item TargetTemperatureOfficeHome changed or
Item TargetTemperatureOfficeAway changed or
Item TargetTemperatureOfficeNight changed or
Item TargetTemperatureOGSleepingroomHome changed or
Item TargetTemperatureOGSleepingroomAway changed or
Item TargetTemperatureOGSleepingroomNight changed or
Item TargetTemperatureOGLivingroomHome changed or
Item TargetTemperatureOGLivingroomAway changed or
Item TargetTemperatureOGLivingroomNight changed or
Item TargetTemperatureUGFloorHome changed or
Item TargetTemperatureUGFloorAway changed or
Item TargetTemperatureUGFloorNight changed or
Item TargetTemperatureKitchenHome changed or
Item TargetTemperatureKitchenAway changed or
Item TargetTemperatureKitchenNight changed or
Item TargetTemperatureMasterbedroomHome changed or
Item TargetTemperatureMasterbedroomAway changed or
Item TargetTemperatureMasterbedroomNight changed or
Item TargetTemperatureLivingroomHome changed or
Item TargetTemperatureLivingroomAway changed or
Item TargetTemperatureLivingroomNight changed or
Item og_office_window changed or
Item og_livingroom_window changed or
Item og_sleepingroom_window changed or
Item gMasterbedroomWindow changed or
Item gLivingroomWindow changed or
Item gKitchenWindow changed or
Item HVAC_Mode changed or
Item Away_Long changed or
Item HVAC_Night_Mode changed
then
val tCH = TargetTemperatureClothingHome.state as Number
val tCA = TargetTemperatureClothingAway.state as Number
val tCN = TargetTemperatureClothingNight.state as Number
val tOBH = TargetTemperatureOGBathroomHome.state as Number
val tOBA = TargetTemperatureOGBathroomAway.state as Number
val tOBN = TargetTemperatureOGBathroomNight.state as Number
val tOH = TargetTemperatureOfficeHome.state as Number
val tOA = TargetTemperatureOfficeAway.state as Number
val tON = TargetTemperatureOfficeNight.state as Number
val tOSH = TargetTemperatureOGSleepingroomHome.state as Number
val tOSA = TargetTemperatureOGSleepingroomAway.state as Number
val tOSN = TargetTemperatureOGSleepingroomNight.state as Number
val tOLH = TargetTemperatureOGLivingroomHome.state as Number
val tOLA = TargetTemperatureOGLivingroomAway.state as Number
val tOLN = TargetTemperatureOGLivingroomNight.state as Number
val tUFH = TargetTemperatureUGFloorHome.state as Number
val tUFA = TargetTemperatureUGFloorAway.state as Number
val tUFN = TargetTemperatureUGFloorNight.state as Number
val tKH = TargetTemperatureKitchenHome.state as Number
val tKA = TargetTemperatureKitchenAway.state as Number
val tKN = TargetTemperatureKitchenNight.state as Number
val tMH = TargetTemperatureMasterbedroomHome.state as Number
val tMA = TargetTemperatureMasterbedroomAway.state as Number
val tMN = TargetTemperatureMasterbedroomNight.state as Number
val tLH = TargetTemperatureLivingroomHome.state as Number
val tLA = TargetTemperatureLivingroomAway.state as Number
val tLN = TargetTemperatureLivingroomNight.state as Number
if(HVAC_Mode.state == ON) {
if(hvac_clothing.state == ON) {
if(Away_Long.state == OFF){
if(HVAC_Night_Mode.state == OFF) {
clothingTargetTemperature.sendCommand(tCH)
} else {
clothingTargetTemperature.sendCommand(tCN)
}
} else {
clothingTargetTemperature.sendCommand(tCA)
}
clothingHvacMode.sendCommand("HEAT")
clothingOperationMode.sendCommand("MANUAL")
} else {
clothingHvacMode.sendCommand("OFF")
}
if(hvac_ogbathroom.state == ON) {
if(Away_Long.state == OFF) {
if(HVAC_Night_Mode.state == OFF){
ogbathroomTargetTemperature.sendCommand(tOBH)
} else {
ogbathroomTargetTemperature.sendCommand(tOBN)
}
} else {
ogbathroomTargetTemperature.sendCommand(tOBA)
}
ogbathroomHvacMode.sendCommand("HEAT")
ogbathroomOperationMode.sendCommand("MANUAL")
} else {
ogbathroomHvacMode.sendCommand("OFF")
}
if(hvac_office.state == ON) {
if(Away_Long.state == OFF) {
if(og_office_window.state == CLOSED) {
if(HVAC_Night_Mode.state == OFF){
officeTargetTemperature.sendCommand(tOH)
} else {
officeTargetTemperature.sendCommand(tON)
}
} else {
officeHvacMode.sendCommand("OFF")
}
} else {
officeTargetTemperature.sendCommand(tOA)
}
} else {
officeHvacMode.sendCommand("OFF")
}
if(hvac_ogsleepingroom.state == ON) {
if(Away_Long.state == OFF) {
if(og_sleepingroom_window.state == CLOSED) {
if(HVAC_Night_Mode.state == OFF) {
ogsleepingroomTargetTemperature.sendCommand(tOSH)
} else {
ogsleepingroomTargetTemperature.sendCommand(tOSN)
}
} else {
ogsleepingroomHvacMode.sendCommand("OFF")
}
} else {
ogsleepingroomTargetTemperature.sendCommand(tOSA)
}
} else {
ogsleepingroomHvacMode.sendCommand("OFF")
}
if(hvac_oglivingroom.state == ON) {
if(Away_Long.state == OFF){
if(og_livingroom_window.state == CLOSED) {
if(HVAC_Night_Mode.state == OFF) {
oglivingroomTargetTemperature.sendCommand(tOLH)
} else {
oglivingroomTargetTemperature.sendCommand(tOLN)
}
} else {
oglivingroomHvacMode.sendCommand("OFF")
}
} else {
oglivingroomTargetTemperature.sendCommand(tOLA)
}
} else {
oglivingroomHvacMode.sendCommand("OFF")
}
if(hvac_ugfloor.state == ON) {
if(Away_Long.state == OFF) {
if(HVAC_Night_Mode.state == OFF) {
ugfloorTargetTemperature.sendCommand(tUFH)
} else {
ugfloorTargetTemperature.sendCommand(tUFN)
}
} else {
ugfloorTargetTemperature.sendCommand(tUFA)
}
} else {
ugfloorHvacMode.sendCommand("OFF")
}
if(hvac_kitchen.state == ON) {
if(Away_Long.state == OFF) {
if(gKitchenWindow.state == CLOSED) {
if(HVAC_Night_Mode.state == OFF) {
kitchenTargetTemperature.sendCommand(tKH)
} else {
kitchenTargetTemperature.sendCommand(tKN)
}
} else {
kitchenHvacMode.sendCommand("OFF")
}
} else {
kitchenTargetTemperature.sendCommand(tKA)
}
} else {
kitchenHvacMode.sendCommand("OFF")
}
if(hvac_masterbedroom.state == ON) {
if(Away_Long.state == OFF) {
if(gMasterbedroomWindow.state == CLOSED) {
if(HVAC_Night_Mode.state == OFF) {
masterbedroomTargetTemperature.sendCommand(tMH)
} else {
masterbedroomTargetTemperature.sendCommand(tMN)
}
} else {
masterbedroomHvacMode.sendCommand("OFF")
}
} else {
masterbedroomTargetTemperature.sendCommand(tMA)
}
} else {
masterbedroomHvacMode.sendCommand("OFF")
}
if(hvac_livingroom.state == ON) {
if(Away_Long.state == OFF) {
if(gLivingroomWindow.state == CLOSED) {
if(HVAC_Night_Mode.state == OFF) {
livingroomTargetTemperature.sendCommand(tLH)
} else {
livingroomTargetTemperature.sendCommand(tLN)
}
} else {
livingroomHvacMode.sendCommand("OFF")
}
} else {
livingroomTargetTemperature.sendCommand(tLA)
}
} else {
livingroomHvacMode.sendCommand("OFF")
}
}
end
rule "Ein/aus"
when
Item HVAC_Mode changed
then
if(HVAC_Mode.state == ON) {
hvac_clothing.postUpdate(ON)
hvac_ogbathroom.postUpdate(ON)
hvac_office.postUpdate(ON)
hvac_ogsleepingroom.postUpdate(ON)
hvac_oglivingroom.postUpdate(ON)
hvac_ugfloor.postUpdate(ON)
hvac_kitchen.postUpdate(ON)
hvac_masterbedroom.postUpdate(ON)
hvac_livingroom.postUpdate(ON)
} else {
hvac_clothing.postUpdate(OFF)
hvac_ogbathroom.postUpdate(OFF)
hvac_office.postUpdate(OFF)
hvac_ogsleepingroom.postUpdate(OFF)
hvac_oglivingroom.postUpdate(OFF)
hvac_ugfloor.postUpdate(OFF)
hvac_kitchen.postUpdate(OFF)
hvac_masterbedroom.postUpdate(OFF)
hvac_livingroom.postUpdate(OFF)
}
end
end
MfG Elias