Xiaomiの温湿度計のBLEデータをラズパイで取得。スマートホームプラットフォーム(Home Assistant, Homebridge, ESPHome)の紹介なども。


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">xiaomiの電子ペーパーの時計&amp;温湿度計よさげ。<br>斜めはもちろん薄暗いところでの見え方も液晶とは段違い。<br>BLEもついてる。<br>これで送料込み1500円で売るんだから強い。<br>日本でも販売してほしぃ。<br>(電子ペーパーの都合で秒はなし)<a href="https://t.co/lk0ODYODNb">https://t.co/lk0ODYODNb</a> <a href="https://t.co/LP4Ps8Cdwf">pic.twitter.com/LP4Ps8Cdwf</a></p>&mdash; ode (@odetarou) <a href="https://twitter.com/odetarou/status/1276892520157376514?ref_src=twsrc%5Etfw">June 27, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こちらの機種が良すぎたので温湿度データをラズパイで取得する方法をまとめます。

機種名
LYWSD02

# 商品自体の解説とセットアップ

下記記事が参考になります。
Xiaomiの温湿度計「Temperature and Humidity Monitor Digital Clock」レビュー | CLEARTEX.net
https://www.cleartex.net/entry/2020/01/26/xiaomi-digital-clock
ロケールを中国にするのが肝です。

# ライブラリ

https://github.com/h4/lywsd02
python製のこれがメジャーのようでした。

ロシア人の方がBLEデータを解析してライブラリにしてくれたようです。下記記事に苦戦の解析過程が書かれています。ブラウザの翻訳等で読めます。
https://habr.com/ru/post/452558/

# コード

`pip3 install lywsd02`
にてライブラリをインストールします。

```main.py
from lywsd02 import Lywsd02Client

mac = 'xx:xx:xx:xx:xx:xx'
client = Lywsd02Client(mac, notification_timeout=30.0)

with client.connect():
    data = client.data
    print(data.temperature)
    print(data.humidity)
    print(client.battery)
```

温湿度計のmacアドレスを指定して
`python3 main.py`
などで実行すると。

macアドレスはMi Homeアプリ上から確認できます。

```
25.57
64
69
```
温度、湿度、バッテリーの値が取得できます。


私の環境ですとたまに失敗してエラーがでるのが確認できました。エラーが出た場合はリトライなど実装したほうがよさそうです。

```py
Traceback (most recent call last):
  File "main.py", line 6, in <module>
    with client.connect():
  File "/usr/lib/python3.7/contextlib.py", line 112, in __enter__
    return next(self.gen)
  File "/home/ode/.local/lib/python3.7/site-packages/lywsd02/client.py", line 47, in connect
    self._peripheral.connect(self._mac)
  File "/home/ode/.local/lib/python3.7/site-packages/bluepy/btle.py", line 445, in connect
    self._connect(addr, addrType, iface)
  File "/home/ode/.local/lib/python3.7/site-packages/bluepy/btle.py", line 439, in _connect
    raise BTLEDisconnectError("Failed to connect to peripheral %s, addr type: %s" % (addr, addrType), rsp)
bluepy.btle.BTLEDisconnectError: Failed to connect to peripheral E7:2E:00:B1:F4:82, addr type: public
```


# 各種スマートホームプラットフォーム向け実装

調べてみるといろいろありますね。
ラズパイが活躍しそうで。（本当はお家サーバー用意したくなくてクラウドで管理でメンテいらずにしたいのだけどラズパイ使わざるをえないのか。。）

## Home-Assistant
ブラウザで見れるスマートホームのダッシュボード作れるやつらしいです（これから試す予定）

h4/LYWSD02-home-assistant: Home-Assistant sensor for LYWSD02 Thermometer
https://github.com/h4/LYWSD02-home-assistant

Home Assistant
https://www.home-assistant.io/

公式のDEMO
https://demo.home-assistant.io/

HomeAssistantでスマートホームコントローラを作ってみる[1/6] | 育児×家事×IoT
https://dream-soft.mydns.jp/blog/developper/smarthome/2019/12/489/
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/99ebceb7-0aca-543d-e5db-580e4b81a185.png">

Home Assistantを使って、様々な情報を表示する『スマートホーム情報パネル』を作ってみた（温度・湿度、電力、NW、カメラ映像） | 育児×家事×IoT
https://dream-soft.mydns.jp/blog/developper/smarthome/2020/05/1218/

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">スマートホームのダッシュボード的なものが欲しくて、Home AssistantというOSSが良さげだったので色々と弄ってみている。これにNature Remoのプラグインを作ると良さげかも。 <a href="https://t.co/e7pjBrm5Cd">pic.twitter.com/e7pjBrm5Cd</a></p>&mdash; 🈚️ (@yzkiyuto) <a href="https://twitter.com/yzkiyuto/status/1257659349427580931?ref_src=twsrc%5Etfw">May 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Home Assistant (hass.io) と Google Home で自宅のレガシーデバイスを操作する話 - Qiita
https://qiita.com/keigoi/items/f96dd62bb2647e872a6a
>Home Assistant (hass.io) を入れると、Google Home に任意の仮想的なデバイスを追加できるようになる。

便利そう。


