Upload
christian-goetz
View
247
Download
2
Tags:
Embed Size (px)
DESCRIPTION
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.
Citation preview
Christian Götz & Dominik Obermaier | dc-square
!
!
Bau deine eigene IoT Cloud
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
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
HiveMQ IoT Beratung
V
Workshops & Schulung
s
HiveMQ Plugin Entwicklung
p
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Architektur einer IoT Plattform
Implementieren eines Prototypen
Ziel des Workshops
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
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
Entwicklungumgebung
%%
%%
%%
%
%
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
https://github.com/dc-square/build-your-own-iot-cloud-
workshop
GIT Repositoryclone
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 PlatformKomponenten
NDevice Management
Configure, Update Firmware, Monitor, Sta6s6cs
tData Storage
Datenbank mit historische Daten
(Administration & Betrieb
Web UI, Einfache Bedienung
USecurity
Transportsicherheit, Authen6fizierung, Autorisierung
JIdentity Management
User, Devices
GLive Daten von Sensoren
HTTP, MQTT, CoAP, …
yIoT Cloud
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
IoT Cloud PlatformKomponenten, die wir heute benutzen
NDevice Management
Configure, Update Firmware, Monitor, Sta6s6cs
tData Storage
MySQL Datenbank mit REST API
(Administration & Betrieb
Web UI, Einfache BedienungSecurity
Transportsicherheit, Authen6fizierung, Autorisierung
JIdentity Management
User, Devices
GLive Daten von Sensoren
HTTP und MQTT
yIoT Cloud
U
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Eclipse Paho, HTTP
Geräte
!
GOAL IoT Platform
Prototyp
3
TechnologienPrototyp
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
TechnologienGerä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
TechnologienHiveMQ
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
TechnologienDropwizard
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
TechnologienWebapp
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
Protokoll des
Internets
GET, POST, PUT, DELETE
Server/Client
Request/Response
HTTP
HTTPFakten
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HTTPVorteile/Nachteile
XPolling
Xnicht bidirektional
XHeader ist verbose
W Bekannt und Bewährt
XKeine Garantien
XStateless
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTTKurzü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 HistoryTimeline
Entwickelt IBM/Arccom
1999Eclipse IoT (M2M)
2013
MQTT released royalty free
2011OASIS Standard
2014
2015b
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
1iotcloud/device1
einfacher Topic
2iotcloud/device1/temp
einfacher Topic
3iotcloud/+/temp
Single Wildcard
4iotcloud/#
Multi-level Wildcard
MQTT - TopicsFeature
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
genau einmal QoS 2
zumindest einmal QoS 1
bestenfalls einmal QoS 0
Siche
rheit
, das
s die
Nachr
icht a
nkom
mt
MQTT - Quality of ServiceFeature
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT - LWTFeature
1connect
LWT Topic: iotcloud/device1/status Message: offline
Device 1 HiveMQ
2connack
ok
3publish
Message Topic: iotcloud/device1/status Message: offline
4offline
LWT Message Topic: iotcloud/device1/status Message: offline
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT - Retained MsgFeature
2publish
Message Topic: iotcloud/device1/temp Message: 23.45
Device 1 HiveMQ
1publish
Message Topic: iotcloud/device1/temp Message: 23,45
5s
Device 2 HiveMQ
1subscribe
Message Topic: iotcloud/+/temp
Ohne Retained 0-5s
Mit Retained sofort!
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT over WebsocketsFeature
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT BrokerKurzü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_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
Mosquitto ClientsPublish/Subscribe
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 + HiveMQHands-on
2
Subscribe auf Simulatorcode/0.1
Ü2
3
HiveMQ Beispielplugincode/0.2
Ü3
4
Reagieren auf einen Publishcode/0.3
Ü4
1
Ü1MQTT ausprobierencode/0.1
5
Ü5Publish in Datenbankcode/0.4
* Property File für Datenbankparameter * Alle 30s veröffentlichen wie viele
Einträge in der Datenbank sind
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 1MQTT 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
0.1
Version
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 2Simulator benutzen und Daten von Gerät 2 empfangen
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 Herausfinden auf welchem Topic Gerät 2 schickt
Simulator starten simulator in Java IDE öffnen Ausführen von DeviceSimulator0.1
Version
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 SystemHands-on
Inject everything!Steigert die Testbarkeit!
Callback bekannt machenCallback muss hier registriert werden, ansonsten wird er nicht ausgeführt
Don’t block in a Plugin. Never.Andere Threads benutzen
Apache Configuration SupportEinfach Config Files erstellen und
automa6sch nachladen
Dependency Injection
Callback Registry
Configuration Files
Don’t block
Plugin System
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
MQTT Lowlevel
Plugin CallbacksEinhängen von benutzerdefinierter Logik
Broker Events
Others
MQTT Message
Security1
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 • Vorraussetzung um entwickeln zu können
• Maven Plugin • Plugin mit HiveMQ starten • Debuggen im Server/Client Modus
• Assembly Plugin • Erstellung eines auslieferbaren Archiv
• JavaDoc
Plugin EntwicklungTools für den Entwickler
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
HiveMQ MQTT Broker
TechnologienHiveMQ
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 3Plugin mit HiveMQ starten
STEPS
hivemq-‐pluginhivemq-plugin in Java IDE öffnen
HiveMQ starten HiveMQ mit Plugin über Maven package starten Profil RunWithHiveMQ aktivieren
HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen
0.2
Version
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 4Benutzerdefinierte Logik für Publish
STEPS
hivemq-‐pluginhivemq-plugin in Java IDE öffnen
HiveMQ starten HiveMQ mit Plugin über Maven package starten Profil RunWithHiveMQ aktivieren
HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen
0.3
Version
OnPublish Ausgabe auf der Console von ClientId, Topic und Nachricht
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 5Schreiben in die Datenbank
STEPS
hivemq-‐pluginhivemq-plugin in Java IDE öffnen
HiveMQ starten HiveMQ mit Plugin über Maven package starten Profil RunWithHiveMQ aktivieren
HiveMQ Pfad Ordner von HiveMQ in pom.xml setzen
0.4
Version
OnPublish ClientId und Payload in Datenbank schreiben
OnStart Datenbankverbindung aufbauen
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
• Connection Pool für Datenbankverbindung • JDBC in extra Thread • ORM-Framework einsetzen • Authentifizierung und Autorisierung der Clients • Transportverschlüsselung über TLS
VerbesserungenHiveMQ Plugin
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
TechnologienDropwizard
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 RessourcenIoTCloud
GET/sensor-data Alle Werte
POST /sensor-data/{device1}Aktueller Wert
GET/sensor-data/{device1} Alle Werte des jeweiligen Geräts parameterisiert
Format: JSON
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
DropwizardKurzü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
Jersey
Technologien
JacksonHTTP REST JSON
powered bymetrics
Dropwizard
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Getting StartedDropwizard
Configuration yaml
+ class
Ressourcen classes
Starten server config.yml
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 6Erstes Dropwizard Projekt
STEPS
Projekt öffnenrest-api in Java IDE öffnen
Projekt ausführen Run Configuration IoTCloudApplication server iotcloud.yml
0.5
Version
HelloWorld HelloWorld Ressource im Webbrowser aufrufen
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 7GET /sensor-data
STEPS
Projekt öffnenrest-api in Java IDE öffnen
Datenbank Datenbank anlegen mit create.sql Beispieldaten importieren exmple-data.sql
0.6
Version
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 8JDBI statt JDBC
STEPS
Projekt öffnenrest-api in Java IDE öffnen
KonfiguraMon Datenbankparameter in iotcloud.yml
0.6
Version
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
• Caching einbauen • Datenbankverbindung mit ConnectionPool • ORM Framework einsetzen (JDBI, Hibernate) • Authentifizierung, Autorisierung • Mehrere Ressourcen • Transportverschlüsselung mit TLS
VerbesserungenHiveMQ Plugin
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
WebUIHiveMQ Plugin
Live Daten über MQTT
Historische Daten über REST
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Übung 9WebUI Ausliefern
STEPS
Projekt öffnenrest-api in Java IDE öffnen
Assetbundle Assetbundle konfigurieren
0.7
Version
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 PlatformKomponenten
NDevice Management
Configure, Update Firmware, Monitor, Sta6s6cs
tData Storage
Datenbank mit historische Daten
(Administration & Betrieb
Web UI, Einfache Bedienung
USecurity
Transportsicherheit, Authen6fizierung, Autorisierung
JIdentity Management
User, Devices
GLive Daten von Sensoren
HTTP, MQTT, CoAP, …
yIoT 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
Welche Herausforderungen sind noch zu lösen?
SecurityAuthen6fizierung, Autorisierung
Mehr ProtokolleCoAP, XMPP, …
Device ManagementÜberwachen der Geräte
Skalierbarkeit, Verfügbarkeit
HiveMQ und Dropwizard sind skalierbar
Christian Götz/Dominik Obermaier - Bau dir deine eigene IoT Cloud github / mail / website
Christian Götz / Dominik Obermaier - Bau dir deine eigene IoT 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/