Home Assistant Blueprint: Dynamic Ecobee Thermostat Adjustment with Extreme Weather Conditions

This blueprint provides a fully automated, context‑aware HVAC controller for homes using Ecobee (or any compatible) thermostats. It intelligently adjusts heating, cooling, and temperature setpoints based on weather, occupancy, time of day, and bedtime mode, with special logic for extreme hot and extreme cold conditions.

:sparkles: Features

  • Automatically switches between heat, cool, and heat_cool modes
  • Adjusts temperatures based on:
    • Weather category (winter, summer, mild, extremehot, extremecold)
    • Home occupancy (home vs. away)
    • Bedtime mode
    • Morning warm‑up window
    • Daytime seasonal logic
  • Sends detailed notifications for every HVAC event
  • Supports two thermostats (upstairs + downstairs)
  • Runs every 15 minutes and on key state changes
  • Replaces or enhances Ecobee’s built‑in scheduling with smarter logic

:package: Requirements
To use this blueprint, you’ll need the following entities:

  1. Two Climate Entities (Ecobee or compatible)
  • Upstairs thermostat
  • Downstairs thermostat

Must support:

  • climate.sethvacmode
  • climate.set_temperature
  • Heat, cool, and heat_cool modes

  1. Weather Condition Sensor
    A sensor whose state represents a weather category:
  • winter
  • summer
  • mild
  • extreme_hot
  • extreme_cold

And includes a temperature attribute.

This can be:

  • A template sensor
  • A weather integration
  • A custom classification sensor

  1. Occupancy Zone
    A zone.home entity that indicates:
  • 0 = away
  • !0 = someone home

  1. Bedtime Boolean
    An input_boolean that toggles bedtime mode:
  • on = bedtime
  • off = daytime

  1. Notification Service
    Any notification service (e.g., Telegram, Signal, Discord, Matrix, mobile app).

You will provide:

  • The service name (e.g., notify.chat_hass)
  • The target (chat ID, device, or group)

:brain: How It Works
The automation reacts to:

  • Weather changes
  • Occupancy changes
  • Bedtime toggles
  • A 15‑minute time pattern

It then applies the appropriate HVAC logic:

Extreme Weather

  • Forces heat or cool mode
  • Uses aggressive setpoints
  • Sends an alert

Bedtime Mode

  • Applies fixed nighttime temperatures
  • Chooses heat or cool based on season
  • Overrides other logic

Morning Warm‑Up (05:30–07:30)

  • Warms the house before wake‑up
  • Uses consistent morning setpoints

Daytime Logic

  • Seasonal behavior (winter/summer/mild)
  • Occupancy‑aware setpoints
  • Heat/cool mode with ranges during mild weather

Every action includes a detailed notification so you always know why the system changed modes or temperatures.


:dart: Ideal For

  • Users who want full HVAC automation
  • Homes with multiple thermostats
  • Anyone in climates with large seasonal swings
  • People who want occupancy‑aware and weather‑aware temperature control

:inbox_tray: Blueprint YAML

blueprint:
  name: Dynamic Ecobee Thermostat Adjustment with Extreme Weather Conditions
  description: >
    Adjust Ecobee thermostats dynamically based on weather, occupancy, bedtime,
    and time of day. Includes extreme weather handling.
  domain: automation
  input:
    weather_sensor:
      name: Weather Condition Sensor
      description: Sensor providing weather category + temperature attribute
      selector:
        entity:
          domain: sensor

    occupancy_zone:
      name: Home Occupancy Zone
      description: Zone entity that indicates if anyone is home
      selector:
        entity:
          domain: zone

    bedtime_boolean:
      name: Bedtime Boolean
      description: Input boolean that indicates bedtime mode
      selector:
        entity:
          domain: input_boolean

    upstairs_thermostat:
      name: Upstairs Thermostat
      selector:
        entity:
          domain: climate

    downstairs_thermostat:
      name: Downstairs Thermostat
      selector:
        entity:
          domain: climate

    notify_target:
      name: Notification Target
      description: Chat ID or notification target
      selector:
        text:

    notify_service:
      name: Notification Service
      description: e.g., notify.chat_hass
      selector:
        text:

mode: single

variables:
  thermostats:
    - !input upstairs_thermostat
    - !input downstairs_thermostat

trigger:
  - platform: state
    entity_id: !input weather_sensor
    attribute: temperature
    for: "00:15:00"
  - platform: state
    entity_id: !input occupancy_zone
  - platform: time_pattern
    minutes: "/15"
  - platform: state
    entity_id: !input bedtime_boolean

condition: []

action:
  - choose:
      # EXTREME COLD (Bedtime OFF)
      - conditions:
          - condition: state
            entity_id: !input weather_sensor
            state: extreme_cold
          - condition: state
            entity_id: !input bedtime_boolean
            state: "off"
        sequence:
          - service: !input notify_service
            data:
              target: [!input notify_target]
              message: >
                🚨 HVAC Event: Heat turned on due to Extreme Cold!

                Weather: {{ states(input.weather_sensor) }}

                Bedtime: {{ states(input.bedtime_boolean) }}

                Upstairs Setpoint: {{ 72 if states(input.occupancy_zone)|int > 0 else 60 }}°F
                Downstairs Setpoint: {{ 74 if states(input.occupancy_zone)|int > 0 else 60 }}°F

          - service: climate.set_hvac_mode
            target:
              entity_id: "{{ thermostats }}"
            data:
              hvac_mode: heat

          - service: climate.set_temperature
            target:
              entity_id: !input upstairs_thermostat
            data:
              temperature: "{{ 71 if states(input.occupancy_zone)|int > 0 else 60 }}"

          - service: climate.set_temperature
            target:
              entity_id: !input downstairs_thermostat
            data:
              temperature: "{{ 72 if states(input.occupancy_zone)|int > 0 else 60 }}"

      # EXTREME HOT (Bedtime OFF)
      - conditions:
          - condition: state
            entity_id: !input weather_sensor
            state: extreme_hot
          - condition: state
            entity_id: !input bedtime_boolean
            state: "off"
        sequence:
          - service: !input notify_service
            data:
              target: [!input notify_target]
              message: >
                ❄️ HVAC Event: Cool turned on due to Extreme Hot!

                Weather: {{ states(input.weather_sensor) }}
                Bedtime: {{ states(input.bedtime_boolean) }}

                Upstairs Setpoint: {{ 71 if states(input.occupancy_zone)|int > 0 else 78 }}°F
                Downstairs Setpoint: {{ 72 if states(input.occupancy_zone)|int > 0 else 78 }}°F

          - service: climate.set_hvac_mode
            target:
              entity_id: "{{ thermostats }}"
            data:
              hvac_mode: cool

          - service: climate.set_temperature
            target:
              entity_id: !input upstairs_thermostat
            data:
              temperature: "{{ 71 if states(input.occupancy_zone)|int > 0 else 78 }}"

          - service: climate.set_temperature
            target:
              entity_id: !input downstairs_thermostat
            data:
              temperature: "{{ 72 if states(input.occupancy_zone)|int > 0 else 78 }}"

      # BEDTIME MODE ON
      - conditions:
          - condition: state
            entity_id: !input bedtime_boolean
            state: "on"
        sequence:
          - choose:
              # WINTER
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: winter
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🌙 Bedtime HVAC Event: Heat turned on (Winter)!
                        Upstairs Setpoint: 67°F
                        Downstairs Setpoint: 69°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: heat

              # EXTREME COLD
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: extreme_cold
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🌙 Bedtime HVAC Event: Heat turned on (Extreme Cold)!
                        Upstairs Setpoint: 67°F
                        Downstairs Setpoint: 69°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: heat

              # SUMMER
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: summer
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🌙 Bedtime HVAC Event: Cool turned on (Summer)!
                        Upstairs Setpoint: 67°F
                        Downstairs Setpoint: 69°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: cool

              # EXTREME HOT
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: extreme_hot
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🌙 Bedtime HVAC Event: Cool turned on (Extreme Hot)!
                        Upstairs Setpoint: 67°F
                        Downstairs Setpoint: 69°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: cool

              # MILD
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: mild
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🌙 Bedtime HVAC Event: Cool turned on (Mild Weather)!
                        Upstairs Setpoint: 67°F
                        Downstairs Setpoint: 69°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: cool

                  - service: climate.set_temperature
                    target:
                      entity_id: !input upstairs_thermostat
                    data:
                      temperature: 67

                  - service: climate.set_temperature
                    target:
                      entity_id: !input downstairs_thermostat
                    data:
                      temperature: 69

          # Final bedtime override
          - service: climate.set_temperature
            target:
              entity_id: !input upstairs_thermostat
            data:
              temperature: 65

          - service: climate.set_temperature
            target:
              entity_id: !input downstairs_thermostat
            data:
              temperature: 69

      # MORNING WAKE-UP
      - conditions:
          - condition: time
            after: "05:30:00"
            before: "07:30:00"
          - condition: state
            entity_id: !input bedtime_boolean
            state: "off"
        sequence:
          - service: !input notify_service
            data:
              target: [!input notify_target]
              message: |
                ☀️ Morning Wake-up Event: Thermostat temperatures adjusted.
                Upstairs Setpoint: 70°F
                Downstairs Setpoint: 72°F

          - service: climate.set_hvac_mode
            target:
              entity_id: "{{ thermostats }}"
            data:
              hvac_mode: heat

          - service: climate.set_temperature
            target:
              entity_id: !input upstairs_thermostat
            data:
              temperature: 70

          - service: climate.set_temperature
            target:
              entity_id: !input downstairs_thermostat
            data:
              temperature: 72

      # DAYTIME LOGIC (Outside Morning Window)
      - conditions:
          - condition: or
            conditions:
              - condition: time
                before: "05:30:00"
              - condition: time
                after: "07:30:00"
          - condition: state
            entity_id: !input bedtime_boolean
            state: "off"
        sequence:
          - choose:
              # WINTER
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: winter
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🏠 HVAC Event (Day): Heat turned on (Winter)!

                        Upstairs Setpoint: {{ 68 if states(input.occupancy_zone)|int > 0 else 64 }}°F
                        Downstairs Setpoint: {{ 70 if states(input.occupancy_zone)|int > 0 else 62 }}°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: heat

                  - service: climate.set_temperature
                    target:
                      entity_id: !input upstairs_thermostat
                    data:
                      temperature: "{{ 70 if states(input.occupancy_zone)|int > 0 else 64 }}"

                  - service: climate.set_temperature
                    target:
                      entity_id: !input downstairs_thermostat
                    data:
                      temperature: "{{ 71 if states(input.occupancy_zone)|int > 0 else 64 }}"

              # SUMMER
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: summer
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🏠 HVAC Event (Day): Cool turned on (Summer)!

                        Upstairs Setpoint: {{ 72 if states(input.occupancy_zone)|int > 0 else 77 }}°F
                        Downstairs Setpoint: {{ 73 if states(input.occupancy_zone)|int > 0 else 78 }}°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: cool

                  - service: climate.set_temperature
                    target:
                      entity_id: !input upstairs_thermostat
                    data:
                      temperature: "{{ 73 if states(input.occupancy_zone)|int > 0 else 77 }}"

                  - service: climate.set_temperature
                    target:
                      entity_id: !input downstairs_thermostat
                    data:
                      temperature: "{{ 74 if states(input.occupancy_zone)|int > 0 else 78 }}"

              # MILD
              - conditions:
                  - condition: state
                    entity_id: !input weather_sensor
                    state: mild
                sequence:
                  - service: !input notify_service
                    data:
                      target: [!input notify_target]
                      message: >
                        🏡 HVAC Event (Day): Heat/Cool mode enabled (Mild Weather)!

                        Upstairs Range: {{ 68 if states(input.occupancy_zone)|int > 0 else 64 }}°F - {{ 74 if states(input.occupancy_zone)|int > 0 else 78 }}°F
                        Downstairs Range: {{ 67 if states(input.occupancy_zone)|int > 0 else 62 }}°F - {{ 73 if states(input.occupancy_zone)|int > 0 else 77 }}°F

                  - service: climate.set_hvac_mode
                    target:
                      entity_id: "{{ thermostats }}"
                    data:
                      hvac_mode: heat_cool

                  - service: climate.set_temperature
                    target:
                      entity_id: !input upstairs_thermostat
                    data:
                      target_temp_high: "{{ 73 if states(input.occupancy_zone)|int > 0 else 78 }}"
                      target_temp_low: "{{ 67 if states(input.occupancy_zone)|int > 0 else 64 }}"

                  - service: climate.set_temperature
                    target:
                      entity_id: !input downstairs_thermostat
                    data:
                      target_temp_high: "{{ 74 if states(input.occupancy_zone)|int > 0 else 77 }}"
                      target_temp_low: "{{ 68 if states(input.occupancy_zone)|int > 0 else 62 }}"

Hello bigverm23,

Thanks for contributing to the community with a new Blueprint.
I have a suggestion for you. Many people who are not familiar with directory structures will have problems installing this without the Home Assistant MY tools.
Adding a MY link for this Blueprint to your top post would help them a lot.
Here is the link to make that.
Create a link – My Home Assistant
You need to be a trust level ‘member’ to edit a post. Understanding Discourse Trust Levels