Google Home でサーバーに記録された弊社の海洋センサーで取得した温度を返すようにしてみた

概要

弊社で開発している海洋センサーの温度をGoogle Homeで取得できるようにしてみました。

はじめに

同じ会社の@h-takaumaがGoogle Homeでの開発をしていることに刺激を受けて、私もGoogle Homeアプリの開発をやってみました。
Google Homeは大阪のビックカメラにて半額(3000円)で販売されていたので購入いたしました。

構成

弊社で作成している海洋センサーの情報はRedshiftに登録しています。
今回はDialogFlowの設定をメインで解説し、API Gateway経由で取得した情報を使ってサービスを実装します。
※DialogFlowの設定をメインにしてますので、AWS側の設定は今回は割愛してます。

image.png

まずはAssistantの呼び出しを試してみる

Actions on Googleにプロジェクトを追加

①Actions on Googleにログインし、Add/Import Projectをクリック
※Googleアカウントがない場合は作成しておいて下さい。

image.png
②Project Name とCountry/regionを入力・選択し、CreateProjectをクリック
image.png

DialogFlowのActionを仮で追加

①作成されたプロジェクトを選択する。

image.png

②ADD ACTIONSをクリックする。

image.png

③DIALOG FLOWのBUILDをクリックする。

image.png

④DialogFlowの画面が表示されたらDEFAULT LANGを選択し、CREATEボタンをクリックする。

image.png

⑤デフォルトでIntentなどは作成されるので、さっそく動かしてみる。

 Integrationsをクリックして、Google Assistantを選択
image.png

⑥「Auto-preview changes」を選択してから、TESTボタンをクリックする。

image.png

⑦「テスト用アプリにつないで」と言えば、「こんにちは!」とかえって来ることを確認する。

image.png

⑧Google Home Miniでも同様に動くか確認する。

 ※テストアプリですので、同じアカウントでGoogle Homeを動かしている必要があります。

 「OK Google」→「テスト用アプリにつないで」と言うと、「こんにちは」と返答を確認できればOK!

アプリの名前を変更してみる

①Actions on Googleのコンソール画面を開き、作成したプロジェクトを選択する。

②App Informationを開き、Editをクリックする。

image.png

③アプリ名と説明を記入し、Saveをクリックする。

※情報が足りなくてエラーが出ますが、テストで稼働させている間は問題ありません。
image.png

image.png

問題発生!テストしてみると、反応しない、、

問題:

 Google Homeに「海洋センサーにつないで」と言っても認識されない。

調査:

 GoogleのMyActivityにて言葉が正確に認識されているか確認
image.png

原因:

 現状では「海洋センサー」は「海洋センター」に補正されてしまうことが分かりました。
 自分の発音が悪いのかとほかの人にも試してもらいましたが、ダメでした。

対策:

 アプリの名前を変えることで対応。
 ちなみに「海洋アプリ」も「快用アプリ」として認識されてダメでした。
 結局、「海の情報」というアプリ名でいったん確定。

海洋センサーから温度を取得するためのDialogFlowの設定

アプリにつないだ時のメッセージを変更

①Intentsの「Default Welcome Intent」を選択

image.png

②Text responseを修正し、Saveボタンをクリックし保存する。

image.png

温度データをPOSTするためWebhookを設定

①Fulfillmentを選択する。

②WebhookをEnabledに変更する。

③DialogFlow用のJSONデータを返すURLを指定する。

④Saveボタンをクリックして保存する。

image.png

※JSONデータの内容
 followupEventにて、レスポンス後に別のIntentを呼び出すようにイベント名を設定しています。
image.png

温度取得用のIntentを作成

①Intentsを選択し、「CREATE INTENT」をクリックする。

image.png

②Intent名を「Temperature」を入力する。

image.png

③「温度を教えて」と言われたら起動するようにTraining phrasesを設定する。

image.png

④[Enable webhook call for this intent]を有効にする。

image.png

⑤Saveボタンをクリックして保存する。

リクエスト後のIntentを作成

①CREATE INTENTで新しいIntentを作成する。

②INTENT名「NextQustion」を入力する。

③イベント稼働するためのEVENT名を入力する。

image.png

④JSONデータのMessageデータをパラメータとして受けるための設定を行う。

image.png

⑤Text Responseを設定。

 ※取得した情報を伝え、次のアクションを促すメッセージを入れています。
image.png

⑥Saveボタンをクリックして保存する。

テスト

下記の内容でテストし、想定通り動作していることを確認いたしました。

 「OK Google!」
 「海の情報につないで」→応答「分かりました。海の情報のテストバージョンです。」「海の情報をお伝えします。」
 「温度を教えて」→応答「現在の温度は22.7度です。ほかに知りたい情報はありますか?」

最後に

今回は個人でGoogleHomeを買ったので嬉しくなって作ってみました。
手を使わなくても、また見える場所に移動しなくても情報を取得できることがすごく便利だと感じています。
また、情報を取得するためのステップがスマホで行うよりも少なくなる可能性が高いことを実感しています。

これからアイデア次第でもっと面白い活用ができると感じているので、さらに技術を調べながらアプリづくりにチャレンジしていきたいと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.