手把手教你用树莓派+HA抓取小米温湿度计2代数据(附密钥获取避坑指南)
树莓派+HomeAssistant破解小米温湿度计2代全流程实战
去年夏天,当我发现家里三个房间的温湿度数据需要手动记录时,第一反应是找现成的智能设备解决方案。但市面上成套的智能家居系统要么价格昂贵,要么需要依赖厂商服务器——直到我发现抽屉里闲置的树莓派4B和小米温湿度计2代这对黄金组合。本文将分享如何用开源方案实现本地化数据采集,重点解决两个核心痛点:逆向获取蓝牙广播密钥的详细步骤,以及处理树莓派蓝牙扫描时的各种异常情况。
1. 硬件与软件环境准备
工欲善其事,必先利其器。我们需要准备以下硬件设备:
- 树莓派3B+/4B(推荐4B因蓝牙性能更稳定)
- 小米温湿度计2代(型号LYWSD03MMC)
- 支持蓝牙的电脑(用于密钥提取)
软件环境方面需要:
# 基础系统要求 OS: Raspberry Pi OS (64-bit) HomeAssistant版本: 2023.5或更新 蓝牙协议栈: BlueZ 5.55+常见问题排查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 蓝牙服务启动失败 | 内核驱动冲突 | sudo systemctl restart bluetooth |
| 扫描不到设备 | 蓝牙适配器未启用 | rfkill unblock bluetooth |
| 信号强度不稳定 | 2.4GHz频段干扰 | 关闭周边WiFi路由器 |
提示:建议在树莓派上安装散热风扇,持续蓝牙扫描会导致CPU温度升高
2. 逆向获取加密密钥实战
小米温湿度计2代采用AES-128加密广播数据,传统抓包方式无法直接解析。通过Chrome浏览器的Web Bluetooth API,我们可以绕过官方APP直接与设备通信。
操作步骤:
- 在电脑Chrome访问Telink Flasher工具页面
- 点击Connect按钮,选择"LYWSD03MMC"设备
- 配对成功后,依次点击:
- "Do activation"获取32位密钥
- "Read Characteristic"验证数据有效性
关键代码解析:
// 核心Web Bluetooth调用逻辑 device.gatt.connect() .then(server => server.getPrimaryService(SERVICE_UUID)) .then(service => service.getCharacteristic(CHARACTERISTIC_UUID)) .then(characteristic => characteristic.readValue())常见错误处理:
- 配对被拒绝:长按温湿度计按钮重置蓝牙状态
- 密钥显示不全:更换Chrome版本或使用Edge浏览器
- 连接超时:确保设备距离电脑不超过1米
3. 树莓派蓝牙扫描技巧
获取MAC地址是后续配置的关键,但树莓派的蓝牙扫描常会遇到各种问题。以下是优化后的扫描流程:
# 先停止可能冲突的服务 sudo systemctl stop bluetooth # 使用hcitool进行低层扫描 sudo hcitool lescan --duplicates | grep LYWSD03MMC扫描参数优化建议:
- 将温湿度计放在树莓派30cm范围内
- 关闭周边其他蓝牙设备
- 使用USB延长线避免信号干扰
如果常规扫描失败,可以尝试主动唤醒设备:
# wakeup_thermo.py import pygatt adapter = pygatt.GATTToolBackend() adapter.start() device = adapter.connect('AA:BB:CC:DD:EE:FF') device.char_write(0x0038, bytearray([0x01]))4. HomeAssistant高级配置
在Passive BLE Monitor集成基础上,推荐以下增强配置:
# configuration.yaml 片段 ble_monitor: devices: - mac: 'A4:C1:38:12:34:56' encryption_key: 'abc123def456abc123def456abc12345' temperature_unit: C decimals: 1 use_median: true active_scan: false discovery: true数据校准技巧:
- 温度补偿:对比水银温度计读数设置offset参数
- 湿度校准:使用饱和盐溶液进行三点校准
- 电量检测:电压值转换为百分比需自定义传感器
注意:广播间隔默认10分钟,修改需要刷写自定义固件
最后分享一个真实案例:我在书房部署时发现数据更新延迟严重,最终发现是金属书架造成的信号衰减。改用zigbee2mqtt桥接后,不仅解决了延迟问题,还将传感器续航从1年延长到2年——这或许就是开源硬件最迷人的地方,永远有更好的解决方案等着你去发现。
