Hello,
I have a cron triggered rule which should start once per hour through a time cron trigger to control my heating system over the whole week with start/restart and stop times.
Every 12 to 18 Hours…this depends on what ever, it seems that openhab stops triggering the rule.
My rule:
//Komfort = 1
//Standby = 2
//Nacht = 3
//Frost = 4
rule "Steuerung - prüfen"
when
Time cron "0 0 0/1 1/1 * ? *"
then
var VarHeizEinMo = (HeizEinMo.state as DecimalType).intValue
var VarHeizWiedereinMo = (HeizWiedereinMo.state as DecimalType).intValue
var VarHeizAusMo = (HeizAusMo.state as DecimalType).intValue
var VarHeizEinDi = (HeizEinDi.state as DecimalType).intValue
var VarHeizWiedereinDi = (HeizWiedereinDi.state as DecimalType).intValue
var VarHeizAusDi = (HeizAusDi.state as DecimalType).intValue
var VarHeizEinMi = (HeizEinMi.state as DecimalType).intValue
var VarHeizWiedereinMi = (HeizWiedereinMi.state as DecimalType).intValue
var VarHeizAusMi = (HeizAusMi.state as DecimalType).intValue
var VarHeizEinDo = (HeizEinDo.state as DecimalType).intValue
var VarHeizWiedereinDo = (HeizWiedereinDo.state as DecimalType).intValue
var VarHeizAusDo = (HeizAusDo.state as DecimalType).intValue
var VarHeizEinFr = (HeizEinFr.state as DecimalType).intValue
var VarHeizWiedereinFr = (HeizWiedereinFr.state as DecimalType).intValue
var VarHeizAusFr = (HeizAusFr.state as DecimalType).intValue
var VarHeizEinSa = (HeizEinSa.state as DecimalType).intValue
var VarHeizWiedereinSa = (HeizWiedereinSa.state as DecimalType).intValue
var VarHeizAusSa = (HeizAusSa.state as DecimalType).intValue
var VarHeizEinSo = (HeizEinSo.state as DecimalType).intValue
var VarHeizWiedereinSo = (HeizWiedereinSo.state as DecimalType).intValue
var VarHeizAusSo = (HeizAusSo.state as DecimalType).intValue
sendTelegram("johannes","Heizungprogramm Prüfung läuft")
logInfo("rules","Heizungprogramm Prüfung läuft")
//Montag
if (now.getDayOfWeek.intValue == 1) {
if ((now.getHourOfDay.intValue == VarHeizEinMo) || (now.getHourOfDay.intValue == VarHeizWiedereinMo)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusMo) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
//Dienstag
else if (now.getDayOfWeek.intValue == 2) {
if ((now.getHourOfDay.intValue == VarHeizEinDi) || (now.getHourOfDay.intValue == VarHeizWiedereinDi)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusDi) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
//Mittwoch
else if (now.getDayOfWeek.intValue == 3) {
if ((now.getHourOfDay.intValue == VarHeizEinMi) || (now.getHourOfDay.intValue == VarHeizWiedereinMi)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusMi) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
//Donnerstag
else if (now.getDayOfWeek.intValue == 4) {
if ((now.getHourOfDay.intValue == VarHeizEinDo) || (now.getHourOfDay.intValue == VarHeizWiedereinDo)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusDo) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
//Freitag
else if (now.getDayOfWeek.intValue == 5) {
if ((now.getHourOfDay.intValue == VarHeizEinFr) || (now.getHourOfDay.intValue == VarHeizWiedereinFr)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusFr) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
//Samstag
else if (now.getDayOfWeek.intValue == 6) {
if ((now.getHourOfDay.intValue == VarHeizEinSa) || (now.getHourOfDay.intValue == VarHeizWiedereinSa)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusSa) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
//Sonntag
else if (now.getDayOfWeek.intValue ==7) {
if ((now.getHourOfDay.intValue == VarHeizEinSo) || (now.getHourOfDay.intValue == VarHeizWiedereinSo)) {
//Heizung in Komfort (=1) schalten und Standby (=2)
sendCommand(Heizung_KanalA_Betriebsart, 1) //Wohnzimmer in Komfort mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 1) //Küche in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 1) //Flur EG/GaesteWC in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 1) //Kinderzimmer in Komfort
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 2) //Schlafzimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 2) //Badezimmer in Standby
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 2) //Speicher in Standby
sendTelegram("johannes","Heizung eingeschaltet über Heizprogramm!")
logInfo("rules","Heizung eingeschaltet über Heizprogramm!")
}
else if (now.getHourOfDay.intValue == VarHeizAusSo) {
//Heizung in Nacht schalten
sendCommand(Heizung_KanalA_Betriebsart, 3) //Wohnzimmer in Nacht mit Küche/Flur gekoppelt
Thread::sleep(500)
sendCommand(Heizung_KanalB_Betriebsart, 3) //Küche in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalC_Betriebsart, 3) //Flur EG/GaesteWC in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalD_Betriebsart, 3) //Kinderzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalE_Betriebsart, 3) //Schlafzimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalF_Betriebsart, 3) //Badezimmer in Nacht
Thread::sleep(500)
sendCommand(Heizung_KanalG_Betriebsart, 3) //Speicher in Nacht
sendTelegram("johannes","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
logInfo("rules","Heizung ausgeschaltet (Nacht) über Heizprogramm!")
}
else {
logInfo("rules","Heizprogramm keine Übereinstimmung!")
//sendTelegram("johannes","Heizungsprogramm Fehler, keine Übereinstimmung!")
}
}
end
I don’t know what is the problem why openhab stopps triggering the rule. In the logs there is nothing to see. It seems that at some point for openhab this rule doesn’t exist. To start the execution again, I have to edit the rule and than openhab reload the rule and every thing starts from the beginning:-)
Any help/ideas appreciated.
Thank you!