Ankündigung

Einklappen
Keine Ankündigung bisher.

Openhab 2 Rules in Funktionen auslagen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Openhab 2 Rules in Funktionen auslagen?

    Hi zusammen,

    weiss jemand, ob es möglich ist die Logik einer Rule in eine Funktion (mit Parametern) auszulagen, um diese in mehreren Rules wiederverwenden zu können?

    Im Moment habe ich für meine Fensterüberwachung x-mal die gleiche Logik in unterschiedlchen Rules erstellt, was ja nicht wirklich wartungsfreundlich ist.
    lg
    Stefan

    #2
    Du kannst hierfür Lambdas nehmen. Schau mal im Wiki : https://github.com/openhab/openhab1-...-via-Functions

    Kommentar


      #3
      Ansonsten kann man bei geschickter Namenswahl auch gut mit Gruppen arbeiten. Schau mal hier: https://community.openhab.org/t/desi...in-rules/20512

      Kommentar


        #4
        Danke für die Vorschläge, ich habs nun mit den Lambdas versucht:
        Code:
        var long Fenster_Check_Intervall = 1
        
        val org.eclipse.xtext.xbase.lib.Functions$Function3 fensterCheck = [
            org.openhab.core.library.items.ContactItem fensterItem,
            org.openhab.core.library.items.RollershutterItem rollershutterItem,
            String fensterName |
                if(fensterItem.state == OPEN)
                {
                    Thread::sleep(Fenster_Check_Intervall * 60 * 1000)
                    if(fensterItem.state == OPEN)
                    {
                        pushover("Fenster " + fensterName + " " + Fenster_Check_Intervall + " Minuten geöffnet")    
                        Thread::sleep(Fenster_Check_Intervall * 60 * 1000)    
                        if(fensterItem.state == OPEN)
                        {
                            pushover("Fenster " + fensterName + " " + " + (Fenster_Check_Intervall*2) + " Minuten geöffnet")
                            Thread::sleep(Fenster_Check_Intervall * 60 * 1000)    
                            if(fensterItem.state == OPEN)
                            {
                                pushover("Fenster " + fensterName + " " + " + (Fenster_Check_Intervall*3) + " Minuten geöffnet")
                                Thread::sleep(3600000-Fenster_Check_Intervall * 60 * 1000 * 3)    
                                if(fensterItem.state == OPEN)
                                {
                                    pushover("Fenster " + fensterName + " 1 Stunde geöffnet, Rollladen " + fensterName + " wird geschlossen")
                                    sendCommand(rollershutterItem, DOWN)
                                }        
                            }    
                        }
                    }    
                }
        ]
        
        
        rule "Fenster EG Küche zum lüften geöffnet -> Benachrichtigung wenn länger offen"
            when
                Item Contact_EG_Kueche changed to OPEN
            then        
                fensterCheck.apply(Contact_EG_Kueche, Shutter_EG_Kueche, "Küche")
            end
        bekomme dabei aber folgenden Fehler:

        Code:
        2017-05-06 13:55:46.620 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Fenster EG Küche zum lüften geöffnet -> Benachrichtigung wenn länger offen': The name '<XFeatureCallImplCustom>.state' cannot be resolved to an item or type.
        Habt ihr eine Idee dazu?
        lg
        Stefan

        Kommentar

        Lädt...
        X