ID.nl logo
Zekerheid & gemak

Alles over het internet-of-things-protocol MQTT

De naam MQTT zal niet bij veel mensen een belletje doen rinkelen, maar het internet-of-things-protocol vormt de basis van talloze systemen in domotica. We kijken naar de werking van dit protocol en de verschillende manieren waarop je het kunt inzetten.

Het internet der dingen (internet of things, IoT) is de laatste jaren een hype, maar de meest gebruikte technologie om al die apparaten met elkaar te laten praten bestaat al twintig jaar: MQTT (Message Queuing Telemetry Transport). De eerste versie van het MQTT-protocol werd namelijk al in 1999 geschreven door Andy Stanford-Clark van IBM en Arlen Nipper van Arcom (later Eurotech).

Hun bedoeling was om een licht protocol te ontwikkelen dat met een efficiënt gebruik van bandbreedte allerlei soorten gegevens kon doorsturen met verschillende vormen van quality of service (QoS). En laat dat nu net een combinatie van eigenschappen zijn die essentieel is in het internet of things. Het mag dan ook niet verbazen dat talloze IoT-projecten ervoor gekozen hebben om onder de motorkap MQTT te gebruiken. Overigens toonde MQTT-uitvinder Stanford-Clark in 2009 de mogelijkheden al door zijn domoticasysteem via MQTT met Twitter te verbinden.

Centrale tussenpartij

Een cruciale rol in MQTT is weggelegd de ‘broker’, een centrale tussenpartij die de communicatie tussen zenders en ontvangers in goede banen leidt. In traditioneler taalgebruik zouden we het de server noemen. De broker is niet de enige afwijkende term die het MQTT-protocol gebruikt: een zender heet er uitgever (‘publisher’) en een ontvanger abonnee (‘subscriber’). Beide zijn vormen van clients. Uiteraard kan een client ook zowel zenden als ontvangen.

De broker zorgt ervoor dat uitgevers en abonnees niet van elkaars bestaan hoeven te weten: alles verloopt via de broker. Dat gaat als volgt: de broker beheert onderwerpen (‘topics’) met inhoud (‘payloads’). Een abonnee die in een onderwerp geïnteresseerd is, abonneert zich daarop bij de broker. Een uitgever die een boodschap wil sturen, publiceert zijn inhoud op een specifiek onderwerp door dit naar de broker te sturen. Zodra de broker een boodschap voor een onderwerp ontvangt, stuurt hij die door naar alle clients die op dit onderwerp geabonneerd zijn.

Hiërarchische onderwerpen

Een onderwerp kunnen we dus beschouwen als een soort locatie waarvan de naam bij uitgever en abonnee bekend is. Maar om hier wat systematiek in te brengen, definieert MQTT de onderwerpen als hiërarchische namen, gescheiden door een slash (/), zoals in url’s. Elke toepassing is voor de rest volledig vrij in de keuze van de namen; in tegenstelling tot url’s zijn er dus geen vastgelegde topdomeinen.

Wil je wat orde in je MQTT-netwerk houden, dan is het aan te raden om een systeem voor je onderwerpen te gebruiken. Een domoticatoepassing als Home Assistant doet dat door de onderwerpen van de volgende vorm te maken:

<discovery_prefix>/<component>/[<node_id>/]<object_id>/&lt;&gt;</object_id></node_id></component></discovery_prefix>

Daarbij is discovery_prefix standaard gelijk aan homeassistant. Component het type component, zoals binary_sensor enzovoort. Een voorbeeld van een onderwerp is:

homeassistant/sensor/slaapkamer_temperature/state

Dat bevat als inhoud de temperatuur van een temperatuursensor in de slaapkamer, bijvoorbeeld 18.7.

Wildcards

MQTT kent ook ‘wildcards’ voor onderwerpen. Een client die in alle onderwerpen onder homeassistant/sensor/slaapkamer_temperature geïnteresseerd is, abonneert zich dan op:

homeassistant/sensor/slaapkamer_temperature/#

