搜索了两天中文互联网,没有找到相关的帖子和讨论,扒了一些github Issue 解决了这个问题,在这里记录一下过程,以资同人。
多年以前就已经在机柜区域部署了 NUT server,并把机柜里的各种设备都通过 NUT Client 做了 UPS 的联动

但因为以前都是主用笔记本电脑,没有在书房区域部署 UPS,近日在书房放了一台 Macmini 固定使用,就拿了已经不用许久的山特 TGBOX850,换了一块设计寿命最长 8 年,适用长时间浮充使用的 CSB HRL234W F2FR 电池拿来给书桌这不到 200W 的设备做后备电源,因为 Macmini 长时间开机,也就有了加上UPS联动的想法。
通过 USB 线连接 UPS 后,在 macos 的设置中能耗页已经能看到 UPS 电量和 UPS 选项了

但是能看到的信息有限,就想在本地假设 NUT server 然后再通过类似UPSStatusBar的插件在状态栏直接显示一些重要信息。

按照常规,在 NUT 官网查询 macos 的 NUT 安装方式后决定使用 homebrew 安装。
brew install nut
通过 homebrew 安装 NUT 后,在 /opt/homebrew/etc/nut 配置好
nut.conf
MODE=netserver
ups.conf
maxretry = 3
[ups]
driver=usbhid-ups
port=auto
vendorid=0463
desc="SANTAK TGBOX-850 UPS"
upsd.conf
LISTEN 0.0.0.0 3493
LISTEN :: 3493
upsd.users
[admin]
password = mypassword
actions = SET
instcmds = ALL
upsmon primary
[upsmon]
password = mypassword
upsmon secondary
upsmon.conf
MONITOR ups@localhost 1 upsmon mypassword secondary
等几个必备配置文件后,运行 brew services start nut
虽然通过 brew services info nut 看,服务是起来了,但是一直提示到 UPS 的连接 lost,运行upsc 也是提示 connection refused;经过扒帖子得知 usbhid-ups 驱动在 macos 下的权限管理比较严,无法在非 root 账户下访问 USB UPS,需要在ups.conf中加一行
MODE=netserver
ups.conf
maxretry = 3
[ups]
driver = usbhid-ups
user = root //以 root 用户运行
port = auto
vendorid = 0463
desc = "SANTAK TGBOX-850 UPS"
配置。
但加上后 usbhid-ups 驱动虽然是能访问到 UPS 了,但系统自带的 UPS 功能似乎是被抢了 UPS 的访问权,设置中关于 UPS 的设置选项消失了。
继续扒帖子发现还有macosx-ups这么一个驱动,似乎可以直接接入系统控制的 UPS,这下 upsc 是可以看到信息了。
但是奇怪的是还是不能用 brew 的 service 启动,需要启动后运行三行命令
NUT_PATH=/opt/homebrew/opt/nut/sbin
${NUT_PATH}/upsdrvctl start
${NUT_PATH}/upsd
${NUT_PATH}/upsmon
于是用 automator 做了个运行 shell 的 app,加入启动项中,这下总算是可以实现书房区域 NUT 的 netserver了,在桌子另一边的和桌子下面附属的客户端也可以通过 NUT Client 同步 UPS 状态了 。

