Hallo zusammen,
ich habe die letzten Wochen damit verbracht, meine Beleuchtung von Deconz und dem HUE-Plugin auf Zigbee2Mqtt umzustellen.
Da ich in einigen Räumen eine HCL Steuerung mit den MDT Aktoren und den Voltus Spots habe, wollte ich das natürlich auch für meine Zigbee Leuchten haben.
Die Lösung funktioniert mit ein paar Einschränkungen sehr gut, daher möchte ich sie hier mit euch teilen.
Hinweis:
Für Smartvisu und SmarthomeNG habe ich zwei Pull Requests eingereicht, welche notwendig sind, damit die Lösung wie hier beschrieben funktioniert, ggf. muss auf die nächsten Releases gewartet werden. Dies betrifft den DPT 5003 Typ (für RGB Farbe) für das KNX Plugin und die Möglichkeit einen CSS Style an den Smartvisu Slider zu übergeben.
Was kann die Lösung:
- HCL / Circaridan Lighting für Zigbee Leuchten
- Relatives DTP3 Dimming für Zigbee Leuchten (für Helligkeit, Farbtemperatur und Sättigung)
- Erstellung von Visualisierungsobjekten für CCT- und RGB-Leuchten
- Alexa Integration
Visualisierungsobjekte:


Zunächst werden zwei Zeitschaltuhren erstellt, die zur zeit- oder sonnenstandsabhängigen Steuerung von Farbtemperatur und Helligkeit verwendet werden:

