Google Assistant/AlexaとHome AssistantをMatter経由で連携する

## はじめに

3～4年前から、Home Assistantを使ったスマートホームを構築してきました。
しかし、Google NestやAmazon EchoなどのスマートスピーカーをHome Assistantと連携させるのは大変でセキュリティリスクもあるので、困っていました。
今回、Home AssistantをMatter化できるアプリケーションを発見し、試したところ良さそうだったので、紹介します。

## 要約

* [Home-Assistant-Matter-Hub](https://github.com/t0bst4r/home-assistant-matter-hub) を使うと、Home AssistantをMatterデバイスとして公開でき、スマートスピーカーと連携できます。

## これまでのGoogle Assistant連携

昔から、Home AssistantとGoogle Assistantを連携させるには以下を使えば可能でした。(私は使っていませんがAlexaも似た状況)

* [Home Assistant Cloud](https://www.nabucasa.com/) 
* [Google Assistant統合](https://www.home-assistant.io/integrations/google_assistant/) 

しかし、[Home Assistant Cloud](https://www.nabucasa.com/) は設定が楽というメリットがありますが、有料で年間1万円程度かかってしまいます。
[Google Assistant統合](https://www.home-assistant.io/integrations/google_assistant/)のほうは、無料か無視できるほどの低価格(月額10円程度？)というメリットはありますが、設定が複雑であることと、Home Assistantをインターネットに公開する必要があるという問題がありました。(私が使ってきたのはこちら)
Home Assistantのインターネット公開は、認証をちゃんとしたり、VirtualHostを使ったりすれば、気にするほどではないとは思いますが、やはりインターネット経由で不特定多数が自宅を操作できる可能性がある、というのは気持ち悪いものです。

## home-assistant-matter-hub

5chのスマートホームスレで [home-assistant-matter-hub](https://github.com/t0bst4r/home-assistant-matter-hub) が紹介されていてこれを試してみました。 (教えてくれた856さんに感謝)

[【自動化】スマートホーム 22【家電ハック】 - 5ちゃんねる掲示板](https://itest.5ch.net/lavender/test/read.cgi/kaden/1711154854/856)


仕組みとしては、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に従って、環境変数などを指定する程度です。

``` compose.yml
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左下のユーザーから、セキュリティ タブ内にあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/d55b7ecd-ac2d-0eb3-6a81-10d4b1703edb.png)


上記のcompose.ymlを起動します。

```
$ docker compose -f compose.yml up -d
```

### home-assistant-matter-hubの設定

起動確認後、 `http://(dockerサーバー):8482/` でhome-assistant-matter-hubの管理画面にアクセスできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/86e5d80a-ba15-6457-d3e2-f887cf8acaf3.png)


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` 指定で公開しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/b6752240-abbe-e372-6a79-1d6b2af24503.png)

注意点は、 `label` はHome Assistantの内部ID(Readme上では `slug` と呼ばれています)を指定する必要があります。Home Assistant内で `{{ labels() }}` を表示して調べる必要がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/2fe461da-42d6-7979-dfce-1fa79cb762c2.png)

### Google HomeアプリからMatterデバイスとして登録

Bridgeの設定が終われば、QRコードが作成されるので、Google Homeアプリのデバイス-追加ｰMatter対応デバイス からQRコードを読み取って追加できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/c4795118-c027-bb9a-709c-9ce983e23e47.png)

このHomeアプリからのタップでも操作できますし、ここの名前を指定してGoogle Homeなどのスマートスピーカーでも操作できます。
遅延も、0.1秒ほどでしょうか、ほとんど感じず快適でした。
(もともとGoogle Assistant統合の頃から遅延は感じませんでしたが)


### Alexaとの連携の追加

これは苦労しました。

home-assistant-matter-hubにもう1つBridgeを作るのかと思いましたが、これではうまくいきませんでした。
どうも、Google HomeアプリからMatterデバイスを共有することができるようで、何度も試した結果AlexaにもMatterデバイスとして追加できました。
ただ、何度も試したのでどれが良かったのかわかりません。
もう一度やるのも怖いので、うまくいったと思われる操作を載せておきます。

Google Homeアプリ上で先ほど連携したMatterデバイスを開き、「リンクされているMatterのアプリとサービス」をタップする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/9384c6fd-dcaa-f4bc-02c1-57ed90dc276d.png)

「アプリとサービスをリンク」をタップする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/15974c78-ca59-51cd-0ef7-c3b9cc7ebbc9.png)

Amazon Alexaを選んでMatterデバイスを共有する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/28165b98-b1a6-1194-a738-60c2a213c205.png)


公式ドキュメントでも、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](https://github.com/t0bst4r/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化できるのならば当面は共存できそうです。

https://qiita.com/banban525/items/520caead4f5f8dbb9ced#%E4%BD%99%E8%AB%87-matter%E3%81%A3%E3%81%A6%E3%81%A9%E3%81%86%E3%81%AA%E3%81%AE

> 仮に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として動作しない状況になりました。
もうログは消してしまったのですが、起動時にエラーログが記録されて停止しているようでした。
コンテナの再起動で復帰しますが、起動順番は注意したほうが良さそうです。

(2025-04-09 追記)
まだ試していませんが、このIssueで直ってそうでした。
v3.0.0-alpha.73 以降っぽい。

https://github.com/t0bst4r/home-assistant-matter-hub/issues/574


### (2)Google Homeでシャッターの状態がおかしい

Home Assistantには電動シャッターを登録してあるので、 `cover` としてMatterで公開しました。
しかし、Google Homeから操作はできますが、状態がおかしいようです。
どうも、 `cover` は状態のPush通知を受け取っていないような・・・？
`light` 、 `switch` 、 `climate` は正しいようでした。

Home Assistant上ではClose状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/96cfb8ea-ff61-8548-d683-000ac39ec8b8.png)


Home-Assistant-Matter-Hub上でも100%(=Close状態)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/7776f127-5223-74af-8f4c-830e4d4f437b.png)

Google Home上では `開` 状態

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/4b94958a-44b9-c682-e27d-7999d7729d1e.png)

Alexaでは、100%(=Close状態)になってました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/ea496832-36e3-d18b-846b-07d94633da96.png)


### (3)換気扇に非対応

[Home-Assistant-Matter-HubのReadme](https://github.com/t0bst4r/home-assistant-matter-hub?tab=readme-ov-file#5-supported-domains--device-types) にありましたが、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側の問題のようです。

https://x.com/chobby_game/status/1869947651720130568

(2025-04-09 追記)
このプルリクエストで対応されたようです。
v3.0.0-alpha.75 以降らしいです。

https://github.com/t0bst4r/home-assistant-matter-hub/pull/582



GoogleもAlexaも、Matter対応があと一歩な感じがしますね。