Hij krijgt dan ook boodschappen over de onderwerpen:

homeassistant/sensor/slaapkamer_temperature/last_updated
homeassistant/sensor/slaapkamer_temperature/last_changed

Enzovoort.En als een client in alle onderwerpen van Home Assistant geïnteresseerd is, abonneert hij zich op:

homeassistant/#

Soms ben je geïnteresseerd in alle onderwerpen met een specifieke naam van het onderste niveau, ongeacht het niveau erboven. Daarvoor gebruik je de wildcard +. Zo abonneer je je bijvoorbeeld eenvoudig op de boodschappen over de laatste veranderingen van alle sensoren in Home Assistant:

homeassistant/sensor/+/last_changed

De hiërarchische opbouw van onderwerpen maakt dit heel eenvoudig.

©PXimport

Verbinding en beveiliging

MQTT is ontworpen om over tcp/ip te draaien, meestal op poort 1883. Recentelijk is ook MQTT over WebSocket populair, omdat dit het mogelijk maakt om rechtstreeks in een webbrowser via MQTT te communiceren. Een JavaScript-client pakt de pakketten dan uit de WebSocket-laag uit en behandelt de MQTT-pakketten die erin zitten. MQTT over WebSocket verloopt meestal via poort 9001. Zowel MQTT over tcp/ip als MQTT over WebSocket zijn ook te gebruiken over een versleutelde verbinding, via tls.

Tot nu toe lijkt het alsof iedereen zomaar alle onderwerpen op je MQTT-broker kan uitlezen, en zo gebeurt het in veel lokale MQTT-installaties ook, maar de meeste MQTT-brokers bieden een gebruikersbeheer met bijbehorende authenticatie en gebruikersrechten. Je stelt dan in de configuratie van de broker in dat elke MQTT-client zich moet aanmelden met een gebruikersnaam en wachtwoord en lees- en schrijfrechten voor specifieke onderwerpen heeft. Zo voorkom je dat een willekeurige sensornode in je netwerk waarin iemand is ingebroken je hele domoticasysteem via MQTT kan aansturen.

Zelf aan de slag met MQTT

MQTT is in heel wat software ondersteund, dus je kunt het protocol zelf eenvoudig in je eigen projecten inzetten. Een eenvoudige manier om een Raspberry Pi, Arduino of ESP8266 via MQTT over internet te laten werken, is via de clouddienst Adafruit IO. Werk je liever in het ecosysteem van Amazon of Microsoft, gebruik dan AWS IoT respectievelijk Azure IoT Hub.

Je hoeft MQTT trouwens niet in de cloud te gebruiken: met het opensourceproject Eclipse Mosquitto, dat MQTT-protocols 3.1 en 3.1.1 ondersteunt, draai je eenvoudig een MQTT-broker op je eigen netwerk. Mosquitto komt ook met eenvoudige MQTT-clients voor op de opdrachtregel: mosquitto_pub en mosquitto_sub.

Wil je op een grafische manier MQTT-boodschappen doorzoeken, bekijken en publiceren, dan is MQTT Explorer een handig programma.

Wil je MQTT in je eigen programma’s gebruiken, dan is het project Eclipse Paho met bibliotheken in C, C++, Java, JavaScript, Python en Lua onmisbaar.

▼ Volgende artikel
Je afzuigkap: waarom je hem al aanzet vóór je gaat koken
© Paul Maguire
Huis

Je afzuigkap: waarom je hem al aanzet vóór je gaat koken

Veel mensen zetten de afzuigkap pas aan als er al flink wat kookdampen in de keuken hangen. Lijkt logisch, maar: op dat moment ben je eigenlijk al te laat. Het is beter om de afzuigkap al een paar minuten voor het koken aan te zetten en hem pas een kwartiertje na de maaltijd weer uit te schakelen. Dit lijkt misschien overdreven, maar het maakt een groot verschil voor de luchtkwaliteit in je woning.

In dit artikel lees je waarom het helpt om je afzuigkap al een paar minuten vóór het koken aan te zetten en hem na afloop nog even te laten draaien. Je snapt hoe die luchtstroom werkt, welke stoffen bij koken kunnen vrijkomen (zeker bij koken op gas) en wat het verschil is tussen afvoer naar buiten en recirculatie. Ook laten we zien hoe je snel kunt testen of de afzuiging nog goed is en krijg je nog een paar slimme tips over het gebruik van je afzuigkap.

Lees ook: Hoe kies je de juiste afzuigkap?

Onzichtbare luchtstroom

Het geheim van een goed werkende afzuigkap zit in het juiste moment van inschakelen. Een afzuigkap werkt door onderdruk te creëren: zodra hij aanstaat, wordt lucht actief naar de filters gezogen. Maar warme kookdamp stijgt snel op en verspreidt zich direct alle kanten op. Als je de kap pas inschakelt wanneer de damp al opstijgt, is het al te laat om alles af te vangen.

Door de kap een minuutje of twee voor het koken aan te zetten, zorg je ervoor dat de zuigkracht al actief is op het moment dat de eerste damp vrijkomt. Die damp wordt dan direct de afzuigkap in getrokken, voordat hij de kans krijgt zich door de keuken en de rest van je huis te verspreiden. Kook je op gas? Zet de afzuigkap dan aan voordat je de pitten aansteekt. Zo worden ook de deeltjes die daardoor vrijkomen, meteen afgevoerd.

Koken vervuilt de lucht, ook als je niets ruikt

Koken is een belangrijke bron van luchtvervuiling binnenshuis. Bij een gasfornuis komen door verbranding stoffen vrij zoals stikstofdioxide (NO₂) en ultrafijne deeltjes. Ook bij elektrisch koken ontstaat fijnstof, vooral door het bak- en braadproces zelf. Je ruikt dat niet altijd, maar je ademt het wel in.

Daarom is het verstandig om de afzuigkap na het koken nog een tijdje te laten draaien. Damp en deeltjes die nog in de lucht zweven, worden dan alsnog afgevoerd of gefilterd. Houd daarbij wel rekening met het type kap. Bij een afvoerkap verdwijnt de lucht via een kanaal naar buiten. Bij een recirculatiekap gaat de lucht door filters en keert daarna terug de ruimte in – dat helpt goed tegen geuren, maar de vervuilde lucht verdwijnt niet volledig uit je woning.

Afvoer naar buiten of recirculatie: waar let je op?

Bij een afvoerkap naar buiten wil je vooral dat de luchtstroom sterk genoeg is en dat de lucht zo goed mogelijk kan worden afgevoerd. Is het afvoerkanaal extra lang en/of zitten er bochten in, dan gaat het afvoeren minder goed. Ook viezigheid in de afvoerbuis kan het afvoeren van de kookdampen belemmeren. Daarnaast maakt de vorm en diameter van het kanaal uit: een ronde buis geeft minder weerstand dan een rechthoekige, en een bredere diameter laat meer lucht door. Zeker bij de installatie van een nieuwe kap is het de moeite waard om hier rekening mee te houden.

Bij een recirculatiekap wordt de lucht niet naar buiten afgevoerd, maar intern gereinigd en daarna weer de ruimte in geblazen. De lucht passeert daarbij achtereenvolgens een vetfilter en een koolstoffilter. Vetfilters vangen het vet op dat vrijkomt bij het koken. Koolstoffilters absorberen geurstoffen, maar raken na verloop van tijd verzadigd en moeten dan worden vervangen. Zorg ook dat de filters goed gemonteerd zijn zodat de lucht er echt doorheen stroomt en niet erlangs.

©wertinio

De papiertest: hoe goed werkt jouw afzuigkap nog?

