Seite 1 von 1

OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 15. Dez 2021 05:22
von fkempter
Hallo
In OH2.5 hat diese Rule noch funktioniert,
aber in Openhab 3.1 bekome ich diese Fehlermeldung
"Cannot refer to the non-final variable tmpRegenFlag inside a lambda expression;"

Getriggert wird die Rule das Item "Wetter_Aktuell_Current_Rain" wenn Changed
Die Funktion sollte nur einmal eine Meldung senden wenn die Regenmenge >0 und ein Fenster offen ist.

Code: Alles auswählen

    val actions =  getActions("pushover","pushover:pushover-account:Pushover_Regen") 
    var Boolean tmpRegenFlag = true
    var RegenMenge =  Float::parseFloat(String::format("%s",Wetter_Aktuell_Current_Rain.state).replace('mm',''))

    if (RegenMenge > 0.0 && !tmpRegenFlag) {
        gtuerFensteroffen.members.forEach[door |
            if (door.state.toString == "OPEN") {
                    tmpRegenFlag = true
            }    
        ]
        if (tmpRegenFlag == true)  {
            actions.sendMessage("Alarm", "Regen + Fenster offen")   
        }
    } else if (RegenMenge == 0.0 && tmpRegenFlag ) {
        tmpRegenFlag = false
    }

Re: OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 15. Dez 2021 09:45
von int5749
Hi und guten Morgen

ein kurzes googlen der Fehlermeldung aus VS Code lieferte diesen link

Fazit: tmpRegenFlag sollte global definiert werden.

Im Anschluß hat VSCode bei mir keinen Fehler mehr gezeigt.

Re: OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 15. Dez 2021 17:29
von fkempter
Hi
Danke für deine Antwort
Aber in OH3.1 Oberfläche (DSL-Script) kann ich doch keine globale Variablen mehr setzen.
Nur wenn ich Daten xx.rules verwende.
Oder bin ich da falsch dran?

SG Franz

Re: OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 15. Dez 2021 22:18
von udo1toni
Ja und? Du schreibst: in openHAB2.5 hat das noch funtioniert. openHAB2.5 erlaubt nicht das Erstellen einer komplexen Rule über die UI. Wohl kannst Du aber in openHAB3.1 (und auch weiterhin... das wird entgegen allen Unkenrufen erst mal nicht verschwinden) Rules exakt so erstellen, wie das auch schon unter openHAB 1.0 funktioniert hat. Mit der Einschränkung, dass sich an einigen Stellen die Syntax leicht geändert hat, insbesondere steht kein Joda Time mehr zur Verfügung.

Es gibt derzeit keinen Grund, Rules unbedingt über die UI zu erstellen, außer, man will partout die UI dafür nutzen. Dann allerdings darf man nicht mit "Unter OH2 hat das noch funktioniert" kommen, denn unter OH2 gab es solche Rules überhaupt nicht.

Re: OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 16. Dez 2021 06:04
von fkempter
Hi
meine Dateibezogenen Rules funktionieren auch in >OH30.
Ich wollte eigentlich nur wissen wie ich es im OH30 als UI dsl.rule Script programmieren muss damit kein Fehler ausgeworfen wird.
Ich weiß nicht genau wo die globale Variaable tmpRegenFlag im UI-Code gesetzt werden muss damit es keinen Fehler auswirft :
"Cannot refer to the non-final variable tmpRegenFlag inside a lambda expression;"

Code: Alles auswählen

    val actions =  getActions("pushover","pushover:pushover-account:Pushover_Regen") 
   var Boolean tmpRegenFlag = true
    var RegenMenge =  Float::parseFloat(String::format("%s",Wetter_Aktuell_Current_Rain.state).replace('mm',''))

    if (RegenMenge > 0.0 && !tmpRegenFlag) {
        gtuerFensteroffen.members.forEach[door |
            if (door.state.toString == "OPEN") {
                    tmpRegenFlag = true
            }    
        ]
        if (tmpRegenFlag == true)  {
            actions.sendMessage("Alarm", "Regen + Fenster offen")   
        }
    } else if (RegenMenge == 0.0 && tmpRegenFlag ) {
        tmpRegenFlag = false
    }

Re: OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 16. Dez 2021 08:53
von udo1toni
Gar nicht. die UI Rules erlauben das so nicht. Du kannst allenfalls ein Item als globalen Speicher nutzen.

Re: OH3 Fehlermeldung "inside a lambda expression"

Verfasst: 16. Dez 2021 13:00
von Tokamak
fkempter hat geschrieben: 15. Dez 2021 05:22 aber in Openhab 3.1 bekome ich diese Fehlermeldung
"Cannot refer to the non-final variable tmpRegenFlag inside a lambda expression;"
Handelt es sich tatsächlich um eine Fehlermeldung? Auch OH2.5 hat bei dieser Konstruktion gewarnt, man konnte es aber geflissentlich ignorieren, und es hat funktioniert.