All articles
May 5, 202613 min read

Heat-pump-aware home automation: HVAC scenes that do not trigger aux heat

Most smart-home automations were written for gas furnaces and quietly cost a fortune on a heat pump. Here is how to design scenes, schedules, and geofence routines on Home Assistant, HomeKit, or ecobee that do not trigger expensive auxiliary resistance heat.

Home AssistantHomeKitHVACSmart ThermostatHeat PumpUtah

If you’ve switched a Utah home from gas to a heat pump and your power bill went up instead of down, your automation is probably the reason. Not the heat pump. Not the thermostat. The automation — the schedules, the “coming home” routines, the temperature setbacks someone wrote two years ago for a gas furnace and forgot to update.

Every Alexa routine, HomeKit scene, and Home Assistant automation that says “set the thermostat to 72” is a potential trap on a heat pump. The heat pump tries to comply, runs into a delta-T it can’t close in the time allowed, and the thermostat triggers auxiliary resistance heat — the same 240 V electric- strip heat that’s as expensive to run as a Tesla supercharger. Hours of aux. Quietly. While you’re asleep or at work.

This post is the technical follow-up to our piece on why smart thermostats don’t save Utah homes money — that one covered placement, scheduling, and the consumer-grade gotchas. This one goes deeper on heat-pump-specific automation, what triggers aux heat without you noticing, and how to build scenes in Home Assistant, HomeKit, or your UniFi-adjacent automation layer that actually save money instead of quietly costing it.

How aux heat actually triggers

Most modern thermostats — ecobee, Nest, Honeywell T-series, Mysa — control a heat pump with a small set of relays and a logic loop. The relevant signals are W1 (compressor heat) and W2/AUX (the resistance strips). The thermostat decides to fire W2 in three common scenarios:

  • Setpoint-to-actual gap exceeds threshold. Most thermostats default to triggering aux when the indoor temperature is more than 2–4°F below the setpoint and the compressor has been running for longer than the “aux runtime” threshold (typically 30–60 minutes of uninterrupted compressor without closing the gap).
  • Outdoor temperature lockout. Below a configured outdoor air temperature (usually around 25–35°F by default for a standard heat pump, lower for a cold-climate model), the thermostat assumes the compressor can’t do useful work and skips straight to aux.
  • Defrost cycle. When the outdoor coil is iced over, the heat pump runs in reverse for 5–15 minutes to defrost. The thermostat fires aux during defrost so the house doesn’t feel a cold blast from the indoor air handler.

Aux heat is appropriate in all three of those cases. The problem is that automation routines routinely create a fourth case: a sudden setpoint change that the heat pump can’t close fast enough, which then triggers the “setpoint gap” rule above, even though the heat pump would have gotten there on its own in another 20 minutes for free.

The setback trap

A Nest user in Draper set their thermostat to drop from 71 to 64 overnight, and then back to 71 at 6:15 AM, on the assumption that “cooler at night = less runtime = less money.” That’s how a gas furnace works. On a heat pump, when 6:15 hits and the outside is 18°F, the thermostat sees a 7-degree gap, gives the compressor about 20 minutes to close it, then fires the strips because the gap isn’t closing fast enough.

Two hours of resistance heat at 8 kW costs roughly $2.40 at Rocky Mountain Power residential rates ($0.15/kWh blended for a Utah winter peak tier). Over a 90-day winter, doing that every morning is $216. The setback was supposed to save money. It lost it, with interest.

The fix isn’t to abandon setbacks. It’s to keep the setback shallow (2–3°F max for a heat pump in cold weather) and to let the heat pump ramp the setpoint back up gradually, not in one step. Most decent thermostats expose this as a “smart recovery” or “early start” option — turn it on. Both Nest and ecobee have this; on Honeywell it’s called “adaptive recovery.”

The “I’m home” routine trap

