181 lines
5.6 KiB
YAML
181 lines
5.6 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:
|
|
radiator_settings:
|
|
name: Radiator Konfiguration
|
|
description: Konfiguration für den Bosch BTH-RA Radiator
|
|
collapsed: false
|
|
input:
|
|
radiator_entity:
|
|
name: Thermostat
|
|
description: Thermostat muss ein Bosch BTH-RA sein
|
|
selector:
|
|
device:
|
|
multiple: false
|
|
filter:
|
|
- integration: MQTT
|
|
- manufacturer: Bosch
|
|
- model_id: BTH-RA
|
|
entity:
|
|
- domain: climate
|
|
window_config:
|
|
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_config:
|
|
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
|
|
|
|
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
|
|
|
|
variables:
|
|
trv: !input radiator_entity
|
|
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 }}
|
|
|
|
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:
|
|
- FENSTER_OPEN
|
|
- FENSTER_CLOSED
|
|
- 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 |