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