4.4. MQTT: het protocol#
MQTT gebruikt zoals gezegd Publish/Subscribe als interactiemodel. Hieronder bespreken we een aantal andere aspecten van het MQTT-protocol: payload, adressering, metadata, en de plaats in de protocolstack.
4.4.1. Adressering: topic#
Door middel van een topic adresseert een MQTT-client de berichtenstroom voor een publish- of subscribe-actie.
Een MQTT-topic bestaat uit een aantal strings gekoppeld door /
,
bijvoorbeeld abd
, abc/def
, abc/123/def
.
Dit lijkt op de padnaam in een URL.
Bij een subscribe kun je in de topic-string ook wildcards opnemen:
+
staat voor een willekeurige string zonder/
;#
voor een willekeurige string waarin ook het koppelteken/
mag voorkomen.voorbeeld:
node/+/sensors
past opnode/12/sensors
ennode/432/sensors
.voorbeeld:
node/#
past opnode/12/sensors
ennode/432/led
Gebruik van topics in de voorbeelden
We gebruiken in de software bij deze module een aantal vaste afspraken voor MQTT-topics. Hierdoor kunnen we de verschillende soorten IoT-knopen combineren met de verschillende toepassingen.
voor sensoren:
node/<nodeid>/sensors
voor actuatoren:
node/<nodeid>/actuators
Hierin is <nodeid>
de identificatie (string) van de IoT-knoop.
4.4.2. Payload: bytes/string/JSON#
Er is geen vast voorgeschreven payload-formaat voor MQTT. Een formaat dat veel gebruikt wordt is JSON: JavaScript Object Notation. Dit is een tekst-gebaseerd formaat voor objecten. Ook in de voorbeelden gebruiken we JSON als MQTT-payload.
4.4.3. Metadata#
MQTT biedt geen metadata, anders dan het topic. In een volgende versie van MQTT (v5) krijgt de gebruiker de mogelijkheid om, naast de eigenlijke payload, metadata mee te sturen - te vergelijken met HTTP-headers.
4.4.4. Protocolstack#
MQTT gebruikt het TCP-protocol, voor beveiligde verbindingen aangevuld met TLS;
omdat het WiFI-IoT-device de IP-protocolstack gebruikt hoeft de WiFi-gateway alleen het IP-protocol te implementeren. Er is geen protocolconversie nodig.