5f01411780
Initial snapshot of Home Assistant config (HAOS 2026.4.4)
prior to dashboard restructuring and helper YAML migration.
Pre-commit cleanup applied:
- Removed blueprints/switch_manager/ (9.4 MB stale, component already gone)
- Removed .storage/switch_manager
- Removed home-assistant.log.{1,old,fault}
- Removed zigbee2mqtt/configuration_backup_v{1..4}.yaml
- Removed zigbee2mqtt/database.db.tmp.2024-09-27 (1.5y old)
- Created empty themes/ to satisfy configuration.yaml include
.gitignore uses allowlist strategy for .storage/ to keep
all tokens, keys, and PINs out of version control.
327 lines
13 KiB
Python
327 lines
13 KiB
Python
from cx_const import DefaultActionsMapping, Light, Z2MLight
|
|
from cx_core import LightController, Z2MLightController
|
|
from cx_core.integration import EventData
|
|
|
|
|
|
class HueDimmerController(LightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"on_press_release": Light.ON,
|
|
"on_hold": Light.HOLD_COLOR_UP,
|
|
"on_hold_release": Light.RELEASE,
|
|
"up_press_release": Light.CLICK_BRIGHTNESS_UP,
|
|
"up_hold": Light.HOLD_BRIGHTNESS_UP,
|
|
"up_hold_release": Light.RELEASE,
|
|
"down_press_release": Light.CLICK_BRIGHTNESS_DOWN,
|
|
"down_hold": Light.HOLD_BRIGHTNESS_DOWN,
|
|
"down_hold_release": Light.RELEASE,
|
|
"off_press_release": Light.OFF,
|
|
"off_hold": Light.HOLD_COLOR_DOWN,
|
|
"off_hold_release": Light.RELEASE,
|
|
}
|
|
|
|
def get_deconz_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
1002: Light.ON,
|
|
1001: Light.HOLD_COLOR_UP,
|
|
1003: Light.RELEASE,
|
|
2002: Light.CLICK_BRIGHTNESS_UP,
|
|
2001: Light.HOLD_BRIGHTNESS_UP,
|
|
2003: Light.RELEASE,
|
|
3002: Light.CLICK_BRIGHTNESS_DOWN,
|
|
3001: Light.HOLD_BRIGHTNESS_DOWN,
|
|
3003: Light.RELEASE,
|
|
4002: Light.OFF,
|
|
4001: Light.HOLD_COLOR_DOWN,
|
|
4003: Light.RELEASE,
|
|
}
|
|
|
|
def get_zha_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"off_long_release": Light.RELEASE,
|
|
"off_hold": Light.HOLD_COLOR_DOWN,
|
|
"off_short_release": Light.OFF,
|
|
"down_long_release": Light.RELEASE,
|
|
"down_hold": Light.HOLD_BRIGHTNESS_DOWN,
|
|
"down_short_release": Light.CLICK_BRIGHTNESS_DOWN,
|
|
"up_long_release": Light.RELEASE,
|
|
"up_hold": Light.HOLD_BRIGHTNESS_UP,
|
|
"up_short_release": Light.CLICK_BRIGHTNESS_UP,
|
|
"on_long_release": Light.RELEASE,
|
|
"on_hold": Light.HOLD_COLOR_UP,
|
|
"on_short_release": Light.ON,
|
|
}
|
|
|
|
def get_zha_action(self, data: EventData) -> str:
|
|
command: str = data["command"]
|
|
return command
|
|
|
|
|
|
class HueDimmerZ2MLightController(Z2MLightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"on_press_release": Z2MLight.ON,
|
|
"on_hold": Z2MLight.HOLD_COLOR_TEMP_UP,
|
|
"on_hold_release": Z2MLight.RELEASE,
|
|
"up_press_release": Z2MLight.CLICK_BRIGHTNESS_UP,
|
|
"up_hold": Z2MLight.HOLD_BRIGHTNESS_UP,
|
|
"up_hold_release": Z2MLight.RELEASE,
|
|
"down_press_release": Z2MLight.CLICK_BRIGHTNESS_DOWN,
|
|
"down_hold": Z2MLight.HOLD_BRIGHTNESS_DOWN,
|
|
"down_hold_release": Z2MLight.RELEASE,
|
|
"off_press_release": Z2MLight.OFF,
|
|
"off_hold": Z2MLight.HOLD_COLOR_TEMP_DOWN,
|
|
"off_hold_release": Z2MLight.RELEASE,
|
|
}
|
|
|
|
|
|
class Philips929002398602LightController(LightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"on_press_release": Light.TOGGLE,
|
|
"on_hold": Light.TOGGLE,
|
|
"on_hold_release": Light.RELEASE,
|
|
"up_press_release": Light.CLICK_BRIGHTNESS_UP,
|
|
"up_hold": Light.HOLD_BRIGHTNESS_UP,
|
|
"up_hold_release": Light.RELEASE,
|
|
"down_press_release": Light.CLICK_BRIGHTNESS_DOWN,
|
|
"down_hold": Light.HOLD_BRIGHTNESS_DOWN,
|
|
"down_hold_release": Light.RELEASE,
|
|
"off_press_release": Light.CLICK_COLOR_UP,
|
|
"off_hold": Light.HOLD_COLOR_DOWN,
|
|
"off_hold_release": Light.RELEASE,
|
|
}
|
|
|
|
def get_deconz_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
1002: Light.TOGGLE,
|
|
1001: Light.TOGGLE,
|
|
1003: Light.RELEASE,
|
|
2002: Light.CLICK_BRIGHTNESS_UP,
|
|
2001: Light.HOLD_BRIGHTNESS_UP,
|
|
2003: Light.RELEASE,
|
|
3002: Light.CLICK_BRIGHTNESS_DOWN,
|
|
3001: Light.HOLD_BRIGHTNESS_DOWN,
|
|
3003: Light.RELEASE,
|
|
4002: Light.CLICK_COLOR_UP,
|
|
4001: Light.HOLD_COLOR_DOWN,
|
|
4003: Light.RELEASE,
|
|
}
|
|
|
|
def get_zha_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"off_long_release": Light.RELEASE,
|
|
"off_hold": Light.HOLD_COLOR_DOWN,
|
|
"off_short_release": Light.CLICK_COLOR_UP,
|
|
"down_long_release": Light.RELEASE,
|
|
"down_hold": Light.HOLD_BRIGHTNESS_DOWN,
|
|
"down_short_release": Light.CLICK_BRIGHTNESS_DOWN,
|
|
"up_long_release": Light.RELEASE,
|
|
"up_hold": Light.HOLD_BRIGHTNESS_UP,
|
|
"up_short_release": Light.CLICK_BRIGHTNESS_UP,
|
|
"on_long_release": Light.RELEASE,
|
|
"on_hold": Light.TOGGLE,
|
|
"on_short_release": Light.TOGGLE,
|
|
}
|
|
|
|
def get_zha_action(self, data: EventData) -> str:
|
|
command: str = data["command"]
|
|
return command
|
|
|
|
|
|
class Philips929002398602Z2MLightController(Z2MLightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"on_press_release": Z2MLight.ON,
|
|
"on_hold": Z2MLight.HOLD_COLOR_TEMP_UP,
|
|
"on_hold_release": Z2MLight.RELEASE,
|
|
"up_press_release": Z2MLight.CLICK_BRIGHTNESS_UP,
|
|
"up_hold": Z2MLight.HOLD_BRIGHTNESS_UP,
|
|
"up_hold_release": Z2MLight.RELEASE,
|
|
"down_press_release": Z2MLight.CLICK_BRIGHTNESS_DOWN,
|
|
"down_hold": Z2MLight.HOLD_BRIGHTNESS_DOWN,
|
|
"down_hold_release": Z2MLight.RELEASE,
|
|
"off_press_release": Z2MLight.OFF,
|
|
"off_hold": Z2MLight.HOLD_COLOR_TEMP_DOWN,
|
|
"off_hold_release": Z2MLight.RELEASE,
|
|
}
|
|
|
|
|
|
class PTM215XLightController(LightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"press_1": Light.ON,
|
|
"release_1": Light.RELEASE,
|
|
"press_2": Light.OFF,
|
|
"release_2": Light.RELEASE,
|
|
"press_3": Light.ON_FULL_BRIGHTNESS,
|
|
"release_3": Light.RELEASE,
|
|
"press_4": Light.ON_MIN_BRIGHTNESS,
|
|
"release_4": Light.RELEASE,
|
|
"press_1_and_3": Light.ON_FULL_COLOR_TEMP,
|
|
"release_1_and_3": Light.RELEASE,
|
|
"press_2_and_4": Light.ON_MIN_COLOR_TEMP,
|
|
"release_2_and_4": Light.RELEASE,
|
|
"press_energy_bar": Light.SYNC,
|
|
}
|
|
|
|
def get_deconz_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
1002: Light.ON, # button_1_release
|
|
1001: Light.SYNC, # button_1_hold
|
|
1000: None, # button_1_press
|
|
1003: None, # button_1_release_after_hold
|
|
2002: Light.OFF, # button_2_release
|
|
2001: Light.SYNC, # button_2_hold
|
|
2000: None, # button_2_press
|
|
2003: None, # button_2_release_after_hold
|
|
3002: Light.ON_FULL_BRIGHTNESS, # button_3_release
|
|
3001: Light.HOLD_BRIGHTNESS_UP, # button_3_hold
|
|
3000: None, # button_3_press
|
|
3003: Light.RELEASE, # button_3_release_after_hold
|
|
4002: Light.ON_MIN_BRIGHTNESS, # button_4_release
|
|
4001: Light.HOLD_BRIGHTNESS_DOWN, # button_4_hold
|
|
4000: None, # button_4_press
|
|
4003: Light.RELEASE, # button_4_release_after_hold
|
|
5002: Light.ON_FULL_COLOR_TEMP, # button_1_3_release
|
|
5001: Light.HOLD_COLOR_UP, # button_1_3_hold
|
|
5000: None, # button_1_3_press
|
|
5003: Light.RELEASE, # button_1_3_release_after_hold
|
|
6002: Light.ON_MIN_COLOR_TEMP, # button_2_4_release
|
|
6001: Light.HOLD_COLOR_DOWN, # button_2_4_hold
|
|
6000: None, # button_2_4_press
|
|
6003: Light.RELEASE, # button_2_4_release_after_hold
|
|
}
|
|
|
|
|
|
class HueSmartButtonLightController(LightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"on": Light.TOGGLE,
|
|
"off": Light.TOGGLE,
|
|
"hold": Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
"release": Light.RELEASE,
|
|
}
|
|
|
|
def get_deconz_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
1000: None, # Initial press
|
|
1001: Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
1002: Light.TOGGLE,
|
|
1003: Light.RELEASE,
|
|
}
|
|
|
|
|
|
class HueSmartButtonZ2MLightController(Z2MLightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"on": Z2MLight.TOGGLE,
|
|
"off": Z2MLight.TOGGLE,
|
|
"hold": Z2MLight.HOLD_BRIGHTNESS_TOGGLE,
|
|
"release": Z2MLight.RELEASE,
|
|
}
|
|
|
|
|
|
class Philips929003017102LightController(LightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
# "left_press": Light.TOGGLE,
|
|
"left_press_release": Light.TOGGLE,
|
|
"left_hold": Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
"left_hold_release": Light.RELEASE,
|
|
# "right_press": Light.TOGGLE,
|
|
"right_press_release": Light.TOGGLE,
|
|
"right_hold": Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
"right_hold_release": Light.RELEASE,
|
|
}
|
|
|
|
def get_deconz_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
1000: None, # Initial press
|
|
1001: Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
1002: Light.TOGGLE,
|
|
1003: Light.RELEASE,
|
|
2000: None, # Initial press
|
|
2001: Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
2002: Light.TOGGLE,
|
|
2003: Light.RELEASE,
|
|
}
|
|
|
|
def get_zha_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
# "left_press": Light.TOGGLE,
|
|
"left_press_release": Light.TOGGLE,
|
|
"left_hold": Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
"left_hold_release": Light.RELEASE,
|
|
# "right_press": Light.TOGGLE,
|
|
"right_short_release": Light.TOGGLE,
|
|
"right_hold": Light.HOLD_BRIGHTNESS_TOGGLE,
|
|
"right_long_release": Light.RELEASE,
|
|
}
|
|
|
|
def get_zha_action(self, data: EventData) -> str:
|
|
command: str = data["command"]
|
|
return command
|
|
|
|
|
|
class Philips929003017102Z2MLightController(Z2MLightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
# "left_press": Z2MLight.TOGGLE,
|
|
"left_press_release": Z2MLight.TOGGLE,
|
|
"left_hold": Z2MLight.HOLD_BRIGHTNESS_TOGGLE,
|
|
"left_hold_release": Z2MLight.RELEASE,
|
|
# "right_press": Z2MLight.TOGGLE,
|
|
"right_press_release": Z2MLight.TOGGLE,
|
|
"right_hold": Z2MLight.HOLD_BRIGHTNESS_TOGGLE,
|
|
"right_hold_release": Z2MLight.RELEASE,
|
|
}
|
|
|
|
|
|
class PhilipsRDM002LightController(LightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"button_1_press_release": Light.OFF,
|
|
"button_1_hold": Light.HOLD_BRIGHTNESS_DOWN,
|
|
"button_1_hold_release": Light.RELEASE,
|
|
"button_2_press_release": Light.ON,
|
|
"button_2_hold": Light.HOLD_BRIGHTNESS_UP,
|
|
"button_2_hold_release": Light.RELEASE,
|
|
"button_3_press_release": Light.CLICK_COLOR_DOWN,
|
|
"button_3_hold": Light.HOLD_COLOR_DOWN,
|
|
"button_3_hold_release": Light.RELEASE,
|
|
"button_4_press_release": Light.CLICK_COLOR_UP,
|
|
"button_4_hold": Light.HOLD_COLOR_UP,
|
|
"button_4_hold_release": Light.RELEASE,
|
|
"dial_rotate_left_step": Light.CLICK_BRIGHTNESS_DOWN,
|
|
"dial_rotate_left_slow": Light.ON_MIN_COLOR_TEMP,
|
|
"dial_rotate_left_fast": Light.ON_MIN_BRIGHTNESS,
|
|
"dial_rotate_right_step": Light.CLICK_BRIGHTNESS_UP,
|
|
"dial_rotate_right_slow": Light.ON_FULL_COLOR_TEMP,
|
|
"dial_rotate_right_fast": Light.ON_FULL_BRIGHTNESS,
|
|
}
|
|
|
|
|
|
class PhilipsRDM002Z2MLightController(Z2MLightController):
|
|
def get_z2m_actions_mapping(self) -> DefaultActionsMapping:
|
|
return {
|
|
"button_1_press_release": Z2MLight.OFF,
|
|
"button_1_hold": Z2MLight.HOLD_BRIGHTNESS_DOWN,
|
|
"button_1_hold_release": Z2MLight.RELEASE,
|
|
"button_2_press_release": Z2MLight.ON,
|
|
"button_2_hold": Z2MLight.HOLD_BRIGHTNESS_UP,
|
|
"button_2_hold_release": Z2MLight.RELEASE,
|
|
"button_3_press_release": Z2MLight.CLICK_COLOR_TEMP_DOWN,
|
|
"button_3_hold": Z2MLight.HOLD_COLOR_TEMP_DOWN,
|
|
"button_3_hold_release": Z2MLight.RELEASE,
|
|
"button_4_press_release": Z2MLight.CLICK_COLOR_TEMP_UP,
|
|
"button_4_hold": Z2MLight.HOLD_COLOR_TEMP_UP,
|
|
"button_4_hold_release": Z2MLight.RELEASE,
|
|
"dial_rotate_left_step": Z2MLight.CLICK_BRIGHTNESS_DOWN,
|
|
"dial_rotate_left_slow": Z2MLight.ON_MIN_COLOR_TEMP,
|
|
"dial_rotate_left_fast": Z2MLight.ON_MIN_BRIGHTNESS,
|
|
"dial_rotate_right_step": Light.CLICK_BRIGHTNESS_UP,
|
|
"dial_rotate_right_slow": Z2MLight.ON_FULL_COLOR_TEMP,
|
|
"dial_rotate_right_fast": Z2MLight.ON_FULL_BRIGHTNESS,
|
|
}
|