From 3e468bfda04827973fdea4d01743d9900c55be44 Mon Sep 17 00:00:00 2001 From: JOLIMAITRE Matthieu Date: Mon, 11 Mar 2024 13:06:55 +0100 Subject: [PATCH] iot --- iot/02_standards.md | 98 +++++++++++++++++++++++++++++++++++++++++++++ iot/tp2/2/a.sh | 22 ++++++++++ iot/tp2/2/b.sh | 27 +++++++++++++ iot/tp2/2/c.sh | 36 +++++++++++++++++ iot/tp2/2/d.sh | 46 +++++++++++++++++++++ 5 files changed, 229 insertions(+) create mode 100644 iot/02_standards.md create mode 100755 iot/tp2/2/a.sh create mode 100755 iot/tp2/2/b.sh create mode 100755 iot/tp2/2/c.sh create mode 100755 iot/tp2/2/d.sh diff --git a/iot/02_standards.md b/iot/02_standards.md new file mode 100644 index 0000000..74c7943 --- /dev/null +++ b/iot/02_standards.md @@ -0,0 +1,98 @@ +# Standards + +## Introduction + +## MQTT + +Message Queue Telemetry Transport +Protocole de transmission de télémesure en machine-to-machine léger. +Basé sur des files d'attentes avec un API basé sur le patron de Notification. + +Commande +Notification + +- créée en 1999 par IBM et Eurotech. +- adopté par OASIS (version actuelle 5.0) + +### Exemple + +``` + +----------+ + | Client A |-. + +----------+ | +---------------+ + | | Application X | + +----------+ `>+--------+<==>+---------------+ + | Client B |-->| Broker | + +----------+ .>+--------+<==>+---------------+ + | \ | Application Y | + +----------+ | \ +---------------+ + | Client C |-' \__ abonnement / notification IP + +----------+ \__ messages +``` + + +- n Clients (STM32, Aruino, Rapberry Pi) +- 1 Broker (en ligne, serveur) +- m Appilications (PC, Smartphone) + +### Modèles + +Topic +- Des queues parallèlles de messages. +- Permet aux clients d'échanger des informations d'une sémantique spécifique. + +Session +- Une session qui identifie l'ensemble des topics et la séquence des messages reçus. +- Toutes les communications client / serveur se feront par sessions. + +Subscriptions +- Contrairement aux sessions, un abonnement attache un client à un topic. + +``` + clients applications + ++-----------+ +- broker -+ +------------+ +| | | +--1-->| | +| publisher +--1-->| topic 1 | | subscriber | +| | | +--4-->| | ++-----------+ | topic 2 | +------------+ + | | ++-----------+ | topic 3 | +------------+ +| +--1-->| | | | +| publisher | | topic 4 +--4-->| subscriber | +| +--2-->| | ^\ | | ++-----------+ ^\ +----------+ \ +------------+ + \ \_ subscription -> notifications + \_ publications +``` + +### Trame + +``` ++----+-+-+-+-----------+---------+-----------+ +| 4 |1|2|1| 8 | C | remaining | ++----+-+-+-+-----------+---------+-----------+ +|Type|D|Q|R| remaining | options | DATA | ++----+-+-+-+-----------+---------+-----------+ + ^\^\^\ ^^^^^^^^^\ ^^^^^^^\_ champ d'options + \ \ \ \_ taille de DATA + \ \ \_ RETAIN + \ \__ QoS + \___ DUPL +``` + +- type + - 3: publish + - .: ... +- DUPL : drapeau signifiant que le message est une duplication +- QoS : Qualité de service + - 0: envoyé + - 2: une reception + - 3: toute les réceptions +- + +## CoAP + +## Comparaisons + +## IoT pour la gestion d'appareils : LwM2M diff --git a/iot/tp2/2/a.sh b/iot/tp2/2/a.sh new file mode 100755 index 0000000..27593cd --- /dev/null +++ b/iot/tp2/2/a.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +sudo systemctl start mosquitto.service + +topic='test/topic' + + +( + echo "[mosquitto_sub] listening" + mosquitto_sub -v -t $topic +) & listener_pid=$! + +( + echo "[mosquitto_pub] publishing" + mosquitto_pub -t $topic -m 'helloWorld' +) + +sleep 1s +kill $listener_pid + + +sudo systemctl stop mosquitto.service diff --git a/iot/tp2/2/b.sh b/iot/tp2/2/b.sh new file mode 100755 index 0000000..26846a2 --- /dev/null +++ b/iot/tp2/2/b.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +sudo systemctl start mosquitto.service + +topic='maison/is_connecté' + + +( + echo "[application] listening" + mosquitto_sub -v -t $topic +) & listener_pid=$! + +( + echo "[maison] up" + while true + do + echo "[maison] publishing" + mosquitto_pub -t $topic -m 'oui' + sleep 1s + done +) & + +sleep 5s +kill $listener_pid + + +sudo systemctl start mosquitto.service diff --git a/iot/tp2/2/c.sh b/iot/tp2/2/c.sh new file mode 100755 index 0000000..63577b4 --- /dev/null +++ b/iot/tp2/2/c.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +sudo systemctl start mosquitto.service + +topic='test/topic' + + +( + echo "[mosquitto_pub] publishing (no retain)" + mosquitto_pub -t $topic -m 'helloWorld' +) + +( + echo "[mosquitto_sub] listening" + mosquitto_sub -v -t $topic +) & listener_pid=$! + +sleep 1s +kill $listener_pid + + +( + echo "[mosquitto_pub] publishing (retain set)" + mosquitto_pub -t $topic -m 'helloWorld' -r +) + +( + echo "[mosquitto_sub] listening" + mosquitto_sub -v -t $topic +) & listener_pid=$! + +sleep 1s +kill $listener_pid + + +sudo systemctl stop mosquitto.service diff --git a/iot/tp2/2/d.sh b/iot/tp2/2/d.sh new file mode 100755 index 0000000..9c8203a --- /dev/null +++ b/iot/tp2/2/d.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +sudo systemctl start mosquitto.service + +topic='test/topic' + + +function prefix() { + while read line + do echo "$@" "$line" + done +} + + +( + echo "[mosquitto_sub] listening (qos=0)" + mosquitto_sub -v -t $topic -q 0 | prefix "(qos=0)" +) & listener_pid=$! + +( + echo "[mosquitto_sub] listening (qos=1)" + mosquitto_sub -v -t $topic -q 1 | prefix "(qos=1)" +) & listener_pid="$listener_pid $!" + +( + echo "[mosquitto_sub] listening (qos=2)" + mosquitto_sub -v -t $topic -q 2 | prefix "(qos=2)" +) & listener_pid="$listener_pid $!" + + +( + echo "[mosquitto_pub] publishing (qos=0)" + mosquitto_pub -t $topic -m "message (qos=0)" -q 0 + + echo "[mosquitto_pub] publishing (qos=1)" + mosquitto_pub -t $topic -m "message (qos=1)" -q 1 + + echo "[mosquitto_pub] publishing (qos=2)" + mosquitto_pub -t $topic -m "message (qos=2)" -q 2 +) + +sleep 1s +kill $listener_pid + + +sudo systemctl stop mosquitto.service