Compare commits

...

19 Commits

Author SHA1 Message Date
79081e7480 thermostat bad unten replaced 2 2026-01-06 13:48:29 +01:00
424f1d6743 thermostat bad unten replaced 2026-01-06 13:47:56 +01:00
7212a3bd5a Lampentausch
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2026-01-03 20:52:10 +01:00
7e0801d21a event_generator fix
All checks were successful
ci/woodpecker/tag/build/5 Pipeline was successful
ci/woodpecker/tag/build/6 Pipeline was successful
ci/woodpecker/tag/build/4 Pipeline was successful
ci/woodpecker/tag/namespace 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/4 Pipeline was successful
ci/woodpecker/tag/deploy/3 Pipeline was successful
ci/woodpecker/tag/deploy/5 Pipeline was successful
ci/woodpecker/tag/deploy/1 Pipeline was successful
ci/woodpecker/tag/deploy/6 Pipeline was successful
ci/woodpecker/tag/deploy/2 Pipeline was successful
ci/woodpecker/tag/ingress Pipeline was successful
2025-12-25 19:48:07 +01:00
49e555ce51 redis_state_listener fix 2025-12-25 19:36:19 +01:00
62f68fb513 Merge branch 'main' of gitea.hottis.de:wn/home-automation
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-22 19:18:32 +01:00
66f180755b heating rules 2025-12-22 19:18:23 +01:00
b9ba9cbd16 herdlicht again 2
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-18 19:04:26 +01:00
14c4c7c850 herdlicht again 2
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-18 19:01:33 +01:00
edb8b3313b herdlicht again
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-18 18:57:42 +01:00
68015905b0 herdlicht 2
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-17 16:22:11 +01:00
223c6e58b9 herdlicht
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-17 16:18:42 +01:00
0548996110 steckdose strandkorb 3
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-15 12:15:38 +01:00
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
6 changed files with 322 additions and 147 deletions

View File

