macOS 配置 TGBOX850 接入NUT记录

搜索了两天中文互联网,没有找到相关的帖子和讨论,扒了一些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 状态了 。