From 16b721814b9d0af266b1e486ffdfa264c3398b11 Mon Sep 17 00:00:00 2001 From: Pierre Eisenbrandt Date: Sat, 13 Dec 2025 19:52:33 +0100 Subject: [PATCH] add heating period switch --- Climate/bosch_bth-ra_control.yaml | 251 ++++++++++++++++++++---------- 1 file changed, 168 insertions(+), 83 deletions(-) diff --git a/Climate/bosch_bth-ra_control.yaml b/Climate/bosch_bth-ra_control.yaml index d007106..5514496 100644 --- a/Climate/bosch_bth-ra_control.yaml +++ b/Climate/bosch_bth-ra_control.yaml @@ -24,6 +24,15 @@ blueprint: filter: - domain: sensor device_class: temperature + heating_period_switch: + name: Heizperiode Switch + description: Optional - Switch der angibt ob Heizperiode aktiv ist. Wenn nicht gesetzt, ist die Heizperiode immer aktiv. + default: null + selector: + entity: + multiple: false + filter: + - domain: switch window_section: name: Fenster-/Türsensor Konfiguration description: Konfiguration für den Fenster-/Türsensor. @@ -101,9 +110,16 @@ blueprint: variables: trv: !input trv temperature_sensor: !input temperature_sensor + heating_period_switch: !input heating_period_switch radiator_schedules: !input radiator_schedules away_temperature: !input away_temperature alarm_control_panel: !input alarm_control_panel + is_heating_period: > + {% if heating_period_switch is none or heating_period_switch == '' %} + true + {% else %} + {{ is_state(heating_period_switch, 'on') }} + {% endif %} remote_temperature_entity: > {% set entities = device_entities(device_id(trv)) %} {% set remote_temperature_entity_id = namespace(id='') %} @@ -178,96 +194,165 @@ triggers: from: "armed_away" to: "disarmed" id: ALARM_DISARMED_AWAY + - platform: state + entity_id: !input heating_period_switch + to: "on" + id: HEATING_PERIOD_ON + - platform: state + entity_id: !input heating_period_switch + to: "off" + id: HEATING_PERIOD_OFF actions: - # setze Fenster auf offen/geschlossen - choose: + # Alle bestehenden Aktionen nur ausführen wenn Heizperiode aktiv ist - conditions: - - condition: trigger - id: - - FENSTER_OPEN - condition: template - value_template: > - {{ is_state(window_detection_entity, 'off') }} + value_template: "{{ is_heating_period }}" sequence: - - service: switch.turn_on - target: - entity_id: "{{ window_detection_entity }}" - alias: Setze Fenster auf offen - - conditions: - - condition: trigger - id: - - FENSTER_CLOSED - - condition: template - value_template: > - {{ is_state(window_detection_entity, 'on') }} - sequence: - - service: switch.turn_off - target: - entity_id: "{{ window_detection_entity }}" - - if: + # setze Fenster auf offen/geschlossen + - choose: + - conditions: + - condition: trigger + id: + - FENSTER_OPEN - condition: template value_template: > - {{ target_temperature is not none and target_temperature | is_number }} - then: - - service: climate.set_temperature - target: - entity_id: !input trv - data: - temperature: "{{ target_temperature | float }}" - alias: Setze Fenster auf geschlossen und setze Solltemperatur auf Wert aus Zeitplan (wenn vorhanden) - alias: Fensterstatus Änderung - # temperature sensor sync - - choose: - - conditions: - - condition: trigger - id: - - TEMP_CHANGED - - condition: template - value_template: > - {{ temperature_sensor is defined and states(temperature_sensor) | is_number }} - sequence: - - service: number.set_value - data: - value: "{{ states(temperature_sensor) | float }}" - target: - entity_id: "{{ remote_temperature_entity }}" - alias: Synchronisiere Temperatur am TRV (bei Änderung) - - conditions: - - condition: trigger - id: - - SYNC_TEMPERATURE - - condition: template - value_template: > - {{ temperature_sensor is defined and states(temperature_sensor) | is_number }} - - condition: template - value_template: > - {{ (now() - states[temperature_sensor].last_changed).total_seconds() > 1199 }} - sequence: - - service: number.set_value - data: - value: "{{ states(temperature_sensor) | float }}" - target: - entity_id: "{{ remote_temperature_entity }}" - alias: Synchronisiere Temperatur am TRV (zeitbasiert, wenn länger als 20min unverändert) - alias: Temperatursynchronisation - # setze Solltemperatur basierend auf Alarm-Status - - choose: - - conditions: - - condition: trigger - id: - - ALARM_ARMED_AWAY - - ALARM_DISARMED_AWAY - sequence: - - if: + {{ is_state(window_detection_entity, 'off') }} + sequence: + - service: switch.turn_on + target: + entity_id: "{{ window_detection_entity }}" + alias: Setze Fenster auf offen + - conditions: + - condition: trigger + id: + - FENSTER_CLOSED - condition: template value_template: > - {{ target_temperature is not none and target_temperature | is_number }} - then: - - service: climate.set_temperature - target: - entity_id: !input trv - data: - temperature: "{{ target_temperature | float }}" - alias: Setze Solltemperatur basierend auf Alarm-Status - alias: Solltemperatur setzen \ No newline at end of file + {{ is_state(window_detection_entity, 'on') }} + sequence: + - service: switch.turn_off + target: + entity_id: "{{ window_detection_entity }}" + - if: + - condition: template + value_template: > + {{ target_temperature is not none and target_temperature | is_number }} + then: + - service: climate.set_temperature + target: + entity_id: !input trv + data: + temperature: "{{ target_temperature | float }}" + alias: Setze Fenster auf geschlossen und setze Solltemperatur auf Wert aus Zeitplan (wenn vorhanden) + alias: Fensterstatus Änderung + # temperature sensor sync + - choose: + - conditions: + - condition: trigger + id: + - TEMP_CHANGED + - condition: template + value_template: > + {{ temperature_sensor is defined and states(temperature_sensor) | is_number }} + sequence: + - service: number.set_value + data: + value: "{{ states(temperature_sensor) | float }}" + target: + entity_id: "{{ remote_temperature_entity }}" + alias: Synchronisiere Temperatur am TRV (bei Änderung) + - conditions: + - condition: trigger + id: + - SYNC_TEMPERATURE + - condition: template + value_template: > + {{ temperature_sensor is defined and states(temperature_sensor) | is_number }} + - condition: template + value_template: > + {{ (now() - states[temperature_sensor].last_changed).total_seconds() > 1199 }} + sequence: + - service: number.set_value + data: + value: "{{ states(temperature_sensor) | float }}" + target: + entity_id: "{{ remote_temperature_entity }}" + alias: Synchronisiere Temperatur am TRV (zeitbasiert, wenn länger als 20min unverändert) + alias: Temperatursynchronisation + # setze Solltemperatur basierend auf Alarm-Status + - choose: + - conditions: + - condition: trigger + id: + - ALARM_ARMED_AWAY + - ALARM_DISARMED_AWAY + sequence: + - if: + - condition: template + value_template: > + {{ target_temperature is not none and target_temperature | is_number }} + then: + - service: climate.set_temperature + target: + entity_id: !input trv + data: + temperature: "{{ target_temperature | float }}" + alias: Setze Solltemperatur basierend auf Alarm-Status + alias: Solltemperatur setzen + alias: Aktionen während Heizperiode + # Heizperiode Switch Aktionen + - conditions: + - condition: trigger + id: + - HEATING_PERIOD_ON + - HEATING_PERIOD_OFF + sequence: + - choose: + - conditions: + - condition: trigger + id: + - HEATING_PERIOD_ON + sequence: + - service: climate.set_hvac_mode + target: + entity_id: !input trv + data: + hvac_mode: "heat" + - if: + - condition: state + entity_id: !input window_sensor + state: "on" + then: + - service: switch.turn_on + target: + entity_id: "{{ window_detection_entity }}" + - if: + - condition: template + value_template: > + {{ target_temperature is not none and target_temperature | is_number }} + then: + - service: climate.set_temperature + target: + entity_id: !input trv + data: + temperature: "{{ target_temperature | float }}" + alias: Heizperiode aktiviert - Setze Modus auf heat, synchronisiere Fensterstatus und Solltemperatur + - conditions: + - condition: trigger + id: + - HEATING_PERIOD_OFF + sequence: + - service: switch.turn_off + target: + entity_id: "{{ window_detection_entity }}" + - service: climate.set_hvac_mode + target: + entity_id: !input trv + data: + hvac_mode: "off" + alias: Heizperiode deaktiviert - Setze Fenster geschlossen und Modus auf off + alias: Heizperiode Switch Änderung + alias: Heizperiode Switch Aktionen + alias: Hauptsteuerung \ No newline at end of file