Linux 上的 apcupsd 无法在 USB 上看到 APC BackUPS Pro 900

Linux 上的 apcupsd 无法在 USB 上看到 APC BackUPS Pro 900

根据我找到的文件,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 个变量将来能帮助其他人。(我正在使用 Cyber​​Power CP1000AVRLCDa)

相关内容