The Orin's own health as envelopes on `yukart/host/<signal>`, retained, once a
second; names and units from contracts `signals.json` (source `host`). Tier 2,
ordered after the broker only.
| Group | Source |
|---|---|
| Temperatures | thermal zones `cpu`, `gpu`, `soc*` (hottest), `tj`; the `cv*` zones read EAGAIN while the vision accelerators are off and are skipped |
| Load and memory | `/proc/stat`, the GPU's `load` (tenths of a percent), `/proc/meminfo` (one pool for CPU and GPU) |
| Power and fan | onboard INA3221 `VDD_IN`; `pwm_tach` |
| Network | `/sys/class/net` counters → kbit/s; WiFi level from `/proc/net/wireless`; the modem from `mmcli -m any -J` every 5 s on its own thread; the tablet link is carrier on `usb0`/`usb1`, counted on `l4tbr0` |
| UPS | INA219 on `/dev/i2c-7``0x41`, below |
- A reading that fails is not published. Its retained value ages and `svc-gw`
shows it stale.
- Service state on `yukart/system/orin-status`: `ready`, or `degraded` with the
failed sources; last will `stopping`.
### UPS battery
- **Read-only.** Only register pointers are ever written; the INA219 stays at its
power-on configuration. Current is shunt voltage (10 µV per bit) over 0.01 Ω
(Waveshare's demo code), positive when charging. Bus voltage is 4 mV per bit.
- **State:** `charging` above +50 mA, `discharging` below −50 mA (on battery:
input lost), `idle` between.
- **Charge** is an estimate from a 21700 resting-voltage table per cell, the
reading corrected by the pack's I·R drop (0.15 Ω, a rough figure) and smoothed.
Waveshare's demo maps 9.0–12.6 V linearly instead, which swings with load.
Steadiest at rest on input power, least reliable while charging.
- The ignition-off policy (orin-nano-env-setup `docs/impl/plans/POWER.md`) needs
the same readings. It should take them from here, or live here, rather than