Build your own IoT Cloud! [GER]

Post on 15-Jan-2015

242 Views

Category:

Internet

2 Downloads

Preview:

Click to see full reader

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.

Transcript

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/

top related