Google Home でイベントスケジュールを自動アナウンス
概要
Google Home、Node-RED 、kintone を使って、イベントスケジュールを音声で自動アナウンスするプログラムを実装します。
Node.js 環境が必要なため、
下準備 を参考に Node.js をインストールしてください。
シナリオ
kintone に登録しているイベントのタイムテーブルデータを一定時間おきにチェックして、今から 10 分後までに始まるセッションを Google Home でお知らせします。
- 10 分後までに始まるセッションがある場合は、そのセッション名をお知らせ
- 10 分後までに始まるセッションがない場合は、その他のコンテンツをお知らせ
Node-RED とは
ハードウェアデバイス、API およびオンラインサービスを接続するためのツールです。
ブラウザーベースのエディタによってパレットに並ぶ多種多様なノードを結び付けて簡単にフローを作成でき、さらにシングルクリックで実行環境にデプロイできます。
Rasberry Pi や Arduino などのデバイスをはじめ、IBM Cloud、AWS、Azure などのクラウドサービス上に立てることもできますが、今回はローカルにインストールして実行します。
(
Node-RED サイト
より一部抜粋)
kintone アプリ作成
イベントのタイムテーブルを登録するための kintone アプリとして「セッション管理アプリ」を作成します。
-
以下のフィールドを配置したアプリを作成します。
フィールドタイプ フィールド名 フィールドコード 日付 日付 date 時刻 開始 startTime 時刻 終了 endTime 文字列(1行) セッション名 sessionName -
サブドメイン名 と アプリID をメモしておきます。
メモした情報は、のちほど Node-RED エディタでフロー構築 で使用します。例:URL が https://sample.cybozu.com/k/10/ の場合、「sample」がサブドメイン名、「10」がアプリ ID です。
-
いくつかテスト用にレコードを追加しておきます。
これで kintone の設定は完了です。
Google Home アプリのインストールと設定
次は、Google Home を使うための初期設定です。
Google Nest または Google Home のスピーカーやディスプレイをセットアップする
等に手順が載っているので、参考にしながら進めてください。
- 電源ケーブルを Google Home デバイスに差し込みます。
- 電源アダプターをコンセントに差し込みます。
- モバイルやタブレットで Google Home アプリをダウンロードして開きます。
- Google Home デバイスとの接続設定をします。
- 設定が完了したら、アプリ内のデバイスメニューより、今回使いたい Google Home デバイスを選択し、IPアドレス を確認しメモしておきます。
のちほど Node-RED エディタでフロー構築 でデバイス指定をする時に利用します。
アナウンスの言語を変更する場合は、 Google アシスタントの言語を変更する を参考にしてください。
Node-RED の設定
続いて、処理フローを定義する Node-RED をインストールし、設定します。
ここでは Mac OS での手順のみ記載します。
Windows の方は別途ドキュメントサイトを確認してください。
参考:
Node-RED User Group Japan のドキュメント
下準備
ローカル環境に Node-RED をインストールするためには サポートされている Node のバージョン が必要です。
- Node.js をインストールします。
参考: Node.js のインストールガイド(macOS) - 日付処理のための Moment.js をインストールします。
参考: Moment.js サイト
Node-RED のインストール
-
ターミナルより、
npm
コマンドでインストールします。
参考:「 ローカルで Node-RED を実行する 」1 2 3 4 5 6
$ sudo npm install -g --unsafe-perm node-red --- 中略 --- + node-red@0.20.6 added 364 packages from 350 contributors and audited 1493 packages in 16.606s found 0 vulnerabilities
-
node-red
コマンドを使って Node-RED を起動します。
Ctrl-C もしくは、ターミナルウィンドウを閉じることで Node-RED を停止できます 。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
$ node-red Welcome to Node-RED =================== 25 Mar 22:51:09 - [info] Node-RED version: v0.20.5 25 Mar 22:51:09 - [info] Node.js version: v10.15.3 25 Mar 22:51:09 - [info] Loading palette nodes 25 Mar 22:51:10 - [warn] ------------------------------------------ 25 Mar 22:51:10 - [warn] [rpi-gpio] Info : Ignoring Raspberry Pi specific node 25 Mar 22:51:10 - [warn] ------------------------------------------ 25 Mar 22:51:10 - [info] Settings file : /home/nol/.node-red/settings.js 25 Mar 22:51:10 - [info] Context store : 'default' [module=localfilesystem] 25 Mar 22:51:10 - [info] User Directory : /home/nol/.node-red 25 Mar 22:51:10 - [warn] Projects disabled : set editorTheme.projects.enabled=true to enable 25 Mar 22:51:10 - [info] Server now running at http://127.0.0.1:1880/ 25 Mar 22:51:10 - [info] Creating new flows file : flows_noltop.json 25 Mar 22:51:10 - [info] Starting flows 25 Mar 22:51:10 - [info] Started flows
Node-RED エディタでフロー構築
-
http://localhost:1880
にアクセスして、Node-RED エディタを開きます。 -
右上の「≡」をクリックして、「パレットの管理」を選択します。
-
「ノードを追加」タブをクリックして、以下 3 つのノードを追加します。
追加すると、エディタ左のノードメニューから選択できます。- node-red-contrib-kintone (1.0.2)
- node-red-contrib-function-npm (0.3.0)
- node-red-contrib-cast (0.2.8)
-
エディタ左のノードメニューから右へドラッグ&ドロップして、フローを作成します。
それぞれ以下のとおり設定してください。ノード ノード名 詳細設定 inject RepeatExecution - ペイロード:日時
- Node-RED 起動後 0.1 秒後、以下を行う(チェックをいれる)
- 繰り返し:指定した時間間隔(10 分)
- 名前:RepeatExecution
kintone GetSessions - 名前:GetSessions
- 設定:鉛筆アイコンをクリックして以下を指定
- 名前:Config
- ドメイン:ご自身の環境のドメインを指定
- ログイン名:ご自身のものを指定
- パスワード:ご自身のものを指定
- Basic 認証:(必要あれば指定)
- メソッド:GET
- アプリ ID: kintone アプリ作成 で作成した kintone アプリの「アプリID」を入力
- クエリ:date = TODAY()
debug msg.payload ー function npm GetNextSessions - 名前:GetNextSessions
- コード:後述の サンプルコード を入力
- 出力数:1
debug msg.payload ー cast PlayGoogleHome - IP: Google Home アプリのインストールと設定 で確認した IP アドレスを指定して検索マークをクリック
- Port:8009
- language:ja
- Name:PlayGoogleHome
-
右上の「デプロイ」ボタンをクリックして、環境にデプロイします。
サンプルコード
「function npm ノード」に次のコードを入力します。
|
|
動作確認
デプロイできたら、「RepeatExecution ノード」の左横の角ブロックをクリックして実行します。
Google Home からの発話があれば成功です!
右側のデバッグマークをクリックすると、実行結果を表示しながらデバッグが可能です。
おわりに
Node-RED のタイムスタンプを使うことで、Google Home へのプッシュ通知を可能にしているのがこの Tips のポイントです!
今回はローカルで実行していますが、いろんなイベントで使い回すことを考えると、移行が楽な Docker や AWS などのクラウド上で実行環境を整えるのが便利です。
ぜひ他の方法でもチャレンジしてみてください。
この Tips は、2019 年 7 月時点の kintone と Google Chrome ブラウザーで動作を確認しています。