![Linux 上的 apcupsd 无法在 USB 上看到 APC BackUPS Pro 900](https://linux22.com/image/1384688/Linux%20%E4%B8%8A%E7%9A%84%20apcupsd%20%E6%97%A0%E6%B3%95%E5%9C%A8%20USB%20%E4%B8%8A%E7%9C%8B%E5%88%B0%20APC%20BackUPS%20Pro%20900.png)
根据我找到的文件,UPS是在 Linux 上受支持,并且据报道可以与 合作apcupsd
。
我寻找了诸如臭名昭著的 Microlink 协议之类的特定问题,但一无所获。
我已经发现来自英国的一位男士的反馈报告在不太不同的操作系统版本(他的 OpenSuSE 12.1,我的 12.3 x86_64)上使用这个模型。
检测到 USB 端口并lsusb
报告其正在由 APC 使用:
Bus 002 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
并lsusb -v -s002:003
确认和扩展:
Bus 002 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x051d American Power Conversion
idProduct 0x0002 Uninterruptible Power Supply
bcdDevice 0.90
iManufacturer 1 American Power Conversion
iProduct 2 Back-UPS RS 900G FW:879.L4 .I USB FW:L4
bNumConfigurations 1
Configuration Descriptor:
[...]
Interface Descriptor:
[...]
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 33 US
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 1134
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 100
Device Status: 0x0000
(Bus Powered)
内核识别到这一点,并适时设置了人机接口设备
crw------- 1 root root 180, 96 Nov 4 16:11 /dev/usb/hiddev0
所以,据我所知,一切都是理所当然的。
我已经输入了标准配置/etc/apcupsd/apcupsd.conf
(以 Unix 终止、仅 ASCII、无 BOM(以防万一))
UPSCABLE usb
UPSTYPE usb
DEVICE
(我也尝试过注释掉DEVICE
,并设置一个设备/dev/puppa
以导致访问尝试/dev/puppa
,而不是一些/var/lib/dev/puppa
或/dev/puppa\r\n
)。
然而,apcaccess
告诉我的是“这里没有 UPS,抱歉”:
VERSION : 3.14.10 (13 September 2011) suse
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2013-11-04 16:24:22 +0100
MODEL :
STATUS : NOBATT
LINEV : 000.0 Volts
LOADPCT : 0.0 Percent Load Capacity
BCHARGE : 000.0 Percent
TIMELEFT : 0.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
SENSE : Low
LOTRANS : 000.0 Volts
HITRANS : 000.0 Volts
它无法识别型号,并报告无电池(和无电压)。这证实了这不是 Microlink 的问题,或者它会报告电池状态,如果其他情况不重要的话。
如果我断开 USB 电缆,我会收到一条apcupsd
消息,提示通信已丢失;如果我重新连接电缆,我也会收到“通信已恢复”广播。所以apcupsd
是监控。
所以一切都告诉我它应该有效——但事实并非如此。显然,UPS 不会与 对话apcupsd
。有人发现我遗漏了什么吗?
答案1
我发现一个类似的情况(关于:UPS 型号不同,但仍然是 USB),已经通过更改 USB 端口的巫术方法解决了。所以我尝试了一下。有效。
lsusb
除以下细节外,两个端口(一个有效,另一个无效)的输出相同:
Device Status: 0x0000 <-- old port
(Bus Powered)
Device Status: 0x0002 <-- new port
(Bus Powered)
Remote Wakeup Enabled
我不知道这是否意味着第一个端口缺少“远程唤醒”,出于某些原因,这是必需的apcupsd
(可能是为了支持断电唤醒?),或者这个端口由于某些完全不同的原因而被识别,并且由于它的识别,启用了之前未启用的远程唤醒。
但是,如果我将 UPC 放回旧端口,它又会停止工作,而在新端口上,我得到了apcaccess
预期的报告,
MODEL : Back-UPS RS 900G
STATUS : ONLINE
LINEV : 231.0 Volts
LOADPCT : 10.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 118.4 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
SENSE : Medium
LOTRANS : 176.0 Volts
HITRANS : 294.0 Volts
ALARMDEL : 30 seconds
BATTV : 27.3 Volts
答案2
就我而言,我必须在 apcupsd.conf 中设置以下变量才能使 USB 正常工作:
UPSCABLE smart
UPSTYPE usb
DEVICE
很高兴您让它工作了,但我希望这 3 个变量将来能帮助其他人。(我正在使用 CyberPower CP1000AVRLCDa)