MQTTプロトコルは、BLEを介したセンサー読み取り値の送信に適していますか?


12

通信手段としてBLEに依存する多数の弱いセンサー(Arduinoレベルのデバイスなど)があり、これらのデバイスがより強力なゲートウェイ(Raspberry piレベルのデバイスなど)に接続されているとします。

MQTTが測定値(短く、頻繁にバーストするメッセージ)を送信するための適切なプロトコルと見なされるかどうかを知りたいです。

多くのブログ/ドキュメントでは、MQTTがHTTPと比較して軽量で電力を節約できるため、「IoTアプリケーション」に適していると考えています。ただし、私の理解では、接続を開いたままにしておく必要がありますが、これはBLEやIoTに適した他の通信プロトコルには当てはまりません。BLEは、エネルギーを確保するために長時間接続を開いたままにしません。明らかに、WiFiなどのMAC層プロトコルが使用される場合、MQTTが適切です。これは、最初にMQTTを使用することの背後にある理論的根拠をほとんど破ります(つまり、デバイスがWiFiなどのプロトコルを計算可能に処理する場合、MQTTなどのプロトコルは必要ないかもしれません)。この論理に欠陥がありますか?

そのための代替アプリケーション層プロトコルはありますか?ゲートウェイと通信する場合、およびサーバーと直接通信する場合、これらのタイプのメッセージ(生のバイナリデータ、JSON、XMLなど)で最もよく見られる構造は何ですか?


ネイティブBLEメカニズムは特定の理由で不適切ですか?
ショーンフーリハネ

Seanの質問は、2つの部分に分割するのが最適かもしれません。A)ネイティブBLEプロトコルメカニズムはデバイスからの即時リンクで機能し、B)データは最終的にどこに行く必要がありますか?パートBに対する回答がBLEの範囲を超えている場合、ブリッジ(少なくとも無線フ​​ォーマット間、おそらくプロトコルも同様)が必要です。
クリスストラットン

ゲートウェイは生の読み取り値を消費するか、単にそれらを中継しますか?そのコンテキストでは、ゲートウェイでMQTTにネイティブなBLEをブリッジするのではなく、エンドツーエンドでMQTTをトンネリングすることは意味がありますか?
ショーンフーリハネ

回答:


14

MQTTはTCP / IPで実行する必要があります(実際に仕様に含まれているか、そうするために十分な仮定がなされているか覚えていません)が、姉妹プロトコルMQTT-SNはデータを渡すことができるほぼすべてのプロトコルで実行できます、UDPとシリアルの実装を見てきました。

BLEで実行することで何が得られるかわからないが、BLEの組み込みの特性は、通知のようなものと同じ利点(1対1の場合のみ)を提供します。

覚えておくべき重要なことの1つは、IoTで「私」が何を意味するかです。それは、ある時点でインターネットにアクセスすることを意味します(ゲートウェイデバイスまたは電話であっても)。その時点でMQTTは非常に便利ですが、必ずしも(ブリーディング)エッジまでのすべてを意味するわけではありません。


まず、MQTT-SNの存在について教えてくれてありがとう。大半の文献は、MQTTが主に省電力特性のためにエッジデバイスを強化することを意味するため、やや誤解を招く可能性があります。その場合、そのプロファイルを持つデバイスでは単純に問題にならないため、電力消費の削減はそれほど大きな議論ではありません。デバイスは完全なIPスタックを実装する必要があり、MQTTはオープン接続を維持するため、エネルギー効率の高いMAC層プロトコルはオプションではありません。
dr.doom

1
MQTTは、HTTPのようなものと比較して電力を節約します。TCPスタックを実行すると、開いているTCP接続は実際に開いたままにするのにそれほど多くの電力を消費せず、キープアライブパケットが小さいためです。また、HTTPヘッダーはMQTTパケットヘッダーと比較して非常に大きいため、プロトコルオーバーヘッドはHTTPよりもはるかに低くなります。計算に関する文献の多くは、携帯電話などの携帯端末に基づいています
-hardillb

また、エッジが移動したTCP / IPは、停止(特にlpwan有する)BLeとジグビーのようなもの、さらには低電力プロセッサはさらに薄いデバイスに移動した場合、それがあることを使用
hardillb

これは、明示的だないだけでTCP / IP。唯一の要件は、プロトコルが「順序付けされたロスレスの双方向接続」を提供する必要があることです。ドキュメントの要約の2番目の段落のようなものです。SNが存在する理由は、その要件が小規模なシステム、特に無線ベースのシステムにとって厄介だからです。「そうするために十分な仮定が行われている」という意味かもしれませんが、TCP / IPに依存することはほとんどありません。
デイブニュートン

9

間違いなく、文字通りBLEを介してMQTTを送信するのではなく、BLEパラダイムからMQTTへのデータの単純なマッピングを行う方が良いでしょう。

BLEは通常、特性の形でデータを交換します。これらには、価値の変化を発見するためのさまざまなBLE固有のメカニズムがありますが、これらのメカニズムは便利です。 ただし、最大データ長は20バイトです。

BLEでシリアルデータをストリーミングし、一度に20バイトを移動することができます。これは仮想シリアルポートを実装するために行われることがあり、これを介して完全なMQTTをトンネルすることができます。

ただし、BLE特性のコレクションを使用してさまざまなトピックのデータを保持し、特性IDをMQTTトピックにマップし、をMQTTペイロードにマップするブリッジを使用する方がよいでしょう。

BLEには、接続されているセッションと接続されていないセッションとの独自の感覚があります。おそらく、BLEの使用法がアプリケーションに最適であるかを把握し、これを接続を維持するというMQTTの感覚にマッピングする必要があります。

BLE-> MQTTおよびMQTT-> BLEのいずれかまたは両方向でこれを実行できるはずです。


5
MQTT 2 BLEブリッジが必要な場合は、鉱山github.com/hardillb/mqtt2ble
hardillb

そのリンクをありがとう、私は今それを見ています。
dr.doom
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.