# Analytics snippet placeholder — HearthNodes (gatherer.top) # Paste the measurement snippet here (server.js inlines any content that contains # a markup tag into on every page). No GA4 property is assigned to this # site yet, so leave this file as comments only and the build emits no tracking # code.
HearthNodesgatherer.top live 11/28 EN 中文

Nightly phantom-load audit that finds the 38 W you forgot about

At 03:00 the house is quiet, so the automation reads every metering plug and ranks standby draw. A first run found 38 W of permanent load — 333 kWh a year — from a games console, a printer and an old set-top box.

protocol · zigbee latency · 60000 ms power · mains published · 2026-09-05 3 devices
Automation YAML energy-phantom-load-nightly-audit.yaml
# HearthNodes recipe 19 - phantom load audit
alias: "Energy - nightly phantom load audit"
id: hn_energy_phantom_audit
description: "03:00 standby survey of every metering plug, ranked, weekly digest"
mode: single
max_exceeded: silent

trigger:
  - platform: time
    at: "03:00:00"

variables:
  metering_plugs: "{{ states.switch | selectattr('entity_id','search','_plug_') | map(attribute='entity_id') | list }}"
  reporting: >-
    {{ metering_plugs | selectattr('state','ne','unavailable') | list | count }}
  report_ratio: "{{ (reporting | int(0) / metering_plugs | count * 100) | round(0) }}"

condition:
  - condition: state
    entity_id: binary_sensor.house_occupied
    state: "off"
  - condition: numeric_state
    entity_id: sensor.outdoor_temperature
    above: 5
  - condition: template
    value_template: "{{ report_ratio | int(0) >= 80 }}"

action:
  - service: script.rank_standby_loads
    data:
      devices: "{{ metering_plugs }}"
      min_watts: 3
  - service: input_number.set_value
    target:
      entity_id: input_number.house_baseline_watts
    data:
      value: >-
        {{ expand(metering_plugs) | map(attribute='attributes.power_w')
           | map('float', 0) | sum | round(1) }}
  - service: notify.mobile_app_primary
    data:
      title: "Standby audit"
      message: >-
        Total {{ states('input_number.house_baseline_watts') }} W.
        Meter residual {{ states('sensor.meter_unaccounted_watts') }} W.
        Top: {{ states('sensor.standby_worst_offender') }}

# Fewer than 80 percent of plugs reporting -> the audit is skipped rather than
# run on partial data, and the notification says so. Loads on the protected list
# (alarm, smoke, medical, sump, fridge) are never given a cutoff suggestion.
Trigger · time

time

Every night at 03:00, when the household's baseline consumption is at its most stable.

Nightly phantom-load audit that finds the 38 W you forgot about topology

Step-by-step

  1. sensor.*_powerRead every metering plug's instantaneous power and rank by value; anything drawing more than 3 W while its appliance is off is a candidate. read all · rank descending
  2. sensor.house_baselineKeep a 7-day rolling median so a single unusual night does not become the reference. record · 7-day rolling median
  3. notify.mobile_appSend one weekly digest with the top five standby loads converted to kWh and currency per year, because watts are abstract and money is not. weekly digest · top 5 offenders with kWh/year
  4. switch.*_socketFor each confirmed offender, offer a timed cutoff that the household can accept with one press rather than editing an automation. offer a scheduled cutoff for confirmed offenders
Step-by-step
Measure at 03:00, not at bedtime

At 23:00 the dishwasher may still be running and someone may still be watching television. 03:00 is the hour when a household's consumption is closest to its true standby floor. If your household is genuinely active at 03:00, pick a different quiet hour and keep it consistent — the comparison matters more than the specific time.

Reconcile the plugs against the main meter

If the plugs sum to 45 W but the main meter says 130 W, you have 85 W of un-metered load — a doorbell transformer, a garage opener, an old alarm panel. The residual is where the surprising findings usually live, and it costs nothing to compute.

Report watts as money per year

38 W sounds trivial and is 333 kWh a year. Express every finding as an annual cost at your actual tariff; that is the number that makes someone walk over and unplug the set-top box. Include the tariff you used so the arithmetic can be checked.

Hardware

ModelProtocolLinkRole in this chain
Metering plugs with 0.1 W resolution zigbee wireless Resolution matters: a 1 W resolution plug cannot distinguish a 0.4 W phantom from zero, and most of the interesting findings are between 0.5 W and 5 W.
Whole-house energy meter zigbee wired Provides the total that the individual plugs are reconciled against; the gap is the un-metered load.
Home/away presence (aggregate) zigbee wireless Only the aggregate home/away boolean is used, so the audit cannot infer who is in which room at night.

When it fails

If fewer than 80 % of plugs report, the audit is skipped rather than run on partial data — a partial audit produces a wrong baseline that then poisons the weekly comparison for a month. The notification states plainly that the audit did not run and why.

Recipes on the same trigger source

Terms Informational only. These recipes control mains electricity, water and physical access. You are responsible for local electrical and plumbing codes, for fusing and isolation, and for testing every fail-safe yourself. Nothing here is professional engineering, legal or safety advice.