This commit is contained in:
2026-02-23 23:38:01 +01:00
commit 4e382bbb87
9 changed files with 12226 additions and 0 deletions

128
dynamic_valve.yaml Normal file
View File

@@ -0,0 +1,128 @@
blueprint:
name: Dynamic Radiator Valve
description: Automatically sets radiator valve closing/opening degree based on temperature difference and window status
domain: automation
input:
radiator_climate:
name: Radiator (climate)
selector:
entity:
domain: climate
temperature_sensor:
name: Temperature Sensor
selector:
entity:
domain: sensor
valve_closing_number:
name: Valve Closing Number
selector:
entity:
domain: number
valve_opening_number:
name: Valve Opening Number (optional)
default: null
selector:
entity:
domain: number
window_sensor:
name: Window Sensor / Input Boolean
selector:
entity:
domain:
- binary_sensor
- input_boolean
difference_text:
name: Temperature Difference (optional)
default: null
selector:
entity:
domain: input_text
triggers:
- platform: state
entity_id: !input radiator_climate
- platform: state
entity_id: !input temperature_sensor
- platform: state
entity_id: !input window_sensor
- platform: time_pattern
minutes: "/1"
#conditions:
# - condition: template
# value_template: >
# {{ states(climate_entity) not in ['unavailable', 'unknown'] }}
actions:
- variables:
climate_entity: !input radiator_climate
temp_entity: !input temperature_sensor
window_entity: !input window_sensor
closing_entity: !input valve_closing_number
opening_entity: !input valve_opening_number
diff_text_entity: !input difference_text
- variables:
window_closed: "{{ states(window_entity) in ['off', 'false', 'closed'] }}"
- choose:
- conditions:
- condition: template
value_template: "{{ window_closed }}"
sequence:
- variables:
target: "{{ state_attr(climate_entity, 'temperature') | float(0) }}"
current: "{{ states(temp_entity) | float(0) }}"
diff: "{{ current - target }}"
closing_degree: >
{% if diff >= 1.0 %} 100
{% elif diff >= 0.5 %} 80
{% elif diff >= 0.0 %} 60
{% elif diff >= -1.0 %} 50
{% else %} 30
{% endif %}
- conditions:
- condition: template
value_template: "{{ not window_closed }}"
sequence:
- variables:
closing_degree: 0
- variables:
valve_entities: >
{% if opening_entity %}
{{ [closing_entity, opening_entity] }}
{% else %}
{{ [closing_entity] }}
{% endif %}
- service: number.set_value
target:
entity_id: "{{ valve_entities }}"
data:
value: "{{ closing_degree }}"
- choose:
- conditions:
- condition: template
value_template: "{{ diff_text_entity != None }}"
sequence:
- service: input_text.set_value
target:
entity_id: "{{ diff_text_entity }}"
data:
value: "{{ closing_degree }}"
mode: queued
max: 5