[TUTORIAL] NUT Configuration for Zircon UPS (ID 0001:0000 Fry's Electronics)

alex-fl

New Member
Apr 16, 2024
12
1
3
Hi everyone,

I wanted to share a working configuration for Zircon UPS devices (and other rebadged units) that identify as ID 0001:0000 Fry's Electronics via USB.

I spent several days trying to integrate this UPS into Proxmox. It was quite tricky because these units do not work with the standard usbhid-ups driver, and information on this specific Hardware ID is scarce. After a lot of trial and error, I found a stable solution using the nutdrv_qx driver.

Below is the complete guide to get it running. You can also find the configuration files in my GitHub repository here: GitHub: NUT-frey-Electronics



1. Prerequisites

Ensure you have NUT installed on your system:

Code:
apt update && apt install nut

Verify your UPS is connected and detected (look for ID 0001:0000):

Code:
lsusb

Output: Bus 003 Device 003: ID 0001:0000 Fry's Electronics


2. Configuration Files

/etc/nut/nut.conf Set the mode to standalone to allow the local system to manage the UPS.

Code:
MODE=standalone

/etc/nut/ups.conf This is the most important part. The Zircon UPS requires the nutdrv_qx driver and the hunnox subdriver.

Code:
maxretry = 3

[zircon]
    driver = "nutdrv_qx"
    subdriver = "hunnox"
    protocol = q1
    port = "auto"
    vendorid = "0001"
    productid = "0000"
    norating
    novendor
    langid_fix = "0x0409"
    desc = "Zircon UPS"
    ignorelb
    override.battery.charge.low = 20
    runtimecal = 300,100,600,50
    default.battery.voltage.high = "13.8"
    default.battery.voltage.low = "11"



3. Applying Changes

Whenever you modify nut.conf or ups.conf, you must restart the driver and the services.

Restart the Driver:
Code:
upsdrvctl stop upsdrvctl start

Restart the Services:
Code:
systemctl restart nut-server nut-client



4. Verifying the Connection

To verify communication and see real-time data (battery charge, voltage, etc.):

Code:
upsc zircon

(Note: If you named your UPS something else in ups.conf, use that name instead of zircon.)



5. Discord Notifications (Optional)

If you want real-time alerts on Discord, follow these steps.

Step A: User Authentication (/etc/nut/upsd.users) Define an admin user and a monitor user.

Code:
[admin]
  password = A_Boesch1987
  actions = SET
  instcmds = ALL

[monuser]
  password = monitorpasswort
  upsmon master

Step B: Create the Notification Script (/etc/nut/upsalert.sh)

Code:
!/bin/bash
WEBHOOK_URL="https://discord.com/api/webhooks/1458652842549182505/K2VTI-xfZSa9EW8q1jc6Z2>
case "$1" in
    ONLINE)   MSG="✅ Power Restored! Server running on AC." ;;
    ONBATT)   MSG="⚠️ Power Outage! UPS taking over." ;;
    LOWBATT)  MSG=" Battery critically low!" ;;
    SHUTDOWN) MSG=" System shutdown initiated." ;;
    COMMBAD)  MSG="❌ Connection to UPS lost!" ;;
    COMMOK)   MSG=" Connection to UPS restored." ;;
    *)        MSG="USV Event: $1" ;;
esac
curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"**[NUT-Alarm]** $MS>

Make it executable:
Code:
chmod +x /etc/nut/upsalert.sh

Step C: Edit /etc/nut/upsmon.conf Tell upsmon to use the script. Ensure the MONITOR line matches the user/password created in step A.

Code:
# Path to your script 
NOTIFYCMD "/etc/nut/upsalert.sh"

#Monitor line
MONITOR zircon@localhost 1 monuser monitor_password_here master

#Define which events trigger the script
NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK       SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD      SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL+EXEC

test the script with

Code:
/etc/nut/upsalert.sh "TEST-MESSAGE"


6. Final Refresh

After editing upsmon.conf, restart the client:

Code:
systemctl restart nut-client

To verify your configuration and see your UPS data, run:
Code:
upsc zircon

Hopefully, this saves someone else the time I spent debugging this!


Regards
Alex