全画面表示でもバッテリー残量を確認したい
MeePet のような、バッテリーの入った機器で電源をつなぎっ放しにするのはバッテリーの負担になるので、定期的にある放電作業をしておきたい。
その際バッテリー残量を確認したいのだが、 MeePet はステータスバーが無く、また Slideshow で全画面表示をしている間はバッテリー残量の表示がほぼ不可能である。
Termux:API を使うとコマンドラインからバッテリー残量を確認でき、さらにその情報を MQTTで送受信すれば PC などからバッテリー残量が確認できて便利と考え、設定することにした。
Termux:API のインストール
Termux から Android の情報を取得するには、 Termux:API を Android 側、 Termux 側の双方にインストールする必要がある。
Android 側は F-Droid から取得してイントール。
Termux 側は pkg install termux-api
でインストールできる。
必要に応じて Android 側で権限の設定をしておく(今回はバッテリー残量の確認だけなので、Android 側の設定で許可すべき項目は無かった)。
API の一覧・コマンドラインからの実行は以下の記事を参考にした。
cron のインストールと設定
コマンドラインでバッテリー残量の確認を定期的に実行させるため、 cron を用いる。
Termux には cron がインストールされていないため、 cron のインストールと有効化、 crontab の編集が必要になる。
*/10 * * * * termux-battery-status | mosquitto_pub -t /battery --stdin-file
*/10 * * * *
で10分毎実行するよう設定した。
MQTT Broker には mosquitto ではなく Aedes MQTT broker を用いたが、自機に立てている場合は特にサーバー名の指定をしなくてもよい。
また、 mosquitto_pub は --stdin-file
で標準入力をメッセージに使えるため、パイプで処理させることができた。
そもそも cron を使う必要はないのでは?
以上が正攻法の解決策ではあるが、この MeePet は Apache Web サーバーが起動しており PHP が動く環境を有している。
実は cron を使わずとも、 PHP と Node-Red の合わせ技で全く同じことが実現できるのでそちらも解説したい。
PHP から Linux シェルのコマンドを動かすにはバッククォートを使えばよい。
<?php
echo `termux-battery-status`
?>
この PHP ファイルを Web サーバー上に置き、 Node-Red 側でこの URL を指定、繰り返し間隔と mqtt out 部だけ繋いでやればよい。
うまくいった(そもそもこの方法なら MQTT を配信するまでもなく、ブラウザから直接 PHP ファイルを見に行けばよかったかもしれない)。