diff --git a/apps/abstraction/transformation.py b/apps/abstraction/transformation.py index efb31ba..dd220e2 100644 --- a/apps/abstraction/transformation.py +++ b/apps/abstraction/transformation.py @@ -20,6 +20,7 @@ from apps.abstraction.vendors import ( hottis_pv_modbus, hottis_wago_modbus, hottis_wifi_relay, + hottis_led_stripe ) logger = logging.getLogger(__name__) @@ -44,6 +45,7 @@ for vendor_name, vendor_module in [ ("hottis_pv_modbus", hottis_pv_modbus), ("hottis_wago_modbus", hottis_wago_modbus), ("hottis_wifi_relay", hottis_wifi_relay), + ("hottis_led_stripe", hottis_led_stripe), ]: for (device_type, direction), handler in vendor_module.HANDLERS.items(): key = (device_type, vendor_name, direction) diff --git a/apps/abstraction/vendors/hottis_led_stripe.py b/apps/abstraction/vendors/hottis_led_stripe.py new file mode 100644 index 0000000..bdabd0a --- /dev/null +++ b/apps/abstraction/vendors/hottis_led_stripe.py @@ -0,0 +1,38 @@ +"""Hottis WiFi Relay vendor transformations.""" + +import logging +from typing import Any + +logger = logging.getLogger(__name__) + + +def transform_relay_to_vendor(payload: dict[str, Any]) -> str: + """Transform abstract relay payload to Hottis WiFi Relay format. + + Hottis WiFi Relay expects plain text 'on' or 'off' (not JSON). + + Example: + - Abstract: {'power': 'on'} + - Hottis WiFi Relay: 'ON' + """ + power = payload.get("power", "off").upper() + return power + + +def transform_relay_to_abstract(payload: str) -> dict[str, Any]: + """Transform Hottis WiFi Relay relay payload to abstract format. + + Hottis WiFi Relay sends plain text 'on' or 'off'. + + Example: + - Hottis WiFi Relay: 'ON' + - Abstract: {'power': 'on'} + """ + return {"power": payload.strip().lower()} + + +# Registry of handlers for this vendor +HANDLERS = { + ("relay", "to_vendor"): transform_relay_to_vendor, + ("relay", "to_abstract"): transform_relay_to_abstract, +} diff --git a/config/devices.yaml b/config/devices.yaml index 8016fcf..7d95393 100644 --- a/config/devices.yaml +++ b/config/devices.yaml @@ -1041,4 +1041,16 @@ devices: brightness: true topics: state: "zigbee2mqtt/herdlicht" - set: "zigbee2mqtt/herdlicht/set" \ No newline at end of file + set: "zigbee2mqtt/herdlicht/set" + +- device_id: regallicht_kueche + homekit_aid: 83 + name: Regallicht + type: light + cap_version: "relay@1.0.0" + technology: hottis_led_stripe + features: + power: true + topics: + state: "IoT/RgbLedStripeKitchen/ColorCommand" + set: "IoT/RgbLedStripeKitchen/ColorCommand" \ No newline at end of file diff --git a/config/groups.yaml b/config/groups.yaml index 3b4d211..7cdf7a6 100644 --- a/config/groups.yaml +++ b/config/groups.yaml @@ -7,6 +7,7 @@ groups: - licht_spuele_kueche - herdlicht - kueche_fensterbank_licht + - regallicht_kueche capabilities: power: true brightness: true diff --git a/config/layout.yaml b/config/layout.yaml index 1649514..52c6f1b 100644 --- a/config/layout.yaml +++ b/config/layout.yaml @@ -148,6 +148,10 @@ rooms: title: Herdlicht icon: 💡 rank: 145 + - device_id: regallicht_kueche + title: Regallicht Küche + icon: 💡 + rank: 146 - device_id: thermostat_kueche title: Kueche icon: 🌡️