Twijfel je of je afzuigkap nog wel goed werkt? Je kunt dit makkelijk testen met een velletje keukenpapier of een A4-tje. Zet de afzuigkap op de middelste stand en houd het papier tegen de filters aan. Als de zuigkracht voldoende is, moet het papier zonder hulp blijven hangen. Valt het velletje direct naar beneden? Dan is de luchtstroom te laag. Dat kan komen doordat de filters verstopt zijn of is de motor niet krachtig genoeg meer is.

Handige tips

Niet iedereen zit te wachten op het monotone gebrom van een afzuigkap tijdens een gezellig diner. Gelukkig hoeft de kap na het koken niet op de hoogste stand te staan. De laagste stand is vaak al voldoende om de laatste restanten vieze lucht af te voeren. Veel moderne apparaten hebben een timer die na tien of vijftien minuten automatisch uitschakelt. Heb je die niet? Zet dan een kookwekker of wen jezelf aan om de kap pas uit te doen als je de tafel afruimt. Het resultaat is een huis dat niet alleen fris ruikt, maar waar de lucht ook echt schoon is.

▼ Volgende artikel
Kingdom Come: Deliverance 2 vanaf 3 maart op Xbox Game Pass
Huis

Kingdom Come: Deliverance 2 vanaf 3 maart op Xbox Game Pass

Microsoft heeft de Xbox Game Pass-toevoegingen van de rest van februari en begin maart aangekondigd. Daaronder valt ook de geprezen game Kingdom Come: Deliverance 2.

De line-up werd via Xbox Wire aangekondigd. Het eerste deel in de openwereldreeks waarin spelers een middeleeuws avontuur beleven kwam enkele dagen geleden al naar Xbox Game Pass, zo werd eerder deze maand aangekondigd. Dat het vervolg - dat vorig jaar verscheen - al zo kort daarna op Game Pass verschijnt, mag dus een verrassing heten.

Hieronder zijn de toevoegingen van de komende weken te vinden, waaronder twee spellen die al sinds gisteren op Xbox Game Pass zijn verschenen:

Aerial Knight’s DropShot (Xbox Series-consoles, pc, cloud en handheld) – Sinds gisteren speelbaar via Game Pass Ultimate, PC Game Pass

Avatar: Frontiers of Pandora (Xbox Series-consoles, pc, cloud en handheld) – Sinds gisteren speelbaar via Game Pass Ultimate, PC Game Pass

Avowed (Xbox Series-consoles, pc en cloud) – Sinds gisteren ook speelbaar via Xbox Game Pass Premium

Death Howl (Xbox Series-consoles, pc, cloud en handheld) – Vanaf 19 februari speelbaar via Game Pass Ultimate, Premium, PC Game Pass

EA Sports College Football 26 (Xbox Series-consoles en cloud) – Vanaf 19 februari speelbaar via Game Pass Ultimate

The Witcher 3: Wild Hunt – Complete Edition (console en cloud) – Vanaf 19 februari speelbaar via Game Pass Ultimate, Premium

TCG Card Shop Simulator (Game Preview) (Xbox Series-consoles, pc, cloud en handheld) – Vanaf 24 februari speelbaar via Game Pass Ultimate, Premium, PC Game Pass

Dice A Million (pc) – Vanaf 25 februari speelbaar via Game Pass Ultimate, PC Game Pass

Towerborne (volledige versie) (console, pc en handheld) – Vanaf 26 februari speelbaar via Game Pass Ultimate, Premium, PC Game Pass

Final Fantasy 3 (Xbox Series-consoles, pc en cloud) – Vanaf 3 maart speelbaar via Game Pass Ultimate, Premium, PC Game Pass

Kingdom Come: Deliverance 2 (Xbox Series-consoles, pc en cloud) – Vanaf 3 maart speelbaar via Game Pass Ultimate, Premium, PC Game Pass

Microsoft heeft daarnaast laten weten dat de volgende games op 28 februari van Xbox Game Pass verdwijnen:

  • Monster Train (console, pc en cloud)

  • Expeditions: A MudRunner Game (console, pc en cloud)

  • Injustice 2 (console, pc en cloud)

  • Middle Earth: Shadow of War (console, pc en cloud)

View post on X