RGB über MQTT

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

RGB über MQTT

Beitrag von Thommy2012 »

Hallo liebe gemeinde,

ich habe einen Sonoff H-801 Controller mit Tasmota geflasht und diesen über MQTT angesteuert. Auf openhab basis klappt dieses einwandfrei.

Nun möchte ich den LED Streifen über ein Externes gerät ansteuern,für die drei Farben R,G und B ich aber nur einen wert von 0-100 habe.

wie kann man jetzt diese drei werte (evtl. über Number) auf die Color Steuerung so umgesätzt bekommen z.B
Number 1 = 100
Number 2 = 100
Number3 = 100
Ergebnis= Color 255,255,255.

Mein Thing

Code: Alles auswählen

Thing topic sonoffH801 "Sonoff H801 - Wohnzimmer" @ "MQTT" {
    Channels:
        Type string : reachable  "Reachable"          	[ stateTopic="tele/Farbe/LWT" ]
        Type switch : power      "Power"              	[ stateTopic="stat/Farbe/POWER", commandTopic="cmnd/Farbe/POWER" ]
        Type colorHSB  : color 	 "Farbe"              	[ stateTopic="tele/Farbe/HSBColor", commandTopic="cmnd/Farbe/HSBColor" ]
        Type number : rssi       "Empfang: RSSI" 		[ stateTopic="tele/Farbe/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
    }
Mein Item

Code: Alles auswählen

Color      whz_wandcolor           "Wandlicht Farbe RGBCW"              <colorlight> {channel="mqtt:topic:mosquitto:sonoffH801:color"}
Meine sitemap

Code: Alles auswählen

 Frame label="Tube Lamp" {
      Colorpicker item=whz_wandcolor icon="slider"
}
Ich bedanke mich schon mal im Vorraus für alle vorschläge

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

Re: RGB über MQTT

Beitrag von Thommy2012 »

Hallo zusammen, habe mich seid langen mal wieder an das thema rangewagt.

Es will aber irgendwie nicht..

Ich möchte die Drei einzelnen Number zu einer RGB DAtei zusammenfügen, und diese dann danch als HSB ausgeben

bekomme aber immer einer fehlermeldung.

Code: Alles auswählen

2020-02-03 09:08:49.129 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'redValue_umgewandelt (Type=NumberItem, State=100.0, Label=null, Category=null),greenValue_umgewandelt (Type=NumberItem, State=0.0, Label=null, Category=null),blueValue_umgewandelt (Type=NumberItem, State=0.0, Label=null, Category=null)' to a command type which item 'LED_1_color_RGB' accepts: [PercentType, OnOffType, IncreaseDecreaseType, RefreshType].
2020-02-03 09:08:49.146 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'redValue_umgewandelt (Type=NumberItem, State=100.0, Label=null, Category=null),greenValue_umgewandelt (Type=NumberItem, State=0.0, Label=null, Category=null),blueValue_umgewandelt (Type=NumberItem, State=0.0, Label=null, Category=null)' to a command type which item 'LED_1_color_RGB' accepts: [PercentType, OnOffType, IncreaseDecreaseType, RefreshType].

Habe die Items schon als Number/Dimmer/String probiert.

Wo könnte der Fehler sein

Items

Code: Alles auswählen

Number redValue    "RGB Esszimmer Rot [%.0f]"    {channel="knx:device:Tunnel:Aktor1_1_40:Esszimmer_RGB_Rot"}
Number greenValue  "RGB Esszimmer Gruen [%.0f]"    {channel="knx:device:Tunnel:Aktor1_1_40:Esszimmer_RGB_Gruen"}
Number blueValue   "RGB Esszimmer Blau [%.0f]"    {channel="knx:device:Tunnel:Aktor1_1_40:Esszimmer_RGB_Blau"}
Number redValue_umgewandelt 
Number greenValue_umgewandelt 
Number blueValue_umgewandelt 
String LED_1_color_RGB      "RGB [%s]"              
Color  LED_1_color         "LED 1 Farbe [%.0f]"    
String LEDcolor_RGB_String        "RGB [%s]"    
Rule

Code: Alles auswählen

rule "Set BH_Livingroom_RGB value reverse"
when
    Item redValue changed or
    Item greenValue changed or
    Item blueValue changed
then
    if(redValue.state instanceof Number)
        redValue_umgewandelt.sendCommand((redValue.state as Number).floatValue)
    logInfo("redValue", "–> Rot Umgewandelt")
    if(greenValue.state instanceof Number)
        greenValue_umgewandelt.sendCommand((greenValue.state as Number).floatValue)
    logInfo("greenValue", "–> Gruen Umgewandelt")
    if(blueValue.state instanceof Number)
        blueValue_umgewandelt.sendCommand((blueValue.state as Number).floatValue)
    logInfo("blueValue", "–> Blau Umgewandelt")
end

Code: Alles auswählen

rule "RGB Umwandeln"
when 
    Item redValue_umgewandelt changed or 
    Item greenValue_umgewandelt changed or 
    Item blueValue_umgewandelt changed 
then 
    sendCommand(LED_1_color_RGB,redValue_umgewandelt.toString +"," + greenValue_umgewandelt.toString +"," + blueValue_umgewandelt.toString)
end
Ich danke euch für alle Vorschläge

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

Re: RGB über MQTT

Beitrag von Thommy2012 »

Hier noch die $Things

Code: Alles auswählen

Type number : Esszimmer_RGB_Rot   "Esszimmer RGB Rot"   [ ga="9.007:6/6/0"]
Type number : Esszimmer_RGB_Gruen "Esszimmer RGB Gruen" [ ga="9.007:6/6/1"]
Type number : Esszimmer_RGB_Blau  "Esszimmer RGB Blau"  [ ga="9.007:6/6/2"]

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

Re: RGB über MQTT

Beitrag von udo1toni »

Warum so kompliziert? In der ersten Rule reagierst Du auf eine Wertänderung und rechnest daraufhin die Werte aller drei Items nach Float um.
In der zweiten Rule reagierst Du auf eine Wertänderung, die Du in der ersten Rule ausgelöst hast. Das bedeutet, Du kannst locker den Code der zweiten Rule in die erste Rule integrieren.
Ein Problem ergibt sich schon mal dadurch, dass Du drei Werte bearbeitest, obwohl nur einer geändert wurde. In der ersten Rule machst Du es noch einigermaßen korrekt und prüfst, ob es sich überhaupt um einen erlaubten Wert handelt.
In der zweiten Rule gehst Du aber einfach davon aus, dass die drei Items sicher gültige Werte enthalten, was vermutlich nicht der Fall ist.

Weitere Frage: Du kommst ja von knx. Woher kommen die Zahlen? Gewöhnlich würde ich erwarten, dass man drei Dimmer Channel hierfür verwendet. Du setzt hier aber Number ein. Ein Wandtaster, der als Dimmer konfiguriert ist, sendet auf zwei verschiedenen GA, einmal Kurzzeit, einmal Langzeit. Kurzzeit entspricht dem Befehl ON/OFF, Langzeit dem Befehl INCREASE/DECREASE, wobei man hier den Taster noch so konfigurieren können sollte, dass er das Telegramm wiederholt sendet. Diese Betriebsart möchte ich empfehlen, falls Du keinen Absolutwertgeber einsetzt, aber auch da böte es sich an, mit Werten von 0 bis 100 zu arbeiten.
Möchtest Du von dort nach mqtt (wie im ersten Posting angedeutet), oder ist Dein derzeitiges Problem davon losgelöst?

Deine beiden Rules zusammengefasst zu einer Rule:

Code: Alles auswählen

rule "Set BH_Livingroom_RGB value reverse"
when
    Item redValue changed or
    Item greenValue changed or
    Item blueValue changed
then
    var Number nRed   = 0
    var Number nGreen = 0
    var Number nBlue  = 0
    if(  redValue.state instanceof Number) nRed   = (  redValue.state as Number).floatValue
    if(greenValue.state instanceof Number) nGreen = (greenValue.state as Number).floatValue
    if( blueValue.state instanceof Number) nBlue  = ( blueValue.state as Number).floatValue
    logInfo("rgb","R = {} G = {} B = {}",nReg,nGreen,nBlue)
    var String strSend = ""
    strSend = nReg.toString + "," + nGreen.toString + "," + nBlue.toString
    LED_1_color_RGB.sendCommand(strSend)
end
Die Rule nutzt drei Variablen, die mit 0 initialisiert werden. Solange eines der drei Items keinen gültigen Wert liefert, bleibt der Kanal auf 0. Nun müsste aber zumindest etwas zu sehen sein, unter der Voraussetzung, dass überhaupt gültige Zahlen von knx kommen.

Besser wäre (wie oben erwähnt), mit INCREASE/DECREASE zu arbeiten.
Ursprünglich wolltest Du mal mit HSB arbeiten, ist das noch aktuell?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

Re: RGB über MQTT

Beitrag von Thommy2012 »

Hallo Udo

Die Werte kommen von einem comexio Server der mit KNX Schnittstelle über einen Tunnel an Openhab sendet.

Ich möchte an diesen Server der eine visu besitzt die LED steuern, die dann an MQTT weitergeleitet werden. Es gibt ein LED Baustein der aber nur die 3 Farben von 0-100 ausgibt. Deshalb muss er später auf HSB umgerechnet werden damit der Sonoff H-801 dieses auch richtig umsetzt. Deine Regel werde ich mir morgen mal genauer anschauen. Schon mal vielen Dank für deine Bemühungen. Ich bin leider noch ein Leihe was die Openhab Sache angeht und kenne mich nicht so gut mit den ganzen Variablen aus.


Gesendet von iPhone mit Tapatalk

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

Re: RGB über MQTT

Beitrag von Thommy2012 »

heute Mittag hatte ich aber gesehen das es .state.toString in meine Rule heißen müsste. Und jetzt kommt das raus
a92b6f0e-03f9-4de6-8c43-512f298225ab.jpg

Gesendet von iPhone mit Tapatalk
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

Re: RGB über MQTT

Beitrag von Thommy2012 »

Super deine Regel klappt, jetzt muss ich nur noch mal sehen ob es so schon klappt
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: RGB über MQTT

Beitrag von udo1toni »

Umrechnung nach HSB ist recht einfach, da gibt es entsprechende Funktionen. So

Code: Alles auswählen

var hsbValue = HSBType.fromRGB(redValue,greenValue,blueValue)
sollte es gehen.
Ist jetzt aber auf die Schnelle, es kann also sein, dass da noch was fehlt (vielleicht ein New vor dem HSBType?)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Thommy2012
Beiträge: 93
Registriert: 11. Apr 2018 09:55
Answers: 0

Re: RGB über MQTT

Beitrag von Thommy2012 »

Hallo Udo,

Du bist echt ein Profi. Ich hätte an sowas Monate gesessen [emoji23]

Deine Regel funktioniert soweit gut. Der LED Streifen geht schon mal an , das einzige was noch nicht so richtig hinhaut sind die Farben. Ich muss aber dazu sagen das ich dein Var mit dem HSBType nicht hi bekomme er zeigtmir immer einen Fehler von den Value‘s ‚in der Klammer. Wie ist das eigentlich genau .Die RGB Werte müssen doch in das H vereint werden und der S und B wert sind dann die Helligkeit und Sättigung oder liege ich da falsch?


Gesendet von iPhone mit Tapatalk

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

Re: RGB über MQTT

Beitrag von udo1toni »

Also, nehmen wir mal an, Du hat ein Color Item myColorItem. Dieses erwartet immer HSBType als Command.
In einer Rule kannst Du dann mit

Code: Alles auswählen

var Integer redValue   = 50
var Integer greenValue = 100
var Integer blueValue  = 255
var hsbValue = HSBType.fromRGB(redValue,greenValue,blueValue)
myColorItem.sendCommand(hsbValue)
das Item ansteuern. Ich bin mir jetzt nicht absolut sicher, es könnte auch sein, dass RGB jeweils von 0 bis 100 gehen.
Wichtig ist, dass die drei Werte redValue, greenValue und blueValue vom Typ Integer sind. DecimalType oder Number sind nicht ausreichend.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten