Internet of Things/Protocollen: verschil tussen versies

Uit Lab
Naar navigatie springen Naar zoeken springen
(Nieuwe pagina aangemaakt met '== Protocollen voor het Internet of Things ==')
 
Geen bewerkingssamenvatting
 
Regel 1: Regel 1:
== Protocollen voor het Internet of Things ==
== Inleiding ==
 
In dit gedeelte behandelen we de protocollen en interfaces voor het Internet of Things. We gaan er vanuit dat de basisprotocollen en interfaces van het internet en van het web bekend zijn. De beschrijving die we hier geven is in eerste instantie gericht voor IoT-toepassingen. Voor een vollediger beschrijving van de interfaces en protocollen verwijzen we naar de literatuur elders.
 
In de IoT-keten gebruiken we het HTTP-protocol voor de communicatie tussen de webserver en de (browser)clients. We vullen dit aan met het websockets protocol. De communicatie met sensornodes stelt andere eisen dan de communicatie tussen browser en webserver. Een geschikt protocol daarvoor is MQTT.
 
In de hele IoT-keten worden nogal wat verschillende protocollen en interfaces gebruikt. Een programma als NodeRed is dan erg geschikt: hiermee kun je allerlei onderdelen met verschillende protocollen en interfaces aan elkaar koppelen.
 
We behandelen een voorbeeld van een IoT-toepassing in een aantal stappen. We proberen hierbij geschikte keuzes te maken voor de interfaces en protocollen. De gekozen oplossingen worden veel gebruikt, maar deze vormen zeker niet de enige mogelijkheid. Het gaat in dit bestek te ver om alle mogelijke alternatieven te behandelen. Bovendien is het IoT nog sterk in beweging: de komende jaren kunnen ook op het gebied van protocollen en interfaces nieuwe ontwikkelingen plaatsvinden.
 
[[Bestand:IoT-arch-v1b.png|600px|IoT-keten]]
 
== HTTP; JSON; REST ==
 
HTTP is het basisprotocol van het web. Een HTTP-interactie tussen een client (browser) en een server bestaat uit een verzoek (request) vanuit de client aan de server, gevolgd door een response van de server aan de client. Het is een 1-op-1 communicatie, waarbij het initiatief altijd bij de client ligt. Het HTTP-protocol wordt ook gebruikt tussen servers onderling. In het IoT kan een IoT-server (bijvoorbeeld gebaseerd op NodeRed) een verzoek sturen naar een andere server.
 
De HTTP-response kan bestaan uit een html-document, dat door de browser weergegeven wordt als een webpagina. Voor documenten die de webpagina (webtoepassing) aanvullen wordt vaak het JSON-formaat gebruikt. Ook voor de communicatie tussen servers onderling wordt vaak dit JSON-formaat gebruikt.
 
* [[/HTTP]]
* [[/REST]]
* [[/JSON]]
 
== Websockets ==
 
Websockets is een protocol voor het web, als aanvulling op HTTP. Het websockets protocol gebruikt een bidirectionele verbinding tussen client en server, waarover in beide richtingen berichten verstuurd kunnen worden, met een lage overhead per bericht. Deze bidirectionele verbinding maakt "push"berichten vanuit de server mogelijk. Het initiatief van het bericht ligt dan bij de server; de client ontvangt het bericht op een willekeurig moment, als ''event''.
 
Voor een IoT-webtoepassingen heb je een bidirectionele verbinding nodig, bijvoorbeeld om sensor-gegevens naar de client (browser) te sturen. Het websockets protocol is hiervoor een geschikte keuze.
 
* [[/websockets]]
 
== MQTT ==
 
MQTT wordt in het Internet of Things vooral gebruikt voor de berichten van en naar de sensor/actuatornodes. MQTT gebruikt het Publish/Subscribe-principe voor deze berichten. De communicatie verloopt via een MQTT-broker die de "publishers" en de "subscribers" koppelt. Dit zorgt voor een flexibele koppeling tussen deze nodes en de rest van de IoT-keten.
 
* [[/MQTT]]
 
== Samenvatting ==
 
{| class="wikitable"
! HTTP !! websockets !! MQTT
|-
| client-server || client-server || client-broker-client
|-
| request/response || berichten (bi-directioneel) || berichten (bi-directioneel)
|-
| 1-1              || 1-1                        || N-M
|-
| pull (vanuit client: GET) <br>
push (vanuit client: POST, PUT)
| push (vanuit client en server) || push (vanuit client en broker)
|-
| eenmalig          || verbinding || verbinding
|-
| grote overhead/request&response || kleine overhead/bericht || kleine overhead/bericht
|}
 
== Opdrachten ==
 
* [[/Opdrachten]]

Huidige versie van 24 nov 2016 om 09:11

Inleiding

In dit gedeelte behandelen we de protocollen en interfaces voor het Internet of Things. We gaan er vanuit dat de basisprotocollen en interfaces van het internet en van het web bekend zijn. De beschrijving die we hier geven is in eerste instantie gericht voor IoT-toepassingen. Voor een vollediger beschrijving van de interfaces en protocollen verwijzen we naar de literatuur elders.

In de IoT-keten gebruiken we het HTTP-protocol voor de communicatie tussen de webserver en de (browser)clients. We vullen dit aan met het websockets protocol. De communicatie met sensornodes stelt andere eisen dan de communicatie tussen browser en webserver. Een geschikt protocol daarvoor is MQTT.

In de hele IoT-keten worden nogal wat verschillende protocollen en interfaces gebruikt. Een programma als NodeRed is dan erg geschikt: hiermee kun je allerlei onderdelen met verschillende protocollen en interfaces aan elkaar koppelen.

We behandelen een voorbeeld van een IoT-toepassing in een aantal stappen. We proberen hierbij geschikte keuzes te maken voor de interfaces en protocollen. De gekozen oplossingen worden veel gebruikt, maar deze vormen zeker niet de enige mogelijkheid. Het gaat in dit bestek te ver om alle mogelijke alternatieven te behandelen. Bovendien is het IoT nog sterk in beweging: de komende jaren kunnen ook op het gebied van protocollen en interfaces nieuwe ontwikkelingen plaatsvinden.

IoT-keten

HTTP; JSON; REST

HTTP is het basisprotocol van het web. Een HTTP-interactie tussen een client (browser) en een server bestaat uit een verzoek (request) vanuit de client aan de server, gevolgd door een response van de server aan de client. Het is een 1-op-1 communicatie, waarbij het initiatief altijd bij de client ligt. Het HTTP-protocol wordt ook gebruikt tussen servers onderling. In het IoT kan een IoT-server (bijvoorbeeld gebaseerd op NodeRed) een verzoek sturen naar een andere server.

De HTTP-response kan bestaan uit een html-document, dat door de browser weergegeven wordt als een webpagina. Voor documenten die de webpagina (webtoepassing) aanvullen wordt vaak het JSON-formaat gebruikt. Ook voor de communicatie tussen servers onderling wordt vaak dit JSON-formaat gebruikt.

Websockets

Websockets is een protocol voor het web, als aanvulling op HTTP. Het websockets protocol gebruikt een bidirectionele verbinding tussen client en server, waarover in beide richtingen berichten verstuurd kunnen worden, met een lage overhead per bericht. Deze bidirectionele verbinding maakt "push"berichten vanuit de server mogelijk. Het initiatief van het bericht ligt dan bij de server; de client ontvangt het bericht op een willekeurig moment, als event.

Voor een IoT-webtoepassingen heb je een bidirectionele verbinding nodig, bijvoorbeeld om sensor-gegevens naar de client (browser) te sturen. Het websockets protocol is hiervoor een geschikte keuze.

MQTT

MQTT wordt in het Internet of Things vooral gebruikt voor de berichten van en naar de sensor/actuatornodes. MQTT gebruikt het Publish/Subscribe-principe voor deze berichten. De communicatie verloopt via een MQTT-broker die de "publishers" en de "subscribers" koppelt. Dit zorgt voor een flexibele koppeling tussen deze nodes en de rest van de IoT-keten.

Samenvatting

HTTP websockets MQTT
client-server client-server client-broker-client
request/response berichten (bi-directioneel) berichten (bi-directioneel)
1-1 1-1 N-M
pull (vanuit client: GET)

push (vanuit client: POST, PUT)

push (vanuit client en server) push (vanuit client en broker)
eenmalig verbinding verbinding
grote overhead/request&response kleine overhead/bericht kleine overhead/bericht

Opdrachten