Sensornetzwerk – Aufbau und Einsatz – Teil 2

Im ersten Teil der Blogreihe zum Aufbau eines Sensornetzwerks ging es in erster Linie um die Voraussetzungen zum Aufbau, die Vorbereitung und Einarbeitung in das Betriebssystem. Im zweiten Teil wird nun der Wechsel von der Simulationsumgebung auf reale Hardware aufgezeigt. Hier sollten zunächst die Beispielprogramme auf dem Board „stm32f3discovery“ durchgespielt und getestet werden, ehe die gewünschten Funktionen implementiert werden.

Wie im ersten Teil bereits erwähnt, besteht ein Sensornetzwerk aus einem Border-Router und den entsprechenden Sensorknoten.

Border-Router – Hauptknoten

Der Border-Router arbeitet als Bindeglied zwischen dem 6lowPAN- Netzwerk und dem normalen LAN bzw. WLAN-Netzwerk. Er ermöglicht den Zugriff auf das Sensornetzwerk von außerhalb. Das 6lowPAN- Netzwerk ist besonders für Netzwerke mit wenig Leistung und Ressourcen geeignet.

Sensornetzwerk Aufbau Netzwerk, generic.de AG

Hier ist nur das nötigste implementiert, nichtsdestotrotz stellt dieses Netzwerk eine automatische Verbindung im Sensornetzwerk her und vergibt an die einzelnen Sensoren eine IPv6-Adresse über die diese dann eindeutig identifizierbar sind. Dazu wird jedem erkannten Knoten eine globale IPv6-Adresse zugeordnet über welche wiederum der Knoten auch von außerhalb des Netzwerks angesteuert werden kann.

Sensornetzwerk RPL, generic.de AG

In diesem Fall die „2001:db8::ff:fe00:12“. Mithilfe des Routing Protocol for Low power and Lossy Networks (RPL) ist es zudem nicht unbedingt notwendig, dass der Sensorknoten direkten Kontakt mit dem Hauptknoten hat.

RPL (Low power and Lossy Networks)

Das RPL kann als Zusatz zum Border-Router bzw. Hauptknoten genutzt werden. Es ist ein Routing-Protokoll welches extra für Sensornetzwerke oder Knotennetzwerke entwickelt wurde.
Das Protokoll erlaubt die Vergabe von globalen IPv6-Adressen an die Sensorknoten und ermöglicht somit deren Einbindung in ein Sensornetzwerk. Der Unterschied zum normalen „Routing“ ist jedoch der, dass die Vergabe auch an solche Knoten erfolgt, welche keinen direkten Kontakt mit dem Hauptknoten haben. Es entsteht ein sogenanntes Multihopping, wobei die Kommunikation zwischen Hauptknoten und Sensorknoten über zwischengeschaltete Knoten erfolgen kann. Es ist kein direkter (Funk-) Kontakt mehr notwendig.

Basierend auf einem Distanzvektoralgorithmus konstruiert das RPL zielorientierte, gerichtete, azyklische Graphen, sogenannte Destination Oriented Directed Acyclic Graph (DODAG), mit deren Hilfe der kürzeste Weg zwischen den Knoten ermittelt wird.

Über ein DODAG Information Object (DIO) teilt jeder Knoten periodisch seinen Status mit. Darin enthalten sind der Rang des Knotens, je niedriger dieser ist, desto näher ist der Knoten am Hauptknoten, die DODAG-ID, die RPL-Instanz-ID, die Iteration der RPL-Instanz-ID und Informationen darüber, ob es sich um einen Zielknoten handelt.
Im ersten Schritt geht das DIO vom Hauptknoten aus an alle weiteren Knoten. Über diesen Weg können sich dann weitere Knoten verbinden und erhalten direkt alle benötigten Informationen über das Netzwerk. Über den Distanzvektoralgorithmus ermöglicht das DIO dann jedem Knoten, den besten Elternknoten auszuwählen.

Sensornetzwerk Knotennetz, generic.de AG

Blauer Knoten: Hauptknoten
Orange Knoten: Sensorknoten
Blaue Pfeile: Direkter und kürzester Weg zum Hauptknoten
Grüne Pfeile: Eventuelle Ersatzwege, falls der nächste Knoten offline ist.

Innerhalb des Netzwerks findet eine Unterteilung in Eltern- (Parent) und Kinderknoten (Child) statt. Die Elternknoten haben keine Informationen über die angehängten Kinderknoten, daher senden die Kinderknoten ein Destination Advertisement Object (DAO) an ihre verbundenen Elternknoten. Mit diesem teilen Sie den zugehörigen Knoten mit, welche Knoten über den Knoten selbst erreicht werden können. Das bedeutet auch, dass Knoten ohne Kinderknoten im DAO nur die Information weitergeben, dass Sie der einzige zu erreichende Knoten sind. Die Elternknoten wiederum, die das DAO von Ihren Kinderknoten empfangen, senden das DAO an Ihre Elternknoten weiter.
Über die Verteilung dieser Informationen wissen die Knoten, wo sie hingehören, welchen Rang sie haben usw. Jeder Knoten hat nur Informationen über die direkt verbundenen Knoten und kennt im ersten Schritt nur den kürzesten Weg zum nächsten Knoten. Durch den somit möglichen Weg über die nächste Ebene ist kein direkter Kontakt mehr zum Hauptknoten notwendig. So entsteht ein dichtes Informationsnetz über die Lage der eingebundenen Knoten.

Die Verbindung zu einem entfernten Knoten erfolgt dann über andere, zwischengeschaltete Knoten. Durch die Laufzeitmessung und Algorithmen wird jeweils der kürzeste Weg ermittelt. Dadurch entsteht eine Rangfolge der einzelnen Knoten mit unterschiedlichen Rängen zwischen Elternknoten und den Kinderknoten. Vom Hauptknoten aus gehen mehrere Kinderknoten weg, die wiederum Kinderknoten haben. Damit kann ein Knoten gleichzeitig Kinder- und Elternknoten sein.

Sensornetzwerk RPL Instanz, generic.de AG

Der Hauptknoten hat keinen Elternknoten. Im obigen Bild erkennt man, dass der Hauptknoten in der RPL-Instanz 1 liegt und den Rang 256 (R:256) hat.

Der erste Sensorknoten liegt ebenfalls in der in der RPL-Instanz 1 und hat den Rang 512 (R:512). Er hat, im Gegensatz zum Hauptknoten, einen Elternknoten. Der Hauptknoten ist der Elternknoten des ersten Sensorknotens. Aus diesem Grund ist der erste Sensorknoten Mitglied in der „parent-table“. Hier wird angezeigt, welcher Knoten der Elternknoten ist und welche Adresse dieser innehält. Im Fall unten ist dies der Knoten mit der Adresse „fe80::ff:fe00:16“, die link-local-Adresse des Hauptknotens.

Sensornetzwerk RPL Instanz 2, generic.de AG

CoAP

Das Contrained Application Protocol (CoAP) ist ein Web-Transfer-Protokoll, ein standardisiertes Nachrichtenprotokoll, welches sich sehr gut für das Internet of Things eignet.

Die Abfrage bzw. Kommunikation der einzelnen Knoten im Netzwerk soll deswegen über CoAP erfolgen. Um bei dem CoAP die Abfrage bearbeiten zu können sind sogenannte Endpunkte notwendig. Diese Endpunkte beinhalten den benötigten Befehl für die entsprechende Funktion, die bei der entsprechenden ankommenden Nachricht aufgerufen werden soll. Als Beispiel ist hier die Abfrage der Luftfeuchtigkeit aufgeführt.

Befehl für die Abfrage der Luftfeuchtigkeit vom Sensorknoten mit der IPv6-Adresse 2001:db8::12:
Coap-client -m get coap://[2001:db8::12]/dht/hum
Dank eines CoAP-Clienten für Ubuntu kann dieser Befehl direkt in Ubuntu ausgeführt werden.

Im Befehl sind die IP-Adresse des Empfänger-Knotens sowie die Endpunkte (/dht/hum) der gewünschten Information enthalten.

Als Antwort erhält man dann die gewünschte Information. In diesem Fall die Luftfeuchtigkeit:

Sensornetzwerk Messung Luftfeuchtigkeit, generic.de AG

