米家蓝牙温度计2使用:
以下是 Home assistant连接米家蓝牙温湿度计 2(LYWSD03MMC)使用经验。

米家蓝牙温湿度计2(LYWSD03MMC)有多个硬件版本,其主控SOC是ATC1441,
不同的硬件版本内置的温湿度传感器略有不同,我购买的硬件版本是B2.0。

除了使用原厂的固件,还有2个开源固件可以选择,分别是:
https://github.com/atc1441/ATC_MiThermometer
https://github.com/pvvx/ATC_MiThermometer

使用原厂的固件时,有两种方式可以获取温湿度信息:

一种是每次与温湿度计配对读取信息,这个过程不涉及到加密,但每次配对会导致温湿度计耗电多,因此不建议使用。
如果运行Home assistant的设备有蓝牙接口,使用下面的配置可以获取信息:

sensor:
  - platform: mitemp_bt
    mac: "A4:C1:38:8D:D0:B6"
    name: 温湿度
    force_update: true
    median: 1
    monitored_conditions:
      - temperature
      - humidity
      - battery
另一种方式是获取温湿度计定时广播的数据包从而读取信息。默认激活后,
每隔10分钟左右温湿度计会广播温湿度、电池、信号等信息,这些信息是
分不同的数据包间隔广播的,并不是在一个数据包内一次性携带了所有信息。
这些信息在发送时使用了bind_key(encryption_key)加密,因此需要知道
bind_key才可以获取信息。

这种方式的优点是将温湿度计激活后不再需要与温湿度计蓝牙通信,只要接收
信息即可,比较省电。但需要注意的是,每次激活后bind_key都会发生变化,
一旦用下面介绍的方式激活并获取bind_key,就不可以再用米家app重新激活,
否则bind_key会变化。

如果运行HA的设备有蓝牙接口并且与温湿度计距离很近,可以在HA中使用如下的配置:
(bt_interface是HA设备的蓝牙口MAC)

ble_monitor:
  bt_interface: 'DC:A6:32:29:D7:A1'
  bt_auto_restart: False
  active_scan: False
  discovery: True
  period: 60
  use_median: False
  decimals: 1
  log_spikes: False
  restore_state: False
  report_unknown: False
  devices:
    # sensor
    - mac: 'A4:C1:38:8D:D0:B6'
      name: 温湿度
      encryption_key: '9def76278a246ed2154351ffe38ec624'
      temperature_unit: C
      use_median: False
      restore_state: default
除了这种方式外,还可以购买ESP32模块,通过ESPHome接入,使用如下的配置:
esphome:
  name: esp32-f3-south-room
  platform: ESP32
  board: nodemcu-32s

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "********************************"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-1 Fallback Hotspot"
    password: "d6Y8ZEdCJN3A"

captive_portal:

esp32_ble_tracker:

sensor:
  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:C1:38:CA:93:AB"
    bindkey: "3a6120ad0a7efd4ef1100dcc4e4c1aed"
    temperature:
      name: "93AB Temperature"
    humidity:
      name: "93AB Humidity"
    battery_level:
      name: "93AB Battery Level"
  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:C1:38:1E:B0:5F"
    bindkey: "d17699fc5676cb60864e6254686eddc3"
    temperature:
      name: "LYWSD03MMC Temperature"
    humidity:
      name: "LYWSD03MMC Humidity"
    battery_level:
      name: "LYWSD03MMC Battery Level"
获取bind_key以及更换固件,可以使用
https://atc1441.github.io/TelinkFlasher.html
https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html
方法是:点击connect,在系统弹出的蓝牙列表中选择温湿度计,连接后单击 Do Activation即可。
经测试苹果的设备和一些安卓手机无法弹出蓝牙列表,windows一般都可以。

注意1:温湿度计的MAC地址并不是蓝牙连接时显示的哪个MAC地址。
要想知道MAC地址,可以使用米家App添加温度计后在在温度计/设置/关于中获得,
也可以使用ESPhome的LOG通过收到的广播包获知。

注意2:每次激活或使用米家app激活都会导致bind_key变化,使用这个方法激活后米家app是不能连接温湿度计的。