Fix light port key collisions

This commit is contained in:
2026-02-15 18:29:11 +01:00
parent 7953cd25ba
commit e76cfeb98c
46 changed files with 327 additions and 336 deletions

View File

@@ -882,38 +882,35 @@ class BridgeManager:
if color_temp_kelvin is None and color_temp_mired is not None:
color_temp_kelvin = _mireds_to_kelvin(color_temp_mired)
if port.state_address or port.address:
if port.state_address:
payload = 1 if is_on else 0
target = port.state_address or port.address
if port.state_address:
payload = _invert_value(
payload, port.state_address, self._address_options
)
await self._knx_send_raw(target, payload)
payload = _invert_value(
payload, port.state_address, self._address_options
)
await self._knx_send_raw(port.state_address, payload)
if port.brightness_state_address or port.brightness_address:
if port.brightness_state_address:
if is_on:
if brightness_percent is None:
pass
else:
target = (
port.brightness_state_address or port.brightness_address
)
if brightness_percent is not None:
payload = brightness_percent
if port.brightness_state_address:
payload = _invert_value(
payload, port.brightness_state_address, self._address_options
)
await self._knx_send_percent(target, payload)
payload = _invert_value(
payload,
port.brightness_state_address,
self._address_options,
)
await self._knx_send_percent(
port.brightness_state_address, payload
)
else:
target = port.brightness_state_address or port.brightness_address
if target:
payload = 0
if port.brightness_state_address:
payload = _invert_value(
payload, port.brightness_state_address, self._address_options
)
await self._knx_send_percent(target, payload)
payload = 0
payload = _invert_value(
payload,
port.brightness_state_address,
self._address_options,
)
await self._knx_send_percent(
port.brightness_state_address, payload
)
if rgb_color is None and hs_color is not None:
rgb_color = color_util.color_hs_to_RGB(*hs_color)
@@ -922,65 +919,56 @@ class BridgeManager:
xy_color[0], xy_color[1], brightness or 255
)
if port.color_state_address or port.color_address:
target = port.color_state_address or port.color_address
if rgb_color is not None and target:
await self._knx_send_typed(target, list(rgb_color), "232.600")
if port.rgbw_state_address or port.rgbw_address:
target = port.rgbw_state_address or port.rgbw_address
if rgbw_color is not None and target:
await self._knx_send_typed(target, list(rgbw_color), "251.600")
if port.hue_state_address or port.hue_address:
target = port.hue_state_address or port.hue_address
if hs_color is not None and target:
await self._knx_send_typed(target, int(round(hs_color[0])), "5.003")
if port.saturation_state_address or port.saturation_address:
target = port.saturation_state_address or port.saturation_address
if hs_color is not None and target:
payload = int(round(hs_color[1]))
if port.saturation_state_address:
payload = _invert_value(
payload, port.saturation_state_address, self._address_options
)
await self._knx_send_percent(target, payload)
if port.xyy_state_address or port.xyy_address:
target = port.xyy_state_address or port.xyy_address
if xy_color is not None and target:
if brightness_percent is None:
brightness_value = 100 if is_on else 0
else:
brightness_value = brightness_percent
await self._knx_send_typed(
target,
[float(xy_color[0]), float(xy_color[1]), int(brightness_value)],
"242.600",
)
if port.color_temperature_state_address or port.color_temperature_address:
target = (
port.color_temperature_state_address
or port.color_temperature_address
if port.color_state_address and rgb_color is not None:
await self._knx_send_typed(
port.color_state_address, list(rgb_color), "232.600"
)
if target and color_temp_kelvin is not None:
payload, dpt_type = _color_temperature_payload(
color_temp_kelvin,
port,
clamp=True,
if port.rgbw_state_address and rgbw_color is not None:
await self._knx_send_typed(
port.rgbw_state_address, list(rgbw_color), "251.600"
)
if port.hue_state_address and hs_color is not None:
await self._knx_send_typed(
port.hue_state_address, int(round(hs_color[0])), "5.003"
)
if port.saturation_state_address and hs_color is not None:
payload = int(round(hs_color[1]))
payload = _invert_value(
payload, port.saturation_state_address, self._address_options
)
await self._knx_send_percent(
port.saturation_state_address, payload
)
if port.xyy_state_address and xy_color is not None:
if brightness_percent is None:
brightness_value = 100 if is_on else 0
else:
brightness_value = brightness_percent
await self._knx_send_typed(
port.xyy_state_address,
[float(xy_color[0]), float(xy_color[1]), int(brightness_value)],
"242.600",
)
if port.color_temperature_state_address and color_temp_kelvin is not None:
payload, dpt_type = _color_temperature_payload(
color_temp_kelvin,
port,
clamp=True,
)
if port.color_temperature_mode == "relative":
payload = _invert_value(
int(round(payload)),
port.color_temperature_state_address,
self._address_options,
)
if (
port.color_temperature_state_address
and port.color_temperature_mode == "relative"
):
payload = _invert_value(
int(round(payload)),
port.color_temperature_state_address,
self._address_options,
)
await self._knx_send_typed(target, payload, dpt_type)
await self._knx_send_typed(
port.color_temperature_state_address, payload, dpt_type
)
self._update_light_components_from_state(
port,