4.9. MQTT-opdrachten#
Wat heb je nodig?
MQTT broker in publieke internet, bijvoorbeeld:
infvopedia.nl:1883
;de app MQT3 (http://infvopedia.nl/mqt3.html, zie ook MQT3)
zo mogelijk: hardware IoT-knoop,
met software:
wifi-node-xd
;geconfigureerd voor het lokale WiFi-netwerk en de MQTT-broker, zie hieronder;
de ID van de knoop bestaat uit de laatste 4 cijfers van het MAC-adres; deze ID staat ook op de knoop zelf.
met een extra led (led1)
als alternatief: een gesimuleerde IoT-knoop, via http://infvopedia.nl/iotnode-app.html.
4.9.1. MQTT-chat#
(stap 1) Je kunt met MQTT met elkaar chatten, via de MQT3-app in je browser.
Spreek af welk topic je gebruikt voor de communicatie, bijvoorbeeld
chat
Stel dit topic in bij de beide topic-vensters: voor het ontvangen (subscribe) en voor het verzenden (publish) van de berichten.
Als je nu in de ene browser in de app een bericht invoert en publiceert, zie je dit in de andere browsers in de app verschijnen.
(stap 2) Een nadeel van deze aanpak is dat je niet kunt zien van wie een bericht afkomstig is. Dit kun je oplossen door de naam van de afzender in het topic op te nemen:
vul als subscribe-topic een wildcard-topic in, bijvoorbeeld
chat/+
. Deze+
matcht met een willekeurige string.vul als publish-topic een topic in met daarin de naam van de afzender, bijvoorbeeld
chat/frans
.je ziet dan bij de ontvangen berichten steeds de naam van de afzender in het topic.
Je moet er in dit geval wel op vertrouwen dat iedereen zijn eigen naam invult: je kunt de afzender in het topic niet authenticeren.
4.9.2. Knoop volgen#
In deze opdracht gebruik je MQT3 om het verkeer van een bestaande IoT-knoop te volgen,
en om de sensordata netjes weer te geven.
Voor de communicatie tussen MQT3 en de IoT-knoop met ID xxxx
gebruiken we de volgende topics:
node/xxxx/sensors
- voor de sensorwaardennode/xxxx/actuators
- voor de actuatorwaarden.
Met het wildcard-topic node/+/+
ontvang je alle sensor/actuatorwaarden van alle knopen.
Er is geen standaard die de vorm van deze topics afdwingt: het is een eigen, praktische keuze.
Deze keuze gebruiken we in de IoT-knopen en in de toepassingen (apps).
(stap 1) Eerst moeten we de ID van een bestaande knoop zien te vinden. Dit doen we door voor het subscribe-veld een wildcard-topic in te vullen.
vul als subscribe-topic in:
node/+/sensors
;je krijgt nu de sensor-berichten te zien van alle knopen die deze broker gebruiken.
kies hiervan een knoop die je regelmatig langs ziet komen, en bepaal de ID xxxx (uit
node/xxxx/sensors
).
Als je een hardware-IoT-knoop hebt, dan staat de ID waarschijnlijk op de knoop zelf. De node-ID bestaat uit de laatste 4 tekens van het MAC-adres. Controleer of je knoop actief is: er moeten dan regelmatig JSON-berichten langskomen in het subscribe-venster (bijvoorbeeld elke 1-2 minuten).
(stap 2) We willen de sensordata weergeven in het bovenste deel van MQT3.
vul bij
IoT-node
de ID in van je gekozen knoop.vul als subscribe-topic in:
node/xxxx/+
(waarinxxxx
staat voor de gekozen ID). je ziet dan alle sensor- en actuator-berichten van deze IoT-knoop verschijnen.na enige tijd verschijnen de waarden van de sensoren in tabelvorm; in het subscribe-venster zie je deze in JSON-vorm.
Verduister de knoop (bijvoorbeeld met een doekje). Controleer dat het volgende sensor-bericht van de knoop een andere waarde voor de analoge input (LDR) geeft.
Om over na te denken:
hoe weet je wat de eigenschap (het veld)
"temperature"
voorstelt?
4.9.3. Knoop besturen#
Via MQT3 kun je de LED(s) van de knoop xxxx
aansturen.
(stap 1) Aansturen van led0
:
vul als
subscribe to topic
in:node/xxxx/+
(waarinxxxx
staat voor de gekozen ID);met de knoppen bovenin kun je
led0
aan- en uitschakelen;controleer bij de sensorwaarden of deze led inderdaad uit- en uitgaat.
ga in het subscribe-venster na welke berichten langskomen als je een knop indrukt, voor de actuatoren (leds) en voor de sensoren. (a) Welk bericht stuurt de knop On? met welk topic? (b) En welk bericht stuurt de knop Off?
Als de (hardware) IoT-knoop xxxx
in je buurt is, kun je controleren of de LED aan- en uitgaat.
(stap 2) Je kunt led1
“met de hand” aansturen.
Door de juiste JSON-berichten te sturen naar het actuator-topic van je knoop,
kun je ook de andere led besturen.
vul als
publish to topic
in:node/xxxx/actuators
(waarinxxxx
staat voor de gekozen ID)vul in het
publish
-veld in: het bericht dat je gevonden hebt onder (4a) hierboven, aangepast aanled1
.klik op “Publish”
controleer de berichten die langskomen in het subscribe-venster, en de status van
led1
in de sensortabel.schakel beide leds uit (of aan) met één enkel JSON-bericht.
4.9.4. JSON in het IoT#
Het JSON-formaat wordt in het Internet of Things op meerdere plaatsen gebruikt. In het materiaal van deze module gebruiken we dit ook nog voor:
importeren en exporteren van NodeRed-flows;
berichten van TTN gateways (via MQTT);
payload voor HTTP REST-API’s.
Zoek op het web naar een ander voorbeeld van het gebruik van JSON voor MQTT-payloads in het internet of things.
geef een verwijzing naar deze toepassing;
geef zo mogelijk een voorbeeld van een JSON-bericht uit deze toepassing;
geef zo mogelijk een voorbeeld van het bijbehorende MQTT-topic.
Opmerking. Er zijn veel verschillende IoT-platformen en IoT-dashboards die de MQTT-JSON combinatie gebruiken. Helaas is er geen standaardformaat voor de JSON-berichten en MQTT-topics.