The device is not usable out of the box on Linux: without the udev rule the port is root:uucp 0660 with no stable name, and ModemManager probes it for ~30 s after every plug. New docs/WireView.md covers the one-time setup (udev rule, dialout group, port access, verification, troubleshooting); README links to it from the feature note and the documentation list.
5.4 KiB
WireView Pro II Setup
NVCurve reads the Thermal Grizzly WireView Pro II (12 VHPWR connector monitor) directly over its USB CDC/ACM serial port — no exporter, no GUI, no kernel module required.
Before the first use, the host needs a one-time setup: a udev rule so the serial port is accessible under a stable name and left alone by other tools. After that, NVCurve auto-detects the device over USB — the WireView tab appears while the device is connected and disappears when it is unplugged.
Why a one-time setup is needed
The WireView is an STM32 CDC/ACM virtual serial port (VID 0483, PID 5740). Out of the box, Linux:
- creates the port as
root:uucp 0660with no stable device name, and - lets ModemManager probe every new CDC-ACM port with AT/QCDM commands for up to ~30 s after each plug — it holds the port open and sends bytes the device does not expect.
The udev rule below fixes both: the node becomes root:dialout 0660, a stable /dev/wireview-pro2 symlink is created, and ModemManager is told to ignore the device.
1. Install the udev rule
sudo tee /etc/udev/rules.d/99-wireview.rules > /dev/null <<'EOF'
# WireView Pro II udev rules
#
# Same access policy as wireview-hwmon's 99-wireview-hwmon.rules: the node is
# 0660 root:dialout, and the user logged in at the local seat gets an ACL via
# uaccess. systemd applies that tag on hotplug from 73-seat-late.rules, which
# runs before this 99- file and so never sees it, so each rule also runs the
# uaccess builtin itself. The tag is still needed: logind uses it to move the
# ACL to the new active session on a user switch.
ACTION=="remove", GOTO="wireview_end"
# Normal operation (STM32 CDC/ACM virtual serial port)
SUBSYSTEM=="tty", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", GROUP="dialout", MODE="0660", TAG+="uaccess", RUN{builtin}+="uaccess", SYMLINK+="wireview-pro2"
# Keep ModemManager away: it probes every new CDC-ACM port with AT and QCDM
# commands for about half a minute, holding the port and sending the device
# bytes it does not expect.
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0483", ATTR{idProduct}=="5740", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_PORT_IGNORE}="1"
# DFU bootloader mode (firmware update)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0483", ATTR{idProduct}=="df11", GROUP="dialout", MODE="0660", TAG+="uaccess", RUN{builtin}+="uaccess"
LABEL="wireview_end"
EOF
Warning
The rule sets
GROUP="dialout". If thedialoutgroup does not exist on your distro, udev silently ignores the rule (the node staysroot:uucp). Create it first:sudo groupadd dialout.
Then reload the rules and apply them to an already-plugged device (a reload alone only affects future hotplugs):
sudo udevadm control --reload-rules
sudo udevadm trigger
2. Port access
-
NVCurve web server (systemd): runs as root, so it can open the port as soon as the rule is in place — nothing else to do.
-
CLI as a regular user: add your user to the
dialoutgroup, then log out/in:sudo usermod -aG dialout $USERA running process only picks up new groups after a re-login;
sg dialout -c 'nvcurve ...'works for a one-off.
3. Verify
lsusb | grep 0483 # 0483:5740 present
ls -l /dev/wireview-pro2 # -> /dev/ttyACM0
With the device plugged in, start (or restart) the NVCurve server. The WireView tab appears in the web UI and GET /api/wireview returns the device info and live samples. The tab disappears when the device is unplugged and reappears on re-plug — no restart needed.
Alternative: wireview-hwmon kernel module
If the official wireview-hwmon kernel module and its wireviewd daemon are installed, the daemon owns the serial port and NVCurve automatically reads the sysfs node instead. No udev rule is needed in that case.
USB device IDs
| Mode | VID | PID | Description |
|---|---|---|---|
| Normal | 0483 |
5740 |
STM32 CDC/ACM virtual serial port |
| DFU bootloader | 0483 |
df11 |
STM32 bootloader (firmware updates only) |
Troubleshooting
WireView tab does not appear
lsusb | grep 0483— is the device visible at all (cable, USB port)?ls -l /dev/wireview-pro2— if the node isroot:uucp, thedialoutgroup is missing or the rule did not load:sudo groupadd dialout && sudo udevadm control --reload-rules && sudo udevadm trigger.- Restart the NVCurve server — detection runs at startup, and the watchdog re-checks periodically afterwards.
Permission denied on the port (CLI)
The user must be in the dialout group; a running process only picks up new groups after a restart/re-login.
Device visible but never connects
The firmware occasionally stops answering the RTS welcome handshake (observed after USB state changes, e.g. udev re-triggers or boot) while still answering every data command. NVCurve falls back to the vendor-data reply and retries, but if it still does not connect, reset the USB device — physically unplug/replug, or without reaching for it:
P=$(readlink -f /sys/class/tty/ttyACM0)
DEV=$(dirname "$(dirname "$(dirname "$(dirname "$P")")")")
sudo bash -c "echo 0 > $DEV/authorized; sleep 1; echo 1 > $DEV/authorized"
The udev rule is taken from the wireview-reporter project, which uses the same access policy as the official wireview-hwmon module.