概要
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ブラウザーで動作を確認しています。