OH3, MQTT und Color
-
- Beiträge: 8
- Registriert: 27. Dez 2020 16:18
OH3, MQTT und Color
Ich binde per OpenHAB 3 gerade eine Hue Go per zigbee2MQTT ein. Scheitere allerdings an der Übergabe der Farbwerte über den color_xy-Channel.
Ich habe gelesen, dass zur Aufteilung in drei Werte für MQTT bisher eine JavaScript-Transformation notwendig war. Ist dem mit OH3 auch noch so oder gibt es da ggf. ein Bordmittel, das ich verwenden kann?
Ich habe gelesen, dass zur Aufteilung in drei Werte für MQTT bisher eine JavaScript-Transformation notwendig war. Ist dem mit OH3 auch noch so oder gibt es da ggf. ein Bordmittel, das ich verwenden kann?
- udo1toni
- Beiträge: 15271
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: OH3, MQTT und Color
JavaScript ist ein Bordmittel. Wichtig ist halt, dass der Fabwert als xy übertragen wird. openHAB arbeitet intern mit HSB und verwendet dieses Format gewöhnlich auch nach außen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 8
- Registriert: 27. Dez 2020 16:18
Re: OH3, MQTT und Color
Ich kriege es nicht hin. JS Transformation in OH3 installiert, diesem Beispiel aus OH2 folgend https://community.openhab.org/t/zigbee2 ... l/72129/32
JS Transformation file HSBtoRGB.js
Thing HueGo1
Status, Helligkeit und Farbtemperatur haben gestern funktioniert. Wenn ich jetzt indes meine versuchte Channel-Version der Farbe (inkl. verlinktem Item) hinzufüge, schaltet das Thing auf
"Status:
OFFLINE
CONFIGURATION_ERROR
Remove and recreate: mqtt:topic:HueGo1:HueGo1_Color"
JS Transformation file HSBtoRGB.js
Code: Alles auswählen
(function (x) {
if (x=="ON" || x=="INCREASE") {
return '{"state":"ON"}'
} else if (x=="OFF" || x=="DECREASE") {
return '{"state":"OFF"}'
} else {
var tex = x.split(',');
s = parseInt(tex[1]);
v = parseInt(tex[2]);
h = parseInt(tex[0]);
h=(!h ? 0 : h/360.0);
s=(!s ? 0 : s/100.0);
v=(!v ? 0 : v/100.0);
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0: r = v, g = t, b = p; break;
case 1: r = q, g = v, b = p; break;
case 2: r = p, g = v, b = t; break;
case 3: r = p, g = q, b = v; break;
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
return '{"brightness":'+ Math.round(v * 255)+',"color":{"rgb":"'+ Math.round(r * 255)+','+ Math.round(g * 255)+','+Math.round(b * 255)+'"}}'
}
})(input)
Code: Alles auswählen
UID: mqtt:topic:HueGo1
label: Hue Go 1
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:OH_MQTT
channels:
- id: state
channelTypeUID: mqtt:switch
label: Status
description: ""
configuration:
commandTopic: zigbee2mqtt/Hue_Go1/set/state
stateTopic: zigbee2mqtt/Hue_Go1/state
postCommand: true
- id: HueGo1_Brightness
channelTypeUID: mqtt:dimmer
label: Helligkeit
description: ""
configuration:
commandTopic: zigbee2mqtt/Hue_Go1/set/brightness
min: 0
stateTopic: zigbee2mqtt/Hue_Go1/brightness
max: 253.98
off: disabled
on: enabled
- id: HueGo1_ColorTemp
channelTypeUID: mqtt:dimmer
label: Farbtemperatur
description: ""
configuration:
commandTopic: zigbee2mqtt/Hue_Go1/set/color_temp
min: 100
stateTopic: zigbee2mqtt/Hue_Go1/color_temp
max: 499.96
- id: HueGo1_ColorHSB
channelTypeUID: mqtt:color
label: Farbe
description: ""
configuration:
commandTopic: zigbee2mqtt/Hue_Go1/set
transformationPatternOut: JS:HSBtoRGB.js
stateTopic: zigbee2mqtt/Hue_Go1/dumb
onBrightness: 70
"Status:
OFFLINE
CONFIGURATION_ERROR
Remove and recreate: mqtt:topic:HueGo1:HueGo1_Color"
-
- Beiträge: 364
- Registriert: 29. Okt 2020 19:53
Re: OH3, MQTT und Color
Hallo,
ich möchte mich hier anschließen, weil ich auch eine Lampe über xy steuern möchte.
Ich habe ein Lampe die ich über zigbee2mqtt über xy steuern möchte. Dazu hab ich natürlich ein mqtt-Thing angelegt, und einen Channel color mit xy angelgt.
So wie es aussieht, ist die Umrechnung nach xy bereits in OH3 enthalten. Auf jeden Fall passen die Farben, wenn man sie am Colorpicker einstellt. Nur die Helligkeit passt nicht ganz, da man sie nur von 0-100 einstellen kann. Die Lampe erwartet aber 254 als Maximum.
Ist es denn möglich nur den brightness Wert umzurechnen? Man müsste den ja nur mit 2,55 muliplizieren.
ich möchte mich hier anschließen, weil ich auch eine Lampe über xy steuern möchte.
Ich habe ein Lampe die ich über zigbee2mqtt über xy steuern möchte. Dazu hab ich natürlich ein mqtt-Thing angelegt, und einen Channel color mit xy angelgt.
Code: Alles auswählen
UID: mqtt:topic:broker:gf_office_light
label: Licht Büro
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:broker
location: Office
channels:
- id: Office_Light_HSB
channelTypeUID: mqtt:color
label: Licht Büro HSB
description: ""
configuration:
commandTopic: zigbee2mqtt/GF_Office_Light/set
colorMode: HSB
formatBeforePublish: '{"color":{"hsb":"%1$d,%2$d,%3$d"}}'
stateTopic: zigbee2mqtt/GF_Office_Light
transformationPattern: JSONPATH:$.brightness
onBrightness: 100
- id: Office_Light_xy
channelTypeUID: mqtt:color
label: Licht Büro xy
description: ""
configuration:
formatBeforePublish: '{"color":{"x":%s,"y":"%s"},"brightness":"%s"}'
commandTopic: zigbee2mqtt/GF_Office_Light/set
colorMode: XYY
stateTopic: zigbee2mqtt/GF_Office_Light
off: '{"state": "OFF"}'
onBrightness: 100
on: '{"state": "ON"}'
- id: Office_Light_str
channelTypeUID: mqtt:string
label: Licht Büro Text
description: ""
configuration:
formatBeforePublish: '{"effect":"%s"}'
commandTopic: zigbee2mqtt/GF_Office_Light/set
stateTopic: zigbee2mqtt/GF_Office_Light
- id: Office_Light_rgb
channelTypeUID: mqtt:color
label: Licht Büro rgb
description: ""
configuration:
commandTopic: zigbee2mqtt/GF_Office_Light/set
colorMode: RGB
formatBeforePublish: '{"color":{"rgb":"%1$d,%2$d,%3$d"}}'
off: '{"state": "OFF"}'
onBrightness: 100
on: '{"state": "ON"}'
Ist es denn möglich nur den brightness Wert umzurechnen? Man müsste den ja nur mit 2,55 muliplizieren.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Servus
-
- Beiträge: 364
- Registriert: 29. Okt 2020 19:53
Re: OH3, MQTT und Color
Hallo,
Ich hab das noch nicht so hinbekommen, dass ich den brightness-wert umrechne wenn er gemeinsam mit dem xy kommt.
Ich habe nun als Workaround erstmal noch einen extra Dimmer Channel für Brightness angelegt. Diesen Wert konnte ich mit JavaScript umrechnen:
Damit komme ich nun auf die volle Helligkeit. Leider werden nun jetzt bei jeder Änderung der Helligkeit bzw. ein- und ausschalten beide Channels ausgeführt, also der Dimmer für Brightness und xy oder rgb (hab beides probiert) dadurch ändert sich dann z.B. die Farbtemperatur ein wenig.
Ich würde gerne mit den JavaScript bevor ich den String "{"color":{"x":%s,"y":"%s"},"brightness":"%s"}" sende, nur den brightness Wert umrechnen.
Mit diesem abgeändertet JavaScript
kann ich zumindest schonmal auf den dritten Wert selectieren, und diesen umrechnen, es wird aber dann auch nur der Dritte Wert ausgegeben. Wer kennt sich mit diesem JavaScript aus, kann man das so hinbekommen, dass es funktioniert, also z.B. von
0.3,0.3,100
auf
0.3,0.3,254
dann könnte ich das alles in den xy Channel packen.
Danke und Servus
Ich hab das noch nicht so hinbekommen, dass ich den brightness-wert umrechne wenn er gemeinsam mit dem xy kommt.
Ich habe nun als Workaround erstmal noch einen extra Dimmer Channel für Brightness angelegt. Diesen Wert konnte ich mit JavaScript umrechnen:
Code: Alles auswählen
(function(x) {
var result = "";
result=x*2.54;
return result;
})(input)
Ich würde gerne mit den JavaScript bevor ich den String "{"color":{"x":%s,"y":"%s"},"brightness":"%s"}" sende, nur den brightness Wert umrechnen.
Mit diesem abgeändertet JavaScript
Code: Alles auswählen
(function(x,y,z) {
var result = "";
result=z*2.54;
return result;
})(input)
0.3,0.3,100
auf
0.3,0.3,254
dann könnte ich das alles in den xy Channel packen.
Danke und Servus
Servus
-
- Beiträge: 1
- Registriert: 3. Apr 2018 00:06
Re: OH3, MQTT und Color
Hallo,
ich habe das so gelöst, funktioniert mit colorpicker für Farbe und Helligkeit. Einen separaten Dimmer für Helligkeit benötigt man nicht:
Das sind die zugehörigen transform Skripte:
bright-zigbee-in.js:
bright-zigbee-out.js:
Viele Grüsse
rom69
ich habe das so gelöst, funktioniert mit colorpicker für Farbe und Helligkeit. Einen separaten Dimmer für Helligkeit benötigt man nicht:
Code: Alles auswählen
channels:
- id: color
channelTypeUID: mqtt:color
label: Color
description: null
configuration:
retained: false
postCommand: false
transformationPatternOut: JS:bright-zigbee-out.js
formatBeforePublish: "%s"
commandTopic: zig2mqtt/LivingClosetLedBulbIkea/set
colorMode: XYY
stateTopic: zig2mqtt/LivingClosetLedBulbIkea
transformationPattern: JS:bright-zigbee-in.js
off: "0"
onBrightness: 100
on: "1"
bright-zigbee-in.js:
Code: Alles auswählen
(function(color){
var data = JSON.parse(color);
var bright = Number(data.brightness) / 2.54;
return data.color.x.toString() + "," + data.color.y.toString() + "," + bright.toFixed(0);
})(input)
Code: Alles auswählen
(function(color){
var bright = Number(color.split(",")[2]) * 2.54;
return '{"color":{"x":"' + color.split(",")[0] + '","y":"' + color.split(",")[1] + '"},"brightness":"' + bright.toFixed(0) + '"}';
})(input)
rom69