Files
HomeAssistantBlueprints/Climate/bosch_bth-ra_control_dev.yaml

170 lines
5.2 KiB
YAML

mode: single
blueprint:
name: Bosch BTH-RA Radiator Control - DEV
homeassistant:
min_version: "2024.6.0"
description: >
An automation to set Bosch TRV radiator valve to a desired temperature.
domain: automation
author: Me
input:
trv:
name: Thermostat
description: Thermostat muss ein Bosch BTH-RA sein
selector:
entity:
multiple: false
filter:
- domain: climate
window_section:
name: Fenster-/Türsensor Konfiguration
description: Konfiguration für den Fenster-/Türsensor.
collapsed: true
input:
window_sensor:
name: Fenster-/Türsensor (oder Gruppe)
selector:
entity:
multiple: false
filter:
- domain: binary_sensor
window_delay_open:
name: Fenster-/Türsensor Verzögerung
description: Zeit die das Fenster offen bleiben muss, um die den Radiator in den "Fenster offen"-Modus zu versetzen (Default = 30s)
default: 30
selector:
number:
mode: box
min: 0.0
max: 3600.0
unit_of_measurement: seconds
step: 1.0
window_delay_close:
name: Fenster-/Türsensor Verzögerung
description: Zeit die das Fenster geschlossen bleiben muss, um die den Radiator in den "Fenster geschlossen"-Modus zu versetzen (Default = 5s)
default: 5
selector:
number:
mode: box
min: 0.0
max: 3600.0
unit_of_measurement: seconds
step: 1.0
remaining_section:
name: Weitere Konfiguration
description: Sonstige Konfigurationen für die Automation
collapsed: true
input:
temperature_sensor:
name: Temperatursensor
selector:
entity:
multiple: false
filter:
- domain: sensor
device_class: temperature
radiator_schedules:
name: Heizpläne
description: Alle Heizpläne die für den Radiator berücksichtigt werden sollen
selector:
entity:
multiple: true
filter:
- domain: switch
variables:
trv: !input trv
radiator_schedules: !input radiator_schedules
temperature_sensor: !input temperature_sensor
remote_temperature_entity: >
{% set entities = device_entities(device_id(trv)) %}
{% set remote_temperature_entity_id = namespace(id='') %}
{% for entity in entities %}
{% if 'remote_temperature' in entity %}
{% set remote_temperature_entity_id.id = entity %}
{% endif %}
{% endfor %}
{{ remote_temperature_entity_id.id }}
window_detection_entity: >
{% set entities = device_entities(device_id(trv)) %}
{% set window_detection_entity_id = namespace(id='') %}
{% for entity in entities %}
{% if 'window_detection' in entity %}
{% set window_detection_entity_id.id = entity %}
{% endif %}
{% endfor %}
{{ window_detection_entity_id.id }}
scheduled_temperature: >
{% set ns = namespace(current_temperature = none) %}
{% for schedule in radiator_schedules %}
{% if states(schedule) == 'on' and state_attr(schedule, 'current_slot') is not none %}
{% set current_slot = state_attr(schedule, 'current_slot') %}
{% set actions = state_attr(schedule, 'actions') %}
{% if actions is not none and actions | length > current_slot %}
{% set action = actions[current_slot] %}
{% if action.data.temperature is defined %}
{% set ns.current_temperature = action.data.temperature %}
{% break %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.current_temperature }}
triggers:
- trigger: state
entity_id:
- !input window_sensor
from: "off"
to: "on"
for: !input window_delay_open
id: FENSTER_OPEN
- trigger: state
entity_id:
- !input window_sensor
from: "on"
to: "off"
for: !input window_delay_close
id: FENSTER_CLOSED
- platform: time_pattern
# Synce Temperatur alle 20 Minuten (Teiler von 60)
minutes: "/20"
id: SYNC_TEMPERATURE
- platform: state
entity_id: !input temperature_sensor
id: TEMP_CHANGED
actions:
- choose:
- conditions:
- condition: trigger
id:
- FENSTER_OPEN
sequence:
- service: switch.turn_on
target:
entity_id: "{{ window_detection_entity }}"
alias: Setze Fenster auf offen
- conditions:
- condition: trigger
id:
- FENSTER_CLOSED
sequence:
- service: switch.turn_off
target:
entity_id: "{{ window_detection_entity }}"
alias: Setze Fenster auf geschlossen
# temperature sensor sync
- choose:
- conditions:
- condition: trigger
id:
- SYNC_TEMPERATURE
- TEMP_CHANGED
sequence:
- service: number.set_value
data:
value: "{{ states(temperature_sensor) | float }}"
target:
entity_id: "{{ remote_temperature_entity }}"
alias: Synce Temperatur zum TRV