コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home Assistantでホームオートメーション】ESPHomeで屋内センサー増量

【Home Assistant(Hass.io)】
ESPHome(NodeMCU ESP32)とXiaomiの温湿度計

「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。

 家の気象観測地点は、リビング、外、そして浴室と3か所に増えました。もう少し観測点を増やしたいところ。Xiaomiの温湿度計とそのデータを収集するESPHomeを設定します。

 現在OMRONの2JCIE-BL01/Wxbeacon2を3か所に設置して、気温などのデータを収集しています。2JCIE-BL01/Wxbeacon2は「気温」「湿度」「気圧」「騒音」「照度」と5種類のデータを測定できて、しかも5000円弱というのは大変ありがたいIoTデバイスです。測定も安定しています。
 しかしまだまだ測定出来ていない場所が沢山あります。1階の勉強部屋(という名のでリビングの外れのスペース)、2階の寝室、書斎(という名の納戸)、サーバールーム(という名のウォークインクローゼット(という名の小部屋)の一角…)、子供部屋などなど。それらはこの猛暑でどのぐらいの室温になっているのか、さっぱりわかりません。ということで、もう少し安価なデバイスが無いかと探してみました。

 いろいろ調べてみると、中国のAppleと言われたXiaomiからナイスなスマートホーム用のIoTデバイスがいくつも出ていることがわかりました。今回はその辺りをつかってみます。

[2022/09/11 追記]
ESPHomeの画面が新しくなっているので、3章あたりを別記事で補足。

maky-ba.hatenablog.com

この記事の前提条件
Home Assistant 0.114.1
HassOS 4.12
Server Raspberry Pi 4(2GB)

 上記バージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

1. 準備するもの

1.1. XiaomiのIoTデバイス

 AliExpressなどの中国のECサイトを見ていると様々なシリーズが出ていますが、イマイチ全体感がつかめません。ま、勢いがあるからそれでイイという事かもしれません。

Xiaomi mijia Bluetooth 温湿度計(LYWSDCGQ )
丸形で表示は液晶。電池は単4で1年持つと言っています。壁掛け用のパネルが付いています。

Xiaomi mijia Bluetooth 温湿度計(LYWSD03MMC)
四角で小型。表示は液晶。電池はCR2032で、こちらも1年持つと言っています。画面に快適さが顔文字で表示されるという「余計な」機能が付いています。通信が暗号化されているようで、少し手間取りそうです。

LYWSDCGQ LYWSD03MMC
四角
サイズ 60.8 x 60.8 x 22.5
43g
43 x 43 x 12.5
21.5g
電池 単4 CR2032
電池の持ち 1年 1年
信号送信間隔
(気温・湿度)
20回/分 10分に1回
信号送信間隔
(電池残量)
10分に1回 1時間に1回
値段(単価) 1,220円
4個セットの場合1,060円
540円
4個セットの場合420円

 本来はXiaomiのハブと一緒使ってXiaomiのクラウドサービスで管理するのですが、今回も例によって例のごとく、単なるIoTデバイスとしてこれらを使用します。

1.2. データ収集用のデバイス(ESP32)

 OMRONの時はRaspberry Pi Zero Wを使いましたが、スイッチサイエンスでも1個2000円弱です。こちらも、もう少し手軽なものを探します。ESP32というのがIoT向けのマイコンボードとして注目されているのは、なんとなく知っていました。

NodeMCU ESP32 
NodeMCU ESP32(もしくはESP32-DevkitCとも呼ばれる)は、ESP32にUSB接続機能等を付加し使い易い形にしたもの。オリジナルの値段はしりませんが、KeeYees社のはAmazonでも2個セットで1,880円とお安いものでした。耐久性とかはどうかな…

3. ESPHome

 ESPHomeは、(Home Assistantと同じ)yamlファイルで設定してESP32(およびESP8266)を制御するシステムです。ホームオートメーションシステムから使うようになっています。Home Assistantとの親和性もばっちり。

esphome.io

3.1. ESPHomeのHome Assistantへの導入

 Home Assistant Community Add-onsからESPHomeアドオンをインストールします。アドオンのconfigurationタブには下記を記載してStartさせます。

ssl: true
certfile: fullchain.pem
keyfile: privkey.pem

3.2. NodeMCU-ESP32の初回接続の準備

 オリジナルやほかの会社のボードはどうか知りませんが、KeeYees社のボードはリセット周りの回路がイマイチでUSB接続時の自動書き込みがうまくいかないようです。実際うまくいかず、しばらく悩みました。
 ENピンとGNDピンの間にコンデンサ(0.1μF)を入れれば大丈夫とのことでしたので、ブレッドボード上でコンデンサを接続します。

 ちなみに、ESP32-DevKitC(たぶんこっちがオリジナル)とNodeMCU-32S(でこれが互換品。しかもKeeYeesのは互換品の互換品)の違いは幅です。少し見にくいかもしれませんが、NodeMCUの方が1ピン横幅が細いのでブレッドボードで両側に1列ずつ穴があまる(使える)のです。余談ですが。
2021/4/11追記:回路図エディタfritzingを使ってみました。

さてコンデンサーを繋いだら、USBケーブルでHome Assistantサーバに接続します。

USBケーブルで接続したら、ESPhomeアドオンに認識させるために一度アドオンを再起動しておきます。

3.3. ESPHomeへの初回接続

