課題
私は外出と自宅でモバイルWi-Fi(Huawei Speed Wi-Fi NEXT W06)を兼用しています。
しかし、たまにモバイルWi-Fiのバッテリーが切れて、一時的にネットが使えなくなるのがストレスでした。
リチウムイオン電池的にも、過放電状態は良くないので、ラズパイでバッテリーを監視して、充電が減ったらGoogle Homeで通知する仕組みを構築しました。
調査
ラズパイからバッテリー監視できないかなぁ、と考えていたら、そういえば、モバイルWi-Fiの管理画面(http://192.168.100.1/html/login.htm
)にアクセスしたときに、右上に、バッテリー表示されるじゃん!と思いだしました。
この辺をどうにか使えないかなぁと、開発者モードで調査していたら、JavaScriptでG_MonitoringStatus
という変数に、バッテリー残量が格納されているという事がわかりました。
設計
ここまで分かったら後は作業です。ChromiumでモバイルWi-Fiの管理画面(http://192.168.100.1/html/login.htm
)にアクセスして、G_MonitoringStatusの値をJSONとしてパースして、"BatteryLevel"か"BatteryPercent"を参照して、充電が減っていたら、Google Homeに喋らせます。
Google Homeに喋らせる機能はgoogle-home-notifierを使用しています。
google-home-notifierは、ラズパイ上でhttp://localhost:8091
にリクエストすると、Google Homeの8009番ポートに音声再生リクエストを送ってくれます。
そうすると、Google HomeはHTTPリクエストをRaspberry Piに送って、Raspberry Piから音声データを貰いに行きます。図だとGoogle Homeとの通信を一緒くたにしていますが、使用するポートは異なるので、気をつけてください。
ソースは適当ですが、ここに置いておきました。