You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用hid库读取无线设备电量失败,寻求技术排查帮助

问题排查与解决方案

你的代码没找到设备,核心原因是多数外设(如罗技G502、Actris 7)并不遵循标准HID电池用法页协议,再加上可能的权限或枚举过滤限制,具体解决步骤如下:

1. 先确认设备是否被枚举到

先移除代码中的过滤逻辑,打印所有HID设备,确认目标设备是否在枚举列表内:

import hid

devices = hid.enumerate()
for device in devices:
    print(f"厂商ID: {hex(device['vendor_id'])}, 产品ID: {hex(device['product_id'])}, 用法页: {hex(device['usage_page'])}, 用法值: {hex(device['usage'])}, 设备名称: {device['product_string']}")

运行后找到罗技G502(厂商ID为0x046d)和Actris 7的条目,查看它们实际的usage_page和usage值——大概率不是你代码中设定的0x84和0x08,这类厂商普遍使用自定义HID接口。

2. 解决权限问题

  • Linux:普通用户默认无HID设备访问权限,需添加udev规则。针对罗技设备,创建/etc/udev/rules.d/99-logitech-hid.rules文件,内容如下:
    SUBSYSTEM=="hidraw", ATTRS{idVendor}=="046d", MODE="0666"
    SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", MODE="0666"
    
    执行sudo udevadm control --reload-rules && sudo udevadm trigger后重新插拔设备。
  • Windows:右键以管理员身份运行Python脚本,避免权限不足导致枚举失败。
  • macOS:在系统偏好设置的「安全性与隐私」中,允许Python访问HID设备。

3. 适配厂商私有协议

罗技、Actris这类外设的电量查询不遵循标准HID协议,需使用厂商自定义指令:

  • 罗技设备:需要发送特定的Feature Report获取电量。比如G系列鼠标通常要先发送初始化指令,再读取指定报告ID的数据。可参考罗技公开的HID文档或第三方逆向的协议信息,例如G502的电量查询可能需要发送0x10开头的报告,再解析返回字节。
  • Actris 7耳机:需查找其私有协议,或用Wireshark+USBPcap抓包分析配套软件的通信逻辑。

4. 简化替代方案

若不想深入逆向协议,可使用第三方封装库:

  • 罗技设备可尝试基于罗技游戏软件的第三方Python库,或调用G HUB的CLI接口(若支持)。
  • 跨平台场景可尝试hidapi底层接口,结合抓包数据调试指令。

内容的提问来源于stack exchange,提问作者Karim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:10:26