Real Savings: Standby, Rate Plans, PV Surplus, Dynamic Pricing, and Payback-Aware Automations

Real Savings: Standby, Rate Plans, PV Surplus, Dynamic Pricing, and Payback-Aware Automations

Module 17 · Lesson 7

Real Savings: Standby, Rate Plans, PV Surplus, Dynamic Pricing, and Payback-Aware Automations

In Lessons 1 through 6 you built the foundation: measurement, the Energy Dashboard, costs, whole-home measurement, and solar. Now we move from data to decisions. This isn't about switching on as many automations as possible. It's about knowing when to switch something on, when to switch it off, and when it's better to just send a notification.

This lesson ties standby, rate plans, PV surplus, and dynamic prices into practical scenarios. I'll also show three levels of action: a plain notification, a semi-automatic suggestion, and a full automation with an override. Plan on about 75 to 90 minutes.

This lesson's core rule
An energy automation only makes sense
once the decision follows from the data, not just from the fact that something can technically be automated.

Savings start with observation

Before you write your first payback-aware automation, you need a few days or weeks of data. Without it, you don't know whether standby draw is 5 W or 50 W, whether your PV surplus at noon is 2 kW or 200 W, or whether a dynamic price during a given period is genuinely low relative to your own thresholds and billing rules.

1. Log a device's or the whole home's usage for a week.

2. Check when you produce solar and when you export.

3. Compare against a dynamic price, if you have the integration from Lesson 6.

4. Only then pick one decision to automate.

Real savings versus apparent savings
Switching off a device that draws 3 W around the clock saves about 26 kWh a year. At $0.15/kWh, that's roughly $4 a year. A $25 Zigbee outlet might pay for itself eventually, but only after several years. An automation makes sense when the payoff outweighs the cost of the hardware, your time, and the household's patience.

Standby: when to switch off, and when it isn't worth it

Standby is low power draw when a device is technically switched off but still energized. In Lesson 4 you measured standby through an outlet and sent notifications about it. Here we sharpen when that actually makes financial sense.

Situation Worth it?
A desk with a monitor, router, chargers: 20-80 W combined overnight Often yes, if you already have the outlet
A single 2-5 W charger Probably not, unless you're buying the outlet anyway
A TV, console, set-top box: convenient one-switch shutoff Yes, as convenience plus savings
A fridge, router, NAS, alarm system Don't automate shutoff

The rule from Lesson 4 still holds: notification first, an optional auto-shutoff second, with an input_boolean off by default. Standby is a good first automation topic, because it's easy to measure and verify.

Rate plans in plain terms

A rate plan is how you're billed for energy by your utility. Home Assistant can't switch your rate plan for you, but you need to know which one you're on, because it decides whether an automation even makes sense.

A flat-rate plan: one rate around the clock. Simple. "Cheaper hours" automations make less sense here, unless you're on a dynamic pricing plan.

A time-of-use plan: cheaper energy at night, pricier during the day, sometimes called an off-peak plan, or Economy 7 style in the UK. Shifting a dishwasher, washing machine, or EV charging to overnight makes sense here.

A weekend or scheduled-window plan: cheaper energy on weekends or specific hours. Requires checking the exact windows in your own rate plan.

A rate plan isn't a dynamic price
A time-of-use plan describes fixed cheaper windows written into your agreement with your utility. A dynamic or wholesale price changes continuously over time. If you export solar under a net metering or export-credit arrangement, you may have yet another set of valuation rules. Check your agreement before you tie an automation to a dynamic price.

Don't assume hours from the internet
Check your cheaper-rate windows in your own agreement or on your utility's website. Hours can vary by plan, utility, and region. Treat any example time in this lesson as a pattern, not a universal fact.

PV surplus: when to switch on a device

A PV surplus happens when you're producing more than the home is using and you start exporting to the grid. That's a sensible moment to run a device you'd otherwise have to power from the grid later anyway: a water heater, dishwasher, washing machine, dryer, or EV charger.

To judge a surplus, you need a genuine export signal, or negative grid power with a known sign convention. "PV above 1500 W and low import" alone doesn't mean a surplus: the home could still be buying energy from the grid. The most reliable option is a dedicated export power sensor.

template:
  - binary_sensor:
      - name: "PV Surplus Now"
        unique_id: pv_surplus_now
        icon: mdi:solar-power
        availability: >
          {{ states('sensor.export_power') not in ['unknown', 'unavailable', 'none'] }}
        state: >
          {{ states('sensor.export_power') | float > 1500 }}
        delay_on: "00:10:00"
        delay_off: "00:05:00"

