Seite 3 von 6

Re: HTTP Umstellung V1 => V3

Verfasst: 10. Feb 2021 22:22
von udo1toni
Das Problem ist hier vermutlich, dass Du Number:Temperature als Itemtyp verwendest, aber keine Einheit mit angibst.
Das eine wäre (einfach um sicherzustellen, dass es wie geplant funktioniert), ein bisschen Logging einzubauen, das andere wäre, die Einheit zu ergänzen. So:

Code: Alles auswählen

rule "Komma zu Punkt"
when
    Member of gIN changed
then
    logInfo("kommapunkt","Triggerndes Item: {}",triggeringItem.name)
    val myOut = gOUT.members.filter[i|i.name == triggeringItem.name.split("_").get(1)+"_OUT"].head
    logInfo("kommapunkt","Item Out: {}",myOut.name)
    myOut.postUpdate(Float::parseFloat(String::format("%s",triggeringItem.state).replace(',','.'))|°C)
end
Natürlich funktioniert das dann nur mit Number:Temperature Items als Output.

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 09:16
von wosch
Ich hatte in der rule für ein Item auch schon Number:Temperature und da auch keine Einheit angegeben:

Code: Alles auswählen

rule "Istwert HK1"
when 
Item HTTPLWZAnlage_IstwertHK1 changed 
then 
LWZ_Istwert_HK1.postUpdate(Float::parseFloat(String::format("%s",HTTPLWZAnlage_IstwertHK1.state).replace(',','.')))
end 
Da hat es funktioniert.

Ich habe für die neue all-in-one-rule den Itemtyp für _OUT trotzdem jetzt auf Number geändert. Da die Items Temperaturen, Druck, Volumenstrom und Dimensionless sind, klappt es sonst nicht mit der Einheit. Leider funktioniert es trotzdem noch nicht. Logging ist auch eingebaut und es kommt folgende Meldung:

Code: Alles auswählen

2021-02-11 09:03:11.125 [INFO ] [nhab.core.model.script.LWZKommaPunkt] - Triggerndes Item: LWZAnlageIstwertHK1_IN
2021-02-11 09:03:11.125 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'LWZ-1' failed: cannot invoke method public abstract java.lang.String org.openhab.core.items.Item.getName() on null in LWZ

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 14:28
von udo1toni
Und die beiden Items heißen LWZAnlageIstwertHK1_IN und LWZAnlageIstwertHK1_OUT?

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 15:38
von wosch
LWZAnlageIstwertHK1_IN
LWZAnlageIstwertHK1_OUT

beides gerade nochmal per copy&paste aus der UI gezogen. Das _IN Item wird im log als triggerndes Item auch mit dem korrekten Namen ausgegeben: LWZAnlageIstwertHK1_IN

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 16:26
von udo1toni
Strange.

Irgendwie geht was beim filtern auf das richtige Item schief.

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 16:31
von udo1toni
Etwas Debugging, um zu verstehen, was da schief geht:

Code: Alles auswählen

rule "Komma zu Punkt"
when
    Member of gIN changed
then
    logInfo("kommapunkt","Triggerndes Item: {}",triggeringItem.name)
    val myOut = gOUT.members.forEach[i|
        logInfo("kommapunkt","Schleife: aktuelles Item Out: {}",i.name)
        if(i.name == triggeringItem.name.split("_").get(1)+"_OUT")
            logInfo("kommapunkt","Treffer: Item Out: {}",i.name)
    ]
//    logInfo("kommapunkt","Item Out: {}",myOut.name)
//    myOut.postUpdate(Float::parseFloat(String::format("%s",triggeringItem.state).replace(',','.'))|°C)
end
Die Rule muss jetzt bei jedem Aufruf eine Liste aller Items in gOut ausspucken und beim richtigen Item den Treffer melden...

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 17:11
von wosch
Erstmal Danke, dass du mir so geduldig hilfst! :)

Bei der neuen rule werden im VSC 2 Fehler angezeigt:

Code: Alles auswählen

The value of the local variable myOut is not used(org.eclipse.xtext.xbase.validation.IssueCodes.unused_local_variable)
Type mismatch: type void is not applicable at this location(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
myOut ist gelb unterstrichen, alles danach bis zum ] ist rot unterstrichen

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 17:14
von wosch
es wird aber trotzdem geloggt, die rule läuft also scheinbar trotzdem:

Code: Alles auswählen

2021-02-11 17:10:46.191 [INFO ] [openhab.core.model.script.kommapunkt] - Triggerndes Item: LWZAnlageIstwertHK1_IN
2021-02-11 17:10:46.193 [INFO ] [openhab.core.model.script.kommapunkt] - Schleife: aktuelles Item Out: LWZAnlageIstwertHK1_OUT
2021-02-11 17:10:46.195 [INFO ] [openhab.core.model.script.kommapunkt] - Schleife: aktuelles Item Out: LWZAnlageSollwertHK1_OUT
Aktuell habe ich nur die beiden Paare Istwert und Sollwert angelegt.

Wenn ich die logs und die rule richtig verstehe, geht er die Items durch, erzielt aber keinen Treffer, obwohl er das sollte?!

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 18:02
von udo1toni
Genau, das ist der Punkt...
Die erste Meldung stammt von der Val Definition... Die Schleife wurde dennoch durchlaufen, das ist ja gut. Wir probieren weiter...

Code: Alles auswählen

rule "Komma zu Punkt"
when
    Member of gIN changed
then
    logInfo("kommapunkt","Triggerndes Item: {}",triggeringItem.name)
    logInfo("kommapunkt","Teilstring: {}",triggeringItem.name.split("_").get(1))
    // val myOut = gOUT.members.filter[i|i.name.startsWith(triggeringItem.name.split("_").get(1))].head
//    logInfo("kommapunkt","Item Out: {}",myOut.name)
//    myOut.postUpdate(Float::parseFloat(String::format("%s",triggeringItem.state).replace(',','.'))|°C)
end

Re: HTTP Umstellung V1 => V3

Verfasst: 11. Feb 2021 18:40
von wosch

Code: Alles auswählen

2021-02-11 18:36:47.014 [INFO ] [openhab.core.model.script.kommapunkt] - Triggerndes Item: LWZAnlageIstwertHK1_IN
2021-02-11 18:36:47.015 [INFO ] [openhab.core.model.script.kommapunkt] - Teilstring: IN
Er nimmt den falschen Teil des Item-Names, oder? D.h in der rule get(0) statt get(1)?

EDIT: Yes, damit geht's!! :mrgreen: 8-)
Danke Udo!!