IoT-0/IoT bouwstenen: verschil tussen versies

Uit Inf2019
Naar navigatie springen Naar zoeken springen
 
(4 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 58: Regel 58:
* RFM69 - voor low-power IoT-knopen met een lokaal bereik (50-200m); gescheiden van het lokale WiFi-netwerk
* 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).
* 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 met het lokale netwerk of met het publieke internet.
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 119: Regel 119:
== Opdrachten ==
== Opdrachten ==


* gebruik van de IoT-knoop-simulator, in combinatie met de MQTT0-test-toepassing.
=== Opdracht 1: een eerste IoT-keten ===
* mogelijk: gebruik van een IoT-dashboard?
 
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
 
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?
 
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.
 
=== 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?
** 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)