Seite 1 von 2

Rule mit Color State funktioniert nicht mehr

Verfasst: 13. Nov 2021 18:24
von Quautiputzli
Hallo, ich habe mit ein Item angelegt, um 2 Farblampen gleich anzusteuern. Das ganze geht über eine rule, denn mit der Gruppe hab ich das nicht hinbekommen. Doch plötzlich funktioniert es mit der Rule auch nicht mehr. Die Rule sieht folgendermaßen aus:

Code: Alles auswählen

rule "Treppe Color"
when
   Item GF_Stair_light changed
then
    GF_Stair_top_Light.sendCommand(GF_Stair_light.state)
    GF_Stair_down_Light.sendCommand(GF_Stair_light.state)
end
der Fehler der nun kommt schaut so aus:

Code: Alles auswählen

2021-11-13 18:28:41.335 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Stair_color-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.actions.BusEvent.sendCommand(org.openhab.core.items.Item,java.lang.String) on instance: null in Stair_color
Was ist da los?

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 13. Nov 2021 19:09
von udo1toni
Was heißt denn "plötzlich"? Bist Du sicher, dass alle drei Items vom Typ Color sind? Sicher, dass das Item einen gültigen HSBType enthält?

Du könntest die Rule erweitern:

Code: Alles auswählen

rule "Treppe Color"
when
   Item GF_Stair_light changed
then
    if(!(GF_Stair_light.state instanceof HSBType))
        logWarn("stairs","GF_Stair_light.state ist nicht vom Typ HSBType!")
    else {
        GF_Stair_top_Light.sendCommand(GF_Stair_light.state)
        GF_Stair_down_Light.sendCommand(GF_Stair_light.state)
    }
end
Damit spuckt die Rule die Warnung aus, statt null anzumeckern.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 15. Nov 2021 06:31
von Quautiputzli
Naja, was heißt plötzlich. Ich weiß jetzt nicht genau ab welchem Tag, oder was es sonst noch für Änderungen gab, denn so oft verstelle ich dort die Farbe nicht. Ich weiß aber, dass es früher funktionierte. Ich hab in letzter Zeit schon manchmal neugestartet, und auch mal ältere Konfigurationen aufgespielt.

Ich werde das mit der "neuen" Rule mal heute Abend probieren.
Die Items sind alle vom Typ Color.
Bild_2021-11-15_063132.png

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 15. Nov 2021 21:57
von Quautiputzli
Die "neue" Rule brachte keine Änderung. Ich hab nunmal den neuen state in Klammern gesetzt, also so:

Code: Alles auswählen

rule "Treppe Color"
when
   Item GF_Stair_light changed
then
    if(!(GF_Stair_light.state instanceof HSBType))
        logWarn("stairs","GF_Stair_light.state ist nicht vom Typ HSBType!")
    else {
        GF_Stair_top_Light.sendCommand("GF_Stair_light.state")
        GF_Stair_down_Light.sendCommand("GF_Stair_light.state")
    }
end
dann kommt eine anderer Fehler:

Code: Alles auswählen

2021-11-15 22:00:55.092 [WARN ] [b.core.model.script.actions.BusEvent] - Cannot convert 'GF_Stair_light.state' to a command type which item 'GF_Stair_top_Light' accepts: [HSBType, PercentType, OnOffType, IncreaseDecreaseType, RefreshType].
2021-11-15 22:00:55.093 [WARN ] [b.core.model.script.actions.BusEvent] - Cannot convert 'GF_Stair_light.state' to a command type which item 'GF_Stair_down_Light' accepts: [HSBType, PercentType, OnOffType, IncreaseDecreaseType, RefreshType].
Es scheint also eher am senden zu liegen, und nicht am Empfangen.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 16. Nov 2021 20:27
von Quautiputzli
Hab mir nun noch ein log eingebaut:

Code: Alles auswählen

rule "Treppe Color"
when
   Item GF_Stair_light changed
then
    if(!(GF_Stair_light.state instanceof HSBType))
        logWarn("stairs","GF_Stair_light.state ist nicht vom Typ HSBType!")
    else {
//        GF_Stair_top_Light.sendCommand(GF_Stair_light.state)
//        GF_Stair_down_Light.sendCommand(GF_Stair_light.state)
        logWarn("stairs", "Licht ({})", GF_Stair_light.state)
    }
end
scheint richtig anzukommen:

Code: Alles auswählen

2021-11-15 22:11:49.889 [WARN ] [org.openhab.core.model.script.stairs] - Licht (220,57,100)
aber senden kann ich es nicht.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 17. Nov 2021 10:36
von peter-pan
...könnte evtl. so ein Syntax-Schnipsel weiterhelfen ?!

Code: Alles auswählen

GF_Stair_top_Light.sendCommand(new HSBType(GF_Stair_light.state))
Kann es leider selbst nicht testen.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 17. Nov 2021 21:46
von Quautiputzli
bringt auch nichts. Immer der selbe Fehler.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 17. Nov 2021 22:51
von peter-pan
Schau doch mal in diesen Thread rein. Hast du da nicht schon mal mit "HSB-Type" umgewandelt ?

Code: Alles auswählen

var Timer tdimmer = null

rule "HSB Brightness heller"

when 
    Channel "mqtt:topic:broker:gf_office_switch:office_switch_trigger" triggered 
then
    if (tdimmer !== null) tdimmer.cancel() 
    if (receivedEvent == "button_3_hold") {
        tdimmer = createTimer(now, [ |
            var HSBType currentState
            currentState = GF_Office_Light.state as HSBType
            var DecimalType new_H = currentState.hue
            var PercentType new_S = currentState.saturation
            var PercentType new_B = new PercentType(currentState.brightness + 2)
            if( new_B > 100)
                new_B = new PercentType(100)
            var HSBType newState = new HSBType(new_H,new_S,new_B)
            sendCommand(GF_Office_Light,newState.toString)
            if(new_B < 100)
                tdimmer.reschedule(now.plusNanos(200000000))
        ])
    } else if (receivedEvent == "button_3_release") {
        if(tdimmer !== null) tdimmer.cancel
    }
end
So wie ich das verstehe, hast du die einzelnen Werte (hue,saturation,brightness) auseinander dividiert und nachher wieder zusammen gebastelt.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 18. Nov 2021 16:59
von Quautiputzli
Hi,

diese rule die ich da im Einsatz habe (die ich aber auch nur abgekupfert hab) hat mich nun doch zur Lösung gebracht.

Ich habe die Rule nun abgeändert in:

Code: Alles auswählen

rule "Treppe Color"
when
   Item GF_Stair_light changed
then
    if(!(GF_Stair_light.state instanceof HSBType))
        logWarn("stairs","GF_Stair_light.state ist nicht vom Typ HSBType!")
    else {
        GF_Stair_top_Light.sendCommand(GF_Stair_light.state.toString)
        GF_Stair_down_Light.sendCommand(GF_Stair_light.state.toString)
    }
end
Und so läuft es nun.

Re: Rule mit Color State funktioniert nicht mehr

Verfasst: 19. Nov 2021 06:25
von udo1toni
Ja, das toString erzwingt die Konvertierung zu einem String. Eigentlich sollte das aber nicht notwendig sein, denn der Typ ist ja schon HSBType (sonst wäre die Warnmeldung ausgegeben worden und es hätte kein Versuch stattgefunden, die Color Items anzusprechen).