add bluewalker vfi icr series
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# 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 <MASTER_IP>
|
||||
```
|
||||
|
||||
## 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 <MASTER_IP>
|
||||
# edit /etc/nut/upsmon.conf -> set the monslave password
|
||||
sudo systemctl enable --now nut-monitor
|
||||
upsc ups@<MASTER_IP>
|
||||
```
|
||||
|
||||
## 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.
|
||||
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
# install-client.sh -- deploy NUT network-slave config
|
||||
# Usage: sudo ./install-client.sh <MASTER_IP>
|
||||
# ASCII only.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SRC="$(cd "$(dirname "$0")" && pwd)/client/etc/nut"
|
||||
DST="/etc/nut"
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "ERROR: run as root (sudo)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MASTER_IP="${1:-}"
|
||||
if [ -z "$MASTER_IP" ]; then
|
||||
echo "Usage: sudo $0 <MASTER_IP>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "== Installing NUT (if missing) =="
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get update && apt-get install -y nut
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
dnf install -y nut
|
||||
else
|
||||
echo "WARN: unknown package manager, install 'nut' manually." >&2
|
||||
fi
|
||||
|
||||
echo "== Copying client config to ${DST} =="
|
||||
install -d "$DST"
|
||||
cp -v "$SRC/nut.conf" "$DST/nut.conf"
|
||||
sed "s/MASTER_IP/${MASTER_IP}/" "$SRC/upsmon.conf" > "$DST/upsmon.conf"
|
||||
|
||||
chown root:nut "$DST/upsmon.conf" 2>/dev/null || true
|
||||
chmod 640 "$DST/upsmon.conf"
|
||||
|
||||
echo
|
||||
echo "NEXT STEPS (manual):"
|
||||
echo " 1. Edit ${DST}/upsmon.conf -- replace CHANGE_ME_SLAVE with the master's monslave password."
|
||||
echo " 2. Enable the monitor service:"
|
||||
echo " systemctl enable --now nut-monitor"
|
||||
echo " 3. Verify connectivity to the master:"
|
||||
echo " upsc ups@${MASTER_IP}"
|
||||
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
# install-master.sh -- deploy NUT master config for PowerWalker VFI ICR IoT
|
||||
# Run as root on the USB-connected host. ASCII only.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SRC="$(cd "$(dirname "$0")" && pwd)/master/etc/nut"
|
||||
DST="/etc/nut"
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "ERROR: run as root (sudo)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "== Installing NUT (if missing) =="
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get update && apt-get install -y nut
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
dnf install -y nut
|
||||
else
|
||||
echo "WARN: unknown package manager, install 'nut' manually." >&2
|
||||
fi
|
||||
|
||||
echo "== Copying config files to ${DST} =="
|
||||
install -d "$DST"
|
||||
cp -v "$SRC/ups.conf" "$DST/ups.conf"
|
||||
cp -v "$SRC/nut.conf" "$DST/nut.conf"
|
||||
cp -v "$SRC/upsd.conf" "$DST/upsd.conf"
|
||||
cp -v "$SRC/upsmon.conf" "$DST/upsmon.conf"
|
||||
|
||||
if [ ! -f "$DST/upsd.users" ]; then
|
||||
cp -v "$SRC/upsd.users.example" "$DST/upsd.users"
|
||||
echo "NOTE: created upsd.users from example -- edit the passwords now."
|
||||
else
|
||||
echo "NOTE: upsd.users already exists, left untouched."
|
||||
fi
|
||||
|
||||
echo "== Setting ownership and permissions =="
|
||||
chown root:nut "$DST"/*.conf "$DST/upsd.users" 2>/dev/null || true
|
||||
chmod 640 "$DST/upsd.users" "$DST/upsmon.conf"
|
||||
|
||||
echo
|
||||
echo "NEXT STEPS (manual):"
|
||||
echo " 1. Edit ${DST}/upsd.users and ${DST}/upsmon.conf -- replace CHANGE_ME_* passwords."
|
||||
echo " 2. Plug in the UPS via USB and test the driver:"
|
||||
echo " nutdrv_qx -a test -DD -x port=auto"
|
||||
echo " (add -x protocol=voltronic -x novendor if values are missing)"
|
||||
echo " 3. Enable services:"
|
||||
echo " systemctl enable --now nut-server nut-monitor"
|
||||
echo " 4. Verify:"
|
||||
echo " upsc ups@localhost"
|
||||
echo " 5. Open 3493/tcp in the firewall for your client subnets."
|
||||
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
# /etc/nut/ups.conf -- MASTER (USB-connected host)
|
||||
# PowerWalker VFI ICR IoT via nutdrv_qx over USB.
|
||||
#
|
||||
# Uncomment the protocol/novendor/runtimecal lines only if the bare
|
||||
# config does not return clean values. See README for the test command.
|
||||
|
||||
[ups]
|
||||
driver = nutdrv_qx
|
||||
port = auto
|
||||
desc = "PowerWalker VFI ICR IoT"
|
||||
pollinterval = 5
|
||||
|
||||
# Fallbacks (enable if needed):
|
||||
# protocol = voltronic
|
||||
# novendor
|
||||
# runtimecal = 600,100,1200,50
|
||||
Reference in New Issue
Block a user