質問: [前提] 複数のビーコンを使ったBLE通信(EddyStone)を行っています。 [実現したい事] TLMフレームとビーコンの紐づけを行いたい。 [現状と問題] EddyStoneのTLMフレームは、個別のビーコンを示すIDを持っていません。 複数のビーコンを検出している状態で、検出したTLMフレームがどのビーコンから発せられたものであるかを特定する方法がわかりません。 直前に検出したUIDのビーコンに対して紐づけるといった方法が考えられますが、 複数のビーコンを同時に検出するような状況において、割り込みや混線のようなイメージで、 ビーコンAのUIDフレーム受信 ↓ ビーコンBのUIDフレーム受信 ↓ ビーコンAのTLMフレーム受信 ↓ ビーコンBのTLMフレーム受信 このような順番で検出した場合、上記の方法では紐づけを誤ってしまうと考えています。 公式では、TLMフレームはUID等のフレームと組み合わせて解析する必要があると書かれています。 https://github.com/google/eddystone/blob/master/eddystone-tlm/tlm-plain.md 特に、Interleavingが必要、というような説明と読めますが、そのInterleavingが具体的にどのような処理なのかわかりません。 [質問] 1. [現状と問題]で挙げているような懸念はあり得るのでしょうか?(割り込み・混線) 2. 公式のいうInterleavingというを用いた具体的な処理構成はどのようになるでしょうか? 3. また、その公式のいう方法で処理すれば、私の懸念している割り込み・混線の問題は回避できるのでしょうか? 以上、宜しくお願いします。
回答: > > 特に、Interleavingが必要、というような説明と読めますが、そのInterleavingが具体的にどのような処理なのかわかりません。 > > > ここでの**Interleaving**とは、要は使う状況に応じてビーコンの送信間隔を変えましょうと言うことです。その実際の間隔の指定は使う人(運用)次第です。ガイドラインくらいの意味で捉えて差し支えないと思います。 説明にもありましたが、 > > For example, if your application is using the TLM for fleet management, it may be satisfied receiving one TLM frame per day, > > > 例えば機材管理の為にTLMを利用するような運用だと1日に1回のTLMの送出で状況は把握できるでしょうし、もっと頻繁にデータ収集をするような場所、例えば多くのビーコン機器が配置され、通信量が多くなる場所では1分に1回とのように、それぞれが抑制した頻度でビーコンを発します。対してそうでもない場所ではもっと多い頻度でビーコンを発信するよう設定することもできます。 eddystoneのgithub issueでも参考になるものがありましたのでご案内しておきます。 TLMフレームのみならず、Eddystone-UID や Eddystone-URLのアドバタイジングに関しても、用途に応じて適切に設定しましょうとのことです。 Specification for Interleaving その他、こちらの説明も参考になると思いましたので併せてご案内します。 Monitor the Health of Your Beacons 上記を踏まえて3つのご質問に回答しますと、 > > 1.[現状と問題]で挙げているような懸念はあり得るのでしょうか?(割り込み・混線) > > > ご懸念はそのままその通りで、BLEデバイス(ペリフェラル)の固有のIDが区別できない限り、有り得ます。ですので、固有のIDとして利用できるMACアドレスを使用して区別します。 > > 2.公式のいうInterleavingというを用いた具体的な処理構成はどのようになるでしょうか? > > > 先の解説になります。 > > 3. また、その公式のいう方法で処理すれば、私の懸念している割り込み・混線の問題は回避できるのでしょうか? > > > 1.により、回避できるようになると言うことです。 別の話になりますが、気に留めておく必要があるのは、BLEのアドバタイジングは送達確認は無いので、発信したTLMフレームをandroid端末のようなBLEセントラル機器が受信する確約は無いと言うことです。取りこぼしはあり得ます。 また、多くの端末が短い間隔で送信すると受信側のアプリで処理しきれないこともあるのでその辺も考慮する必要はあるかと思います。この辺は実際に試してみて、調整するようなかたちになるでしょうか。