Androidでブロードキャスト・インテントで受け取ったデータをMQTTブローカに伝達

Amazfit Band 5自分専用の関連写真アルバム)をサードパーティアプリNotifyの使用で見守り目的に使おうとしている。 “一人暮らしの老人の見守りに対するアプローチ” で述べたことの実現の一環。スマートバンドのセンサーで検知できることや他のデバイスで検知できることなどを俯瞰的に見渡して総合的な判断ができるよう,データはMQTTブローカに集約しようとしている。そのため,Android TV準拠ストリーミング・メディア・プレーヤAmigo 7xJP導入したTermux環境内にMQTTブローカをインストールしてある。

Amazfit Band 5が取得するデータはサードパーティ製コンパニオン・モバイルアプリNotifyが有償機能の一つとしてブロードキャスト・インテントとして流してくれる。これをMQTTブローカにさらに伝搬させるには以下のやり方が考えられる。

  • [間接伝搬法] オートメーションアプリAutomateを利用し,それでブロードキャスト・インテントを受け取り,それを何らかの方法でMQTTブローカに伝搬する。
    • [Takserのプラグインを利用] TaskerのMQTTクライアント機能を提供するプラグインでMQTTブローカにそのデータを流す。AutomateそのものはMQTTに関係する機能は持っていないが,Taskerのプラグインが利用できるので。たまたま自分がAutomateの有償ユーザに既になっているのでそれを前提にしているが,Taskerプラグインが利用でき,ブロードキャスト・インテントを扱える全てのオートメーションアプリでこの方法が取れる。
    • [Termuxのコマンドラインツールを利用] TermuxのMosquittoパッケージの中にはmosquitto_pubというコマンドも含まれている。Eclipse PahoのPythonクライアントなんかも候補になろう。その他もあり。
  • [直接伝搬法] ブロードキャスト・インテントで得られるデータを直接MQTTブローカに伝搬させられるアプリを使用する。

間接伝搬法

Taskerプラグインを利用

これに使えるTaskerプラグインは以下の2つ(Google Play Storeでの検索と “Tasker for Android” によれば)。

  • MQTT Publisher Plugin ー 最後の更新は2015年末。
  • MQTT Client ー 最後の更新は2019年初頭。FOSS(リポジトリ)だが2020年初頭頃から作者による更新やissueに対するレスポンスは止まっている模様。

PublisherはMQTTブローカにpublishするアクションしか機能がない。それに対しClientはそれだけでなく,ブローカとの接続を管理する機能,そしてsubscribeする機能もある。アクションとしてはConnect to Broker,イベントとしてはConnection Lost, Connection Re-Established, Message Arrived。これらの機能が必要なのであれば,この二者の中ではClient一択

PublisherはTaskerプラグインとしての機能しかない。一方,Clientは単独でMQTTクライアントアプリとして動作することもできる。

なお,AutomateからこれらTaskerプラグインを使う際,Automate内の変数をプラグイン内で参照する際には,Taskerの流儀に従って変数名の前に “%” をつける必要があるのに注意。その他Taskerプラグインによるアクションの成否に関して注意すべき変数(主に%errと%errmsgか)は “Tasker: Variables” 参照。 “Plug-in action ⋅ Automate ⋅ LlamaLab” によればこれらの値はAutomateからは “%” を落としたerr, errmsgでアクセスできるように読める。

Termux環境下のコマンドを起動

Termux:Taskerリポジトリ)を使ってTaskerからTermuxのスクリプトが起動できる。TermuxのMosquittoパッケージ中にはmosquitto_pubコマンドがあるし,Eclipse PahoのPythonクライアントなんかも候補になろう。

直接伝搬法

直接伝搬法に使えるアプリは以下。

問題

今のところ間接伝搬法のTaskerプラグインを使う方法と直接伝搬法を自宅でテストしただけだが,Broadcast, Client, Publisherの順で安定に動作する印象(Windows上のMQTT Explorerで取得した下のグラフ参照)。特にBroadcastはほぼ接続が切れないように思える(ただし取りこぼしがゼロではない)。自宅内で移動するだけでも,Amazfit Band 5とペアになっているスマホはwifiローミングで接続する先のAPが切り替わるのだが,それでClient, Publisherとも一旦は接続が切れてしまうのかもしれない(とはいえ,Publisherはアクション起動ごとにコネクションを張り直すと思われるので(…そうとも限らない?)影響を受けなくてもおかしくないようにも思える)。数分~10分程度?でこれらも再度動作するようではあるが。Clientであれば接続状態を明示的にコントロールできるので改善は可能と思われる。

 

Androidでブロードキャスト・インテントで受け取ったデータをMQTTブローカに伝達」への1件のフィードバック

  1. ピンバック: MQTTブローカにpublishされた値をそのまま別のトピックでpublish | あくまで暫定措置としてのブログ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください