【Home Assistant(Hass.io)】
ESPHomeでセサミ5を操作!
「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。
家の玄関のカギをセサミ4からセサミ5(SESAME 5)にアップグレードしました。以前、セサミ4を入れた時「一応Home Assistantからごにょごにょすることは出来ました」と言いましたがごにょごにょが面倒で放置。時は流れ、セサミデバイスにESPHomeからアクセスするモジュールを作ってくれた人が出てきました。おお!是非試してみましょう。
基本的には下記サイトの言う通り進めます。 github.com
- 【Home Assistant(Hass.io)】 ESPHomeでセサミ5を操作!
- 1. 準備
- 2. 「esphome-sesame3」コンポーネント導入
- 3. ESPHomeデバイスにセサミ5の設定
- 4. Home AssistantでESPHome for Sesameデバイスを利用可能に
- 5. おわりに
この記事の前提条件 | |
---|---|
Home Assistant core | 2024.6.4 |
Home Assistant OS | 12.4 |
Server | Raspberry Pi 4(2GB) |
上記バージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)
1. 準備
セサミ5
前提条件としてセサミ5はセットアップ済みで、セサミアプリ(セサミ、ひらけゴマ)経由で動作できているものとします。我が家ではそれに加えてWiFiモジュール2と セサミタッチPro、リモートnanoと連携しています。
ESP32S 開発ボード/DOIT ESP32 DevKit V1*1
いつものKeeYees ESP-32S開発ボード(38ピンで横幅スリム)がAmazonになかったのでこちらを購入。30ピンの少し古いやつ、少し安い。ピン配置はここを参照*2。
2. 「esphome-sesame3」コンポーネント導入
2.1. ESP32S開発ボードをESPHomeで利用可能にする
PC上のブラウザで、左側のサイドバーから[ESPHome]を選び、右下の[+NEW DEVICE]をクリックする。デバイス名を入力(例えばsesame、とか)。
次に、開発ボードをPCに接続する。ボードの右下のチップを見ると「CP2102」と書いてある*3ので、CP2101で繋がっているCOMポートを選択する。もしなければ、キャンセルを押すと下記のような「ここからダウンロードせよ」的な画面がでるのでドライバをインストールして再チャレンジ。
「Preparing Installation」と出てクルクルし始めてからしばらく(私の環境では3分ほど)なんの反応もなく不安になりますが、急に「%」表示が出て進み始めます。
(ちなみに、前に使った開発ボードはコンデンサーをつけてあげないとUSB経由での書き込みが出来ませんでしたが、このDOIT ESP32 DevKit V1(の互換機)はUSBケーブルを挿すだけで書き込めました!その後のOTAでの書き込みついては、時々エラーが出て書けないこともありますが、そんな時は2~3回ほど「Install」すればいずれ書き込めます)
2.2. esphome-sesame3のconfig
ESPHomeの「EDIT」ボタンでエディタを起動し、yamlファイルに初期されたコードに下記のように修正加筆して、Installする。
esphome: name: sesame friendly_name: sesame libraries: - https://github.com/homy-newfs8/libsesame3bt#0.17.0 platformio_options: build_flags: - -std=gnu++17 -Wall -Wextra - -DMBEDTLS_DEPRECATED_REMOVED -DCONFIG_BT_NIMBLE_ROLE_BROADCASTER_DISABLED -DCONFIG_BT_NIMBLE_ROLE_PERIPHERAL_DISABLED # Configure the maximum number of connections as required - -DCONFIG_BT_NIMBLE_MAX_CONNECTIONS=4 build_unflags: - -std=gnu++11 lib_ldf_mode: 'deep' external_components: - source: type: git url: https://github.com/homy-newfs8/esphome-sesame3 ref: v0.10.0 components: [ sesame, sesame_ble ] esp32: board: esp32dev framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "****<初期生成されたものをそのまま利用>************" ota: - platform: esphome password: "****<こちらも初期生成をそのまま利用>*****" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # For changing IP address # use_address: 192.168.***.*** # Static IP for this device manual_ip: static_ip: 192.168.***.*** gateway: 192.168.***.1 subnet: 255.255.255.0 dns1: 192.168.***.1 dns2: 0.0.0.0 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Sesame Fallback Hotspot" password: "**<初期生成のまま>**" captive_portal: ## Use below definitions only for discovering your SESAME BT Addresses. # sesame_ble:
あとで、この後ろに設定を足してゆきます。
これでWiFiの固定IP設定まで出来ましたので、このあとはPCから外してOTA(Over The Air)でインストール(アップデートインストール)が可能になります。
3. ESPHomeデバイスにセサミ5の設定
ESPHomeデバイスからセサミ5にアクセスするためには「Bluetoothアドレス」「PSK(事前共有鍵)」の情報の取得が必要です。まずはそこから。
3.1. Bluetooth LE MACアドレスの取得
.yamlファイルの最後のsesame_ble:
のコメントアウトを外してあげてインストールすると、Bluetooth LEで信号を垂れ流しているsesameデバイスのログが見えます。
## Use below definitions only for discovering your SESAME BT Addresses. sesame_ble:
ESPHomeデバイスLOGSは下記のような感じで、「SESAME 5」より前の部分がBluetooth LE MACアドレスです。複数ある場合には(私のケースですね)、UUIDで区別します。UUIDはセサミアプリで確認できます。
[08:20:23][I][sesame_ble:107]: 01:02:03:04:05:06 SESAME 5 UUID=01020304-0102-0102-0102-010203040506 ・ ・
3.2. PSKの取得
PSKの情報はシェアする鍵のQRコードに含まれています。
アプリのセサミ設定画面を開いて「このセサミの鍵をシェア」を押してQRコードを表示させる。どのタイプの鍵を作るか聞いてくる(オーナー、マネージャ、ゲストの3レベル)ので、流出リスクを考えるとゲスト権限の鍵でいきたいところですが、ゲストキーでは権限不足なようで少なくともマネージャ権限以上が必要です。
QRコードの読み取りアプリ等でQRコードからテキストを取り出すことはできます。取り出したテキストはbase64でエンコードされているので、解読はできますが面倒*4。
mochipon氏(セサミ3/4用のPythonライブラリ「pysesame3」をつくった人)が提供している「QR Code Reader for SESAME(下記)」を使うと結構簡単に情報が手に入ります(ま、sesame用に情報を取り出すためのツールですから当然ですが)。そのサイトにさきほど生成したQRコードを読ませると、下記のような情報がデコードされます。
- Name:アプリで設定した鍵の名前
- Produc:製品名。sesame5と出るはずですが、このQR Readerはセサミ3/4なのでセサミ5はUnkownに。
- UUID:セサミ4では表示された気がしますが、見えませんね
- Key Level:Manager=1とか
- Key Index:(?)
- Secret Key:これが欲しいやつ!ですね。どこかにメモっておきましょう。
- Public Key:公開鍵。セサミ4などSesame OS2のデバイスでは必要になるらしい。
これをセサミの数だけ繰り返します。
githubにソースありますし、ネットにつながっていなくても動作する(上の画面のデーコード結果の画面ではネット(WiFi)を切っています)のでセキュリティ的に少し安心かな。
3.3. ESPhome Configにロック(Lock)の設定
ESPHomeのセサミ用デバイスのconfigにsesame:
セクションを定義して、玄関ドアの取っ手部分上側のセサミ5(lock_upper)と玄関ドアの取っ手部分下側のセサミ5(lock_lower)の設定します。
address:
にBluetooth LE MACアドレスを、secret:
にPSK(事前共有鍵)を設定します。
(前略) sesame: - id: sesame1 model: sesame_5 address: !secret sesame1_bluetooth secret: !secret sesame1_secret public_key: "" lock: name: lock_upper id: lock_upper - id: sesame2 model: sesame_5 address: !secret sesame2_bluetooth secret: !secret sesame2_secret public_key: "" lock: name: lock_lower id: lock_lower
4. Home AssistantでESPHome for Sesameデバイスを利用可能に
最近のHome Assistantは優秀で、新しいデバイスを設定すると「設定」サイドバー→「デバイスとサービス」→「統合」の画面に、「設定しますか?」と表示されます。
自力でデバイス追加したいときは、同じく「設定」サイドバー→「デバイスとサービス」→「統合」→「ESPHome」画面で、右下の「デバイスの追加」をクリックして、設定したESPHomeのIPアドレスを「ホスト」の欄に記入してあげれば追加できます。
(画面はSesame用ESPHomeデバイス追加済みですが…)
これでlock.sesame_lock_upper
とlock.sesame_lock_lower
という2つのlockエンティティが生成されました。値はlock
、unlock
、unknown
ですね、たぶん。
こんな感じでUIからも使えるようになります。
5. おわりに
WiFiモジュール2がいつまでたっても売り切れのまま入荷しないので、代わりにこのESPHomeデバイスを使う人もいるとか。たしかに反応も良く、結構便利に使えそうです。
私は(リモートnanoは買ったが)リモートを買い損ねたので、Xiaomiの壁スイッチでも使って、自作リモートでも作って遊ぼうかな…。
P.S.
設置編書きませんでしたが、セサミ5とBluetooth接続しているのでなるべくセサミ5(玄関)に近い所にESP32デバイスを置きましょう。私は玄関にTapoカメラ用ACアダプタボックスを設置したのでそこの空きスペースに格納しました。ちょうど延長ケーブルにタップ一つ空いていましたし。