Seite 2 von 5

Re: Smarte Kaffee Maschine

Verfasst: 17. Apr 2022 19:11
von mad-mike
Habe ich erledigt:

Es kommt folgendes:

Code: Alles auswählen

2022-04-17 19:09:14.917 [INFO ] [org.openhab.core.model.script.coffee] - nOld = 0.0 nNew = 30.43
gefolgt mit der Fehlermeldung:

Code: Alles auswählen

2022-04-17 19:09:14.919 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Kaffee1-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in Kaffee1
(die 30 Watt sind erstmal nur eine ""Test Lampe"" Die Kaffeemaschine hat ~ 950Watt)

Danke

Re: Smarte Kaffee Maschine

Verfasst: 17. Apr 2022 19:28
von udo1toni
Stochern im Nebel... Kannst Du mal bei der Definition der Variablen nOld einen Wert Über 0 angeben?

Code: Alles auswählen

    var nOld = 0.5

Re: Smarte Kaffee Maschine

Verfasst: 17. Apr 2022 19:45
von mad-mike
Musste meine Antwort noch mal neu Schreiben:
Edit:

Kannst Du mal bei der Definition der Variablen nOld einen Wert Über 0 angeben?
Ich kann es Speicher ohne Fehlermeldung.

der Wert im Log "dynamisch" = sprich, es wird immer der vorher angezeigte ""New" wert angezeigt. :idea:

Re: Smarte Kaffee Maschine

Verfasst: 17. Apr 2022 22:33
von udo1toni
Ja, aber das passt dann ja. nOld ist der vorherige Wert, nNew der aktuelle Wert. War nOld 0 und nNew ist 950 (die hattest Du ja oben angegeben) und es läuft kein Timer, dann wurde die Maschine gerade eingeschaltet. War nOld 950 und nNew ist 0 und es läuft kein Timer, dann hat die Kaffeemaschine aufgehört zu heizen und man kann den Timer starten.

Re: Smarte Kaffee Maschine

Verfasst: 18. Apr 2022 13:31
von mad-mike
Das passt schon, aber es geht an dem Punkt der Berechnung nicht weiter...

Habe den Wert mal von 100 auf 25 gesenkt. Kann ja nicht so viel Kaffee trinken... :-D

Meine Test Lampe hat 30 Watt...

Also habe ich dann Mal die Lampe ausgeschaltet und der Wert sinkt wie erwartet von 30 auf 0. Das Log zeigt plausibele Werte.

Aber es tut sich nix. Also es kommt keine Nachricht raus, und die Fehlermeldung kommt auch weiter hin...

Re: Smarte Kaffee Maschine

Verfasst: 18. Apr 2022 16:13
von udo1toni
Das kann nicht sein...

Also noch ausführlicheres Logging:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tKaffee = null                                                // Timer für Kaffee Meldungen

rule "Kaffeemaschine Überwachung 1"
when
    Item shellyplugsb580c9192168178120_Leistung changed
then
    var nOld = 0
    if(previousState instanceof Number)
        nOld = (previousState as Number).floatValue

    var nNew = 0
    if(newState instanceof Number)
        nNew = (newState as Number).floatValue

    logInfo("coffee","nOld = {} nNew = {}",nOld,nNew)
    if(tKaffee === null) {
        logInfo("coffee","tKaffee === null")
        if(nNew > 25) {
            logInfo("coffee","nNew > 25")
            if(nOld < 1) {
                logInfo("coffee","nOld < 1")
                sendBroadcastNotification("Kaffee wird gekocht :) ")
            }
        } else if(nNew < 1) {
            logInfo("coffee","nNew < 1")
            sendBroadcastNotification("Kaffee ist fertig :) ")
            tKaffee = createTimer(now.plusMinutes(30),[|
                sendBroadcastNotification("Kaffee ist eingekocht ;) ")
                tKaffee = null
            ])
        }
    }
end

rule "Kaffeemaschine Überwachung 2"
when
    Item shellyplugsb580c9192168178120_Betrieb changed to OFF
then
    tKaffee?.cancel
    tKaffee = null
end
Es wird jetzt quasi jeder Schritt einzeln überprüft, um herauszufinden, welcher Vergleich nun wirklich den Fehler auslöst.

Re: Smarte Kaffee Maschine

Verfasst: 18. Apr 2022 20:48
von mad-mike
Danke für deine Bemühungen, und Versuche.
Habe auch den PI schon mal neu gestartet wo openhab drauf läuft.
Spielt es eine Rolle, das ich OH3.2 nutze?


Habe dein Rule gespeichert und gestartet:

Code: Alles auswählen

2022-04-18 20:39:43.172 [INFO ] [org.openhab.core.model.script.coffee] - nOld = 0.0 nNew = 30.08

2022-04-18 20:39:43.174 [INFO ] [org.openhab.core.model.script.coffee] - tKaffee === null

2022-04-18 20:39:43.177 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in test
Dann habe ich die Lampe ausgeschaltet, Der Shelly blieb von der Messung her aber noch Aktiv.... Eigentlich müsste er ja dann eine Nachricht senden, tut aber nix.