The classic geofence-driven scene: phone crosses the geofence, voice assistant announces “Welcome home,” lights come on, thermostat jumps from 65 to 71. On a gas furnace, that’s 15 minutes of furnace time and $0.40 of gas. On a cold-climate heat pump handling a 6-degree jump in 25°F outdoor weather, that’s 90 minutes of mixed compressor and aux runtime, and most of that 90 minutes is aux because the compressor can’t close the gap fast enough.

The fix: don’t let geofence routines slam the thermostat. Either:

  • Step the setpoint up in 1–2 degree increments over 45–60 minutes (Home Assistant’s climate.set_temperature service in a script, called from the arrival automation).
  • Trigger the warm-up before you arrive, not when you arrive. A 20-minute lead time on the geofence gets the compressor closing the gap before you walk in, on its own power, without aux.
  • Skip the warm-up entirely on weekdays in deep winter and just keep the house at a constant set point. The energy cost of a constant 68°F is often lower than a setback-and-recover cycle on a heat pump.

The “set it and forget it” instinct that gas-furnace households have learned to avoid turns out to be exactly right for heat pumps in cold weather.

Minimum runtime and short-cycle protection

A separate trap: short-cycling. Compressors hate being turned on and off rapidly. A well-meaning automation that says “if motion is detected in the bedroom for more than 5 minutes, raise the thermostat 1 degree, then drop it back when motion stops” can put a heat pump into a two-hour short-cycle pattern that wears the compressor and triggers aux on each ramp.

Set a hard minimum runtime in your automations: once the thermostat moves, don’t move it again for at least 30 minutes. Even better, 60. The marginal comfort gain from a 1-degree change isn’t worth the cost.

If you’re using a multi-zone setup with a separate thermostat per floor, this matters even more. Two thermostats fighting each other (one ramping up while the other is still ramping down) will keep an air handler running at a partial load that’s ideal conditions for triggering aux.

Defrost-cycle aware automation

Heat pumps in Utah winters run defrost cycles regularly — every 30–90 minutes when outdoor temps are between roughly 20 and 38°F with high humidity. During defrost, the system temporarily cools the indoor air, which is exactly why the strips fire automatically.

You can’t prevent defrost. You can prevent automations from making it worse:

  • Don’t schedule big setpoint changes during likely defrost windows. A 6 AM setpoint jump during a defrost cycle is the worst-case stack.
  • Don’t open windows on a schedule with smart shades. Yes, the morning light is great. No, you don’t want shades opening on a south-facing wall at 6:15 AM in January when the heat pump is in defrost — the radiative loss through cold glass is real.
  • Tell the thermostat the heat pump is variable-speed if it is. Modern inverter-driven heat pumps modulate continuously and benefit from being told. Most thermostats have a “heat pump type” setting that defaults to single-stage. Set it correctly.

What good heat-pump scenes look like

Examples we actually deploy on Home Assistant and HomeKit installs in Lehi, Holladay, and Park City:

Morning warm-up, gradual

  • Trigger: 5:00 AM, weekdays, in heating mode, outdoor temp below 40°F.
  • Action: setpoint += 1°F. Wait 20 minutes.
  • Action: setpoint += 1°F. Wait 20 minutes.
  • Action: setpoint += 1°F. Done by 6:00 AM.

This achieves a 3-degree morning ramp without triggering aux, and the family wakes up at the target temperature without a 90-minute strip-heat bill.

Geofence arrival, with lead time

  • Trigger: phone enters “arrival pre-zone” (a larger geofence centered on the house, ~15 miles).
  • Condition: it’s after 4 PM, current setpoint is in “away” mode.
  • Action: setpoint += 1°F per 15 minutes until home setpoint reached or phone enters inner geofence.

The car gets you home in 25–40 minutes from 15 miles out; the compressor uses that time to close the gap on its own power.

Aux-disable override during shoulder seasons

  • Trigger: outdoor temperature above 40°F.
  • Action: thermostat “disable aux” setting on. Compressor only.

In shoulder weather the compressor can do everything; aux is just expensive. Many thermostats hide this behind “allow emergency heat” or “aux runtime threshold” — setting a high threshold (90+ minutes) effectively disables aux for typical recovery scenarios while keeping it available for true emergencies.

