137

Click here to load reader

MQTT Deep Dive Workshop [GERMAN]

Embed Size (px)

Citation preview

Page 1: MQTT Deep Dive Workshop [GERMAN]

MQTT Deep Dive

MQTT In-Depth Workshop

#buildingIoT Workshop https://flic.kr/p/orFVYi Image by Charles Chang

Page 2: MQTT Deep Dive Workshop [GERMAN]

2

EINFÜHRUNG - VORSTELLUNG

Dominik Obermaier

CTO @ dc-square

@dobermai

[email protected]

Page 3: MQTT Deep Dive Workshop [GERMAN]

3

EINFÜHRUNG - AGENDA

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

Web Application MQTT über Websockets

Q&ABeginn

Page 4: MQTT Deep Dive Workshop [GERMAN]

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?Umsetzung verschiedener MQTT Patterns

Wie funktioniert MQTT für Webseiten?

Was ist “MQTT over Websockets?”

Wie entwickle ich einen MQTT Client in Java?

Page 5: MQTT Deep Dive Workshop [GERMAN]

5

EINFÜHRUNG - ANWENDUNGSFALL

Unser Anwendungsfall: Deathstar SimulalatorImplementierung eines MQTT Todesstern Simulators und eines Web-Dashboards

zur Anzeige von Daten und Steuerung des Simulators

Page 6: MQTT Deep Dive Workshop [GERMAN]

6

EINFÜHRUNG - BENÖTIGTE SOFTWARE

Benötigte Software

HiveMQ MQTT Broker

MQTT Client

MQTT.fx mosquitto Tools

HiveMQ Web Client

IDE / Editor

IntellIj IDEA

Page 7: MQTT Deep Dive Workshop [GERMAN]

7

Wer benötigt noch diese Software?

EINFÜHRUNG - BENÖTIGTE SOFTWARE

Page 8: MQTT Deep Dive Workshop [GERMAN]

8

Useful Resources

MQTT - RESSOURCES

http://www.hivemq.com/mqtt-essentials/

http://www.hivemq.com/mqtt-security-fundamentals/

Page 9: MQTT Deep Dive Workshop [GERMAN]

9

Useful Resources

MQTT - RESOURCES

https://dzone.com/refcardz/getting-started-with-mqtt

Page 10: MQTT Deep Dive Workshop [GERMAN]

Einführung in MQTT

Überblick und wichtigste Features und Eigenschaften

Page 11: MQTT Deep Dive Workshop [GERMAN]

11

Unzuverlässige Netzwerke

Skalierbarkeit

Bidirektionale Kommunikation

Constrained Devices

Security

Push Messaging

Herausforderungen im IoT

MQTT - HERAUSFORDERUNGEN

Page 12: MQTT Deep Dive Workshop [GERMAN]

12

Bandbreiteneffizient

Skalierbar

Standardisiert

Offen

Datenagnostisch

Sowohl für schwache Hardware

als auch Server geeignet

Anforderungen an ein IoT Protokoll

MQTT - IOT PROTOKOLL ANFORDERUNGEN

Page 13: MQTT Deep Dive Workshop [GERMAN]

13

Sehr verbreitet

Request / Response

Seit 1991 verbreitet

Dokumentenzentriert

HTTP?

MQTT - HTTP?

Page 14: MQTT Deep Dive Workshop [GERMAN]

14

Viel Overhead

Polling statt Push

Kein Quality of Service

Stateless

Wie merken wir, dass ein Client offline ist?

Warum nicht immer HTTP?

MQTT - HTTP?

Page 15: MQTT Deep Dive Workshop [GERMAN]

15

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

Page 16: MQTT Deep Dive Workshop [GERMAN]

16

Push statt Pull

Zuverlässigkeit auch bei unzuverlässigen Netzwerken

Constrained Devices

Geringe Bandbreite und hohe Latenz

Enterprise -> Mobile

Anwendungsfälle

MQTT - ANWENDUNGSFÄLLE

Page 17: MQTT Deep Dive Workshop [GERMAN]

17

3 QoS Stufen

Retained Messages

Topic Wildcards

Last Will and Testament

Persistent Sessions

Heartbeats

Features

MQTT - FEATURES

Page 18: MQTT Deep Dive Workshop [GERMAN]

18

MQTT - Historische Entwicklung

1999 2010 2013 2014

