As part of the earlier post regarding Home Assistant notification automation cheaper electricity Nordpool, I have made an automation with adaptive heating based on the outdoor temperature and electricity prices. It can be used as a base for your own automation but should be adjusted to your own liking. We our self have a comfort temperature of 23 degrees C indoor.
I have planed to add weather forecast into the adaptive automation. We have water based heating that is very slow, and on sunny days there are some problem with excess heat. So we could benefit of reducing the heating on sunny days.
Heating automation:
# Heating state - alias: Heating state id: heating_state trigger: - platform: homeassistant event: start - platform: time_pattern minutes: 1 - platform: state entity_id: group.all_people to: 'home' - platform: state entity_id: group.all_people to: 'away' - platform: state entity_id: input_boolean.vacation_mode to: 'on' - platform: state entity_id: input_boolean.vacation_mode to: 'off' action: - choose: # Temperature below 24.9c outside and vacation mode set heating to 18 - conditions: - condition: and conditions: - condition: state entity_id: group.all_people state: 'not_home' - condition: state entity_id: input_boolean.vacation_mode state: 'on' - condition: numeric_state entity_id: sensor.garden_motion_sensor_temperature below: 24.9 sequence: - service: climate.set_temperature entity_id: climate.living_room_thermostat data: hvac_mode: 'heat' temperature: 18 - service: climate.set_temperature entity_id: climate.office_thermostat data: hvac_mode: 'heat' temperature: 18 - service: climate.set_temperature entity_id: climate.hallway_thermostat data: hvac_mode: 'heat' temperature: 18 - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 18 - service: climate.set_temperature entity_id: climate.attic_thermostat data: hvac_mode: 'heat' temperature: 18 - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 18 # Temperature below 24.9c outside and users away set heating to 22 - conditions: - condition: and conditions: - condition: state entity_id: group.all_people state: 'not_home' - condition: state entity_id: input_boolean.vacation_mode state: 'off' - condition: numeric_state entity_id: sensor.garden_temperature below: 24.9 sequence: - service: climate.set_temperature entity_id: climate.living_room_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.office_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.hallway_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.attic_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 22 # Temperature below 4.9c outside and users home set heating to 23.5 - conditions: - condition: and conditions: - condition: state entity_id: group.all_people state: 'home' - condition: state entity_id: input_boolean.vacation_mode state: 'off' - condition: numeric_state entity_id: sensor.garden_temperature below: 4.9 sequence: - service: climate.set_temperature entity_id: climate.living_room_thermostat data: hvac_mode: 'heat' temperature: 23.5 - service: climate.set_temperature entity_id: climate.office_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.hallway_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 - service: climate.set_temperature entity_id: climate.attic_thermostat data: hvac_mode: 'heat' temperature: 21 - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 # Temperature between 5c to 14.9c outside and users home set heating to 23 - conditions: - condition: and conditions: - condition: state entity_id: group.all_people state: 'home' - condition: state entity_id: input_boolean.vacation_mode state: 'off' - condition: numeric_state entity_id: sensor.garden_temperature above: 5 below: 14.9 sequence: - service: climate.set_temperature entity_id: climate.living_room_thermostat data: hvac_mode: 'heat' temperature: 23 - service: climate.set_temperature entity_id: climate.office_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.hallway_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 - service: climate.set_temperature entity_id: climate.attic_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 # Temperature between 15c and 21.9c outside and users home set heating to 22.5 - conditions: - condition: and conditions: - condition: state entity_id: group.all_people state: 'home' - condition: state entity_id: input_boolean.vacation_mode state: 'off' - condition: numeric_state entity_id: sensor.garden_temperature above: 15 below: 21.9 sequence: - service: climate.set_temperature entity_id: climate.living_room_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.office_thermostat data: hvac_mode: 'heat' temperature: 22 - service: climate.set_temperature entity_id: climate.hallway_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 - service: climate.set_temperature entity_id: climate.attic_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 # Temperature between 22c and 24.9c outside and users home set heating to 21 - conditions: - condition: and conditions: - condition: state entity_id: group.all_people state: 'home' - condition: state entity_id: input_boolean.vacation_mode state: 'off' - condition: numeric_state entity_id: sensor.garden_temperature above: 22 below: 24.9 sequence: - service: climate.set_temperature entity_id: climate.living_room_thermostat data: hvac_mode: 'heat' temperature: 21 - service: climate.set_temperature entity_id: climate.office_thermostat data: hvac_mode: 'heat' temperature: 21 - service: climate.set_temperature entity_id: climate.hallway_thermostat data: hvac_mode: 'heat' temperature: 21 - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 - service: climate.set_temperature entity_id: climate.attic_thermostat data: hvac_mode: 'heat' temperature: 20 - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 24 # Temperature above 25c outside and users home set heating to off - conditions: - condition: and conditions: - condition: numeric_state entity_id: sensor.outdoor_temperature above: 25 sequence: - service: climate.turn_off entity_id: climate.living_room_thermostat - service: climate.turn_off entity_id: climate.office_thermostat - service: climate.turn_off entity_id: climate.hallway_thermostat - service: climate.set_temperature entity_id: climate.bathroom_thermostat data: hvac_mode: 'heat' temperature: 23 - service: climate.turn_off entity_id: climate.attic_thermostat - service: climate.set_temperature entity_id: climate.main_bathroom_thermostat data: hvac_mode: 'heat' temperature: 23 # Adaptive heating based on home state and energy prices - alias: Adaptive heating id: adaptive_heating trigger: - platform: homeassistant event: start - platform: time_pattern minutes: 2 action: - choose: # Low energy prices below 4.9c outside - conditions: - condition: and conditions: - condition: state entity_id: binary_sensor.cheap_electricity state: 'on' - condition: numeric_state entity_id: sensor.outdoor_temperature below: 4.9 - condition: not conditions: - condition: time after: "21:00:00" before: "03:00:00" sequence: # - service_template: notify.pushover # data_template: # title: "Cheap electricity - Baymax has increased heating" # message: "The price for electricity is now {{states('sensor.nordpool_kwh_oslo_nok_3_10_025')}} kWh. No action needed" # data: # priority: 0 # sound: "pianobar" - service: climate.set_temperature data_template: entity_id: climate.living_room_thermostat temperature: "{{(state_attr('climate.living_room_thermostat', 'temperature') | float + 1) }}" - service: climate.set_temperature data_template: entity_id: climate.office_thermostat temperature: "{{(state_attr('climate.office_thermostat', 'temperature') | float + 1) }}" - service: climate.set_temperature data_template: entity_id: climate.hallway_thermostat temperature: "{{(state_attr('climate.hallway_thermostat', 'temperature') | float + 1) }}" - service: climate.set_temperature data_template: entity_id: climate.bathroom_thermostat temperature: "{{(state_attr('climate.bathroom_thermostat', 'temperature') | float + 1) }}" - service: climate.set_temperature data_template: entity_id: climate.attic_thermostat temperature: "{{(state_attr('climate.attic_thermostat', 'temperature') | float + 1) }}" - service: climate.set_temperature data_template: entity_id: climate.main_bathroom_thermostat temperature: "{{(state_attr('climate.main_bathroom_thermostat', 'temperature') | float + 1) }}" # Low energy prices between 5c to 14.9c outside - conditions: - condition: and conditions: - condition: state entity_id: binary_sensor.cheap_electricity state: 'on' - condition: numeric_state entity_id: sensor.outdoor_temperature above: 5 below: 14.9 - condition: not conditions: - condition: time after: "21:00:00" before: "03:00:00" sequence: # - service_template: notify.pushover # data_template: # title: "Cheap electricity - Baymax has increased heating" # message: "The price for electricity is now {{states('sensor.nordpool_kwh_oslo_nok_3_10_025')}} kWh. No action needed" # data: # priority: 0 # sound: "pianobar" - service: climate.set_temperature data_template: entity_id: climate.living_room_thermostat temperature: "{{(state_attr('climate.living_room_thermostat', 'temperature') | float + 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.office_thermostat temperature: "{{(state_attr('climate.office_thermostat', 'temperature') | float + 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.hallway_thermostat temperature: "{{(state_attr('climate.hallway_thermostat', 'temperature') | float + 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.bathroom_thermostat temperature: "{{(state_attr('climate.bathroom_thermostat', 'temperature') | float + 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.attic_thermostat temperature: "{{(state_attr('climate.attic_thermostat', 'temperature') | float + 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.main_bathroom_thermostat temperature: "{{(state_attr('climate.main_bathroom_thermostat', 'temperature') | float + 0.5) }}" # Normal energy prices - conditions: - condition: and conditions: - condition: state entity_id: binary_sensor.average_electricity state: 'on' - condition: not conditions: - condition: time after: "21:00:00" before: "03:00:00" sequence: # - service_template: notify.pushover # data_template: # title: "Cheaper electricity" # message: "The price for electricity is now {{states('sensor.nordpool_kwh_oslo_nok_3_10_025')}} kWh. No action needed" # data: # priority: 0 # sound: "pianobar" - service: automation.trigger entity_id: automation.heating_state # High energy prices below 4.9c outside - conditions: - condition: and conditions: - condition: state entity_id: binary_sensor.expensive_electricity state: 'on' - condition: numeric_state entity_id: sensor.outdoor_temperature below: 4.9 - condition: not conditions: - condition: time after: "21:00:00" before: "03:00:00" sequence: # - service_template: notify.pushover # data_template: # title: "Expensive electricity - Baymax has reduced heating" # message: "The price for electricity is now {{states('sensor.nordpool_kwh_oslo_nok_3_10_025')}} kWh. It is {{states('sensor.outdoor_temperature')}} degrees outside and {{states('weather.met_no')}} weather. Decide if fireplace needs to be lit" # data: # priority: 0 # sound: "pianobar" - service: climate.set_temperature data_template: entity_id: climate.living_room_thermostat temperature: "{{(state_attr('climate.living_room_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.office_thermostat temperature: "{{(state_attr('climate.office_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.hallway_thermostat temperature: "{{(state_attr('climate.hallway_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.bathroom_thermostat temperature: "{{(state_attr('climate.bathroom_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.attic_thermostat temperature: "{{(state_attr('climate.attic_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.main_bathroom_thermostat temperature: "{{(state_attr('climate.main_bathroom_thermostat', 'temperature') | float - 0.5) }}" # High energy prices between 5c to 14.9c outside - conditions: - condition: and conditions: - condition: state entity_id: binary_sensor.expensive_electricity state: 'on' - condition: numeric_state entity_id: sensor.outdoor_temperature above: 5 below: 14.9 - condition: not conditions: - condition: time after: "21:00:00" before: "03:00:00" sequence: # - service_template: notify.pushover # data_template: # title: "Expensive electricity - Baymax has reduced heating" # message: "The price for electricity is now {{states('sensor.nordpool_kwh_oslo_nok_3_10_025')}} kWh. It is {{states('sensor.outdoor_temperature')}} degrees outside and {{states('weather.met_no')}} weather. Decide if fireplace needs to be lit" # data: # priority: 0 # sound: "pianobar" - service: climate.set_temperature data_template: entity_id: climate.living_room_thermostat temperature: "{{(state_attr('climate.living_room_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.office_thermostat temperature: "{{(state_attr('climate.office_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.hallway_thermostat temperature: "{{(state_attr('climate.hallway_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.bathroom_thermostat temperature: "{{(state_attr('climate.bathroom_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.attic_thermostat temperature: "{{(state_attr('climate.attic_thermostat', 'temperature') | float - 0.5) }}" - service: climate.set_temperature data_template: entity_id: climate.main_bathroom_thermostat temperature: "{{(state_attr('climate.main_bathroom_thermostat', 'temperature') | float - 0.5) }}" # Nightfall - adjust temperature - conditions: - condition: and conditions: - condition: time after: "21:00:00" before: "03:00:00" sequence: # - service_template: notify.pushover # data_template: # title: "Expensive electricity - Baymax has reduced heating" # message: "The price for electricity is now {{states('sensor.nordpool_kwh_oslo_nok_3_10_025')}} kWh. It is {{states('sensor.outdoor_temperature')}} degrees outside and {{states('weather.met_no')}} weather. Decide if fireplace needs to be lit" # data: # priority: 0 # sound: "pianobar" - service: climate.set_temperature data_template: entity_id: climate.living_room_thermostat temperature: "{{(state_attr('climate.living_room_thermostat', 'temperature') | float - 1) }}" - service: climate.set_temperature data_template: entity_id: climate.office_thermostat temperature: "{{(state_attr('climate.office_thermostat', 'temperature') | float - 1) }}" - service: climate.set_temperature data_template: entity_id: climate.hallway_thermostat temperature: "{{(state_attr('climate.hallway_thermostat', 'temperature') | float - 1) }}" - service: climate.set_temperature data_template: entity_id: climate.bathroom_thermostat temperature: "{{(state_attr('climate.bathroom_thermostat', 'temperature') | float - 1) }}" - service: climate.set_temperature data_template: entity_id: climate.attic_thermostat temperature: "{{(state_attr('climate.attic_thermostat', 'temperature') | float - 1) }}" - service: climate.set_temperature data_template: entity_id: climate.main_bathroom_thermostat temperature: "{{(state_attr('climate.main_bathroom_thermostat', 'temperature') | float - 1) }}"