Rule für Lüften Warnung basierend auf Änderung der Gruppenmitglieder

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

technick90
Beiträge: 34
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Status eines Items basierend auf Variable

Beitrag von technick90 »

Vielen Dank! Ich war mir mit dem Syntax wegen der Defintion der neuen Variable sowie der if-Abfrage unsicher. Mit dem get, dem put und dem zuweisen des Wertes nach dem Komma.

Für alle anderen hier die fertige rule:

Code: Alles auswählen

import org.openhab.core.model.script.ScriptServiceUtil
import java.util.Map
val Map<String, Timer> contactTimers = newHashMap
val Map<String, Boolean> contactList = newHashMap

rule "Fenster Status"
when                                          
  Member of Fenstersensoren changed                      
then 
val String itemLabel = triggeringItem.label.toString
val String itemName = triggeringItem.name.toString
val String itemNameSperren = itemName.replace("Kontakt","Sperren")
val GenericItem SperrenItem = ScriptServiceUtil.getItemRegistry?.getItem(itemNameSperren) as GenericItem

var vName = triggeringItem.name.split("_").get(1)
var vTimerName = "timer_" + vName

contactTimers.get(vTimerName)?.cancel;
if((triggeringItem.state == "Offen") && (SperrenItem.state != ON)) {
    contactList.put(vTimerName,true)
    contactTimers.put(vTimerName, createTimer(now.plusMinutes(13)) [|             
        if(contactList.get(vTimerName)) {
            contactList.put(vTimerName,false)
            AlexaWohnzimmer_Ankuendigung.sendCommand(itemLabel + "ist seit 13 Minuten geöffnet")
			AlexaBad_TTS.sendCommand(itemLabel + "ist seit 13 Minuten geöffnet")
			AlexaArbeitszimmer_TTS.sendCommand(itemLabel + "ist seit 13 Minuten geöffnet")
			AlexaKueche_TTS.sendCommand(itemLabel + "ist seit 13 Minuten geöffnet")
			sendNotification("abc@googlemail.com", itemLabel + "ist seit 13 Minuten geöffnet", "contact", "Info")
        } else {
            AlexaWohnzimmer_Ankuendigung.sendCommand(itemLabel + "ist länger als 13 Minuten geöffnet")
			AlexaBad_TTS.sendCommand(itemLabel + "ist länger als 13 Minuten geöffnet")
			AlexaArbeitszimmer_TTS.sendCommand(itemLabel + "ist länger als 13 Minuten geöffnet")
			AlexaKueche_TTS.sendCommand(itemLabel + "ist länger als 13 Minuten geöffnet")
			sendNotification("abc@googlemail.com", itemLabel + "ist länger als 13 Minuten geöffnet", "contact", "Info")
        }
    contactTimers.get(vTimerName)?.reschedule(now.plusMinutes(5))
	])     
} else {
    contactTimers.get(vTimerName)?.cancel
}
end
Sind nun 41 Zeilen anstatt vorher 336 Zeilen.

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Rule für Lüften Warnung basierend auf Änderung der Gruppenmitglieder

Beitrag von udo1toni »

Ah, Du hast nichts davon geschrieben, dass Du die Meldung mehrfach raushauen willst...

Code: Alles auswählen

import org.openhab.core.model.script.ScriptServiceUtil
import java.util.Map
val Map<String, Timer> contactTimers = newHashMap
val Map<String, Boolean> contactList = newHashMap

rule "Fenster Status"
when
    Member of Fenstersensoren changed
then
    val String itemLabel = triggeringItem.label
    val String itemName = triggeringItem.name
    val String itemNameSperren = itemName.replace("Kontakt","Sperren")
    val GenericItem SperrenItem = ScriptServiceUtil.getItemRegistry?.getItem(itemNameSperren) as GenericItem
    var vName = triggeringItem.name.split("_").get(1)
    var vTimerName = "timer_" + vName
    contactTimers.get(vTimerName)?.cancel;
    if((triggeringItem.state == "Offen") && (SperrenItem.state != ON)) {
        contactList.put(vTimerName,true)
        contactTimers.put(vTimerName, createTimer(now.plusMinutes(13)) [|
            var text = itemLabel + "ist "
            if(contactList.get(vTimerName)) {
                contactList.put(vTimerName,false)
                text = text + "seit "
            } else
                text = text + "länger als "
            text = text + " 13 Minuten geöffnet"
            AlexaWohnzimmer_Ankuendigung.sendCommand(text)
            AlexaBad_TTS.sendCommand(text)
            AlexaArbeitszimmer_TTS.sendCommand(text)
            AlexaKueche_TTS.sendCommand(text)
            sendNotification("abc@googlemail.com", text, "contact", "Info")
            contactTimers.get(vTimerName)?.reschedule(now.plusMinutes(5))
        ])
    } else
        contactTimers.get(vTimerName)?.cancel
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten