0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

全画面表示でもバッテリー残量を確認したい

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 の編集が必要になる。

crontab
*/10 * * * * termux-battery-status | mosquitto_pub -t /battery --stdin-file

*/10 * * * * で10分毎実行するよう設定した。

MQTT Broker には mosquitto ではなく Aedes MQTT broker を用いたが、自機に立てている場合は特にサーバー名の指定をしなくてもよい。

また、 mosquitto_pub は --stdin-file で標準入力をメッセージに使えるため、パイプで処理させることができた。

MQTT Explorer で受信確認。
mqtt_battery1.png

そもそも cron を使う必要はないのでは?

以上が正攻法の解決策ではあるが、この MeePet は Apache Web サーバーが起動しており PHP が動く環境を有している。
実は cron を使わずとも、 PHP と Node-Red の合わせ技で全く同じことが実現できるのでそちらも解説したい。

PHP から Linux シェルのコマンドを動かすにはバッククォートを使えばよい。

battery.php
<?php
echo `termux-battery-status`
?>

この PHP ファイルを Web サーバー上に置き、 Node-Red 側でこの URL を指定、繰り返し間隔と mqtt out 部だけ繋いでやればよい。

mqtt_battery2.png
mqtt_battery3.png
mqtt_battery4.png
mqtt_battery5.png

うまくいった(そもそもこの方法なら MQTT を配信するまでもなく、ブラウザから直接 PHP ファイルを見に行けばよかったかもしれない)。
mqtt_battery6.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?