Compare commits
12 Commits
0.11.5
...
0.12.4-cha
| Author | SHA1 | Date | |
|---|---|---|---|
|
eb5532739c
|
|||
|
42411b1377
|
|||
|
b99158fd25
|
|||
|
d86e7eecc9
|
|||
|
8ab9db796c
|
|||
|
a2ddcf7de2
|
|||
|
3cc3683e8c
|
|||
|
e0810c72ea
|
|||
|
3c1253da08
|
|||
|
0efb6fab02
|
|||
|
a48d189f85
|
|||
|
40c3faa128
|
@@ -20,6 +20,7 @@ from apps.abstraction.vendors import (
|
|||||||
hottis_pv_modbus,
|
hottis_pv_modbus,
|
||||||
hottis_wago_modbus,
|
hottis_wago_modbus,
|
||||||
hottis_wifi_relay,
|
hottis_wifi_relay,
|
||||||
|
hottis_led_stripe
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -44,6 +45,7 @@ for vendor_name, vendor_module in [
|
|||||||
("hottis_pv_modbus", hottis_pv_modbus),
|
("hottis_pv_modbus", hottis_pv_modbus),
|
||||||
("hottis_wago_modbus", hottis_wago_modbus),
|
("hottis_wago_modbus", hottis_wago_modbus),
|
||||||
("hottis_wifi_relay", hottis_wifi_relay),
|
("hottis_wifi_relay", hottis_wifi_relay),
|
||||||
|
("hottis_led_stripe", hottis_led_stripe),
|
||||||
]:
|
]:
|
||||||
for (device_type, direction), handler in vendor_module.HANDLERS.items():
|
for (device_type, direction), handler in vendor_module.HANDLERS.items():
|
||||||
key = (device_type, vendor_name, direction)
|
key = (device_type, vendor_name, direction)
|
||||||
|
|||||||
46
apps/abstraction/vendors/hottis_led_stripe.py
vendored
Normal file
46
apps/abstraction/vendors/hottis_led_stripe.py
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"""Hottis LED Stripe vendor transformations."""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def transform_light_to_vendor(payload: dict[str, Any]) -> str:
|
||||||
|
"""Transform abstract relay payload to Hottis LED Stripe format.
|
||||||
|
|
||||||
|
Hottis LED Stripe expects plain text 'on' or 'off' (not JSON).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
- Abstract: {'power': 'on'}
|
||||||
|
- Hottis LED Stripe: 'ON'
|
||||||
|
"""
|
||||||
|
|
||||||
|
bri = 89.0 / 254.0
|
||||||
|
r = int(255 * bri)
|
||||||
|
g = int(103 * bri)
|
||||||
|
b = int(25 * bri)
|
||||||
|
|
||||||
|
cmd = f"{r} {g} {b}" if payload.get("power", "off").lower() == "on" else "0 0 0"
|
||||||
|
return cmd
|
||||||
|
|
||||||
|
|
||||||
|
def transform_light_to_abstract(payload: str) -> dict[str, Any]:
|
||||||
|
"""Transform Hottis LED Stripe relay payload to abstract format.
|
||||||
|
|
||||||
|
Hottis LED Stripe sends plain text 'on' or 'off'.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
- Hottis LED Stripe: 'ON'
|
||||||
|
- Abstract: {'power': 'on'}
|
||||||
|
"""
|
||||||
|
|
||||||
|
power = "on" if payload.strip() != "0 0 0" else "off"
|
||||||
|
return {"power": power}
|
||||||
|
|
||||||
|
|
||||||
|
# Registry of handlers for this vendor
|
||||||
|
HANDLERS = {
|
||||||
|
("light", "to_vendor"): transform_light_to_vendor,
|
||||||
|
("light", "to_abstract"): transform_light_to_abstract,
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ FROM python:3.12-slim
|
|||||||
|
|
||||||
# Environment defaults (can be overridden at runtime)
|
# Environment defaults (can be overridden at runtime)
|
||||||
ENV PYTHONUNBUFFERED=1 \
|
ENV PYTHONUNBUFFERED=1 \
|
||||||
|
LOG_LEVEL="INFO" \
|
||||||
HOMEKIT_NAME="Home Automation Bridge" \
|
HOMEKIT_NAME="Home Automation Bridge" \
|
||||||
HOMEKIT_PIN="031-45-154" \
|
HOMEKIT_PIN="031-45-154" \
|
||||||
HOMEKIT_PORT="51826" \
|
HOMEKIT_PORT="51826" \
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
services:
|
services:
|
||||||
homekit-bridge:
|
homekit-bridge:
|
||||||
image: gitea.hottis.de/wn/home-automation/homekit:0.5.0
|
image: gitea.hottis.de/wn/home-automation/homekit:0.5.0
|
||||||
|
build:
|
||||||
|
context: ../../
|
||||||
|
dockerfile: apps/homekit/Dockerfile
|
||||||
container_name: homekit-bridge
|
container_name: homekit-bridge
|
||||||
|
|
||||||
# Required for mDNS/Bonjour to work properly
|
# Required for mDNS/Bonjour to work properly
|
||||||
network_mode: host
|
network_mode: host
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
- LOG_LEVEL=INFO
|
||||||
- HOMEKIT_NAME=Hottis Home Automation Bridge
|
- HOMEKIT_NAME=Hottis Home Automation Bridge
|
||||||
- HOMEKIT_PIN=031-45-154
|
- HOMEKIT_PIN=031-45-154
|
||||||
- HOMEKIT_PORT=51826
|
- HOMEKIT_PORT=51826
|
||||||
|
|||||||
@@ -31,8 +31,9 @@ from .api_client import ApiClient
|
|||||||
from .device_registry import DeviceRegistry
|
from .device_registry import DeviceRegistry
|
||||||
|
|
||||||
# Configure logging
|
# Configure logging
|
||||||
|
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper()
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=getattr(logging, LOG_LEVEL, logging.INFO),
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|||||||
@@ -1042,3 +1042,39 @@ devices:
|
|||||||
topics:
|
topics:
|
||||||
state: "zigbee2mqtt/herdlicht"
|
state: "zigbee2mqtt/herdlicht"
|
||||||
set: "zigbee2mqtt/herdlicht/set"
|
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"
|
||||||
|
|
||||||
|
- device_id: regallicht_flur
|
||||||
|
homekit_aid: 84
|
||||||
|
name: Regallicht Flur
|
||||||
|
type: relay
|
||||||
|
cap_version: "relay@1.0.0"
|
||||||
|
technology: hottis_wifi_relay
|
||||||
|
features:
|
||||||
|
power: true
|
||||||
|
topics:
|
||||||
|
set: "deconzhelper/flurregallist"
|
||||||
|
state: "deconzhelper/flurregallist"
|
||||||
|
|
||||||
|
- device_id: steckdose_strandkorb
|
||||||
|
homekit_aid: 85
|
||||||
|
name: Steckdose Strandkorb
|
||||||
|
type: relay
|
||||||
|
cap_version: "relay@1.0.0"
|
||||||
|
technology: hottis_wago_modbus
|
||||||
|
features:
|
||||||
|
power: true
|
||||||
|
topics:
|
||||||
|
set: "dt1/coil/8"
|
||||||
|
state: "dt1/ci/8"
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
version: 1
|
version: 1
|
||||||
groups:
|
groups:
|
||||||
- id: "kueche_lichter"
|
- id: "kueche_lichter"
|
||||||
name: "Küche – alle Lampen"
|
name: "Küche – alle Lampen ausser Putzlicht"
|
||||||
selector:
|
device_ids:
|
||||||
type: "light"
|
- kueche_deckenlampe
|
||||||
room: "Küche"
|
- licht_spuele_kueche
|
||||||
|
- herdlicht
|
||||||
|
- kueche_fensterbank_licht
|
||||||
|
- regallicht_kueche
|
||||||
capabilities:
|
capabilities:
|
||||||
power: true
|
power: true
|
||||||
brightness: true
|
brightness: true
|
||||||
@@ -16,21 +19,25 @@ groups:
|
|||||||
capabilities:
|
capabilities:
|
||||||
power: true
|
power: true
|
||||||
|
|
||||||
- id: "schlafzimmer_lichter"
|
|
||||||
name: "Schlafzimmer – alle Lampen"
|
|
||||||
selector:
|
|
||||||
type: "light"
|
|
||||||
room: "Schlafzimmer"
|
|
||||||
capabilities:
|
|
||||||
power: true
|
|
||||||
brightness: true
|
|
||||||
|
|
||||||
- id: "schlafzimmer_schlummer_licht"
|
- id: "schlafzimmer_schlummer_licht"
|
||||||
name: "Schlafzimmer – Schlummerlicht"
|
name: "Schlafzimmer – Schlummerlicht"
|
||||||
device_ids:
|
device_ids:
|
||||||
- bettlicht_patty
|
- bettlicht_patty
|
||||||
- bettlicht_wolfgang
|
- bettlicht_wolfgang
|
||||||
- medusalampe_schlafzimmer
|
- medusalampe_schlafzimmer
|
||||||
|
- licht_kommode_schlafzimmer
|
||||||
|
capabilities:
|
||||||
|
power: true
|
||||||
|
brightness: true
|
||||||
|
|
||||||
|
- id: "arbeitslicht_patty"
|
||||||
|
name: "Patty – Arbeitslicht"
|
||||||
|
device_ids:
|
||||||
|
- schranklicht_hinten_patty
|
||||||
|
- schranklicht_vorne_patty
|
||||||
|
- leselampe_patty
|
||||||
|
- kugellampe_patty
|
||||||
|
- licht_schreibtisch_patty
|
||||||
capabilities:
|
capabilities:
|
||||||
power: true
|
power: true
|
||||||
brightness: true
|
brightness: true
|
||||||
|
|||||||
@@ -148,6 +148,10 @@ rooms:
|
|||||||
title: Herdlicht
|
title: Herdlicht
|
||||||
icon: 💡
|
icon: 💡
|
||||||
rank: 145
|
rank: 145
|
||||||
|
- device_id: regallicht_kueche
|
||||||
|
title: Regallicht Küche
|
||||||
|
icon: 💡
|
||||||
|
rank: 146
|
||||||
- device_id: thermostat_kueche
|
- device_id: thermostat_kueche
|
||||||
title: Kueche
|
title: Kueche
|
||||||
icon: 🌡️
|
icon: 🌡️
|
||||||
@@ -261,6 +265,10 @@ rooms:
|
|||||||
title: Schranklicht vor Küche
|
title: Schranklicht vor Küche
|
||||||
icon: 💡
|
icon: 💡
|
||||||
rank: 232
|
rank: 232
|
||||||
|
- device_id: regallicht_flur
|
||||||
|
title: Regallicht Flur
|
||||||
|
icon: 💡
|
||||||
|
rank: 233
|
||||||
- device_id: sensor_flur
|
- device_id: sensor_flur
|
||||||
title: Temperatur & Luftfeuchte
|
title: Temperatur & Luftfeuchte
|
||||||
icon: 🌡️
|
icon: 🌡️
|
||||||
@@ -341,6 +349,10 @@ rooms:
|
|||||||
title: Gartenlicht vorne
|
title: Gartenlicht vorne
|
||||||
icon: 💡
|
icon: 💡
|
||||||
rank: 291
|
rank: 291
|
||||||
|
- device_id: steckdose_strandkorb
|
||||||
|
title: Steckdose Strandkorb
|
||||||
|
icon: 🔌
|
||||||
|
rank: 292
|
||||||
- id: garage
|
- id: garage
|
||||||
name: Garage
|
name: Garage
|
||||||
devices:
|
devices:
|
||||||
|
|||||||
Reference in New Issue
Block a user