The 1500 W and 200 W thresholds are examples
Adjust them to your own installation. A small 3 kWp system gives different thresholds than a large 10 kWp one with battery storage.

Why delay_on and delay_off
PV production can change minute to minute from passing clouds. delay_on and delay_off in the binary sensor already give you hysteresis. Don't also stack a for: 10 minutes on the same condition in an automation, or the notification will arrive after about 20 minutes, not 10. Either delay in the binary sensor, or for in the automation, not both stacked without a deliberate reason.

Hysteresis: so the automation doesn't flap every minute

With energy, hysteresis, the gap between your on-threshold and off-threshold, matters a lot. If you switch a device on at 1500 W of surplus and off at the same 1500 W, the automation can flap constantly. It's better to switch on at a higher threshold and only switch off after a longer dip, or at a much lower threshold.

Good: switch on after 10 minutes of surplus, switch off only after several minutes without a surplus.

Bad: switch on and off right at the same power boundary.

Dynamic pricing: when the price is low, and when it's high

A dynamic wholesale price changes over time, but it isn't automatically the buy price under your own agreement. For decisions about drawing power, use the price coming from your dynamic rate plan, or your own buy-price sensor. A wholesale price can matter for a solar export credit, or when your own plan is genuinely tied to the market.

A low dynamic price: a sensible moment to charge a battery, run a device with a delayed start, or heat water, if you don't have a PV surplus.

A high dynamic price: better to limit grid draw and use your own PV wherever that genuinely makes sense.

Tomorrow's price: many dynamic-price integrations publish next-day prices in the afternoon. You can schedule a dishwasher cycle or EV charging ahead of time.

A dynamic price isn't automatically your buy price
A wholesale price can influence what your export is worth. It doesn't mean that's exactly what you pay per kWh from the grid. To control purchases, use the price from your own agreement, your supplier's markup, and delivery costs. On an ordinary flat-rate plan, running a dishwasher "because the wholesale price is low" can still mean you're buying at your fixed rate, if there's no PV surplus involved.

Dynamic pricing and solar: not every surplus has the same value

This distinction matters. Energy used on-site from your own PV is usually the most valuable to you, because you're not buying it from the grid. Exported energy has a value that depends on your net metering or export-credit arrangement and the current market price. Energy drawn from the grid at a high dynamic price costs more than at a low one.

Energy source Typical value to the household
PV self-consumption Highest, since you avoid buying from the grid
PV export at a low dynamic price Low, better to use the energy on-site
PV export at a high dynamic price Higher, but still depends on your export rules
Import at a high dynamic price The most expensive option, worth avoiding

That's why "switch on the water heater when there's a PV surplus" often makes more sense than "switch on the water heater when the dynamic price is low," if you're already producing at that same time. Use your own energy first, then optimize against the market price.

A simple payback threshold

Before automating a device, do a rough calculation of whether it's worth it. The simple formula from Lesson 3 is enough.

An example
A 2000 W device running 2 hours a day = 4 kWh a day = about 120 kWh a month. At $0.15/kWh, that's about $18 a month. If you shift half of that usage to cheaper energy or your own PV, the real saving is about $9. That's already a sensible automation target. A 5 W standby load is a completely different scale.

You can keep thresholds in an input_number, so you can adjust them easily without editing the automation.

input_number:
  cheap_price_threshold_per_mwh:
    name: "Cheap Price Threshold"
    min: 0
    max: 400
    step: 1
    unit_of_measurement: "$/MWh"
    icon: mdi:cash-minus
    initial: 60

Three modes: notify, semi-automatic, automatic

Don't jump straight to a full automation. In the energy module we use three levels. Each one requires more trust in the data and more buy-in from the household.

Mode What HA does When
Notification Only informs Always, to start
Semi-automatic Suggests an action, you confirm it Once notifications are on point
Automatic Switches on or off by itself Once you have an override and reliable data

input_boolean as an automation override

Every payback-aware automation should have a kill switch. In Lesson 4 you used an input_boolean as an override for standby auto-shutoff. We apply the same mechanism more broadly here: one switch per scenario, off by default.

input_boolean:
  auto_pv_water_heater:
    name: "Auto: Water Heater on PV Surplus"
    icon: mdi:water-boiler
    initial: false

  auto_price_dishwasher:
    name: "Auto: Dishwasher at a Cheap Price"
    icon: mdi:dishwasher
    initial: false

The household's comfort
An energy automation only works if the household accepts it. A dishwasher switched on at a "weird" moment, or a router that gets switched off, is a quick way to end the experiment. It's better to start with a notification and one device that doesn't bother anyone.

Payback-aware automation examples

Below are six scenarios. Each starts with a notification. The automatic version requires the input_boolean override to be on. Swap entity names for your own.

A water heater only with its own safeguards
Don't control a heating element or water heater the way you'd control a plain lamp. The device needs its own thermostat, a temperature safeguard, and correct electrical installation. Home Assistant can decide when to supply power or send a signal, but it can't replace the device's own safety features.

1. Water heater on PV surplus (notification)

automation:
  - alias: "Energy: water heater, PV surplus"
    description: "Suggests switching on the water heater during a PV surplus"
    mode: single
    triggers:
      - trigger: state
        entity_id: binary_sensor.pv_surplus_now
        to: "on"
    conditions:
      - condition: state
        entity_id: switch.water_heater
        state: "off"
    actions:
      - action: notify.mobile_app_your_phone
        data:
          title: "PV Surplus"
          message: "Confirmed PV surplus (export). You can switch on the water heater."

2. Water heater on PV surplus (automatic with override)

automation:
  - alias: "Energy: water heater on confirmed PV surplus"
    description: "Controls heating consent only under safe conditions"
    mode: restart
    triggers:
      - trigger: state
        entity_id: binary_sensor.pv_surplus_now
        to: "on"
    conditions:
      - condition: state
        entity_id: input_boolean.auto_pv_water_heater
        state: "on"
      - condition: state
        entity_id: switch.water_heater
        state: "off"
      - condition: numeric_state
        entity_id: sensor.water_heater_temperature
        below: 55
      - condition: time
        after: "08:00:00"
        before: "20:00:00"
    actions:
      - action: switch.turn_on
        target:
          entity_id: switch.water_heater
      - wait_for_trigger:
          - trigger: state
            entity_id: binary_sensor.pv_surplus_now
            to: "off"
            for:
              minutes: 5
          - trigger: numeric_state
            entity_id: sensor.water_heater_temperature
            above: 59
        timeout:
          hours: 2
        continue_on_timeout: true
      - action: switch.turn_off
        target:
          entity_id: switch.water_heater
      - action: notify.mobile_app_your_phone
        data:
          title: "Water Heater"
          message: "Heating cycle finished, or stopped after the surplus ended."

3. Dishwasher at a cheap dynamic price (notification)

automation:
  - alias: "Energy: dishwasher, cheap dynamic price"
    description: "Reminds you about the dishwasher when the price drops below the threshold"
    mode: single
    triggers:
      - trigger: template
        value_template: >
          {{ states('sensor.energy_price_now_per_mwh') | float(9999)
             < states('input_number.cheap_price_threshold_per_mwh') | float(60) }}
        for:
          minutes: 10
    conditions:
      - condition: state
        entity_id: switch.dishwasher
        state: "off"
      - condition: time
        after: "07:00:00"
        before: "22:00:00"
    actions:
      - action: notify.mobile_app_your_phone
        data:
          title: "Cheap Energy"
          message: >
            Price: {{ states('sensor.energy_price_now_per_mwh') }} $/MWh.
            A good moment for the dishwasher.

4. Washing machine on a cheaper overnight rate

automation:
  - alias: "Energy: washing machine, overnight rate"
    description: "Reminds you about the washing machine during the cheaper overnight rate"
    mode: single
    triggers:
      - trigger: time
        at: "22:30:00"
    conditions:
      - condition: state
        entity_id: switch.washing_machine
        state: "off"
    actions:
      - action: notify.mobile_app_your_phone
        data:
          title: "Overnight Rate"
          message: "Cheaper energy now. You can start the washing machine."

5. EV charger: PV or a cheap dynamic price

EV charging is its own topic
The example below only suggests a good moment to charge. Controlling a real charger requires knowing your connection's power rating, the number of phases, current limits, and the specific device's integration. Don't start with a fully automated EV charging setup.

