Skip to content

Instantly share code, notes, and snippets.

@pgasidlo
Last active December 9, 2023 13:31
Show Gist options
  • Select an option

  • Save pgasidlo/1d11a4b0b3ca0fe99f1baa4a64c3e2ae to your computer and use it in GitHub Desktop.

Select an option

Save pgasidlo/1d11a4b0b3ca0fe99f1baa4a64c3e2ae to your computer and use it in GitHub Desktop.
blueprint:
name: "Advanced Heating Control"
author: quaker
description: "FIXME"
# source_url: FIXME
domain: automation
input:
input_trvs_onoff:
name: Termostaty w trybie on/off
selector:
entity:
filter:
- domain:
- climate
multiple: true
input_temperature_comfort_static:
name: Temperatura komfortowa
default: 20
selector:
number:
min: 12.0
max: 30.0
step: 0.5
mode: slider
unit_of_measurement: °C
input_temperature_sensor:
name: Temperature Sensor
selector:
entity:
filter:
- domain:
- sensor
device_class:
- temperature
multiple: false
input_temperature_delta:
name: Różnica Temperatura
default: 0.5
selector:
number:
min: 0
max: 2
step: 0.1
mode: slider
unit_of_measurement: °C
trigger_variables:
input_temperature_comfort_static: !input input_temperature_comfort_static
input_temperature_sensor: !input input_temperature_sensor
trigger:
- platform: homeassistant
event: start
id: hastart
- platform: event
event_type: automation_reloaded
- platform: state
entity_id: !input input_temperature_sensor
for:
hours: 0
minutes: 0
seconds: 5
id: sensor_temperature_changed
##############
### ACTION ###
##############
action:
- if:
- condition: trigger
id: hastart
then:
- delay:
seconds: 30
- variables:
trvs_on: "{{ expand(input_trvs_onoff) | selectattr('state', 'eq', 'heat') | map(attribute='entity_id') | list }}"
trvs_off: "{{ expand(input_trvs_onoff) | rejectattr('state', 'eq', 'off') | map(attribute='entity_id') | list }}"
state_temperature_expected: >
{{ input_temperature_comfort_static }}
state_temperature_current: "{{ states( input_temperature_sensor ) }}"
state_mode: >
{% if state_temperature_current|float > state_temperature_expected|float + input_temperature_delta|float %}
heat
{% elif state_temperature_current|float < state_temperature_comfort|float - state_temperature_delta|float %}
off
{% else %}
ok
{% endif %}
- service: system_log.write
data:
message: |
- trvs_on: {{ trvs_on }}
- trvs_off: {{ trvs_off }}
- state_temperature_expected: {{ state_temperature_expected }}
- state_temperature_current: {{ state_temperature_current }}
- state_mode: {{ state_mode }}
- trigger.id: {{ trigger.id }}
level: debug
logger: blueprints.quaker.heatingcontrol
# ACTIONS
- choose:
# state_mode = heat
- conditions:
- condition: template
template_value: {{ state_mode == "heat" }}
sequence:
- repeat:
count: {{ trvs_off | count | int }}
sequence:
- variables:
trv: "{{ trvs_off[repeat.index-1] }}"
- service: climate.set_hvac_mode
target:
entity_id: "{{ trv }}"
data:
hvac_mode: "heat"
- delay:
seconds: 10
# state_mode = off
- conditions:
- condition: template
template_value: {{ state_mode == "off" }}
sequence:
- repeat:
count: {{ trvs_on | count | int }}
sequence:
- variables:
trv: "{{ trvs_on[repeat.index-1] }}"
- service: climate.set_hvac_mode
target:
entity_id: "{{ trv }}"
data:
hvac_mode: "off"
- delay:
seconds: 10
mode: queued
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment