IoT-0/IoT bouwstenen
De bouwstenen van het Internet of Things
Wat zijn de belangrijkste bouwstenen van het Internet of Things (IoT)? Waardoor maakt het IoT nu zo'n grote sterke ontwikkeling door?
Het Internet of Things koppelt de fysieke wereld van de "dingen" aan de virtuele wereld van het internet. Je gebruikt sensoren en actuatoren om deze "dingen" te monitoren (bewaken) en te besturen. De sensoren en actuatoren bestuur je met een microcontroller: een complete computer op een chip. Je hebt communicatie nodig om deze sensoren en actuatoren in het internet te verbinden. Voor mobiele "dingen" moet deze communicatie draadloos zijn. Ook voor andere "dingen" heeft draadloze communicatie voordelen. Voor mobiele "dingen" moet ook de energievoorziening (elektriciteit) draadloos zijn: je hebt dan energiezuinige elektronica nodig, met een batterij en soms met lokale energieopwekking ("energy harvesting" of "scavenging", zoals zonnecellen). Tenslotte zijn de fysieke afmetingen en het gewicht van belang: hoe kleiner en lichter (en goedkoper) het geheel, voor des te meer "dingen" je dit kunt gebruiken.
Een IoT-toepassing omvat een keten van onderdelen, van IoT-knopen tot besluitvorming, mogelijk ondersteund door Data Science en Artificial Intelligence. Deze IoT-keten heeft andere karakteristieken dan de keten voor het web:
- de sensordata van een enkele IoT-knoop bestaan uit weinig bytes - veel minder dan de gemiddelde webpagina, en nog veel minder dan nodig voor audio en video;
- de aantallen IoT-knopen in een toepassing kunnen erg groot zijn - veel groter dan bijvoorbeeld het aantal gebruikers van een website;
- de fysieke wereld stelt soms absolute grenzen aan de latency; in de virtuele wereld is deze latency wat minder van belang;
- de resultaten van het web worden aan mensen gepresenteerd, die op basis daarvan beslissingen nemen;
- de resultaten van het IoT worden soms gebruikt om direct "dingen" te besturen, zonder menselijke tussenkomst (M2M, machine to machine).
- de verschillen tussen "dingen" zijn veel groter dan de verschillen tussen mensen: het IoT is veel heterogener dan het web.
In de IoT-keten heb je nog andere onderdelen nodig tussen de IoT-knopen en de Data Science-servers en gebruikers-apps. We komen dan in de IoT-keten meestal de volgende onderdelen tegen:
- IoT-knopen, met sensoren en actuatoren verbonden aan de fysieke wereld;
- gateways, om deze IoT-knopen aan het internet te verbinden;;
- servers (en "brokers") in het publieke internet - als publiek toegangspunt voor de data van de IoT-knopen
- servers voor diensten op het gebied van Data Science, Artificial Intelligence, visualisatie e.d.
- schakelpunten, om verschillende diensten, data en protocollen te combineren;
- protocollen om deze onderdelen te koppelen;
De IoT-knopen vormen de buitenkant ("edge") van het Internet of Things. Eén van de ontwerpvragen bij het Internet of Things is hoe het rekenwerk verdeeld moet worden over de "edge" en de kern (servers) van het IoT.
Het IoT is veel heterogener dan het web, en veel minder gestandaardiseerd. Dit betekent dat we veel verschillende oplossingen en vormen van de IoT-keten tegenkomen.
IoT-knopen
Een andere versie van Moore's Law [bewerken] |
De digitale elektronica maakt al decennia een exponentiële ontwikkeling door, volgens "Moore's Law". De exponentieel stijgende vraag uit de markt, bijvoorbeeld naar smartphones, ondersteunt deze technologische ontwikkeling.
De traditionele versie van Moore's Law gaat vooral om "meer": meer rekenkracht en meer geheugen. Bij het Internet of Things gaat het vooral om "minder": minder energie, minder gewicht, en kleiner. Ook in dit geval is een exponentiële ontwikkeling te verwachten. Het grootste probleem lijkt daarbij de energievoorziening te zijn: vooral de batterij bepaalt de omvang en het gewicht van een IoT-knoop. |
In het vervolg spreken we over IoT-knopen die de koppeling vormen tussen de fysieke en de virtuele wereld. Zo'n IoT-knoop omvat gewoonlijk:
- sensoren, om in de fysieke wereld te meten;
- actuatoren, om in de fysieke wereld te sturen;
- een microcontroller ("computer op een chip") voor de besturing van de IoT-knoop;
- communicatie, meestal draadloos (radio)
- energie, meestal in de vorm van een batterij, soms aangevuld met "energy harvesting".
De technologische voortgang op elk van deze onderdelen maakt nu kleine, lichte en (relatief) goedkope IoT-knopen mogelijk. Deze ontwikkeling zal de komende jaren nog in snel tempo voortgaan, geholpen door de grote massa van het Internet of Things. Daarnaast is ook de verwerking van IoT-data sterk verbeterd. De ontwikkelingen op het gebied van Data Science en Artificial Intelligence maken nieuwe IoT-toepassingen mogelijk. Deze ontwikkelingen versterken elkaar, en zorgen samen voor een stroomversnelling in de technologie en in de toepassingen.
Voorbeeld van een IoT-knoop
In de voorbeelden gebruiken we een IoT-knoop met de volgende sensoren/actuatoren:
- twee LEDs - als actuatoren
- twee drukknoppen - als "event" sensoren
- sensoren voor: temperatuur, luchtdruk en lichtniveau
Er is ook een app die een IoT-knoop met deze onderdelen simuleert: je moet dan zelf de sensorwaarden instellen. Deze gesimuleerde IoT-knoop gebruikt dezelfde communicatie als de hardware-IoT-knopen.
Voor de communicatie gebruiken we verschillende mogelijkheden:
- WiFi - voor gebruik in het lokale WiFi-netwerk
- RFM69 - voor een lokaal netwerk gescheiden van het WiFi-netwerk
- LoRa - voor een netwerk met groot bereik
Voor de microcontroller voor de besturing zijn er ook meerdere alternatieven: Arduino/Atmega, ESP8266, ESP32, ARM. De keuze wordt bepaald door de lokale omstandigheden, de gebruikte programmeertaal/programmeeromgeving, enz.
We voeden de IoT-knopen gewoonlijk met een batterij; een USB powerbank kan een handige oplossing zijn.
Gateway - van IoT-knoop naar internet
Meestal kunnen we de IoT-knopen niet zomaar in het internet verbinden, bijvoorbeeld doordat deze een veel eenvoudiger (radio-)protocol gebruiken. We gebruiken dan een gateway om deze IoT-knopen in het internet te verbinden. Deze gateway zet het IoT-knoop-protocol om naar het IP-protocol, en omgekeerd.
Bij een dergelijke omzetting (protocolconversie) gaat het om de complete protocolstack, tot en met de toepassing. In onze voorbeelden betekent dit meestal dat de berichten van de IoT-knopen omgezet worden naar MQTT-berichten in het formaat van de toepassing.
Gateway versus bridge
We maken hier een onderscheid tussen een gateway en een bridge: een bridge verbindt netwerken die eenzelfde protocol(stack) gebruiken, een gateway netwerken met verschillende protocollen. De omzetting in een bridge is dan beperkt tot de gemeenschappelijke onderste laag van de protocollen. Bij een gateway moet je de hele protocolstack hierbij betrekken. Een gateway is vaak (aanzienlijk) complexer dan een bridge. Bovendien hebben veranderingen in de toepassing mogelijk gevolgen voor de gateway. Voor een bridge is de toepassing niet van belang.
Ook als de IoT-knoop zelf de internet-protocolstack gebruikt kan het zinvol zijn om een bridge te gebruiken, om de lokale communicatie te scheiden van het publieke internet. Deze bridge kan er bijvoorbeeld zorgen voor de versleuteling van het verkeer naar het publieke internet.
Deze terminologie, met een duidelijk onderscheid tussen bridge en gateway, wordt niet overal op dezelfde manier gebruikt.
- Voorbeeld: de Philips Hue-bridge is eigenlijk een gateway, tussen het Zigbee protocol en het internet protocol.
MQTT - als voorbeeld van een IoT protocol
Het basisprotocol van het web is HTTP. Voor het Internet of Things is dit protocol minder geschikt: de karakteristieken van de web-communicatie verschillen van de IoT-communicatie. Voor het IoT is er geen standaardprotocol zoals HTTP voor het web. Eén van de protocollen die veel gebruikt wordt, en die geschikt is voor de communicatie-eisen van het IoT, is MQTT (....):
- MQTT is een publish/subscribe-protocol, waarbij een MQTT-broker als tussenschakel fungeert tussen de clients;
- een client "pusht" een bericht naar de broker, die het vervolgens naar andere clients "pusht"
- dit in tegenstelling tot de "pull" interactie tussen een HTTP client (browser) en server (webserver).
JSON-formaat voor berichten
Waar in het geval van HTTP HTML-documenten gecommuniceerd worden, gebruiken wij in het geval van MQTT berichten in het JSON-formaat. MQTT staat ook andere vormen van berichten toe, maar JSON is een veel gebruikte keuze.
- Websites of -apps gebruiken ook vaak JSON-documenten in de AJAX-interactie met de webserver.
NodeRed - voor het samenknopen van protocollen, data en diensten
IoT-toepassingen combineren vaak data uit verschillende bronnen: vanuit verschillende netwerken met IoT-knopen, maar ook uit andere databases of datastromen. Deze data kunnen door allerlei diensten (Data Science, Artificial Intelligence, enz.) verwerkt worden voordat deze bruikbaar zijn in een toepassing voor een gebruiker. Deze databronnen, diensten en gebruikerstoepassingen gebruiken allerlei verschillende protocollen. Met NodeRed knoop je deze verschillende onderdelen samen, op een grafische manier.
Server - met web-app (dashboard)
Een IoT-toepassing heeft vaak een gebruikersinterface, bijvoorbeeld in de vorm van een dashboard met een samenvatting van de gegevens van de IoT-knopen. In onze voorbeeld-toepassing werken we met een eenvoudig dashboard met de gegevens van één IoT-knoop. Dit dashboard maken we met NodeRed: we gebruiken deze dan als web-server. Bovendien kunnen we via dit dashboard de actuators van de IoT-knoop bedienen. Dit gebruikersinterface heeft de vorm van een webtoepassing ("app"), beschikbaar via een server in het publieke web.
Voorbeelden van IoT-(deel)ketens
In het bovenstaande hebben we de afzonderlijke onderdelen beschreven. Hieronder behandelen we een aantal voorbeelden om deze onderdelen samen te stellen tot een (deel)keten. Dit is vooral bedoeld als een eerste globale overzicht. In de volgende hoofdstukken werken we deze voorbeelden verder uit, met praktische opdrachten.
IoT-knoop als webserver
Als een IoT-knoop een ingebouwde webserver heeft kun je deze knoop direct vanuit een browser bedienen. De toepassing (web-app) komt dan van de IoT-knoop zelf. Sommige netwerkapparaten, zoals netwerkprinters en routers, gebruiken deze aanpak. De huidige microcontrollers zijn krachtig genoeg voor een kleine webserver.
Alleen apparaten in het lokale netwerk hebben toegang tot zo'n lokale webserver. Zonder extra voorzieningen is een lokale webserver niet vanuit het publieke internet toegankelijk.
Een webserver gebruikt het HTTP-protocol. De webclient (de browser) de data haalt ("pull") van de webserver. Om na te gaan of een sensorwaarde veranderd is, moet de webclient regelmatig de de webserver raadplegen ("polling").
IoT-knoop met publieke MQTT-broker
Zoals hierboven beschreven is het MQTT-protocol beter geschikt voor het IoT dan HTTP: het webprotocol. IoT-knopen met een IP-protocolstack kunnen rechtstreeks communiceren met een publieke MQTT-broker. Toepassingen (web-apps) kunnen dan via de MQTT-broker communiceren met de IoT-knoop.
IoT-knoop met lokale broker als bridge
Vaak is het handig om een lokale MQTT-broker te plaatsen tussen de lokale IoT-knopen en de publieke MQTT-broker. De IoT-knopen communiceren via het lokale (WiFi) netwerk met de lokale broker. De lokale broker communiceert met lokale toepassingen. Daarnaast fungeert de lokale broker als bridge naar de publieke MQTT-broker. Deze bridge scheidt zo het lokale IoT/MQTT-verkeer en het publieke IoT/MQTT-verkeer.
IoT-knoop met lokale gateway
Veel IoT-knopen gebruiken eenvoudige niet-IP protocollen. Een lokale gateway zorgt dan voor de protocolconversie, in dit geval tussen het lokale formaat van de IoT-knopen en het MQTT-toepassingsformaat. Deze lokale gateway verzorgt de communicatie met de publieke MQTT-broker, of met de lokale MQTT broker die ook als bridge fungeert. Als voorbeeld gebruiken we een eenvoudige pakketradio (RFM69) met een bereik van enkele honderden meters.
Iot-knoop met publieke gateway
Voor IoT-knopen die mobiel zijn in een groot gebied is het gebruik van een publieke gateway handig. Dit kun je vergelijken met het gebruik van de publieke zendmasten voor mobiele telefonie. Een voorbeeld The Things Network (TTN, op basis van LoRaWAN). De publieke TTN-gateways communiceren met een TTN-eigen server/MQTT-broker. Toepassingen (web-apps) communiceren via MQTT met deze TTN-server/broker.
We zullen in de volgende hoofdstukken deze vormen van de IoT-keten verder uitwerken.
Opdrachten
- gebruik van de IoT-knoop-simulator, in combinatie met de MQTT0-test-toepassing.
- mogelijk: gebruik van een IoT-dashboard?
- NB: uiteindelijk moeten we een dashboard zien te bieden waarin meerdere sensoren/IoT-knopen gecombineerd worden?
- gebruik van IoT-dashboard voor gegeven knopen (elders)
- gebruik van IoT-dashboard voor gesimuleerde knopen
Toetsvragen
- Wat zijn de gebruikelijke onderdelen van een IoT-knoop?
- Waar hangt de keuze voor een bepaalde radio vanaf?
- Wat is het verschil tussen een gateway en een bridge
- Wat is de functie van een IoT-gateway (o.a. protocol conversie)