Home Assistant Cast - Home Assistant
https://www.home-assistant.io/blog/2019/08/06/home-assistant-cast/
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/40a3889f-428a-7392-d0d7-128560a5322e.png">
Nest HubやChromecastの画面にキャストもできるみたいです。すごい。

## Homebridge (iOS系)
hannseman/homebridge-mi-hygrothermograph: Homebridge plugin for the Xiaomi Mi Bluetooth Temperature and Humidity Sensor
https://github.com/hannseman/homebridge-mi-hygrothermograph

homebridge/homebridge: HomeKit support for the impatient
https://github.com/homebridge/homebridge

※iOS持ってないので詳しくはないです

おそらく下記のようにHomeアプリに温度など表示できると思われます。
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/341acb4b-d74c-8181-c77f-505a30e98ae0.png">


下記は別センサーでの例ですがHomebridge知らない人向けに参考になりそうです。
Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (2) "homebridgeでHomeKit対応" | THE POOH FILES
https://min2club.com/talk/2020/03/02/raspberry-pi-4-4gb%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A7%E3%81%93%E3%82%8C%E3%81%BE%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9F%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E7%92%B0%E5%A2%83%E3%82%92%E7%B5%B1-2/

iOS系持ってる人は使ったほうが良さそうですが
持ってなくてもWeb UIでも見るツールあるみたいなので選択肢には入ってもよいのかもしれません。（未利用）

<img width="1000" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/f44b03d7-bf0a-9be4-6d94-5ccc88657ba5.png">

【Homebridge】Web管理ツール「Homebridge Config UI X」をラズパイで使う方法 - CHASUKE.com
https://chasuke.com/homebridge-config-ui-x/

oznu/homebridge-config-ui-x: Homebridge Web UI plugin to monitor, manage and control Homebridge from a browser.
https://github.com/oznu/homebridge-config-ui-x

## ESPHome向け

ESPHome自体があまりわかってないですがHome Assistant用のセンサーとして連携して使えるみたいですが恐らくESP32単体でもコンポーネント使えば色々できるのかと思われます。MQTTやWebServerなど色々あるようです。

Xiaomi LYWSD02 BLE Sensor — ESPHome
https://esphome.io/components/sensor/xiaomi_lywsd02.html

ESPHome — ESPHome
https://esphome.io/index.html

ESP32/ESP8266をホームオートメーションに使うためのフレームワークESPHome – inajobのいろいろレビュー
https://inajob.github.io/iroiro-review/post/esp32-esp8266%E3%82%92%E3%83%9B%E3%83%BC%E3%83%A0%E3%82%AA%E3%83%BC%E3%83%88%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFesphome/

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/7128aec7-3975-2ee7-5c67-317572c8e752.png">


# その他のxiaomiの温湿度計

## LYWSDCGQ/01ZM

液晶、BLE、丸形、単４電池

<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/4600edd2-4953-2693-79fe-b3f4cecdaec0.png">

Xiaomi Mijia 温湿度計 をIoTデバイスとして使う - Qiita
https://qiita.com/poruruba/items/d16b58dfb45e513111d6

Xiaomi Mijia LYWSD03MMC vs Mijia LYWSDCGQ/01ZM: Which Digital Bluetooth Thermometer Hygrometer is Better?
https://www.gearbest.com/community/SanfL4

### ライブラリ
LynxyssCZ/node-xiaomi-gap-parser: Xiaomi GAP sensor data parser
https://github.com/LynxyssCZ/node-xiaomi-gap-parser
こちらのライブラリをLYWSD02で利用したところ温度と湿度のどちらかしか取得できなくまとめては取得できませんでした。機種によってプロトコルが微妙に違うと思われます。

## LYWSD03MMC

液晶、BLE、四角形、CR2032、快適度の顔表示、安い（700円ほど)
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/ebcedb84-46e6-a28e-74f1-320d77139d1f.png">

### ライブラリ
JsBergbau/MiTemperature2: Read the values of the Xiaomi Mi Bluetooth Temperature sensor 2
https://github.com/JsBergbau/MiTemperature2
こちらのライブラリをLYWSD02で利用したところ動きませんでした。機種によってプロトコルが違うようです。
READMEを読むとプライバシーに配慮したのかadvertisment dataでは送信しなくなり、BLEでの接続が必要になったようです。

## MHO-C201, MHO-C202
電子ペーパー、BLEは搭載なし、CR2032

<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132679/fbd505d3-f2b1-a97a-bcdf-bc6a5d0cfaa0.png">

miというロゴがついて広告されていたりxiaomi製品と並んで販売されていたりxiaomi製かと勘違いするが実際は秒秒测(miaomiaoce)という企業でBLEも搭載なし。xiaomiから投資されている会社との噂。

Amazon.co.jp： 温湿度計 Homidy 温度計 デジタル湿度計 室内 高精度±0.3℃ E-Ink大画面 見やすい 顔文字でお知らせ 置き・掛け・貼り三用（マグネット付） 日本語説明書: ホーム＆キッチン
https://www.amazon.co.jp/dp/B07GL1Z8P9

秒秒测(miaomiaoce)の温湿度計「MHO-C202」買った - ヒトナツログ
https://written-1natsu.hatenablog.com/entry/2018/10/27/131116