schappim/gm1356-recordings
GitHub: schappim/gm1356-recordings
纯 Python 实现的 Benetech GM1356 声级计跨平台驱动工具,支持实时读数和设备内置日志下载,并完整记录了此前未公开的 USB-HID 通信协议。
Stars: 0 | Forks: 0
# gm1356-recordings
读取**实时读数**,并且——这是其他地方很难找到的功能——在 **macOS 和 Linux** 上,使用纯 Python 从 **Benetech GM1356** USB 声级计中**下载内置记录的日志**。无需 Windows,无需 SoundLAB。
GM1356(VID `0x64BD` / PID `0x74E3`,采用 NATIONS N32G45x MCU)是一个 USB-**HID** 设备,而不是串口——因此不会显示为 `/dev/tty*`。我能找到的所有开源工具都只能进行*实时*读取。本仓库还实现了**记录导入协议 (record-import protocol)**,因此您可以提取声级计存储的数据日志,并且[**完整记录了底层通信协议**](PROTOCOL.md),这样下一个人就不必再次对其进行逆向工程了。
## 安装
需要 `libhidapi`:
```
# macOS
brew install hidapi
# Debian/Ubuntu
sudo apt install libhidapi-hidraw0
```
无需任何 Python 包(纯 `ctypes` 实现)。要求 Python 3.8+。
```
git clone https://github.com/schappim/gm1356-recordings.git
cd gm1356-recordings
```
## 下载存储的记录
```
python3 download_recordings.py # -> recordings.csv
```
```
downloaded 2 recording(s), 5658 samples
recording 0: 16 samples @ 1s dBA 30-130dB
2026-06-21 07:40:13 -> 2026-06-21 07:40:28
min 33.2 mean 34.6 max 40.6 dB
recording 1: 5642 samples @ 6s dBA 30-130dB
2026-06-21 07:41:53 -> 2026-06-21 17:05:59
min 35.9 mean 46.9 max 77.4 dB
wrote 5658 rows -> recordings.csv
```
`recordings.csv` 的列包括:`recording, timestamp, db, weighting, range`。
对声级计的内存而言,它是**只读**的——擦除数据只能通过长按前面板上的按钮来实现,因此本工具不会清除您的日志。
## 实时读数
```
python3 read_meter.py # stream ~2/sec until Ctrl-C
python3 read_meter.py --once
python3 read_meter.py --csv live.csv # also log to CSV
python3 read_meter.py --slow --dbc --range 2 # configure first
```
```
2026-06-21T07:17:02.602+00:00 60.4 dBA fast range 30-130
```
## 作为库使用
```
from gm1356 import Meter
with Meter() as m:
print(m.capture()) # Reading(db=47.3, weighting='dBA', ...)
for rec in m.download(): # list[Recording]
for ts, db in rec.rows():
print(ts, db)
```
## 工作原理
请参阅 **[PROTOCOL.md](PROTOCOL.md)** 以获取完整的逆向工程协议:HID 帧结构、实时的 `0xB3`/`0x56` 命令、magic-id quirk,以及下载握手过程 —— `0xB5` 导入 → `0xEF` 标头 → `0xC4` 拉取循环 (pull-loop) → `0xFD` 块标头 + 12位压缩样本 (`dB = value / 20`)。
## 致谢
**下载/导入协议**源自
[**gymnasty/gm1356**](https://github.com/gymnasty/gm1356) (Go) —— 这是此前唯一的相关实现。本仓库是一个独立的、有文档记录的 Python 移植版本和硬件验证,并包含了协议的详细说明。
实时协议的逆向工程人员:pvachon, ciembor, dobra-noc, michris, classilla,
Troy Simpson (ebswift), Andy Reischle (areresearch)。
## 许可证
MIT —— 请参阅 [LICENSE](LICENSE)。
标签:Python, USB-HID, 协议文档, 命令控制, 数据采集, 无后门, 物联网, 硬件接口, 逆向工具