Code: Alles auswählen

2022-04-18 20:39:46.408 [INFO ] [org.openhab.core.model.script.coffee] - nOld = 30.08 nNew = 0.0

2022-04-18 20:39:46.413 [INFO ] [org.openhab.core.model.script.coffee] - tKaffee === null

2022-04-18 20:39:46.415 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in test
Immer wenn es eine Leistungsänderung gibt, gibt´a genau diese Fehler Meldung, bis zu dem Punkt, wo ich den Shelly auf "OFF" setze...

Hast du noch eine Idee?

Danke und Gruss.

Re: Smarte Kaffee Maschine

Verfasst: 18. Apr 2022 21:29
von udo1toni
Was mir gerade erst auffällt: offensichtlich macht er einen Integer Vergleich... absurd... hab ich vorher komplett übersehen...

Probiere bitte mal , ob es beim Vergleich mit einem expliziten Floatwert funktioniert. (einfach .0 an den Wert anhängen)

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tKaffee = null                                                // Timer für Kaffee Meldungen

rule "Kaffeemaschine Überwachung 1"
when
    Item shellyplugsb580c9192168178120_Leistung changed
then
    var nOld = 0
    if(previousState instanceof Number)
        nOld = (previousState as Number).floatValue

    var nNew = 0
    if(newState instanceof Number)
        nNew = (newState as Number).floatValue

    logInfo("coffee","nOld = {} nNew = {}",nOld,nNew)
    if(tKaffee === null) {
        logInfo("coffee","tKaffee === null")
        if(nNew > 25.0) {
            logInfo("coffee","nNew > 25")
            if(nOld < 1.0) {
                logInfo("coffee","nOld < 1")
                sendBroadcastNotification("Kaffee wird gekocht :) ")
            }
        } else if(nNew < 1.0) {
            logInfo("coffee","nNew < 1")
            sendBroadcastNotification("Kaffee ist fertig :) ")
            tKaffee = createTimer(now.plusMinutes(30),[|
                sendBroadcastNotification("Kaffee ist eingekocht ;) ")
                tKaffee = null
            ])
        }
    }
end

rule "Kaffeemaschine Überwachung 2"
when
    Item shellyplugsb580c9192168178120_Betrieb changed to OFF
then
    tKaffee?.cancel
    tKaffee = null
end

Re: Smarte Kaffee Maschine

Verfasst: 19. Apr 2022 20:33
von mad-mike
Moin.

Habe es versucht.

Fehler weiterhin vorhanden, aber es hat sich geändert von (int,int) jetzt neu: (int,double)

Start:

Code: Alles auswählen

2022-04-19 20:12:57.718 [INFO ] [org.openhab.core.model.script.coffee] - nOld = 0.0 nNew = 30.54

2022-04-19 20:12:57.721 [INFO ] [org.openhab.core.model.script.coffee] - tKaffee === null

2022-04-19 20:12:57.723 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,double) on instance: null in test

Testlampe aus:

Code: Alles auswählen

2022-04-19 20:13:05.714 [INFO ] [org.openhab.core.model.script.coffee] - nOld = 30.54 nNew = 0.0

2022-04-19 20:13:05.718 [INFO ] [org.openhab.core.model.script.coffee] - tKaffee === null

2022-04-19 20:13:05.721 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,double) on instance: null in test
:?:
einfach .0 an den Wert anhängen
Hatte ich auch schon mal versucht. Auch mit 2 Nachkomma stellen...

So irgendwie will das nicht so recht.


trotzdem danke für deine Mühe. ;) :)

Re: Smarte Kaffee Maschine

Verfasst: 19. Apr 2022 21:21
von udo1toni
Das kann nicht sein... da ist irgendwas oberfaul.

Wir können die Variablen notfalls auch typisieren:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tKaffee = null                                                // Timer für Kaffee Meldungen

rule "Kaffeemaschine Überwachung 1"
when
    Item shellyplugsb580c9192168178120_Leistung changed
then
    var Number nOld = 0
    if(previousState instanceof Number)
        nOld = (previousState as Number).floatValue

    var Number nNew = 0
    if(newState instanceof Number)
        nNew = (newState as Number).floatValue

    logInfo("coffee","nOld = {} nNew = {}",nOld,nNew)
    if(tKaffee === null) {
        logInfo("coffee","tKaffee === null")
        if(nNew > 25.0) {
            logInfo("coffee","nNew > 25")
            if(nOld < 1.0) {
                logInfo("coffee","nOld < 1")
                sendBroadcastNotification("Kaffee wird gekocht :) ")
            }
        } else if(nNew < 1.0) {
            logInfo("coffee","nNew < 1")
            sendBroadcastNotification("Kaffee ist fertig :) ")
            tKaffee = createTimer(now.plusMinutes(30),[|
                sendBroadcastNotification("Kaffee ist eingekocht ;) ")
                tKaffee = null
            ])
        }
    }
end

rule "Kaffeemaschine Überwachung 2"
when
    Item shellyplugsb580c9192168178120_Betrieb changed to OFF
then
    tKaffee?.cancel
    tKaffee = null
end