はじめに
3~4年前から、Home Assistantを使ったスマートホームを構築してきました。
しかし、Google NestやAmazon EchoなどのスマートスピーカーをHome Assistantと連携させるのは大変でセキュリティリスクもあるので、困っていました。
今回、Home AssistantをMatter化できるアプリケーションを発見し、試したところ良さそうだったので、紹介します。
要約
- Home-Assistant-Matter-Hub を使うと、Home AssistantをMatterデバイスとして公開でき、スマートスピーカーと連携できます。
これまでのGoogle Assistant連携
昔から、Home AssistantとGoogle Assistantを連携させるには以下を使えば可能でした。(私は使っていませんがAlexaも似た状況)
しかし、Home Assistant Cloud は設定が楽というメリットがありますが、有料で年間1万円程度かかってしまいます。
Google Assistant統合のほうは、無料か無視できるほどの低価格(月額10円程度?)というメリットはありますが、設定が複雑であることと、Home Assistantをインターネットに公開する必要があるという問題がありました。(私が使ってきたのはこちら)
Home Assistantのインターネット公開は、認証をちゃんとしたり、VirtualHostを使ったりすれば、気にするほどではないとは思いますが、やはりインターネット経由で不特定多数が自宅を操作できる可能性がある、というのは気持ち悪いものです。
home-assistant-matter-hub
5chのスマートホームスレで home-assistant-matter-hub が紹介されていてこれを試してみました。 (教えてくれた856さんに感謝)
【自動化】スマートホーム 22【家電ハック】 - 5ちゃんねる掲示板
仕組みとしては、Home Assistant内のデバイスをRest API経由で取得・設定し、Matterプロトコルに変換してくれます。
これによって、Home Assistant自体を1つのMatterデバイスとしてGoogle Assistant/Alexaに公開できます。
home-assistant-matter-hubの起動
セットアップのやり方は、(1)Home Assistant Addonを使用する、(2)Dockerで構築する、(3)node.jsで構築する、の3パターンで、私はHome Assistantを汚したくなかったので、別サーバーにあったDockerを使って(2)で構築しました。
といっても、Readmeに従って、環境変数などを指定する程度です。
services:
matterhub:
image: ghcr.io/t0bst4r/home-assistant-matter-hub:latest
volumes:
- /volumes/homeassistant-matter-hub/data:/data
restart: always
environment:
- HAMH_HOME_ASSISTANT_URL=https://xxxxxxx.xxxxxxxxxxxx.com/
- HAMH_HOME_ASSISTANT_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- HAMH_LOG_LEVEL=info
- HAMH_WEB_PORT=8482
network_mode: "host"
HAMH_HOME_ASSISTANT_URL
はHome AssistantのURL、 HAMH_HOME_ASSISTANT_ACCESS_TOKEN
は、Home Assistantの"長期間有効なアクセストークン"です。
アクセストークンは、Home Assistant左下のユーザーから、セキュリティ タブ内にあります。
上記のcompose.ymlを起動します。
$ docker compose -f compose.yml up -d
home-assistant-matter-hubの設定
起動確認後、 http://(dockerサーバー):8482/
でhome-assistant-matter-hubの管理画面にアクセスできます。
UIはシンプルで+ボタンでBridgeを追加します。Google Assistant・Alexaなど複数環境でも1つのBridgeになるようで、基本的にここには1つのBridgeになると思います。
Bridgeの設定ではNameとPortの他、Home Assistantの中から公開するデバイスを選択します。
Domain
ではデバイスの種類を指定して全公開、 label
ではHome Assistantでラベルを指定したデバイスのみ公開できます。( pattern
と platform
は未使用)
include/excludeが未指定の場合はHome Assistantの全デバイスが公開されそうでした。
私は、 domain
で light
、 cover
、 climate
、 lock
を指定、スイッチは不要なものが多いのでlabelを付けて label
指定で公開しました。
注意点は、 label
はHome Assistantの内部ID(Readme上では slug
と呼ばれています)を指定する必要があります。Home Assistant内で {{ labels() }}
を表示して調べる必要がありました。
Google HomeアプリからMatterデバイスとして登録
Bridgeの設定が終われば、QRコードが作成されるので、Google Homeアプリのデバイス-追加ーMatter対応デバイス からQRコードを読み取って追加できました。
このHomeアプリからのタップでも操作できますし、ここの名前を指定してGoogle Homeなどのスマートスピーカーでも操作できます。
遅延も、0.1秒ほどでしょうか、ほとんど感じず快適でした。
(もともとGoogle Assistant統合の頃から遅延は感じませんでしたが)
Alexaとの連携の追加
これは苦労しました。
home-assistant-matter-hubにもう1つBridgeを作るのかと思いましたが、これではうまくいきませんでした。
どうも、Google HomeアプリからMatterデバイスを共有することができるようで、何度も試した結果AlexaにもMatterデバイスとして追加できました。
ただ、何度も試したのでどれが良かったのかわかりません。
もう一度やるのも怖いので、うまくいったと思われる操作を載せておきます。
Google Homeアプリ上で先ほど連携したMatterデバイスを開き、「リンクされているMatterのアプリとサービス」をタップする。
「アプリとサービスをリンク」をタップする。
Amazon Alexaを選んでMatterデバイスを共有する。
公式ドキュメントでも、Apple HomeのMatterデバイスをAlexaに共有するようなやり方が載っていて、やはり登録済みデバイスを共有するようなやり方のようです。
https://github.com/t0bst4r/home-assistant-matter-hub/blob/main/packages/documentation/faq/Connect%20Multiple%20Fabrics.md
まとめ
Home-Assistant-Matter-Hub を使うことで、Home AssistantをMatterデバイスとして公開でき、Google AssistantやAlexaと連携できました。
(試していませんが、Apple Homeもできるはず)
Home Assistantはもともと多種多様なデバイスを統合できますので、それらがスマートスピーカーと連携できるようになりました。
うちで言うと、RMmini3、Zigbee、ESP32、MQTT、Echonet Liteがスマートスピーカーと連携しています。
また、インターネット公開必須だった「Google Assistant統合」も削除でき、よりセキュアなスマートホーム環境が構築できました。
余談:ECHONET LiteとMatterの共存
2年前に、私の記事でECHONET Liteの心配もしていましたが、Home Assistant経由でMatter化できるのならば当面は共存できそうです。
仮にMatterが今後伸びたとしても、ECHONETLite2MQTTのようにECHONET LiteとMatterをつなぐブリッジを作れば、過去の機種も含めてMatter対応できるはずで、あまり心配する必要はないんじゃないかと思っています。
また、個人的にはHome AssistantがMatter対応してくれたらそれで十分ですね。
ちょっとBridgeが多いですが、以下のようにつながります。
ECHONET Lite → ECHONETLite2MQTT → MQTT → HomeAssistant → Home-Assistant-Matter-Hub → スマートスピーカー
当時、ECHONETLite2Matterを作ろうかと思いましたが、HomeAssistantが対応するだろうと思ってやめておいてよかったです。
1週間運用してみて(2024/12/22追記)
Home-Assistant-Matter-Hubを運用し始めて1週間が経ちました。
ここまでで気付いた点を追記します。
まずクラッシュや突然動作しなくなるといったことは無く安定して動作しています。応答も早いし当面使っていく予定です。
(1)起動時にHome Assistantにつながらないとエラーになり復帰しない
私の環境では、Home-Assistant-Matter-HubをHome Assistantとは別の仮想PCのDockerに入れている関係で、
Home-Assistant-Matter-Hubが起動してから数分後にHome Assistantが起動します。
この場合Home-Assistant-Matter-Hubは起動時にエラーを記録し、自動復帰等も無くMatter-Hubとして動作しない状況になりました。
もうログは消してしまったのですが、起動時にエラーログが記録されて停止しているようでした。
コンテナの再起動で復帰しますが、起動順番は注意したほうが良さそうです。
(2)Google Homeでシャッターの状態がおかしい
Home Assistantには電動シャッターを登録してあるので、 cover
としてMatterで公開しました。
しかし、Google Homeから操作はできますが、状態がおかしいようです。
どうも、 cover
は状態のPush通知を受け取っていないような・・・?
light
、 switch
、 climate
は正しいようでした。
Home-Assistant-Matter-Hub上でも100%(=Close状態)
Google Home上では 開
状態
Alexaでは、100%(=Close状態)になってました。
(3)換気扇に非対応
Home-Assistant-Matter-HubのReadme にありましたが、Google Home/Alexa共に換気扇に対応していないようです。
Fans are supported in the matter specification, but they are not yet supported by Voice Assistants like Alexa, Google or Apple.
ファンは仕様でサポートされていますが、Alexa、Google、Apple などの音声アシスタントではまだサポートされていません。
これは、Home Assistant上でFanをSwitchとして定義すれば問題なく動作しました。
switch:
- platform: template
switches:
studyroom_fan_switch:
unique_id: studyroom_fan_switch
friendly_name: "書斎換気扇"
value_template: "{{ is_state('fan.studyroom_fan', 'on') }}"
turn_on:
- service: fan.turn_on
entity_id: fan.studyroom_fan
turn_off:
- service: fan.turn_off
entity_id: fan.studyroom_fan
(4)AlexaでエアコンのOFFができない
Alexaは積極的に使っていなかったので気付いてなかったのですが、X(旧Twitter)で教えてもらいました。
AlexaでエアコンのOFFができないようです。
スピーカーからは「書斎エアコンはその操作に対応していません」って回答されました。
スマートフォンのAlexaアプリからはOFFにできましたが。
Home-Assistant-Matter-HubのIssueになっていますが、Alexa側の問題のようです。
GoogleもAlexaも、Matter対応があと一歩な感じがしますね。