Rule mit Color State funktioniert nicht mehr

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Rule mit Color State funktioniert nicht mehr

Beitrag 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?
Servus

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

Re: Rule mit Color State funktioniert nicht mehr

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

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rule mit Color State funktioniert nicht mehr

Beitrag 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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Servus

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rule mit Color State funktioniert nicht mehr

Beitrag 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.
Servus

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rule mit Color State funktioniert nicht mehr

Beitrag 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.
Servus

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Rule mit Color State funktioniert nicht mehr

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rule mit Color State funktioniert nicht mehr

Beitrag von Quautiputzli »

bringt auch nichts. Immer der selbe Fehler.
Servus

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Rule mit Color State funktioniert nicht mehr

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rule mit Color State funktioniert nicht mehr

Beitrag 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.
Servus

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

Re: Rule mit Color State funktioniert nicht mehr

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

Antworten