自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

Slackへの投稿をRaspberry Pi×Node-REDでAlexaとGoogleに読み上げてもらう④ - Google Homeを喋らせるのは簡単

f:id:maru0014:20200927210223p:plain

前回はSlackの特定チャンネルに投稿したらAlexaが読み上げるという状態にするため、Slack Botの作成、ngrokで公開するところまでを行いました。 codelife.cafe

今回は Google Home / Google Home mini / Google Nest なども喋れるように「node-red-contrib-cast」モジュールを追加・設定していきます。

モジュール node-red-contrib-cast を追加してテスト

パレットの管理 > ノードを追加 >node-red-contrib-castを検索して追加。

node-red-contrib-castv2という新しいモジュールも出てきますが、GUIだけで設定できる項目が少なかったのでnode-red-contrib-castがおすすめ。

f:id:maru0014:20200927210617p:plain

castノードを追加

IP横の検索ボタンをクリックするとChromecast対応端末のリストが表示されるので対象のデバイスを選択する。

スピーカーグループを作成していた場合は「Google Cast Group」が表示され、これを選択すれば対象のスピーカーグループに一斉配信することも可能。

f:id:maru0014:20200927211153p:plain

languageはデフォルトで en となっているので ja に変更。Volumeは任意で設定。

前のノードから読み込み可能な値は下部に列挙されており、Messageとして受け取るには msg.message または msg.payload.message を渡せば喋ってくれる。 f:id:maru0014:20200927211455p:plain

injectノードを追加

値は msg.message = テストメッセージ として完了。 f:id:maru0014:20200927211006p:plain

inject と castを接続してテスト

正常にcast出来ていればステータスにOKと表示され、Google Homeが喋ります。 f:id:maru0014:20200927212232p:plain

前回のフローに組み込む

実際に喋れることがわかったのであとはSlackへの投稿を受け付けるSlack Receiverで取った文字列を流していきます。

しかし、Slack Receiverで取得したJSONで投稿本文が入っているのは msg.payload.contentなのでそのまま繋げても喋ってくれません。

msg.messagemsg.payload.content を代入してから渡す必要があります。

間にchangeノードを追加する

change を検索して、チャンネルをフィルタしていたswitchノード(画像では"randomのみ"という名前)に接続。

ルールを値の代入として msg.message に 対象の値 msg.payload.content をセット。

f:id:maru0014:20200927212824p:plain

changeノードの後にcastノードを接続

これで後ろにCastを繋げればSlackへの投稿をGoogleも喋ってくれるようになります。

f:id:maru0014:20200927213034p:plain


AlexaとGoogle完全に同時に喋るのは流石に無理ですねー。 てかGoogle喋るの遅い。

けど裏で音声ファイルを生成してそれをChromecastしてるだけなのでその分のラグは仕方ないですね。