This shows you the differences between two versions of the page.
| 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] (current) 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> | ||