Node-REDで簡単にGoogle Homeにテキストを読み上げてもらう!(TSS)

ゴールデンウイーク中にいろいろ考えていて(本当はやりたかったことは違うのだけど…)、できるようになったのでメモ。普段の生活でなにか便利なことできないかなと思って、調べていたところNode-REDとGoogleHomeの連携が思いの外簡単だというものでした。テキストとGoogleHomeのIPアドレスが別れば、数分でできちゃいます。

状況としては、こんな感じの想定でしょうか?

f:id:ueponx:20210507010155p:plain

あまりにも簡単すぎて、デバッグ時に何度も自室からリビングにあるGoogle Homeを経由してTTSなどを行って、家族からかなり気持ち悪がられました。

Node‐REDの準備

まずは準備になります。準備といっても拡張ノードのインストールを行えばよいのでなれている方であれば1分程度で終わります。ブラウザからフローエディタを起動して

f:id:ueponx:20210506232440p:plain

画面の右上にある【三】(ハンバーガーボタン)をクリックしてプルダウンメニューを展開します。プルダウンメニューの中から【パレットの管理】をクリックします。

f:id:ueponx:20210506232447p:plain

【ユーザー設定】のダイアログが表示されるので、【ノードの追加】タブをクリックします。

f:id:ueponx:20210506232452p:plain

検索ボックスにnode-red-contrib‐castを入力し、表示された拡張ノードの【ノードを追加】ボタンをクリックしてインストールを行います。この拡張ノードはGoogle Homeだけでなく、Chromecastキャストにも対応したノードになっています。

f:id:ueponx:20210506232542p:plain

ボタンをクリックすると、確認用のダイアログが表示されるので、【追加】ボタンをクリックします。ちなみに【ノードの情報を参照】ボタンをクリックすれば拡張ノードのドキュメントのサイトを確認することができます。

参考

flows.nodered.org

f:id:ueponx:20210506232550p:plain

あとは、インストールされるのをしばらく待ちます。

f:id:ueponx:20210506232557p:plain

インストールが完了すると「ノードをパレットに追加しました」というダイアログが表示されます。

f:id:ueponx:20210506232631p:plain

追加後に、【ユーザー設定】のダイアログを確認すると、ボタンが【追加されました】に変化していると思います。これでインストール作業は完了です。 【閉じる】ボタンをクリックしましょう。

f:id:ueponx:20210506232635p:plain

フローエディタの左側にCastノードが追加されていると思います。

f:id:ueponx:20210506232638p:plain

フローを作成する

テスト用のフローを作成してみます。injectノードCastノードを使用して以下のようなフローを作ってみます。

f:id:ueponx:20210506232653p:plain

まずは、injectノードをダブルクリックして【payload】の値をにして【完了】ボタンをクリックします。

f:id:ueponx:20210507003505p:plain

次にCastノードをダブルクリックして、プロパティを開きます。設定を行うのは以下の3つになります。

  • 【 IP 】 … GoogleHomeに設定されたIPアドレス
  • 【 Message 】  … 話させたいテキスト 
  • 【 Language 】 … ja(日本語の場合)

GoogleHomeのIPアドレスがわからない場合にはスマートフォンのアプリを使用するか

f:id:ueponx:20210507001233p:plain

過去に書いた以下のエントリを参考にしてIPアドレスを調べてください。

uepon.hatenadiary.com

ちなみにスマートフォンのアプリを使うと確実にIPアドレスを調べることはできるのですが、操作手順が結構面倒かなと思いました。

設定が終わったら、【完了】ボタンをクリックします。

f:id:ueponx:20210506232655p:plain

すると、ノードの表示が変化します。

f:id:ueponx:20210506232658p:plain

あとは【デプロイ】ボタンをクリックして、処理が成功すればOKです。

f:id:ueponx:20210506232701p:plain

実行してみる

フローがデプロイできたら後は実行するだけです。injectノードの左側のボタンをクリックするとGoogle HomeからTTSの音声が再生されると思います。 再生中はCastノードの下の部分にPlay message on ほげほげ(IPアドレスが入る)と表示されます。

f:id:ueponx:20210506232704p:plain

youtu.be

これでテストできました。

おわりに

簡単すぎてびっくりしました。Alexaを使ってTTSをやったときにはあんなに大変だったのに…。

参考

uepon.hatenadiary.com

簡単にNode-REDからTTSでテキストの読み上げができました。難を言うとすれば、読み上げられたテキスト文には抑揚が存在していないので、のっぺりとした感じに聞こえるかもしれません。それが納得できない場合には固定の音声ファイルを鳴らしたほうがいいのかも?

ただ、引数としてテキストデータをJSON形式で入力を行うことで別サービスと連携が簡単にできると思います。テキスト情報が主となるなる、Twitterだったり、Slackとは連携しやすいですよね。後はアラームの内容をログファイルの更新をフローにすることも簡単にできるでしょう(冒頭の画像イメージ)。

次回はもう少しこの部分を掘り下げてみようと思っています。(あるのか?)