ゴールデンウイーク中にいろいろ考えていて(本当はやりたかったことは違うのだけど…)、できるようになったのでメモ。普段の生活でなにか便利なことできないかなと思って、調べていたところNode-REDとGoogleHomeの連携が思いの外簡単だというものでした。テキストとGoogleHomeのIPアドレスが別れば、数分でできちゃいます。
状況としては、こんな感じの想定でしょうか?
あまりにも簡単すぎて、デバッグ時に何度も自室からリビングにあるGoogle Homeを経由してTTSなどを行って、家族からかなり気持ち悪がられました。
Node‐REDの準備
まずは準備になります。準備といっても拡張ノードのインストールを行えばよいのでなれている方であれば1分程度で終わります。ブラウザからフローエディタを起動して
画面の右上にある【三】(ハンバーガーボタン)をクリックしてプルダウンメニューを展開します。プルダウンメニューの中から【パレットの管理】をクリックします。
【ユーザー設定】のダイアログが表示されるので、【ノードの追加】タブをクリックします。
検索ボックスにnode-red-contrib‐cast
を入力し、表示された拡張ノードの【ノードを追加】ボタンをクリックしてインストールを行います。この拡張ノードはGoogle Homeだけでなく、Chromecastキャストにも対応したノードになっています。
ボタンをクリックすると、確認用のダイアログが表示されるので、【追加】ボタンをクリックします。ちなみに【ノードの情報を参照】ボタンをクリックすれば拡張ノードのドキュメントのサイトを確認することができます。
参考
あとは、インストールされるのをしばらく待ちます。
インストールが完了すると「ノードをパレットに追加しました」というダイアログが表示されます。
追加後に、【ユーザー設定】のダイアログを確認すると、ボタンが【追加されました】に変化していると思います。これでインストール作業は完了です。 【閉じる】ボタンをクリックしましょう。
フローエディタの左側にCastノード
が追加されていると思います。
フローを作成する
テスト用のフローを作成してみます。injectノード
とCastノード
を使用して以下のようなフローを作ってみます。
まずは、injectノード
をダブルクリックして【payload】の値を空
にして【完了】ボタンをクリックします。
次にCastノード
をダブルクリックして、プロパティを開きます。設定を行うのは以下の3つになります。
- 【 IP 】 … GoogleHomeに設定されたIPアドレス
- 【 Message 】 … 話させたいテキスト
- 【 Language 】 … ja(日本語の場合)
GoogleHomeのIPアドレスがわからない場合にはスマートフォンのアプリを使用するか
過去に書いた以下のエントリを参考にしてIPアドレスを調べてください。
ちなみにスマートフォンのアプリを使うと確実にIPアドレスを調べることはできるのですが、操作手順が結構面倒かなと思いました。
設定が終わったら、【完了】ボタンをクリックします。
すると、ノードの表示が変化します。
あとは【デプロイ】ボタンをクリックして、処理が成功すればOKです。
実行してみる
フローがデプロイできたら後は実行するだけです。injectノード
の左側のボタンをクリックするとGoogle HomeからTTSの音声が再生されると思います。
再生中はCastノード
の下の部分にPlay message on ほげほげ(IPアドレスが入る)
と表示されます。
これでテストできました。
おわりに
簡単すぎてびっくりしました。Alexaを使ってTTSをやったときにはあんなに大変だったのに…。
参考
簡単にNode-REDからTTSでテキストの読み上げができました。難を言うとすれば、読み上げられたテキスト文には抑揚が存在していないので、のっぺりとした感じに聞こえるかもしれません。それが納得できない場合には固定の音声ファイルを鳴らしたほうがいいのかも?
ただ、引数としてテキストデータをJSON形式で入力を行うことで別サービスと連携が簡単にできると思います。テキスト情報が主となるなる、Twitterだったり、Slackとは連携しやすいですよね。後はアラームの内容をログファイルの更新をフローにすることも簡単にできるでしょう(冒頭の画像イメージ)。
次回はもう少しこの部分を掘り下げてみようと思っています。(あるのか?)