The station report, in a terminal.
Like a METAR, but for people at 2 a.m.: a fixed column of short codes you can scan, each followed by the same fact in plain words. The forecast line always says “UPS estimate”. Colour only reinforces — the NO_COLOR rendition carries every meaning.
Colour rendition
$ mainskeeper status DUPLEX STATION duplex-pi-probe 30 SEP 2026 15:22 local host Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min (since 14:52) roles UPS monitoring on · connectivity monitoring on CONTACT OK server connected · heartbeat 3 s ago · recovered 15:02 UPS UTIL Duplex Utility UPS · on utility · reading 3 s old CHG 78%+ charge 78%, recharging (state of charge, not battery health) LOD 27% load 27% INP 119V input 119 V TMP // temperature not reported (// = not reported, never 0) FCST 29M est. runtime 29 min — UPS estimate (a forecast, not a measurement) PROBE 3/3 3 of 3 targets answering · last failure window 13:41–15:02 SYNC UPLD 1,248 pending · 382 of 1,630 uploaded · oldest pending 13:41 last upload 15:21:48 · batch 16/64 · 1 retry (15:19, 503, accepted) est. drain ~22 min (estimate) · buffer 38.2 MB / 512 MB GAP //// 14:30–14:52 no records · utility return time unknown within it codes OK in contact · UTIL on utility · BATT on battery · // not reported FCST UPS estimate · UPLD history uploading · //// no records · [ ] uncertain $ mainskeeper episodes --since yesterday DUPLEX UTILITY UPS time on battery, by observation time TODAY BATT start 14:03 recorded locally · received 15:17 (late report) last record 14:30 · then //// no records 14:30–14:52 (probe offline) utility first observed 14:52 [±90 s] first record after the gap At least 27 minutes on battery; endpoint unknown. Return time unknown — sometime between 14:30 and 14:52. 29 SEP BATT 21:14–21:31 · 17 min on battery (measured) · resolved start record received 21:14:03 · end record received 21:31:05 measures that outage, not battery capacity Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper status DUPLEX STATION duplex-pi-probe 30 SEP 2026 15:22 local host Raspberry Pi OS 12 · mainskeeperd 0.4.2 roles UPS monitoring on · connectivity monitoring on CONTACT OK server connected · heartbeat 3 s ago UPS UTIL Duplex Utility UPS · on utility · reading 3 s old CHG 100% charge 100% (state of charge, not battery health) LOD 27% load 27% INP 119V input 119 V TMP // temperature not reported (// = not reported, never 0) FCST 35M est. runtime 35 min — UPS estimate (a forecast, not a measurement) PROBE 3/3 3 of 3 targets answering · no failures today SYNC CURR 0 pending · history current GAP NONE no gaps in the last 24 h codes OK in contact · UTIL on utility · BATT on battery · // not reported FCST UPS estimate · CURR history current $ mainskeeper episodes --since yesterday DUPLEX UTILITY UPS time on battery, by observation time TODAY NONE no time on battery today 29 SEP BATT 21:14–21:31 · 17 min on battery (measured) · resolved start record received 21:14:03 · end record received 21:31:05 measures that outage, not battery capacity Fictional demonstration data — not real equipment. Output format is a design proposal.
NO_COLOR rendition
$ mainskeeper status
DUPLEX STATION duplex-pi-probe 30 SEP 2026 15:22 local
host Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min (since 14:52)
roles UPS monitoring on · connectivity monitoring on
CONTACT OK server connected · heartbeat 3 s ago · recovered 15:02
UPS UTIL Duplex Utility UPS · on utility · reading 3 s old
CHG 78%+ charge 78%, recharging (state of charge, not battery health)
LOD 27% load 27%
INP 119V input 119 V
TMP // temperature not reported (// = not reported, never 0)
FCST 29M est. runtime 29 min — UPS estimate (a forecast, not a measurement)
PROBE 3/3 3 of 3 targets answering · last failure window 13:41–15:02
SYNC UPLD 1,248 pending · 382 of 1,630 uploaded · oldest pending 13:41
last upload 15:21:48 · batch 16/64 · 1 retry (15:19, 503, accepted)
est. drain ~22 min (estimate) · buffer 38.2 MB / 512 MB
GAP //// 14:30–14:52 no records · utility return time unknown within it
codes OK in contact · UTIL on utility · BATT on battery · // not reported
FCST UPS estimate · UPLD history uploading · //// no records · [ ] uncertain
$ mainskeeper episodes --since yesterday
DUPLEX UTILITY UPS time on battery, by observation time
TODAY BATT start 14:03 recorded locally · received 15:17 (late report)
last record 14:30 · then //// no records 14:30–14:52 (probe offline)
utility first observed 14:52 [±90 s] first record after the gap
At least 27 minutes on battery; endpoint unknown.
Return time unknown — sometime between 14:30 and 14:52.
29 SEP BATT 21:14–21:31 · 17 min on battery (measured) · resolved
start record received 21:14:03 · end record received 21:31:05
measures that outage, not battery capacity
Fictional demonstration data — not real equipment. Output format is a design proposal.$ mainskeeper status
DUPLEX STATION duplex-pi-probe 30 SEP 2026 15:22 local
host Raspberry Pi OS 12 · mainskeeperd 0.4.2
roles UPS monitoring on · connectivity monitoring on
CONTACT OK server connected · heartbeat 3 s ago
UPS UTIL Duplex Utility UPS · on utility · reading 3 s old
CHG 100% charge 100% (state of charge, not battery health)
LOD 27% load 27%
INP 119V input 119 V
TMP // temperature not reported (// = not reported, never 0)
FCST 35M est. runtime 35 min — UPS estimate (a forecast, not a measurement)
PROBE 3/3 3 of 3 targets answering · no failures today
SYNC CURR 0 pending · history current
GAP NONE no gaps in the last 24 h
codes OK in contact · UTIL on utility · BATT on battery · // not reported
FCST UPS estimate · CURR history current
$ mainskeeper episodes --since yesterday
DUPLEX UTILITY UPS time on battery, by observation time
TODAY NONE no time on battery today
29 SEP BATT 21:14–21:31 · 17 min on battery (measured) · resolved
start record received 21:14:03 · end record received 21:31:05
measures that outage, not battery capacity
Fictional demonstration data — not real equipment. Output format is a design proposal.Codes, in words
| Code | Meaning |
|---|---|
| OK | The server is in contact with this probe now. “recovered 15:02” is fresh evidence of recovery and is never held back by the upload backlog. |
| UTIL / BATT | UPS on utility / on battery — observed. |
| CHG 78%+ | State of charge, rising. Not battery health. |
| // | Not reported by this device. Never printed as 0. |
| FCST 29M | The UPS’s own runtime estimate. A forecast, labelled “UPS estimate” every time. |
| UPLD / CURR | Stored history is uploading / history is current. A separate attribute from contact and recovery. |
| //// | No records for that span. A gap stays a gap; the first record after it does not say when power returned. |
| [±90 s] | Uncertain timestamp, bracketed (here: before the clock synced at 14:54). |
- Observation time firstEvery event is listed at the time it happened on the probe; when it reached the server follows in words (“received 15:17”).
- Measured vs estimated“17 min on battery (measured)” and “est. runtime 29 min — UPS estimate” never share a column or a unit code.
- Monitoring onlyThe CLI reports and configures notifications. It has no shutdown, outlet or self-test commands.