Farbtemperatur USZU-Werte:
Helligkeit USZU-Werte:
Weiterhin benötigt ihr einige neue Struktur Templates:
zigbee_cct_light: Erzeugt eine Item Stuktur für Tunable White Leuchten
zigbee_rgb_light: Erzeugt eine Item Stuktur für RGB white Leuchten
Die Struktur muss dann noch um die entsprechenden KNX Gruppenadressen und MQTT Topics ergänzt werden:
Wenn ihr hcl_lighting.enabled auf false setzt, sollte die Leuchte nun schon funktionieren (alles außer HCL)
Damit HCL funktioniert, braucht ihr noch eine Logik.
Die Logik sollte zyklisch ausgelöst werden (z.B. alle 60 Sekunden).
Zusätzlich muss die Logik von allen onoff und hcl_lighting.enabled Items getriggert werden.
(Die Logik erkennt die Triggerquelle automatisch).
Die Farbtemperatur des Lichts wird dann nicht nur beim Ein- und Ausschalten angepasst, sondern kontinuierlich nachgeregelt.
Eventuell muss in der Logik noch der Pfad zu den zu verwendenden uzsu Items angepasst werden.
Die Logik enthält einige Anpassungen für Ikea Tradfri Leuchten, da diese keine gleichzeitige Einstellung von Farbtemperatur und Helligkeit unterstützen.
Eine weitere Einschränkung ist, dass Zigbee Lampen immer mit der zuletzt eingestellten Farbtemperatur eingeschaltet werden. Eine Änderung der Farbtemperatur im ausgeschalteten Zustand ist im ZigBee Standard nicht vorgesehen. Das Licht schaltet also immer mit der zuletzt verwendeten Farbe ein und faded dann auf die Zielfarbe und Helligkeit.
Damit die Änderung der Farbtemperatur korrekt funktioniert, müssen noch die entsprechenden Maximalwerte für warmweiss und kaltweiss angegeben werden:
Und zwar unter:
.hcl_lighting.color_temperature.minimal_value / maximal_value
als auch unter:
.color_temperature.min / max
Der Wert unter hcl_lighting kann von den letzteren abweichen, um z.B. den HCL-Bereich einzuschränken.
Leider habe ich keine (einfache) Möglichkeit gefunden, diese Werte unter Zigbee2Mqtt automatisch auszulesen.
Ich habe aber eine Logik gebastelt, die die Werte einmal automatisch füllen kann, dazu werden alle Lichter einmal durchlaufen und die Maximal- und Minimalwerte gesetzt und die entsprechenden Werte befüllt. Dabei gehen alle Lichter im Haus nacheinander an und aus, also Vorsicht!
HCL kann natürlich auch in Szenen verwendet werden, z.B. so:
Alles aktuell noch im Testing, Nutzung daher auf eigene Gefahr
ich habe die letzten Wochen damit verbracht, meine Beleuchtung von Deconz und dem HUE-Plugin auf Zigbee2Mqtt umzustellen.
Da ich in einigen Räumen eine HCL Steuerung mit den MDT Aktoren und den Voltus Spots habe, wollte ich das natürlich auch für meine Zigbee Leuchten haben.
Die Lösung funktioniert mit ein paar Einschränkungen sehr gut, daher möchte ich sie hier mit euch teilen.
Hinweis:
Für Smartvisu und SmarthomeNG habe ich zwei Pull Requests eingereicht, welche notwendig sind, damit die Lösung wie hier beschrieben funktioniert, ggf. muss auf die nächsten Releases gewartet werden. Dies betrifft den DPT 5003 Typ (für RGB Farbe) für das KNX Plugin und die Möglichkeit einen CSS Style an den Smartvisu Slider zu übergeben.
Was kann die Lösung:
- HCL / Circaridan Lighting für Zigbee Leuchten
- Relatives DTP3 Dimming für Zigbee Leuchten (für Helligkeit, Farbtemperatur und Sättigung)
- Erstellung von Visualisierungsobjekten für CCT- und RGB-Leuchten
- Alexa Integration
Visualisierungsobjekte:
Zunächst werden zwei Zeitschaltuhren erstellt, die zur zeit- oder sonnenstandsabhängigen Steuerung von Farbtemperatur und Helligkeit verwendet werden:
Code:
settings: name: "Einstellungen" sv_page: category sv_img: edit_settings.svg lighting: hcl: name: "HCL" sv_blocksize: 3 color_temperature: name: "Farbtemperatur" sv_widget: "{{ device.uzsuicon('uzsu3', 'settings.lighting.hcl.color_temperature.uzsu', 'Farbtemperatur', '', '', 'num', [0, 100, 1]) }}{{ device.uzsugraph('', 'settings.lighting.hcl.color_temperature.uzsu', '', 1, 'num', [0,100,1]) }}" type: num struct: uzsu.child brightness: name: "Helligkeit" sv_widget: "{{ device.uzsuicon('uzsu3', 'settings.lighting.hcl.brightness.uzsu', 'Helligkeit', '', '', 'num', [0, 100, 1]) }}{{ device.uzsugraph('', 'settings.lighting.hcl.brightness.uzsu', '', 1, 'num', [0,100,1]) }}" type: num struct: uzsu.child
Farbtemperatur USZU-Werte:
Code:
{'interpolation': {'type': 'cubic', 'initialized': False, 'interval': '1', 'initage': '0', 'itemtype': 'num'}, 'list': [{'active': True, 'value': '0', 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'time': '00:00'}, {'active': True, 'value': '0', 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'calculated': '07:11', 'time': 'sunrise'}, {'active': True, 'value': '100', 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'calculated': '11:55', 'time': 'sunrise+90'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '0', 'calculated': '16:41', 'time': 'sunset'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '0', 'time': '23:59'}], 'active': True, 'sunrise': '07:11', 'sunset': '16:41', 'SunCalculated': {'sunrise': {'TH': '07:09', 'FR': '07:11', 'SA': '07:12', 'SU': '07:14', 'MO': '07:16', 'TU': '07:18', 'WE': '07:20'}, 'sunset': {'TH': '16:43', 'FR': '16:41', 'SA': '16:39', 'SU': '16:37', 'MO': '16:36', 'TU': '16:34', 'WE': '16:32'}}, 'plugin_version': '1.6.5'}
Code:
{'interpolation': {'type': 'cubic', 'initialized': False, 'interval': '1', 'initage': '0', 'itemtype': 'num'}, 'list': [{'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '30', 'time': '00:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '30', 'time': '06:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '54', 'time': '07:30'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '100', 'time': '09:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '100', 'time': '18:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '80', 'time': '20:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '60', 'time': '21:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '50', 'time': '22:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '40', 'time': '23:00'}, {'active': True, 'rrule': 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU', 'value': '30', 'time': '23:59'}], 'active': True, 'sunrise': '07:09', 'sunset': '16:43', 'SunCalculated': {'sunrise': {'TH': '07:09', 'FR': '07:11', 'SA': '07:12', 'SU': '07:14', 'MO': '07:16', 'TU': '07:18', 'WE': '07:20'}, 'sunset': {'TH': '16:43', 'FR': '16:41', 'SA': '16:39', 'SU': '16:37', 'MO': '16:36', 'TU': '16:34', 'WE': '16:32'}}, 'plugin_version': '1.6.5'}
Weiterhin benötigt ihr einige neue Struktur Templates:
zigbee_cct_light: Erzeugt eine Item Stuktur für Tunable White Leuchten
zigbee_rgb_light: Erzeugt eine Item Stuktur für RGB white Leuchten
Code:
hcl_lighting: hcl_lighting: enabled: name: "Licht über HCL steuern" type: bool cache: true initial_value: true color_temperature: enabled: name: "Farbetemperatur über HCL steuern" type: bool cache: true initial_value: true minimal_value: type: num cache: true initial_value: "2200" maximal_value: type: num cache: true initial_value: "6500" brightness: enabled: name: "Helligkeit über HCL steuern" type: bool cache: true initial_value: true minimal_value: type: num cache: true initial_value: "0" maximal_value: type: num cache: true initial_value: "254" zigbee_cct_light: name: "CCT Light" alexa_name: "CCT Light" alexa_device: "CCT Light" alexa_description: "An Zigbee CCT Light" alexa_icon: LIGHT alexa_proactivelyReported: 'True' struct: hcl_lighting sv_widget: "{{ 'item.name' }}<br> <table width='100%'> <tr> <td align=left width='50px'>{{ basic.stateswitch('', 'item.onoff', 'icon', '', 'light_light.svg') }}</td> <td align=left>{{ basic.slider('', 'item.level', 0, 100, 1, '', 'none', '', '', 1,) }}</td> </tr> <tr> <td align=left></td> <td align=left>{{ basic.slider('', 'item.color_temperature.normalized','0', '255', 1, '', 'none', '', '', 1, 'linear-gradient(90deg, rgb(255, 177, 111), rgb(229, 234, 255))') }}</td> </tr> </table> " transition_time: type: num cache: true initial_value: 0.5 mqtt_get: type: dict mqtt_topic_in: 'dummy' on_change: - ..onoff = value['state'] - ..level = 0 if value['brightness'] == 1 and value['state'] == 'OFF' else math.ceil((value['brightness'] / 254 ) * 100) if isinstance(value['brightness'], int) else None # brightness is 1 when off, so we nomalize to off == 0. (Fix for MDT Glastaster dimm icon) - ..color_temperature = 1000000.0/value['color_temp'] mqtt_set: type: dict mqtt_topic_out: 'dummy/set' enforce_updates: 'true' onoff: type: bool knx_dpt: 1 alexa_device: ..:. alexa_actions: TurnOn TurnOff on_change: "..mqtt_set = {'transition': sh...transition_time(), 'state': 'ON' if value else 'OFF'} if not sh..property.last_update_by.endswith('mqtt_get') and not sh...hcl_lighting.enabled() else None" cache: true level: type: num knx_dpt: 5001 on_change: "..mqtt_set = {'brightness': int(value/100.0*254), 'transition': sh...transition_time()} if not sh..property.last_update_by.endswith('mqtt_get') else None" alexa_device: ..:. alexa_actions: "AdjustBrightness SetBrightness" alexa_item_range: 0-100 cache: true level_inc: type: num on_change: "..mqtt_set = {'state': 'ON', 'brightness_move': int(value)}" enforce_updates: 'true' speed: type: num cache: true initial_value: 40 dimdpt: type: list knx_dpt: 3 enforce_updates: 'true' on_change: "..self = 0 if value[1] == 0 else sh...speed() if value[0] == 1 else -sh...speed()" color_temperature: type: num on_change: "..mqtt_set = {'color_mode': 'color_temp', 'color_temp': 1000000.0/value, 'transition': sh...transition_time()} if not sh..property.last_update_by.endswith('mqtt_get') else None" cache: true min: name: "minimal value for color temperature" type: num cache: true initial_value: 2000 max: name: "maximum value for color temperature" type: num cache: true initial_value: 6500 normalized: type: num alexa_device: ...:. alexa_item_range: 2000 - 6500 alexa_actions: SetColorTemperature IncreaseColorTemperature DecreaseColorTemperature on_change: "..self = sh...min() + value/255.0 * (sh...max() -sh...min())" color_temperature_inc: type: num on_change: "..mqtt_set = {'color_temp_move': value} if not sh..property.last_update_by.endswith('mqtt_get') else None" enforce_updates: 'true' speed: type: num cache: true initial_value: 40 dimdpt: type: list knx_dpt: 3 enforce_updates: 'true' on_change: "..self = 0 if value[1] == 0 else sh...speed() if value[0] == 1 else -sh...speed()" zigbee_rgb_light: mqtt_get: type: dict mqtt_topic_in: 'dummy' on_change: - ..onoff = value['state'] - ..level = int((value['brightness'] / 254 ) * 100) - ..color_temperature = 1000000.0/value['color_temp'] - ..hue = value['color']['hue'] - ..saturation = value['color']['saturation'] sv_widget: #{{ 'item.name' }} " <table width='100%'> <tr> <td align=left valign=middle width='50px'> {{ basic.stateswitch('', 'item.onoff', 'icon', '', 'light_light.svg') }} <br> <br> <br> {{ basic.color('', 'item.hue', 'item.saturation', 'item.level', '', '', '', '', 'rect', 'hsv') }} </td> <td align=center> Color: {{ basic.slider('', 'item.hue','0', '360', 1, '', 'none', '', '', 1, 'linear-gradient(90deg, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))') }} {{ basic.slider('', 'item.saturation','0', '100', 1, '', 'none', '', '', 1, 'linear-gradient(90deg, hsl(0,0%,50%), hsl(0,100%,50%))') }} {{ basic.slider('', 'item.level','0', '100', 1, '', 'none', '', '', 1, 'linear-gradient(90deg, rgb(0,0,0), rgb(255,255,255))') }} Color Temperature: {{ basic.slider('', 'item.color_temperature.normalized','0', '255', 1, '', 'none', '', '', 1, 'linear-gradient(90deg, rgb(255, 177, 111), rgb(229, 234, 255))') }} </td> </tr> </table> " struct: zigbee_cct_light hue: type: num knx_dpt: 5003 cache: true on_change: "..mqtt_set = {'color_mode': 'hs', 'color': {'hue': value, 'saturation': sh...saturation()}} if not sh..property.last_update_by.endswith('mqtt_get') else None" hue_inc: type: num on_change: "..mqtt_set = {'color_mode': 'hs', 'hue_move': value} if not sh..property.last_update_by.endswith('mqtt_get') else None" enforce_updates: 'true' speed: type: num cache: true initial_value: 20 dimdpt: type: list knx_dpt: 3 enforce_updates: 'true' on_change: "..self = 0 if value[1] == 0 else sh...speed() if value[0] == 1 else -sh...speed()" saturation: type: num knx_dpt: 5001 cache: true on_change: "..mqtt_set = {'color_mode': 'hs', 'color': {'hue': sh...hue(), 'saturation': value}} if not sh..property.last_update_by.endswith('mqtt_get') else None" saturation_inc: type: num on_change: "..mqtt_set = {'color_mode': 'hs', 'saturation_move': value} if not sh..property.last_update_by.endswith('mqtt_get') else None" enforce_updates: 'true' speed: type: num cache: true initial_value: 40 dimdpt: type: list knx_dpt: 3 enforce_updates: 'true' on_change: "..self = 0 if value[1] == 0 else sh...speed() if value[0] == 1 else -sh...speed()"
Die Struktur muss dann noch um die entsprechenden KNX Gruppenadressen und MQTT Topics ergänzt werden:
Code:
fassade_sued_zigbee: struct: zigbee_rgb_light alexa_name: "Licht Terrasse" alexa_device: "light_outdoor_south" name: "Licht Terrasse" mqtt_get: mqtt_topic_in: 'zigbee2mqtt/light/outdoor/south/wall1' mqtt_set: mqtt_topic_out: 'zigbee2mqtt/light/outdoor/south/group/set' onoff: knx_status: 1/3/5 knx_listen: 1/3/6 level: knx_status: 1/3/13 knx_listen: 1/3/2 level_inc: dimdpt: knx_listen: 1/3/16 hue: knx_status: 1/3/20 hue_inc: dimdpt: knx_listen: 1/3/21 saturation: knx_status: 1/3/19 saturation_inc: dimdpt: knx_listen: 1/3/18
Wenn ihr hcl_lighting.enabled auf false setzt, sollte die Leuchte nun schon funktionieren (alles außer HCL)
Damit HCL funktioniert, braucht ihr noch eine Logik.
Code:
#!/usr/bin/env python3 # licht_flur_hcl.py import threading import time def get_color_temperature(item): min_ct = items.return_item(item + "hcl_lighting.color_temperature.minimal_value")() max_ct = items.return_item(item + "hcl_lighting.color_temperature.maximal_value")() offset_ct = max_ct - min_ct color = min_ct + (sh.settings.lighting.hcl.color_temperature() / 100.0 * offset_ct) mired = float(1000000 / color) return mired def get_brightness(item): min_br = items.return_item(item + "hcl_lighting.brightness.minimal_value")() max_br = items.return_item(item + "hcl_lighting.brightness.maximal_value")() offset_br = max_br - min_br brightness = min_br + (sh.settings.lighting.hcl.brightness() / 100.0 * offset_br) return int(brightness) def update_item(item, lock): hcl_enabled = items.return_item(item + "hcl_lighting.enabled")() if not hcl_enabled: return with logic.lock: on = items.return_item(item + "onoff")() if on: value = {"state": 'ON', "transition": 0.1} color_enabled = items.return_item(item + "hcl_lighting.color_temperature.enabled")() brightness_enabled = items.return_item(item + "hcl_lighting.brightness.enabled")() if color_enabled: value["color_temp"] = get_color_temperature(item) if brightness_enabled: value["brightness"] = get_brightness(item) if color_enabled or brightness_enabled: items.return_item(item + "mqtt_set")(value) def turn_on_off_item(item, lock): on = copy.copy(trigger['value']) is_ikea = True hcl_enabled = items.return_item(item + "hcl_lighting.enabled")() if not hcl_enabled: return with logic.lock: transition_time = items.return_item(item + "transition_time")() value = {"transition": transition_time} if on: value["state"] = 'ON' color_enabled = items.return_item(item + "hcl_lighting.color_temperature.enabled")() brightness_enabled = items.return_item(item + "hcl_lighting.brightness.enabled")() if is_ikea: if brightness_enabled: value["brightness"] = get_brightness(item) items.return_item(item + "mqtt_set")(value) if color_enabled: del value["brightness"] time.sleep(0.1) if color_enabled: value["color_temp"] = get_color_temperature(item) items.return_item(item + "mqtt_set")(value) else: if color_enabled: value["color_temp"] = get_color_temperature(item) if brightness_enabled: value["brightness"] = get_brightness(item) items.return_item(item + "mqtt_set")(value) else: value["state"] = 'OFF' items.return_item(item + "mqtt_set")(value) def threaded_update(items_to_update, lock): for item in items_to_update: update_item(item, lock) time.sleep(0.1) if not hasattr(logic, 'items_to_update'): logic.items_to_update = set() if not hasattr(logic, 'lock'): logic.lock = threading.Lock() if trigger['by'] == "Item": details = str(trigger['source_details']) src_str = str(trigger['source']) if src_str.endswith("hcl_lighting.enabled"): item = str(trigger['source'])[:-len("hcl_lighting.enabled")] else: item = str(trigger['source'])[:-5] logic.items_to_update.add(item) ## check trigger to prevent circular changes if details != ("On_Change:" + item + "mqtt_get"): turn_on_off_item(item, logic.lock) else: thread = threading.Thread(target=threaded_update, args=(logic.items_to_update, logic.lock)) thread.name = 'HCL Thread' thread.start()
Zusätzlich muss die Logik von allen onoff und hcl_lighting.enabled Items getriggert werden.
(Die Logik erkennt die Triggerquelle automatisch).
Die Farbtemperatur des Lichts wird dann nicht nur beim Ein- und Ausschalten angepasst, sondern kontinuierlich nachgeregelt.
Eventuell muss in der Logik noch der Pfad zu den zu verwendenden uzsu Items angepasst werden.
Die Logik enthält einige Anpassungen für Ikea Tradfri Leuchten, da diese keine gleichzeitige Einstellung von Farbtemperatur und Helligkeit unterstützen.
Eine weitere Einschränkung ist, dass Zigbee Lampen immer mit der zuletzt eingestellten Farbtemperatur eingeschaltet werden. Eine Änderung der Farbtemperatur im ausgeschalteten Zustand ist im ZigBee Standard nicht vorgesehen. Das Licht schaltet also immer mit der zuletzt verwendeten Farbe ein und faded dann auf die Zielfarbe und Helligkeit.
Damit die Änderung der Farbtemperatur korrekt funktioniert, müssen noch die entsprechenden Maximalwerte für warmweiss und kaltweiss angegeben werden:
Und zwar unter:
.hcl_lighting.color_temperature.minimal_value / maximal_value
als auch unter:
.color_temperature.min / max
Der Wert unter hcl_lighting kann von den letzteren abweichen, um z.B. den HCL-Bereich einzuschränken.
Leider habe ich keine (einfache) Möglichkeit gefunden, diese Werte unter Zigbee2Mqtt automatisch auszulesen.
Ich habe aber eine Logik gebastelt, die die Werte einmal automatisch füllen kann, dazu werden alle Lichter einmal durchlaufen und die Maximal- und Minimalwerte gesetzt und die entsprechenden Werte befüllt. Dabei gehen alle Lichter im Haus nacheinander an und aus, also Vorsicht!
Code:
#!/usr/bin/env python3 # color_temperature_updater.py for item in items.match_items('*hcl_lighting'): # selects all items ending with 'hcl_lighting' light_item_name = item.id()[:-len("hcl_lighting'")] light_mqtt = items.return_item(light_item_name + ".mqtt_set") light_temp = items.return_item(light_item_name + ".color_temperature") light_temp_min = items.return_item(light_item_name + ".color_temperature.min") light_temp_max = items.return_item(light_item_name + ".color_temperature.max") hcl_min = items.return_item(light_item_name + ".hcl_lighting.color_temperature.minimal_value") hcl_max = items.return_item(light_item_name + ".hcl_lighting.color_temperature.maximal_value") logger.error("Updating light: \"" + light_item_name + "\"") value = {"state": 'ON', "transition": 0, "brightness": 254} light_mqtt(value) # set brighness 100% time.sleep(1) value = {"state": 'ON', "transition": 0, "color_temp": "warmest"} light_mqtt(value) time.sleep(1) warm = light_temp() light_temp_min(warm) hcl_min(warm) logger.error(warm) value = {"state": 'ON', "transition": 0, "color_temp": "coolest"} light_mqtt(value) time.sleep(1) cool = light_temp() logger.error(cool) light_temp_max(cool) hcl_max(cool) time.sleep(0.1) value = {"state": 'OFF', "transition": 0.1, "color_temp": "warmest"} light_mqtt(value)
HCL kann natürlich auch in Szenen verwendet werden, z.B. so:
Code:
0: name: Warm Dunkel actions: - {item: world.haus.arbeit.licht.decke.hcl_lighting.enabled, value: false, learn: false} - {item: world.haus.arbeit.licht.decke.mqtt_set, value: {state: 'ON', transition: 0.5, brightness: 50, color_temp: "warmest"}, learn: false} 1: name: Warm Hell actions: - {item: world.haus.arbeit.licht.decke.hcl_lighting.enabled, value: false, learn: false} - {item: world.haus.arbeit.licht.decke.mqtt_set, value: {state: 'ON', transition: 0.5, brightness: 254, color_temp: "warmest"}, learn: false} 2: name: Neutral Hell actions: - {item: world.haus.arbeit.licht.decke.hcl_lighting.enabled, value: false, learn: false} - {item: world.haus.arbeit.licht.decke.mqtt_set, value: {state: 'ON', transition: 0.5, brightness: 254, color_temp: "neutral"}, learn: false} 3: name: Kalt Hell actions: - {item: world.haus.arbeit.licht.decke.hcl_lighting.enabled, value: false, learn: false} - {item: world.haus.arbeit.licht.decke.mqtt_set, value: {state: 'ON', transition: 0.5, brightness: 254, color_temp: "coolest"}, learn: false} 4: name: HCL actions: - {item: world.haus.arbeit.licht.decke.hcl_lighting.enabled, value: true, learn: false}
Alles aktuell noch im Testing, Nutzung daher auf eigene Gefahr
