manual override reset plus minor fixes #3
@@ -155,6 +155,30 @@ blueprint:
|
|||||||
max: 25.0
|
max: 25.0
|
||||||
unit_of_measurement: "°C"
|
unit_of_measurement: "°C"
|
||||||
step: 0.5
|
step: 0.5
|
||||||
|
override_section:
|
||||||
|
name: Override Reset Konfiguration
|
||||||
|
description: Automatisches Zurücksetzen der Solltemperatur nach manueller Änderung am Thermostat
|
||||||
|
collapsed: true
|
||||||
|
input:
|
||||||
|
override_reset_duration:
|
||||||
|
name: Override Reset Zeitraum
|
||||||
|
description: >
|
||||||
|
Zeit nach der eine manuelle Temperaturänderung automatisch auf den Heizplan zurückgesetzt wird.
|
||||||
|
|
||||||
|
**Feature deaktiviert wenn auf 00:00:00 gesetzt** (Default = 02:00:00)
|
||||||
|
|
||||||
|
**Verhalten:**
|
||||||
|
- Nur manuelle Änderungen am Thermostat werden zurückgesetzt (nicht über Home Assistant)
|
||||||
|
- Timer startet neu bei jeder weiteren manuellen Änderung
|
||||||
|
- Reset erfolgt nur wenn Solltemperatur vom Heizplan abweicht
|
||||||
|
- Wenn kein Schedule aktiv ist, wird auf Abwesenheitstemperatur zurückgesetzt
|
||||||
|
- Alarm-Modus hat Priorität: Bei aktivem Alarm erfolgt kein Reset (Abwesenheitstemperatur gilt)
|
||||||
|
|
||||||
|
Beispiel: Nach 2 Stunden wird die Temperatur wieder auf den aktiven Heizplan-Wert gesetzt.
|
||||||
|
default: "02:00:00"
|
||||||
|
selector:
|
||||||
|
duration:
|
||||||
|
enable_day: false
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
trv: !input trv
|
trv: !input trv
|
||||||
@@ -167,6 +191,7 @@ variables:
|
|||||||
min_temperature: !input min_temperature
|
min_temperature: !input min_temperature
|
||||||
max_temperature: !input max_temperature
|
max_temperature: !input max_temperature
|
||||||
alarm_control_panel: !input alarm_control_panel
|
alarm_control_panel: !input alarm_control_panel
|
||||||
|
override_reset_duration: !input override_reset_duration
|
||||||
is_heating_period: >
|
is_heating_period: >
|
||||||
{% if heating_period_switch is none or heating_period_switch == '' %}
|
{% if heating_period_switch is none or heating_period_switch == '' %}
|
||||||
true
|
true
|
||||||
@@ -191,6 +216,15 @@ variables:
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{{ window_detection_entity_id.id }}
|
{{ window_detection_entity_id.id }}
|
||||||
|
setpoint_change_source_entity: >
|
||||||
|
{% set entities = device_entities(device_id(trv)) %}
|
||||||
|
{% set setpoint_change_source_entity_id = namespace(id='') %}
|
||||||
|
{% for entity in entities %}
|
||||||
|
{% if 'setpoint_change_source' in entity %}
|
||||||
|
{% set setpoint_change_source_entity_id.id = entity %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{{ setpoint_change_source_entity_id.id }}
|
||||||
scheduled_temperature: >
|
scheduled_temperature: >
|
||||||
{% set ns = namespace(current_temperature = none) %}
|
{% set ns = namespace(current_temperature = none) %}
|
||||||
{% set selected_friendly_name = states(active_scheduler_selector) %}
|
{% set selected_friendly_name = states(active_scheduler_selector) %}
|
||||||
@@ -261,6 +295,28 @@ variables:
|
|||||||
{% else %}
|
{% else %}
|
||||||
false
|
false
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
is_manual_override: >
|
||||||
|
{% set current_temp = state_attr(trv, 'temperature') | float(0) %}
|
||||||
|
{% set target_temp = safe_temperature | float(0) %}
|
||||||
|
{% set diff = (current_temp - target_temp) | abs %}
|
||||||
|
{{ diff >= 0.4 }}
|
||||||
|
override_duration_exceeded: >
|
||||||
|
{% if setpoint_change_source_entity and override_reset_duration %}
|
||||||
|
{% set duration_seconds = override_reset_duration.total_seconds() if override_reset_duration is mapping else 0 %}
|
||||||
|
{% if duration_seconds > 0 and setpoint_change_source_entity in states %}
|
||||||
|
{% if states(setpoint_change_source_entity) == 'manual' %}
|
||||||
|
{% set last_update = states[setpoint_change_source_entity].last_updated %}
|
||||||
|
{% set elapsed = (now() - last_update).total_seconds() %}
|
||||||
|
{{ elapsed > duration_seconds }}
|
||||||
|
{% else %}
|
||||||
|
false
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
false
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
false
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
triggers:
|
triggers:
|
||||||
- platform: state
|
- platform: state
|
||||||
@@ -278,9 +334,9 @@ triggers:
|
|||||||
for: !input window_delay_close
|
for: !input window_delay_close
|
||||||
id: FENSTER_CLOSED
|
id: FENSTER_CLOSED
|
||||||
- platform: time_pattern
|
- platform: time_pattern
|
||||||
# Synce Temperatur alle 5 Minuten (Teiler von 60)
|
# Periodische Überprüfung alle 5 Minuten (Temperatursynchronisation, Override-Check)
|
||||||
minutes: "/5"
|
minutes: "/5"
|
||||||
id: SYNC_TEMPERATURE
|
id: PERIODIC_CHECK
|
||||||
- platform: state
|
- platform: state
|
||||||
entity_id: !input temperature_sensor
|
entity_id: !input temperature_sensor
|
||||||
id: TEMP_CHANGED
|
id: TEMP_CHANGED
|
||||||
@@ -427,10 +483,13 @@ actions:
|
|||||||
- conditions:
|
- conditions:
|
||||||
- condition: trigger
|
- condition: trigger
|
||||||
id:
|
id:
|
||||||
- SYNC_TEMPERATURE
|
- PERIODIC_CHECK
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: >
|
value_template: >
|
||||||
{{ temperature_sensor is defined and states(temperature_sensor) | is_number }}
|
{{ temperature_sensor is defined and states(temperature_sensor) | is_number }}
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ remote_temperature_entity and remote_temperature_entity in states }}
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: >
|
value_template: >
|
||||||
{{ (now() - states[remote_temperature_entity].last_changed).total_seconds() > 1499 }}
|
{{ (now() - states[remote_temperature_entity].last_changed).total_seconds() > 1499 }}
|
||||||
@@ -442,6 +501,28 @@ actions:
|
|||||||
entity_id: "{{ remote_temperature_entity }}"
|
entity_id: "{{ remote_temperature_entity }}"
|
||||||
alias: Synchronisiere Temperatur am TRV (zeitbasiert, wenn länger als 25min unverändert)
|
alias: Synchronisiere Temperatur am TRV (zeitbasiert, wenn länger als 25min unverändert)
|
||||||
alias: Temperatursynchronisation
|
alias: Temperatursynchronisation
|
||||||
|
# override reset
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: trigger
|
||||||
|
id:
|
||||||
|
- PERIODIC_CHECK
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{% set duration_seconds = override_reset_duration.total_seconds() if override_reset_duration is mapping else 0 %}
|
||||||
|
{{ duration_seconds > 0 }}
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ is_manual_override }}"
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ override_duration_exceeded }}"
|
||||||
|
sequence:
|
||||||
|
- service: climate.set_temperature
|
||||||
|
target:
|
||||||
|
entity_id: !input trv
|
||||||
|
data:
|
||||||
|
temperature: "{{ safe_temperature | float }}"
|
||||||
|
alias: Setze Solltemperatur zurück nach manuellem Override
|
||||||
|
alias: Override Reset
|
||||||
# setze Solltemperatur bei Schedule und Alarm-Status-Änderungen
|
# setze Solltemperatur bei Schedule und Alarm-Status-Änderungen
|
||||||
- choose:
|
- choose:
|
||||||
- conditions:
|
- conditions:
|
||||||
|
|||||||
Reference in New Issue
Block a user