Durch die Vielzahl offener Hardwareplatformen ist es heutzutage ein Leichtes, eigene Geräte für Anwendungen im Internet der Dinge zu bauen. Die meisten Gadgets haben mit einem Arduino- oder Raspberry Pi-Prototyp begonnen, bevor sie eigene Geräte fertigen ließen. Genauso einfach wie das Erstellen von Hardware-Prototypen ist das Bauen einer eigenen IoT Cloud Platform für die Kommunikation mit den Geräten und der Darstellung der verarbeiteten Daten für den Endbenutzer.
In diesem Power-Workshop werden dies alle Teilnehmer selbst ausprobieren können, da es das Ziel ist, eine Platform zu bauen, die Sensordaten empfangen, diese persistieren und für die Anzeige im Webbrowser aufbereiten kann. Dabei sollen sowohl
Live-Daten von den Sensoren, als auch historische Daten über verschiedene gängige IoT-Protokolle im Webbrowser ankommen. Der Workshop besteht aus einer kurzen Einführung in die Thematik und einer möglichen Architektur einer IoT-Cloud, gefolgt von einem praktischen Teil. Der zweite Teil stützt sich sehr stark auf Java-Technologien von daher wäre es wünschenswert, wenn jeder Teilnehmer einen Laptop mit installiertem Java JDK dabei hätte und zumindestens Java Grundkenntnisse mitbringen würde.
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
6. 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
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
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
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 - 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
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 - 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
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
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
Eclipse Paho
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
36. 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
37. MQTT Libraries
FuseSource MQTT Client
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
38. 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
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
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
41. Ü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
42. Teil 2: MQTT Broker
HiveMQ
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
43. 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
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ä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
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
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
49. Ü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
50. Ü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
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: REST API
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
“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
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
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
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
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
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
Erster Test 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
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
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 HiveMQ Special
http://www.hivemq.com/iot-con-special-2014/
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website