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

如何用Python解码Govee温湿度计BLE广播数据?

Govee BLE温湿度计广播数据解码指南

1. Raw Data与Mfg Data的区别

  • Raw Data(原始广播数据):是BLE设备广播包的完整字节集合,包含所有广播相关字段——比如设备名称、服务UUID、广播类型标识、厂商数据等全部内容,是未经过任何筛选的原始payload。
  • Mfg Data(厂商自定义数据):是Raw Data中专门用于厂商自定义内容的字段,开头固定为蓝牙SIG分配的厂商ID(Govee的厂商ID是0x0038),只包含厂商自己定义格式的业务数据,温湿度信息就藏在这里,无关的广播内容会被排除。

2. 字节串转温湿度数据的通用解码方法

核心思路是定位有效数据段→确定字节顺序→转换数值→缩放校准,以下是分步操作:

  1. 筛选有效厂商数据
    先从Mfg Data中剔除开头的2字节厂商ID(注意端序:比如Govee的厂商ID在字节串里可能是b'\x38\x00',对应小端序的0x0038),剩下的部分就是厂商自定义的业务payload。
  2. 确认字节端序
    BLE设备大多使用**小端序(Little Endian)**存储多字节数值,你可以用已知的环境温湿度值反推验证:比如当前环境是25.5℃,如果解析出的原始整数是255,那大概率是小端序,且缩放系数是10。
  3. 拆分温湿度对应的字节段
    厂商会把温湿度用固定长度的字节存储(通常是2字节/16位整数),你需要:
    • 对比不同环境下的Mfg Data变化,找到数值变化对应的字节位置(比如温度变化时,哪2个字节跟着变)
    • 用int.from_bytes()把目标字节串转换成整数,指定端序
  4. 缩放得到实际值
    厂商会把浮点值转换成整数存储(避免浮点精度问题),比如温度×10、湿度×1,你需要用解析出的整数除以对应系数,得到实际的温湿度数值。

示例代码(需自行调整字节位置)

# 替换成你实际获取到的Govee厂商数据
mfg_data = b'\x38\x00\x01\x02\x90\x03\x10\x00'
# 移除开头2字节厂商ID
payload = mfg_data[2:]

# 示例:假设温度在第2-3字节,湿度在第4-5字节(需自行验证调整)
temp_bytes = payload[1:3]
hum_bytes = payload[3:5]

# 小端序转换为整数
temp_raw = int.from_bytes(temp_bytes, byteorder='little')
hum_raw = int.from_bytes(hum_bytes, byteorder='little')

# 缩放校准(示例系数,需根据实际数据调整)
temperature = temp_raw / 10
humidity = hum_raw  # 若湿度是百分比整数则直接用,若为小数则除以对应系数

print(f"温度: {temperature}℃, 湿度: {humidity}%")

内容的提问来源于stack exchange,提问作者Z.Mack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:43:31