Hello,
i recently switched to openhab and I’m very happy with it. But i looking help for some questions. i create some items and rules for my weekly heating schedule. And everything works without problems.
My question now: Does anyone know an elegant way to implement this? I’m not quite fit yet with all the language operations openhab has to offer.
// wochenprogramm
Group gMaxWeekSettings
// office
// SWD = Start Weekday
// EWD = End Weekday
Number maxNonEcoSWDOffice "Komfortbeginn [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoEWDOffice "Komfortende [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
// SWE = Start Weekend
// EWE = Stop Weekend
Number maxNonEcoSWEOffice "Komfortbeginn [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoEWEOffice "Komfortende [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
// WD = Weekday
// WE = Weekend
Number maxNonEcoTempWDOffice "Komforttemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxNonEcoTempWEOffice "Komforttemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
// WD = Weekday
// WE = Weekend
Number maxEcoTempWDOffice "Ecotemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxEcoTempWEOffice "Ecotemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
// Bedroom
Number maxNonEcoSWDBedroom "Komfortbeginn [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoEWDBedroom "Komfortende [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoSWEBedroom "Komfortbeginn [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoEWEBedroom "Komfortende [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoTempWDBedroom "Komforttemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxNonEcoTempWEBedroom "Komforttemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxEcoTempWDBedroom "Ecotemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxEcoTempWEBedroom "Ecotemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
// Livingroom
Number maxNonEcoSWDLivingroom "Komfortbeginn [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoEWDLivingroom "Komfortende [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoSWELivingroom "Komfortbeginn [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoEWELivingroom "Komfortende [JS(numberToClock.js):%s ]" (gMaxWeekSettings)
Number maxNonEcoTempWDLivingroom "Komforttemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxNonEcoTempWELivingroom "Komforttemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxEcoTempWDLivingroom "Ecotemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
Number maxEcoTempWELivingroom "Ecotemperatur [%.1f °C]" <temperature> (gMaxWeekSettings)
rule "max Wochenprogramm"
when
Time cron "0 0/5 * 1/1 * ? *"
then
var Number hour = now.getHourOfDay
var Number minutes = now.getMinuteOfHour
var Number day = now.getDayOfWeek
var Number tminutes = hour * 60 + minutes
if ((day == 1) || (day == 2) || (day == 3) || (day == 4)) {
// Weekday
// Office Komfortbeginn & End - Weekday
if (tminutes.toString == maxNonEcoSWDOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxNonEcoTempWDOffice.state)
} else if (tminutes.toString == maxNonEcoEWDOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxEcoTempWDOffice.state)
}
// Bedroom Komfortbeginn & End - Weekday
if (tminutes.toString == maxNonEcoSWDBedroom.state.toString) {
if (PhonePresence.state == ON) {
maxSetTempBedroom.sendCommand(maxNonEcoTempWDBedroom.state)
} else {
logInfo("max", "Überspringe Komfortbeginn Bedroom - Keiner Zuhause")
}
} else if (tminutes.toString == maxNonEcoEWDBedroom.state.toString) {
maxSetTempBedroom.sendCommand(maxEcoTempWDBedroom.state)
}
// Livingroom Komfortbeginn & End - Weekday
if (tminutes.toString == maxNonEcoSWDLivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxNonEcoTempWDLivingroom.state)
} else if (tminutes.toString == maxNonEcoEWDLivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxEcoTempWDLivingroom.state)
}
} else if (day == 5) {
// friday
// Office Komfortbeginn Weekday - KomformtEnd Weekend
if (tminutes.toString == maxNonEcoSWDOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxNonEcoTempWDOffice.state)
} else if (tminutes.toString == maxNonEcoEWEOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxEcoTempWEOffice.state)
}
// Bedroom Komfortbeginn Weekday - KomfortEnd Weekend
if (tminutes.toString == maxNonEcoSWDBedroom.state.toString) {
if (PhonePresence.state == ON) {
maxSetTempBedroom.sendCommand(maxNonEcoTempWDBedroom.state)
} else {
logInfo("max", "Skipping - nobody at home")
}
} else if (tminutes.toString == maxNonEcoEWEBedroom.state.toString) {
maxSetTempBedroom.sendCommand(maxEcoTempWEBedroom.state)
}
// Livingroom Komfortbeginn Weekday - KomfortEnd Weekend
if (tminutes.toString == maxNonEcoSWDLivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxNonEcoTempWDLivingroom.state)
} else if (tminutes.toString == maxNonEcoEWELivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxEcoTempWELivingroom.state)
}
} else if (day == 6) {
// saturday
// Office Komfortbeginn & End Weekend
if (tminutes.toString == maxNonEcoSWEOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxNonEcoTempWEOffice.state)
} else if (tminutes.toString == maxNonEcoEWEOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxEcoTempWEOffice.state)
}
// Bedroom Komfortbeginn & End Weekend
if (tminutes.toString == maxNonEcoSWEBedroom.state.toString) {
if (PhonePresence.state == ON) {
maxSetTempBedroom.sendCommand(maxNonEcoTempWEBedroom.state)
} else {
logInfo("max", "Skipping - nobody at home")
}
} else if (tminutes.toString == maxNonEcoEWEBedroom.state.toString) {
maxSetTempBedroom.sendCommand(maxEcoTempWEBedroom.state)
}
// Livingroom Komfortbeginn & End Weekend
if (tminutes.toString == maxNonEcoSWELivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxNonEcoTempWELivingroom.state)
} else if (tminutes.toString == maxNonEcoEWELivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxEcoTempWELivingroom.state)
}
} else {
// sunday
// Office Komfortbeginn Weekend - End Weekday
if (tminutes.toString == maxNonEcoSWEOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxNonEcoTempWEOffice.state)
} else if (tminutes.toString == maxNonEcoEWDOffice.state.toString) {
maxSetTempOfficer.sendCommand(maxEcoTempWDOffice.state)
}
// Bedroom Komfortbeginn Weekend - End Weekday
if (tminutes.toString == maxNonEcoSWEBedroom.state.toString) {
if (PhonePresence.state == ON) {
maxSetTempBedroom.sendCommand(maxNonEcoTempWEBedroom.state)
} else {
logInfo("max", "Skipping - nobody at home")
}
} else if (tminutes.toString == maxNonEcoEWDBedroom.state.toString) {
maxSetTempBedroom.sendCommand(maxEcoTempWDBedroom.state)
}
// Livingroom Komfortbeginn Weekend - End Weekday
if (tminutes.toString == maxNonEcoSWELivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxNonEcoTempWELivingroom.state)
} else if (tminutes.toString == maxNonEcoEWDLivingroom.state.toString) {
maxSetTempLivingroom.sendCommand(maxEcoTempWDLivingroom.state)
}
}
end
Strategies {
default = everyUpdate
}
Items {
gMaxWeekSettings* : strategy = everyChange, restoreOnStartup
}
Group gMaxSetTemp "Wunschtemperatur" <temperature>
Number maxSetTempOfficer "Wunschtemperatur [%.1f °C]" <max_temp> (gMaxOffice, gMaxSetTemp, gMaxAutoTemp) ["TargetTemperature"] {channel="max:thermostatplus:NEQ1447237:NEQ1586718:set_temp"}
Number maxSetTempBedroom "Wunschtemperatur [%.1f °C]" <max_temp> (gMaxBedroom, gMaxSetTemp, gMaxAutoTemp) ["TargetTemperature"] {channel="max:thermostatplus:NEQ1447237:NEQ1585063:set_temp"}
Number maxSetTempLivingroom "Wunschtemperatur [%.1f °C]" <max_temp> (gMaxLivingroom, gMaxSetTemp, gMaxAutoTemp) ["TargetTemperature"] {channel="max:wallthermostat:NEQ1447237:OEQ1456821:set_temp"}
for suggestions, I would be grateful