RGB über MQTT
-
- Beiträge: 93
- Registriert: 11. Apr 2018 09:55
Re: RGB über MQTT
Hallo Udo,
Danke für deine schnelle Antwort.
Heißt das ich brauche die erste Regel nicht mehr? oder muss ich von meinen LED_1_color die Var HSB mit einbeziehen, sowie du es mir gerade beschrieben hast!!
Gruß Thommy
Gesendet von iPhone mit Tapatalk
Danke für deine schnelle Antwort.
Heißt das ich brauche die erste Regel nicht mehr? oder muss ich von meinen LED_1_color die Var HSB mit einbeziehen, sowie du es mir gerade beschrieben hast!!
Gruß Thommy
Gesendet von iPhone mit Tapatalk
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: RGB über MQTT
Na, es kommt ja drauf an, was Du tun möchtest. Die erste Rule sendet RGB-Werte, die über Items von knx kommen an ein Item weiter. Wenn es sich um ein normales Color Item handelt, müssen die Werte, damit es korrekt funktioniert, nach HSB umgewandelt werden.
Wobei man dann natürlich gleich von vornherein mit Integer arbeiten könnte. Ich weiß aber ja nicht, was konkret von knx kommt...
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 hsbValue = HSBType.fromRGB(nRed.intValue,nGreen.intValue,nBlue.intValue)
LED_1_color_RGB.sendCommand(hsbValue)
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 93
- Registriert: 11. Apr 2018 09:55
Re: RGB über MQTT
Hallo Udo,
ich weiß nicht ob ich was falsch mache ich habe mal beide Versionen jetzt ausprobiert.
Habe jetzt mal zum Testen ein weiteres Color Item new_H eingefügt. sendCommand ist rot unterstrichen und es kommt folgene fehlermeldung im Studio.
Bei der Var integer steht unten im log
Type mismatch: cannot convert from NumberItem to DecimalType
Type mismatch: cannot convert from NumberItem to PercentType
Ambiguous feature call.
The extension methods
sendCommand(Item, Number) in BusEvent and
sendCommand(Item, Command) in BusEvent
both match.(org.eclipse.xtext.xbase.validation.IssueCodes.ambiguous_feature_call)
ich kann die Regel ausführen aber am HSB Wert ändert sich nix
Und bei der zweiten Variante ist im Logfile nRed rot unterstrichen.
Kann es sein das evtl. noch was im Import oder so fehlt.
Sorry wenn ich mich zu doof anstelle .
ich weiß nicht ob ich was falsch mache ich habe mal beide Versionen jetzt ausprobiert.
Code: Alles auswählen
import org.eclipse.smarthome.core.library.types.HSBType
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 = {}",nRed,nGreen,nBlue)
var String strSend = ""
strSend = nRed.toString + "," + nGreen.toString + "," + nBlue.toString
LED_1_color.sendCommand(strSend)
var Integer redValue = 50
var Integer greenValue = 100
var Integer blueValue = 255
var hsbValue = HSBType.fromRGB(redValue,greenValue,blueValue)
new_H.sendCommand(hsbValue)
end
Bei der Var integer steht unten im log
Type mismatch: cannot convert from NumberItem to DecimalType
Type mismatch: cannot convert from NumberItem to PercentType
Ambiguous feature call.
The extension methods
sendCommand(Item, Number) in BusEvent and
sendCommand(Item, Command) in BusEvent
both match.(org.eclipse.xtext.xbase.validation.IssueCodes.ambiguous_feature_call)
ich kann die Regel ausführen aber am HSB Wert ändert sich nix
Code: Alles auswählen
2020-02-06 07:56:34.299 [INFO ] [g.eclipse.smarthome.model.script.rgb] - R = 100.0 G = 0.0 B = 100.0
==> /var/log/openhab2/events.log <==
2020-02-06 07:56:34.321 [ome.event.ItemCommandEvent] - Item 'LED_1_color' received command 100.0,0.0,100.0
2020-02-06 07:56:34.345 [ome.event.ItemCommandEvent] - Item 'new_H' received command 226,78,100
2020-02-06 07:56:34.350 [vent.ItemStateChangedEvent] - greenValue changed from 0.0 to 54.64
2020-02-06 07:56:34.355 [vent.ItemStateChangedEvent] - LED_1_color changed from 0.0,0.0,100.0 to 100.0,0.0,100.0
==> /var/log/openhab2/openhab.log <==
2020-02-06 07:56:34.378 [INFO ] [g.eclipse.smarthome.model.script.rgb] - R = 100.0 G = 54.64 B = 100.0
==> /var/log/openhab2/events.log <==
2020-02-06 07:56:34.378 [vent.ItemStateChangedEvent] - blueValue changed from 100.0 to 20.0
==> /var/log/openhab2/openhab.log <==
2020-02-06 07:56:34.417 [INFO ] [g.eclipse.smarthome.model.script.rgb] - R = 100.0 G = 54.64 B = 20.0
==> /var/log/openhab2/events.log <==
2020-02-06 07:56:34.418 [ome.event.ItemCommandEvent] - Item 'LED_1_color' received command 100.0,54.64,100.0
2020-02-06 07:56:34.433 [ome.event.ItemCommandEvent] - Item 'new_H' received command 226,78,100
2020-02-06 07:56:34.436 [vent.ItemStateChangedEvent] - LED_1_color changed from 100.0,0.0,100.0 to 100.0,54.64,100.0
2020-02-06 07:56:34.452 [ome.event.ItemCommandEvent] - Item 'LED_1_color' received command 100.0,54.64,20.0
2020-02-06 07:56:34.459 [ome.event.ItemCommandEvent] - Item 'new_H' received command 226,78,100
2020-02-06 07:56:34.467 [vent.ItemStateChangedEvent] - LED_1_color changed from 100.0,54.64,100.0 to 100.0,54.64,20.0
Und bei der zweiten Variante ist im Logfile nRed rot unterstrichen.
Kann es sein das evtl. noch was im Import oder so fehlt.
Sorry wenn ich mich zu doof anstelle .
-
- Beiträge: 93
- Registriert: 11. Apr 2018 09:55
Re: RGB über MQTT
Habe jetzt mal spassenshalber den Datenpunkt vom KNX auf 9.001 geändert.
Werte bleiben gelich aber im Studio kommt jetzt der fehler
Type mismatch: cannot convert from Number to int
Datenpunkt 5.001% 0-100 und 5.004 % 0-255 gehen nicht kommt
obwohl im Logviewer steht das es um 9.001 handelt
von der anlage werden die werte als Prozent ausgegeben
Werte bleiben gelich aber im Studio kommt jetzt der fehler
Type mismatch: cannot convert from Number to int
Datenpunkt 5.001% 0-100 und 5.004 % 0-255 gehen nicht kommt
Code: Alles auswählen
2020-02-06 10:15:06.292 [WARN ] [.internal.handler.DeviceThingHandler] - Ignoring KNX bus data: couldn't transform to any Type (destination='6/6/0', datapoint='command DP 6/6/0 'knx:device:Tunnel:Aktor1_1_40', DPT id 9.001, low priority', data='0x64')
2020-02-06 10:15:06.292 [WARN ] [.internal.handler.DeviceThingHandler] - Ignoring KNX bus data: couldn't transform to any Type (destination='6/6/0', datapoint='command DP 6/6/0 'knx:device:Tunnel:Aktor1_1_40', DPT id 9.001, low priority', data='0x64')
2020-02-06 10:15:06.321 [INFO ] [g.knx.internal.dpt.KNXCoreTypeMapper] - Translator couldn't parse data for datapoint type '9.001' (KNXIllegalArgumentException).
2020-02-06 10:15:06.325 [WARN ] [.internal.handler.DeviceThingHandler] - Ignoring KNX bus data: couldn't transform to any Type (destination='6/6/2', datapoint='command DP 6/6/2 'knx:device:Tunnel:Aktor1_1_40', DPT id 9.001, low priority', data='0x00')
2020-02-06 10:15:06.329 [INFO ] [g.knx.internal.dpt.KNXCoreTypeMapper] - Translator couldn't parse data for datapoint type '9.001' (KNXIllegalArgumentException).
2020-02-06 10:15:06.332 [WARN ] [.internal.handler.DeviceThingHandler] - Ignoring KNX bus data: couldn't transform to any Type (destination='6/6/2', datapoint='command DP 6/6/2 'knx:device:Tunnel:Aktor1_1_40', DPT id 9.001, low priority', data='0x00')
von der anlage werden die werte als Prozent ausgegeben
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: RGB über MQTT
Du kannst die Datenpunkte nicht frei wählen, es kommt darauf an, was die Devices liefern. Wenn Du schreibst "von der Anlage werden ide Werte als Prozent ausgegeben" dann ist das nicht ausreichend. Es gibt zig verschiedene Prozentangaben in knx, die zueinander inkompatibel sind. Wichtig ist der korrekte DPT, den Du aus der Dokumentation des Devices erfährst, welches sendet.
Du kannst auch nicht einfach verschiedene Items nach Lust und Laune definieren
die müssen schon zu den Datenpunkten passen, ebenso die Channel. Alle Teile müssen korrekt ineinander greifen.
Um einzugrenzen, an welcher Stelle in der Rule der Type mismatch auftritt, wären logInfo Zeilen hilfreich. So z.B.:
Wenn der DPT 9.xxx ist, muss die Rule ziemlich sicher genau so aussehen.
Wenn der DPT 5.xxx ist, sieht die Sache anders aus.
Welche logZeilen werden noch ausgegeben?
Du kannst auch nicht einfach verschiedene Items nach Lust und Laune definieren

