Raspberry Pi google-home-notifierはすぐに動かなくなるのでNode-RED環境に移行しました
我が家では、”Google Home”に積極的に最新情報を喋ってもらいために、”Raspberry Pi”に”google-home-notifier“をインストールしてプログラミングしていました。
・”Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”
・”Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう”
・”Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう”
そんな”google-home-notifier”が、先日、“Node-RED”を最新の状態でインストールしようと思い、以下のコマンドを実行して以来、全く動かなくなってしまいました。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
幸い、先日のTALK (“Raspberry Pi + Node-RED + Google Home で明日の天気を定刻にアナウンス“)で紹介した”Node-RED”の”google-home-notify“ノードを利用し始めたところでしたので、これを機会に”google-home-notifier”の使用をきっぱりと諦め、”google-home-notify”ノードを活用したフローに全面的に移行することにしました。
今回のTALKは、実際に移行した経験から、どの程度のハードルだったのかをお話しようと思います。なお、”google-home-notify”ノードのインストールや基本的な使い方については、先日のTALKをご覧下さい。
< ユーザのアクションを判定して処理を分ける >
“Raspberry Pi + Node-RED + Echo Show 5 + Google Home で「こっちに来て!」メッセージ“のなかで、
“Amazon Alexa”iOSアプリでデバイスでタップしたボタンの種類を判定するためにシェルスクリプトを用意しました。
この部分を”Node-RED”化するために、”switch”と”function”の各ノードを途中に配置しました。
“switch”ノードのプロパティ画面で、直前のノードから渡された”msg.payload”のboolean値に応じてフローを分けるようにしました。
そして後続の”function”ノードでは、”Google Home”に喋ってもらうフレーズを作成しました。
< 細かなcron設定で定期的にノードを実行する >
“Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう“のなかで、
”YOLP(地図):気象情報API“で取得した降水強度をもとに作成した文章をテキストファイルに保存し、その内容を別のタイミングに読み込む処理と、
処理全体を朝の7時から夜20時の間、毎時2分に”Google Home”が喋る処理を用意しました。
“Node-RED”化に当たっては、
細かなcron設定は”Node-RED”標準ノードの”inject”ではできないので、”node-red-contrib-cron“というノードを別途インストールしました。
このノードは、プロパティ画面の”CRON Expression”欄にcron特有の”* * * * *”部分を入力し、後続のフローと接続するだけで、フロー全体をCRONの記述に従って実行してくれます。
作成した文章をテキストファイルに保存する処理はPythonで書いたので良いのですが、内容を読み込む処理は定石通り”file in”ノードを利用しました。
< NodejsスクリプトからNode-RDをフローを呼び出す >
Twitterの投稿を分析して、未読の投稿を”Google Home”で伝える処理を””のなかで作りました。
この処理を”Node-RED”に移行する際、悩んだポイントがNodejsスクリプトから特定の”Node-RED”フローを呼び出す方法です。どちらも、同じラズパイのなかで実行しているので、そのやり方を理解するのに時間がかかってしまいました。
“Node-RED”フローでは、通常使用する”inject”ノードの代わりに”http in”を先頭に配置しました。
http in”ノードのプロパティ画面の”URL”欄に”/◯◯”というパスを入力します。今回は地震速報を”Google Home”に喋ってもらうので、”/earthquake”としました。
そして、Nodejsスクリプト内で、URLを”http://localhost:1880/earthquake”と定義して”request”すれば、”Node-RED”のノードを呼び出すことができます。
問題なく実行できる点は良いのですが、同期処理をしているからなのか、”Error: socket hang up”というエラーが発生します。この点は気になるものの、実害はないので様子見モードです。
最初のうちは、稼働中の資産を”Node-RED”環境に移行できるのかなあ?と不安を感じながら作業を進めたのですが、結果的には、7個の資産すべてを移行することができました。移行に際しては、既にあるスクリプトをどこまで活かし、どの処理を”Node-RED”化するのかを、試行錯誤のなかで早めに見極めるのが、移行を成功させるポイントなのかな?と思いました。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。