Arduino, Hardware- und Softwareentwicklung, IoT, Java, Mikrocontroller
Kommentare 2

Teil 2: Das Internet der Dinge – Vernetzung

Ein Experiment mit Arduino, MQTT, Apache ActiveMQ und Apache Camel

Im ersten Teil des Blogs wurde die Hardware und die Infrastruktur zu dem Experiment vorgestellt. In diesem Teil steht die Vernetzung im Vordergrund. Apache ActiveMQ wird für MQTT konfiguriert und die Arduino-Software Home Gateway beschrieben.

Apache ActiveMQ

Der MessageBroker Apache Active MQ kann unter der URL: http://activemq.apache.org/ heruntergeladen werden. Die Konfiguration für das Protokoll MQTT ist hier beschrieben.

apache-activemq-5.7.0/conf/activemq.xml

<transportConnectors>
   <transportConnector name="mqtt" uri="mqtt://localhost:1883"/>
</transportConnectors>

Gestartet wird der Broker:

cd apache-activemq-5.7.0/bin/
Windows: 
activemq.bat 
Linux:
./activemq start

(Hinweis: ActiveMQ benötigt eine aktuelle Java Runtime)

Wenn der Broker erfolgreich gestartet werden konnte, sieht das in etwas so aus:

Über die URL (http://localhost:8161/admin/) kann die Funktion überprüft werden

Home-Gateway

Das Arduino-Board und die drauf installierte Software stellt das Home-Gateway dar. Digitale oder analoge Signale der Sensoren werden darüber an das Messaging angebunden. Auch die Steuernachrichten für die Aktoren werden in digitale Signale übersetzt. Die Grundlage dafür stellt die Arduino MQTT Bibliothek (PubSubClient) von Nicholas O’Leary dar.

Der Sourcecode kann als Eclipse-Projekt bei GITHUB heruntergeladen werden und ist folgendermaßen aufgebaut.

Main-Klasse
Arduino-Klasse mit den Methoden setup() und loop(). In der main-Klasse wird die Klasse HomeGateway instanziiert. Auch befindet sich in der Klasse die Methode  onMessageCallBack, welche von der MQTT-Bibliothek aufgerufen wird, wenn Nachrichten für angemeldete Kanäle vorliegen.

HomeGateway
Die Klasse HomeGateway kapselt die Logik. Sie erzeugt den DeviceManager, alle Sensoren und Aktoren, registriert diese beim DeviceManager und delegiert Nachrichten dahin. Die Klasse implementiert das Interface IEventHandler und empfängt mit der Methode #handleEvent(int deviceID, int value) Statusänderungen der Sensoren und schreibt diese per MQTT in den entsprechenden Nachrichtenkanal des Brokers.

DeviceManager
Der DeviceManager verwaltet alle Geräte (Aktoren und Sensoren). Über die Methode #onLoop() werden Statusübergänge aller Sensoren überprüft. Mit der Methode #setValue(int deviceID, int value) werden die Aktoren beschrieben.

 System starten

Als erster Schritt muss das Netzwerk aufgebaut und anschließen der MessageBroker gestartet werden. Wenn jetzt das Programm auf dem Arduino installiert wird, sieht der erfolgreiche Verbindungaufbau in der seriellen Konsole folgendermaßen aus:

Auch in der Admin-Weboberfläche des Brokers kann man sich die Verbindung anzeigen lassen:

Die Funktion kann man auch mit der Oberfläche testen. Dazu wählt man unter Topics den Kanal actor-topic-out aus sendet die Nachricht [1,1]. Damit sollte die erste LED (DeviceID=1) angeschalten werden. Mit [1,0] wird die LED ausgeschalten.

Ausblick

Im dritten Teil des Blogs wird die zentrale Steuerlogik (HomeControl) vorgestellt, welche über das Camel-Framework das intelligente Routing der Nachrichten und die fachliche Logik enthält.

Links

Share on FacebookShare on Google+Tweet about this on TwitterPin on Pinterest

2 Kommentare

  1. Pingback: Teil 1: Das Internet der Dinge – Infrastruktur und Geräte | TechBlog

  2. Pingback: Teil 3: Das Internet der Dinge – Logik | TechBlog

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *