Ist das MQTT-Protokoll für die Übertragung von Sensorwerten über BLE geeignet?


12

Angenommen, es gibt zahlreiche schwache Sensoren (z. B. Geräte auf Arduino-Ebene), die BLE als Kommunikationsmittel verwenden, und diese Geräte sind mit einem leistungsstärkeren Gateway verbunden (z. B. Geräte auf Raspberry-Pi-Ebene).

Ich würde gerne wissen, ob MQTT als geeignetes Protokoll für die Übertragung ihrer Messwerte angesehen wird (kurze, häufige Burst-Meldungen).

Eine Reihe von Blogs / Dokumenten betrachten MQTT als geeignet für "IoT-Anwendungen", da es im Vergleich zu HTTP ein geringes Gewicht hat und Strom spart. Nach meinem Verständnis muss jedoch eine Verbindung offen gehalten werden, was bei BLE oder anderen für das Internet der Dinge geeigneten Kommunikationsprotokollen nicht der Fall ist. BLE hält die Verbindung nicht für längere Zeit offen, um Energie zu sparen. Offensichtlich ist MQTT geeignet, wenn ein MAC-Layer-Protokoll wie WiFi verwendet wird. Dies verstößt fast gegen die Gründe, die hinter der Verwendung von MQTT stehen (dh wenn das Gerät ein Protokoll wie WiFi rechnerisch handhabt, benötigt es möglicherweise kein Protokoll wie MQTT). Sehen Sie einen Fehler in dieser Logik?

Gibt es ein alternatives Anwendungsschichtprotokoll für diesen Zweck? Was ist die am häufigsten gesehene Struktur dieser Art von Nachrichten (z. B. Rohdaten, JSON, XML), wenn sie mit einem Gateway kommunizieren und wenn sie direkt mit einem Server kommunizieren?


Ist der native BLE-Mechanismus aus einem bestimmten Grund ungeeignet?
Sean Houlihane

Seans Frage lässt sich am besten in zwei Teile aufteilen: A) Sind native BLE-Protokollmechanismen für die sofortige Verbindung vom Gerät aus funktionsfähig und B) Wohin müssen die Daten letztendlich gehen? Wenn die Antwort auf Teil B außerhalb des Bereichs von BLE liegt, ist eine Brücke (zumindest zwischen Funkformaten, wahrscheinlich aber auch zwischen Protokollen) erforderlich.
Chris Stratton

Verbraucht das Gateway die Rohdaten oder leitet es sie einfach weiter. Kann es in diesem Zusammenhang sinnvoll sein, MQTT durchgängig zu tunneln, anstatt die für MQTT native BLE am Gateway zu überbrücken?
Sean Houlihane

Antworten:


14

MQTT muss über TCP / IP laufen (ich kann mich nicht erinnern, ob es tatsächlich in der Spezifikation enthalten ist oder ob nur ausreichende Annahmen getroffen wurden), aber sein Schwesterprotokoll MQTT-SN kann über nahezu jedes Protokoll laufen, das Daten übertragen kann Ich habe Implementierungen in UDP und seriell gesehen.

Obwohl ich mir nicht sicher bin, was Sie mit BLE erreichen, bieten die integrierten Eigenschaften von BLE (wenn auch nur eins zu eins) den gleichen Vorteil, beispielsweise durch Benachrichtigung.

Ich denke, eines der wichtigsten Dinge, an die man sich erinnern sollte, ist, wofür das "Ich" im IoT steht. Es impliziert irgendwann den Zugang zum Internet (auch wenn es sich um ein Gateway-Gerät oder ein Telefon handelt). An diesem Punkt kann MQTT sehr nützlich sein, aber es bedeutet nicht unbedingt den ganzen Weg bis zur (Blutungs) kante.


Zunächst einmal vielen Dank, dass Sie mich über die Existenz von MQTT-SN informiert haben. Die überwiegende Mehrheit der Literatur ist etwas irreführend, da dies impliziert, dass MQTT die Edge-Geräte hauptsächlich aufgrund seiner Stromsparattribute stärkt. In diesem Fall ist der reduzierte Stromverbrauch kein wirkliches Argument, da dies bei Geräten mit diesem Profil einfach keine Rolle spielt. Die Geräte sollten einen vollständigen IP-Stack implementieren. Da MQTT eine offene Verbindung aufrechterhält, sind energieeffiziente MAC-Layer-Protokolle keine Option.
dr.doom

1
MQTT spart im Vergleich zu HTTP Strom, da eine offene TCP-Verbindung nicht so viel Strom verbraucht, um offen zu bleiben, wenn Sie bereits einen TCP-Stack ausgeführt haben und die Keep-Alive-Pakete winzig sind. Außerdem ist der Protokoll-Overhead viel geringer als bei HTTP, da ein HTTP-Header im Vergleich zu einem MQTT-Paket-Header sehr groß ist. Ein Großteil der Berechnungsliteratur basiert auf einem Mobiltelefon, z. B. phone
hardillb

Auch der Rand hat sich verschoben, früher war TCP / IP dort, wo Dinge wie ble und ZigBee (insbesondere mit lpwan) aufgehört haben, und noch leistungsschwächere Prozessoren sind auf noch dünnere Geräte
umgezogen

Es ist ausdrücklich nicht nur TCP / IP; Die einzige Anforderung ist, dass das Protokoll "geordnete, verlustfreie, bidirektionale Verbindungen" bereitstellen muss. Es ist wie der zweite Absatz der Zusammenfassung des Dokuments. SN existiert, weil diese Anforderung für kleine Systeme, insbesondere funkbasierte, lästig ist. Vielleicht meinen Sie das mit "es werden genügend Annahmen getroffen, um dies zu erreichen", aber es ist definitiv nicht abhängig von TCP / IP.
Dave Newton

9

Wahrscheinlich ist es besser, eine einfache Zuordnung der Daten von BLE-Paradigmen zu MQTT vorzunehmen, als zu versuchen, MQTT buchstäblich über BLE zu senden.

BLE tauscht Daten in der Regel in Form von Merkmalen aus . Diese verfügen über verschiedene BLE-spezifische Mechanismen zum Auffinden von Wertänderungen, die Sie möglicherweise nützlich finden. Sie haben jedoch eine maximale Datenlänge von 20 Byte .

Es ist möglich , serielle Daten über BLE zu streamen, wobei jeweils 20 Bytes verschoben werden. Dies geschieht manchmal, um einen virtuellen seriellen Port zu implementieren, und Sie können durch diesen einen vollständigen MQTT-Tunnel erstellen.

Aber Sie würden wahrscheinlich besser eine Sammlung von BLE Merkmalen zu verwenden , um die Daten von verschiedenen Themen zu tragen, und eine Brücke haben die Karten die charakteristische Identität zu einem MQTT Thema und ordnet den Wert auf die MQTT Nutzlast.

BLE hat seinen eigenen Sinn für fortlaufende verbundene Sitzungen im Vergleich zu nicht verbundenen Sitzungen. Wahrscheinlich sollten Sie herausfinden, welche Verwendung von BLE für Ihre Anwendung am besten geeignet ist, und dies dann dem MQTT-Gefühl der Aufrechterhaltung einer Verbindung zuordnen.

Dies sollte in einer oder beiden Richtungen möglich sein: BLE-> MQTT und MQTT-> BLE


5
Wenn Sie eine MQTT 2 BLE Brücke wollen , können Sie bei Mine aussehen github.com/hardillb/mqtt2ble
hardillb

Vielen Dank für den Link, den ich gerade ansehe.
dr.doom
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.