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
Call of Duty: Warzone Mobile vanaf 17 april niet meer speelbaar
Huis

Call of Duty: Warzone Mobile vanaf 17 april niet meer speelbaar

De servers van Call of Duty: Warzone Mobile gaan op 17 april voorgoed offline, waardoor de game vanaf dat moment niet meer speelbaar is.

Dat heeft Activision aangekondigd. Afgelopen jaar werd de game al uit app-winkels gehaald en werd de komst van nieuwe seizoensgebonden content al stopgezet, en het voorgoed offline halen van de servers is de laatste stap in het verdwijnen van de game. Mensen kunnen tot 17 april de game gewoon blijven spelen en hun verdiende in-game geld opmaken.

"We zijn enorm dankbaar voor de spelers die Call of Duty: Warzone Mobile hebben ondersteund, alsmede de ontwikkelaars die de ervaring tot leven hebben gewekt", aldus Activision. "De passie van spelers en hun feedback blijft de toekomst van de Call of Duty-franchise vormgeven, en we kijken er naar uit om betekenisvolle seizoensgebonden content en updates naar Call of Duty: Mobile te brengen."

Call of Duty: Mobile blijft er wel

Call of Duty: Warzone Mobile kwam in 2024 beschikbaar als mobiele versie van Call of Duty: Warzone, de battle royale-game voor consoles en pc. Op die platforms blijft Warzone wel speelbaar.

Activision zei het al: voor een mobiele Call of Duty-ervaring kunnen spelers terecht bij Call of Duty: Mobile. Die game kwam in 2019 uit op smartphones en geniet nog altijd van populariteit. Call of Duty: Mobile heeft ook een battle royale-modus - waar Warzone Mobile juist om draaide - alsmede modi als reguliere multiplayer en Zombies.

Activision Blizzard - en dus ook Call of Duty - werd enkele jaren geleden overgenomen door Microsoft. Buiten het feit dat de jaarlijkse nieuwe Call of Duty-game vanaf release ook meteen op Xbox Game Pass verschijnt, heeft dat echter niet veel aan de Call of Duty-franchise veranderd. Wel leek het meest recente deel, het vorig najaar uitgekomen Call of Duty: Black Ops 7, minder populair dan voorgaande delen. Mogelijk heeft dit te maken met dat het jaar daarvoor nog Black Ops 6 uitkwam, en spelers niet zo snel op een direct vervolg zaten te wachten.

▼ Volgende artikel
Steam Deck in verschillende landen uitverkocht door geheugentekort
© Reshift Digital
Huis

Steam Deck in verschillende landen uitverkocht door geheugentekort

De Steam Deck is in verschillende landen, waaronder de Verenigde Staten, uitverkocht. Dit in verband met het tekort aan RAM-geheugen door de alsmaar toenemende populariteit van kunstmatige intelligentie.

In de Verenigde Staten en Canada raakte de Steam Deck vorige week al uitverkocht. In die landen heeft Valve, het bedrijf achter de Steam Deck, nu een waarschuwing gepubliceerd op de officiële verkoopwebsite.

Die waarschuwing praat over het tekort aan RAM-geheugen. Dit heeft alles te maken met het feit dat RAM-geheugen massaal nodig is om AI draaiende te houden. De componenten worden echter ook gebruikt in entertainmentapparaten als de Steam Deck, spelcomputers en game-pc's. Daardoor blijven prijzen stijgen en raken sommige apparaten ook uitverkocht, zoals de Steam Deck.

In Nederland is de Steam Deck met oledscherm inclusief 512 GB aan opslagruimte uitverkocht. Die versie van de pc-handheld kost normaliter 569 euro. De 1 TB-versie van 679 euro is op moment van schrijven nog wel te koop, al is niet bekend hoe lang dat nog het geval is. De lcd-versie van de Steam Deck - die voor de zachtere prijs van 419 euro te koop was - wordt niet meer geproduceerd, zo heeft Valve bevestigd.

RAM-tekorten hebben ook effect op consoles

De tekorten aan RAM-geheugen hebben niet alleen invloed op de Steam Deck, maar ook andere apparaten waarop games gespeeld kunnen worden, waaronder spelcomputers. Bedrijven als Sony en Microsoft hebben de prijzen van hun consoles eerder al verhoogd. Volgens geruchten overweegt Nintendo om de vorig jaar uitgekomen Switch 2-console ook in prijs te verhogen.

Daarnaast maakt de situatie het risicovoller voor bedrijven om nieuwe apparaten uit te brengen. Zo zou Sony intern gepland hebben om de PlayStation 6 in 2027 uit te brengen, maar volgens recente geruchten kan dit verschoven worden naar 2028 of zelfs 2029, afhankelijk van wanneer de RAM-tekorten ingeperkt worden

De toekomst van de Steam Machine

In het verlengde daarvan creëert de huidige situatie ook veel onzekerheid over de Steam Machine. Dit apparaat, dat op simpele wijze pc-games op de televisie afspeelt, werd vorig jaar aangekondigd en zou eigenlijk begin dit jaar uitkomen. Onlangs communiceerde Valve dat het inmiddels ergens in de eerste helft van dit jaar is geworden, maar het feit dat er nog geen datum of prijs bekend is doet fans vermoeden dat het zelfs nog later kan worden.

"Toen we deze producten in november aankondigden, gingen we ervan uit dat we de specifieke prijzen en lanceringsdata nu wel al hadden kunnen delen", zo stelde Valve begin deze maand. "Maar de tekorten op het gebied van geheugen- en opslagcomponenten waar onze hele bedrijfstak mee kampt, zijn sindsdien behoorlijk toegenomen.  De beperkte beschikbaarheid en oplopende prijzen van deze cruciale onderdelen hebben ons ertoe gedwongen om onze plannen voor vraagprijs en levering bij te stellen (vooral voor de Steam Machine en Steam Frame)."