MQTT uitleg

Een uitleg over MQTT

1. Wat betekent MQTT?

De afkorting MQTT staat voor Message Queuing Telemetry Transport.

2. Wat is MQTT?

MQTT is een client/server protocol dat gebruikmaakt van een publish/subscribe principe. Het protocol wordt tegenwoordig voornamelijk gebruikt voor IoT (Internet of Things) doeleinden.
Het protocol is in eerste instantie bedacht om met een lage bandbreedte, weinig energie en lage installatiekosten oliepijpleidingen te monitoren.
Dit ging namelijk via satelliet verbindingen en was erg kostbaar. Tegenwoordig wordt MQTT in vele industrieën (zoals auto, logistiek, olie & gas) gebruikt.
Daarnaast wordt dit protocol massaal gebruikt in smart-home en in IoT oplossingen.

MQTT bevindt zich in de applicatielaag van het OSI model en maakt gebruik van TCP/IP als transport. Hierdoor is het te gebruiken op een standaard netwerk en is er geen speciale hardware nodig om er mee te kunnen werken.
Naast dat MQTT snel is en weinig bandbreedte vraagt, is het goed schaalbaar en zijn de berichten data agnostisch.
Dit laatste houdt in dat het in principe niet uit maakt wat voor type data verstuurd wordt, hoewel berichten in JSON formaat het meest worden gebruikt.
Nadeel van MQTT is dat iedereen zijn eigen definities van bericht-data definieert. Belangrijs is dat die definitie ergens is vastgelegd.

3. Hoe werkt MQTT?

Ik de fundamentele basisprincipes van het MQTT protocol uitleggen. Meer informatie hierover is te vinden in de specificatie van Oasis.

4. Het Publish en Subscribe principe.

Publish/subscribe is de methode die gebruikt wordt door het MQTT protocol en dient als een alternatief voor de request/response (polling) methode.
Het voordeel van deze methode is dat alleen geïnteresseerde clients berichten ontvangen, wat efficiënt is voor het netwerkverkeer.

De publish/subscribe methode werkt als volgt: als gebruiker kun je je "abonneren" (subscribe) op een topic waar je geïnteresseerd in bent.
Wat een topic exact inhoudt leggen we later uit. Gebruikers kunnen berichten sturen (publish) op topics.
Zodra een bericht verstuurd is op een topic, zullen gebruikers die geabonneerd zijn op het topic het bericht ontvangen.
Gebruikers die niet geabonneerd zijn op het topic zullen overgeslagen worden en zullen het bericht niet ontvangen.
Juist dit beperkt het verkeer op het netwerk.

Een voorbeeld dat het wellicht duidelijker maakt is het abonneren op een YouTube kanaal. Zodra op dat kanaal nieuwe content verschijnt, krijgen abonnees hier bericht van, terwijl andere YouTube gebruikers dit bericht niet krijgen.

De illustratie hierboven laat zien dat een temperatuursensor een nieuwe waarde verstuurt naar het topic "building1/room1/temperature".
Naast de temperatuursensor is in de illustratie te zien dat er drie andere clients zijn.
Van deze drie clients zijn er twee die geabonneerd zijn op het topic van de temperatuursensor.
Deze twee clients krijgen dan ook het gepubliceerde bericht binnen, de andere client krijgt hier niks van te zien.
Totale efficientie!

5. De functie van de Broker of Server.

Net zoals in de makelaardij is de broker de handelaar, maar nu in topics.
De broker is het hart van het MQTT protocol. De broker is een centraal punt waar MQTT gebruikers (clients) zich op aanmelden.
De broker houdt bij welke clients verbonden zijn en op welke topics zij zich hebben geabonneerd.
Zodra de broker dus een bericht binnen krijgt van een bepaald topic, filtert de broker de clients die zijn geabonneerd op dat topic en stuurt vervolgens het bericht naar alleen deze clients.
De illustratie hieronder laat hetzelfde principe zien als de illustratie gebruikt bij Publish en Subscribe. Echter deze keer met een broker als centraal punt.

