@yzaao
Python is my Life

Как опросить ups на python?

Есть в наличии старенький ИБП Powercom IMD-1025AP.
Подключен к машинке на Linux.
Пытаюсь опросить его с помощью python и библиотеки pyusb и получить состояние батареи.
Но что то я в упор не вижу такой информации.

import usb.core
import usb.util

# Vendor and Product ID for Powercom UPS
VENDOR_ID = 0x0d9f
PRODUCT_ID = 0x0004

device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)

manufacturer = usb.util.get_string(device, device.iManufacturer)
serial = usb.util.get_string(device, device.iSerialNumber)

cfg = device.get_active_configuration()

print(device)

В ответ прилетает вот такое:

DEVICE ID 0d9f:0004 on Bus 001 Address 005 =================
 bLength                :   0x12 (18 bytes)
 bDescriptorType        :    0x1 Device
 bcdUSB                 :  0x110 USB 1.1
 bDeviceClass           :    0x0 Specified at interface
 bDeviceSubClass        :    0x0
 bDeviceProtocol        :    0x0
 bMaxPacketSize0        :    0x8 (8 bytes)
 idVendor               : 0x0d9f
 idProduct              : 0x0004
 bcdDevice              :    0x1 Device 0.01
 iManufacturer          :    0x3 POWERCOM Co.,LTD
 iProduct               :    0x1 HID UPS Battery
 iSerialNumber          :    0x2 004-0D9F-000
 bNumConfigurations     :    0x1
  CONFIGURATION 1: 100 mA ==================================
   bLength              :    0x9 (9 bytes)
   bDescriptorType      :    0x2 Configuration
   wTotalLength         :   0x22 (34 bytes)
   bNumInterfaces       :    0x1
   bConfigurationValue  :    0x1
   iConfiguration       :    0x0 
   bmAttributes         :   0xa0 Bus Powered, Remote Wakeup
   bMaxPower            :   0x32 (100 mA)
    INTERFACE 0: Human Interface Device ====================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x0
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x1
     bInterfaceClass    :    0x3 Human Interface Device
     bInterfaceSubClass :    0x0
     bInterfaceProtocol :    0x0
     iInterface         :    0x0 
      ENDPOINT 0x81: Interrupt IN ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x81 IN
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :    0x8 (8 bytes)
       bInterval        :   0x64

Насколько я понимаю, это нормально и это нормальный ответ от USB устройства.
Но как получить репорт именно с упса, где будет состояние батареи, например, и другая информация?
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
Работа с перефирией через USB заключается в отсылке данных в подходящий endpoint и прослушивании парного ему. Относительно просто работать с bulk transfer. Но скорее всего там все же com over usb. Тут без готовой библиотеки сложно. Мониторинг состояния
https://www.upspowercom.com/pcm-download/UPS-Proto...
ну или что-то похожее, если эта документация не подойдет для вашей модели.

Попробуй сперва какой либо готовой прогой терминалом для ком порта пообщаться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы