A smart meter reports only the household's total power P(t) โ one number, no per-device breakdown. Non-Intrusive Load Monitoring (NILM) recovers per-appliance behaviour from that single trace by watching for step changes:
ฮP(t) = P(t) โ P(tโฮt)
match(ฮP) = argmin_i โ|ฮP| โ S_iโ subject to โ|ฮP| โ S_iโ < ฯ_i
where S_i = steady-state power draw ("signature") of appliance i
ฯ_i = its matching tolerance
This is the classic Hart (1992) edge-detection-and-matching approach: every appliance has a roughly constant power draw while running, so turning one on or off produces a step of a fairly predictable size in the aggregate trace. A positive step near an appliance's signature is read as that device switching on; a negative step of similar size is read as it switching off.
- Edge threshold โ steps smaller than this are ignored as meter jitter. Too low and noise gets misread as phantom appliances; too high and small loads (lights) never get detected.
- Meter noise โ random measurement error added to every sample, exactly like a real AMI smart meter's quantization and sensor noise.
- Disaggregation accuracy โ the fraction of appliances whose inferred (detected) on/off state currently matches the true state. Push the threshold too low or the noise too high and accuracy drops as the matcher grabs the wrong device or misses real edges.
Real NILM systems (used in modern AMI / smart-grid demand-response programs) go further with combinatorial optimisation and machine-learned signatures, but the step-detect-and-match core is the same one running here. This 2D view draws the aggregate trace as a scrolling line chart: drag to scrub back through history, scroll/pinch to zoom the time axis, and use "Jump to live" to snap back to the current sample.