,

MQTT laat IoT apparaten samenwerken

MQTT laat IoT apparaten samenwerken

MQTT is een technologie om apparaten met elkaar te laten samenwerken. Samen kunnen deze apparaten nuttige toepassingen uitvoeren voor bijvoorbeeld de landbouw, industrie of bij je thuis.

Domotica

Neem bijvoorbeeld het automatiseren van je huis. Om je te ontlasten van allerlei taken wil je dat je tuin automatisch beregend wordt en lampen in huis automatisch geschakeld worden. Om dit voor elkaar te krijgen heb je een aantal sensoren nodig:

  • een sensor om de vocht in de grond te meten,
  • een sensor die de weersverwachting van de dag weet,
  • een sensor die de hoeveelheid licht meet in de woonkamer.

Daarnaast heb je ook apparaten nodig die op afstand bediend kunnen worden:

  • een beregeningsapparaat om de tuin van water te voorzien, en
  • lampen in de woonkamer die draadloos geschakeld kunnen worden.

Sensoren en apparaten noemen we “devices”. Voor het gemak gaan we er in ons voorbeeld van uit dat elk device een Wifi verbinding heeft met je thuisnetwerk. In de praktijk zal niet elk device Wifi gebruiken, omdat dit nogal wat vermogen vraagt. Energie-efficiënte devices maken vaak gebruik van radiosignalen en een aparte hub om een verbinding met het thuisnetwerk te maken.

Pub-Sub

Communicatie tussen verschillende devices is nodig om een IoT toepassing te kunnen maken. Hiervoor is een zogenaamde “publish-subscribe” of pub-sub server nodig. Een pub-sub server kan je het beste vergelijken met een chat server. Een chat server heeft verschillende groepen met elk een eigen onderwerp. Mensen kunnen deelnemen aan verschillende groepen. Als iemand een bericht plaatst binnen een groep, dan kan iedereen dat bericht lezen en erop reageren.

Een IoT pub-sub server werkt op een vergelijkbare manier als een chat server. Devices kunnen inloggen op de pub-sub server en bericht lezen en schrijven op een of meerdere groepen. Een groep wordt ook wel een “topic” genoemd. Via een pub-sub server werken devices asynchroon en min of meer los van elkaar. Hierdoor kan je het IoT systeem makkelijk uitbreiden met nieuwe devices, of oude devices vervangen voor nieuwere.

Voor ons domotica voorbeeld zou een pub-sub server met de volgende topics gebruikt kunnen worden:

  • commando/tuin/beregening
  • commando/woonkamer/lamp01
  • commando/woonkamer/lamp02
  • sensor/tuin/vocht
  • sensor/tuin/weersverwachting
  • sensor/woonkamer/licht

Een topic werkt op een vergelijkbare manier als de mappen structuur op je computer. Je kan een indeling maken van een topic in een topic, om zo alle berichten van devices logisch te ordenen. Het topic commando/tuin/beregening wordt gebruikt om commando’s te sturen naar de beregeningsinstallatie. Het topic sensor/woonkamer/licht wordt gebruikt door de lichtsensor in de woonkamer om regelmatig lichtmetingen op te publiceren.

Om onze toepassing uit te werken hebben we nog een device nodig. Dit device moet de intelligentie van de toepassing uitvoeren. Bijvoorbeeld, als op het topic sensor/tuin/weersverwachting het bericht VANDAAG_GEEN_REGEN staat en op het topic sensor/tuin/vocht het bericht GROND_IS_DROOG, dan moet het bericht WATER_GEVEN worden gestuurd naar het topic commando/tuin/beregening.

Devices kunnen ook berichten naar meerdere topics tegelijk sturen. Dit is handig voor het schakelen van alle lampen in de woonkamer. Als op het topic sensor/woonkamer/licht het bericht DONKER staat, dan moet het bericht LAMP_AAN worden gestuurd naar het topic commando/woonkamer/+. In dit voorbeeld is het + teken een wildcard en vervangt lamp01 en lamp02.

MQTT

Een standard pub-sub technologie is MQTT. MQTT staat voor Message Queue Telemetry Transport. Het is een lichtgewicht protocol voor device-naar-device communicatie.

Quality-of-service

MQTT biedt naast een standaard communicatie van berichten, ook een standard voor quality-of-service (QoS) en voor security. Er zijn drie QoS niveaus die ondersteund worden door MQTT:

  • QoS 0 – Een bericht wordt maximaal een keer verzonden. De zender bewaard geen kopie en krijg ook geen bevestiging dat het bericht ontvangen is. Dit QoS niveau werkt snel, maar geeft geen garanties.
  • QoS 1 – Een bericht wordt tenminste een keer verzonden. De zender krijgt een bevestiging dat een bericht ontvangen is. Het nadeel is dat een bericht meerdere keren verzonden en ontvangen kan worden.
  • QoS 2 – Een bericht wordt precies een keer afgeleverd. Dit QoS niveau geeft de garantie dat een bericht een keer afgeleverd wordt. Dit QoS niveau heeft meer communicatie overhead.

Security

Security van een IoT toepassing is erg belangrijk, vooral als het om industriële IoT toepassingen gaat. Een hacker die berichten stuurt naar apparaten in een fabriek kan gevaarlijke situaties veroorzaken. MQTT biedt support voor Transport Layer Security (TLS). Berichten kunnen versleuteld worden en de echtheid van zowel de server als de clients (devices) kan door middel van certificaten gecontroleerd worden.

Commerciële pub-sub diensten

Bedrijven zoals Google, Amazon en Microsoft bieden allemaal pub-sub cloud diensten aan. Zo biedt Google Cloud Pub/Sub aan, Amazon AWS Pub/Sub Messaging,  en Microsoft Azure IoT hub. Daarnaast zijn er ook nog andere commerciële alternatieven, zoals PubNub, ThingSpeak en CloudMQTT. De verwachting is dat IoT de komende jaren sterk zal groeien met miljarden devices. Hierdoor zal device-naar-device communicatie sterk toenemen. Dit willen de genoemde bedrijven als betaalde dienst graag voor je afhandelen.

aiblog.nl IoT project

Op onze projecten pagina kan je meer lezen over een IoT project dat we bij aiblog.nl gestart zijn. Om de kosten te beperken hebben we gekozen om een zelf een pub-sub server te installeren. Een goede open-source MQTT server is Mosquitto. Deze server is beschikbaar voor Linux, Mac en Windows platformen. Als we later alsnog zouden overstappen naar een betaalde pub-sub service, dan kunnen we de ervaring met Mosquitto zeker gebruiken.

Naast de MQTT server is het ook handig om gebruik te maken van een kant-en-klare MQTT client library, zodat je niet zelf het MQTT protocol hoeft te implementeren. Hier zijn ook weer open-source oplossingen voor. Een oplossing is Paho. Paho levert MQTT client libraries voor een groot aantal programmeertalen, waaronder Python, Java, JavaScript, C en C++.

One Response

Geef een reactie