Re: [Rule] Heizung steuern bei Änderung des Fenstersensors
Verfasst: 6. Sep 2022 22:32
Nabend,
ich habe das gerade mal so wie Du es beschrieben hast eingerichtet. Als erstes habe ich ein item für den benötigten Zeitstempel angelegt.
items:
Anschließend habe ich in den jeweiligen Persistenzen die nötigen Einträge gemacht.
mapdb.persist:
rrd4j.persist:
Danach habe ich die vorhandene rule mit Deiner Erläuterung mal versucht umzubauen:
fensteroffen.rules
Im VS-Code wird mir vorab schon bei der Zeile:
als Fehlermeldung: "Type mismatch: cannot convert from HistoricItem to Command"
Trotzdem habe ich mal die Funktion überprüft und den log beobachtet. Beim öffnen des Fensters funktioniert alles wie gewünscht. Die Temperatur wird abgesenkt, der Zeitstempel wird gesetzt. Beim öffnen jedoch erhalte ich eine Fehlermeldung. Die Temperatur bleibt abgesenkt.
Hast Du noch eine Idee?
ich habe das gerade mal so wie Du es beschrieben hast eingerichtet. Als erstes habe ich ein item für den benötigten Zeitstempel angelegt.
items:
Code: Alles auswählen
Number BDO_Heizung_SetTemp "Solltemperatur [%.1f °C]"
DateTime BDO_Zeitstempel "offene Zeit"
mapdb.persist:
Code: Alles auswählen
Strategies {
default = everyUpdate
}
Items {
BDO_Zeitstempel : strategy = everyChange, restoreOnStartup
}
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?"
default = everyChange
}
Items {
BDO_Heizung_SetTemp : strategy = everyUpdate, everyMinute
}
fensteroffen.rules
Code: Alles auswählen
// vordefinierte Temperaturen
val Number tempOff = 8.0
// Timervariable definieren
var Timer fenstertimer = null
// Rule Fenster offen für das Badezimmer oben
rule "Heizung Bad oben"
when
Item BDO_Fenster_Status changed
then
val actions = getActions("pushover", "pushover:pushover-account:pushover")
if(BDO_Fenster_Status.state != CLOSED) {
BDO_Zeitstempel.postUpdate(new DateTimeType(now.minusSeconds(1)))
BDO_Heizung_SetTemp.sendCommand(tempOff)
logInfo("Heizung", "Fenster im Bad oben geöffnet und Heizkörper abgedreht")
fenstertimer = createTimer(now.plusMinutes(10), [|
fenstertimer = null
])
} else {
BDO_Heizung_SetTemp.sendCommand(BDO_Heizung_SetTemp.historicState((BDO_Zeitstempel.state as DateTimeType).getZonedDateTime()))
BDO_Zeitstempel.postUpdate(new DateTimeType(now.plusSeconds(1)))
logInfo("Heizung", "Fenster im Bad oben geschlossen und Heizkörper aufgedreht")
actions.sendHtmlMessage("Pushover", "Fenster im Bad oben geschlossen und Heizkörper aufgedreht")
if(fenstertimer !== null) {
fenstertimer.cancel
fenstertimer = null
}
}
end
Code: Alles auswählen
BDO_Heizung_SetTemp.sendCommand(BDO_Heizung_SetTemp.historicState((BDO_Zeitstempel.state as DateTimeType).getZonedDateTime()))
Trotzdem habe ich mal die Funktion überprüft und den log beobachtet. Beim öffnen des Fensters funktioniert alles wie gewünscht. Die Temperatur wird abgesenkt, der Zeitstempel wird gesetzt. Beim öffnen jedoch erhalte ich eine Fehlermeldung. Die Temperatur bleibt abgesenkt.
Code: Alles auswählen
2022-09-06 22:26:43.057 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'BDO_Fenster_Status' changed from CLOSED to OPEN
2022-09-06 22:26:43.082 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'BDO_Heizung_SetTemp' received command 8.0
2022-09-06 22:26:43.086 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'BDO_Zeitstempel' changed from 2022-09-06T22:11:06.830649+0200 to 2022-09-06T22:26:42.058248+0200
2022-09-06 22:26:43.095 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'BDO_Heizung_SetTemp' predicted to become 8.0
2022-09-06 22:26:43.117 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'BDO_Heizung_SetTemp' changed from 10 to 8.0
2022-09-06 22:26:55.375 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fensteroffen-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.actions.BusEvent.sendCommand(org.openhab.core.items.Item,org.openhab.core.types.Command) on instance: null in fensteroffen
==> /var/log/openhab/events.log <==
2022-09-06 22:26:55.363 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'BDO_Fenster_Status' changed from OPEN to CLOSED