Internet der Dinge SS2014/IDD14P04 CoAP Contiki

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche

Beschreibung/Einführung

Im Rahmen des Master-Studiengangs Informatik im Modul "Internet der Dinge", wird folgend das Projekt "Umsetzung des Constrained Application Protocol (CoAP) für Contiki-Sensorknoten" beschrieben. Das Projekt wurde von Daniel Mierswa durchgeführt.

Für das Internet der Dinge (oder Web 4.0) wurde ein Kommunikationsprotokoll entworfen, welches den Anforderungen aus diesem Bereich gerecht wird. Das CoAP (Constraint Application Protocol) dient der M2M-Kommunikation und ist speziell für energieeffiziente Nutzung in eingebetteten Geräten vorgesehen. CoAP kann ebenfalls einfach nach HTTP transformiert werden, wodurch es auch Anwendung in anderen Bereichen findet. Das Betriebssystem Contiki wurde entwickelt, um Sensorknoten und andere Low-Energy-Devices mit umfangreichen Funktionen eines modernen Betriebssystems auszustatten und dabei wenig Energie zu nutzen. Da Contiki bereits mit dem uiP6 (eigentlich µIP6) einen TCP/IP-Stack für Mikrocontroller entworfen hat, der auch UDP zur Verfügung stellt, ist die Grundlage für die Umsetzung des Protokolls geschaffen.

Projektziel

Ziel ist es das CoAP-Protokoll so umzusetzen, dass es auf mindestens einem Sensorknoten erfolgreich angewendet werden kann. Zusätzlich sollte es möglich sein mit der Anwendung eine Evaluierung der Implementierung in Bezug auf Aufwand, Energiekonsum und der Wiederverwendbarkeit vorzunehmen.

Aufgaben

Um die Implementierung zu testen wurde vorgeschlagen, eine Middleware auf einer lokalen Workstation aufzusetzen, die dann ebenfalls das CoAP-Protokoll verwendet, um Sensordaten zu sammeln, aufzubereiten und diese wiederum selbst über das CoAP-Protokoll oder andere Schnittstellen anbietet.

Bei der Umsetzung des CoAP-Protokolls wird die Version 18 des Drafts betrachtet. In der Analysephase des Projekts muss geprüft werden, ob das Protokoll vollständig implementierbar ist und welche zusätzlichen Optionen und Eigenschaften des Drafts (Security, Multicasting, Caching, usw.) beachtet werden müssen.

Dabei ist zu prüfen, welche Funktionen grundlegend wichtig sind und welche nur optional sind, so dass das Projekt rechtzeitig abgeschlossen werden kann. Um die Umsetzung zu testen, sollten mindestens alle notwendigen Eigenschaften (Messaging, Request/Response Semantic und Methoden) des Protokolls eingebracht werden. Ebenfalls sollten die Error-Code-Definitions des Drafts (5.9), sowie die verlässliche und unverlässliche Nachrichtenübertragung (4.2 und 4.3) umgesetzt werden, um diese zu vergleichen.

Es existieren bereits 2 Implementierungen des CoAP-Protokolls für Contiki und es muss überprüft werden, inwiefern diese Implementierungen ausreichen, um Anwendungen zu schreiben und hinreichende Testfälle zu schreiben und erfolgreich durchzuführen. Sollten die Implementierungen zur Folge haben, dass eine Eigenarbeit bei der Umsetzung des Protokolls nicht nötig ist, müssen Alternativen in diesem Aufgabenfeld gefunden werden.

Contiki-OS bietet verschiedene Optionen das produzierte Binär-Image zu verkleinern. Im Rahmen des Projekts sollte möglichst darauf geachtet werden, die Binär-Images möglichst klein zu halten und zu überprüfen, welche Contiki-Komponenten beim Kompilieren nicht mit einbezogen werden müssen.

Analysephase

Ziemlich zu Beginn des Projekts wurde eine erste Analysephase abgeschlossen. Aufgrund der bereits vorhandenen Implementierung der ETH Zürich (Erbium) und dessen Fortschritt, scheint eine Neuimplementierung nicht sehr förderlich als Projekt für die Lehrveranstaltung zu sein. In einem Gespräch mit den Verantwortlichen der Lehrveranstaltung wurden 3 alternative Vorschläge zu einer neuen Projektfindung gemacht, die ebenfalls Arbeiten mit Contiki und dem CoAP-Protokoll einbringen.

  • Die Implementierung der Erbium-Implementierung bezieht sich auf die Version 13 des CoAP-Drafts. Mit einem Vergleich zur Version 18 des Standards soll festgestellt werden, welche Neuerungen es in dieser Version gab und ob Diese Neuerungen ausreichen, ein Projekt zu erstellen, in dem die Anhebung der Version der Implementierung durchgeführt wird.
  • Ein Projekt erstellen, in dem zeitliche Abläufe bei der Verwendung von CoAP in Contiki gemessen werden. Dazu muss festgestellt werden, inwieweit Messungen von der ETH Zürich bereits durchgeführt wurden und welche Messungen im Anwendungsgebiet "Sensorknoten" relevant sind. Dazu muss eine Test-Anwendung geschrieben werden.
  • Eine Anwendungsdomäne erstellen, in dem mehrere Sensorknoten enthalten sind, die Contiki anwenden. In dieser werden auch Messungen durchgeführt und vorallem geprüft, wie die Implementierung in einem größeren Geflecht skaliert.

Neue Projektidee / Brainstorming

In einer Praktikumsstunde der Lehrveranstaltung saß der Durchführende mit den Verantwortlichen zusammen und diskutierte über neue Projektideen.

  • CoAP-Contiki-Sensorknoten sprechen lassen mit Relay
  • Interoperabilität testen mit vorhandenen Implementierungen (Workstation, z.B. libcoap)
  • Mehrere Sensorknoten um sinnvolle Tests durchzuführen (evtl. Multicast)
  • Sporadisches Senden der Daten
  • Gateway speichert wichtige Daten und überträgt diese als MQTT-Client mit MQTT an einen MQTT-Server
  • Evtl. kann Server auch als Client agieren
  • MQTT-Server an der HS-RM: Mosquitto
  • Geeignete Implementierung suchen
  • Deployment des Gateway z.B. auf Rasberry PI
  • Kommunikation weiterhin über 6LoWPAN (evtl. RavenUSB auf Rasberry PI)
  • Evaluieren (Ein Knoten, Mehrere Knoten, Implementierungsgröße, Anwendungsgröße, usw.)

Diese Ideen haben also dazu geführt, das Projekt nun mit dem Titel "Entwicklung eines MQTT/CoAP-Gateways". Darin wird der Mosquitto-Messagebroker zur Verarbeitung der MQTT-Nachrichten, sowie weiterhin Contiki-Sensorknoten zur Erfassung und Übertragung von Daten genutzt. Als Hardware für das Gateway wird der Rasberry PI genutzt.

Auf der Unterseite Entwicklung eines MQTT/CoAP-Gateway wird dieses Projekt in einem neuen Wiki beschrieben.

Links