# NUT config: PowerWalker VFI ICR IoT Network UPS Tools setup for a PowerWalker VFI ICR IoT UPS. - **Master**: one host connected to the UPS via **USB** (`nutdrv_qx`), runs `upsd` + `upsmon`, and serves status to the network on port `3493/tcp`. - **Clients**: any other Linux hosts run `upsmon` as network slaves and shut down gracefully when the master signals a power failure (FSD). This avoids the undocumented Modbus TCP register map entirely. If you ever want a pure-network (no USB) setup, you would need the Modbus register map from PowerWalker support plus the `nutdrv_modbus` driver -- not used here. ## Layout ``` master/etc/nut/ config for the USB-connected host client/etc/nut/ config for each network slave install-master.sh deploy + permissions on the master install-client.sh deploy on a client: sudo ./install-client.sh ``` ## Quick start ### Master (USB host) ``` sudo ./install-master.sh # edit /etc/nut/upsd.users -> set monmaster / monslave passwords # edit /etc/nut/upsmon.conf -> set the same monmaster password sudo nutdrv_qx -a test -DD -x port=auto # confirm the driver reads values sudo systemctl enable --now nut-server nut-monitor upsc ups@localhost ``` If the test shows no/garbled values, retry with: ``` sudo nutdrv_qx -a test -DD -x port=auto -x protocol=voltronic -x novendor ``` and uncomment the matching lines in `master/etc/nut/ups.conf`. ### Each client ``` sudo ./install-client.sh # edit /etc/nut/upsmon.conf -> set the monslave password sudo systemctl enable --now nut-monitor upsc ups@ ``` ## Notes - Open `3493/tcp` on the master firewall for your client subnets. - `runtimecal` in `ups.conf`: these UPS models may not report runtime; NUT then estimates it. Format: `sec_at_full,full_pct,sec_at_half,half_pct`. Adjust to your battery / EBM configuration. - `upsd.users` holds plaintext credentials and is gitignored. Keep the real file off the repo; distribute it out of band (or via your secrets tooling). - To also cut UPS output power after the master shuts down, look into `upsdrvctl shutdown` / the `POWERDOWNFLAG` mechanism -- intentionally left out here to keep the first deployment simple.