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