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
Gerucht: Nexon werkt aan Starcraft-shooter voor Blizzard
Huis

Gerucht: Nexon werkt aan Starcraft-shooter voor Blizzard

Het Zuid-Koreaanse zou een shooter gebaseerd op Starcraft in ontwikkeling hebben voor IP-eigenaar Blizzard.

Dat claimt The Korean Economic Daily. Een team binnen Nexon dat gespecialiseerd is in shooters zou zich op dit moment volledig richten op de nog onaangekondigde game. De ontwikkeling zou nog niet lang geleden zijn gestart, en dus zou de shooter nog lang op zich laten wachten.

Verdere details zijn er nog niet, behalve dat Choi Jun-ho ook bij het project betrokken zou zijn. Hij maakte eerder de populaire Shinppu-mapmod voor Starcraft.

Starcraft

Er gaan al langer geruchten over een shooter gebaseerd op Starcraft. Vorig jaar meldde Bloomberg-journalist Jason Schreier al in zijn boek 'Play Nice: The Rise, Fall and Future of Blizzard Entertainment' dat Blizzard aan een shooter zou werken. Volgens Schreier is de shooter van Nexon echter niet gerelateerd aan de shooter van Blizzard - het zouden om twee afzonderlijke projecten gaan.

De Starcraft-reeks bestaat uit real-time strategygames. De eerste verscheen in 1998, en een vervolg kwam in 2010 uit. Blizzard heeft al vaker geprobeerd shooters gebaseerd op de Starcraft-franchise te maken, maar die werden vooralsnog altijd geannuleerd.

Mogelijke onthulling op Blizzcon

Voor het eerst in enkele jaren organiseert Blizzard op 12 en 13 december de Amerikaanse beurs Blizzcon, waar alles rondom de uitgever wordt gevierd. Het is mogelijk dat één van de hierboven genoemde shooters daar wordt onthuld.

▼ Volgende artikel
Review: Mario Tennis Fever is een leuke set
Huis

Review: Mario Tennis Fever is een leuke set

Je vraagt je bij elke Mario-sportgame toch weer af: bereikt het de highs van die oeroude Game Boy-games van Camelot, zoals Mario Tennis en Mario Golf)? Het antwoord is, wat mij betreft, steevast  ‘nee’. Maar tussen ‘perfect’ en ‘niet perfect’ zit nog altijd een breed spectrum aan kwaliteit. En Fever? Die nestelt zich moeiteloos aan de betere kant van dat spectrum.

De drie toernooien die deze game rijk is, daar ben je een uurtje zoet mee. Waarschijnlijk zonder een set te verliezen. De Adventure Mode? Een paar uurtjes meer dan dat, en hoewel ook die nergens uitdagend wordt vertelt het wel een vermakelijk verhaal over Mario en Luigi die als baby’s hun tennis-skills moeten oppoetsen vanwege… bijzondere redenen.

Er zijn ook drie Challenge Towers met allerlei unieke uitdagingen die eventjes vermaken. In mix-up vinden we tennis, maar dan met regels en omstandigheden die alleen het Mushroom Kingdom kan bieden, en dat was het wel zo’n beetje. Wie Mario Tennis Fever alleen speelt is een weekend zoet en heeft zich prima vermaakt. Maar sportgames zijn er, natuurlijk, om je competitieve aard los te laten op vrienden, familie, kroost of online uitdagers.

Leuk

Daarom wil ik het ook niet al te uitgebreid over die singleplayermodi hebben. Ja, Nintendo heeft z’n best gedaan. Ja, er is weinig aan te merken op de minigames en kleine tussenscènes die de Tennis Academy te bieden heeft en de ontwikkelaars verdienen het dat het hier even aangestipt wordt. Nooit sla je stijl achterover van briljante ideeën of concepten, en er wordt geen druppeltje zweet gemorst van de spanning. Maar ‘leuk’ is eigenlijk een perfect, allesomvattend begrip om deze kant van de game te omschrijven.

De echte graadmeter echter, is de kern van de gameplay. Hoe speelt het? Hoe diep gaat het? Hoeveel personages, gekke rackets en super-power-mega-skillmoves zijn er in dit pakketje gepropt en hoe verhouden die zich tot elkaar? Na mening middag ballen overslaan of in dubbelspel terugslaan met mijn zoontje van 9, zijn we eruit: Mario Tennis Fever heeft ontzettend lekkere gameplay.

Content is king

Content is in de eerste instantie de name of the game. Er zitten bijna veertig personages in de game, meer dan een dozijn verschillende banen en de hoofdattractie is de aanwezigheid van tientallen Fever-rackets, die elk hun eigen unieke skill met zich meebrengen. De bananentros die Donkey Kong een ‘racket’ noemt strooit bananen over de baan, met het vulkaanracket plopt er een (je raadt het nooit) vulkaan op uit de baan en het Thwomb-racket zorgt ervoor dat het iconische stenen blok uit de Mario-serie plots uit de lucht valt – hopelijk op een tegenstander. Een zogeheten Fever-shot is verder ook geen hogere wiskunde. Om de zoveel tijd is je metertje vol en ram je dat ding over de baan heen.

