Improve relative dimming decode

This commit is contained in:
2026-02-15 21:51:50 +01:00
parent 60b436f79f
commit 1eb283112c
5 changed files with 34 additions and 6 deletions

View File

@@ -1172,7 +1172,7 @@ class BridgeManager:
return
if action == "relative_dimming":
value = _extract_event_value(event)
value = _extract_dimming_value(event)
if value is None:
return
if value in (0, 8):
@@ -1188,7 +1188,7 @@ class BridgeManager:
return
if action == "relative_color_temperature":
value = _extract_event_value(event)
value = _extract_dimming_value(event)
if value is None:
return
if value in (0, 8):
@@ -1511,6 +1511,30 @@ def _extract_event_value(event: Event) -> int | None:
return None
def _extract_dimming_value(event: Event) -> int | None:
if "value" in event.data:
value = event.data["value"]
if isinstance(value, dict):
control = value.get("control")
step = value.get("stepcode", value.get("step_code"))
if control is not None and step is not None:
try:
control_bit = 1 if int(control) else 0
step_code = int(step) & 0x07
return (control_bit << 3) | step_code
except (TypeError, ValueError):
pass
data = event.data.get("data")
if isinstance(data, (list, tuple)) and len(data) >= 2:
try:
control_bit = 1 if int(data[0]) else 0
step_code = int(data[1]) & 0x07
return (control_bit << 3) | step_code
except (TypeError, ValueError):
return None
return _extract_event_value(event)
def _clean_address(address: Any) -> str | None:
if not address:
return None