De belangrijkste functies van de broker (soms ook server genoemd) zijn:

  • Bijhouden van topics waar clients op zijn geabonneerd en welke clients dit zijn.
  • Doorsturen van berichten naar gebruikers die zijn geabonneerd op het topic.
  • Bijhouden van client data.
  • Autorisatie van clients.
    Autorisatieregels kunnen opgesteld worden per client. Deze regels stellen welke topics beschikbaar zijn, welke operaties toegestaan zijn (publish en/of subscribe).
  • Authenticatie van clients.
    Authenticatieregels kunnen opgesteld worden om te bepalen wat voor clients nodig is om met de broker te kunnen verbinden.
    Dit kan door het aanmaken en implementeren van een password file bij de broker configuratie.
    In dit bestand staat aangegeven welke gebruikersnamen acceptabel zijn met een versleuteld wachtwoord.
    Alleen de combinatie van de juiste gebruikersnaam en wachtwoord geven toegang tot de broker.
    Een andere vorm van authenticatie is het gebruik van een X.509 certificaat.

De broker heeft ook de mogelijkheid om het berichtverkeer te versleutelen.
Dit gebeurt door middel van TLS certificaten die toegevoegd kunnen worden aan de configuratie van de broker.
Hier boven werd de X.509 certificaat genoemd als vorm van authenticatie, dit kan verwerkt worden in een TLS certificaat.
De client biedt een client certificaat aan en bij de zogeheten TLS handshake zal dan de authenticatie uitgevoerd worden.
Meer informatie over het TLS protocol is te vinden via deze link.

6. Topics.

Een topic is een punt dat de broker gebruikt om berichten te filteren voor de clients.
Een topic kan uit meerdere niveaus bestaan, hierbij wordt een "/" gebruikt als scheidingsteken voor de niveaus.
Doordat topics uit meerdere niveaus kunnen bestaan is het dus mogelijk om een hiërarchie te maken.
Een goed voorbeeld hiervoor is "gebouwnaam/verdiepingsnaam/ruimtenaam/sensortype-/waarde".
Naast topicniveaus heeft MQTT ook wildcards geïntroduceerd.
Door een wildcard te gebruiken is het mogelijk om te abonneren of berichten te versturen op meerdere topics met een enkel statement.
Topics hoeven niet eerst aangemaakt te worden. De broker accepteert elk topic zolang het maar minstens 1 karakter en geen spaties, speciale tekens of wildcard symbolen bevat. Let wel op dat topics hoofdlettergevoelig zijn.

7. Voodelen en nadelen.

Het is niet alleen hozanna!. MQTT biedt veel voordelen, maar brengt ook nadelen met zich mee. Hieronder is een klein overzicht van belangrijke voor- en nadelen:

7a. Voordelen.

  • Weinig recourses.
    MQTT gebruikt minimale recourses en is hierdoor geschikt voor micro controllers met weinig gehuegen.
  • Lage bandbreedte
    MQTT gebruikt kleine headers (weining overload) voor berichten, hierdoor wordt gespaard op bandbreedte.
  • Eenvoudige implementatie.
    Open protocol dat geen additionele hardware vereist.
  • IoT Ready.
    MQTT kan heel eenvoudig gebruikt worden voor IoT projecten.
  • Goed schaalbaar.
    MQTT netwerken kunnen eenvoudig worden uitgebreid, tot wel miljoenen clients.
  • Agnostische data.
    Door het open protocol kunnen berichten in elk formaat worden verstuurd.
  • Veiligheid.
    TLS encryptie en authenticatie behoren tot de mogelijkheden.
  • Betrouwbaar berichtenverkeer.
    Quality of Service (QoS) is aanwezig en instelbaar.
  • Ondersteuning voor onbetrouwbare netwerken (session awareness)
    Het is mogelijk om client sessies tijdelijk te laten onthouden door de broker, hierdoor zal opnieuw verbinden erg snel gaan.

7b. Nadelen.

  • Single-point of failure.
    Een actieve broker is nodig om een MQTT sessie actief te houden.

8. De uitvoering

Nu een uitleg is gegeven over het MQTT protocol, is natuurlijk nog de vraag hoe dit in de software uitgevoerd kan worden.
Deze beschrijving lijkt heel erg op hetgeen op deze site over MQTT wordt geschreven.
Dat kan ook bijna niet anders want op deze site gebeurt dat ook.
Wil je een compleet beeld schetsen van MQTT kom je steeds op soortgelijke beschrijvingen.

Ook de volgende sites en Youtube filmpjes geven telkens een gelijk beeld:

Wat nu rest zijn praktijkvoorbeelden die bewijzen dat de theorie in de praktijk kan worden omgezet.
Zie hier enkele zaken die dieper op de materie ingaan.
Verder.... Google is your best friend, als je specifieke dingen zoekt.

9. De praktijk.... Testen.

In de volgende links aanwijzingen om e.e.a. te testen in de praktijk.

En het serieuze werk: Siemens S7 aan MQTT.

En er is meer...

Back to top