Chaque composant de la chaîne Ruche Sentinelle, vu comme une boîte : ce qui y entre, ce qu'il en fait, ce qui en sort. On part de la vue d'ensemble, puis on suit une mesure du capteur jusqu'à l'écran.
Six maillons en série. Les deux premiers sont du matériel installé au collège ; les quatre suivants sont des conteneurs Docker sur le serveur. Caddy n'existe que sur le serveur public (VPS).
Le capteur lit jusqu'à trois sondes de température et sa pile, range les valeurs dans une trame de 11 octets et l'émet par radio LoRaWAN.
Format de trame et rôle des sondes repris de l'ancienne documentation : à confirmer sur un capteur réel (constats N1 et N2 du dossier technique).
La passerelle reçoit la radio, joue le rôle de serveur réseau LoRaWAN (déchiffrement, identification
du capteur) et dépose un message JSON dans Mosquitto avec le compte wisgate.
topic application/<application>/device/<DevEUI>/rx message { "data": "<trame base64>", "fPort": 2, "fCnt": 42, "rxInfo": [ { "rssi": -97, "loRaSNR": 7.5 } ] }
application/#Fonctionne seulement si la WisGate est en mode « serveur réseau intégré ». En simple packet forwarder, il faudrait ajouter ChirpStack. Format du message non vérifié sur le matériel.
La boîte aux lettres. Chaque client s'identifie, l'ACL vérifie ce qu'il a le droit de publier ou de lire, puis le message est remis à ceux qui sont abonnés au sujet.
wisgate et simulateurmosquitto.conf, passwd, aclnoderedmosquitto_data, journaux sur stdoutPort 1883 sans chiffrement (constat R1) : identifiants et mesures circulent en clair.
Le traducteur. Il écoute tous les messages des capteurs, transforme les octets en températures, ajoute le nom de la ruche et écrit le résultat dans InfluxDB.
application/+/device/+/rxRUCHES)dragino_d22 écrits dans InfluxDBLa mémoire. Chaque mesure y est rangée avec son heure. Au premier démarrage, influx-init
fabrique deux jetons limités : Node-RED ne peut qu'écrire, Grafana ne peut que lire.
INFLUXDB_* du .env (1ᵉʳ démarrage)influxdb_data, influx_tokensLa vitrine. Grafana interroge InfluxDB et dessine le tableau de bord « Ruche – températures ». Source et dashboard sont fournis par des fichiers : rien à configurer à la main.
ruche-temperatures.jsongrafana.{domaine} en VPSLe portier du serveur public. Seul point d'entrée web : il obtient les certificats HTTPS, aiguille chaque nom de domaine vers le bon service et protège l'éditeur Node-RED par mot de passe.
Caddyfile, DOMAIN, ACME_EMAIL, NODERED_AUTH_*caddy_data, caddy_configEn profils local et lan, Caddy n'est pas lancé : on accède directement aux ports 3000 (Grafana) et 1880 (Node-RED).
Deux façons de faire vivre la chaîne sans matériel LoRaWAN : deux cartes micro:bit qui imitent
capteur et passerelle, ou un script qui fabrique des trames. Dans les deux cas, les messages entrent dans
Mosquitto avec le compte simulateur.
docker compose exec mosquitto mosquitto_pubsimulateurLa lumière est placée dans les octets 4–5, que le décodeur D22-LB ignore. Les octets 11–12 portent un compteur, repris comme fCnt.
Les conteneurs démarrent dans un ordre imposé : la base doit être prête et les jetons créés avant que Node-RED et Grafana ne s'y connectent. Le même socle sert aux trois environnements.
| Profil | Fichier ajouté | Ports publiés | Particularités |
|---|---|---|---|
local | compose.local.yaml | 1883, 8086, 3000, 1880 sur 127.0.0.1 | Ce poste uniquement ; flux Node-RED modifiables et enregistrés dans le dépôt |
lan | compose.lan.yaml | 1883, 3000, 1880 sur le réseau | Serveur du FabLab ; HTTP ; InfluxDB non publié ; Node-RED sans mot de passe |
vps | compose.vps.yaml | 80, 443 (Caddy), 1883 | HTTPS ; Node-RED protégé ; flux en lecture seule (modifications par Git puis deploy.sh) |