pub/sub for the masses- ein einführungsworkshop in mqtt [german]

Post on 18-Jan-2015

1.238 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Sprechen Sie MQTT? Dieser Workshop zeigt, was es mit dem schlanken und leichtgewichtigen IoT Protokoll auf sich hat und warum es sich zu einem Standardprotokoll für das Internet of Things etabliert hat. Lernen Sie, warum Pub/Sub für das Internet of Things skaliert und warum HTTP nicht der Weisheit letzter Schluss für alle IoT-Kommunikation ist. Neben einigen Live-Demos sowie einer Einführung in die Funktionsweise des schlanken Publish/Subscribe-Protokolls bekommen Sie Einblick in das junge und sehr aktive Ökosystem rund um MQTT. Am Ende des Workshops wird ein Java basierter MQTT Todesstern Simulator inklusive Dashboard mit "MQTT over websocket" support entstehen.

TRANSCRIPT

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 git@github.com: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

top related