<div dir="ltr"><div>OS name and version: Ubuntu 22.04.3 LTS<br>NUT version: 2.7.4-14ubuntu2</div><div>NUT installation method: sudo apt install nut<br>Exact device name: unrelated but is a Cyberpower CST1500SUC<br><br>I've noticed that the $UPSNAME environment variable isn't predictable when running the CMDSCRIPT. I have 1 real UPS and a dummy-ups configured for heartbeat. When the actual UPS goes onbatt, upssched-cmd reads the $USPNAME variable to craft the message and gets "heartbeat@localhost" instead of "shanknas_ups@localhost". This causes the script to get errors when polling the status and battery.charge via upsc for messages. Could it be that the longest running timer (heartbeat) is somehow "locking" the UPSNAME variable and the latest event (onbatt from shanknas_ups@localhost) isn't able to be override it?</div><div><br></div><div><b>ups.conf</b></div><div><font face="monospace">pollinterval = 1<br>maxretry = 3<br><br>[shanknas_ups]<br>        driver = "usbhid-ups"<br>        port = "auto"<br>        vendorid = "0764"<br>        productid = "0601"<br>        product = "CST1500SUC"<br>        serial = "REDACTED"<br>        vendor = "CPS"<br>        desc = "CyberPower CST1500SUC - Jim's Office"<br><br>[heartbeat]<br>        driver = "dummy-ups"<br>        port = "heartbeat.seq" <br>        desc = "Watch over NUT"</font><br></div><div><br></div><div><b>heartbeat.seq</b><br></div><div><font face="monospace"># heartbeat.seq -- 10 minute heartbeat<br>ups.status: OL<br>TIMER 300<br>ups.status: OB<br>TIMER 300</font><br></div><div><br></div><div><b>upssched-cmd </b>(current, MSG was slightly modified)<br><div><font face="monospace">#!/bin/bash -u<br><br>logger -i -t upssched-cmd Calling upssched-cmd $1 $UPSNAME<br><br>#UPSNAME=shanknas_ups<br><br><br>STATUS=$( upsc $UPSNAME ups.status > /dev/stdout 2> /dev/null)<br>CHARGE=$( upsc $UPSNAME battery.charge > /dev/stdout 2> /dev/null )<br>CHMSG="[$STATUS]:$CHARGE%"<br><br>case $1 in<br>    online) MSG="$UPSNAME, $CHMSG - power supply has been restored." ;;<br> onbatt) MSG="$UPSNAME, $CHMSG - power failure!" ;;<br>  lowbatt) MSG="$UPSNAME, $CHMSG - we have reached a low battery threshold!" ;;<br>       powerdown) MSG="ShankNAS is shutting down!" ;;<br>      commbad) MSG="$UPSNAME, $CHMSG - we've lost comms with the UPS!" ;;<br>     commok) MSG="$UPSNAME, $CHMSG - comms restored" ;;<br>  heartbeat-failure-timer) MSG="NUT heartbeat failure!" ;;<br>    replacebatt) MSG="$UPSNAME, $CHMSG - please replace the battery" ;;<br> *) logger -i -t upssched-cmd "Bad arg: \"$1\", $CHMSG"<br>            exit 1 ;;<br>esac<br><br># Log what happened<br>logger -t upssched-cmd $MSG<br><br># Send via PushOver<br>curl -s \<br>                         --form-string "token=$PUSHOVER_TOKEN" \<br>                             --form-string "user=$PUSHOVER_USER" \<br>                               --form-string "message=$MSG" \<br>                              <a href="https://api.pushover.net/1/messages.json">https://api.pushover.net/1/messages.json</a></font><br></div><div><br></div><div><br></div><div><b>upssched.conf</b><br></div><div><font face="monospace">CMDSCRIPT /bin/upssched-cmd<br>PIPEFN /run/nut/upssched.pipe<br>LOCKFN /run/nut/upssched.lock<br><br>AT ONBATT shanknas_ups@localhost START-TIMER onbatt 30<br>AT ONLINE shanknas_ups@localhost CANCEL-TIMER onbatt online<br>AT LOWBATT * EXECUTE lowbatt<br>AT COMMBAD * START-TIMER commbad 30<br>AT COMMOK * CANCEL-TIMER commbad commok<br>AT NOCOMM * EXECUTE commbad<br>AT SHUTDOWN * EXECUTE powerdown<br>AT SHUTDOWN * EXECUTE powerdown<br>AT REPLBATT * EXECUTE replacebatt<br><br># Restart timer which completes only if the dummy-ups heart beat<br># has stopped. See timer values in heartbeat.conf<br>AT ONBATT heartbeat@localhost CANCEL-TIMER heartbeat-failure-timer<br>AT ONBATT heartbeat@localhost START-TIMER heartbeat-failure-timer 660</font><br></div><div><font face="monospace"><br></font></div><div><b style=""><font face="arial, sans-serif">Logs for nut-* after plug pull</font></b></div><div><font face="monospace">Oct 20 14:07:02 shanknas upssched[542596]: Cancelling timer: heartbeat-failure-timer<br>Oct 20 14:07:02 shanknas upssched[542596]: New timer: heartbeat-failure-timer (660 seconds)<br>Oct 20 14:14:17 shanknas upssched[542596]: New timer: onbatt (30 seconds)<br>Oct 20 14:14:47 shanknas upssched[542596]: Event: onbatt<br>Oct 20 14:14:47 shanknas upssched-cmd[696002]: Calling upssched-cmd onbatt heartbeat@localhost<br>Oct 20 14:14:47 shanknas upssched-cmd[696008]: heartbeat@localhost, [OL]:% - power failure!<br>Oct 20 14:17:02 shanknas upssched[542596]: Cancelling timer: heartbeat-failure-timer<br>Oct 20 14:17:02 shanknas upssched[542596]: New timer: heartbeat-failure-timer (660 seconds)<br>Oct 20 14:27:02 shanknas upssched[542596]: Cancelling timer: heartbeat-failure-timer<br>Oct 20 14:27:02 shanknas upssched[542596]: New timer: heartbeat-failure-timer (660 seconds)<br>Oct 20 14:34:01 shanknas usbhid-ups[3319430]: libusb_get_string: error sending control message: Broken pipe<br>Oct 20 14:37:02 shanknas upssched[542596]: Cancelling timer: heartbeat-failure-timer<br>Oct 20 14:37:02 shanknas upssched[542596]: New timer: heartbeat-failure-timer (660 seconds)<br>Oct 20 14:37:47 shanknas upsmon[3319457]: UPS shanknas_ups@localhost battery is low<br>Oct 20 14:38:07 shanknas upsmon[3319457]: Giving up on the master for UPS [shanknas_ups@localhost]<br>Oct 20 14:38:07 shanknas upsmon[3319457]: Executing automatic power-fail shutdown<br>Oct 20 14:38:07 shanknas upsmon[3319457]: Auto logout and shutdown proceeding<br>Oct 20 14:38:07 shanknas upssched[713933]: Executing command: powerdown<br>Oct 20 14:38:07 shanknas upssched-cmd[713936]: Calling upssched-cmd powerdown<br>Oct 20 14:38:07 shanknas upssched-cmd[713941]: , []:% - we're shutting down!<br>Oct 20 14:38:09 shanknas upssched[713933]: Executing command: powerdown<br>Oct 20 14:38:09 shanknas upssched-cmd[713978]: Calling upssched-cmd powerdown<br>Oct 20 14:38:09 shanknas upssched-cmd[713983]: , []:% - we're shutting down!<br>Oct 20 14:38:12 shanknas systemd[1]: nut-monitor.service: Deactivated successfully.<br>Oct 20 14:38:12 shanknas systemd[1]: nut-monitor.service: Consumed 53.935s CPU time.<br>Oct 20 14:38:12 shanknas systemd[1]: Stopping Network UPS Tools - power devices information server...<br>Oct 20 14:38:12 shanknas upsd[3319463]: mainloop: Interrupted system call<br>Oct 20 14:38:12 shanknas upsd[3319463]: Signal 15: exiting<br>Oct 20 14:38:12 shanknas systemd[1]: nut-server.service: Deactivated successfully.<br>Oct 20 14:38:12 shanknas systemd[1]: Stopped Network UPS Tools - power devices information server.<br>Oct 20 14:38:12 shanknas systemd[1]: nut-server.service: Consumed 57.132s CPU time.<br>Oct 20 14:38:12 shanknas upsdrvctl[714253]: Network UPS Tools - UPS driver controller 2.7.4<br>Oct 20 14:38:12 shanknas systemd[1]: Stopping Network UPS Tools - power device driver controller...<br>Oct 20 14:38:12 shanknas usbhid-ups[3319430]: Signal 15: exiting<br>Oct 20 14:38:12 shanknas systemd[1]: nut-driver.service: Deactivated successfully.<br>Oct 20 14:38:12 shanknas systemd[1]: Stopped Network UPS Tools - power device driver controller.<br>Oct 20 14:38:12 shanknas systemd[1]: nut-driver.service: Consumed 1min 32.813s CPU time.<br></font></div><div><br></div></div></div>