Skip to content

Instantly share code, notes, and snippets.

@georgeh
Created December 9, 2025 17:09
Show Gist options
  • Select an option

  • Save georgeh/f86a88949bef8558e44fc0bc5a14e619 to your computer and use it in GitHub Desktop.

Select an option

Save georgeh/f86a88949bef8558e44fc0bc5a14e619 to your computer and use it in GitHub Desktop.
Ecobee Fireplace Mode Blueprint
blueprint:
name: Ecobee Fireplace Comfort Override
description: >
Keeps an Ecobee thermostat in a custom comfort setting while your fireplace
is heating the room, overriding schedule changes, and resumes the program
once the room cools off.
domain: automation
input:
ecobee_thermostat:
name: Ecobee thermostat
selector:
entity:
domain: climate
thermostat_temp_sensor:
name: Thermostat temperature sensor
description: Sensor near the thermostat used for comparison
selector:
entity:
domain: sensor
device_class: temperature
room_temp_sensor:
name: Room temperature sensor
description: Sensor near the fireplace
selector:
entity:
domain: sensor
device_class: temperature
fireplace_preset:
name: Fireplace comfort setting name
description: Name of the Ecobee comfort setting (e.g. "Fireplace On")
default: Fireplace On
selector:
text:
high_delta:
name: Hot threshold (room - thermostat)
description: >
When the room is at least this many degrees warmer than the thermostat
for the given duration, enter the fireplace comfort mode.
default: 15
selector:
number:
min: 1
max: 40
step: 0.5
mode: box
low_delta:
name: Cool threshold (room - thermostat)
description: >
When the room is below this difference for the given duration, exit the
fireplace comfort mode and resume the Ecobee program.
default: 10
selector:
number:
min: 0
max: 40
step: 0.5
mode: box
hot_for:
name: Time hot before entering fireplace mode
default:
hours: 0
minutes: 5
seconds: 0
selector:
duration:
cool_for:
name: Time cool before exiting fireplace mode
default:
hours: 0
minutes: 5
seconds: 0
selector:
duration:
mode: single
triggers:
# 1) Fireplace is clearly heating the room (enter override)
- id: too_hot
trigger: template
value_template: >-
{% set room_str = states(room_temp_sensor) %}
{% set thermo_str = states(thermostat_temp_sensor) %}
{% if room_str not in ['unknown','unavailable',''] and
thermo_str not in ['unknown','unavailable',''] %}
{% set room = room_str | float %}
{% set thermo = thermo_str | float %}
{{ room - thermo >= (high_delta | float) }}
{% else %}
false
{% endif %}
for: !input hot_for
# 2) Room has cooled down enough (exit override)
- id: cooled_off
trigger: template
value_template: >-
{% set room_str = states(room_temp_sensor) %}
{% set thermo_str = states(thermostat_temp_sensor) %}
{% if room_str not in ['unknown','unavailable',''] and
thermo_str not in ['unknown','unavailable',''] %}
{% set room = room_str | float %}
{% set thermo = thermo_str | float %}
{{ room - thermo < (low_delta | float) }}
{% else %}
false
{% endif %}
for: !input cool_for
# 3) Ecobee preset changes (e.g. due to schedule) while fireplace is still hot
- id: preset_changed
trigger: state
entity_id: !input ecobee_thermostat
attribute: preset_mode
conditions: []
actions:
- choose:
# ENTER fireplace comfort mode
- conditions:
- condition: trigger
id: too_hot
- condition: state
entity_id: !input ecobee_thermostat
state: heat
- condition: template
value_template: >-
{{ state_attr(ecobee_thermostat, 'preset_mode') != fireplace_preset }}
sequence:
- alias: "Set fireplace comfort setting"
action: climate.set_preset_mode
target:
entity_id: !input ecobee_thermostat
data:
preset_mode: !input fireplace_preset
# EXIT fireplace comfort mode
- conditions:
- condition: trigger
id: cooled_off
- condition: state
entity_id: !input ecobee_thermostat
state: heat
- condition: template
value_template: >-
{{ state_attr(ecobee_thermostat, 'preset_mode') == fireplace_preset }}
sequence:
- alias: "Resume normal Ecobee program"
action: ecobee.resume_program
target:
entity_id: !input ecobee_thermostat
# OVERRIDE schedule changes while it's still hot
- conditions:
- condition: trigger
id: preset_changed
- condition: state
entity_id: !input ecobee_thermostat
state: heat
- condition: template
value_template: >-
{% set room_str = states(room_temp_sensor) %}
{% set thermo_str = states(thermostat_temp_sensor) %}
{% if room_str not in ['unknown','unavailable',''] and
thermo_str not in ['unknown','unavailable',''] %}
{% set room = room_str | float %}
{% set thermo = thermo_str | float %}
{{ room - thermo >= (high_delta | float) and
state_attr(ecobee_thermostat, 'preset_mode') != fireplace_preset }}
{% else %}
false
{% endif %}
sequence:
- alias: "Re-assert fireplace comfort setting after schedule change"
action: climate.set_preset_mode
target:
entity_id: !input ecobee_thermostat
data:
preset_mode: !input fireplace_preset
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment