Initial public release

This commit is contained in:
ajp_anton
2026-05-30 15:44:40 +00:00
commit cc4e0c2c0f
56 changed files with 11840 additions and 0 deletions
+146
View File
@@ -0,0 +1,146 @@
from __future__ import annotations
from pathlib import Path
import sys
import pytest
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
from ha_deconz_bridge.color import Color
from ha_deconz_bridge.lights import ChannelSpec, ControllerModeSpec, ControllerSpec, VirtualLightSpec
from ha_deconz_bridge.settings import Settings
@pytest.fixture
def settings() -> Settings:
return Settings()
def _rgb_controller(zigbee_id: str) -> ControllerSpec:
return ControllerSpec(
zigbee_id=zigbee_id,
name=f"RGB {zigbee_id}",
modes={
"rgb": ControllerModeSpec(
name="rgb",
channels={
"r": ChannelSpec("r", Color.from_rgb((1.0, 0.0, 0.0), brightness=0.9)),
"g": ChannelSpec("g", Color.from_rgb((0.0, 1.0, 0.0), brightness=1.2)),
"b": ChannelSpec("b", Color.from_rgb((0.0, 0.0, 1.0), brightness=0.8)),
},
)
},
)
def _ct_controller(zigbee_id: str) -> ControllerSpec:
return ControllerSpec(
zigbee_id=zigbee_id,
name=f"CT {zigbee_id}",
modes={
"color_temp": ControllerModeSpec(
name="color_temp",
channels={
"ww": ChannelSpec(
"ww",
Color.from_color_temp(500, brightness=1.0, temp_range=(153, 500)),
),
"cw": ChannelSpec(
"cw",
Color.from_color_temp(153, brightness=1.0, temp_range=(153, 500)),
),
},
)
},
)
@pytest.fixture
def rgb_light_spec() -> VirtualLightSpec:
return VirtualLightSpec(
name="rgb_light",
supported_color_modes=("rgb",),
controllers={"1": _rgb_controller("1")},
)
@pytest.fixture
def ct_light_spec() -> VirtualLightSpec:
return VirtualLightSpec(
name="ct_light",
supported_color_modes=("color_temp",),
controllers={"2": _ct_controller("2")},
)
@pytest.fixture
def mixed_light_spec() -> VirtualLightSpec:
shared = ControllerSpec(
zigbee_id="3",
name="Shared",
modes={
"rgb": ControllerModeSpec(
name="rgb",
channels={
"r": ChannelSpec("r", Color.from_rgb((1.0, 0.0, 0.0), brightness=0.6)),
"g": ChannelSpec("g", Color.from_rgb((0.0, 1.0, 0.0), brightness=0.6)),
"b": ChannelSpec("b", Color.from_rgb((0.0, 0.0, 1.0), brightness=0.4)),
},
),
"color_temp": ControllerModeSpec(
name="color_temp",
channels={
"ww": ChannelSpec(
"ww",
Color.from_color_temp(500, brightness=0.9, temp_range=(153, 500)),
),
"cw": ChannelSpec(
"cw",
Color.from_color_temp(153, brightness=0.9, temp_range=(153, 500)),
),
},
),
},
)
onoff = ControllerSpec(
zigbee_id="4",
name="Accent",
modes={
"onoff": ControllerModeSpec(
name="onoff",
channels={"w": ChannelSpec("w", Color.from_rgb((1.0, 1.0, 1.0), brightness=0.3))},
)
},
)
return VirtualLightSpec(
name="mixed_light",
supported_color_modes=("rgb", "color_temp"),
controllers={
"2": _ct_controller("2"),
"3": shared,
"4": onoff,
},
)
@pytest.fixture
def red_only_spec() -> VirtualLightSpec:
return VirtualLightSpec(
name="red_only",
supported_color_modes=("rgb",),
controllers={
"1": ControllerSpec(
zigbee_id="1",
name="Red only",
modes={
"rgb": ControllerModeSpec(
name="rgb",
channels={
"r": ChannelSpec("r", Color.from_rgb((1.0, 0.0, 0.0), brightness=1.0)),
},
)
},
)
},
)