Compare commits

...

13 Commits

Author SHA1 Message Date
35141f71a4 steckdose strandkorb 2
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-15 12:11:48 +01:00
eb5532739c steckdose strandkorb
All checks were successful
ci/woodpecker/tag/build/7 Pipeline was successful
ci/woodpecker/tag/deploy/4 Pipeline was successful
ci/woodpecker/tag/deploy/6 Pipeline was successful
ci/woodpecker/tag/ingress Pipeline was successful
ci/woodpecker/tag/deploy/3 Pipeline was successful
ci/woodpecker/tag/deploy/1 Pipeline was successful
ci/woodpecker/tag/deploy/2 Pipeline was successful
ci/woodpecker/tag/deploy/5 Pipeline was successful
ci/woodpecker/tag/build/5 Pipeline was successful
ci/woodpecker/tag/build/6 Pipeline was successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/build/1 Pipeline was successful
ci/woodpecker/tag/build/4 Pipeline was successful
ci/woodpecker/tag/build/3 Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
ci/woodpecker/tag/build/2 Pipeline was successful
2025-12-15 11:52:57 +01:00
42411b1377 regallicht flur 3
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 22:17:44 +01:00
b99158fd25 regallicht flur 2
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 22:14:59 +01:00
d86e7eecc9 regallicht flur
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 22:13:48 +01:00
8ab9db796c regallicht kueche 2
All checks were successful
ci/woodpecker/tag/build/5 Pipeline was successful
ci/woodpecker/tag/build/6 Pipeline was successful
ci/woodpecker/tag/build/1 Pipeline was successful
ci/woodpecker/tag/build/4 Pipeline was successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/build/2 Pipeline was successful
ci/woodpecker/tag/build/3 Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
ci/woodpecker/tag/build/7 Pipeline was successful
ci/woodpecker/tag/deploy/2 Pipeline was successful
ci/woodpecker/tag/deploy/3 Pipeline was successful
ci/woodpecker/tag/deploy/5 Pipeline was successful
ci/woodpecker/tag/deploy/4 Pipeline was successful
ci/woodpecker/tag/deploy/6 Pipeline was successful
ci/woodpecker/tag/deploy/1 Pipeline was successful
ci/woodpecker/tag/ingress Pipeline was successful
2025-12-12 22:08:06 +01:00
a2ddcf7de2 regallicht kueche
All checks were successful
ci/woodpecker/tag/build/5 Pipeline was successful
ci/woodpecker/tag/build/6 Pipeline was successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/build/4 Pipeline was successful
ci/woodpecker/tag/build/1 Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
ci/woodpecker/tag/build/7 Pipeline was successful
ci/woodpecker/tag/build/3 Pipeline was successful
ci/woodpecker/tag/build/2 Pipeline was successful
ci/woodpecker/tag/deploy/3 Pipeline was successful
ci/woodpecker/tag/deploy/4 Pipeline was successful
ci/woodpecker/tag/deploy/1 Pipeline was successful
ci/woodpecker/tag/deploy/2 Pipeline was successful
ci/woodpecker/tag/deploy/6 Pipeline was successful
ci/woodpecker/tag/deploy/5 Pipeline was successful
ci/woodpecker/tag/ingress Pipeline was successful
2025-12-12 22:01:29 +01:00
3cc3683e8c group
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 20:53:18 +01:00
e0810c72ea group
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 20:50:11 +01:00
3c1253da08 group
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 20:40:02 +01:00
0efb6fab02 group
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 20:30:50 +01:00
a48d189f85 group
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-12 20:14:20 +01:00
40c3faa128 loglevel
All checks were successful
ci/woodpecker/tag/build/5 Pipeline was successful
ci/woodpecker/tag/build/6 Pipeline was successful
ci/woodpecker/tag/build/1 Pipeline was successful
ci/woodpecker/tag/build/4 Pipeline was successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/build/3 Pipeline was successful
ci/woodpecker/tag/build/7 Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
ci/woodpecker/tag/build/2 Pipeline was successful
ci/woodpecker/tag/deploy/1 Pipeline was successful
ci/woodpecker/tag/deploy/2 Pipeline was successful
ci/woodpecker/tag/deploy/5 Pipeline was successful
ci/woodpecker/tag/deploy/3 Pipeline was successful
ci/woodpecker/tag/deploy/6 Pipeline was successful
ci/woodpecker/tag/deploy/4 Pipeline was successful
ci/woodpecker/tag/ingress Pipeline was successful
2025-12-11 13:53:00 +01:00
8 changed files with 262 additions and 15 deletions

View File

@@ -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)

View 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,
}

View File

@@ -2,6 +2,7 @@ FROM python:3.12-slim
# Environment defaults (can be overridden at runtime)
ENV PYTHONUNBUFFERED=1 \
LOG_LEVEL="INFO" \
HOMEKIT_NAME="Home Automation Bridge" \
HOMEKIT_PIN="031-45-154" \
HOMEKIT_PORT="51826" \

