feat: native WireView Pro II monitoring (detection, serial protocol, live tab) #11

Merged
Pakobbix merged 4 commits from feat/wireview-monitoring into main 2026-10-03 11:44:01 +00:00
Collaborator

Standalone support for the ThermalGrizzly WireView Pro II without depending on the external wireview_reporter exporter.

  • nvcurve/wireview.py — serial protocol (STX/ETX + 16-bit CRC16-CCITT): vendor-data product ID, config version, UID, build string, screen layout, temp/power/current reads; hwmon fallback with per-channel index resolution; udev detection (0x2560/0x0101) + port probing; read timeout and watchdog reconnect
  • server.py — startup detection (root only), 1 Hz poller gated on subscribed clients, WS wireview channel, GET /api/wireview, rejected-product memoization, stale-read race guard
  • frontend — WireView tab (visible when a device is detected): live temp/power/current cards, sparkline history, device info; nullable temp channels
  • tests — 76 tests: parser, CRC, fault classification, hwmon resolution, JSON safety, serial transport vs pty-based fake device

Behavior: tab appears on detection (udev settle + 2 s retry), no serial traffic when idle, reconnects on re-plug, unsupported products memoized, tab disappears on unplug.

Verified: 174 tests passing; live on a 5090 — live temps (GPU 31.9 / Mem 33.9 / Die 32.7 °C), power/current, UID + build string; tab disappears on unplug and reappears on re-plug.

Standalone support for the ThermalGrizzly WireView Pro II without depending on the external wireview_reporter exporter. - **nvcurve/wireview.py** — serial protocol (STX/ETX + 16-bit CRC16-CCITT): vendor-data product ID, config version, UID, build string, screen layout, temp/power/current reads; hwmon fallback with per-channel index resolution; udev detection (0x2560/0x0101) + port probing; read timeout and watchdog reconnect - **server.py** — startup detection (root only), 1 Hz poller gated on subscribed clients, WS `wireview` channel, GET /api/wireview, rejected-product memoization, stale-read race guard - **frontend** — WireView tab (visible when a device is detected): live temp/power/current cards, sparkline history, device info; nullable temp channels - **tests** — 76 tests: parser, CRC, fault classification, hwmon resolution, JSON safety, serial transport vs pty-based fake device Behavior: tab appears on detection (udev settle + 2 s retry), no serial traffic when idle, reconnects on re-plug, unsupported products memoized, tab disappears on unplug. Verified: 174 tests passing; live on a 5090 — live temps (GPU 31.9 / Mem 33.9 / Die 32.7 °C), power/current, UID + build string; tab disappears on unplug and reappears on re-plug.
ARIA added 1 commit 2026-10-03 11:21:02 +00:00
Standalone support for the ThermalGrizzly WireView Pro II without
depending on the external wireview_reporter exporter:

- wireview.py: serial protocol (STX/ETX + 16-bit CRC16-CCITT) with
  vendor-data product identification, config version, UID, build
  string, screen layout, and temperature/power/current sensor reads;
  hwmon fallback with per-channel index resolution; udev-based
  detection (vendor 0x2560 / product 0x0101) with fallback port
  probing; serial read timeout and watchdog reconnect
- server.py: startup detection (root only), 1 Hz poller gated on
  subscribed clients, WS 'wireview' channel, GET /api/wireview,
  rejected-product memoization, stale-read race guard
- frontend: WireView tab (visible when a device is detected) with
  live temperature/power/current cards, sparkline history, and
  device info; nullable temp channels
- tests: 76 tests covering parser, CRC, fault classification,
  hwmon resolution, JSON safety, and the serial transport against
  a pty-based fake device

Verified live: tab appears with the device connected, disappears
when unplugged, reconnects on re-plug, no serial traffic when idle.
Collaborator

✅ No issues found — changes look consistent with the stated intent. Ready to be merged.

✅ No issues found — changes look consistent with the stated intent. Ready to be merged.
ARIA added 1 commit 2026-10-03 11:32:44 +00:00
A stale venv after a code update (editable install + git pull) left
pyserial out of the environment, and the hard module-level import in
wireview.py took the entire web server down — even on machines without
a WireView device.

Guard the import: without pyserial the serial transport is disabled
(one-time warning, connect fails, reads return None) while the rest of
the server keeps running. The hwmon transport is unaffected.

Also simplify the except clauses to OSError (SerialException is an
OSError subclass) so they no longer reference the possibly-None module.
Author
Collaborator

Field report from the 2080 Ti test server: after updating the checkout, the web server failed to start with ModuleNotFoundError: No module named 'serial' — the editable install picked up the new code via git, but the venv predated the pyserial dependency.

Fixed in b8e91e3: the serial import is now guarded, so a missing pyserial disables the serial transport (one-time warning, connect fails, reads return None) instead of taking the whole web server down. The hwmon transport is unaffected. Test server verified: no tab without the device, server healthy.

Field report from the 2080 Ti test server: after updating the checkout, the web server failed to start with `ModuleNotFoundError: No module named 'serial'` — the editable install picked up the new code via git, but the venv predated the pyserial dependency. Fixed in b8e91e3: the `serial` import is now guarded, so a missing pyserial disables the serial transport (one-time warning, connect fails, reads return None) instead of taking the whole web server down. The hwmon transport is unaffected. Test server verified: no tab without the device, server healthy.
ARIA added 1 commit 2026-10-03 11:38:19 +00:00
ARIA added 1 commit 2026-10-03 11:43:15 +00:00
Pakobbix merged commit 38c3a30017 into main 2026-10-03 11:44:01 +00:00
Pakobbix deleted branch feat/wireview-monitoring 2026-10-03 11:44:06 +00:00
Sign in to join this conversation.