Window-open detection

  • Trigger: door or window contact sensor open for more than 5 minutes.
  • Action: thermostat “hold” mode at current temperature, no automatic setpoint changes, until the window is closed for 10 minutes.
  • Notification to the homeowner’s phone: “Window left open in Master, heating paused.”

The most expensive thing a heat-pump house can do is run aux all day to maintain a setpoint while a basement window is cracked open. We see this all the time. The fix is a $20 contact sensor and a 10-line automation.

What the dashboard should show

Every heat-pump-equipped house we install gets a Home Assistant or HomeKit dashboard tile that shows three numbers in real time:

  1. Aux runtime today. A simple counter of minutes the W2 relay has been energized in the last 24 hours. Anything over 60 minutes on a not-extreme day is a flag to investigate.
  2. Aux runtime month-to-date. A running total. Most utility bills are impossible to interpret in real time; aux-runtime is a leading indicator.
  3. Outdoor air temperature. Aux at 38°F outside is a problem. Aux at 12°F outside is normal.

Most ecobee thermostats expose runtime data via their cloud API. Nest is harder — the Google Home API exposes some runtime but not aux separately. Honeywell T-series with the older local API exposed it well; the newer cloud-only models are a regression. Tracking aux runtime is the single most useful diagnostic a heat-pump household can have.

The Alexa routine warning

We have to call this out specifically because we see it so often. Alexa routines that change thermostat setpoints are the leading cause of surprise aux runtime in the homes we audit. The voice command flow goes:

  1. Family member at 11 PM: “Alexa, set bedroom to 68.”
  2. Alexa applies the change to whichever zone is associated with the room.
  3. The next morning’s automation kicks in to set the house to 71 again, but now starting from 64 (overnight setback) or 68 (manual change), not 70.
  4. The bigger gap triggers aux during the morning ramp.

The cumulative effect of a half-dozen voice-driven nudges over a week can flip a heat-pump household from saving money to losing $5 per day. Lock voice assistants out of the thermostat in winter, or give them only narrow permissions (e.g., +/− 1 degree, no arbitrary jumps). Lock down voice control of lighting and shades separately so the family doesn’t feel like Alexa got worse — just constrain the thermostat.

What about cold-climate heat pumps?

The newer generation of cold-climate heat pumps (Mitsubishi Hyper-Heat, Daikin Aurora, Bosch IDS, the latest LG Therma V) can hold capacity down to −13°F or lower. They change this entire calculus — the compressor can close large gaps without aux even on the coldest Utah morning, and the strip heat is genuinely emergency-only.

If you have one of these, set the outdoor lockout temperature for aux to −5°F or lower (most installs ship with the default of 25°F, which is wrong for these units), and run them with shallower setbacks. They’re forgiving in ways the older units aren’t.

If you have a standard heat pump (3–15 SEER rated, no “hyper” or “aurora” marketing), the rules in this post all apply aggressively.

Bottom line

A heat pump in a Utah winter rewards small, gradual setpoint changes and punishes large, sudden ones. Almost every smart-home automation pattern that works on a gas furnace — deep setbacks, geofence-triggered jumps, voice-driven nudges — needs to be re-engineered or disabled when the same thermostat is driving a heat pump. The thermostat will obediently fire aux to make those automations work. You just won’t see it on the bill until February.

The good news: a few hours of automation redesign — gradual ramps, lead-time geofences, contact-sensor pauses, an aux-runtime dashboard tile — pays for itself in the first month. The heat pump that “costs more to run than the gas furnace did” almost always isn’t the heat pump’s fault. It’s the routines that haven’t caught up yet.

Keystone Integration designs Home Assistant and HomeKit automations for Lehi, Holladay, Draper, Park City, and Wasatch Front homes — tuned for heat pumps, solar-plus-storage, and the way Utah utilities actually bill. See the full service list or get in touch to audit the routines that are quietly costing you money.