{"id":295,"date":"2013-02-17T23:04:28","date_gmt":"2013-02-17T21:04:28","guid":{"rendered":"http:\/\/marko-seifert.de\/blog\/?p=295"},"modified":"2020-01-15T12:23:07","modified_gmt":"2020-01-15T10:23:07","slug":"teil-2-das-internet-der-dinge-vernetzung","status":"publish","type":"post","link":"http:\/\/marko-seifert.de\/blog\/?p=295","title":{"rendered":"Teil 2: Das Internet der Dinge &#8211; Vernetzung"},"content":{"rendered":"<h1>Ein Experiment mit Arduino, MQTT, Apache ActiveMQ und Apache Camel<\/h1>\n<p>Im <a href=\"http:\/\/marko-seifert.de\/blog\/?p=264\">ersten Teil des Blogs<\/a> wurde die Hardware und die Infrastruktur zu dem Experiment vorgestellt. In diesem Teil steht die Vernetzung im Vordergrund. Apache ActiveMQ wird f\u00fcr MQTT konfiguriert und die Arduino-Software Home Gateway beschrieben.<\/p>\n<p><!--more--><\/p>\n<h2>Apache ActiveMQ<\/h2>\n<p>Der MessageBroker Apache Active MQ kann unter der URL: <a href=\"http:\/\/activemq.apache.org\/\">http:\/\/activemq.apache.org\/<\/a>\u00a0heruntergeladen werden. Die Konfiguration f\u00fcr das Protokoll MQTT ist <a href=\"http:\/\/activemq.apache.org\/mqtt.html\">hier<\/a> beschrieben.<\/p>\n<p><em>apache-activemq-5.7.0\/conf\/activemq.xml<\/em><\/p>\n<pre>&lt;transportConnectors&gt;\r\n   &lt;transportConnector name=\"mqtt\" uri=\"mqtt:\/\/localhost:1883\"\/&gt;\r\n&lt;\/transportConnectors&gt;<\/pre>\n<p>Gestartet wird der Broker:<\/p>\n<pre>cd apache-activemq-5.7.0\/bin\/\r\nWindows: \r\nactivemq.bat \r\nLinux:\r\n.\/activemq start<\/pre>\n<p>(Hinweis: ActiveMQ ben\u00f6tigt eine aktuelle Java Runtime)<\/p>\n<p>Wenn der Broker erfolgreich gestartet werden konnte, sieht das in etwas so aus:<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/console.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-356\" title=\"console\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/console-300x155.png\" alt=\"\" width=\"300\" height=\"155\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/console-300x155.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/console-500x258.png 500w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/console.png 934w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u00dcber die URL (<a href=\"http:\/\/localhost:8161\/admin\/\">http:\/\/localhost:8161\/admin\/<\/a>) kann die Funktion \u00fcberpr\u00fcft werden<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/web.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-360\" title=\"web\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/web.png\" alt=\"\" width=\"874\" height=\"562\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/web.png 874w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/web-300x192.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/web-466x300.png 466w\" sizes=\"auto, (max-width: 874px) 100vw, 874px\" \/><\/a><\/p>\n<h2><span style=\"color: #000000; font-weight: bold;\">Home-Gateway<\/span><\/h2>\n<p>Das Arduino-Board und die drauf installierte Software stellt das Home-Gateway dar. Digitale oder analoge Signale der Sensoren werden dar\u00fcber an das Messaging angebunden. Auch die Steuernachrichten f\u00fcr die Aktoren werden in digitale Signale \u00fcbersetzt. Die Grundlage daf\u00fcr stellt die <a href=\"http:\/\/knolleary.net\/arduino-client-for-mqtt\/\">Arduino MQTT Bibliothek (PubSubClient) von Nicholas O&#8217;Leary<\/a>\u00a0dar.<\/p>\n<p>Der Sourcecode kann als Eclipse-Projekt bei <a href=\"https:\/\/github.com\/msedd\/HomeGateway\">GITHUB<\/a> heruntergeladen werden und ist folgenderma\u00dfen aufgebaut.<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/HomeGateway.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-362\" title=\"HomeGateway\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/HomeGateway.png\" alt=\"\" width=\"847\" height=\"760\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/HomeGateway.png 847w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/HomeGateway-300x269.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/HomeGateway-334x300.png 334w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/a><\/p>\n<p><strong><em>Main<\/em><\/strong>-Klasse<br \/>\nArduino-Klasse mit den Methoden\u00a0<em>setup()<\/em>\u00a0und\u00a0<em>loop()<\/em>. In der\u00a0<em>main<\/em>-Klasse wird die Klasse\u00a0<em>HomeGateway\u00a0<\/em>instanziiert. Auch befindet sich in der Klasse die Methode \u00a0<em>onMessageCallBack, <\/em>welche von der MQTT-Bibliothek aufgerufen wird, wenn Nachrichten f\u00fcr angemeldete Kan\u00e4le vorliegen.<\/p>\n<p><strong><em>HomeGateway<\/em><\/strong><br \/>\nDie Klasse <em>HomeGateway<\/em> kapselt die Logik. Sie erzeugt den <em>DeviceManager<\/em>, alle Sensoren und Aktoren, registriert diese beim <em>DeviceManager<\/em> und delegiert\u00a0Nachrichten dahin. Die Klasse implementiert das Interface\u00a0IEventHandler und empf\u00e4ngt mit der Methode <em>#handleEvent(int deviceID, int value)<\/em> Status\u00e4nderungen der Sensoren und schreibt diese per MQTT in den entsprechenden Nachrichtenkanal des Brokers.<\/p>\n<p><em><strong>DeviceManager<\/strong><\/em><br \/>\nDer <em>DeviceManager<\/em> verwaltet alle Ger\u00e4te (Aktoren und Sensoren). \u00dcber die Methode <em>#onLoop()<\/em> werden Status\u00fcberg\u00e4nge aller Sensoren \u00fcberpr\u00fcft. Mit der Methode #setValue(int deviceID, int value) werden die Aktoren beschrieben.<\/p>\n<h2>\u00a0System starten<\/h2>\n<p>Als erster Schritt muss das Netzwerk aufgebaut und anschlie\u00dfen der MessageBroker gestartet werden. Wenn jetzt das Programm auf dem Arduino installiert wird, sieht der erfolgreiche Verbindungaufbau in der seriellen Konsole folgenderma\u00dfen aus:<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/terminal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-389\" title=\"terminal\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/terminal.png\" alt=\"\" width=\"424\" height=\"378\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/terminal.png 424w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/terminal-300x267.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/terminal-336x300.png 336w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><\/a><\/p>\n<p>Auch in der Admin-Weboberfl\u00e4che des Brokers kann man sich die Verbindung anzeigen lassen:<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/connection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-390\" title=\"connection\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/connection.png\" alt=\"\" width=\"872\" height=\"548\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/connection.png 872w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/connection-300x188.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/connection-477x300.png 477w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\" \/><\/a><\/p>\n<p>Die Funktion kann man auch mit der Oberfl\u00e4che testen. Dazu w\u00e4hlt man unter Topics den Kanal\u00a0<em>actor-topic-out<\/em> aus sendet die Nachricht <em>[1,1]<\/em>. Damit sollte die erste LED (<em>DeviceID=1<\/em>) angeschalten werden. Mit <em>[1,0]<\/em> wird die LED ausgeschalten.<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/sendmessage.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-388\" title=\"sendmessage\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/sendmessage.png\" alt=\"\" width=\"646\" height=\"445\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/sendmessage.png 646w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/sendmessage-300x206.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/sendmessage-435x300.png 435w\" sizes=\"auto, (max-width: 646px) 100vw, 646px\" \/><\/a><\/p>\n<h2>Ausblick<\/h2>\n<p>Im <a href=\"http:\/\/marko-seifert.de\/blog\/?p=371\">dritten Teil des Blogs<\/a> wird die zentrale Steuerlogik (HomeControl) vorgestellt, welche \u00fcber das Camel-Framework das intelligente Routing der Nachrichten und die fachliche Logik enth\u00e4lt.<\/p>\n<h2>Links<\/h2>\n<ul>\n<li><a href=\"http:\/\/www.redbooks.ibm.com\/redbooks\/pdfs\/sg248054.pdf\">Building Smarter Planet Solutions with MQTT and IBM WebSphere MQ Telemetry<\/a><\/li>\n<li><a href=\"http:\/\/www.redbooks.ibm.com\/redpapers\/pdfs\/redp4929.pdf\">MQTT and Arduino Devices<\/a><\/li>\n<li><a href=\"http:\/\/knolleary.net\/arduino-client-for-mqtt\/\">Arduino Client for MQTT<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/msedd\/HomeGateway\">HomeGateway Souce Code<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/msedd\/HomeControl\">HomeControl Source Code<\/a><\/li>\n<li>JavaMagazin 01\/2013, Push Notication f\u00fcr Android mit MQTT, Androiden im Internet der Dinge<\/li>\n<li><a title=\"Teil 1: Das Internet der Dinge - Infrastruktur und Ger\u00e4te\" href=\"http:\/\/marko-seifert.de\/blog\/?p=264\">Teil 1: Das Internet der Dinge &#8211; Infrastruktur und Ger\u00e4te<\/a><\/li>\n<li><a href=\"http:\/\/marko-seifert.de\/blog\/?p=371\">Teil 3: Das Internet der Dinge &#8211; Logik<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>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\u00fcr MQTT konfiguriert und die Arduino-Software Home Gateway beschrieben.<\/p>\n","protected":false},"author":1,"featured_media":360,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,11,172,4,12],"tags":[59,58,161,60,57,127,128,103,56,55],"class_list":["post-295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-development","category-iot","category-java","category-microcontroller","tag-apache-activemq","tag-apache-camel","tag-arduino","tag-broker","tag-eai","tag-internet-der-dinge","tag-internet-of-things","tag-m2m","tag-messaging","tag-mqtt"],"_links":{"self":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=295"}],"version-history":[{"count":44,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/295\/revisions"}],"predecessor-version":[{"id":386,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/295\/revisions\/386"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/media\/360"}],"wp:attachment":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=295"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}