Seite 1 von 1

Shelly RGBW2 white und color mit einem button steuern

Verfasst: 4. Jan 2024 08:56
von papet
Ich bin noch ein ziemlicher openHAB Newbie und möchte gerne einen Button für eine bestimmte Farbeinstellung (RGB und White) programmieren.
Wie bekommen ich beide channel zusammen und ein mappings in der Sitemap dafür?

Re: Shelly RGBW2 white und color mit einem button steuern

Verfasst: 4. Jan 2024 12:06
von udo1toni
Herzlich willkommen im openHAB Forum!

Wenn Du von einer bestimmten Farbeinstellung sprichst, meinst Du einen Absolutwert, wie z.B. 50% rot, 30% grün, 60% weiß? Vermutlich wäre es das Einfachste, dafür eine Rule zu verwenden.

Grundsätzlich brauchst Du auf jeden Fall zwei Channel, wenn Du die vier Kanäle frei steuern willst. Ich habe keine Erfahrung mit RGBW, aber im Grunde sollte der Controller auch den Weißanteil automatisch umrechnen können (heißt vereinfacht, 30% rot, 40% grün und 50 % blau ergibt 30 % weiß, 10% grün und 20% blau). Ansonsten musst Du halt 3+1 Farben über zwei Channel steuern.

Konkret - hier als Textkonfiguration, geht genauso auch über die UI
Thing (unvollständig, da nicht bekannt ist, welche Hardware zum Einsatz kommt):

Code: Alles auswählen

Thing meinthing "RGBW Lampe" [] {
     Channels:
     Type color  : color "RGB" [ ... ]
     Type dimmer : white "weiß" [ ... ]
 }
Items:

Code: Alles auswählen

Color  LampeRGB "Lampe Farbanteil" {channel="...:meinthing:color"}
Dimmer LampeW   "Lampe Weißanteil" {channel="...:meinthing:white"}
Number LampeSet "Lampe Steuerung" // Proxy Item, kein Link zum Binding!
Rule:

Code: Alles auswählen

rule "Farbe für Lampe setzen"
when
    Item LampeSet received command
then
    if(!(receivedCommand instanceof Number)) return;
    switch((receivedCommand as Number).intValue) {
        case 0 : {
            LampeRGB.sendCommand(OFF)
            LampeW.sendCommand(OFF)
        }
        case 1 : {
            LampeRGB.sendCommand(OFF)
            LampeW.sendCommand(100)
        }
        case 2 : {
            LampeRGB.sendCommand(new HSBType(240,60,40))
            LampeW.sendCommand(35)
        }
    }
end
Sitemap:

Code: Alles auswählen

Switch item=LampeSet mappings=[0="Aus",1="hell",2="bunt"]
Das Switch Widget (nicht mit Switch Item verwechseln...) zeichnet wegen des Mappings keinen Schalter, sondern Schaltflächen, und zwar so viele, wie im mapping definiert sind. Der Wert vorne wird als Befehl gesendet, der Wert hinten ist die Beschriftung der Schaltfläche.

Die Rule wird jedes Mal ausgeführt, wenn eine der Schaltflächen betätigt wird.
Innerhalb der Rule wird zunächst geprüft, ob der Befehl als Zahl darstellbar ist, ist das nicht der Fall, bricht die Rule ab.
Ist der Befehl als Zahl interpretierbar, so wird über switch() eine bedingte Verzweigung erreicht, je nachdem, welcher Wert gesendet wurde.
In jedem einzelnen Bereich werden dann die passenden Befehle gesendet, um die Lampe wie gewünscht anzusteuern.

Color Items arbeiten IMMER als HSBType, Hue, Saturation, Brightness, also Farbe, Sättigung und Helligkeit. Die Farbe wird als Winkel auf dem Farbkreis angegeben (0 - 359), Sättigung und Helligkeit werden in Prozent angegeben (0 - 100), die 240° von oben entsprechen dabei grün.
Das verknüpfte Binding kümmert sich um die Umrechnung nach RGB, das ist also für den Anwender erst mal irrelevant

Wie erwähnt lässt sich das alles auch komplett über die UI einstellen :) die Textform ist aber "forenfreundlicher".

Re: Shelly RGBW2 white und color mit einem button steuern

Verfasst: 4. Jan 2024 16:13
von papet
Vielen Dank für die Hilfe so weit.
ich bekomme bei den Rules eine Fehlermeldung (s. Screenshot)
https://www.dropbox.com/scl/fi/xsln4mg1 ... ce8l5&dl=0

Re: Shelly RGBW2 white und color mit einem button steuern

Verfasst: 4. Jan 2024 17:13
von papet
Wenn ich statt
sendCommand(new HSBType(240,60,40))
sendCommand("240,60,40") nehme funktioniert es.

Vielen Dank nochmals!!!