OH3 Fehlermeldung "inside a lambda expression"

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
fkempter
Beiträge: 46
Registriert: 6. Jan 2018 13:59
Answers: 0

OH3 Fehlermeldung "inside a lambda expression"

Beitrag 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
    }

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: OH3 Fehlermeldung "inside a lambda expression"

Beitrag 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.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

fkempter
Beiträge: 46
Registriert: 6. Jan 2018 13:59
Answers: 0

Re: OH3 Fehlermeldung "inside a lambda expression"

Beitrag 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

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

Re: OH3 Fehlermeldung "inside a lambda expression"

Beitrag 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.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

fkempter
Beiträge: 46
Registriert: 6. Jan 2018 13:59
Answers: 0

Re: OH3 Fehlermeldung "inside a lambda expression"

Beitrag 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
    }

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

Re: OH3 Fehlermeldung "inside a lambda expression"

Beitrag von udo1toni »

Gar nicht. die UI Rules erlauben das so nicht. Du kannst allenfalls ein Item als globalen Speicher nutzen.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: OH3 Fehlermeldung "inside a lambda expression"

Beitrag 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.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Antworten