Compare commits

...

23 Commits

Author SHA1 Message Date
88ce76ea0e move dev to prod script 2025-12-07 18:06:39 +01:00
ba6f37abab wording 2025-12-07 18:06:39 +01:00
8ab15228fe set default for schedules 2025-12-07 18:06:39 +01:00
10f7e76d20 adjust wording 2025-12-07 18:06:39 +01:00
c3daab46cb only set scheduled temperatur if available 2025-12-07 18:06:39 +01:00
bdefd74801 use value template instead of state 2025-12-07 18:06:39 +01:00
2ce92eb995 set scheduled temp when closing window 2025-12-07 18:06:39 +01:00
5e15b77f75 do net sync temp when ope/closing window 2025-12-07 18:06:39 +01:00
0cb33f18a3 fix type 2025-12-07 18:06:39 +01:00
51f038dc22 re-introduce sections and use entity instead of device 2025-12-07 18:06:39 +01:00
8a9e355d74 remove sections 2025-12-07 18:06:39 +01:00
888ab99b3e remove falsy key 2025-12-07 18:06:39 +01:00
cf027bc4fd another fix 2025-12-07 18:06:39 +01:00
5da0623b72 move section variables above triggers 2025-12-07 18:06:39 +01:00
d9738bec8f another fix 2025-12-07 18:06:39 +01:00
423771ed25 move homeassistant to blueprint section 2025-12-07 18:06:39 +01:00
df2ae53616 fix min_version 2025-12-07 18:06:39 +01:00
1dfcb7ba57 some renaming 2025-12-07 18:06:39 +01:00
d3691a5e4b try to fix error 2025-12-07 18:06:39 +01:00
10d3cb0bda try to fix errors 2025-12-07 18:06:39 +01:00
95a42a8f5f change name of dev blueprint 2025-12-07 18:06:39 +01:00
f0eb9a8c25 refactoring: use sections and use choose instead of if 2025-12-07 18:06:39 +01:00
dfa2d15b27 add schedule component 2025-12-07 18:06:39 +01:00
2 changed files with 296 additions and 190 deletions

View File

@@ -1,12 +1,14 @@
mode: single
blueprint:
name: Bosch BTH-RA Radiator Control
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.
Eine Automation zur automatischen Steuerung eines Bosch TRV Heizkörperthermostats.
domain: automation
author: Me
input:
radiator_entity:
trv:
name: Thermostat
description: Thermostat muss ein Bosch BTH-RA sein
selector:
@@ -14,6 +16,11 @@ blueprint:
multiple: false
filter:
- domain: climate
window_section:
name: Fenster-/Türsensor Konfiguration
description: Konfiguration für den Fenster-/Türsensor.
collapsed: false
input:
window_sensor:
name: Fenster-/Türsensor (oder Gruppe)
selector:
@@ -43,6 +50,11 @@ blueprint:
max: 3600.0
unit_of_measurement: seconds
step: 1.0
remaining_section:
name: Weitere Konfiguration
description: Sonstige Konfigurationen für die Automation
collapsed: false
input:
temperature_sensor:
name: Temperatursensor
selector:
@@ -51,6 +63,54 @@ blueprint:
filter:
- domain: sensor
device_class: temperature
radiator_schedules:
name: Heizpläne
description: Alle Heizpläne die für den Radiator berücksichtigt werden sollen. Sind mehrere Schedules aktiv, wird der erste mit einem gültigen Slot verwendet.
default: []
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
@@ -75,60 +135,53 @@ triggers:
entity_id: !input temperature_sensor
id: TEMP_CHANGED
variables:
trv: !input radiator_entity
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 }}
current_temperature: !input temperature_sensor
actions:
- if:
- choose:
- conditions:
- condition: trigger
id:
- FENSTER_OPEN
then:
- condition: template
value_template: >
{{ is_state(window_detection_entity, 'off') }}
sequence:
- service: switch.turn_on
target:
entity_id: "{{ window_detection_entity }}"
alias: Setze Fenster auf offen
- if:
- conditions:
- condition: trigger
id:
- FENSTER_CLOSED
then:
- condition: template
value_template: >
{{ is_state(window_detection_entity, 'on') }}
sequence:
- service: switch.turn_off
target:
entity_id: "{{ window_detection_entity }}"
alias: Setze Fenster auf geschlossen
- if:
- condition: template
value_template: >
{{ scheduled_temperature is not none }}
then:
- action: climate.set_temperature
target:
entity_id: !input trv
data:
temperature: "{{ scheduled_temperature | float }}"
alias: Setze Fenster auf geschlossen und setze Solltemperatur auf Wert aus Zeitplan (wenn vorhanden)
# temperature sensor sync
- if:
- choose:
- conditions:
- condition: trigger
id:
- FENSTER_OPEN
- FENSTER_CLOSED
- SYNC_TEMPERATURE
- TEMP_CHANGED
then:
sequence:
- service: number.set_value
data:
value: "{{ states(current_temperature) | float }}"
value: "{{ states(temperature_sensor) | float }}"
target:
entity_id: "{{ remote_temperature_entity }}"
alias: Sync remote temperature sensor
alias: Synce Temperatur zum TRV
alias: Synchronisiere Temperatur am TRV