Extra fijn is dat het gros van dit alles vrij te spelen is waar je maar wil. Laat je de singleplayermodi links liggen en speel je gewoon wat potjes tegen elkaar? Geen probleem, om de zoveel potten krijg je een nieuw racket, personage, of kleurtjes voor je favoriete tennissers.  

Watch on YouTube

Plak er een voldoende op

Enfin, tot zover de uitleg en alles wat hier te vinden is. Leuk spelletje, plak er een voldoende op en klaar, toch? Nou nee, want hoewel alles hierboven zijn eigen rol speelt, zijn het de diepere lagen daaronder die Mario Tennis  Fever tot grotere hoogten dan ‘plak er even een voldoende op’ stuwen. Al die personages? Die beschikken over hun eigen stats en eigenaardigheden. Wario laadt z’n powershots razendsnel op, Bowser Jr. legt veel meer precisie in z’n topspincurve dan anderen en Shy Guy slaat zijn topspins zonder gehinderd te worden door zijn positie op de baan.

En die banen? Die hebben elk hun eigen ondergrond, waar ballen anders op stuiteren en doorschieten, terwijl spelers zelf ook sneller of minder snel zijn, gebaseerd op het gras of het hardcourt waar ze op spelen. Die Fever-rackets? Oprecht allemaal een andere smaak. Ook daar merk dat extra stukje diepgang waar een wat luiere Mario-sportgame niet aan zou denken: wanneer je een Fever-shot terugslaat vóórdat op jouw zijde van het net landt, kun je met een stuit op de helft van de tegenstander zomaar eens het bijbehorende effect teruggeven. Prettig vervelend als je denkt die koter een modderplas op zijn helft te bezorgen, om ‘m vervolgens zelf om je oren te krijgen als hij de bal vakkundig over je heen lobt en ‘ie alsnog op jouw achterveld terecht komt. Een (modder)koekje van eigen deeg noemen ze dat geloof ik.

Mario Tennis Fever

Slide
Slide
Slide
Slide

Geen Lego, wel Duplo

Al die extra aandachtspuntjes en omstandigheden zijn ook nog eens gebouwd op een fundering van onkreukbare basisgameplay. Topspins, slices, curveballen, lobs en powershots: alles wat je van een tennisgame mag verwachten zit erin. De grote maar is alleen: het gebeurt allemaal zonder de nuance van een échte topgame. Vergelijk het een beetje met Lego en Duplo. Zelfde principe, zelfde soort blokken, maar iets vets bouwen met Lego hit net even anders dan iets vets bouwen met die grote Duplo-blokken. Zo verhoudt deze game zich ook tot de toppers uit het tennisgenre, zoals Virtua Tennis en Topspin. Is veelgevraagd, ik weet het, maar het is wel het verschil tussen goed of geweldig. En Mario Tennis Fever eindigt in het eerste kamp.

Is mijn zoontje naar school, dan heb ik namelijk geen enkele reden om Mario Tennis Fever verder te spelen. Zoals gezegd is al die singleplayercontent niet meer dan ‘even leuk’. En computergestuurde tegenstanders geven zelfs op het hoogste niveau nooit écht tegengas. Bovendien zijn de personages net te groot voor deze banen om het volgende niveau van verfijning te bereiken. Top, zo’n lob. Maar vanwege de dus relatief kleine banen blijft het geen zekerheidje dat je iemand ermee verschalkt die tegen het net aan staat. Aanzienlijke kans dat ie gewoon op tijd de achterlijn haalt, als ie ook maar een klein beetje inzicht heeft. Het zorgt ervoor dat Mario Tennis Fever een absoluut geslaagde game is, met heerlijke multiplayer. Maar wie de eindeloze diepgang en speeluren van, bijvoorbeeld, een Mario Kart World hier zoekt, staat sneller dan gewenst buitenspel. Oh wacht, verkeerd sport…

Mario Tennis Fever is vanaf 11 februari beschikbaar voor Nintendo Switch 2.

Goed
Conclusie

Mario Tennis Fever barst van de content. De vele personages, banen en rackets geven unieke, diepere lagen aan de gameplay en multiplayerpotjes gaan met grote glimlach en een berg vertier gespeeld worden. Jammer voor de wat volwassenere spelers dat die volgende laag diepgang nét niet geraakt wordt. Daarvoor is het singleplayeraanbod niet genoeg, de tegenstanders niet uitdagend genoeg en ontbreekt er hier en daar net wat finesse. Maar ga zo door, Nintendo. Mario Tennis Fever zit namelijk wél in de richting van die tijdloze Camelot-klassiekers waar we zo naar hunkeren.

Plus- en minpunten
  • Flinke hoeveelheid content en modi
  • Sterke basisgameplay
  • Uiteenlopende Fever-rackets
  • Nog altijd sterke multiplayer
  • Daagt je nooit écht uit
  • Diepgang niet eindeloos