MainsKeeper Product & System Guide Edition 0.2.3

Chapter 2 · Accepted patterns · Open hardware validation

Deployment patterns

Collectors sit beside UPS hardware in a few recurring shapes. ESP32 probes are constrained; arbitrary UPS compatibility must not be implied.

Deployment-pattern comparison

Figure 3. Deployment-pattern comparison

Takeaway: Reads and powers end on the host, the load, or the probe they describe. ESP32 is not a full NUT stack.

The four patterns

  1. One UPS, one host collector — USB or local protocol on the machine that also runs workloads.
  2. One UPS serving several machines — a single monitoring collector reads the UPS; powers relationships record the loads.
  3. One collector, multiple UPS sources — USB plus network NUT/SNMP identities under a site namespace.
  4. Equipment-only locations — Raspberry Pi or validated ESP32-S3 probe as site witness without a full workstation.

Platform / capability matrix

PlatformCollectorCLISecrets (design)Notes
macOSHost agentsudo when elevatingKeychainAccepted paths in contract
WindowsHost agentElevated Admin (no sudo)DPAPIAccepted
Fedora / LinuxHost agentsudosecrets.d 0600Accepted
Raspberry PiHost agentsudoas LinuxCommon witness
ESP32-S3Firmware probeNone — setup pageOn deviceOpen validate matrix

NUT and protocol adapters

Accepted On host collectors, NUT ships inside MainsKeeper’s adapter layer — operators are not asked to assemble NUT themselves. Network identity is namespace | protocol | host | port | upsName (SNMP omits ups name). A host alone is never a UPS identity.

Accepted ESP32 does not run the full NUT stack. Design scope is USB-HID power-device UPSs on ESP32-S3 with USB-OTG host. Fixture flash-ring sizes and target caps are Illustrative — validated board/UPS list pending.

Do not imply. Sample ESP32 retention (~384 KB / ~6 h @ 30 s) and max targets (3) are not support promises until boards and adapters are validated.
Technical detail — elevation and local files

Read-only status needs no elevation. Local config/secret changes follow platform policy. Logs: macOS /Library/Logs/MainsKeeper/; Linux journalctl -u mainskeeperd; Windows Event Viewer + ProgramData. ESP32: status in dashboard only.