View File

@@ -1,12 +1,14 @@
mode: single
blueprint:
name: Bosch BTH-RA Radiator Control
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.
Eine Automation zur automatischen Steuerung eines Bosch TRV Heizkörperthermostats.
domain: automation
author: Me
input:
radiator_entity:
trv:
name: Thermostat
description: Thermostat muss ein Bosch BTH-RA sein
selector:
@@ -14,6 +16,11 @@ blueprint:
multiple: false
filter:
- domain: climate
window_section:
name: Fenster-/Türsensor Konfiguration
description: Konfiguration für den Fenster-/Türsensor.
collapsed: false
input:
window_sensor:
name: Fenster-/Türsensor (oder Gruppe)
selector:
@@ -43,6 +50,11 @@ blueprint:
max: 3600.0
unit_of_measurement: seconds
step: 1.0
remaining_section:
name: Weitere Konfiguration
description: Sonstige Konfigurationen für die Automation
collapsed: false
input:
temperature_sensor:
name: Temperatursensor
selector:
@@ -51,6 +63,54 @@ blueprint:
filter:
- domain: sensor
device_class: temperature
radiator_schedules:
name: Heizpläne
description: Alle Heizpläne die für den Radiator berücksichtigt werden sollen. Sind mehrere Schedules aktiv, wird der erste mit einem gültigen Slot verwendet.
default: []
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
@@ -75,60 +135,53 @@ triggers:
entity_id: !input temperature_sensor
id: TEMP_CHANGED
variables:
trv: !input radiator_entity
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 }}
current_temperature: !input temperature_sensor
actions:
- if:
- choose:
- conditions:
- condition: trigger
id:
- FENSTER_OPEN
then:
- condition: template
value_template: >
{{ is_state(window_detection_entity, 'off') }}
sequence:
- service: switch.turn_on
target:
entity_id: "{{ window_detection_entity }}"
alias: Setze Fenster auf offen
- if:
- conditions:
- condition: trigger
id:
- FENSTER_CLOSED
then:
- condition: template
value_template: >
{{ is_state(window_detection_entity, 'on') }}
sequence:
- service: switch.turn_off
target:
entity_id: "{{ window_detection_entity }}"
alias: Setze Fenster auf geschlossen
- if:
- condition: template
value_template: >
{{ scheduled_temperature is not none }}
then:
- action: climate.set_temperature
target:
entity_id: !input trv
data:
temperature: "{{ scheduled_temperature | float }}"
alias: Setze Fenster auf geschlossen und setze Solltemperatur auf Wert aus Zeitplan (wenn vorhanden)
# temperature sensor sync
- if:
- choose:
- conditions:
- condition: trigger
id:
- FENSTER_OPEN
- FENSTER_CLOSED
- SYNC_TEMPERATURE
- TEMP_CHANGED
then:
sequence:
- service: number.set_value
data:
value: "{{ states(current_temperature) | float }}"
value: "{{ states(temperature_sensor) | float }}"
target:
entity_id: "{{ remote_temperature_entity }}"
alias: Sync remote temperature sensor
alias: Synce Temperatur zum TRV
alias: Synchronisiere Temperatur am TRV