Google HomeのIPアドレスが変わったことをLINEで知らせてくれるようにしました LINE Notify + Node-RED
我が家では、以前お話し (“Raspberry Pi google-home-notifierはすぐに動かなくなるのでNode-RED環境に移行しました”)たように、”Raspberry Pi“と”Google Home“との連携を”google-home-notifier“ではなく、”Node-RED“の”google-home-notify“ノードに移行しました。その理由は、ラズパイ環境を出来るだけ最新に保とうと思うと、”google-home-notifier”がうまく動かなくなってしまうからです。”Node-RED”上で動くノードであれば、”Google Home”側の仕様変更以外でそうそう動かなくなることが少ないだろうと判断したからです。
とは言え、”Google Home”本体のIPアドレスが変わってしまうと、”Node-RED”上で動くノードであってもお手上げです。
“Google Home”アプリで、変更になった”Google Home”本体のIPアドレスを調べて、
“google-home-notify”ノードの設定を変更した後、再度”デプロイ”し直す必要があります。
ま、このプロセスは仕方がないことですが、せめて”Google Home”本体のIPアドレスが変わったことをプロアクティブに把握したいなあと思っていました。今回のTALKでは、”Google Home”本体のIPアドレスが変更になったことをラズパイに教えてもらう仕掛けにトライしようと思います。なお、今回は”Node-RED”縛りで問題解決することにします。
実は、計画当初の構想では、”Google Home”本体のMACアドレスを手掛かりにして、MACアドレスと紐付いているIPアドレスに変化があれば、新しいIPアドレスを知らせるという”Node-RED”フローを作れないかなあと思い、いろいろ調べていました。
arp -an
というコマンドを叩けば、MACアドレスとIPアドレスの組み合わせをリストアップできるそうなので試してみたところ、肝心な”Google Home”本体のIPアドレスだけがリストに表示しないんですよねえ。ごく稀に表示されることもあるのですが、再現性を期待できないので断念。
仕方がないので、”Google Home”本体に割り当てられたIPアドレスの存在を確認するというごくシンプルなアプローチに計画変更しました。
今回は、IPアドレスの有無を”LINE”に通知するスタイルにするので、”node-red-contrib-line-notify“というノードを”Node-RED”に追加して下さい。詳しい内容は、以前のTALK (“新しいラズパイ4で動体検知カメラ motion + LINE Notify + Node-RED を試してみる (2)”)をご覧下さい。
今回作成した”Node-RED”フローの完成形です。左から順に説明しておきます。
フローのスタートポイントは、”ping”ノードです。8時間毎に”Google Home”本体宛のpingを打つように設定します。
次に”switch”ノードを配置しました。”ping”ノードの結果を、続く”node-red-contrib-line-notify“ノードを使って”LINE”に通知してもらいます。
“ping”ノードは、IPアドレスが届いた場合、msg.payloadにラウンドトリップタイムをミリ秒で返します。一方、IPアドレスが存在しない場合は、msg.payloadにfalseを返します。その内容を”switch”ノードに設定し、結果に応じた出力先を2ヵ所設けることにしました。
最後に”node-red-contrib-line-notify”ノードを2つ配置しました。
pingがIPアドレスが届いた場合の”node-red-contrib-line-notify”ノードは、このように設定しました。ステッカーの定義情報は、”こちら” (PDF)を参照して下さい。
一方、pingがIPアドレスに届かなかった場合の”node-red-contrib-line-notify”ノードは、このように設定しました。
“Node-RED”のフローを”デプロイ”してみましょう。
pingがIPアドレスが届いた場合。
pingがIPアドレスに届かなかった場合。
フローを作成する際の注意ポイントとしては、”ping”ノードの繰り返し設定です。設定欄を空白にしてしまうと、目にも留まらぬ速度でpingを発行し続けてしまうので気をつけて下さい。今回は、短いタームでpingを打つ必要がないので8時間 (28800秒)間隔に設定しましたが、フローの先頭に配置した”inject”ノードをトリガーにpingを発行するという方法もありだと思います。
それと、細かいことですが、仮に”Google Home”のIPアドレスが変わっても、そのIPアドレスを他のデバイスがアサインするっていうことが考えられます。でも、8時間に一度の頻度でpingを打っているので、その間に別のデバイスがIPアドレスを使う可能性は低いのでは?という勝手な前提を置いて、今回の仕組みを作りました。
p.s>
実稼働中、”Google Home”のIPアドレスが変更になったことをタイムリーに把握できました。緻密さという意味では改良の余地はあるにせよ、個人的には役に立ってくれています。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。