はじめに
この記事は KDDIテクノロジー Advent Calendar 2024 の19日目の記事です。
今回は昨年の記事とは打って変わって、IoT機器を相互に接続するための共通規格Matterの利点について、Node-REDとの連携方法を通して解説します。
※あくまで個人的な見解によるものも含まれますので、その点ご留意ください。
What is Matter ?
まずMatterについてですが、このように説明されたりします。
Matterは、Connectivity Standards Alliance(CSA)が策定している、スマートホームやIoTデバイス向けに設計された標準規格です。
さまざまなデバイスやソフトウェアの互換性を確保し相互運用性の向上させることを目的としています。
ちょっと難しいので簡単に説明します。
例えばですが、IoTと聞いて皆さんは何を思い浮かべますか?
プラットフォームであれば、Amazon AlexaやGoogle Home、AppleのHomeKitだったりするかもしれません。
またデバイスなら、SwitchBotの監視カメラやPhilips Hueの電球などスマート○○と呼ばれるようなものかもしれません。
IoTデバイスを使ったことがある方であれば分かるかもしれませんが、これらのセットアップを行うときにAlexaなどのアプリの中で専用のプラグインの有効化や専用のアプリのインストールが必要だったりと、設定にかなりの手間がかかってしまうという問題点がありました。
そこで登場したのがMatterになります。Matter対応デバイスであれば、どのプラットフォームからでもQRコードを読み取るだけでセットアップができるなど、設定を行う上での利便性がかなり向上しました。
さらに複数のプラットフォームでのセットアップをMatter経由のものに一元化できることで、ユーザーはプラットフォームやデバイスの互換性を気にすることなく使うことができ、デバイスごとの設定方法などを簡略化できるようになりました。
Node-REDを使用した連携方法
ここからは、Node-REDを使用してIoTプラットフォームと連携する方法がMatter登場前後でどう変わったのかについて説明していきます。
今回は、電気のON/OFFを切り替えるという設定でTrue/Falseのフラグ情報を送信するような設定をします。
便宜上、Amazon AlexaとGoogle Homeをご利用のiPhoneユーザー向けの内容となっておりますのでご容赦ください。
お持ちでなくても、Node-REDでの設定の手間などが伝わりましたら幸いです…
環境構築
今回はWindowsにNode-REDをインストールして使用しました。下記に手順を書いておきます。
1. Node.jsのインストール
下記のリンクからNode.jsをダウンロードしてインストールしてください。
2. Node-REDのインストール
コマンドプロンプト上で下記のコマンドを入力してNode-REDをインストールしてください。
npm install -g --unsafe-perm node-red
インストール後、下記のコマンドでNode-REDが起動します。
node-red
起動後は、http://127.0.0.1:1880, http://localhost:1880 などでコンソールにアクセスできます。
下記のような画面が表示されればOKです。
3. Node-RED to Amazon Alexa
Node-REDとAmazon Alexaを連携するには、「Node-RED Alexa Home Skill Bridge」を使用します。
下記のページにアクセスしてアカウントを作成してください。
ログインすると、どのような処理をさせたいのか設定することができる画面に遷移するので、「Add Device」から下記のようにライトのON/OFF切り替えができるような設定をします。
次にスマホでAlexaアプリを起動して「その他」→「スキル・ゲーム」→「🔍Alexaスキルを検索」から「Node-RED」を検索して、スキルを有効化してください。その際、先ほど作成したアカウントへのログインを求められるので、ログインしてください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2F7f00d356-b7eb-23b3-8f99-e1fd8690926e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0ecf7b4a1834a173c07e3b095210429e)
ここからはNode-RED側の設定ですが、Node-REDのコンソール右上の三本線から「バレットの管理」→「ノードを追加」→「🔍ノードを検索」から「node-red-contrib-alexa-home-skill」を検索して追加してください。
左端のノード一覧にノードが表示されるようになっていればOKです。
「alexa-home」ノードを配置するとAccountを入力するところがあるので、+マークから先ほど作成したアカウントのUsernameとPasswordを入力します。
ログインが完了すると、Deviceのところで先ほど設定した「電気」が選択できるようになっているので選択します。デプロイできればこれで設定はOKです。
4. Node-RED to Google Home
Node-REDとGoogle Homeを連携するには、Node-RED Google Assistant Bridgeを使用します。
下記のページにアクセスしてアカウントを作成してください。
ログインすると、どのような処理をさせたいのか設定することができる画面に遷移するので、「Add Device」から下記のようにライトのON/OFF切り替えができるような設定をします。
次にスマホでGoogle Homeアプリを起動して「デバイス」→「追加」→「Works with Google Home」→「デバイスの追加🔍」から「NR-GAB」を検索して、デバイスを追加してください。その際、先ほど作成したアカウントへのログインを求められるので、ログインしてください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2F5b98a364-5baa-5a95-d3e3-a70efe42a844.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b301e72c1b1cdca0a087dd4ce15a10e0)
ここからはNode-RED側の設定ですが、Node-REDのコンソール右上の三本線から「バレットの管理」→「ノードを追加」→「🔍ノードを検索」から「node-red-contrib-googlehome」を検索して追加してください。
左端のノード一覧にノードが表示されるようになっていればOKです。
「google-home」ノードを配置するとAccountを入力するところがあるので、+マークから先ほど作成したアカウントのUsernameとPasswordを入力します。
ログインが完了すると、Deviceのところで先ほど設定した「電気」が選択できるようになっているので選択します。デプロイできればこれで設定はOKです。
5. Node-RED to Matter
Node-REDとMatterを連携するには、node-red-matterを使用します。
今回、アカウント作成等は必要ありません。
Node-RED側の設定で、Node-REDのコンソール右上の三本線から「バレットの管理」→「ノードを追加」→「🔍ノードを検索」から「@node-red-matter/node-red-matter」を検索して追加してください。
左端のノード一覧にMatterノードが表示されるようになっていればOKです。
次に「Matter Device Status」ノードを配置します。設定の+ボタンから新規でMatterデバイスとして追加します。Alexa経由の場合、UDPポートを「5540」に設定するよう、Wikiに記載があったので下記のように設定しました(それ以外のポートで設定した場合、Alexaが認識してくれませんでした)。
デバイスへの追加方法ですが、デプロイ後に先ほどの編集画面をスクロールすると、QRコードとペアリングコードが表示されているので、それをAlexaやGoogle Home、HomeKitのアプリから読み取ることで設定することができます(念のため、一部黒塗りにしています)。
QRコードは横に間延びしてしまっていますが、メモ帳などにコピペすることで読み取りができるようになります。
Alexaアプリからの追加方法ですが、「デバイス」から右上の+ボタンで「デバイスを追加」を選択後、セットアップ画面で「Matter」を選択してください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2F9e0312a3-8984-286e-4fc3-f9b1d9f7d14f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=16372c59b1fcf0ef007aa70942f8a803)
いくつかページが表示されるので、「はい」を選択していくと、QRコードかコード番号の入力を求められるので、先ほどのQRコードをスキャンするか、コード番号を入力してください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2F9d8f54b1-bce9-a030-f4ae-e77d7b7e04cc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=022d13da9367655f0647f25614c686d2)
このとき、Node-REDを起動しているPCとスマホが接続されているWi-Fiなどのネットワークが同一ネットワーク上になるように気を付けてください。
設定が完了すると、このようにAlexaアプリ上で1つのデバイスとして認識されるようになりました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2Fe6388a2b-1661-f8eb-3d3c-a41d13a7a785.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5c5c2e1fcdd32207e2f5192397ebd80d)
他プラットフォームとの連携なのですが、1つのプラットフォームを連携すると、下記のように「既にペアリング済みなので一旦解除してからペアリングしてください」と表示されました。
大人しく、一旦解除してからHomeKitで登録できるかテストしてみることにしました。
※本当はGoogle Homeから連携してみたかったのですが、Google Nest等のデバイスが必要とのことで泣く泣く断念…
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2F6574c6f2-5dac-23aa-2afd-e4cfb872c1cc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dc9cf158d2f389f6cdf0676ba330195c)
HomeKitのアプリから「アクセサリを追加」を押すと、いきなりカメラが起動して読み込みができるようになったので、先ほどのQRコードを読み込みをして名称などを設定すると、HomeKitからでも無事に設定することができました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3592194%2Feb75471f-8d66-9c69-c5cf-93e89a9a0802.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c42049855babdef08e2553dd03d60890)
従来方式との比較
では、ここからは従来(前項の3と4)とMatterを使用した方式(5)との違いについて書いていきます。
まず設定の方法についてですが、都度アカウントの作成が必要だったりする従来方式はMatter方式よりも設定が複雑であることは分かっていただけたかなと思います。
次に実際にNode-REDに送られてくるデータはどうなのかという観点で見てみることにします。
下記のように先ほど設定した3種類のノードにdebugノードを連結し、それぞれで「電気をつける」を実行してその出力を比較します。
Alexaから送られてきたデータ
まずAlexaからのデータですが、このようになりました。
ON/OFFがTrue/Falseのフラグ情報だけでとてもシンプルに見えます。
Google Homeからのデータ
次にGoogleHomeからのデータですが、このようになりました。
階層化されたデータのパラメータ情報としてTrue/Falseのフラグ情報があるようです。
従来方式同士での比較
上記2種類を比較すると、この時点で内部データ構造が異なっていて、互換性が担保されていないように見受けられますね。
例えばですが、Node-REDのSwitchノードを使用して、True/Falseで実行する処理の場合分けをしたいときなどにはプラットフォームごとに都度、データを参照するプロパティ設定などを見直す必要があり、実装する側からすればやや面倒に感じてしまうかもしれません。
Matterからのデータ
最後にMatter(Alexa or HomeKit)からのデータですが、このようになりました。
先ほどと同様、階層化されたデータのパラメータ情報としてTrue/Falseのフラグ情報があるようです。
従来方式とMatterまとめ
冒頭でも述べたように、これまでのIoTでは明確なデータ構造の標準が存在せず、通信仕様やデータ形式がプラットフォームごとに異なるため、標準化の必要性が指摘されていました。
そこで登場したMatterは、「スマートホームデバイス間の通信や操作を、統一されたプロトコルとデータ構造で標準化する」ことを目指した規格です。
異なるIoTプラットフォーム(今回だとAlexaとHomeKit)からMatterノードを使用してNode-REDへ送られてくるデータについて、
「Matter対応デバイスやプラットフォームを通じて送信されるデータなので統一されたフォーマットでやり取りされます!!」
と言えるのであれば、Matterからのデータを標準として、複数の設定を組まなくても下記のようなSwitchノードの設定に一本化しても問題なさそうです。
複数のフォーマットが使用されていた従来と比べても、処理がシンプルでとても便利ですね!
おわりに
以上、MatterとNode-REDでの実装についての解説でした。
私自身もまだまだ理解不足なところがあり、稚拙な文章になっているところもあるかと思いますが、Matterについての概要とNode-REDでの実装方法などが少しでも伝わったのであれば幸いです。