Files
felhom.eu/documentation/audits/poweroff-2026-10-13
admin b4dcf4b373
gates / gates (push) Successful in 6m35s
Power-off spike (Part A) on the N100: plugswitch, wall-power figures, the hub's view
plugswitch.py refuses 'off' unless 20 s of readings show the N100 is already off (standby + 1 W,
no ping); 7 tests, each check red-proofed. By hand: guest shutdown 12 s, host off, 0.0 W; the hub
stayed silent and 'ONLINE' for 18 min; plug off/on did not start the N100, its power button did
(dashboard in 42 s). Wall figures into SIZING.md 4 and sizing.json power (8.5 / 20.7 / 0.0 W).
2026-10-13 19:15:08 +02:00
..

Turning a Felhom machine off — Part A spike on the N100, 2026-10-13

By hand, no product change. Bench: N100 demo-felhom (host felhom-pve, guest 9201), on the Tuya meter plug (scripts/bench/plugmeter.py, 2 s). Times are UTC. No key, device id or token here; the household's e-mail address in the hub page captures is replaced by <household e-mail>.

Results

Step What happened File
A0 plugswitch.py off refused while the N100 ran: „no standby_w" and „the machine answered a ping" (rc 2). First live off refused „only 16 s of readings" — slow plug reads shortened the window (a tool bug, fixed: read until the readings span 20 s); the second was allowed: 5 readings over 22 s at 0.0 W, no ping A4-plug.log
A1 at rest 10 min, 212 rows: 8.46 W mean, 7.2 W median, sd 2.76, 6.3–19.1 W A1-rest.csv
A1 at work Immich deployed through the product (deploy 202 → running in 98 s), 200 photos uploaded (200/0), every job queue empty after 442 s: 20.7 W mean, 24.0 W busiest 60 s, 25.2 W max. Removed through the product: stop 200, remove 200, no leftovers; photo set and bench folder deleted A1-work*.{csv,json,txt,log}
A2 checks no active Proxmox task, no backup/restore/update/swap line in the controller log for 20 min A2-before.txt
A2 guest pct shutdown 9201 --timeout 120 at 16:43:35 → stopped, 12.3 s, rc 0 A2-steps.log
A2 host systemctl poweroff at 16:43:53 → no ping 16:44:06 (13 s) → plug 0.0 W from 16:44:15 A2-A4-power.csv
A2 standby 0.0 W for 18 min, 254 readings (below the plug's 0.1 W step) A2-A4-power.csv
A3 hub 18 min after power-off: hosts page still ONLINE, cloudflared „running (connected)" (the last report), „Last Report 18 min ago", box connection „last connected 16:45 (16 min ago)". No event, no notification — the customer's last-10 list unchanged. Operator mailbox (a second channel): no mail for demo-felhom after 13:58; the 13:58 host_crash_restart mail shows the channel delivers A3-hub-*
A3 stays off no ping, 0.0 W for the whole 18 min A2-A4-power.csv
A4 plug off/on plug off 17:04:17, on 17:04:27. The N100 did NOT start (operator: no monitor at hand, BIOS not read) A4-plug.log
A4 power button operator pressed it: first watts 17:06:03 → ping 17:06:33 (30 s) → dashboard 200 at 17:06:45 (42 s); boot peak 20.4 W A4-boot-*
A4 after crash guard last_boot_unclean: false; guest running, onboot: 1, mounts as before; the same 5 containers healthy; scheduler started with 22 jobs. Hub: report 2 min later, no event (no crash, nothing to recover) A4-after.txt

What this means

  • A clean guest shutdown + host power-off on command works, and costs nothing at the plug.
  • Today the hub does not notice a machine that is off for 18 minutes. Code (05 §4, hub.yaml 45 m): host_stale at 45 min, host_down at 90 min; the controller checker node_stale/node_down too; and every morning at 05:00 the expected_backup_missed / expected_dbdump_missed pair — the operator's mailbox shows exactly this pair for Tester 2, which is off (2026-10-13 05:00).
  • Plug off/on did not start the N100, but at 13:42 the same day it DID restart by itself after an unplanned power cut (hub host_crash_restart). Consistent with the BIOS „after power loss = last state": a machine that was off stays off. Not read in the BIOS (no monitor) — an inference. That is the behaviour the household text promises („press the power button"), so the spike passes for the button; the plug cannot restart a deliberately-off N100 on the bench.