皆さんこんにちは。開発担当の上本です。
前回、IoTベンダーとGoogleHomeを支えるAction on Google という記事でAction on GoogleとGoogleHomeを連携している様子をお伝えしましたが、今回はstak(スタック)で実際に使用しているWiFiモジュール(ESP32)と連携した様子をお伝えします。
検証準備
今回の検証では、ESP32の開発ボードを2台用意し、AndroidのHomeアプリでそれぞれ「オフィス」と「リビング」に設置したものとして設定を行いました。
2台のESP32開発ボード。
Google Homeアプリでは、それぞれ「オフィス」と「リビング」に設定済み。
ESP32のプログラムには、WiFiに接続後にAWS IoTのデバイスシャドウを読み込むようにしています。
検証動画
LEDの明かりが小さくて分かりにくいかもしれませんが、青色のLEDが点灯したり消灯したりする様子が確認できます。実際には、ベースに連結したLEDモジュールの照明が点灯・消灯するといった具合になります。
音声コマンドからstakまでの全体像
さて、ここまでで動作するところばかりをお見せしてきましたが、内部の全体的な構造は一体どうなっているのか。簡単に解説します。
stakでは、大まかに下の図のような構成を取っています。
登場人物
AWS IoT
Amazon Web Serviceが提供しているクラウドサービスの一つ。IoTデバイスの管理に特化したサービスで、MQTTと呼ばれる軽量の通信方式でIoTデバイスとデータをやり取りする。
クラウド上では、デバイスシャドウというIoTデバイスの仮想的なオブジェクトを持っており、このオブジェクトをIoTデバイスと同期することでデバイスの操作を実現している。(※デバイスシャドウを使用しなくてもデバイス操作は可能)
Action on Google
Google Assistantに機能やサービスを追加するためのプラットフォーム。
Rails
ruby製のWebサーバー。
stakでの役割は、ユーザーIDに紐づくデバイスの管理とLED照明や赤外線送信などのハンドリングを担当している。
MariaDB
データベースサーバー。
stakでの役割は、ユーザー情報やデバイスの管理を担当している。
動作フロー
① 音声認識の開始
stak利用者は、GoogleHomeに「OK Google、リビングの電気をつけて」と話します。
② スマートホームの音声解析
Action on Googleで利用者が発声した音声コマンドを解析し、解析結果をRailsへJSON形式で送信します。
③ アクションのハンドル
Railsは受け取ったJSONデータから、「どのユーザー」の「どのデバイス」を操作するのか、またデバイス操作対象は「照明モジュール」なのか、「赤外線モジュール」なのかなどを判断し、該当デバイスがあるかをデータベースに問い合わせます。
④デバイスの検索
Railsから指定された該当のデバイスがないかデータベース内を検索します。該当デバイスが見つかった場合、Railsにデバイス情報を転送します。
⑤デバイス情報とアクションを送信
AWS IoTとAction on Googleに向けてデバイス情報と、どのモジュールでどんな操作を行うかといったアクション情報を送信します。
⑥利用者へ応答
リビングの電気をつける旨を利用者に伝えます。もしもリビングにデバイスが見つからなかった場合は、「ライトはまだ設定されていません」と発声されます。
⑦デバイスシャドウの更新
AWS IoTのデバイスシャドウと各stakデバイスは同期されているので、デバイスシャドウのLEDの項目をonと設定することで、stakのLEDが点灯します。
以上が、stakとAction on Googleを結ぶ大まかな流れとなっています。できればもっと噛み砕いて解説していきたいですが、それは別の記事にてご紹介します。
さいごに
Google Homeとstakが連携する様子と、その内部構造をざっくりと解説しましたが、いかがでしたでしょうか?個人的には意外とシンプルな構成なのかなと思います。
現状ではユーザーとデバイス管理にはRailsのWebAPIを使用して構築していますが、スケールアップが容易なAWSのLamdaやGatewayを使用したサーバーレスの環境で構築してみるのも良いかもしれません。
製品段階でどんな構成を取っているかはまだわかりませんが、みなさまが快適に使っていただけるように開発を進めていきます。