Pub/Sub for the masses- Ein Einführungsworkshop in MQTT [GERMAN]

4.186 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Technologie

Pub/Sub for the masses- Ein Einführungsworkshop in MQTT [GERMAN]

  1. 1. PUB / SUB for the masses An Introduction to MQTT #IotCon Workshop
  2. 2. 2 EINFÜHRUNG - VORSTELLUNG Christian Götz Dominik Obermaier CEO @ dc-square CTO @ dc-square @goetzchr @dobermai
  3. 3. Beginn Q&A 3 EINFÜHRUNG - AGENDA Kurze Einführung in MQTT Entwicklung einer MQTT Webapplication MQTT über Websockets       Ü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
  4. 4. Wie entwickle ich einen MQTT Client in Java? Was ist “MQTT over Websockets?” Wie funktioniert MQTT für Webseiten? Umsetzung verschiedener MQTT Patterns 4 EINFÜHRUNG - LERNZIELE  Was ist MQTT? Was werden wir bei diesem Workshop lernen? Warum nicht immer HTTP? MQTT Broker? MQTT Clients? Wie funktioniert MQTT im Detail? Wie baue ich einen Software-Deathstar ;-)
  5. 5. 5 EINFÜHRUNG - ANWENDUNGSFALL Unser Anwendungsfall: Deathstar Simulalator Implementierung eines MQTT Todesstern Simulators und eines Web-Dashboards zur Anzeige von Daten und Steuerung des Simulators
  6. 6. 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. 7. 7 EINFÜHRUNG - BENÖTIGTE SOFTWARE Wer benötigt noch diese Software?
  8. 8.  Einführung in MQTT Überblick und wichtigste Features und Eigenschaften
  9. 9. 9 Herausforderungen im IoT Unzuverlässige Netzwerke Skalierbarkeit Bidirektionale Kommunikation Constrained Devices Security Push Messaging MQTT - HERAUSFORDERUNGEN
  10. 10. 10 MQTT - IOT PROTOKOLL ANFORDERUNGEN Anforderungen an ein IoT Protokoll Bandbreiteneffizient Skalierbar Standardisiert Offen Datenagnostisch Sowohl für schwache Hardware als auch Server geeignet
  11. 11. 11 Sehr verbreitet Request / Response Seit 1991 verbreitet Dokumentenzentriert HTTP? MQTT - HTTP?
  12. 12. 12 Warum nicht immer HTTP? Viel Overhead Polling statt Push Kein Quality of Service Stateless Wie merken wir, dass ein Client offline ist? MQTT - HTTP?
  13. 13. 13 MQTT - MESSAGING FÜR DAS INTERNET DER DINGE MQTT - Messaging für das Internet der Dinge  Einfach  Publish / Subscribe  Binär  Messaging Protokoll  Minimaler Overhead  Datenagnostisch 
  14. 14. 14 Anwendungsfälle Push statt Pull Zuverlässigkeit auch bei unzuverlässigen Netzwerken Constrained Devices Geringe Bandbreite und hohe Latenz Enterprise -> Mobile MQTT - ANWENDUNGSFÄLLE
  15. 15. 15 3 QoS Stufen Retained Messages Topic Wildcards Last Will and Testament Persistent Sessions Heartbeats Features MQTT - FEATURES
  16. 16. Was ist Publish / Subscribe Messaging?
  17. 17. 17 Pub / Sub MQTT - PUB / SUB
  18. 18. 18 MQTT Topics Hierarchisch Wildcards (+ und #) Queuing (QoS > 0) Sehr Leichtgewichtig Dynamisch MQTT - MQTT TOPICS
  19. 19. Topic Matching Beispiele
  20. 20. 20 deathstar superlaser greenhouse status usages humidity temp / / MQTT - MQTT TOPICS
  21. 21. Deathstar superlaser status: deathstar/superlaser/status 21 deathstar superlaser greenhouse status usages humidity temp / / MQTT - MQTT TOPICS
  22. 22. 22 All Data from Greenhouse: deathstar/greenhouse/# deathstar superlaser greenhouse status usages humidity temp / / MQTT - MQTT TOPICS
  23. 23. 23 All Data from deathstar: deathstar/# deathstar superlaser greenhouse status usages humidity temp / / MQTT - MQTT TOPICS
  24. 24. Username / Password Payload Verschlüsselung TLS Client Certificate Authentication Permissions 24 MQTT Security MQTT - MQTT SECURITY
  25. 25. 25 MQTT - Historische Entwicklung MQTT - GESCHICHTE Arlen Nipper (Arcom) & Andy Stanford-Clark (IBM) entwickeln MQTT freie Verfügbarkeit OASIS TC MQTT 3.1.1 Release 1999 2010 2013 2014
  26. 26. 26 MQTT 3.1.1 Verbesserungen zu MQTT 3.1 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 - MQTT 3.1.1
  27. 27.  Überblick über das MQTT Ökosystem MQTT Clients und Broker
  28. 28. MQTT Client Bibliotheken Überblick über die populärsten Alternativen 
  29. 29.  Java
  30. 30. 30 Eclipse Paho Open Source “Referenzimplementierung” Aktive Community Sync und Async API Lauffähig auf JavaME CLIENTS - PAHO
  31. 31. 31 Fusesource MQTT Client Open Source 3 API Styles Sehr performant Basiert auf HawtIO Verfügbar in Maven Central CLIENTS - FUSESOURCE
  32. 32.  Javascript
  33. 33. 33 Eclipse Paho Open Source “Referenzimplementierung” Basierend auf Websockets Sehr gut dokumentiert keine Abhängigkeiten CLIENTS - PAHO
  34. 34. 34 Open Source Node.js Bibliothek Verfügbar in npm MQTT.js CLIENTS - MQTT.JS
  35. 35.  C
  36. 36. Open Source “Referenzimplementierung” Auch für C++ verfügbar Verfügbar für POSIX / Windows und Embedded 36 Eclipse Paho CLIENTS - PAHO
  37. 37.  Sonstige
  38. 38. 38 Sonstige Clients Paho (Python, Go, Lua) M2Mqtt (C#) ruby-mqtt (Ruby) Arduino Client MQTTKit (Objective C) Mosquitto-PHP (PHP) CLIENTS - SONSTIGES
  39. 39. MQTT Client Apps Überblick über die gängigsten Tools 
  40. 40. 40 Mosquitto_Pub / Mosquitto_Sub Kommandozeilentool Sehr viele Features Debug Modus Einbettbar (libmosquitto) CLIENTS - MOSQUITTO
  41. 41. Betriebssystemunabhängig Benötigt aktivierte Websockets Publish / Subscribe Real-Time Updates 41 HiveMQ Web Client CLIENTS - HIVEMQ WEB CLIENT
  42. 42. 42 JavaFX Mit nativen Wrapper für alle gängigen Betriebssysteme Scripting Support Broker Status ($SYS) Support MQTT.fx CLIENTS - MQTT.FX
  43. 43. 43 Sonstige Applikationen MQTTLens (Browser) MQTTSpy (JavaFX) MyMQTT (Android) MQTT Inspector (iOS) viele andere CLIENTS - SONSTIGES
  44. 44. MQTT Broker Alternativen für das “Herzstück” von MQTT 
  45. 45. 45 Open Source Ideal für Constrained Devices Unterstützt Bridging In C implementiert Mosquitto BROKER - MOSQUITTO
  46. 46. 46 Open Source Node.js Broker Einbettbar Unterstützt nicht alle MQTT Features Mosca BROKER - MOSCA
  47. 47. 47 Open Source In Erlang implementiert MQTT Adapter Unterstützt nicht alle MQTT Features RabbitMQ BROKER - RABBITMQ
  48. 48. High Performance MQTT Broker Nativer Websockets Support Open Source Plugin System Unterstützt Bridging Clustering Skaliert > 100.000 Connections 48 HiveMQ BROKER - HIVEMQ
  49. 49. 49 BROKER - ÜBERSICHT MQTT Broker Übersicht Source: https://github.com/mqtt/mqtt.github.io/wiki/Server%20support QoS 0 QoS 1 QoS 2 Bridge SSL Cluster Websockets Plugin System mosquitto ✔ ✔ ✔ ✔ ✔ X X ✔ Mosca ✔ ✔ X ? ? ? ✔ X RabbitMQ ✔ ✔ X X ✔ ? ? ? HiveMQ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ActiveMQ ✔ ✔ ✔ ? ? ? ✔ ? RSMB ✔ ✔ ✔ ✔ X X X ? moquette ✔ ✔ X ? ? X X X
  50. 50. Hands-on MQTT Testen und “Spielen” mit MQTT 
  51. 51. Übung 1: Quality of Service Levels
  52. 52. 52 QoS 0 At most once delivery QoS 1 At least once delivery QoS 2 Exactly once delivery ÜBUNGEN - QOS
  53. 53. Showtime! Ausprobieren mit einem Tool der Wahl
  54. 54. Übung 2: Retained Messages
  55. 55. 55 Retained Messages “Last Known Good Value” Die letzte Nachricht wird vom Broker gespeichert Client entscheidet ob eine Nachricht retained wird Clients bekommen retained message nach Subscribe ÜBUNGEN - RETAINED MESSAGES
  56. 56. Showtime! Ausprobieren mit einem Tool der Wahl
  57. 57. Übung 3: Last Will and Testament
  58. 58. 58 Last Will and Testament Client definiert LWT Broker schickt diese Nachricht nach Client “Tod”. Echter Push Nützlich um on / off verlässlich zu implementieren ÜBUNGEN - LWT
  59. 59. Showtime! Ausprobieren mit einem Tool der Wahl
  60. 60. Übung 4: Persistent Session
  61. 61. Broker speichert Client Session Client entscheidet ob er eine persistent Session haben möchte Queuing für QoS > 0 61 Persistent Session B ÜBUNGEN - PERSISTENT SESSION Connect Subscribe device/+/status device/12/status: „1“ 1st B Re-Connect device/12/status: „1“ 2nd
  62. 62. Showtime! Ausprobieren mit einem Tool der Wahl
  63. 63. Entwicklung eines MQTT Todesstern Simulators MQTT mit Java und Eclipse Paho 
  64. 64. 64 Deathstar Simulator Dashboard Deathstar Simulator Implementiert in Java Dashboard Web Application MQTT Broker HiveMQ DEATHSTAR - GIT
  65. 65. 65 DEATHSTAR - GIT
  66. 66. 1. Git installieren 2. Übungen können als Tag ausgechekt werden 3. Git Kommandos werden vor jeder Übung gezeigt 66 Git DEATHSTAR - GIT
  67. 67. 67 Initiales Klonen des Repositories DEATHSTAR - GIT git clone git@github.com:dc-square/ ->! introduction-to-mqtt-workshop.git
  68. 68. Todesstern?!?!?
  69. 69. 69 DEATHSTAR - ANATOMY
  70. 70. 70 Features • Alarmierung wenn Eindringlinge dem Reaktor zu nahe kommen • Abfeuern des Superlasers • Fernsteuerung der Meldefrequenz • Temperaturanzeige des Imperialen Gewächshauses • Melden des Status (Online / Offline) DEATHSTAR - FEATURES
  71. 71. 71 DEATHSTAR - PAHO 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();
  72. 72. 72 DEATHSTAR - PAHO 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);
  73. 73. 73 DEATHSTAR - PAHO 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("#");
  74. 74. Übung 1: Deathstar Reactor Alert
  75. 75. 75 Checkout DEATHSTAR - GIT git checkout deathstar-start
  76. 76. Implementierung
  77. 77. Übung 2: Superlaser
  78. 78. MQTT Workshop
  79. 79. 79 Checkout DEATHSTAR - GIT git checkout superlaser-start
  80. 80. 80 Was ist zu tun? DEATHSTAR - SUPERLASER Subscriben auf deathstar/superlaser/status Laser abfeuern Status wieder auf deaktiviert setzen
  81. 81. Implementierung
  82. 82. Übung 3: Update Frequenz ändern
  83. 83. 83 Checkout DEATHSTAR - GIT git checkout frequency-start
  84. 84. Implementierung
  85. 85. Übung 4: Imperial Bath Greenhouse
  86. 86. 86 Checkout DEATHSTAR - GIT git checkout greenhouse-start
  87. 87. Implementierung
  88. 88. Übung 5: Statusanzeige
  89. 89. 89 Checkout DEATHSTAR - GIT git checkout status-start
  90. 90. Implementierung
  91. 91.  Entwicklung einer MQTT Todesstern KontrollApp MQTT over Websockets
  92. 92. 92 Features • Alarmierung wenn Eindringlinge dem Reaktor zu nahe kommen • Abfeuern des Superlasers • Fernsteuerung der Meldefrequenz • Temperaturanzeige des Imperialen Gewächshauses • Anzeigen des Status (Online / Offline) DASHBOARD - FEATURES
  93. 93. Demonstration
  94. 94. 94 DASHBOARD - WEBSOCKETS MQTT Over Websockets
  95. 95. Übung 1: Deathstar Reactor Alert
  96. 96. 96 Checkout DASHBOARD - GIT git checkout db-start
  97. 97. Implementierung
  98. 98. Übung 2: Superlaser
  99. 99. 99 Checkout DASHBOARD - GIT git checkout db-superlaser-start
  100. 100. Implementierung
  101. 101. Übung 3: Imperial Greenhouse
  102. 102. 102 Checkout DASHBOARD - GIT git checkout db-greenhouse-start
  103. 103. Implementierung
  104. 104. Übung 4: Update Frequenz ändern
  105. 105. 105 Checkout DASHBOARD - GIT git checkout db-frequency-start
  106. 106. Implementierung
  107. 107. Übung 5: Statusanzeige
  108. 108. 108 Checkout DASHBOARD - GIT git checkout db-status-start
  109. 109. Implementierung
  110. 110. HIVEMQ - PAY-AS-YOU-GO http://www.hivemq.com/iot-con-special-2014/ 110
  111. 111. Q & A
  112. 112. Danke! @dobermai @goetzchr
  113. 113. 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. 114. 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. 115. 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

×