Anwendungs Protokolle II (IoT Protokolle) - prototyping-lab/technisches-grundlagenprojekt GitHub Wiki

Das Internet der Dinge ist eine Technologie, die physische und virtuelle Gegenstände miteinander über verschiedene Systeme vernetzt. Der Mensch interagiert also mit vernetzten elektronischen Systemen und kann so zum Beispiel Smart Homes, Cities oder Wearables nutzen. IoT Protokolle

Um den Unterschiedlichen Anforderungen von IoT Produkten gerecht zu werden, gibt es verschiedene Protokolle. In diesem Artikel werden dir die drei Protokolle OSC (Open Sound Control), TUIO (Tangible User Interface) und MQTT (Message Queuing Telemetry Transport) Vorgestellt.

OSC (Open Sound Control)

Für Datenaustausch zwischen Programmen und Geräten Alternative für MIDI (Sound), Media Control (Video) und DMX (Licht)

OSC ist ein relativ neues Protokoll, das auf dem Netzwerk-UDP (User-Datagram-Protocol) aufbaut und den Datenaustausch zwischen Programmen und Geräten vereinfachen soll. Es wurde am UC Berkeley entwickelt, denn dort gibt es ein spezielles Zentrum für neue Musik- und Tontechnik (Center for New Music and Audio Technology/CNMAT).

Aufbau

Eine sogenannte OSC Message ist aufgeteilt in:

  • Address Pattern
  • Type Tag String
  • Arguments
Address Pattern

Das Address Pattern gibt an, wohin die Nachricht gesendet werden soll. Die Adresse ist durch ein “/” gekennzeichnet. Bei einem Klangerzeuger, z.B. einem Virus-Synthesizer, kann man sich folgendes vorstellen:

/virus/filter/cutoff
Type Tag String

Der Type Tag String ist noch relativ neu und muss nicht unbedingt von älteren Anwendungen unterstützt werden, ist für neuere aber erforderlich. Er kennzeichnet die OSC Messages im Typ, zum Beispiel ob es sich bei den Daten um Ganzzahlen, Zeichen (Strings) oder Fliesskommazahlen handelt. Zum abtrennen wird ein “,” benutzt.

Unter anderem gibt es folgende (Common) Type Tags:

  • i = Ganzzahl in 32 Bit
  • f = Fliesskommazahl in 32 Bit
  • s = String
  • b = Blob (Binary large Object → einfache Anhäufung von Daten)
Arguments

Die Arguments beinhalten die eigentlichen Daten. Möchte man zum Beispiel eine MIDI Nachricht absetzen, dann sähen die Argumente (jeweils 1 Byte) so aus: Port ID, Status Byte, Datenbyte 1, Datenbyte 2. Wenn man also zum Beispiel den Filterwert eines Virus verändern möchte, sähe der Code so aus:

/virus/filter/cutoff ,m 13 CC 40 30 

Genaue Erklärung: Nach dem Adress Pattern kommt ein “,m” zur Kennzeichnung einer MIDI-Nachricht. Danach die Port ID "13" (fiktiv gewählt). Dann der Statusbyte, hier der Einfachheit halber "CC" (für “Control Change”). Als letztes kommen noch die zwei Datenbytes "40" und "30". In diesem Fall geht man (fiktiv) davon aus, dass der Filter die Controller Nummer 40 hat und dieser auf den Wert 30 umgestellt wird.

Vergleich zu MIDI

Das OSC Protokoll ist quasi ein Nachfolger von MIDI und kann sich bereits jetzt schon durchsetzen. Es bringt zwar auch wieder einige Nachteile mit sich, aber auch entscheidende Vorteile:

Vorteile zu MIDI
  • Freie Adressierung (z.B. /deviceXY/knobA/)
  • Problemlose Übertragung von Strings und Fließkommazahlen
  • Nutzt moderne Netzwerkstruktur (W-LAN, Ethernet): lokale oder globale Kommunikation
  • Unterstützt drahtlose Kommunikation
  • Unterstützt neueste Geräte (z.B. iPhone Remote Control)
Nachteile zu MIDI
  • funktioniert mit UDP-Protokoll → verliert manchmal Datenpakete
  • Problematisch, wenn kein W-LAN verfügbar ist
  • Schwierig zu debuggen
  • Noch relativ wenig unterstützte Hardware (z.B. Synthesizer)

Einsatz Beispiele

  • Sensor / Gesten gesteuerte Elektro-MusikInstrumente
  • Mapping von nicht musikalischen Daten in Sound
  • Multiple-User geteilte Musiksteuerung
  • WAN + LAN Performances
  • Virtual Reality, VR-Spiele

TUIO (Tangible User Interface)

Basiert auf OSC Für Greifbare Multitouch-Oberflächen

TUIO ist ein standartisiertes Protokoll und dient als eine Anwendungsschnittstelle (API) für greifbare Multitouch-Oberflächen, die gleichzeitig mehrere Berührungen erkennen (z.B. mit zwei Fingern auf dem Touchscreen rein/raus Zoomen). Es basiert auf OSC (Open Sound Control) und kann daher leicht auf jeder Plattform eingebaut werden, die OSC unterstützt.

Funktion

TUIO macht die Übertragung einer abstrakten Analyse von interaktiven Oberflächen möglich (z.B. Touchevents und Zustände von greifbaren Objekten). Dabei kodiert es die Steuerdaten einer Tracker-Anwendung (z.B. basierend auf Computer Vision) und sendet sie an jede Client-Anwendung, die das Protokoll dekodieren kann.

Es gibt immer mehr TUIO-fähige Tracker-Anwendungen und TUIO-Client-Bibliotheken für verschiedene Programmierumgebungen und Anwendungen. Diese Kombination ermöglicht die schnelle Entwicklung von tabellenbasierten, greifbaren Multitouch-Schnittstellen. TUIO wurde hauptsächlich als Abstraktion für interaktive Oberflächen entworfen, aber es kann auch in vielen anderen ähnlichen Anwendungsbereichen genutzt werden.

TUIO

Seit der Veröffentlichung der TUIO-Protokollspezifikation als Teil des "Reactable Synthesizers", wurde das Protokoll auch von mehreren anderen Projekten im Zusammenhang mit Greifbarer- und Multitouch-Interaktion übernommen. Zum Beispiel von der NUI-Gruppe und mehreren anderen Plattformen für greifbare Interaktion.

Aufgrund seiner weiten Verbreitung kann man das TUIO-Protokoll und die TUIO-Client-API als einen Allgemein-Standard betrachten.

Einsatz Beispiele

Tracker Anwendungen

TUIO-Fähige Tracker Anwendungs Beispiele sind unter anderem:

  • reacTIVision: Computer Vision System um Objekte zu tracken und für basic multi-touch
  • BullsEye: Computer Vision Anwendung für optisch bezogenes Tracking
  • CCV Community Core Vision: System basierend auf multi-touch-tracking
  • openTSPS: Plattform übergreifendes Toolkit zur Wahrnehmung von Leuten im Raum
  • Movid: Moduler Open Vision Interaktions Daemon
Hardware

Hardware Beispiele sind unter anderem:

  • UPDD TUIO: Server für TouchBase Universal Touch Screen und Controller Drivers
  • TuioPad: open source TUIO multi-touch controller für iOS Geräte
  • TUIOdroid: open source TUIO multi-touch controller für Android Geräte
  • Tongseng: TUIO tracker für Mac OS X touchpad Geräte
  • bamboo-tuio: TUIO für Wacom Bamboo (Stift +)Touch Tablets

MQTT (Message Queuing Telemetry Transport)

Für Zuverlässige Datenübertragung

Heutzutage ist in vielen Situationen eine zuverlässige und erfolgreiche Kommunikation gefragt, die auch über instabile Mobilfunk-Netze funktioniert und viele tausende Geräte vernetzt. Deshalb zählt MQTT inzwischen zu einem der wichtigsten Protokolle im Internet der Dinge.

Die Geschichte des Protokolls beginnt bereits 1999. Die Firmen IBM und Arcom Control Systems entwickelten das Protokoll im Rahmen eines gemeinsamen Projekts, das zur Überwachung einer Ölpipeline diente. Da die mobile Infrastruktur damals noch viel unterentwickelter war als heute, gab es einige Herausforderungen.

Zum Beispiel sollte die Datenübertragung über Satellit und terrestrische Netze mit möglichst geringen Kosten funktionieren. Außerdem sollte eine allgemeine Lösung gefunden werden, die über eine direkte Punkt-zu-Punkt-Verbindung hinaus geht und die Sensoren als Datenproduzenten von den Datennutzern entkoppelt.

Aufbau

MQTT setzt das Publish/Subscribe-Pattern ein. Der Verfahrenwechsel von einer Request/Response- zu einer ereignisgesteuerten Publish/Subscribe-Architektur ist hierbei die Haupt Funktion. Sie ersetzt die Punkt-zu-Punkt-Verbindungen durch einen zentralen Server (Broker), zu dem Datenproduzenten (z.B Temperaturfühler) und auch Datennutzer (z.B. Handy, Laptop) sich verbinden können. Das Versenden (publish) und Empfangen (subscribe) von Nachrichten funktioniert über sogenannte Topics. Ein Topic ist ein String, der eine Art "Betreff" der Nachricht darstellt, aber eher ähnlich wie eine URL aufgebaut ist. Zum Beispiel kann ein Temperatursensor im Wohnzimmer seine aktuelle Temperatur auf folgendem Topic veröffentlichen: Zuhause/Wohnzimmer/Temperatur.

MQTT

Funktionsweise

Eine mobile App kann sich mit dem Broker verbinden und den gleichen Topic abonnieren, um alle vom Temperatursensor versendeten Nachrichten zu empfangen. Dabei funtioniert die Kommunikation nur über Topics, und der Sensor und das Mobiltelefon wissen nichts von der Existenz des jeweils anderen.

Topics haben noch ein weiteres wichtiges Konzept, wodurch sie flexibel sind – nämlich Wildcards.

Zuhause/Wohnzimmer/Temperatur
Zuhause/Wohnzimmer/Luftfeuchtigkeit
Zuhause/Schlafzimmer/Temperatur
Zuhause/Schlafzimmer/Luftfeuchtigkeit

In dem oben stehenden Beispiel sind vier Topics. Jeder Sensor sendet eine neue Nachricht auf den jeweiligen Topic, sobald sich ein Wert geändert hat. Wenn man mehrere Topics abonnieren will, kann man verschiedene Wildcards benutzen.

Zuhause/+/Temperatur
Zuhause/Wohnzimmer/#
#

Im zweiten Beispiel sind alle möglichen Wildcard-Operatoren aufgelistet. Im ersten Fall bekommt die mobile Anwendung nur alle Nachrichten über neue Temperaturwerte, im zweiten nur alle Werte aus dem Wohnzimmer und im dritten alle Werte (+- nur für eine Hierarchiestufe, # für beliebig viele). Will man also zum Beispiel Zuhause und Zimmer nicht genau benennen, sind zwei +-Operatoren zu benutzen: +/+/Temperatur, #/Temperatur wäre hier falsch.

Eigenschaften

Um die oben erwähnten Herausforderungen zu meistern, wurden folgende Eigenschaften und Ziele für das Protokoll ausgearbeitet:

  • Einfache Implementierung, um auch Geräte mit eingeschränkten Ressourcen zu vernetzen.
  • Unterschiedliche Servicequalitäten bei der Datenübertragung, damit die Übertragung auch in instabilen Netzen funktioniert.
  • Übertragung muss volle verfügbare Bandbreite nutzen können. (Bei Wiederaufnahme abgebrochener Verbindungen werden Metainformationen oft nochmal gesendet → serverseitiges speichern (Session-awareness) wäre von Vorteil).
  • Protokoll sollte unterschiedliche Datentypen übertragen können und nicht auf eine bestimmte Struktur festgelegt sein (datenagnostisch).

Zum Erreichen dieser Ziele ist das Protokoll MQTT entwickelt worden. 2010 wurde es offiziell unter einer freien Lizenz veröffentlicht, was auch Open-Source-Implementierungen möglich machte. 2011 brachten IBM und Eurotech ihre MQTT-Bibliothek unter Eclipse Foundation und gaben so der breiten Verwendung des Protokolls einen weiteren Schubs.

Durch das Einbringen der MQTT-Bibliothek in die Eclipse Foundation entstand das Eclipse-Paho-Projekt. Derzeit sind Implementierungen in C, C++, Java, JavaScript, Lua und Python verfügbar.

MQTT Explorer

In diesem Video kannst du MQTT bzw. einen MQTT Explorer in Aktion sehen.

Einsatz Beispiele

  • Facebook Messenger
  • Vernetzung von Automobilen → ermitteln von auszutauschenden Teilen, anzeigen von Stau auf der Route im Navigationssystem

Quiz

Alles Verstanden? Dann teste dein Wissen hier!

Text: Vivienne | Bild: Fabienne | Quiz: Simon