Hello All,
I managed to install and run a few MAX! Thermostates on my raspi3 with openhabian.
Automation works pretty well with rules setting the temperature at certain times during the day with a rule I adapted from
https://openhabforum.de/viewtopic.php?t=405
My problem is the following: starting a timer and lowering/rising the temperature triggered by a window sensor creates an error in the log and nothing happens.
Here is the log entry:
`
2019-01-25 15:21:01.326 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Event_WCDoor_open': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.Timer.reschedule(org.joda.time.base.AbstractInstant) on instance: doorOpenTimerWC (Type=NumberItem, State=NULL, Label=null, Category=null)
Here is my rule:
var Timer doorOpenTimerWC = null
rule "Cron_Heating_WC"
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_WC", "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_WC", "Parameter für Heizungssteuerung: Heizperiode=ON, Wochentag=" + wd + ", Uhrzeit: " + hour + ":" + min)
//7:00 Uhr Aufheizperiode WC
if (hour == 7 && min <= 5) {
logInfo("HomeBox.HeatingRules:Cron_Heating_WC", "Setze Temperatur WC auf Komforttemperatur " + GlobalHeatingComfortTemp2.state.toString + "°C geregelt")
EG_WC_Target_Temp.sendCommand(GlobalHeatingComfortTemp2.state as Number)
}
//23:00 Uhr außer Freitag Absenktemperatur zur Nacht
else if (hour == 23 && min <= 5 && wd < 5) {
logInfo("HomeBox.HeatingRules:Cron_Heating_WC", "Setze Temperatur WC auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
EG_WC_Target_Temp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
}
//23:00 Uhr Freitag Absenktemperatur zur Nacht
else if (hour == 23 && min <= 5 && wd == 5) {
logInfo("HomeBox.HeatingRules:Cron_Heating_WC", "Setze Temperatur WC auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
EG_WC_Target_Temp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
}
}
// Wochenende (Sa - So)
else if (GlobalHeatingPeriod.state.equals(ON) && wd >= 6){
logDebug("HomeBox.HeatingRules:Cron_Heating_WC", "Parameter für Heizungssteuerung: Heizperiode=ON, Wochentag=" + wd)
//8:00 Uhr Aufheizperiode WC
if ((hour == 8 && min <= 05) && EG_WZ_Target_Temp2.state != GlobalHeatingComfortTemp1.state) {
EG_WC_Target_Temp.sendCommand(GlobalHeatingComfortTemp2.state as Number)
logInfo("HomeBox.HeatingRules:Cron_Heating_WC", "Temperatur WC auf Komforttemperatur " + GlobalHeatingComfortTemp2.state.toString + "°C geregelt")
}
//Samstag 23:50 Uhr Absenktemperatur zur Nacht
else if (hour == 23 && min <= 5 && wd == 6) {
EG_WC_Target_Temp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
logInfo("HomeBox.HeatingRules:Cron_Heating_WC", "Temperatur WC auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
}
//Sonntag 23:00 Uhr Absenktemperatur zur Nacht
else if (hour == 23 && min <= 5 && wd == 7) {
EG_WC_Target_Temp.sendCommand(GlobalHeatingSetBackTemp.state as Number)
logInfo("HomeBox.HeatingRules:Cron_Heating_WC", "Temperatur WC auf Absenktemperatur " + GlobalHeatingSetBackTemp.state.toString + "°C geregelt")
}
}
logDebug("HomeBox.HeatingRules:Cron_Heating_WC", "Prüfung erfolgreich")
}
end
/***********************************************************************************
* Ereignissteuerung bei geöffneter Tür im WC
*
* Wird im WC eine Tür während der Heizperiode geöffnet und ist länger als
* 30 Sekunden geöffnet, werden alle Heizkörper abgeschaltet.
* Sobald alle Türen wieder geschlossen sind, wird die ursprüngliche Temperatur
* wieder hergestellt.
*/
rule "Event_WCDoor_open"
when
Item Toilette changed
then
// Kein Timer läuft und alle Fenster sind geschlossen --> Wiederherstellen der letzten Temperatur
if (previousState == OPEN && doorOpenTimerWC === null && Toilette.state == CLOSED){
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Alle Fenster und Türen im WC geschlossen, setze letzte Zieltemperatur")
//States wiederherstellen
EG_WC_Target_Temp.sendCommand(sysWCTargetTempState.state as Number)
}
// Kein Timer läuft und ein Fenster wird geöffnet
else if (doorOpenTimerWC === null && (Toilette.state == OPEN)){
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Fenster oder Tür im WC geöffnet")
//Aktuelle Zieltemperatur speichern
//States speichern
sysWCTargetTempState.postUpdate(EG_WC_Target_Temp.state as Number)
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", " EG_WC_Target_Temp " + sysWCTargetTempState.state.toString + "°C gespeichert")
//Timer mit gewünschtem Delay (doorOpenDelay) setzen
doorOpenTimerWC = createTimer(now.plusSeconds(30)) [|
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Delay " + 30 + " verstrichen ,schalte Heizkörper aus")
EG_WC_Target_Temp.sendCommand(12)
doorOpenTimerWC.cancel()
]
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Starte Timer mit Delay " + 30)
}
// Timer läuft und alle Türen sind wieder geschlossen
else if (previousState == OPEN && doorOpenTimerWC !== null && Toilette.state == CLOSED && WZ_1.state == CLOSED && WZ_2.state == CLOSED && WZ_3.state == CLOSED){
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Alle Fenster und Türen im WC geschlossen, setze letzte Zieltemperatur (" + sysWCTargetTempState.state.toString + "°C)")
//States wiederherstellen
EG_WC_Target_Temp.sendCommand(sysWCTargetTempState.state as Number)
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Beende laufenden Timer")
doorOpenTimerWCdoorOpenTimerWC.cancel()
doorOpenTimerWC = null
}
// Timer läuft und weitere Tür wird geöffnet
else if (previousState == CLOSED && doorOpenTimerWC !== null) {
logInfo("HomeBox.HeatingRules:Event_WCDoor_open", "Laufenden Timer gefunden, starte erneut mit Delay " + 30)
doorOpenTimerWC.reschedule(now.plusSeconds(30))
}
end
Closing the window creates the following log entry:
2019-01-25 15:05:58.378 [INFO ] [meBox.HeatingRules:Event_WCDoor_open] - Alle Fenster und Türen im WC geschlossen, setze letzte Zieltemperatur (NULL°C) 2019-01-25 15:05:58.388 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Event_WCDoor_open': Could not cast NULL to java.lang.Number; line 104, column 34, length 36
Toilette is the window sensor (I know, naming needs some improvement)
EG_WC_Target_Temp is the thermostate
sysWCTargetTempState is an item defined as number to save the temperature set before opening the window.
GlobalHeatingSetBackTemp and GlobalHeatingComfortTemp2 are number /setpoint items to change general
temperature setting without opening the rule.
Any help is appreciated.
Thanks in advance
Florian