Context
PanelGroup nodes report health to the PanelBridge over CAN; the bridge surfaces the connected-node list to this client via the DCS-BIOS node-status export — the CONNECTED NODES panel (id · up-time · rx). Today a node is binary: online (green) or gone.
But a node can be alive and serving inputs while a peripheral has failed — e.g. an I2C OLED/expander that the firmware circuit breaker (OpenSkyhawk#164) has taken offline. That node is DEGRADED, not down, and the operator should see the difference.
What's needed here (client)
Once the firmware extends the node-status export with a per-node health field (HEALTHY / DEGRADED) + a fault code (which peripheral/subsystem tripped):
- Parse the new field from the node-status message.
- Render
DEGRADED distinctly in the CONNECTED NODES list — e.g. an amber dot/badge instead of green (keep online = green, offline = dropped, as today).
- Surface which peripheral failed (tooltip or sub-line) from the fault code.
Dependencies / coordination
- Blocked on OpenSkyhawk#163 (firmware:
HeartbeatPayload health field → PanelBridge node-status export). The exact wire encoding is defined there — coordinate the field layout before implementing.
- Firmware seed already in place:
DrumDisplay reports Fault::Mux / Fault::Device (OpenSkyhawk#166), the per-peripheral signal this rolls up.
Acceptance
- A node with a circuit-broken peripheral shows DEGRADED (amber) + the failed peripheral, while staying in the list (not dropped as offline).
- Healthy nodes render unchanged (green).
Context
PanelGroup nodes report health to the PanelBridge over CAN; the bridge surfaces the connected-node list to this client via the DCS-BIOS node-status export — the CONNECTED NODES panel (id · up-time · rx). Today a node is binary: online (green) or gone.
But a node can be alive and serving inputs while a peripheral has failed — e.g. an I2C OLED/expander that the firmware circuit breaker (OpenSkyhawk#164) has taken offline. That node is DEGRADED, not down, and the operator should see the difference.
What's needed here (client)
Once the firmware extends the node-status export with a per-node health field (
HEALTHY/DEGRADED) + a fault code (which peripheral/subsystem tripped):DEGRADEDdistinctly in the CONNECTED NODES list — e.g. an amber dot/badge instead of green (keep online = green, offline = dropped, as today).Dependencies / coordination
HeartbeatPayloadhealth field → PanelBridge node-status export). The exact wire encoding is defined there — coordinate the field layout before implementing.DrumDisplayreportsFault::Mux/Fault::Device(OpenSkyhawk#166), the per-peripheral signal this rolls up.Acceptance