View File

@@ -1,12 +1,16 @@
services:
homekit-bridge:
image: gitea.hottis.de/wn/home-automation/homekit:0.5.0
build:
context: ../../
dockerfile: apps/homekit/Dockerfile
container_name: homekit-bridge
# Required for mDNS/Bonjour to work properly
network_mode: host
environment:
- LOG_LEVEL=INFO
- HOMEKIT_NAME=Hottis Home Automation Bridge
- HOMEKIT_PIN=031-45-154
- HOMEKIT_PORT=51826

View File

@@ -31,8 +31,9 @@ from .api_client import ApiClient
from .device_registry import DeviceRegistry
# Configure logging
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper()
logging.basicConfig(
level=logging.INFO,
level=getattr(logging, LOG_LEVEL, logging.INFO),
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

View File

@@ -1041,4 +1041,139 @@ devices:
brightness: true
topics:
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"
- device_id: steckdose_vor_waschkueche
homekit_aid: 86
name: Steckdose vor Waschküche
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/9"
state: "dt1/ci/9"
- device_id: wasser_vorne
homekit_aid: 87
name: Wasser Vorgarten
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/13"
state: "dt1/ci/13"
- device_id: wasser_hinten
homekit_aid: 88
name: Wasser Garten
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/12"
state: "dt1/ci/12"
- device_id: lampe_haustuer
homekit_aid: 89
name: Lampe Haustür
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/3"
state: "dt1/ci/3"
- device_id: power_relay_oven
homekit_aid: 90
name: Schütz Herd
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/1"
state: "dt1/di/1"
- device_id: power_relay_kitchen
homekit_aid: 91
name: Schütz Küche
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/0"
state: "dt1/di/0"
- device_id: power_relay_laundry
homekit_aid: 92
name: Schütz Waschküche
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/2"
state: "dt1/di/2"
- device_id: spot_garden
homekit_aid: 93
name: Spot Garten
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/6"
state: "dt1/ci/6"
- device_id: licht_schuppen
homekit_aid: 94
name: Licht Schuppen
type: relay
cap_version: "relay@1.0.0"
technology: hottis_wago_modbus
features:
power: true
topics:
set: "dt1/coil/18"
state: "dt1/di/18"

View File

@@ -1,10 +1,13 @@
version: 1
groups:
- id: "kueche_lichter"
name: "Küche alle Lampen"
selector:
type: "light"
room: "Küche"
name: "Küche alle Lampen ausser Putzlicht"
device_ids:
- kueche_deckenlampe
- licht_spuele_kueche
- herdlicht
- kueche_fensterbank_licht
- regallicht_kueche
capabilities:
power: true
brightness: true
@@ -16,21 +19,25 @@ groups:
capabilities:
power: true
- id: "schlafzimmer_lichter"
name: "Schlafzimmer alle Lampen"
selector:
type: "light"
room: "Schlafzimmer"
capabilities:
power: true
brightness: true
- id: "schlafzimmer_schlummer_licht"
name: "Schlafzimmer Schlummerlicht"
device_ids:
- bettlicht_patty
- bettlicht_wolfgang
- 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:
power: true
brightness: true

View File

@@ -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: 🌡️
@@ -261,6 +265,14 @@ rooms:
title: Schranklicht vor Küche
icon: 💡
rank: 232
- device_id: regallicht_flur
title: Regallicht Flur
icon: 💡
rank: 233
- device_id: lampe_haustuer
title: Lampe Haustür
icon: 💡
rank: 234
- device_id: sensor_flur
title: Temperatur & Luftfeuchte
icon: 🌡️
@@ -341,6 +353,30 @@ rooms:
title: Gartenlicht vorne
icon: 💡
rank: 291
- device_id: spot_garden
title: Spot Garten
icon: 💡
rank: 292
- device_id: licht_schuppen
title: Licht Schuppen
icon: 💡
rank: 293
- device_id: steckdose_strandkorb
title: Steckdose Strandkorb
icon: 🔌
rank: 294
- device_id: steckdose_vor_waschkueche
title: Steckdose vor Waschküche
icon: 🔌
rank: 295
- device_id: wasser_vorne
title: Wasser Vorgarten
icon: 💧
rank: 296
- device_id: wasser_hinten
title: Wasser Garten
icon: 💧
rank: 297
- id: garage
name: Garage
devices:
@@ -367,6 +403,21 @@ rooms:
title: Werkstatt Licht
icon: 💡
rank: 350
- id: devices
name: Devices
devices:
- device_id: power_relay_oven
title: Schütz Herd
icon:
rank: 400
- device_id: power_relay_kitchen
title: Schütz Küche
icon:
rank: 405
- device_id: power_relay_laundry
title: Schütz Waschküche
icon:
rank: 410