upload
This commit is contained in:
128
dynamic_valve.yaml
Normal file
128
dynamic_valve.yaml
Normal 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
|
||||
Reference in New Issue
Block a user