在 Home Assistant 中集成 69 元 3 个的米家蓝牙温湿度计 2
本文记录如何把米家蓝牙温湿度计 2(型号LYWSD03MMC
)集成到 Home Assistant 中。
前言
米家蓝牙温湿度计 2(型号LYWSD03MMC
)是小米出品的价格十分美丽的蓝牙温湿度计,69 元 3 个,长这样
它的蓝牙数据广播频率为:
- 大约每隔 10 分钟通过蓝牙广播温湿度数据;
- 大约每隔 1 小时通过蓝牙广播电量。
Home Assistant(以下简称 HA) 的 官方集成 ,目前不支持米家蓝牙温湿度计 2,原因可能是 2 代的蓝牙广播数据进行了加密。我在 GitHub 上找到了一个 HA 的自定义组件 ble_monitor,几乎支持米家所有的蓝牙温湿度计硬件,非常不错。
本次集成所使用的版本为:
- Python
3.8.6
; - Home Assistant
0.118.4
- 米家蓝牙温湿度计 2 固件版本号
0109
;
集成步骤
准备 Python 环境
ble_monitor 需要使用 Python 标准库的 socket.AF_BLUETOOTH
,需要先检查运行 HA 的 Python 环境是否有支持常量。若不支持则需要重新编译 Python 环境。
以 Debian 系统为例,首先安装 libbluetooth-dev
包,确保 /usr/include
或 /usr/include/bluetooth
路径中有 bluetooth.h
文件。
|
|
然后使用 pyenv 编译 Python,此时编译出的 Python 就会支持 socket.AF_BLUETOOTH
|
|
安装 HA 自定义组件 ble_monitor
ble_monitor 是一个被动式收集数据的自定义组件。它不主动向温湿度计发起轮询请求数据,而是被动地等待温湿度计的蓝牙广播,能够有效节约蓝牙温湿度计的电池电量。
首先要授权运行 HA 的 Python 对 HCI interface 的 rootless 访问权限(使用 Python 虚拟环境运行 HA 的要在虚拟环境中执行):
|
|
检查权限设置:
|
|
获取代码
|
|
添加自定义组件到 HA 配置中
|
|
<HA_CONFIG>
请替换为 HA 的配置目录,一般是 $HOME/.homeassistant
。
获取温湿度计数据加密密钥
如上文所述,米家蓝牙温湿度计 2 的蓝牙广播数据默认是加密的,我们要配置密钥才能正确解析数据。获取密钥有多种方法,可以参考 ble_monitor/faq.md at master · custom-components/ble_monitor,这里使用最简单的一种。
首先,在米家 App 添加将米家蓝牙温湿度计 2,读取到数据。
然后,在 Android 手机、支持蓝牙功能的 Windows、Mac 上用 Chrome 打开 Telink Flasher 这个网站,点击 Connect,Chrome 会请求蓝牙权限,并扫描附近的蓝牙设备,选择名为 LYWSD03MMC
进行配对。由于米家蓝牙温湿度计 2 的蓝牙广播周期较长,需要耐心等待其出现在设备列表中。
配对成功后网页上会展示实时的温度和湿度,此时点击 “Do Activation” 按钮,等待完成后,“Mi Bind Key” 中的值就是我们需要的密钥。
添加 HA 配置
在 HA 的 configuration.yaml
中,添加配置,保存后重启 HA 服务。
|
|
具体配置项含义请参考 ble_monitor 的 README。
使用感受
- 米家蓝牙温湿度计 2 的数据更新时间比较久,大概每隔 11 分钟更新一次;
- 每次更新时的数据不是实时数据,猜测是 11 分钟内温度数据的均值;
因此这种集成,不太适合作为传感器触发自动化温度调节。
想要提高米家蓝牙温湿度计 2 广播频率,可以选择给米家蓝牙温湿度计 2 刷自定义的固件,参考 atc1441/ATC_MiThermometer: Custom firmware for the Xiaomi Thermometer LYWSD03MMC and Telink Flasher via USB to Serial converter。
参考链接
- Home Assistant
- Xiaomi Mijia BLE Temperature and Humidity Sensor - Home Assistant
- Missing socket.AF_BLUETOOTH in Anaconda Python? - Stack Overflow
- custom-components/ble_monitor: Xiaomi Mijia BLE MiBeacon monitor
- ble_monitor/faq.md at master · custom-components/ble_monitor
- Telink Flasher
- atc1441/ATC_MiThermometer: Custom firmware for the Xiaomi Thermometer LYWSD03MMC and Telink Flasher via USB to Serial converter