[2022/09/11追記]
ESPHomeの画面がだいぶ変わったので、ESPデバイスの初期設定あたりを補足。



 アドオンをスタートした後で「OPEN WEB UI」するとESPHomeのダッシュボード(デバイス統合管理画面?)が開きますが、とりあえずノードの設定ファイルを作る設定ウィザードを始めるように強く誘導されます。
 初回だけでなく、今後新しい設定ファイルを作る時は、この右側にあるプラスマークの赤い丸をクリックすることで、新しいノード(ESP32デバイス)の設定ファイルを作成できます。

ノードの設定ファイルのウィザードは3ステップです。

  1. ノードの名前をつける
  2. バイスを選択(NodeMCU-32S)
  3. Wifiの設定
    WiFiの設定とOTA(Over-The-Aire)のためのパスワード設定です。
  4. 終了!

 中身がからっぽな設定ファイルは出来ました(設定ファイルのパネルもできました(左側画面))。次は実際にデバイスにアップロードする必要があるので、右上で接続の仕方でUSBを選んでおきます。

 ちなみに設定ファイルのパネルの中で「Offline」とありますが気にしないで、「UPLOAD」をクリックします。結構時間がかかりますが、最後に「Boot seems successful, resetting boot counter」とでればOK。「seems(たぶん)」だなんて、なんて弱気な…。

 ESPHomeは2回目からはOTA(Over The Air)で書き込み出来るので、ブレッドボードの出番は初回だけです。はんだ付け不要。素敵、でも電子工作好きとしては少し寂しい…。

3.4 Xiaomi温湿度計のBluetooth MACアドレス取得

 もうUSBケーブルとブレッドボードは不要なので、引き抜いてUSB電源だけをNodeMCU-ESP32に繋ぎます。今の設定ファイルは、ノード名とWiFiの情報だけを持った空っぽなので、そこに必要な機能を付け加えてゆきます。
 なお小型角型の温湿度計(LYWSD03MMC)はBeta版を使ってかつ暗号キーを取得する必要があるなど少し面倒なので、まずは丸形の温湿度計(LYWSDCGQ)の接続設定からいきましょう。(温湿度計(LYWSD03MMC)は次回)

 丸形の温湿度計の裏ブタを開けて単四アルカリ電池を入れます。

 次に先ほどWiFiなどの初期設定を済ました設定ファイル(「xiaomi_ble_1f」)のパネルで「LOGS」をクリックします。そうするとBluetooh LEでのスキャン結果が次々に表示されるので、目的の物が出てくるまでしばらく待ちます。丸形の温湿度計(LYWSDCGQ)はスキャンでは名前がMJ_HT_V1と表示されるので、名前がMJ_HT_V1で今まで発見していないアドレスの物が表示されるのを待ってください。

(略)
[14:44:34][D][esp32_ble_tracker:544]: Found device 58:2D:34:3B:XX:XX RSSI=-59
[14:44:34][D][esp32_ble_tracker:565]:   Address Type: PUBLIC
[14:44:34][D][esp32_ble_tracker:567]:   Name: 'MJ_HT_V1'
(略)

 この「58:2D:34:3B:XX:XX」がBluetoothMACアドレスなのでこれをメモしておきます。

3.5 Xiaomi温湿度計データ収集用の設定ファイル構築

 Xiaomiのデバイスごとの設定ファイルの例は下記のとおりです。 esphome.io (リンク修正2020/10/11:LYWSD03MMC単独のページではなくなって、Xiaomi Mijiaでまとめたページになっていますね)

 設定ファイル(「xiaomi_ble_1f」)のパネルで「EDIT」をクリックし、上のConfigurationのサンプルを参考に下記のように設定します。

(前略)
# BLE Tracker
esp32_ble_tracker:

sensor:
  # Xiaomi Temperature-Humidity Sensor
  - platform: xiaomi_lywsdcgq
    mac_address: 58:2D:34:3B:XX:XX
    temperature:
      name: "Xiaomi LYWSDCGQ No1 Temperature"
    humidity:
      name: "Xiaomi LYWSDCGQ No1 Humidity"
    battery_level:
      name: "Xiaomi LYWSDCGQ No1 Battery Level"

 次に設定ファイルのパネルの「UPLOAD」をクリックします。右上の接続方法が「OTA (Over-The-Air)」にすることを忘れずに。コンパイルおよびアップロードがうまくいけば、「Compile And Upload xiaomi_ble_1f.yaml」画面の最後に温湿度計からのデータを受け取りログを表示します。

4. Home Assistantでの設定

 「設定」→「Integrations」と進むと既にESPHomeで先ほど設定したデバイスが検知(Discovered)されていますので、「CONFIGURE」ボタンでデバイス追加します。

 3.3ESPHomeの初回設定で設定したパスワードを入力すると、読み込み設定が完了します。NodeMCU-ESP32の設置場所も聞かれます。

 これだけで設定した3つの値(温度、湿度、電池残量)がHome Assistantで使えるようになります。UIだけで簡単設定になってきていますね。

 エンティティの表示名も「設定」→「エンティティ」でエンティティを選ぶと「表示の上書き」に漢字で設定可能です。こちらもconfiguration.yamlとかcustomizer.yamlとかをエディタでごりごり記述する必要はありません。


(上の画面では既に不快指数の設定もしています)

5. おわりに

 Xiaomiのデバイスは白を基調とした見た目すっきりしたデザインでなかなか良いと思います。

 ただし測定値はばらつきがあります。まあお値段相当というか、OMRONの5000円(OMRONから買うと1万円)のデバイスと比較してはいけないのかもしれません。1000円ちょっとのデバイスですから。

 WxBeacon2の1台分のお値段で、4か所カバー出来ました、上出来です。

 さて、さらに安価なXiaomi温湿度計を使うべくESPHomeのBeta版を試したりしてみたいと思います。

maky-ba.hatenablog.com