Skip to main content

Titouan freure

Bienvenue sur le projet SIGACS

Par Alan BANCQUART, Titouan LE GOUALEC, Clément HERVOUET

Diagramme de séquence — Échanges MQTT sécurisés (mTLS)

Projet SIGACS — BTS CIEL — Saint Joseph La Salle — Lorient — 2026

sequenceDiagram
    participant M5C as M5StickC<br/>(capteurs bac)
    participant M5S as M5Stack Core2<br/>(concentrateur serre)
    participant BR as Broker <br/>192.168.42.66:8883
    participant DB as Dashboard<br/>(Subscriber)

    %% ── 1. Connexion WiFi ──
    Note over M5C,BR: 1. Connexion WiFi
    M5C->>M5S: WiFi.begin("Serre")
    M5S->>BR: WiFi.begin("Serre")
    BR-->>M5S: IP attribuée (DHCP)
    BR-->>M5C: IP attribuée (DHCP)

    %% ── 2. Handshake TLS 1.2 ──
    Note over M5S,BR: 2. Handshake TLS 1.2 (mTLS) — M5Stack → Broker
    M5S->>BR: Client Hello
    BR-->>M5S: Server Hello + server.crt
    Note over M5S: Vérification server.crt<br/>avec ca.crt embarqué
    M5S->>BR: Certificat client (client.crt)
    Note over BR: Vérification client.crt<br/>avec ca.crt (require_certificate true)
    BR-->>M5S: Tunnel TLS établi 

    %% ── 3. Connexion MQTT ──
    Note over M5S,BR: 3. Connexion MQTT
    M5S->>BR: CONNECT (clientId, user, password)
    BR-->>M5S: CONNACK (code 0 = accepté)

    %% ── 4. Abonnement Dashboard ──
    Note over BR,DB: 4. Abonnement subscriber
    DB->>BR: SUBSCRIBE /serre/1/bac/1/#
    BR-->>DB: SUBACK

    %% ── 5. Publication mesures (boucle 10s) ──
    Note over M5C,DB: 5. Publication mesures (toutes les 15 minutes)
    loop Toutes les 15 minutes
        M5C->>M5S: Mesure sol (MQTT local)<br/>topic: /serre/1/bac/1/sol  payload: "65.0"
        M5C->>M5S: Mesure air/temp<br/>topic: /serre/1/bac/1/air/temp  payload: "22.5"
        M5C->>M5S: Mesure air/hum<br/>topic: /serre/1/bac/1/air/hum  payload: "58.0"
        Note over M5S: Agrégation des mesures<br/>+ affichage écran TFT
        M5S->>BR: PUBLISH QoS 0 — /serre/1/bac/1/sol "65.0"
        BR->>DB: PUBLISH (redistribution)
        M5S->>BR: PUBLISH QoS 0 — /serre/1/bac/1/air/temp "22.5"
        BR->>DB: PUBLISH (redistribution)
        M5S->>BR: PUBLISH QoS 0 — /serre/1/bac/1/air/hum "58.0"
        BR->>DB: PUBLISH (redistribution)
    end

    %% ── 6. Keep-alive ──
    Note over M5S,BR: 6. Maintien de connexion
    M5S->>BR: PINGREQ (keep-alive)
    BR-->>M5S: PINGRESP
    M5S->>BR: DISCONNECT

Légende

Notation Signification
─► Flèche pleine Message envoyé
- -► Flèche pointillée Réponse / accusé de réception
Note Action interne (vérification, calcul)
loop Séquence répétée toutes les 15 minutes

Description des échanges

Phase 1 — Connexion WiFi : le M5StickC et le M5Stack Core2 rejoignent tous deux le réseau "Serre" et obtiennent chacun une adresse IP par DHCP.

Phase 2 — Handshake TLS 1.2 (mTLS) : c'est le M5Stack Core2 (concentrateur) qui établit le tunnel chiffré avec le broker. Il vérifie l'identité du broker grâce au certificat server.crt signé par la CA. Le broker vérifie à son tour l'identité du M5Stack grâce au certificat client client.crt (option require_certificate true). Aucune donnée ne transite en clair à partir de cette étape.

Phase 3 — Connexion MQTT : une fois le tunnel TLS établi, le M5Stack envoie un message CONNECT contenant son identifiant unique, son nom d'utilisateur et son mot de passe. Le broker répond CONNACK avec le code 0 (connexion acceptée).

Phase 4 — Abonnement : le Dashboard s'abonne au topic générique /serre/1/bac/1/# pour recevoir toutes les mesures du bac 1.

Phase 5 — Publication : toutes les 15 minutes, les M5StickC publient leurs mesures vers le M5Stack Core2 via MQTT local. Le M5Stack agrège ces données, les affiche sur son écran TFT, puis les transmet au broker Mosquitto qui les redistribue au Dashboard.

Phase 6 — Keep-alive : le M5Stack envoie régulièrement un PINGREQ pour maintenir la connexion active avec le broker. En fin de session, il envoie DISCONNECT pour clôturer proprement la connexion. Pour voir le répertoire dans sa globalité, voir le fichier [File-Tree.md].