Zur Abfrage wird folgender Code benötigt, zunächst der Funktionsprototyp für die Response-Funktion:

Sensornetzwerk Response Funktion, generic.de AG

Und der Endpunkt:

Sensornetzwerk Endpunkt, generic.de AG

In der Abbildung sieht man die Endpunkte, welche bei der CoAP Abfrage angegeben werden müssen. In diesem Fall also“/dht/hum“.

Wird also mit dem obigen CoAP-Befehl der Endpunkt „/dht/hum“ angesprochen, so wird die Response-Funktion „handle_get_dht_hum“ aufgerufen.

Response Funktion

Die eigentliche Funktion ist die Response Funktion. Diese erstellt die Antwort indem der Sensor ausgelesen und der entsprechende Wert, hier die Luftfeuchtigkeit, als CoAP Response zurückgegeben wird.

Sensornetzwerk CoAP Response, generic.de AG

Es lassen sich beliebig viele CoAP Response einrichten.

Sensornetzwerk CoAP Response, generic.de AG

Im obigen Code-Block wurde nun unter anderem noch ein Response für den Namen des Boards oder die Temperatur eingerichtet.

Die Informationen der (Sensor-) Boards lassen sich jeweils mit Hilfe von CoAP-Clients abrufen.

Durch die Standardisierung des CoAP-Protokolls gibt es mehrere Möglichkeiten CoAP-Befehle abzusetzen bzw. deren Antworten auszulesen. Neben dem oben erwähnten Clienten für Ubuntu gibt es zum Beispiel auch das Plugin „Copper“ für den Firefox-Browser.

Sensornetzwerk Browser Plugin, generic.de AG

Fazit

Die Herausforderung im Aufbau des Sensornetzwerks lag im ersten Schritt an der Auswahl des Betriebssystems und der Hardware. Zudem musste das Wissen über Sensornetzwerke angeeignet und vertieft werden, um den Aufbau und deren Funktionsweise verstehen zu können. Zunächst ist es daher wichtig, zu wissen, welche Funktionen die Soft- und Hardware unterstützten soll, wie der Code und besonders auch das Betriebssystem aufgebaut sind, um so das Verständnis für dieses zu entwickeln. Daher sollten die Beispiel-Programme des Betriebssystems vorab getestet und auf diese aufgebaut werden.

Auch das Knotenverfahren an sich stellt zunächst eine komplexe Aufgabe da. Im ersten Schritt muss das Wissen für die Verkettung der einzelnen Punkte aufgebaut werden. Erst dann kann man das System sowie den Ablauf verstehen.

Zudem musste die Komptabilität zwischen Hard- und Software untersucht werden und das bestmögliche Zusammenspiel evaluiert werden. Beginnend bei der Auswahl der Sensoren bis hin zu der Verwendung des Funkchips.

Bei den Boards ist die erste Aufgabe die Herstellung der Verbindung zum PC und natürlich die Frage danach, wie die Sensoren und Funkchips richtig an die Platine angeschlossen werden können und welche Pins wie zu verwenden sind. Die Funktions-Doppelbelegung der PINs und die neue Belegung der Funktionen durch Riot OS machte ein intensives studieren der Treiber notwendig, um zu schauen, welche PINs des Boards welche Funktion vom Betriebssystem bekommen haben.

Denn auch, wenn zum Beispiel ein Board vier I2C-Schnittstellen vorweist, muss man in der Treiberdokumentation nachschauen, wie viele und welche von diesen das Betriebssystem unterstützt und wie diese bezeichnet sind. Oft ist nämlich zum Beispiel I2C0 des Boards innerhalb des Betriebssystems mit I2C1 bezeichnet.

Aus diesen Gründen, sollte zu Beginn des Projekts bzw. vor dem Aufbau des Netzwerks Zeit eingeplant werden, die für die Einarbeitung und Suche der geeigneten Hardware und deren Zusammenspiel mit der Software genutzt wird. Ist das Sensornetzwerk erst einmal eingerichtet, kann dieses mit weiteren Sensoren oder Aktoren beliebig erweitert werden.

Daniel, Werkstudent Elektrotechnik und Softwareentwicklung generic.de AG

Gastbeitrag von Daniel Waschto