automation:
  - alias: "Energy: EV charger, PV or cheap dynamic price"
    description: "Suggests charging when there's a PV surplus or a low dynamic price"
    mode: single
    triggers:
      - trigger: state
        entity_id: binary_sensor.pv_surplus_now
        to: "on"
      - trigger: template
        value_template: >
          {{ states('sensor.energy_price_now_per_mwh') | float(9999)
             < states('input_number.cheap_price_threshold_per_mwh') | float(60) }}
    conditions:
      - condition: state
        entity_id: switch.ev_charger
        state: "off"
    actions:
      - action: notify.mobile_app_your_phone
        data:
          title: "EV Charging"
          message: "A good moment to charge: PV surplus or a low dynamic price."

6. Air conditioning: avoid a high buy price

automation:
  - alias: "Energy: air conditioning during a high buy price"
    mode: single
    triggers:
      - trigger: numeric_state
        entity_id: sensor.energy_buy_price
        above: 0.30
      - trigger: state
        entity_id: climate.living_room_ac
        to: "cool"
    conditions:
      - condition: state
        entity_id: climate.living_room_ac
        state: "cool"
      - condition: numeric_state
        entity_id: sensor.energy_buy_price
        above: 0.30
    actions:
      - action: notify.mobile_app_your_phone
        data:
          title: "High Energy Price"
          message: "The air conditioner is running during a high buy-price period."

Check your AC's state
Not every AC integration reports running status the same way. Some entities have a cool state, others need you to check an operating-mode attribute or a separate power-draw sensor. Adapt the example to your own device.

Devices without a smart plug
If your washing machine or dishwasher has no HA integration, an automation can still send a notification. That's still a valuable semi-automatic option. You don't have to buy a smart outlet for every single device right away.

What not to automate at the start

A fridge, freezer, router, NAS: devices that have to run non-stop.

Main heating without the household's buy-in: comfort matters more than a few dollars in savings.

Everything at once: five automations at once is chaos, and you won't know what's actually working.

Control without measurement: if you don't know how much a device draws, you also don't know whether you're saving anything.

A full automation with no override: always give yourself an input_boolean to disable a scenario.

Common mistakes

You automate without data: you never measured the device or the home, and you're already controlling it.

You mix up PV with dynamic pricing: a PV surplus and a cheap dynamic price are different signals, sometimes they line up, sometimes they don't.

The wrong price threshold: 60 $/MWh against an entity reporting $/kWh, or the reverse.

You ignore your time-of-use plan: you shift a device to daytime even though you have a cheaper overnight window.

You save pennies while wrecking comfort: the household will disable the automation faster than you can tune it.

No input_boolean override: the automation switches something off at the wrong moment and you have no quick way to disable the scenario.

You buy hardware before doing the math: an outlet for a device that draws 3 W and saves about $4 a year.

No hysteresis: the automation switches a device on and off with every brief PV blip.

Notifications at the wrong hours: the automation reminds you about the dishwasher or washing machine when nobody wants to run it.

Controlling a device with no safeguards of its own: Home Assistant doesn't replace a thermostat, a heating-element safeguard, or a charger's own limits.

Assignment: pick one payback-aware automation

To do

☐ Pick one device or scenario: standby, PV surplus, a cheap dynamic price, or a time-of-use plan.

☐ Work out an approximate monthly saving in dollars.

☐ Build the notification-only version of the automation first. Watch it for a week.

☐ Add an input_boolean override if you move to a full automation.

☐ Add a delay or hysteresis so the automation doesn't react to brief PV blips.

☐ Settle on hours when a notification makes sense for the household.

☐ Check whether the device has its own safeguards and whether you can control it safely.

☐ Note when the automation fired sensibly, and when it was a false alarm.

☐ Decide: keep the notification, move to semi-automatic, or enable a full automation with an override.

Key takeaways

Observe first, automate second: the data drives the decision.

Standby matters most at higher draw: count dollars, not just watts.

A time-of-use plan and a dynamic price are different things: check your agreement before you automate.

A PV surplus isn't the same as a cheap dynamic price: use your own energy first.

Hysteresis protects the automation: delay_on and delay_off help it ignore every passing cloud.

Notify, then semi-automatic, then automatic: three steps, not one leap.

input_boolean is your scenario's kill switch: off by default, a safe start.

What's next

In Lesson 8 we'll build a modern energy dashboard: a power flow card, an energy flow view, ApexCharts, and gradient charts. That'll be your everyday panel, showing production, import, export, self-consumption, dynamic pricing, and the effect of your automations all in one place.

If you finish this lesson with one working payback-aware automation, even just as a notification, you've moved from measurement to a real decision. That's the moment Home Assistant starts genuinely saving you money, instead of just showing you numbers.

Finished this lesson?