Dies ist mir kürzlich aufgefallen, als ich auf Youtube ein tolles Video gefunden habe:
Die Folien für seinen Vortrag sind verfügbar Hier
Auf Folie 26 und 41 Minuten des Videos erörtert er, wie (lassen Sie mich umschreiben):
Mobilfunkbetreiber bevorzugen, dass ihre IoT-Verbraucher HTML- , XML- oder JSON- Nachrichten verwenden, da sie mehr Daten verbrauchen. Mehr Daten bedeutet, dass sie den Verbrauchern mehr Geld für den Service in Rechnung stellen können.
Ich verstehe, dass viele proprietäre Protokolle nämlich. SigFox , Wireless HART oder Z Wave haben niedrigere Datenraten, und das Senden umfangreicher Daten über solche Träger kann eine teure Angelegenheit sein.
Frage
Gibt es einige andere leichte Nachrichtenformate, die für die Verwendung in proprietären Protokollen verwendet werden, wodurch sie kosteneffiziente Lösungen für aktuelle und zukünftige IoT-Verbraucher darstellen? (Im Dunkeln gedreht: Irgendwo liegt ein Format namens Lightweight XML oder HTML oder JSON ?)
Vielleicht wird so etwas wie CBOR verwendet oder vielleicht?
quelle
Antworten:
Fragen Sie nach dem Protokoll oder dem Nachrichtenformat ? Wir verwenden den Begriff Protokoll oft fälschlicherweise, wenn wir das Format der Daten meinen. Ich mache das oft selbst, weil die Unterscheidung nicht jedem klar ist.
Messaging-Protokolle, die im IoT verwendet werden, sind in der Regel recht kompakt, zumindest mehr als http, und bieten wichtige Funktionen für das Messaging (Sitzungen, Flusskontrolle, Zuverlässigkeit usw.). Das Nachrichtenformat ist das der Daten in der Nachricht, die gesendet werden. Ich gehe davon aus, dass Sie danach fragen.
Das kompakteste Nachrichtenformat ist ein sorgfältig ausgewähltes handgerolltes Binärformat. Es wird häufig in Szenarien mit geringer Bandbreite verwendet, in denen Sie einige Bytes senden und genau wissen möchten, wie diese Bytes aussehen. Bei größeren Nachrichten sind die Nachteile erheblich und sollten im Allgemeinen um jeden Preis vermieden werden.
Ich habe eine detaillierte Bewertung zu vielen verschiedenen Serialisierungsoptionen für Daten vorgenommen. Ich erwartete, dass protobuf, messagepack ziemlich kompakt sein würde, was sie auch waren. Mein zweites Problem bestand jedoch darin, Bibliotheken zu finden, die auf verschiedenen Plattformen verwaltet wurden und verfügbar waren, einschließlich C auf dem Gerät.
Das Format, für das ich mich überraschenderweise entschieden habe, war gzip-komprimiertes JSON. Es ist leicht zu implementieren und zu verstehen, läuft überall und war mit den von mir verwendeten Daten ungefähr gleich oder kleiner als andere Methoden.
Beachten Sie auch, dass Sie bei TLS-Handshakes ohnehin einen Datenblock (> 6 KB) verbrauchen, wenn Sie einen sicheren Kanal wie TLS haben.
Vor ein paar Jahren hatte ich erwartet, dass ein Format wie Protokollpuffer dominiert, aber es ist nicht wirklich viel passiert. Wahrscheinlich wegen der Leichtigkeit, mit der JSON geschrieben und analysiert (und komprimiert) werden kann. Ich mag das Aussehen von Flachpuffern , aber der Vorteil liegt eher in der Analysegeschwindigkeit als in der Kompaktheit.
Da Sie sich in der Ermittlungsphase befinden, empfehlen wir Ihnen, jeweils ein bisschen Code mit den für Sie typischen Daten zu schreiben und einige Vergleiche anzustellen. Harte Daten zu Beginn helfen Ihnen, Ihre Auswahl zu bestätigen.
quelle
Der große Vorteil eines auf Markups basierenden Formats besteht darin, dass Sie bei der Auswahl der von Ihnen übertragenen Daten flexibel bleiben. Dies ist in einem sich entwickelnden Ökosystem von enormer Bedeutung, in dem Sie davon ausgehen, dass sich ein Service über mehrere Jahre hinweg entwickelt.
Obwohl die Übertragung einer streng codierten binären Datenstruktur effizient ist, müssen Sie im Voraus mindestens entscheiden, wie die Struktur aussehen soll. Wenn Sie später feststellen, dass auch nur ein Feld erweitert werden muss, stecken Sie fest. Selbst die Aktualisierung des Protokolls ist schwierig, da Sie eine alte Codierung erst dann ersetzen können, wenn alle Endpunkte aktualisiert wurden.
Dies legt nahe, dass der optimale Ansatz darin besteht, minimalistische Pakete und eine auf Markups basierende Codierung zu mischen (wobei letztere als Fallback verwendet wird). Der Wert davon hängt von den Nutzdaten mit der höchsten Bandbreite ab. Wenn Sie bereits häufig Videoblöcke übertragen, lohnt es sich weniger, die seltenen Steuerdaten zu optimieren. Wenn Sie häufig kleine Übertragungen durchführen (z. B. eine Temperatur), ist es sinnvoll, den Übertragungsaufwand so gering wie möglich zu halten. Möglicherweise ist es jedoch auch sinnvoll, die Übertragungen nur stapelweise auszuführen.
quelle