@@ -1,5 +1,8 @@
when: when:
event: [tag] event: [tag]
ref:
exclude:
- refs/tags/*-configchange
steps: steps:
create_namespace: create_namespace:

View File

@@ -1,4 +1,4 @@
"""Hottis WiFi Relay vendor transformations.""" """Hottis LED Stripe vendor transformations."""
import logging import logging
from typing import Any from typing import Any
@@ -6,33 +6,41 @@ from typing import Any
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def transform_relay_to_vendor(payload: dict[str, Any]) -> str: def transform_light_to_vendor(payload: dict[str, Any]) -> str:
"""Transform abstract relay payload to Hottis WiFi Relay format. """Transform abstract relay payload to Hottis LED Stripe format.
Hottis WiFi Relay expects plain text 'on' or 'off' (not JSON). Hottis LED Stripe expects plain text 'on' or 'off' (not JSON).
Example: Example:
- Abstract: {'power': 'on'} - Abstract: {'power': 'on'}
- Hottis WiFi Relay: 'ON' - Hottis LED Stripe: 'ON'
""" """
power = payload.get("power", "off").upper()
return power 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_relay_to_abstract(payload: str) -> dict[str, Any]: def transform_light_to_abstract(payload: str) -> dict[str, Any]:
"""Transform Hottis WiFi Relay relay payload to abstract format. """Transform Hottis LED Stripe relay payload to abstract format.
Hottis WiFi Relay sends plain text 'on' or 'off'. Hottis LED Stripe sends plain text 'on' or 'off'.
Example: Example:
- Hottis WiFi Relay: 'ON' - Hottis LED Stripe: 'ON'
- Abstract: {'power': 'on'} - Abstract: {'power': 'on'}
""" """
return {"power": payload.strip().lower()}
power = "on" if payload.strip() != "0 0 0" else "off"
return {"power": power}
# Registry of handlers for this vendor # Registry of handlers for this vendor
HANDLERS = { HANDLERS = {
("relay", "to_vendor"): transform_relay_to_vendor, ("light", "to_vendor"): transform_light_to_vendor,
("relay", "to_abstract"): transform_relay_to_abstract, ("light", "to_abstract"): transform_light_to_abstract,
} }

View File

@@ -127,14 +127,9 @@ async def redis_state_listener():
logger.info("Redis state listener connected") logger.info("Redis state listener connected")
while True: # listen() blocks async and waits for messages - prevents busy loop
try: async for message in pubsub.listen():
message = await asyncio.wait_for( if message["type"] == "message":
pubsub.get_message(ignore_subscribe_messages=True),
timeout=1.0
)
if message and message["type"] == "message":
data = message["data"] data = message["data"]
try: try:
state_data = json.loads(data) state_data = json.loads(data)
@@ -146,9 +141,6 @@ async def redis_state_listener():
except Exception as e: except Exception as e:
logger.warning(f"Failed to parse state data: {e}") logger.warning(f"Failed to parse state data: {e}")
except asyncio.TimeoutError:
pass # No message, continue
except asyncio.CancelledError: except asyncio.CancelledError:
logger.info("Redis state listener cancelled") logger.info("Redis state listener cancelled")
raise raise
@@ -567,25 +559,31 @@ async def event_generator(request: Request) -> AsyncGenerator[str, None]:
redis_client = None redis_client = None
pubsub = None pubsub = None
# Heartbeat tracking
last_heartbeat = asyncio.get_event_loop().time()
heartbeat_interval = 15 # Safari-friendly: shorter interval heartbeat_interval = 15 # Safari-friendly: shorter interval
# Use listen() iterator for blocking reads with heartbeat timeout
if pubsub:
listener = pubsub.listen()
else:
listener = None
while True: while True:
# Check if client disconnected # Check if client disconnected
if await request.is_disconnected(): if await request.is_disconnected():
logger.info("SSE client disconnected") logger.info("SSE client disconnected")
break break
# Try to get message from Redis (if available) # Try to get message from Redis with timeout for heartbeat
if pubsub: if listener:
try: try:
# Wait for message with heartbeat timeout
# If no message arrives within timeout, send heartbeat
message = await asyncio.wait_for( message = await asyncio.wait_for(
pubsub.get_message(ignore_subscribe_messages=True), anext(listener),
timeout=0.1 timeout=heartbeat_interval
) )
if message and message["type"] == "message": if message["type"] == "message":
data = message["data"] data = message["data"]
logger.debug(f"Sending SSE message: {data[:100]}...") logger.debug(f"Sending SSE message: {data[:100]}...")
@@ -598,24 +596,21 @@ async def event_generator(request: Request) -> AsyncGenerator[str, None]:
logger.warning(f"Failed to parse state data for cache: {e}") logger.warning(f"Failed to parse state data for cache: {e}")
yield f"event: message\ndata: {data}\n\n" yield f"event: message\ndata: {data}\n\n"
last_heartbeat = asyncio.get_event_loop().time()
continue # Skip sleep, check for more messages immediately
except asyncio.TimeoutError: except asyncio.TimeoutError:
pass # No message, continue to heartbeat check # No message within heartbeat interval - send heartbeat
yield ": ping\n\n"
except StopAsyncIteration:
logger.warning("Redis listener stopped")
break
except Exception as e: except Exception as e:
logger.error(f"Redis error: {e}") logger.error(f"Redis error: {e}")
# Continue with heartbeats even if Redis fails # Continue with heartbeat-only mode
listener = None
# Sleep briefly to avoid busy loop else:
await asyncio.sleep(0.1) # Heartbeat-only mode (no Redis)
await asyncio.sleep(heartbeat_interval)
# Send heartbeat if interval elapsed
current_time = asyncio.get_event_loop().time()
if current_time - last_heartbeat >= heartbeat_interval:
# Comment-style ping (Safari-compatible, no event type)
yield ": ping\n\n" yield ": ping\n\n"
last_heartbeat = current_time
except asyncio.CancelledError: except asyncio.CancelledError:
logger.info("SSE connection cancelled by client") logger.info("SSE connection cancelled by client")

View File

@@ -326,41 +326,6 @@ devices:
ieee_address: "0xf0d1b8be2409f569" ieee_address: "0xf0d1b8be2409f569"
model: "4058075729063" model: "4058075729063"
vendor: "LEDVANCE" vendor: "LEDVANCE"
- device_id: licht_flur_oben_am_spiegel
homekit_aid: 22
name: Spiegel
type: light
cap_version: "light@1.2.0"
technology: zigbee2mqtt
features:
power: true
brightness: true
color_temperature: true
topics:
state: "zigbee2mqtt/0x842e14fffefe4ba4"
set: "zigbee2mqtt/0x842e14fffefe4ba4/set"
metadata:
friendly_name: "Licht Flur oben am Spiegel"
ieee_address: "0x842e14fffefe4ba4"
model: "LED1732G11"
vendor: "IKEA"
- device_id: experimentlabtest
homekit_aid: 23
name: Test Lampe
type: light
cap_version: "light@1.2.0"
technology: zigbee2mqtt
features:
power: true
brightness: true
topics:
state: "zigbee2mqtt/0xf0d1b80000195038"
set: "zigbee2mqtt/0xf0d1b80000195038/set"
metadata:
friendly_name: "ExperimentLabTest"
ieee_address: "0xf0d1b80000195038"
model: "4058075208421"
vendor: "LEDVANCE"
- device_id: thermostat_wolfgang - device_id: thermostat_wolfgang
homekit_aid: 24 homekit_aid: 24
name: Heizung name: Heizung
@@ -501,26 +466,6 @@ devices:
model: "MAX! Thermostat" model: "MAX! Thermostat"
peer_id: "41" peer_id: "41"
channel: "1" channel: "1"
- device_id: thermostat_bad_unten
homekit_aid: 31
name: Heizung
type: thermostat
cap_version: "thermostat@1.0.0"
technology: max
features:
mode: true
target: true
current: false
topics:
set: "homegear/instance1/set/48/1/SET_TEMPERATURE"
state: "homegear/instance1/plain/48/1/SET_TEMPERATURE"
metadata:
friendly_name: "Thermostat Bad Unten"
location: "Bad Unten"
vendor: "eQ-3"
model: "MAX! Thermostat"
peer_id: "48"
channel: "1"
- device_id: sterne_wohnzimmer - device_id: sterne_wohnzimmer
homekit_aid: 32 homekit_aid: 32
name: Sterne name: Sterne
@@ -843,17 +788,6 @@ devices:
topics: topics:
state: "zigbee2mqtt/0xf0d1b8000017515d" state: "zigbee2mqtt/0xf0d1b8000017515d"
set: "zigbee2mqtt/0xf0d1b8000017515d/set" set: "zigbee2mqtt/0xf0d1b8000017515d/set"
- device_id: licht_kommode_schlafzimmer
homekit_aid: 65
name: Kommode Schlafzimmer
type: relay
cap_version: "relay@1.0.0"
technology: tasmota
features:
power: true
topics:
set: "cmnd/tasmota/04/POWER"
state: "stat/tasmota/04/POWER"
- device_id: licht_fensterbank_esszimmer - device_id: licht_fensterbank_esszimmer
homekit_aid: 66 homekit_aid: 66
name: Fensterbank Esszimmer name: Fensterbank Esszimmer
@@ -1034,14 +968,14 @@ devices:
homekit_aid: 82 homekit_aid: 82
name: Herdlicht name: Herdlicht
type: light type: light
cap_version: "relay@1.0.0" cap_version: "light@1.2.0"
technology: zigbee2mqtt technology: zigbee2mqtt
features: features:
power: true power: true
brightness: true brightness: true
topics: topics:
state: "zigbee2mqtt/herdlicht" state: "zigbee2mqtt/0x64028ffffe50e79e"
set: "zigbee2mqtt/herdlicht/set" set: "zigbee2mqtt/0x64028ffffe50e79e/set"
- device_id: regallicht_kueche - device_id: regallicht_kueche
homekit_aid: 83 homekit_aid: 83
@@ -1054,3 +988,168 @@ devices:
topics: topics:
state: "IoT/RgbLedStripeKitchen/ColorCommand" state: "IoT/RgbLedStripeKitchen/ColorCommand"
set: "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: "pulsegen/command/5/18"
state: "pulsegen/status/5"
- device_id: licht_flur_oben_am_spiegel
homekit_aid: 95
name: Spiegel
type: light
cap_version: "light@1.2.0"
technology: zigbee2mqtt
features:
power: true
brightness: true
topics:
state: "zigbee2mqtt/0xf0d1b80000195038"
set: "zigbee2mqtt/0xf0d1b80000195038/set"
- device_id: licht_kommode_schlafzimmer
homekit_aid: 96
name: Kommode Schlafzimmer
type: light
cap_version: "light@1.2.0"
technology: zigbee2mqtt
features:
power: true
brightness: true
color_temperature: true
topics:
state: "zigbee2mqtt/0x842e14fffefe4ba4"
set: "zigbee2mqtt/0x842e14fffefe4ba4/set"
- device_id: thermostat_bad_unten
homekit_aid: 31
name: Heizung
type: thermostat
cap_version: "thermostat@1.0.0"
technology: zigbee2mqtt
features:
heating: true
temperature_range:
- 5
- 30
temperature_step: 0.5
topics:
state: "zigbee2mqtt/0x003c84fffebdcc28"
set: "zigbee2mqtt/0x003c84fffebdcc28/set"

View File

@@ -265,6 +265,14 @@ 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: lampe_haustuer
title: Lampe Haustür
icon: 💡
rank: 234
- device_id: sensor_flur - device_id: sensor_flur
title: Temperatur & Luftfeuchte title: Temperatur & Luftfeuchte
icon: 🌡️ icon: 🌡️
@@ -345,6 +353,30 @@ rooms:
title: Gartenlicht vorne title: Gartenlicht vorne
icon: 💡 icon: 💡
rank: 291 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 - id: garage
name: Garage name: Garage
devices: devices:
@@ -371,6 +403,21 @@ rooms:
title: Werkstatt Licht title: Werkstatt Licht
icon: 💡 icon: 💡
rank: 350 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

View File

@@ -1,9 +1,19 @@
# Rules Configuration
# Auto-generated from devices.yaml
rules: rules:
- id: window_setback_bad_unten
enabled: true
name: Fensterabsenkung Bad Unten
type: window_setback@1.0
objects:
contacts:
- kontakt_bad_unten_strasse
thermostats:
- thermostat_bad_unten
params:
eco_target: 16.0
open_min_secs: 20
close_min_secs: 20
- id: window_setback_esszimmer - id: window_setback_esszimmer
enabled: false enabled: true
name: Fensterabsenkung Esszimmer name: Fensterabsenkung Esszimmer
type: window_setback@1.0 type: window_setback@1.0
objects: objects:
@@ -17,8 +27,23 @@ rules:
open_min_secs: 20 open_min_secs: 20
close_min_secs: 20 close_min_secs: 20
previous_target_ttl_secs: 86400 previous_target_ttl_secs: 86400
- id: window_setback_wohnzimmer
enabled: true
name: Fensterabsenkung Wohnzimmer
type: window_setback@1.0
objects:
contacts:
- kontakt_wohnzimmer_garten_links
- kontakt_wohnzimmer_garten_rechts
thermostats:
- thermostat_wohnzimmer
params:
eco_target: 16.0
open_min_secs: 20
close_min_secs: 20
previous_target_ttl_secs: 86400
- id: window_setback_kueche - id: window_setback_kueche
enabled: false enabled: true
name: Fensterabsenkung Küche name: Fensterabsenkung Küche
type: window_setback@1.0 type: window_setback@1.0
objects: objects:
@@ -35,7 +60,7 @@ rules:
close_min_secs: 20 close_min_secs: 20
previous_target_ttl_secs: 86400 previous_target_ttl_secs: 86400
- id: window_setback_patty - id: window_setback_patty
enabled: false enabled: true
name: Fensterabsenkung Arbeitszimmer Patty name: Fensterabsenkung Arbeitszimmer Patty
type: window_setback@1.0 type: window_setback@1.0
objects: objects:
@@ -51,7 +76,7 @@ rules:
close_min_secs: 20 close_min_secs: 20
previous_target_ttl_secs: 86400 previous_target_ttl_secs: 86400
- id: window_setback_schlafzimmer - id: window_setback_schlafzimmer
enabled: false enabled: true
name: Fensterabsenkung Schlafzimmer name: Fensterabsenkung Schlafzimmer
type: window_setback@1.0 type: window_setback@1.0
objects: objects:
@@ -64,21 +89,6 @@ rules:
open_min_secs: 20 open_min_secs: 20
close_min_secs: 20 close_min_secs: 20
previous_target_ttl_secs: 86400 previous_target_ttl_secs: 86400
- id: window_setback_wohnzimmer
enabled: false
name: Fensterabsenkung Wohnzimmer
type: window_setback@1.0
objects:
contacts:
- kontakt_wohnzimmer_garten_links
- kontakt_wohnzimmer_garten_rechts
thermostats:
- thermostat_wohnzimmer
params:
eco_target: 16.0
open_min_secs: 20
close_min_secs: 20
previous_target_ttl_secs: 86400
- id: window_setback_wolfgang - id: window_setback_wolfgang
enabled: true enabled: true
name: Fensterabsenkung Arbeitszimmer Wolfgang name: Fensterabsenkung Arbeitszimmer Wolfgang
@@ -92,3 +102,16 @@ rules:
eco_target: 16.0 eco_target: 16.0
open_min_secs: 20 open_min_secs: 20
close_min_secs: 20 close_min_secs: 20
- id: window_setback_bad_oben
enabled: true
name: Fensterabsenkung Bad Oben
type: window_setback@1.0
objects:
contacts:
- kontakt_bad_oben_strasse
thermostats:
- thermostat_bad_oben
params:
eco_target: 16.0
open_min_secs: 20
close_min_secs: 20