Arlen Nipper (Arcom) & Andy Stanford-Clark (IBM)

entwickeln MQTT

MQTT wird offengelegt

OASIS TC MQTT 3.1.1 ist OASIS Standard

MQTT - GESCHICHTE

Page 19: MQTT Deep Dive Workshop [GERMAN]

Was ist Publish / Subscribe Messaging?

Page 20: MQTT Deep Dive Workshop [GERMAN]

20

Pub / Sub

MQTT - PUB / SUB

temperature sensor

MQTT-Broker

laptop

mobile device

publish: “21°C“publish: “21°C“

publish: “21°C“

subscribe

subscribe

Page 21: MQTT Deep Dive Workshop [GERMAN]

21

MQTT IM OSI SCHICHTENMODELL

MQTT

TCP

IP

5-7

ISO/OSI

Layer

4

ISO/OSI

Layer

3

ISO/OSI

Layer

Page 22: MQTT Deep Dive Workshop [GERMAN]

22

CONNECTING TO A BROKER

MQTT Client MQTT Broker

CONNACK

CONNECT

Page 23: MQTT Deep Dive Workshop [GERMAN]

23

CONNECTING TO A BROKER

MQTT Client MQTT Broker

CONNACK

CONNECT

CONNACK

sessionPresentreturnCode

MQTT-Packet:

contains: Exampletrue

0

CONNECT

clientIdcleanSessionusernamepasswordlastWillTopiclastWillQoslastWillMessagekeepAlive

MQTT-Packet:

contains:

(optional)(optional)

(optional)(optional)

(optional)

Example“client-1“

true“hans“

“letmein““/hans/will“

2“unexpected exit“

60

Page 24: MQTT Deep Dive Workshop [GERMAN]

24

PUBLISH

MQTT Client MQTT Broker

PUBLISH

MQTT Client

MQTT Client

MQTT Client

PUBLISH

PUBLISH

PUBLISH

Page 25: MQTT Deep Dive Workshop [GERMAN]

25

PUBLISH

PUBLISH

packetIdtopicNameqosretainFlagpayloaddupFlag

MQTT-Packet:

contains: Example4314

“topic/1“1

false“temperature:32.5“

false

(always 0 for qos 0)

Page 26: MQTT Deep Dive Workshop [GERMAN]

26

Hierarchisch

Wildcards (+ und #)

Queuing (QoS > 0)

Sehr Leichtgewichtig

Dynamisch

MQTT Topics

MQTT - MQTT TOPICS

Page 27: MQTT Deep Dive Workshop [GERMAN]

27

MQTT

MQTT Topics

- MQTT TOPICS

myhome / groundfloor / livingroom / temperaturetopic level topic level

topic levelseparator

Page 28: MQTT Deep Dive Workshop [GERMAN]

28

MQTT

MQTT Topics

- MQTT TOPICS

myhome / groundfloor / + / temperature

only one level

single-levelwildcard

Page 29: MQTT Deep Dive Workshop [GERMAN]

29

MQTT

MQTT Topics

- MQTT TOPICS

myhome / groundfloor / #only at the end

multiple topic levels

multi-levelwildcard

Page 30: MQTT Deep Dive Workshop [GERMAN]

Topic Matching Beispiele

Page 31: MQTT Deep Dive Workshop [GERMAN]

31

deathstar

superlaser

greenhouse

status

usages

humidity

temp

/ /

MQTT - MQTT TOPICS

Page 32: MQTT Deep Dive Workshop [GERMAN]

32

deathstar

superlaser

greenhouse

status

usages

humidity

temp

/ /

Deathstar superlaser status: deathstar/superlaser/status

MQTT - MQTT TOPICS

Page 33: MQTT Deep Dive Workshop [GERMAN]

33

deathstar

superlaser

greenhouse

status

usages

humidity

temp

/ /

All Data from Greenhouse: deathstar/greenhouse/#

MQTT - MQTT TOPICS

Page 34: MQTT Deep Dive Workshop [GERMAN]

34

deathstar

superlaser

greenhouse

status

usages

humidity

temp

/ /

All Data from deathstar: deathstar/#

MQTT - MQTT TOPICS

Page 35: MQTT Deep Dive Workshop [GERMAN]

35

SUBSCRIBE

MQTT Client MQTT Broker

PUBLISH MQTT Client

PUBLISHSUBACK

SUBSCRIBE 1

2

4

3

Page 36: MQTT Deep Dive Workshop [GERMAN]

36

SUBSCRIBE

SUBSCRIBE

packetIdqos1topic1qos2topic2...

MQTT-Packet:

contains: Example4312

1“topic/1“

0“topic/1“

...

}

}

(list of topic + qos)

MQTT Client MQTT Broker

PUBLISH MQTT Client

PUBLISHSUBACK

SUBSCRIBE 1

2

4

3

Page 37: MQTT Deep Dive Workshop [GERMAN]

37

UNSUBSCRIBE

MQTT Client MQTT Broker

UNSUBACK

UNSUBSCRIBE

Page 38: MQTT Deep Dive Workshop [GERMAN]

38

UNSUBSCRIBE

MQTT Client MQTT Broker

UNSUBACK

UNSUBSCRIBE

UNSUBACK

packetId

MQTT-Packet:

contains: Example4316

UNSUBSCRIBE

packetIdtopic1topic2...

MQTT-Packet:

contains: Example4315

“topic/1““topic/2“

...

} (list of topics)

Page 39: MQTT Deep Dive Workshop [GERMAN]

39

Username / Password

Payload Verschlüsselung

TLS

Client Certificate Authentication

Permissions

MQTT Security

MQTT - MQTT SECURITY

Page 40: MQTT Deep Dive Workshop [GERMAN]

40

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

Page 41: MQTT Deep Dive Workshop [GERMAN]

Überblick über das MQTT Ökosystem

MQTT Clients und Broker

Page 42: MQTT Deep Dive Workshop [GERMAN]

42

MQTT - MQTT CLIENT LIBRARY ENCYCLOPEDIA

http://www.hivemq.com/mqtt-client-library-encyclopedia/

Page 43: MQTT Deep Dive Workshop [GERMAN]

MQTT Client BibliothekenÜberblick über die populärsten Alternativen

Page 44: MQTT Deep Dive Workshop [GERMAN]

Java

Page 45: MQTT Deep Dive Workshop [GERMAN]

45

Open Source

“Referenzimplementierung”

Aktive Community

Sync und Async API

Lauffähig auf JavaME

Eclipse Paho

CLIENTS - PAHO

Page 46: MQTT Deep Dive Workshop [GERMAN]

46

Open Source

3 API Styles

Sehr performant

Basiert auf HawtIO

Verfügbar in Maven Central

Fusesource MQTT Client

CLIENTS - FUSESOURCE

Page 47: MQTT Deep Dive Workshop [GERMAN]

Javascript

Page 48: MQTT Deep Dive Workshop [GERMAN]

48

Open Source

“Referenzimplementierung”

Basierend auf Websockets

Sehr gut dokumentiert

keine Abhängigkeiten

Eclipse Paho

CLIENTS - PAHO

Page 49: MQTT Deep Dive Workshop [GERMAN]

49

Open Source

Node.js Bibliothek

Verfügbar in npm

MQTT.js

CLIENTS - MQTT.JS

Page 50: MQTT Deep Dive Workshop [GERMAN]

C

Page 51: MQTT Deep Dive Workshop [GERMAN]

51

Open Source

“Referenzimplementierung”

Auch für C++ verfügbar

Verfügbar für POSIX / Windowsund Embedded

Eclipse Paho

CLIENTS - PAHO

Page 52: MQTT Deep Dive Workshop [GERMAN]

Sonstige

Page 53: MQTT Deep Dive Workshop [GERMAN]

53

Paho (Python, Go, Lua)