Um einzugrenzen, an welcher Stelle in der Rule der Type mismatch auftritt, wären logInfo Zeilen hilfreich. So z.B.:
Code: Alles auswählen
rule "Set BH_Livingroom_RGB value reverse"
when
Item redValue changed or
Item greenValue changed or
Item blueValue changed
then
logInfo("rgb","Rule startet")
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 hsbValue = HSBType.fromRGB(nRed.intValue,nGreen.intValue,nBlue.intValue)
logInfo("rgb","hsb gesetzt: {}",hsbValue.toString)
LED_1_color_RGB.sendCommand(hsbValue)
end
Wenn der DPT 5.xxx ist, sieht die Sache anders aus.
Welche logZeilen werden noch ausgegeben?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 93
- Registriert: 11. Apr 2018 09:55
Re: RGB über MQTT
Hallo Udo,
ich weiß zwar nicht wo das problem an der ersten Rule lag, aber jetzt geht es ohne Probleme.
Vielen Lieben dank für deine Bemühungen. 
ich weiß zwar nicht wo das problem an der ersten Rule lag, aber jetzt geht es ohne Probleme.
Code: Alles auswählen
==> /var/log/openhab2/openhab.log <==
2020-02-10 03:05:57.685 [INFO ] [g.eclipse.smarthome.model.script.rgb] - Rule startet
==> /var/log/openhab2/events.log <==
2020-02-10 03:05:57.723 [vent.ItemStateChangedEvent] - blueValue changed from 50.0 to 0.0
==> /var/log/openhab2/openhab.log <==
2020-02-10 03:05:57.727 [INFO ] [g.eclipse.smarthome.model.script.rgb] - Rule startet
2020-02-10 03:05:57.730 [INFO ] [g.eclipse.smarthome.model.script.rgb] - R = 0.0 G = 0.0 B = 0.0
2020-02-10 03:05:57.737 [INFO ] [g.eclipse.smarthome.model.script.rgb] - hsb gesetzt: 0,0,0
2020-02-10 03:05:57.742 [INFO ] [g.eclipse.smarthome.model.script.rgb] - R = 0.0 G = 0.0 B = 0.0
2020-02-10 03:05:57.748 [INFO ] [g.eclipse.smarthome.model.script.rgb] - hsb gesetzt: 0,0,0
==> /var/log/openhab2/events.log <==
2020-02-10 03:05:57.764 [ome.event.ItemCommandEvent] - Item 'LED_1_color' received command 0,0,0
2020-02-10 03:05:57.767 [nt.ItemStatePredictedEvent] - LED_1_color predicted to become 0,0,0
2020-02-10 03:05:57.783 [ome.event.ItemCommandEvent] - Item 'LED_1_color' received command 0,0,0
2020-02-10 03:05:57.797 [nt.ItemStatePredictedEvent] - LED_1_color predicted to become 0,0,0
2020-02-10 03:05:57.809 [vent.ItemStateChangedEvent] - LED_1_color changed from 330,100,39 to 0,0,0
2020-02-10 03:06:00.694 [vent.ItemStateChangedEvent] - redValue changed from 0.0 to 100.0
==> /var/log/openhab2/openhab.log <==
2020-02-10 03:06:00.699 [INFO ] [g.eclipse.smarthome.model.script.rgb] - Rule startet
2020-02-10 03:06:00.722 [INFO ] [g.eclipse.smarthome.model.script.rgb] - R = 100.0 G = 0.0 B = 0.0
2020-02-10 03:06:00.732 [INFO ] [g.eclipse.smarthome.model.script.rgb] - hsb gesetzt: 0,100,39

- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: RGB über MQTT
Super, dass es nun klappt!
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 18
- Registriert: 5. Dez 2020 16:56
Re: RGB über MQTT
Hallo und schönen guten Abend..
Ich bin auch gerade Dabei so einen Controller einzubinden..
Soweit funktoniert auch etwas..
nun bin ich auch auf Deine Regel gestoßen und möchte damit die Slider in Openhab zum einstellen der Farben(RGB) nehmen bzw zum Mischen und Übersetzten - welche Farbe RGB wird welche Farbe im Colorpicker
Sobald ich nun aber den Slider benutze und auf 100% schiebe, bekomme ich am Dimmer nur noch 39% (zum Beispiel Rot)
das selbe lese ich auch im logfile von "Tommy2012" vom 10.Feb.2020
"2020-02-10 03:06:00.732 [INFO ] [g.eclipse.smarthome.model.script.rgb] - hsb gesetzt: 0,100,39" -brightness bei 39
Meine Frage wäre nun, wie bekomme ich den Dimmer mit dem Slider 100% Rot(255.0.0) auf volle Helligkeit
bzw. gleich die Zweite Frage, bekomme ich den Slider auch mit dem Colorpicker verknüft, so das ich Farbe des Pickers auch am Slider wieder sehe..
Vielen Dank für eure Hilfe schon jetzt..
meine Rules:
RGBLedcolor - lese ich über einen String aus
sobald ich die "RGB value reverse" rule hinzufüge komm ich mit dem Slider "Rot" (bei 100%) nur noch auf einen wert von 39 statt 255
items dazu
Ich bin auch gerade Dabei so einen Controller einzubinden..
Soweit funktoniert auch etwas..
nun bin ich auch auf Deine Regel gestoßen und möchte damit die Slider in Openhab zum einstellen der Farben(RGB) nehmen bzw zum Mischen und Übersetzten - welche Farbe RGB wird welche Farbe im Colorpicker
Sobald ich nun aber den Slider benutze und auf 100% schiebe, bekomme ich am Dimmer nur noch 39% (zum Beispiel Rot)
das selbe lese ich auch im logfile von "Tommy2012" vom 10.Feb.2020
"2020-02-10 03:06:00.732 [INFO ] [g.eclipse.smarthome.model.script.rgb] - hsb gesetzt: 0,100,39" -brightness bei 39
Meine Frage wäre nun, wie bekomme ich den Dimmer mit dem Slider 100% Rot(255.0.0) auf volle Helligkeit
bzw. gleich die Zweite Frage, bekomme ich den Slider auch mit dem Colorpicker verknüft, so das ich Farbe des Pickers auch am Slider wieder sehe..
Vielen Dank für eure Hilfe schon jetzt..
meine Rules:
Code: Alles auswählen
rule "HSB value RGB color value"
when
Item RGB1_color changed
then
val hsbValue = RGB1_color.state as HSBType
val brightness = hsbValue.brightness.intValue
val redValue = ((((hsbValue.red.intValue * 255) / 100) *brightness) /100).toString
val greenValue = ((((hsbValue.green.intValue * 255) / 100) *brightness) /100).toString
val blueValue = ((((hsbValue.blue.intValue * 255) / 100) *brightness) /100).toString
val color = redValue + "," + greenValue + "," + blueValue
RGBLedColor.sendCommand(color)
end
rule "Send RGB items from slider"
when
Item d_redValue changed or
Item d_greenValue changed or
Item d_blueValue changed
then
val redValue= Math::round(2.55* (d_redValue.state as DecimalType).intValue)
val greenValue= Math::round(2.55* (d_greenValue.state as DecimalType).intValue)
val blueValue= Math::round(2.55* (d_blueValue.state as DecimalType).intValue)
val color = redValue + "," + greenValue + "," + blueValue
RGBLedColor.sendCommand(color)
end
sobald ich die "RGB value reverse" rule hinzufüge komm ich mit dem Slider "Rot" (bei 100%) nur noch auf einen wert von 39 statt 255
items dazu
Code: Alles auswählen
Switch RGB1_on "RGB Stripe [%s]"
Color RGB1_color "Color HSB" (gLight_RGB_1) [ "Lighting" ]
Dimmer d_redValue "Rot [%d %%]" (gLight_RGB_1)
Dimmer d_greenValue "Grün [%d %%]" (gLight_RGB_1)
Dimmer d_blueValue "Blau [%d %%]" (gLight_RGB_1)
String RGBLedColor "RGB [%s]"
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: RGB über MQTT
Du hast keine "RGB value reverse" rule. Es ist ungünstig, zwei Rules zu posten und dann einen dritten Namen zu verwenden.
In der Rule "HSB value RGB color value" hast Du einen Denkfehler. (HSBType).red usw. liefert bereits die Helligkeit des entsprechenden RGB-Kanals. Du musst also nicht noch mit brightness herumhantieren.
Außerdem ist Deine Formel falsch, denn Du musst Integer Werte in den String einbauen. Die Rules sollten eher so aussehen:
Die Trigger sind auf received command geändert, so lösen die Rules nur aus, wenn der jeweilige Knopf in der UI betätigt wird. Bei einem postUpdate hingegen bleibt die Rule inaktiv. Deshalb können nun die Slider automatisch gesetzt werden (ungetestet, sollte aber funktionieren).
In der Rule "HSB value RGB color value" hast Du einen Denkfehler. (HSBType).red usw. liefert bereits die Helligkeit des entsprechenden RGB-Kanals. Du musst also nicht noch mit brightness herumhantieren.
Außerdem ist Deine Formel falsch, denn Du musst Integer Werte in den String einbauen. Die Rules sollten eher so aussehen:
Code: Alles auswählen
rule "HSB value RGB color value"
when
Item RGB1_color received command
then
val hsbValue = RGB1_color.state as HSBType
val redValue = (hsbValue.red * 2.55).intValue.toString
val greenValue = (hsbValue.green * 2.55).intValue.toString
val blueValue = (hsbValue.blue * 2.55).intValue.toString
val color = redValue + "," + greenValue + "," + blueValue
RGBLedColor.sendCommand(color)
d_redValue.postUpdate(hsbValue.red)
d_greenValue.postUpdate(hsbValue.green)
d_blueValue.postUpdate(hsbValue.blue)
end
rule "Send RGB items from slider"
when
Item d_redValue received command or
Item d_greenValue received command or
Item d_blueValue received command
then
val redValue = (2.55 * (d_redValue.state as DecimalType)).intValue.toString
val greenValue = (2.55 * (d_greenValue.state as DecimalType)).intValue.toString
val blueValue = (2.55 * (d_blueValue.state as DecimalType)).intValue.toString
val color = redValue + "," + greenValue + "," + blueValue
RGBLedColor.sendCommand(color)
RGB1_color.postUpdate(new HSBType(new Color(color)))
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 18
- Registriert: 5. Dez 2020 16:56
Re: RGB über MQTT
Die 3.Rule, die ich benannt hatte war deine aus dem post oben drüber.. Deswegen wollte ich sie nicht nochmal extra posten..
Sorry, mein fehler
Danke für deine Antwort, werde ich heute Abend gleich mal Probieren..
mit den Slidern RGB ist die Helligkeit gleich mit, das ist Richtig.. aber wenn ich den Slider auf 100% machen, geht der "Dimmer" nur auf max 39%..
das wollte ich damit sagen.. (was auch bei RGB -> HSB raus kommt in der brightness)
die benannte Rule:
Sorry, mein fehler
Danke für deine Antwort, werde ich heute Abend gleich mal Probieren..
mit den Slidern RGB ist die Helligkeit gleich mit, das ist Richtig.. aber wenn ich den Slider auf 100% machen, geht der "Dimmer" nur auf max 39%..
das wollte ich damit sagen.. (was auch bei RGB -> HSB raus kommt in der brightness)
die benannte Rule:
Code: Alles auswählen
rule "RGB value reverse"
when
Item d_redValue changed or
Item d_greenValue changed or
Item d_blueValue changed
then
logInfo("rgb","Rule startet")
var Number nRed = 0
var Number nGreen = 0
var Number nBlue = 0
if( d_redValue.state instanceof Number) nRed = ( d_redValue.state as Number).floatValue
if(d_greenValue.state instanceof Number) nGreen = (d_greenValue.state as Number).floatValue
if( d_blueValue.state instanceof Number) nBlue = ( d_blueValue.state as Number).floatValue
logInfo("rgb","R = {} G = {} B = {}",nRed,nGreen,nBlue)
var color2 = nRed.intValue + "." + nGreen.intValue +"."+ nBlue.intValue
RGBLedColor2.sendCommand(color2)
var hsbValue = HSBType.fromRGB(nRed.intValue,nGreen.intValue,nBlue.intValue)
logInfo("rgb","hsb gesetzt: {}",hsbValue.toString)
RGB1_color.sendCommand(hsbValue)
HSBLedColor2.sendCommand(hsbValue)
end