IoT-0/IoT bouwstenen: verschil tussen versies

Uit Inf2019
Naar navigatie springen Naar zoeken springen
(Nieuwe pagina aangemaakt met '{{Zijbalk IoT-0}} == De bouwstenen van het Internet of Things == Wat zijn de belangrijkste bouwstenen van het Internet of Things (IoT)? Waardoor maakt het IoT nu...')
 
 
(22 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 5: Regel 5:
Wat zijn de belangrijkste bouwstenen van het Internet of Things (IoT)? Waardoor maakt het IoT nu zo'n grote sterke ontwikkeling door?
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.  
Het Internet of Things koppelt de fysieke wereld van de "dingen" aan de virtuele wereld van het internet. De koppeling aan een "ding" is een IoT-knoop.
Je gebruikt ''sensoren en actuatoren'' om deze "dingen" te monitoren (bewaken) en te besturen.
Je gebruikt hierin ''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.  
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.
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.
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) een IoT-knoop, voor des te meer "dingen" je deze 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 IoT-keten: van sensoren en actuatoren tot beslissingen ===
 
Een IoT-toepassing omvat een keten van onderdelen, van sensoren en actuatoren 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 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;
* het aantal IoT-knopen in een toepassing kun 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 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 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 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.
* de verschillen tussen "dingen" zijn veel groter dan de verschillen tussen mensen: het IoT is veel heterogener dan het web.
=== Bouwstenen van de IoT-keten ===


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:
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:
Regel 32: Regel 36:


=== IoT-knopen ===
=== IoT-knopen ===
{{MarginalNote|link=:{{FULLPAGENAME}}/Een andere versie van Moore's Law|title=Een andere versie van Moore's Law}}
{{MarginalNote|link=:{{FULLPAGENAME}}/Een andere versie van Moore's Law|title=Een andere versie van Moore's Law}}
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:
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;
* sensoren, om in de fysieke wereld te meten;
Regel 45: Regel 47:


=== Voorbeeld van een IoT-knoop ===
=== Voorbeeld van een IoT-knoop ===
[[Bestand:Iotnode-simulator-0.png|300px|right|IoT-knoop simulator]]