M2Mqtt (C#)

ruby-mqtt (Ruby)

Arduino Client

MQTTKit (Objective C)

Mosquitto-PHP (PHP)

Sonstige Clients

CLIENTS - SONSTIGES

Page 54: MQTT Deep Dive Workshop [GERMAN]

MQTT Client AppsÜberblick über die gängigsten Tools

Page 55: MQTT Deep Dive Workshop [GERMAN]

55

Kommandozeilentool

Sehr viele Features

Debug Modus

Einbettbar (libmosquitto)

Mosquitto_Pub / Mosquitto_Sub

CLIENTS - MOSQUITTO

Page 56: MQTT Deep Dive Workshop [GERMAN]

56

Betriebssystemunabhängig

Benötigt aktivierte Websockets

Publish / Subscribe

Real-Time Updates

HiveMQ Web Client

CLIENTS - HIVEMQ WEB CLIENT

Page 57: MQTT Deep Dive Workshop [GERMAN]

57

JavaFX

Mit nativen Wrapper für alle gängigen Betriebssysteme

Scripting Support

Broker Status ($SYS) Support

MQTT.fx

CLIENTS - MQTT.FX

Page 58: MQTT Deep Dive Workshop [GERMAN]

58

MQTTLens (Browser)

MQTTSpy (JavaFX)

MyMQTT (Android)

MQTT Inspector (iOS)

viele andere

Sonstige Applikationen

CLIENTS - SONSTIGES

Page 59: MQTT Deep Dive Workshop [GERMAN]

MQTT BrokerAlternativen für das “Herzstück” von MQTT

Page 60: MQTT Deep Dive Workshop [GERMAN]

60

Open Source

Ideal für Constrained Devices

Unterstützt Bridging

In C implementiert

Mosquitto

BROKER - MOSQUITTO

Page 61: MQTT Deep Dive Workshop [GERMAN]

61

High Performance MQTT Broker

Nativer Websockets Support

Open Source Plugin System

Clustering

Skaliert > 100.000 Connections

HiveMQ

BROKER - HIVEMQ

Page 62: MQTT Deep Dive Workshop [GERMAN]

62

QoS 0 QoS 1 QoS 2 Bridge SSL Cluster WebsocketsPlugin

System

mosquitto ✔ ✔ ✔ ✔ ✔ X ✔ ✔Mosca ✔ ✔ X ? ? ? ✔ X

RabbitMQ ✔ ✔ X X ✔ ? ? ?HiveMQ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔

ActiveMQ ✔ ✔ ✔ X ? ? ✔ ?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

Page 63: MQTT Deep Dive Workshop [GERMAN]

Hands-on MQTT

Testen und “Spielen” mit MQTT

Page 64: MQTT Deep Dive Workshop [GERMAN]

Übung 1: Publish / Subscribe

Page 65: MQTT Deep Dive Workshop [GERMAN]

Showtime! Ausprobieren mit einem Tool der Wahl

Page 66: MQTT Deep Dive Workshop [GERMAN]

Übung 2: Retained Messages

Page 67: MQTT Deep Dive Workshop [GERMAN]

67

“Last Known Good Value”

Die letzte Nachricht wirdvom Broker gespeichert

Client entscheidet ob eine Nachricht retained wird

Clients bekommen retained message nach Subscribe

Retained Messages

ÜBUNGEN - RETAINED MESSAGES

Page 68: MQTT Deep Dive Workshop [GERMAN]

Showtime! Ausprobieren mit einem Tool der Wahl

Page 69: MQTT Deep Dive Workshop [GERMAN]

Übung 3: Last Will and Testament

Page 70: MQTT Deep Dive Workshop [GERMAN]

70

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

Page 71: MQTT Deep Dive Workshop [GERMAN]

Showtime! Ausprobieren mit einem Tool der Wahl

Page 72: MQTT Deep Dive Workshop [GERMAN]

Übung 4: Persistent Session

Page 73: MQTT Deep Dive Workshop [GERMAN]

73

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

Page 74: MQTT Deep Dive Workshop [GERMAN]

74

Keine erneuten Subscriptions nach Verbindungsabbruch

Keine Nachricht geht verloren

Persistent Session

Vorteile

Page 75: MQTT Deep Dive Workshop [GERMAN]

75

Exactly once deliveryQoS 2

QoS 0 At most once delivery

QoS 1 At least once delivery

ÜBUNGEN - QOS

Page 76: MQTT Deep Dive Workshop [GERMAN]

76

QOS 0 - AT MOST ONCE

MQTT Client MQTT Broker

PUBLISH QoS 0

Page 77: MQTT Deep Dive Workshop [GERMAN]

77

QOS 0 - AT MOST ONCE

MQTT Client MQTT Broker

PUBLISH QoS 0

PUBLISH

packetIdtopicNameqosretainFlagpayloaddupFlag

MQTT-Packet:

contains: Example4314

“topic/1“1

false“temperature:32.5“

false

(always 0 for qos 0)

Page 78: MQTT Deep Dive Workshop [GERMAN]

78

QOS 1 - AT LEAST ONCE

MQTT Client MQTT Broker

PUBACK

PUBLISH QoS 1

Page 79: MQTT Deep Dive Workshop [GERMAN]

79

QOS 1 - AT LEAST ONCE

MQTT Client MQTT Broker

PUBACK

PUBLISH QoS 1

PUBACK

packetId

MQTT-Packet:

contains: Example4319

PUBLISH

packetIdtopicNameqosretainFlagpayloaddupFlag

MQTT-Packet:

contains: Example4314

“topic/1“1

false“temperature:32.5“

false

(always 0 for qos 0)

Page 80: MQTT Deep Dive Workshop [GERMAN]

80

QOS 2 - EXACTLY ONCE

MQTT Client MQTT Broker

PUBREC

PUBLISH QoS 2

PUBCOMP

PUBREL

Page 81: MQTT Deep Dive Workshop [GERMAN]

81

QOS 2 - EXACTLY ONCE

MQTT Client MQTT Broker

PUBREC

PUBLISH QoS 2

PUBCOMP

PUBREL

PUBCOMP

packetId

MQTT-Packet:

contains: Example4320

PUBREC

packetId

MQTT-Packet:

contains: Example4320

PUBREL

packetId

MQTT-Packet:

contains: Example4320

PUBLISH

packetIdtopicNameqosretainFlagpayloaddupFlag

MQTT-Packet:

contains: Example4314

“topic/1“1

false“temperature:32.5“

false

(always 0 for qos 0)

Page 82: MQTT Deep Dive Workshop [GERMAN]

Showtime! Ausprobieren mit einem Tool der Wahl

Page 83: MQTT Deep Dive Workshop [GERMAN]

83

Packet loss meist durch Bitfehler (durch schlechtes Netzwerk). Meist keine Congestion

“Error Bursts” bei schlechtem Signal oder längeren Signalstörungen

Sehr lange Verzögerungen. Variable RTT, Timeout Mechanismen funktionieren oft nicht

TCP geht bei einem Packet Loss von Congestion oder Packet Reordering aus.

Bei Funknetzen tritt meist Packet Loss durch Übertragungsfehler auf

TCP wurde ursprünglich für E2E Systeme und fixe Netzwerke entwickelt

Probleme in Funknetzwerken

MQTT - PROBLEME IN FUNKNETZWERKEN

Page 84: MQTT Deep Dive Workshop [GERMAN]

84

MQTT - LÖSUNGEN IN FUNKNETZWERKEN

Page 85: MQTT Deep Dive Workshop [GERMAN]

85

Exactly once deliveryQoS 2

QoS 0 At most once delivery

QoS 1 At least once delivery

B

Connect

Subscribedevice/+/status

device/12/status: „1“

1st

BRe-Connect

device/12/status: „1“2nd

MQTT - LÖSUNGEN IN FUNKNETZWERKEN

QoS LWT

Page 86: MQTT Deep Dive Workshop [GERMAN]

86

Heartbeat Mechanismus

Löst das Problem von Half-Open TCP Connections

Grace Period möglich

Heartbeat / PING

MQTT - LÖSUNGEN IN FUNKNETZWERKEN

Page 87: MQTT Deep Dive Workshop [GERMAN]

87

PINGREQMQTT-Packet:

no payload

PINGRESPMQTT-Packet:

no payload

MQTT - LÖSUNGEN IN FUNKNETZWERKEN

Heartbeat / PING

Page 88: MQTT Deep Dive Workshop [GERMAN]

88

Client verliert die Verbindung, die Connection ist “half-open”

=> Broker denkt der Client ist noch verbunden

Client mit gleicher ClientId verbindet sich erneut

=> Alter Client mit gleicher ClientId wird getrennt

Client Take-Over

MQTT - LÖSUNGEN IN FUNKNETZWERKEN

Page 89: MQTT Deep Dive Workshop [GERMAN]

Entwicklung eines MQTT Todesstern

SimulatorsMQTT mit Java und

Eclipse Paho

Page 90: MQTT Deep Dive Workshop [GERMAN]

90

Deathstar Simulator Implementiert in Java

Dashboard Web Application

MQTT Broker HiveMQ

DEATHSTAR SIMULATOR

Page 91: MQTT Deep Dive Workshop [GERMAN]

Todesstern?!?!?

Page 92: MQTT Deep Dive Workshop [GERMAN]

92

DEATHSTAR - ANATOMY

Page 93: MQTT Deep Dive Workshop [GERMAN]

93

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

Page 94: MQTT Deep Dive Workshop [GERMAN]

94

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

Page 95: MQTT Deep Dive Workshop [GERMAN]

95

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

Page 96: MQTT Deep Dive Workshop [GERMAN]

96

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

Page 97: MQTT Deep Dive Workshop [GERMAN]

Übung 1: Deathstar Reactor Alert

Page 98: MQTT Deep Dive Workshop [GERMAN]

98

code/uebung1

Projekt öffnen

DEATHSTAR

Page 99: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 100: MQTT Deep Dive Workshop [GERMAN]

Übung 2: Superlaser

Page 101: MQTT Deep Dive Workshop [GERMAN]

MQTT Workshop

Page 102: MQTT Deep Dive Workshop [GERMAN]

102

code/uebung2

Projekt öffnen

DEATHSTAR

Page 103: MQTT Deep Dive Workshop [GERMAN]

103

Subscriben auf deathstar/superlaser/status

Laser abfeuern

Status wieder auf deaktiviert setzen

Was ist zu tun?

DEATHSTAR - SUPERLASER

Page 104: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 105: MQTT Deep Dive Workshop [GERMAN]

Übung 3: Update Frequenz ändern

Page 106: MQTT Deep Dive Workshop [GERMAN]

106

code/uebung3

Projekt öffnen

DEATHSTAR

Page 107: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 108: MQTT Deep Dive Workshop [GERMAN]

Übung 4: Imperial Bath Greenhouse

Page 109: MQTT Deep Dive Workshop [GERMAN]

109

code/uebung4

Projekt öffnen

DEATHSTAR

Page 110: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 111: MQTT Deep Dive Workshop [GERMAN]

Übung 5: Statusanzeige

Page 112: MQTT Deep Dive Workshop [GERMAN]

112

code/uebung5

Projekt öffnen

DEATHSTAR

Page 113: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 114: MQTT Deep Dive Workshop [GERMAN]

MQTT Todesstern Kontroll App

MQTT over Websockets

Page 115: MQTT Deep Dive Workshop [GERMAN]

115

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

Page 116: MQTT Deep Dive Workshop [GERMAN]

116

MQTT Over Websockets

DASHBOARD - WEBSOCKETS

MQTT-Broker Laptop

WebsocketFrame

MQTTMessage

Page 117: MQTT Deep Dive Workshop [GERMAN]

Demonstration

Page 118: MQTT Deep Dive Workshop [GERMAN]

Übung 6: Deathstar Reactor Alert

Page 119: MQTT Deep Dive Workshop [GERMAN]

119

code/uebung6

Projekt öffnen

DEATHSTAR

Page 120: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 121: MQTT Deep Dive Workshop [GERMAN]

Übung 7: Superlaser

Page 122: MQTT Deep Dive Workshop [GERMAN]

122

code/uebung7

Projekt öffnen

DEATHSTAR

Page 123: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 124: MQTT Deep Dive Workshop [GERMAN]

Übung 8: Imperial Greenhouse

Page 125: MQTT Deep Dive Workshop [GERMAN]

125

code/uebung8

Projekt öffnen

DEATHSTAR

Page 126: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 127: MQTT Deep Dive Workshop [GERMAN]

Übung 9: Update Frequenz ändern

Page 128: MQTT Deep Dive Workshop [GERMAN]

128

code/uebung9

Projekt öffnen

DEATHSTAR

Page 129: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 130: MQTT Deep Dive Workshop [GERMAN]

Übung 10: Statusanzeige

Page 131: MQTT Deep Dive Workshop [GERMAN]

131

code/uebung10

Projekt öffnen

DEATHSTAR

Page 132: MQTT Deep Dive Workshop [GERMAN]

Implementierung

Page 133: MQTT Deep Dive Workshop [GERMAN]

Q & A

Page 134: MQTT Deep Dive Workshop [GERMAN]

Danke!@dobermai

Page 135: MQTT Deep Dive Workshop [GERMAN]

135

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

Page 136: MQTT Deep Dive Workshop [GERMAN]

136

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

Page 137: MQTT Deep Dive Workshop [GERMAN]

137

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