User Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tut:mqtt [2018-07-20 10:20]
jk [Example: Remain-Flag]
tut:mqtt [2018-07-20 18:31]
jk
Line 4: Line 4:
  
 ... see [[https://​www.hivemq.com/​blog/​mqtt-essentials-part-1-introducing-mqtt]] ... see [[https://​www.hivemq.com/​blog/​mqtt-essentials-part-1-introducing-mqtt]]
 +
 +... see [[https://​blog.doubleslash.de/​mqtt-fuer-dummies/​]]
 ===== MQTT Data Flow by Examples ===== ===== MQTT Data Flow by Examples =====
  
Line 16: Line 18:
 {{ :​tut:​mqtt:​mqtt1.svg?​600x0 }} {{ :​tut:​mqtt:​mqtt1.svg?​600x0 }}
  
-If Client X publishes any data with Topic 1 and nobody is listening (nobody has subscribed ​Topic 1) the data is lost.+If Client X publishes any data with Topic 1 and nobody is listening (nobody has subscriped ​Topic 1) the data is lost.
  
 (Exception: see Topics with Retain Flag) (Exception: see Topics with Retain Flag)
Line 23: Line 25:
  
   * Client A connected   * Client A connected
-  * Client B connected and subscribes ​Topic 2+  * Client B connected and subscripes ​Topic 2
  
 {{ :​tut:​mqtt:​mqtt2.svg?​600x0 |}} {{ :​tut:​mqtt:​mqtt2.svg?​600x0 |}}
Line 32: Line 34:
  
   * Client A, C, E connected   * Client A, C, E connected
-  * Client B connected and subscribes ​Topic 2 +  * Client B connected and subscripes ​Topic 2 
-  * Client F connected and subscribes ​Topic 3+  * Client F connected and subscripes ​Topic 3
  
 {{ :​tut:​mqtt:​mqtt3.svg?​600x0 }} {{ :​tut:​mqtt:​mqtt3.svg?​600x0 }}
  
-Any Client can publish any data with any Topic at anytime. The subscriping ​Clients are notified instantly about change of the Topics they subscripes and only that.+Any Client can publish any data with any Topic at anytime. The subscribing ​Clients are notified instantly about change of the Topics they subscripes and only that.
  
 ==== Example: Many Publisher, 1 Subscriber with Wildcard ==== ==== Example: Many Publisher, 1 Subscriber with Wildcard ====
  
   * Client A, C, E connected   * Client A, C, E connected
-  * Client D connected and subscribes ​Topic with '#'​+  * Client D connected and subscripes ​Topic with '#'​
  
 {{ :​tut:​mqtt:​mqtt4.svg?​600x0 }} {{ :​tut:​mqtt:​mqtt4.svg?​600x0 }}
Line 50: Line 52:
 ==== Example: Request and Answer ==== ==== Example: Request and Answer ====
  
-  * Client E connected and subscribes ​Topic 4 +  * Client E connected and subscripes ​Topic 4 
-  * Client F connected and subscribes ​Topic 3+  * Client F connected and subscripes ​Topic 3
  
 {{ :​tut:​mqtt:​mqtt5.svg?​600x0 }} {{ :​tut:​mqtt:​mqtt5.svg?​600x0 }}
  
-Every Client can be publisher and subscriper. For sneding a request/​command one Topic can be used. For the answer an other Topic is used.+Every Client can be publisher and subscriber. For sneding a request/​command one Topic can be used. For the answer an other Topic is used.
  
 Note: This can be solved with only one Tpoic but the publisher would receive his own request/​command. Note: This can be solved with only one Tpoic but the publisher would receive his own request/​command.
Line 62: Line 64:
  
   * Client G connected   * Client G connected
-  * Client H connected and subscribes ​Topic 5 with QoS+  * Client H connected and subscripes ​Topic 5 with QoS
  
 {{ :​tut:​mqtt:​mqtt6.svg?​600x0 }} {{ :​tut:​mqtt:​mqtt6.svg?​600x0 }}
Line 75: Line 77:
 |2|garantee that data arrives only once| |2|garantee that data arrives only once|
    
-Note: Each publisher and each subscriper ​can user the QoS flag without affecting the others.+Note: Each publisher and each subscriber ​can user the QoS flag without affecting the others.
  
 ==== Example: Remain-Flag ==== ==== Example: Remain-Flag ====
  
   * Client Y was connected long time ago   * Client Y was connected long time ago
-  * Client Z connects now and subscribes ​Topic 6+  * Client Z connects now and subscripes ​Topic 6
  
 {{ :​tut:​mqtt:​mqtt7.svg?​600x0 }} {{ :​tut:​mqtt:​mqtt7.svg?​600x0 }}
Line 92: Line 94:
 |1|saved on broker| |1|saved on broker|
  
-===== Subscription Wildcard Examples ​=====+===== Topic Wording ​===== 
 + 
 +There is no law that you have to name your topics in a special way. So the following names are (principle) correct:
  
-On subscriping "/​MyHome/​Kitchen/​Temperature"​ you get: 
   * /​MyHome/​Kitchen/​Temperature   * /​MyHome/​Kitchen/​Temperature
 +  * /​MYHOME/​KITCHEN/​TEMPERATURE
 +  * MyHome/​Kitchen/​Temperature
 +  * MyHome.Kitchen.Temperature
 +  * MyHomeKitchenTemperature
 +  * MHKT
 +  * /​Temperature/​Kitchen/​MyHome
 +  * 42
 +
 +But there are some guidelines for names that all clinets can filter and handle subscriptions in an easy way:
 +
 +  * The topic begins with a '/'​
 +  * The topic do NOT end with a '/'​
 +  * A '/'​ seperates topic levels
 +  * The topic levels starts with the most commen level
 +
 +So the recommented name is:
 +
 +  * /​MyHome/​Kitchen/​Temperature
 +
 +===== Subscription Wildcard Examples =====
 +
 +==== Exact Match ====
 +
 +On subscribing **"/​MyHome/​Kitchen/​Temperature"​** you get:
 +  * **/​MyHome/​Kitchen/​Temperature**
   * <​del>/​MyHome/​Kitchen/​Humity</​del>​   * <​del>/​MyHome/​Kitchen/​Humity</​del>​
   * <​del>/​MyHome/​Kitchen/​Fridge/​Temperature</​del>​   * <​del>/​MyHome/​Kitchen/​Fridge/​Temperature</​del>​
Line 103: Line 131:
   * <​del>/​MyGarden/​Pool/​Temperature</​del>​   * <​del>/​MyGarden/​Pool/​Temperature</​del>​
  
-On subscriping ​"/#"​ you get:+==== # Wildcard ==== 
 + 
 +On subscribing **"/#"​** you get:
   * /​MyHome/​Kitchen/​Temperature   * /​MyHome/​Kitchen/​Temperature
   * /​MyHome/​Kitchen/​Humity   * /​MyHome/​Kitchen/​Humity
Line 112: Line 142:
   * /​MyGarden/​Pool/​Temperature   * /​MyGarden/​Pool/​Temperature
  
-On subscriping ​"/​MyHome/#"​ you get: +On subscribing **"/​MyHome/#"​** you get: 
-  * /​MyHome/​Kitchen/​Temperature +  ​* **/MyHome/**Kitchen/​Temperature 
-  * /​MyHome/​Kitchen/​Humity +  ​* **/MyHome/**Kitchen/​Humity 
-  * /​MyHome/​Kitchen/​Fridge/​Temperature +  ​* **/MyHome/**Kitchen/​Fridge/​Temperature 
-  * /​MyHome/​Livingroom/​Temperature +  ​* **/MyHome/**Livingroom/​Temperature 
-  * /​MyHome/​Livingroom/​Humity+  ​* **/MyHome/**Livingroom/​Humity
   * <​del>/​MyGarden/​Air/​Temperature</​del>​   * <​del>/​MyGarden/​Air/​Temperature</​del>​
   * <​del>/​MyGarden/​Pool/​Temperature</​del>​   * <​del>/​MyGarden/​Pool/​Temperature</​del>​
  
-On subscriping ​"/​MyHome/​Kitchen/#"​ you get: +On subscribing **"/​MyHome/​Kitchen/#"​** you get: 
-  * /​MyHome/​Kitchen/​Temperature +  ​* **/​MyHome/​Kitchen/​**Temperature 
-  * /​MyHome/​Kitchen/​Humity +  ​* **/​MyHome/​Kitchen/​**Humity 
-  * /​MyHome/​Kitchen/​Fridge/​Temperature+  ​* **/​MyHome/​Kitchen/​**Fridge/​Temperature
   * <​del>/​MyHome/​Livingroom/​Temperature</​del>​   * <​del>/​MyHome/​Livingroom/​Temperature</​del>​
   * <​del>/​MyHome/​Livingroom/​Humity</​del>​   * <​del>/​MyHome/​Livingroom/​Humity</​del>​
Line 130: Line 160:
   * <​del>/​MyGarden/​Pool/​Temperature</​del>​   * <​del>/​MyGarden/​Pool/​Temperature</​del>​
  
-On subscriping ​"/​MyHome/​+/​Temperature"​ you get: +==== + Wildcard ==== 
-  * /​MyHome/​Kitchen/​Temperature+ 
 +On subscribing **"/​MyHome/​+/​Temperature"​** you get: 
 +  ​* **/MyHome/**Kitchen**/​Temperature**
   * <​del>/​MyHome/​Kitchen/​Humity</​del>​   * <​del>/​MyHome/​Kitchen/​Humity</​del>​
   * <​del>/​MyHome/​Kitchen/​Fridge/​Temperature</​del>​   * <​del>/​MyHome/​Kitchen/​Fridge/​Temperature</​del>​
-  * /​MyHome/​Livingroom/​Temperature+  ​* **/MyHome/**Livingroom**/​Temperature**
   * <​del>/​MyHome/​Livingroom/​Humity</​del>​   * <​del>/​MyHome/​Livingroom/​Humity</​del>​
   * <​del>/​MyGarden/​Air/​Temperature</​del>​   * <​del>/​MyGarden/​Air/​Temperature</​del>​
   * <​del>/​MyGarden/​Pool/​Temperature</​del>​   * <​del>/​MyGarden/​Pool/​Temperature</​del>​
  
-On subscriping ​"/​+/​+/​Temperature"​ you get: +On subscribing **"/​+/​+/​Temperature"​** you get: 
-  * /​MyHome/​Kitchen/​Temperature+  * /​MyHome/​Kitchen**/​Temperature**
   * <​del>/​MyHome/​Kitchen/​Humity</​del>​   * <​del>/​MyHome/​Kitchen/​Humity</​del>​
   * <​del>/​MyHome/​Kitchen/​Fridge/​Temperature</​del>​   * <​del>/​MyHome/​Kitchen/​Fridge/​Temperature</​del>​
-  * /​MyHome/​Livingroom/​Temperature+  * /​MyHome/​Livingroom**/​Temperature**
   * <​del>/​MyHome/​Livingroom/​Humity</​del>​   * <​del>/​MyHome/​Livingroom/​Humity</​del>​
-  * /​MyGarden/​Air/​Temperature +  * /​MyGarden/​Air**/​Temperature** 
-  * /​MyGarden/​Pool/​Temperature+  * /​MyGarden/​Pool**/​Temperature** 
 + 
 +On subscribing **"/​+/​+/​+/​Temperature"​** you get: 
 +  * <​del>/​MyHome/​Kitchen/​Temperature</​del>​ 
 +  * <​del>/​MyHome/​Kitchen/​Humity</​del>​ 
 +  * /​MyHome/​Kitchen/​Fridge**/​Temperature** 
 +  * <​del>/​MyHome/​Livingroom/​Temperature</​del>​ 
 +  * <​del>/​MyHome/​Livingroom/​Humity</​del>​ 
 +  * <​del>/​MyGarden/​Air/​Temperature</​del>​ 
 +  * <​del>/​MyGarden/​Pool/​Temperature</​del>​
  
  

ezPiC

Easy *Pi Controller for IoT Devices