Google Homeにnasneの情報を喋らせる
Google Home Miniが量販店で半額になっていたので購入した.
普段から使用しているnasneの情報を喋らせたい.
ひとまず,nasneの次の録画予約と録画中の番組を返答できる状態にすることを目指す.
環境
- Raspberry Pi 2 Model B
- Raspbian Stretch (April 2018)
- nasne
nasne 1TBモデル (CUHJ-15004) 【Amazon.co.jp特典】アンサー フラットLANケーブル 3メートル 付 & オリジナルカスタムテーマ 配信
- 出版社/メーカー: ソニー・インタラクティブエンタテインメント
- 発売日: 2016/12/08
- メディア: Video Game
- この商品を含むブログを見る
構成
beebotteでChannel,resourceを作成
MyHome
というChannelを作成し,その中にnasne
というresourceを作成した.
ここで表示されているChannel Token
の値やChannel名,resource名は,IFTTTやNode-REDの設定で使用する.
IFTTTでアプレットを作成
例えば『OK Google,nasneの次の予約』と聞いた場合に,"nasne","次の予約"という情報を含むJSONを,beebotteで作成したChannelのresource(今回はMyHome/nasne
)に送信できるようにする.
- Google Assistant
項目 | 値 |
---|---|
What do you want to say? | nasneの $ |
What do you want the Assistant to say in response? | nasneの $ を調べています |
Language | Japanese |
- Webhook
項目 | 値 |
---|---|
URL | https://api.beebotte.com/v1/data/publish/作成したChannel名 /作成したresource名 ?token=作成したChannelのtoken |
Method | POST |
Content Type | application/json |
Body | {"data": [{"target": "nasne", "action": "{{TextField}}"}]} |
上の例で『OK Google,nasneの次の予約』と聞いた場合,$
には"次の予約"という文字列が入っており,それが{{TextField}}
にも入ることになる.
Node-REDをアップデートして起動確認
Raspbian Stretchには初めからNode-REDがインストールされている.
$ update-nodejs-and-nodered $ node-red-start
ブラウザでhttp://{Raspberry PiのIPアドレス}:1880
にアクセス.
自動起動の設定
$ sudo systemctl enable nodered
Node-Redからbeebotteに接続
mqtt in
ノードをフローに追加し,編集画面のサーバの項目で新規に mqtt-broker を追加...
を選択.
タブ | 項目 | 値 |
---|---|---|
接続 | サーバ | mqtt.beebotte.com |
ポート | 8883 | |
SSL/TLS接続を使用 | チェックする | |
セキュリティ | ユーザ名 | token:作成したChannelのtoken |
完了したら編集画面に戻る.
項目 | 値 |
---|---|
サーバ | 上で設定したもの |
トピック | 作成したChannel名 /作成したresource名 |
QoS | 2 |
これでデプロイすると,設定が正しければノードの下に"接続済"と表示される.
Node-RedからGoogle Homeに接続
右上のメニューからパレットの管理
→ノードの追加
と進み,node-red-contrib-google-home-notify
を検索して追加.
googlehome-notify
ノードをフローに追加し,IP Address
とLanguage
を設定する.ただし,初期状態ではLanguage
がEnglish
しか選択できない.
一度IPアドレスを設定してデプロイすると,ノードがGoogle Homeを認識する.その後再びノードの設定画面を開くと,Japanese
やその他の言語も選択できるようになっている.
フローの作成・編集
これでGoogle Home → IFTTT → beebotte → Node-RED → Google Homeと全ての接続が可能になった.
あとはNode-REDでフローを作成・編集してnasneの情報を取得し,返答の文字列を作成してgooglehome-notify
ノードに送れば良い.
- メインフロー
- 次の予約
- 録画中の番組
function
ノードでjavascriptが書けたりexec
ノードで外部コマンドが実行出来たりするので割と何でもありだが,なるべく各種ノードを活用するようにした.
nasneの情報取得に使用したAPIに関しては,以下の記事が詳しい.
ここまでで,以下のような会話が可能になった.
- 『OK Google,nasneの次の予約』『nasneの次の予約を調べています……次の予約は6月23日土曜日18時からのhogehogeです』
- 『OK Google,nasneの録画中の番組』『nasneの録画中の番組を調べています……6月23日土曜日18時からのhogehogeを録画中です』
おわりに
衝動的に購入したGoogle Homeだが,できることを簡単に増やすことが出来て楽しい.まだしばらく遊んでいきたいと思う.