Also, evtl. habe ich oben irgendwo einen Copy&Paste Fehler drin...
Auf meinem Testsystem sieht der Channel genau so aus:
Code: Alles auswählen
UID: mqtt:topic:mosquitto:p3z
label: Nous P3Z
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:mosquitto
channels:
- id: col
channelTypeUID: mqtt:color
label: Color
description: null
configuration:
retained: false
postCommand: false
formatBeforePublish: '{"brightness": %s, {"color": {"x": %s,"y": %s}}}'
commandTopic: zigbee2mqtt/p3z/set
colorMode: XYY
stateTopic: zigbee2mqtt/p3z
transformationPattern: DSL:|transform("JSONPATH","$.color.x",input)+",
"+transform("JSONPATH","$.color.y",input)+",
"transform("JSONPATH","$.brightness",input)
off: "0"
on: "1"
onBrightness: 10
wobei der Zeilenumbruch in der Transformation von openHAB selbst erzeugt ist und ignoriert wird (der befindet sich ja
innerhalb der übergebenen Teilstrings ", "
Den Channel habe ich mit einem Color Item verknüpft (hier Textform in Ermangelung einer gescheiten Code-Anzeige, die auch den Link enthält):
Code: Alles auswählen
Color Col "Color" {channel="mqtt:topic:mosquitto:p3z:col"}
und dieses Item habe ich in eine oh-grid-cell verbunden:
Code: Alles auswählen
component: oh-grid-cells
config: {}
slots:
default:
- component: oh-colorpicker-cell
config:
header: Test Color
title: Item Color
item: Col
modules:
- wheel
- current-color
Ergebnis ist ein Widget, über das ich das Item verstellen kann und sehen kann, was bei Werteänderung passiert.
Ergibt in mqtt die beiden Topics
zigbee2mqtt/p3z und
zigbee2mqtt/p3z/set. Verstelle ich das Widget, sendet openHAB ein JSON auf ...set:
Code: Alles auswählen
{"brightness": 0.6585, {"color": {"x": 0.3026,"y": 63.0}}}
und genauso kann ich von mqtt aus über das erste Topic den Status senden:
Code: Alles auswählen
{
"brightness": 27.94,
"color": {
"h": 25,
"hue": 25,
"s": 95,
"saturation": 95,
"x": 0.5267,
"y": 0.4133
},
"color_mode": "color_temp",
"color_power_on_behavior": "previous",
"color_temp": 500,
"do_not_disturb": true,
"last_seen": "2023-12-14T11:30:18+01:00",
"linkquality": 60,
"state": "OFF"
}
was direkt zum Ändern des Widget führt. Hab ich mehrfach ausprobiert.