Pub/Sub for the masses- Ein Einführungsworkshop in MQTT [GERMAN]
-
Upload
dominik-obermaier -
Category
Technology
-
view
1.238 -
download
3
description
Transcript of Pub/Sub for the masses- Ein Einführungsworkshop in MQTT [GERMAN]
PUB / SUB for the masses
An Introduction to MQTT
#IotCon Workshop
2
EINFÜHRUNG - VORSTELLUNG
Christian Götz Dominik Obermaier
CEO @ dc-square CTO @ dc-square
@dobermai@goetzchr
3
EINFÜHRUNG - AGENDA
Kurze Einführung in MQTT
Überblick über das MQTT Ökosystem
MQTT Clients & Broker
Hands-on MQTT Testen und “Spielen” mit MQTT
Zusammenfassung & Ausblick Ende
Entwicklung eines MQTT Simulators Mit Java und Paho
Entwicklung einer MQTT Webapplication
MQTT über Websockets
Q&ABeginn
4
EINFÜHRUNG - LERNZIELE
Was werden wir bei diesem Workshop
lernen?
Was ist MQTT?
Warum nicht immer HTTP?
MQTT Broker?
MQTT Clients?
Wie funktioniert MQTT im Detail?Wie baue ich einen Software-Deathstar ;-)
Umsetzung verschiedener MQTT Patterns
Wie funktioniert MQTT für Webseiten?
Was ist “MQTT over Websockets?”
Wie entwickle ich einen MQTT Client in Java?
5
EINFÜHRUNG - ANWENDUNGSFALL
Unser Anwendungsfall: Deathstar SimulalatorImplementierung eines MQTT Todesstern Simulators und eines Web-Dashboards
zur Anzeige von Daten und Steuerung des Simulators
6
EINFÜHRUNG - BENÖTIGTE SOFTWARE
Benötigte Software
HiveMQ MQTT Broker
MQTT Client !
MQTT.fx mosqutto Tools
HiveMQ Web Client
IDE / Editor !
IntellIj IDEA Eclipse
Netbeans vi
Git
7
Wer benötigt noch diese Software?
EINFÜHRUNG - BENÖTIGTE SOFTWARE
Einführung in MQTTÜberblick und wichtigste
Features und Eigenschaften
9
Unzuverlässige Netzwerke
Skalierbarkeit
Bidirektionale Kommunikation
Constrained Devices
Security
Push Messaging
Herausforderungen im IoT
MQTT - HERAUSFORDERUNGEN
10
Bandbreiteneffizient
Skalierbar
Standardisiert
Offen
Datenagnostisch
Sowohl für schwache Hardware
als auch Server geeignet
Anforderungen an ein IoT Protokoll
MQTT - IOT PROTOKOLL ANFORDERUNGEN
11
Sehr verbreitet
Request / Response
Seit 1991 verbreitet
Dokumentenzentriert
HTTP?
MQTT - HTTP?
12
Viel Overhead
Polling statt Push
Kein Quality of Service
Stateless
Wie merken wir, dass ein Client offline ist?
Warum nicht immer HTTP?
MQTT - HTTP?
13
MQTT - Messaging für das Internet der Dinge
Einfach
Publish / Subscribe
Binär
Messaging Protokoll
Minimaler Overhead
Datenagnostisch
MQTT - MESSAGING FÜR DAS INTERNET DER DINGE
14
Push statt Pull
Zuverlässigkeit auch bei unzuverlässigen Netzwerken
Constrained Devices
Geringe Bandbreite und hohe Latenz
Enterprise -> Mobile
Anwendungsfälle
MQTT - ANWENDUNGSFÄLLE
15
3 QoS Stufen
Retained Messages
Topic Wildcards
Last Will and Testament
Persistent Sessions
Heartbeats
Features
MQTT - FEATURES
Was ist Publish / Subscribe Messaging?
17
Pub / Sub
MQTT - PUB / SUB
18
Hierarchisch
Wildcards (+ und #)
Queuing (QoS > 0)
Sehr Leichtgewichtig
Dynamisch
MQTT Topics
MQTT - MQTT TOPICS
Topic Matching Beispiele
20
deathstar
superlaser
greenhouse
status
usages
humidity
temp
/ /
MQTT - MQTT TOPICS
21
deathstar
superlaser
greenhouse
status
usages
humidity
temp
/ /
Deathstar superlaser status: deathstar/superlaser/status
MQTT - MQTT TOPICS
22
deathstar
superlaser
greenhouse
status
usages
humidity
temp
/ /
All Data from Greenhouse: deathstar/greenhouse/#
MQTT - MQTT TOPICS
23
deathstar
superlaser
greenhouse
status
usages
humidity
temp
/ /
All Data from deathstar: deathstar/#
MQTT - MQTT TOPICS
24
Username / Password
Payload Verschlüsselung
TLS
Client Certificate Authentication
Permissions
MQTT Security
MQTT - MQTT SECURITY
25
MQTT - Historische Entwicklung
1999 2010 2013 2014
Arlen Nipper (Arcom) & Andy Stanford-Clark (IBM)
entwickeln MQTTfreie Verfügbarkeit
OASIS TC MQTT 3.1.1 Release
MQTT - GESCHICHTE
26
1. Weitgehend abwärtskompatibel
2. Effizientere Header
3. Client-ID Längenrestriktion entfernt
4. Connect ohne Client-ID
5. Persistent Present Flag
6. Fehlercode bei Subscriptions
7. Direktes Publishen nach dem Verbinden
8. MQTT over Websockets spezifiziert
9. Alle Strings sind nun UTF-8
10.Protokollname nun offiziell “MQTT”
!
MQTT 3.1.1 Verbesserungen zu MQTT 3.1
MQTT - MQTT 3.1.1
Überblick über das MQTT Ökosystem
MQTT Clients und Broker
MQTT Client BibliothekenÜberblick über die populärsten Alternativen
Java
30
Open Source
“Referenzimplementierung”
Aktive Community
Sync und Async API
Lauffähig auf JavaME
Eclipse Paho
CLIENTS - PAHO
31
Open Source
3 API Styles
Sehr performant
Basiert auf HawtIO
Verfügbar in Maven Central
Fusesource MQTT Client
CLIENTS - FUSESOURCE
Javascript
33
Open Source
“Referenzimplementierung”
Basierend auf Websockets
Sehr gut dokumentiert
keine Abhängigkeiten
Eclipse Paho
CLIENTS - PAHO
34
Open Source
Node.js Bibliothek
Verfügbar in npm
MQTT.js
CLIENTS - MQTT.JS
C
36
Open Source
“Referenzimplementierung”
Auch für C++ verfügbar
Verfügbar für POSIX / Windowsund Embedded
Eclipse Paho
CLIENTS - PAHO
Sonstige
38
Paho (Python, Go, Lua)
M2Mqtt (C#)
ruby-mqtt (Ruby)
Arduino Client
MQTTKit (Objective C)
Mosquitto-PHP (PHP)
Sonstige Clients
CLIENTS - SONSTIGES
MQTT Client AppsÜberblick über die gängigsten Tools
40
Kommandozeilentool
Sehr viele Features
Debug Modus
Einbettbar (libmosquitto)
Mosquitto_Pub / Mosquitto_Sub
CLIENTS - MOSQUITTO
41
Betriebssystemunabhängig
Benötigt aktivierte Websockets
Publish / Subscribe
Real-Time Updates
HiveMQ Web Client
CLIENTS - HIVEMQ WEB CLIENT
42
JavaFX
Mit nativen Wrapper für allegängigen Betriebssysteme
Scripting Support
Broker Status ($SYS) Support
MQTT.fx
CLIENTS - MQTT.FX
43
MQTTLens (Browser)
MQTTSpy (JavaFX)
MyMQTT (Android)
MQTT Inspector (iOS)
viele andere
Sonstige Applikationen
CLIENTS - SONSTIGES
MQTT BrokerAlternativen für das “Herzstück” von MQTT
45
Open Source
Ideal für Constrained Devices
Unterstützt Bridging
In C implementiert
Mosquitto
BROKER - MOSQUITTO
46
Open Source
Node.js Broker
Einbettbar
Unterstützt nicht alle MQTT Features
Mosca
BROKER - MOSCA
47
Open Source
In Erlang implementiert
MQTT Adapter
Unterstützt nicht alle MQTT Features
RabbitMQ
BROKER - RABBITMQ
48
High Performance MQTT Broker
Nativer Websockets Support
Open Source Plugin System
Unterstützt Bridging
Clustering
Skaliert > 100.000 Connections
HiveMQ
BROKER - HIVEMQ
49
QoS 0 QoS 1 QoS 2 Bridge SSL Cluster WebsocketsPlugin
System
mosquitto ✔ ✔ ✔ ✔ ✔ X X ✔Mosca ✔ ✔ X ? ? ? ✔ X
RabbitMQ ✔ ✔ X X ✔ ? ? ?HiveMQ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ActiveMQ ✔ ✔ ✔ ? ? ? ✔ ?RSMB ✔ ✔ ✔ ✔ X X X ?
moquette ✔ ✔ X ? ? X X X
MQTT Broker Übersicht Source: https://github.com/mqtt/mqtt.github.io/wiki/Server%20support
BROKER - ÜBERSICHT
Hands-on MQTTTesten und “Spielen” mit
MQTT
Übung 1: Quality of Service Levels
52
Exactly once deliveryQoS 2
QoS 0 At most once delivery
QoS 1 At least once delivery
ÜBUNGEN - QOS
Showtime! Ausprobieren mit einem Tool der Wahl
Übung 2: Retained Messages
55
“Last Known Good Value”
Die letzte Nachricht wird vom Broker gespeichert
Client entscheidet ob eine Nachricht retained wird
Clients bekommen retainedmessage nach Subscribe
Retained Messages
ÜBUNGEN - RETAINED MESSAGES
Showtime! Ausprobieren mit einem Tool der Wahl
Übung 3: Last Will and Testament
58
Client definiert LWT
Broker schickt diese Nachricht nach Client “Tod”.
Echter Push
Nützlich um on / offverlässlich zu implementieren
Last Will and Testament
ÜBUNGEN - LWT
Showtime! Ausprobieren mit einem Tool der Wahl
Übung 4: Persistent Session
61
Broker speichert Client Session
Client entscheidet ob er einepersistent Session haben möchte
Queuing für QoS > 0
Persistent Session
B
Connect
Subscribedevice/+/status
device/12/status: „1“
1st
BRe-Connect
device/12/status: „1“2nd
ÜBUNGEN - PERSISTENT SESSION
Showtime! Ausprobieren mit einem Tool der Wahl
Entwicklung eines MQTT Todesstern
SimulatorsMQTT mit Java und
Eclipse Paho
64
Deathstar Simulator
Dashboard
Deathstar Simulator Implementiert in Java
Dashboard Web Application
MQTT Broker HiveMQ
DEATHSTAR - GIT
65
DEATHSTAR - GIT
66
1. Git installieren
2. Übungen können als Tag ausgechekt werden
3. Git Kommandos werden vor jederÜbung gezeigt
Git
DEATHSTAR - GIT
67
git clone [email protected]:dc-square/ ->!introduction-to-mqtt-workshop.git
Initiales Klonen des Repositories
DEATHSTAR - GIT
Todesstern?!?!?
69
DEATHSTAR - ANATOMY
70
Features
• Alarmierung wenn Eindringlingedem Reaktor zu nahe kommen
• Abfeuern des Superlasers • Fernsteuerung der Meldefrequenz • Temperaturanzeige des Imperialen
Gewächshauses • Melden des Status (Online / Offline)
DEATHSTAR - FEATURES
71
MqttClient client = new MqttClient( "tcp://localhost:1883", //URI "publisher", //Client ID new MemoryPersistence()); //Persistence !
client.connect(); !
client.publish("the/topic", //topic "message".getBytes(), //message 1, //QoS false); //retained !
client.disconnect();
DEATHSTAR - PAHO
72
MqttClient client = new MqttClient( "tcp://localhost:1883", //URI "publisher", //Client ID new MemoryPersistence()); //Persistence !
MqttConnectOptions connOptions = new MqttConnectOptions();
connOptions.setKeepAliveInterval(120); connOptions.setWill("help/I/died",
new byte[0], 2, true); connOptions.setCleanSession(false); connOptions.setUserName("username"); connOptions.setPassword("passw".toCharArray()); !
client.connect(connOptions);
DEATHSTAR - PAHO
73
final MqttClient client = new MqttClient(...); !
client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) {} !
@Override public void messageArrived(String topic,
MqttMessage message)throws Exception { System.out.println(new String(message.getPayload())); } !
@Override public void deliveryComplete(IMqttDeliveryToken token) {} }); client.connect(); !
client.subscribe("#");
DEATHSTAR - PAHO
Übung 1: Deathstar Reactor Alert
75
git checkout deathstar-start
Checkout
DEATHSTAR - GIT
Implementierung
Übung 2: Superlaser
MQTT Workshop
79
git checkout superlaser-start
Checkout
DEATHSTAR - GIT
80
Subscriben auf deathstar/superlaser/status
Laser abfeuern
Status wieder auf deaktiviert setzen
Was ist zu tun?
DEATHSTAR - SUPERLASER
Implementierung
Übung 3: Update Frequenz ändern
83
git checkout frequency-start
Checkout
DEATHSTAR - GIT
Implementierung
Übung 4: Imperial Bath Greenhouse
86
git checkout greenhouse-start
Checkout
DEATHSTAR - GIT
Implementierung
Übung 5: Statusanzeige
89
git checkout status-start
Checkout
DEATHSTAR - GIT
Implementierung
Entwicklung einer MQTT Todesstern
KontrollAppMQTT over Websockets
92
Features
• Alarmierung wenn Eindringlingedem Reaktor zu nahe kommen
• Abfeuern des Superlasers • Fernsteuerung der Meldefrequenz • Temperaturanzeige des Imperialen
Gewächshauses • Anzeigen des Status (Online / Offline)
DASHBOARD - FEATURES
Demonstration
94
MQTT Over Websockets
DASHBOARD - WEBSOCKETS
Übung 1: Deathstar Reactor Alert
96
git checkout db-start
Checkout
DASHBOARD - GIT
Implementierung
Übung 2: Superlaser
99
git checkout db-superlaser-start
Checkout
DASHBOARD - GIT
Implementierung
Übung 3: Imperial Greenhouse
102
git checkout db-greenhouse-start
Checkout
DASHBOARD - GIT
Implementierung
Übung 4: Update Frequenz ändern
105
git checkout db-frequency-start
Checkout
DASHBOARD - GIT
Implementierung
Übung 5: Statusanzeige
108
git checkout db-status-start
Checkout
DASHBOARD - GIT
Implementierung
110http://www.hivemq.com/iot-con-special-2014/
HIVEMQ - PAY-AS-YOU-GO
Q & A
Danke!@dobermai
@goetzchr
113
OUR TEAM - HELLO YOU!
Credits (all Images under Creative Commons)
‣ “The Stormtrooper” by leg0fenris: https://flic.kr/p/9beh6M ‣ “Stormtroopers Training: Theory” by Pedro Vezini: https://flic.kr/p/9iCMCB ‣ “Impending Doom (Explored)” by Pascal: https://flic.kr/p/8sjHyA ‣ “Is this Jabba the Hut's son?” by Kristina Alexanderson: https://flic.kr/p/9WDcSx ‣ “#135/366” by Robert McGoldrick: https://flic.kr/p/bXKkBG ‣ “Old droids” by stavos: https://flic.kr/p/jfYxPA ‣ “#23/366 The Plan” by Robert McGoldrick: https://flic.kr/p/bhgZbx ‣ “Day 112” by Pascal: https://flic.kr/p/7jbBvN ‣ “New Navcom” by Jason Ternus: https://flic.kr/p/5zkmHe ‣ “Got the Superman Cape... Let's do this!” by Brian Neudorff: https://flic.kr/p/jmowHw ‣ “"..And The Nominees Are…”" by Predro Vezini: https://flic.kr/p/8wFkyN
114
OUR TEAM - HELLO YOU!
Credits II (all Images under Creative Commons)
‣ “Hardcore Stormies Hit The Gym” by W_Minshull: https://flic.kr/p/9pbzs7 ‣ “#145/366” by Robert McGoldrick: https://flic.kr/p/c4zqAJ ‣ “Rocking Hard” by W_Minshull: https://flic.kr/p/dB13LP ‣ “Weightlifting” by 713 Avenue: https://flic.kr/p/5cdK3z ‣ “Kaos - Chaos paiting (ii)” by Kristina Alexanderson: https://flic.kr/p/ajcZoo ‣ “Pole Vault” by 713 Avenue: https://flic.kr/p/5eAzQi ‣ “T as in teaching Tech” by Kristina Alexanderson: https://flic.kr/p/cyAA8d ‣ “Escaping the Death Star” by Paulo Valdivieso: https://flic.kr/p/eHQ9kr ‣ “Death Star Prototype”: http://starwars.wikia.com/wiki/File:DSprototype_egvv.jpg ‣ “Luke Skywalker flying his X-Wing, getting ready to blow up the Death Star” by Fredrik Perman: https://flic.kr/p/c3qivy
115
OUR TEAM - HELLO YOU!
Credits III (all Images under Creative Commons)
‣ “move to the new deathstar” by Nerd herdr: https://flic.kr/p/oqxYue ‣ “I think it is time we demonstrated the full power of this station” by Fanboy30: https://flic.kr/p/5YYbLK ‣ “Stromtrooper's clone robots” by Jay: https://flic.kr/p/b3mvcX ‣ “Hot Tub” by W_Minshull: https://flic.kr/p/9nMWxp ‣ “Searching for Droids” by Guy Streatfeild: https://flic.kr/p/bAvbWW ‣ “Stormpainter” by Pedro Vezini”: https://flic.kr/p/9SrKQU ‣ “Let The Wookie Hug” by Pedro Vezini: https://flic.kr/p/8ukTZe ‣ “Daisy Squad” by Stéfan: https://flic.kr/p/bD6ANy ‣ “Enjoying the sunset” by Kristina Alexanderson: https://flic.kr/p/avNV2Q