Leider war die dann nicht mehr mit Openhab 3.X kompatibel. Nach etwas Gebastel funktioniert sie bei mir einigermaßen. Ich bekomme nach erstmaliger Ausführung jetzt immer folgende Fehlermeldung minütlich ins log:
"[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fenstersensoren-1' failed: An error occurred during the script execution: index=1, size=1 in fenstersensoren"
Meine Rule sieht aktuell so aus:
Code: Alles auswählen
var String logPrefix = 'Fensterüberwachung: '
//var boolean log = true
var String meldeText = ''
var telegramAction = getActions("telegram","telegram:telegramBot:Telegram_Bot")
rule "Fenster geöffnet"
when Time cron "0 0/1 * * * ?" // Alle 1 Minute
then
// Check ob Variablen passen, ansonsten defaultwert setzen
if ((fensterOffenWarnungAnAus.state != OFF) && (fensterOffenWarnungAnAus.state != ON)) {
fensterOffenWarnungAnAus.sendCommand(OFF)
logInfo('rules', logPrefix + 'Setze Default-Wert für fensterOffenWarnungAnAus=Aus')
}
if (fensterOffenWarnungTemperatur.state == NULL) {
fensterOffenWarnungTemperatur.postUpdate(15)
logInfo('rules', logPrefix + 'Setze Default-Wert für fensterOffenWarnungTemperatur=15')
}
if (fensterOffenWarnungMinuten.state == NULL) {
fensterOffenWarnungMinuten.postUpdate(15)
logInfo('rules', logPrefix + 'Setze Default-Wert für fensterOffenWarnungMinuten=15')
}
// botmeldung nur ab zweiter Meldung
var boolean useBot = false
// Ist Automatik an?
if (fensterOffenWarnungAnAus.state == ON) {
// Ist es kalt genug?
if ((Owm_Home_Current_Temperature_Rule.state as DecimalType).intValue <= (fensterOffenWarnungTemperatur.state as DecimalType)) {
// var String meldeText = ''
// zuerst schauen wir, ob Fenster noch in die Liste rein müssen, wenn noch nicht enthalten
gFenstS.members.filter[ i | i.state.toString() == "OPEN"].forEach[i|
val lastUpdate = (i.lastUpdate("mapdb").toEpochSecond);
// Ermitteln, wie lange in Sekunden das Fenster nun offen ist
var long offenInMinuten = (ZonedDateTime.now().toEpochSecond - lastUpdate) /60;
if (log) logInfo('rules', 'letztes Update von ' + i.name + ' (Status: ' + i.state.toString() + '): ' + lastUpdate + ' - offen in Minuten: ' + offenInMinuten.toString())
if ((offenInMinuten) >= (fensterOffenWarnungMinuten.state as DecimalType)) {
meldeText +=i.name.toString() + ' seit ' + offenInMinuten + ' Minuten, '
}
if ((offenInMinuten) > (fensterOffenWarnungMinuten.state as DecimalType)) {
// Nun auch per Telegram warnen - TTS ist in dem Fall bereits erfolgt
useBot = true
// Signalschalter_FarbeButton1 = YELLOW
}
]
if (meldeText != '') {
// Besser les- und hörbar machen
meldeText = 'Achtung - es sind Fenster seit einiger Zeit komplett offen: ' + meldeText.replaceAll('_Tuer_Status','').replaceAll('_Fenster_Status','').replaceAll('_Status','').replaceAll('KG_','Kellergeschoß_').replaceAll('EG_','Erdgeschoß ').replaceAll('OG_','Obergeschoß ').replaceAll('DG_','Dachgeschoß ').replaceAll('_',' ') + ' bitte schließen!'
if (log) logInfo('rules', logPrefix + 'Meldung über offene Fenster wird erfolgen...')
// Text per Telegram und Alexa rausschicken...
if (useBot) {
telegramAction.sendTelegram(meldeText)
}
}
} else {
if (log) logInfo('rules', logPrefix + 'Es ist nicht kalt genug. Temperatur ist ' + Owm_Home_Current_Temperature.state.toString() + ' Schwellwert: ' + fensterOffenWarnungTemperatur.state.toString())
}
}
if (gFenstS.members.forall == CLOSED ) {
useBot = false
offenInMinuten = 0
}
end
Habe ich oben geschrieben. Die Rule ist aktuell bestenfalls als Beta anzusehen. Störend ist aktuell auch noch, dass die Warnung (aktuell via Telegram) sich pro Durchlauf immer verlängert. Das ist im Moment nicht so wichtig, weswegen ich das noch nicht angegangen bin. Das sieht dann so in der Form aus:Nach etwas Gebastel funktioniert sie bei mir einigermaßen.
Achtung - es sind Fenster seit einiger Zeit komplett offen: Achtung - es sind Fenster seit einiger Zeit komplett offen: Achtung - es sind Fenster seit einiger Zeit komplett offen: Achtung - es sind Fenster seit einiger Zeit komplett offen: Achtung - es sind Fenster seit einiger Zeit komplett offen: GaesteWC seit 15 Minuten, bitte schließen!GaesteWC seit 16 Minuten, bitte schließen!GaesteWC seit 17 Minuten, bitte schließen!GaesteWC seit 18 Minuten, bitte schließen!GaesteWC seit 19 Minuten, bitte schließen!