In de voorbeelden gebruiken we een IoT-knoop met de volgende sensoren/actuatoren:
In de voorbeelden gebruiken we een IoT-knoop met de volgende sensoren/actuatoren:
Regel 50: Regel 53:
* twee drukknoppen - als "event" sensoren
* twee drukknoppen - als "event" sensoren
* sensoren voor: temperatuur, luchtdruk en lichtniveau
* 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:
Voor de draadloze communicatie gebruiken we verschillende radio's en protocollen:
* WiFi - voor gebruik in het lokale WiFi-netwerk
* WiFi - voor gebruik in het lokale WiFi-netwerk (voor IoT-knopen met meer "power");
* RFM69 - voor een lokaal netwerk gescheiden van het WiFi-netwerk
* RFM69 - voor low-power IoT-knopen met een lokaal bereik (50-200m); gescheiden van het lokale WiFi-netwerk
* LoRa - voor een netwerk met groot bereik
* LoRa - voor low-power IoT-knopen een netwerk met groot bereik (tot enkele km's).
In deze laatste twee gevallen hebben we een ''gateway'' nodig voor de verbinding van de IoT-knoop met het lokale netwerk of met het publieke internet.


Voor de microcontroller voor de besturing zijn er ook meerdere alternatieven: Arduino/Atmega, ESP8266, ESP32, ARM.
Voor de microcontroller voor de besturing zijn er ook meerdere alternatieven: Arduino/Atmega, ESP8266, ESP32, ARM.
Regel 61: Regel 64:


We voeden de IoT-knopen gewoonlijk met een batterij; een USB powerbank kan een handige oplossing zijn.
We voeden de IoT-knopen gewoonlijk met een batterij; een USB powerbank kan een handige oplossing zijn.
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 (MQTT-)communicatie als de hardware-IoT-knopen.


=== Gateway - van IoT-knoop naar internet ===
=== Gateway - van IoT-knoop naar internet ===
Regel 72: Regel 77:
==== Gateway versus bridge ====
==== 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.
We maken hier onderscheid tussen ''gateways'' en ''bridges'': een bridge verbindt netwerken met eenzelfde protocol(stack), een gateway verbindt 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.
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.
Regel 83: Regel 88:
[[Bestand:MQTT.png|500px|right|MQTT voorbeeld]]
[[Bestand:MQTT.png|500px|right|MQTT voorbeeld]]


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 (....):
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 voor het IoT is MQTT (Message Queuing Telemetry Transport; zie https://en.wikipedia.org/wiki/MQTT, http://mqtt.org):
* MQTT is een publish/subscribe-protocol, waarbij een MQTT-broker als tussenschakel fungeert tussen de clients;
* 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"
* een client "pusht" een bericht naar de broker, die het vervolgens naar andere clients "pusht"
Regel 97: Regel 102:
=== NodeRed - voor het samenknopen van protocollen, data en diensten ===
=== NodeRed - voor het samenknopen van protocollen, data en diensten ===


[[Bestand:IoT-NodeRed-0.png|500px|right|NodeRed]]
[[Bestand:Nodered-chat-flow.png|500px|right|NodeRed Chat flow]]


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.
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 vaak verschillende protocollen en formaten. Met NodeRed knoop je deze verschillende onderdelen samen, op een grafische manier.


<div style="clear:both;"></div>
<div style="clear:both;"></div>
Regel 112: Regel 117:
<div style="clear:both;"></div>
<div style="clear:both;"></div>


== Voorbeelden van IoT-(deel)ketens ==
== Opdrachten ==
 
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 ===


[[Bestand:IoT-webserver-0.png|300px|right|IoT-knoop als webserver]]
=== Opdracht 1: een eerste IoT-keten ===


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.
Een eerste voorbeeld van een IoT-keten, van IoT-knoop tot toepassings ("app") bestaat uit de volgende onderdelen:
* een gesimuleerde IoT-knoop  
** http://infvopedia.nl:1884/iotnode-app-1.html
* een MQTT-broker in het publieke internet;
* het programma MQTT0 (of MQTT1), waarmee je het mqtt-verkeer van de sensor kunt bekijken.
** http://infvopedia.nl:1884/mqtt1.html


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.
Voer de onderstaande stappen uit:
# open de gesimuleerde IoT-knoop op in een browservenster
# open het programma MQTT1 in een ander browservenster
## deze opzet werkt het best met twee browservensters naast elkaar.
# voer in het "IoT-node"-venster van MQTT1 de nodeID in van de gesimuleerde IoT-knoop
# verander één van de sliders van de IoT-knoop
## je ziet nu de berichten met de nieuwe waarde langskomen, en de waarden bovenin in tabelvorm verschijnen.
# druk in MQTT1 op de knop om de LED (led0) aan (of uit) te zetten
## je ziet in de gesimuleerde IoT-knoop de linker LED aan (of uit) gaan.
# druk één van de knoppen op de IoT-knoop in
## wat gebeurt er?


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").
Opmerkingen:
* Mogelijk zie je ook berichten van andere IoT-knopen langskomen: die gebruiken dezelfde MQTT-broker,
en via <code>subscribe: +/+/+</code> ontvangt MQTT1 de berichten van alle knopen.
* De IoT-knoop-simulator verstuurt ca. elke 50 seconden de waarden van de lokale sensoren; dit zullen we later ook bij de hardware-IoT-knopen zien.
* je kunt meerdere (gesimuleerde) IoT-knopen hebben met dezelfde node-ID: deze zijn op het MQTT-niveau niet van elkaar te onderscheiden.


<div style="clear:both;"></div>
=== Opdracht 2: een tweede IoT-keten ===


=== IoT-knoop met publieke MQTT-broker ===
Verder uitwerken - ook de infrastructuur.
 
[[Bestand:IoT-nobridge-0.png|500px|right|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.
 
 
<div style="clear:both;"></div>
 
=== IoT-knoop met lokale broker als bridge ===
 
[[Bestand:IoT-MQTT-bridge-0.png|500px|right|IoT-knoop met lokale MQTT broker/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.
 
 
<div style="clear:both;"></div>
 
=== IoT-knoop met lokale gateway ===
 
[[Bestand:IoT-lokale-gateway-0.png|500px|right|IoT-knopen 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.
 
<div style="clear:both;"></div>
 
=== Iot-knoop met publieke gateway ===
 
[[Bestand:IoT-publieke-gateway-0.png|500px|right|IoT-knopen 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.
 
<div style="clear:both;"></div>
 
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.
* gebruik van een IoT-dashboard
* mogelijk: gebruik van een IoT-dashboard?
** NB: uiteindelijk moeten we een dashboard zien te bieden waarin meerdere sensoren/IoT-knopen gecombineerd worden?
** 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 gegeven knopen (elders)

Huidige versie van 24 mei 2018 om 16:07

IoT voor gebruikers
Netwerken-IoT
  1. Inleiding IoT
  2. IoT bouwstenen
  3. IoT ketens
  4. NodeRed
  5. Knoop met webserver
  6. MQTT met publieke broker
  7. MQTT met lokale broker
  8. LoRa netwerken
  9. RFM69 communicatie
Netwerken

Zie ook Netwerken-project

Zie ook Regels en richtlijnen
Zie ook Artikelen bewerken

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. De koppeling aan een "ding" is een IoT-knoop. Je gebruikt hierin 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) een IoT-knoop, voor des te meer "dingen" je deze kunt gebruiken.

De IoT-keten: van sensoren en actuatoren tot beslissingen

Een IoT-toepassing omvat een keten van onderdelen, van sensoren en actuatoren 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;
  • het aantal IoT-knopen in een toepassing kun 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.

Bouwstenen van de IoT-keten

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

IoT-knoop simulator

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

Voor de draadloze communicatie gebruiken we verschillende radio's en protocollen:

  • WiFi - voor gebruik in het lokale WiFi-netwerk (voor IoT-knopen met meer "power");
  • RFM69 - voor low-power IoT-knopen met een lokaal bereik (50-200m); gescheiden van het lokale WiFi-netwerk
  • LoRa - voor low-power IoT-knopen een netwerk met groot bereik (tot enkele km's).

In deze laatste twee gevallen hebben we een gateway nodig voor de verbinding van de IoT-knoop met het lokale netwerk of met het publieke internet.

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.

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 (MQTT-)communicatie als de hardware-IoT-knopen.

Gateway - van IoT-knoop naar internet

IoT-gateway

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 onderscheid tussen gateways en bridges: een bridge verbindt netwerken met eenzelfde protocol(stack), een gateway verbindt 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

MQTT voorbeeld

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 voor het IoT is MQTT (Message Queuing Telemetry Transport; zie https://en.wikipedia.org/wiki/MQTT, http://mqtt.org):

  • 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

NodeRed Chat flow

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 vaak verschillende protocollen en formaten. Met NodeRed knoop je deze verschillende onderdelen samen, op een grafische manier.

Server - met web-app (dashboard)

Voorbeeld van een 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.

Opdrachten

Opdracht 1: een eerste IoT-keten

Een eerste voorbeeld van een IoT-keten, van IoT-knoop tot toepassings ("app") bestaat uit de volgende onderdelen:

Voer de onderstaande stappen uit:

  1. open de gesimuleerde IoT-knoop op in een browservenster
  2. open het programma MQTT1 in een ander browservenster
    1. deze opzet werkt het best met twee browservensters naast elkaar.
  3. voer in het "IoT-node"-venster van MQTT1 de nodeID in van de gesimuleerde IoT-knoop
  4. verander één van de sliders van de IoT-knoop
    1. je ziet nu de berichten met de nieuwe waarde langskomen, en de waarden bovenin in tabelvorm verschijnen.
  5. druk in MQTT1 op de knop om de LED (led0) aan (of uit) te zetten
    1. je ziet in de gesimuleerde IoT-knoop de linker LED aan (of uit) gaan.
  6. druk één van de knoppen op de IoT-knoop in
    1. wat gebeurt er?

Opmerkingen:

  • Mogelijk zie je ook berichten van andere IoT-knopen langskomen: die gebruiken dezelfde MQTT-broker,

en via subscribe: +/+/+ ontvangt MQTT1 de berichten van alle knopen.

  • De IoT-knoop-simulator verstuurt ca. elke 50 seconden de waarden van de lokale sensoren; dit zullen we later ook bij de hardware-IoT-knopen zien.
  • je kunt meerdere (gesimuleerde) IoT-knopen hebben met dezelfde node-ID: deze zijn op het MQTT-niveau niet van elkaar te onderscheiden.

Opdracht 2: een tweede IoT-keten

Verder uitwerken - ook de infrastructuur.

  • 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)