200 lines
5.2 KiB
YAML
200 lines
5.2 KiB
YAML
blueprint:
|
||
name: Dynamic Radiator Valve – Pro Configurator
|
||
description: >
|
||
Automatyczne sterowanie zaworem grzejnika na podstawie temperatury,
|
||
różnicy temperatur oraz statusu okna.
|
||
domain: automation
|
||
|
||
input:
|
||
radiator_climate:
|
||
name: Radiator (Climate)
|
||
description: Wybierz urządzenie klimatyczne (np. termostat grzejnika)
|
||
selector:
|
||
entity:
|
||
domain: climate
|
||
|
||
temperature_sensor:
|
||
name: Temperature Sensor
|
||
description: Sensor aktualnej temperatury w pomieszczeniu
|
||
selector:
|
||
entity:
|
||
domain: sensor
|
||
|
||
window_sensor:
|
||
name: Window Sensor / Input Boolean
|
||
description: Określ czujnik stanu okna lub pomocniczy input boolean
|
||
selector:
|
||
entity:
|
||
domain: - binary_sensor
|
||
- input_boolean
|
||
|
||
valve_closing_number:
|
||
name: Valve Closing Number
|
||
description: Number entity służąca do ustawiania poziomu zamknięcia zaworu
|
||
selector:
|
||
entity:
|
||
domain: number
|
||
|
||
valve_opening_number:
|
||
name: Valve Opening Number (optional)
|
||
description: (opcjonalnie) number entity do otwierania zaworu
|
||
default: null
|
||
selector:
|
||
entity:
|
||
domain: number
|
||
|
||
difference_text:
|
||
name: Temperature Difference (optional)
|
||
description: (opcjonalnie) input_text do zapisywania aktualnej różnicy
|
||
default: null
|
||
selector:
|
||
entity:
|
||
domain: input_text
|
||
|
||
# Advanced Options
|
||
min_diff_threshold:
|
||
name: Min Difference Threshold
|
||
description: Minimalna różnica względem target do otwarcia zaworu
|
||
default: 0.0
|
||
selector:
|
||
number:
|
||
unit_of_measurement: '°C'
|
||
min: -5
|
||
max: 5
|
||
step: 0.1
|
||
|
||
max_diff_threshold:
|
||
name: Max Difference Threshold
|
||
description: Maksymalna różnica do pełnego zamknięcia zaworu
|
||
default: 2.0
|
||
selector:
|
||
number:
|
||
unit_of_measurement: '°C'
|
||
min: 0
|
||
max: 10
|
||
step: 0.1
|
||
|
||
window_override:
|
||
name: Window Open Override
|
||
description: Gdy okno otwarte, czy zawory powinny zostać zamknięte?
|
||
default: true
|
||
selector:
|
||
boolean: {}
|
||
|
||
weekdays:
|
||
name: Operate on Weekdays
|
||
description: Wybierz dni, w których automatyka ma działać
|
||
default: ['mon','tue','wed','thu','fri','sat','sun']
|
||
selector:
|
||
select:
|
||
multiple: true
|
||
options:
|
||
- label: Monday
|
||
value: mon
|
||
- label: Tuesday
|
||
value: tue
|
||
- label: Wednesday
|
||
value: wed
|
||
- label: Thursday
|
||
value: thu
|
||
- label: Friday
|
||
value: fri
|
||
- label: Saturday
|
||
value: sat
|
||
- label: Sunday
|
||
value: sun
|
||
|
||
active_time:
|
||
name: Active Time Range
|
||
description: Określ ramy czasowe działania automatyki (opcjonalne)
|
||
selector:
|
||
time:
|
||
start: true
|
||
end: true
|
||
|
||
trigger:
|
||
- 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"
|
||
|
||
condition:
|
||
- condition: time
|
||
weekday: !input weekdays
|
||
- condition: template
|
||
value_template: >
|
||
{{ states(!input radiator_climate) not in ['unavailable','unknown'] }}
|
||
|
||
action:
|
||
- 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
|
||
min_diff: !input min_diff_threshold
|
||
max_diff: !input max_diff_threshold
|
||
override_open: !input window_override
|
||
|
||
- variables:
|
||
target_temp: "{{ state_attr(climate_entity,'temperature')|float(0) }}"
|
||
current_temp: "{{ states(temp_entity)|float(0) }}"
|
||
diff: "{{ current_temp - target_temp }}"
|
||
|
||
- choose:
|
||
- conditions:
|
||
- condition: template
|
||
value_template: >
|
||
{{ override_open and (states(window_entity) in ['on','true','open']) }}
|
||
sequence:
|
||
- variables:
|
||
closing_degree: 0
|
||
|
||
- conditions:
|
||
- condition: template
|
||
value_template: >
|
||
{{ diff >= max_diff }}
|
||
sequence:
|
||
- variables:
|
||
closing_degree: 100
|
||
|
||
- conditions:
|
||
- condition: template
|
||
value_template: >
|
||
{{ diff <= min_diff }}
|
||
sequence:
|
||
- variables:
|
||
closing_degree: 30
|
||
|
||
default:
|
||
- variables:
|
||
closing_degree: >
|
||
{{ ((diff - min_diff) / (max_diff - min_diff) * 100) | round(0) }}
|
||
|
||
- service: number.set_value
|
||
data:
|
||
value: "{{ closing_degree }}"
|
||
target:
|
||
entity_id: >
|
||
{% if opening_entity %}
|
||
[{{ closing_entity }}, {{ opening_entity }}]
|
||
{% else %}
|
||
{{ closing_entity }}
|
||
{% endif %}
|
||
|
||
- choose:
|
||
- conditions:
|
||
- condition: template
|
||
value_template: "{{ diff_text_entity != None }}"
|
||
sequence:
|
||
- service: input_text.set_value
|
||
data:
|
||
value: "{{ diff }}"
|
||
target:
|
||
entity_id: "{{ diff_text_entity }}"
|