Christian Götz & Dominik Obermaier | dc-square 
! 
! 
Bau deine eigene IoT Cloud
Wer sind wir? 
CHRISTIAN GÖTZ 
@goetzchr 
DOMINIK OBERMAIER 
@dobermai 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
dc-square 
V 
p 
HiveMQ IoT Beratung 
s 
Workshops & Schulung 
HiveMQ Plugin Entwicklung 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Ziel des Workshops 
Architektur einer IoT Plattform 
Implementieren eines Prototypen 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Endergebnis 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Entwicklungumgebung 
Was jeder installiert haben sollte 
% 
• Java JDK 7 
• Java IDE (IntelliJ, Eclipse, Netbeans, vi, …) 
• GIT 
• Maven 
• HiveMQ 2.0.2 
• MySQL Datenbank 
• MySQL Datenbankviewer 
• Aktueller Webbrowser 
% 
% 
% 
% 
% 
% 
% 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
GIT Repository 
clone 
https://github.com/dc-square/ 
build-your-own-iot-cloud-workshop 
oder 
USB-Stick 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
IoT Cloud Platform 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Internet der Dinge 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Technologie die Geräte über Kabel 
oder Drahtlos vernetzt 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
IoT Cloud Platform 
Komponenten 
Data Storage 
Datenbank mit historische Daten 
N Device Management 
Configure, Update Firmware, 
Monitor, Sta6s6cs 
t 
( 
Administration & Betrieb 
Web UI, Einfache Bedienung 
U 
G Live Daten von Sensoren 
J 
HTTP, MQTT, CoAP, … 
Identity Management 
User, Devices 
Security 
Transportsicherheit, Authen6fizierung, 
Autorisierung 
y 
IoT Cloud 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
IoT Cloud Platform 
Komponenten, die wir heute benutzen 
Data Storage 
MySQL Datenbank mit REST API 
N Device Management 
Configure, Update Firmware, 
Monitor, Sta6s6cs 
t 
( 
Administration & Betrieb 
Web UI, Einfache Bedienung 
G Live Daten von Sensoren 
J 
HTTP und MQTT 
Identity Management 
User, Devices 
Security 
Transportsicherheit, Authen6fizierung, 
Autorisierung 
y 
IoT Cloud 
U 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Eclipse Paho, 
HTTP 
Geräte 
3 
! 
GOAL 
IoT Platform 
Prototyp 
Technologien 
Prototyp 
HiveMQ 
MQTT Broker 
Dropwizard 
REST API 
HTML/JS 
Web App 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Eclipse Paho, 
HTTP 
Geräte 
Technologien 
Geräte 
Wetterstationen liefern Live Daten per Push (MQTT) 
➡ Simula6on der WeNersta6onen 
mit Eclipse Paho 
manche Geräte liefern Daten per HTTP 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HiveMQ 
MQTT Broker 
Technologien 
HiveMQ 
Austausch von Daten zwischen Geräten 
Persistieren der Daten in die Datenbank 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Dropwizard 
REST API 
Technologien 
Dropwizard 
Historische Daten zur Verfügung stellen 
eingehende POST Requests an HiveMQ weiterleiten 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HTML/JS 
Web App 
Technologien 
Webapp 
Anzeige von Live Daten über MQTT 
Anzeige von historischen Daten über REST API 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Teil 1: Geräte 
MQTT, HTTP 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HTTP 
Protokoll 
des 
Internets 
GET, POST, 
PUT, DELETE 
Request/ 
Response 
Server/ 
Client 
Fakten 
HTTP 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HTTP 
Vorteile/Nachteile 
W Bekannt und Bewährt 
Polling X 
nicht bidirektional X 
Header ist verbose X 
Keine Garantien X 
Stateless X 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT 
Kurzübersicht 
Einfach 
Connect, Publish, Subscribe, Unsubscribe, 
Disconnect 
Messaging Protokoll 
Austausch von Nachrichten, teilweise Queuing 
basiert auf TCP 
Port 1883 
Publish/Subscribe 
Clients abonnieren auf Topics auf denen andere 
Clients Nachrichten veröffentlichen 
Minimaler Overhead 
teilweise nur 2 Byte 
Ausgelegt für unstabile Netze 
individuelle Garan6en möglich für jede Nachricht 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT History 
Timeline 
1999 
Entwickelt 
IBM/Arccom 
2013 
Eclipse IoT (M2M) 
2011 
MQTT released 
royalty free 
b 
2015 
2014 
OASIS Standard 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT - Topics 
1 
iotcloud/device1 
Feature 
einfacher Topic 
2 
iotcloud/device1/temp 
einfacher Topic 
3 
iotcloud/+/temp 
Single Wildcard 
4 
iotcloud/# 
Multi-level Wildcard 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT - Quality of Service 
genau einmal QoS 2 
Feature 
zumindest einmal QoS 1 
Sicherheit, dass die Nachricht ankommt 
bestenfalls einmal QoS 0 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT - LWT 
Feature 
Device 1 HiveMQ 
1 
connect 
LWT 
Topic: iotcloud/device1/status 
Message: offline 
2 
connack 
ok 
3 
publish 
Message 
Topic: iotcloud/device1/status 
Message: offline 
4 
offline 
LWT Message 
Topic: iotcloud/device1/status 
Message: offline 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT - Retained Msg 
Feature 
Device 1 HiveMQ 
1 
publish 
Device 2 HiveMQ 
1 
subscribe 
2 
publish 
Message 
Topic: iotcloud/device1/temp 
Message: 23,45 
Message 
Topic: iotcloud/+/temp 
Ohne Retained 0-5s 
Message 
Topic: iotcloud/device1/temp 
Message: 23.45 
5s 
Mit Retained sofort! 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT over Websockets 
Feature 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT Broker 
Kurzübersicht 
Herzstück von MQTT 
Versenden der Nachrichten an Clients 
Benutzt nur Topics 
Topics sind dynamisch 
Benutzerdefinierte Funktionen 
MQTT Broker 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT GUI Tools 
MQTT.fx 0.0.7 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
http://www.jensd.de/wordpress/?p=1423 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT GUI Tools 
MQTT spy 0.0.6 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Timeline 
https://code.google.com/p/mqtt-spy/ 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT CMD Tools 
mosquitto_pub/_sub 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Mosquitto Clients 
Publish/Subscribe 
$ mosquitto_pub -h broker.mqttdashboard.com 
-t iotcloud/test -m “test” -q 1 
! 
http://mosquitto.org/man/mosquitto_pub-1.html 
— 
! 
$ mosquitto_sub -h broker.mqttdashboard.com 
-t iotcloud/test 
! 
http://mosquitto.org/man/mosquitto_sub-1.html 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT Libraries 
Eclipse Paho 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Open Source 
“Reference Implementation” 
Many languages: Java, Javascript, 
Lua, C, C++, Go, Python 
Active Community 
JS Library uses MQTT over 
Websockets 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT Libraries 
FuseSource MQTT Client 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Open Source 
3 API Styles 
Automatic Reconnect 
Maven Central 
Less active Community 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT + HiveMQ 
Hands-on 
Ü3 
Ü2 
Ü1 MQTT ausprobieren 
Datenbankparameter * Alle 30s veröffentlichen wie viele 
2 
HiveMQ Beispielplugin 
code/0.2 
Subscribe auf Simulator 
code/0.1 
3 
Ü4 
Ü5 
4 
Reagieren auf einen Publish 
code/0.3 
1 
code/0.1 
Einträge in der Datenbank sind 
5 
Publish in Datenbank 
code/0.4 
* Property File für 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 1 
MQTT ausprobieren 
STEPS 
HiveMQ starten Unix: /bin/run.sh 
Win: run.bat starten 
Websocket Client mqtt-websocket-client/index.html öffnen 
Verbinden Verbinden 
Erfolgreich wenn HiveMQ ClientId ausgibt 
Subscribe Subscribe zu einfachem Topic 
Subscribe zu Wildcard Topic 
Publish Publish von Nachrichten auf 
verschiedenen Topics 
Version 
0.1 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 2 
Simulator benutzen und Daten von Gerät 2 empfangen 
STEPS 
HiveMQ starten Unix: /bin/run.sh 
Win: run.bat starten 
Simulator starten simulator in Java IDE öffnen 
Version 
Ausführen 0.1 von DeviceSimulator 
Websocket Client mqtt-websocket-client/index.html öffnen 
Verbinden Verbinden 
Erfolgreich wenn HiveMQ ClientId ausgibt 
Subscribe Herausfinden auf welchem Topic Gerät 2 schickt 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Teil 2: MQTT Broker 
HiveMQ 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT Broker 
Hochskalierbarer MQTT Broker 
> 100.000 Verbindungen 
Offenes Plugin System 
Einhängen von benutzerdefinierter Logik, Integra6on 
in bestehende Systeme 
Cloud ready 
Amazon Web Service, Microso` Azure, 
Own Datacenter 
Implementiert den MQTT Standard 
Gleichzei6ges Verbinden von MQTT Clients der 
Version 3.1.1 und 3.1 möglich 
Sicherheit 
TLS Verschlüsselung, X.509 Zer6fikate, 
Benutzerdefinierte und feingranulare 
Authen6fizierung und Autorisierung 
Einfache Benutzung und Betrieb 
$SYS Topics, Ausführliche Dokumenta6on, 
Monitoring über JMX und Graphite 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Plugin System 
Hands-on 
Inject everything! 
Steigert die Testbarkeit! 
Callback bekannt machen 
Callback muss hier registriert 
werden, ansonsten wird er nicht 
ausgeführt 
Don’t block in a Plugin. Never. 
Andere Threads benutzen 
Apache Configuration Support 
Einfach Config Files erstellen und 
automa6sch nachladen 
Dependency 
Injection 
Callback 
Registry 
Don’t block 
Configuration 
Files 
Plugin 
System 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Plugin Callbacks 
Einhängen von benutzerdefinierter Logik 
Security 
MQTT Message 
Others 
Broker Events 
MQTT Lowlevel 
1 
2 
3 
4 
5 
Client Connect, Client Publish/Subscribe, 
After Login, 
Connect, Publish, Subscribe, 
Unsubscribe, Disconnect 
Scheduled 
Start, Stop, Statistiken aktualisiert 
PubAck, PubRel, PubComb, Ping, … 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
• HiveMQ SPI 
Plugin Entwicklung 
Tools für den Entwickler 
• Vorraussetzung um entwickeln zu können 
• Maven Plugin 
• Plugin mit HiveMQ starten 
• Debuggen im Server/Client Modus 
• Assembly Plugin 
• Erstellung eines auslieferbaren Archiv 
• JavaDoc 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HiveMQ 
MQTT Broker 
Technologien 
HiveMQ 
Austausch von Daten zwischen Geräten 
Persistieren der Daten in die Datenbank 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 3 
Plugin mit HiveMQ starten 
STEPS 
hivemq-­‐plugin hivemq-plugin in Java IDE öffnen 
HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen 
HiveMQ starten HiveMQ mit Plugin über Maven package starten 
Profil RunWithHiveMQ aktivieren 
Version 
0.2 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 4 
Benutzerdefinierte Logik für Publish 
STEPS 
hivemq-­‐plugin hivemq-plugin in Java IDE öffnen 
HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen 
OnPublish Ausgabe auf der Console von ClientId, Topic und 
Nachricht 
HiveMQ starten HiveMQ mit Plugin über Maven package starten 
Profil RunWithHiveMQ aktivieren 
Version 
0.3 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 5 
Schreiben in die Datenbank 
STEPS 
hivemq-­‐plugin hivemq-plugin in Java IDE öffnen 
HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen 
OnStart Datenbankverbindung aufbauen 
OnPublish ClientId und Payload in Datenbank schreiben 
HiveMQ starten HiveMQ mit Plugin über Maven package starten 
Profil RunWithHiveMQ aktivieren 
Version 
0.4 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Verbesserungen 
HiveMQ Plugin 
• Connection Pool für Datenbankverbindung 
• JDBC in extra Thread 
• ORM-Framework einsetzen 
• Authentifizierung und Autorisierung der Clients 
• Transportverschlüsselung über TLS 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Teil 3: REST API 
Dropwizard 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Dropwizard 
REST API 
Technologien 
Dropwizard 
Historische Daten zur Verfügung stellen 
eingehende POST Requests an HiveMQ weiterleiten 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
REST Ressourcen 
IoTCloud 
/sensor-data GET Alle Werte 
Aktueller Wert POST /sensor-data/{device1} 
/sensor-data/{device1} GET Alle Werte des jeweiligen Geräts 
parameterisiert 
Format: JSON 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Dropwizard 
Kurzübersicht 
“Produktiv einsatzbereite, hochskalierbare REST API” 
Ausgerichtet auf den einfachen Betrieb 
Modulbasiert mit vielen mitgelieferten Modulen 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Technologien 
Dropwizard 
Jersey 
Jackson 
HTTP REST JSON 
powered by 
metrics 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Getting Started 
Dropwizard 
Configuration 
yaml 
+ class 
Ressourcen 
classes 
Starten 
server config.yml 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 6 
Erstes Dropwizard Projekt 
STEPS 
Projekt öffnen rest-api in Java IDE öffnen 
Projekt ausführen Run Configuration 
IoTCloudApplication server iotcloud.yml 
Version 
0.5 
HelloWorld HelloWorld Ressource im Webbrowser aufrufen 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 7 
GET /sensor-data 
STEPS 
Projekt öffnen rest-api in Java IDE öffnen 
Datenbank Datenbank anlegen mit create.sql 
Beispieldaten importieren exmple-data.sql 
Version 
0.6 
Vorbereiten SensorDataItem POJO anlegen 
Datenbankverbindung herstellen (JDBC) 
Ressource Daten aus Datenbank holen 
Zurückgeben einer Liste von SensorDataItems 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 8 
JDBI statt JDBC 
STEPS 
Projekt öffnen rest-api in Java IDE öffnen 
KonfiguraMon Datenbankparameter in iotcloud.yml 
Version 
0.6 
Vorbereiten JDBI initialisieren 
Mapper 
Ressource Interface DAO mit SQL Query schreiben 
Zurückgeben einer Liste von SensorDataItems 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Verbesserungen 
HiveMQ Plugin 
• Caching einbauen 
• Datenbankverbindung mit ConnectionPool 
• ORM Framework einsetzen (JDBI, Hibernate) 
• Authentifizierung, Autorisierung 
• Mehrere Ressourcen 
• Transportverschlüsselung mit TLS 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Teil4: WebUI 
Erster Test für die IoT Cloud 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
WebUI 
HiveMQ Plugin 
Live Daten über MQTT 
Historische Daten über REST 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 9 
WebUI Ausliefern 
STEPS 
Projekt öffnen rest-api in Java IDE öffnen 
Assetbundle Assetbundle konfigurieren 
Version 
0.7 
webapp webapp in asset Ordner kopieren 
Dropwizard starten und localhost:8080/asset öffnen 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Zusammenfassung 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
IoT Cloud Platform 
Komponenten 
Data Storage 
Datenbank mit historische Daten 
N Device Management 
Configure, Update Firmware, 
Monitor, Sta6s6cs 
t 
( 
Administration & Betrieb 
Web UI, Einfache Bedienung 
U 
G Live Daten von Sensoren 
J 
HTTP, MQTT, CoAP, … 
Identity Management 
User, Devices 
Security 
Transportsicherheit, Authen6fizierung, 
Autorisierung 
y 
IoT Cloud 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Ausblick 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Mehr Protokolle 
CoAP, XMPP, … 
Skalierbarkeit, 
Verfügbarkeit 
HiveMQ und Dropwizard sind 
skalierbar 
Welche Herausforderungen sind noch zu lösen? 
Security 
Authen6fizierung, 
Autorisierung 
Device Management 
Überwachen der Geräte 
Christian Götz Götz// Dominik Dominik Obermaier Obermaier - - Bau Bau dir dir deine deine eigene IoT Cloud Cloud github / mail / website
Danke! 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
IoT Con HiveMQ Special 
http://www.hivemq.com/iot-con-special-2014/ 
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website

Build your own IoT Cloud! [GER]

  • 1.
    Christian Götz &Dominik Obermaier | dc-square ! ! Bau deine eigene IoT Cloud
  • 2.
    Wer sind wir? CHRISTIAN GÖTZ @goetzchr DOMINIK OBERMAIER @dobermai Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 3.
    dc-square V p HiveMQ IoT Beratung s Workshops & Schulung HiveMQ Plugin Entwicklung Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 4.
    Ziel des Workshops Architektur einer IoT Plattform Implementieren eines Prototypen Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 5.
    Endergebnis Christian Götz/ Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 6.
    Entwicklungumgebung Was jederinstalliert haben sollte % • Java JDK 7 • Java IDE (IntelliJ, Eclipse, Netbeans, vi, …) • GIT • Maven • HiveMQ 2.0.2 • MySQL Datenbank • MySQL Datenbankviewer • Aktueller Webbrowser % % % % % % % Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 7.
    GIT Repository clone https://github.com/dc-square/ build-your-own-iot-cloud-workshop oder USB-Stick Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 8.
    IoT Cloud Platform Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 9.
    Internet der Dinge Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 10.
    Technologie die Geräteüber Kabel oder Drahtlos vernetzt Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 11.
    IoT Cloud Platform Komponenten Data Storage Datenbank mit historische Daten N Device Management Configure, Update Firmware, Monitor, Sta6s6cs t ( Administration & Betrieb Web UI, Einfache Bedienung U G Live Daten von Sensoren J HTTP, MQTT, CoAP, … Identity Management User, Devices Security Transportsicherheit, Authen6fizierung, Autorisierung y IoT Cloud Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 12.
    IoT Cloud Platform Komponenten, die wir heute benutzen Data Storage MySQL Datenbank mit REST API N Device Management Configure, Update Firmware, Monitor, Sta6s6cs t ( Administration & Betrieb Web UI, Einfache Bedienung G Live Daten von Sensoren J HTTP und MQTT Identity Management User, Devices Security Transportsicherheit, Authen6fizierung, Autorisierung y IoT Cloud U Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 13.
    Eclipse Paho, HTTP Geräte 3 ! GOAL IoT Platform Prototyp Technologien Prototyp HiveMQ MQTT Broker Dropwizard REST API HTML/JS Web App Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 14.
    Eclipse Paho, HTTP Geräte Technologien Geräte Wetterstationen liefern Live Daten per Push (MQTT) ➡ Simula6on der WeNersta6onen mit Eclipse Paho manche Geräte liefern Daten per HTTP Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 15.
    HiveMQ MQTT Broker Technologien HiveMQ Austausch von Daten zwischen Geräten Persistieren der Daten in die Datenbank Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 16.
    Dropwizard REST API Technologien Dropwizard Historische Daten zur Verfügung stellen eingehende POST Requests an HiveMQ weiterleiten Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 17.
    HTML/JS Web App Technologien Webapp Anzeige von Live Daten über MQTT Anzeige von historischen Daten über REST API Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 18.
    Teil 1: Geräte MQTT, HTTP Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 19.
    HTTP Protokoll des Internets GET, POST, PUT, DELETE Request/ Response Server/ Client Fakten HTTP Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 20.
    HTTP Vorteile/Nachteile WBekannt und Bewährt Polling X nicht bidirektional X Header ist verbose X Keine Garantien X Stateless X Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 21.
    MQTT Kurzübersicht Einfach Connect, Publish, Subscribe, Unsubscribe, Disconnect Messaging Protokoll Austausch von Nachrichten, teilweise Queuing basiert auf TCP Port 1883 Publish/Subscribe Clients abonnieren auf Topics auf denen andere Clients Nachrichten veröffentlichen Minimaler Overhead teilweise nur 2 Byte Ausgelegt für unstabile Netze individuelle Garan6en möglich für jede Nachricht Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 22.
    MQTT History Timeline 1999 Entwickelt IBM/Arccom 2013 Eclipse IoT (M2M) 2011 MQTT released royalty free b 2015 2014 OASIS Standard Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 23.
    MQTT - Topics 1 iotcloud/device1 Feature einfacher Topic 2 iotcloud/device1/temp einfacher Topic 3 iotcloud/+/temp Single Wildcard 4 iotcloud/# Multi-level Wildcard Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 24.
    MQTT - Qualityof Service genau einmal QoS 2 Feature zumindest einmal QoS 1 Sicherheit, dass die Nachricht ankommt bestenfalls einmal QoS 0 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 25.
    MQTT - LWT Feature Device 1 HiveMQ 1 connect LWT Topic: iotcloud/device1/status Message: offline 2 connack ok 3 publish Message Topic: iotcloud/device1/status Message: offline 4 offline LWT Message Topic: iotcloud/device1/status Message: offline Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 26.
    MQTT - RetainedMsg Feature Device 1 HiveMQ 1 publish Device 2 HiveMQ 1 subscribe 2 publish Message Topic: iotcloud/device1/temp Message: 23,45 Message Topic: iotcloud/+/temp Ohne Retained 0-5s Message Topic: iotcloud/device1/temp Message: 23.45 5s Mit Retained sofort! Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 27.
    MQTT over Websockets Feature Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 28.
    MQTT Broker Kurzübersicht Herzstück von MQTT Versenden der Nachrichten an Clients Benutzt nur Topics Topics sind dynamisch Benutzerdefinierte Funktionen MQTT Broker Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 29.
    MQTT GUI Tools MQTT.fx 0.0.7 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 30.
    http://www.jensd.de/wordpress/?p=1423 Christian Götz/ Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 31.
    MQTT GUI Tools MQTT spy 0.0.6 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 32.
    Timeline https://code.google.com/p/mqtt-spy/ ChristianGötz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 33.
    MQTT CMD Tools mosquitto_pub/_sub Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 34.
    Mosquitto Clients Publish/Subscribe $ mosquitto_pub -h broker.mqttdashboard.com -t iotcloud/test -m “test” -q 1 ! http://mosquitto.org/man/mosquitto_pub-1.html — ! $ mosquitto_sub -h broker.mqttdashboard.com -t iotcloud/test ! http://mosquitto.org/man/mosquitto_sub-1.html Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 35.
    MQTT Libraries EclipsePaho Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 36.
    Open Source “ReferenceImplementation” Many languages: Java, Javascript, Lua, C, C++, Go, Python Active Community JS Library uses MQTT over Websockets Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 37.
    MQTT Libraries FuseSourceMQTT Client Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 38.
    Open Source 3API Styles Automatic Reconnect Maven Central Less active Community Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 39.
    MQTT + HiveMQ Hands-on Ü3 Ü2 Ü1 MQTT ausprobieren Datenbankparameter * Alle 30s veröffentlichen wie viele 2 HiveMQ Beispielplugin code/0.2 Subscribe auf Simulator code/0.1 3 Ü4 Ü5 4 Reagieren auf einen Publish code/0.3 1 code/0.1 Einträge in der Datenbank sind 5 Publish in Datenbank code/0.4 * Property File für Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 40.
    Übung 1 MQTTausprobieren STEPS HiveMQ starten Unix: /bin/run.sh Win: run.bat starten Websocket Client mqtt-websocket-client/index.html öffnen Verbinden Verbinden Erfolgreich wenn HiveMQ ClientId ausgibt Subscribe Subscribe zu einfachem Topic Subscribe zu Wildcard Topic Publish Publish von Nachrichten auf verschiedenen Topics Version 0.1 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 41.
    Übung 2 Simulatorbenutzen und Daten von Gerät 2 empfangen STEPS HiveMQ starten Unix: /bin/run.sh Win: run.bat starten Simulator starten simulator in Java IDE öffnen Version Ausführen 0.1 von DeviceSimulator Websocket Client mqtt-websocket-client/index.html öffnen Verbinden Verbinden Erfolgreich wenn HiveMQ ClientId ausgibt Subscribe Herausfinden auf welchem Topic Gerät 2 schickt Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 42.
    Teil 2: MQTTBroker HiveMQ Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 43.
    MQTT Broker HochskalierbarerMQTT Broker > 100.000 Verbindungen Offenes Plugin System Einhängen von benutzerdefinierter Logik, Integra6on in bestehende Systeme Cloud ready Amazon Web Service, Microso` Azure, Own Datacenter Implementiert den MQTT Standard Gleichzei6ges Verbinden von MQTT Clients der Version 3.1.1 und 3.1 möglich Sicherheit TLS Verschlüsselung, X.509 Zer6fikate, Benutzerdefinierte und feingranulare Authen6fizierung und Autorisierung Einfache Benutzung und Betrieb $SYS Topics, Ausführliche Dokumenta6on, Monitoring über JMX und Graphite Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 44.
    Plugin System Hands-on Inject everything! Steigert die Testbarkeit! Callback bekannt machen Callback muss hier registriert werden, ansonsten wird er nicht ausgeführt Don’t block in a Plugin. Never. Andere Threads benutzen Apache Configuration Support Einfach Config Files erstellen und automa6sch nachladen Dependency Injection Callback Registry Don’t block Configuration Files Plugin System Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 45.
    Plugin Callbacks Einhängenvon benutzerdefinierter Logik Security MQTT Message Others Broker Events MQTT Lowlevel 1 2 3 4 5 Client Connect, Client Publish/Subscribe, After Login, Connect, Publish, Subscribe, Unsubscribe, Disconnect Scheduled Start, Stop, Statistiken aktualisiert PubAck, PubRel, PubComb, Ping, … Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 46.
    • HiveMQ SPI Plugin Entwicklung Tools für den Entwickler • Vorraussetzung um entwickeln zu können • Maven Plugin • Plugin mit HiveMQ starten • Debuggen im Server/Client Modus • Assembly Plugin • Erstellung eines auslieferbaren Archiv • JavaDoc Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 47.
    HiveMQ MQTT Broker Technologien HiveMQ Austausch von Daten zwischen Geräten Persistieren der Daten in die Datenbank Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 48.
    Übung 3 Pluginmit HiveMQ starten STEPS hivemq-­‐plugin hivemq-plugin in Java IDE öffnen HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen HiveMQ starten HiveMQ mit Plugin über Maven package starten Profil RunWithHiveMQ aktivieren Version 0.2 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 49.
    Übung 4 BenutzerdefinierteLogik für Publish STEPS hivemq-­‐plugin hivemq-plugin in Java IDE öffnen HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen OnPublish Ausgabe auf der Console von ClientId, Topic und Nachricht HiveMQ starten HiveMQ mit Plugin über Maven package starten Profil RunWithHiveMQ aktivieren Version 0.3 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 50.
    Übung 5 Schreibenin die Datenbank STEPS hivemq-­‐plugin hivemq-plugin in Java IDE öffnen HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen OnStart Datenbankverbindung aufbauen OnPublish ClientId und Payload in Datenbank schreiben HiveMQ starten HiveMQ mit Plugin über Maven package starten Profil RunWithHiveMQ aktivieren Version 0.4 Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 51.
    Verbesserungen HiveMQ Plugin • Connection Pool für Datenbankverbindung • JDBC in extra Thread • ORM-Framework einsetzen • Authentifizierung und Autorisierung der Clients • Transportverschlüsselung über TLS Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 52.
    Teil 3: RESTAPI Dropwizard Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 53.
    Dropwizard REST API Technologien Dropwizard Historische Daten zur Verfügung stellen eingehende POST Requests an HiveMQ weiterleiten Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 54.
    REST Ressourcen IoTCloud /sensor-data GET Alle Werte Aktueller Wert POST /sensor-data/{device1} /sensor-data/{device1} GET Alle Werte des jeweiligen Geräts parameterisiert Format: JSON Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 55.
    Dropwizard Kurzübersicht “Produktiveinsatzbereite, hochskalierbare REST API” Ausgerichtet auf den einfachen Betrieb Modulbasiert mit vielen mitgelieferten Modulen Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 56.
    Technologien Dropwizard Jersey Jackson HTTP REST JSON powered by metrics Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 57.
    Getting Started Dropwizard Configuration yaml + class Ressourcen classes Starten server config.yml Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 58.
    Übung 6 ErstesDropwizard Projekt STEPS Projekt öffnen rest-api in Java IDE öffnen Projekt ausführen Run Configuration IoTCloudApplication server iotcloud.yml Version 0.5 HelloWorld HelloWorld Ressource im Webbrowser aufrufen Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 59.
    Übung 7 GET/sensor-data STEPS Projekt öffnen rest-api in Java IDE öffnen Datenbank Datenbank anlegen mit create.sql Beispieldaten importieren exmple-data.sql Version 0.6 Vorbereiten SensorDataItem POJO anlegen Datenbankverbindung herstellen (JDBC) Ressource Daten aus Datenbank holen Zurückgeben einer Liste von SensorDataItems Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 60.
    Übung 8 JDBIstatt JDBC STEPS Projekt öffnen rest-api in Java IDE öffnen KonfiguraMon Datenbankparameter in iotcloud.yml Version 0.6 Vorbereiten JDBI initialisieren Mapper Ressource Interface DAO mit SQL Query schreiben Zurückgeben einer Liste von SensorDataItems Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 61.
    Verbesserungen HiveMQ Plugin • Caching einbauen • Datenbankverbindung mit ConnectionPool • ORM Framework einsetzen (JDBI, Hibernate) • Authentifizierung, Autorisierung • Mehrere Ressourcen • Transportverschlüsselung mit TLS Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 62.
    Teil4: WebUI ErsterTest für die IoT Cloud Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 63.
    WebUI HiveMQ Plugin Live Daten über MQTT Historische Daten über REST Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 64.
    Übung 9 WebUIAusliefern STEPS Projekt öffnen rest-api in Java IDE öffnen Assetbundle Assetbundle konfigurieren Version 0.7 webapp webapp in asset Ordner kopieren Dropwizard starten und localhost:8080/asset öffnen Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 65.
    Zusammenfassung Christian Götz/ Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 66.
    IoT Cloud Platform Komponenten Data Storage Datenbank mit historische Daten N Device Management Configure, Update Firmware, Monitor, Sta6s6cs t ( Administration & Betrieb Web UI, Einfache Bedienung U G Live Daten von Sensoren J HTTP, MQTT, CoAP, … Identity Management User, Devices Security Transportsicherheit, Authen6fizierung, Autorisierung y IoT Cloud Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 67.
    Ausblick Christian Götz/ Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 68.
    Mehr Protokolle CoAP,XMPP, … Skalierbarkeit, Verfügbarkeit HiveMQ und Dropwizard sind skalierbar Welche Herausforderungen sind noch zu lösen? Security Authen6fizierung, Autorisierung Device Management Überwachen der Geräte Christian Götz Götz// Dominik Dominik Obermaier Obermaier - - Bau Bau dir dir deine deine eigene IoT Cloud Cloud github / mail / website
  • 69.
    Danke! Christian Götz/ Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
  • 70.
    IoT Con HiveMQSpecial http://www.hivemq.com/iot-con-special-2014/ Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website