# NowYouSea — Architecture Système Complète *Du rocher au dashboard : description du réseau bout-en-bout* --- ## 1. Vue d'ensemble ``` ┌─────────────────────────────────────────────────────────────────┐ │ TERRAIN (Rochers) │ │ │ │ 🪨 Rocher 1 🪨 Rocher 2 🪨 Rocher 3 🪨 Rocher N │ │ Port-Navalo Port Crouesty Île-aux-Moines ... │ │ [Capteurs] [Capteurs] [Capteurs] [Capteurs] │ │ [Edge compute] [Edge compute] [Edge compute] [Edge compute] │ │ [4G modem] [4G modem] [4G modem] [4G modem] │ │ │ │ │ │ │ └───────┼───────────────┼──────────────┼───────────────┼─────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ RÉSEAU CELLULAIRE 4G/LTE │ │ (Orange, SFR, Bouygues, Free — SIM M2M) │ │ VPN chiffré (WireGuard) │ └───────────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ INFRASTRUCTURE CLOUD │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │ │ │ Broker MQTT │ │ Ingestion │ │ Base de données │ │ │ │ (messages) │→ │ Pipeline │→ │ TimescaleDB │ │ │ └──────────────┘ └──────────────┘ └────────────────────┘ │ │ │ │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ │ Traitement │ │ Moteur │ │ │ │ │ acoustique │ │ d'alertes │←─────────┘ │ │ │ (FFT, SPL) │ │ (seuils) │ │ │ └──────────────┘ └──────┬───────┘ │ │ │ │ │ ┌──────────────┐ │ ┌────────────────────┐ │ │ │ API REST / │ │ │ Générateur │ │ │ │ WebSocket │ │ │ rapports DCSMM │ │ │ └──────┬───────┘ │ └────────────────────┘ │ │ │ │ │ └─────────┼─────────────────┼─────────────────────────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ UTILISATEURS FINAUX │ │ │ │ 💻 Dashboard web 📱 App mobile 📧 Alertes SMS/email │ │ (capitainerie) (terrain) (gestionnaire) │ │ │ │ 📊 API publique 📄 Rapports PDF 🔗 Export Quadrige │ │ (chercheurs) (DCSMM) (Ifremer) │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## 2. Couche 1 — Nœuds terrain (Rochers) ### 2.1 Architecture embarquée d'un rocher ``` ┌─ ROCHER ──────────────────────────────────────────────┐ │ │ │ ☀️ Panneau solaire │ │ │ │ │ ▼ │ │ ┌─────────┐ ┌───────────────────────────────┐ │ │ │ MPPT │───→│ Batterie LiFePO4 │ │ │ │ Chargeur│ │ (12V, 20-100Ah selon config) │ │ │ └─────────┘ └───────────┬───────────────────┘ │ │ │ 12V │ │ ┌────────┴────────┐ │ │ ▼ ▼ │ │ ┌──────────┐ ┌──────────────┐ │ │ │ DC-DC 5V │ │ DC-DC 12V │ │ │ └────┬─────┘ └──────┬───────┘ │ │ │ │ │ │ ┌─────────┴───┐ ┌───────┴────────┐ │ │ ▼ ▼ ▼ ▼ │ │ ┌──────────┐ ┌────────┐ ┌─────────┐ ┌────────┐ │ │ │ SBC │ │ Modem │ │ Capteurs│ │ Capteurs│ │ │ │ (RPi/ESP)│ │ 4G │ │ analogiq│ │ numériq │ │ │ │ │ │ │ │ (hydro) │ │ (CTD,..)│ │ │ │ ┌──────┐│ │ ┌────┐ │ └────┬────┘ └───┬─────┘ │ │ │ │ADC ││ │ │SIM │ │ │ │ │ │ │ │24-bit││ │ │M2M │ │ │ RS485/SDI-12 │ │ │ └──┬───┘│ │ └────┘ │ │ │ │ │ │ │ │ └───┬────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │◄───┼──────┼───────────┘───────────┘ │ │ │ │ │ │ │ │ │ ┌──┴───┐│ │ MQTT/HTTPS │ │ │ │Local ││ │ ▲ │ │ │ │Store ││ │ │ │ │ │ │(SSD) ││ │ ┌─┴──────┐ │ │ │ └──────┘│ │ │Antenne │ 📡 │ │ └─────────┘ │ │4G+GPS │ │ │ │ └────────┘ │ │ │ │ └───────────────────┼────────────────────────────────────┘ │ ▼ Internet 4G ``` ### 2.2 Flux de données embarqué ``` Capteurs → Acquisition (ADC/bus) → Pré-traitement edge → Buffer local → Envoi MQTT │ ┌────┴─────┐ │ FFT temps │ (acoustique : spectre calculé sur le rocher) │ réel │ → envoie SPL 63/125Hz, pas le WAV brut └──────────┘ │ ┌────┴─────┐ │ Moyennes │ (physico-chimie : moyenne glissante 1min/10min) │ glissantes│ → réduit volume données ×100 └──────────┘ ``` **Stratégie de bande passante :** - Acoustique : FFT + SPL calculés sur le rocher → envoi de ~1 Ko/min au lieu de ~10 Mo/min de WAV brut - Physico-chimie : moyennes 1min → envoi toutes les minutes - Enregistrement WAV brut en local (SSD) pour récupération manuelle si besoin d'analyse fine - Mode dégradé si perte réseau : tout est stocké localement, envoi en batch à la reconnexion ### 2.3 Protocoles de communication | Couche | Protocole | Pourquoi | |--------|-----------|----------| | Transport données | **MQTT** (QoS 1) | Léger, bidirectionnel, fait pour IoT, reconnexion auto | | Sécurité | **TLS 1.3** + certificats client | Chiffrement bout-en-bout | | Tunnel réseau | **WireGuard VPN** | Léger, rapide, sécurise le canal 4G | | Config à distance | **MQTT commandes** (topic dédié) | Reconfigurer capteurs, firmware OTA | | Fallback | **HTTPS POST** | Si MQTT bloqué par opérateur | | Inter-rochers | **LoRa** (optionnel) | Mesh local si un rocher perd la 4G, relais via un voisin | --- ## 3. Couche 2 — Réseau de transport ### 3.1 Connectivité cellulaire ``` Rocher → SIM M2M multi-opérateur → Internet → VPN → Serveur NowYouSea ``` | Élément | Phase initiale (1-10 rochers) | Scale-up (10-100) | Mass market (100+) | |---------|-------------------------------|--------------------|--------------------| | Type SIM | SIM M2M classique (1Nce, Hologram, ou opérateur national) | SIM M2M multi-opérateur avec roaming | eSIM + plateforme de gestion de flotte | | Opérateur | Orange/SFR selon couverture site | Multi-opérateur avec failover | Contrat-cadre MVNO IoT | | Data/mois | ~500 Mo/rocher (SPL + physico) | ~500 Mo/rocher | ~500 Mo/rocher | | Coût SIM | ~3-5€/mois/rocher | ~2-4€/mois (volume) | ~1-2€/mois (volume) | | Gestion | Manuelle (portail opérateur) | Plateforme IoT (1Nce, Pelion) | Plateforme IoT intégrée | | Fallback | Aucun | LoRa mesh entre rochers proches | LoRa + satellite LEO (backup) | ### 3.2 Sécurité réseau ``` ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Rocher │────→│ VPN │────→│ Firewall │────→│ Serveur │ │ (client │ │ WireGuard│ │ (UFW) │ │ MQTT │ │ VPN) │ │ tunnel │ │ │ │ Broker │ └─────────┘ └──────────┘ └──────────┘ └──────────┘ ``` - Chaque rocher a une **clé VPN unique** (révocable en cas de vol/compromission) - Certificats TLS client = authentification mutuelle - Aucun port ouvert côté rocher (connexion sortante uniquement) - Monitoring des connexions : alerte si un rocher ne communique plus depuis >1h --- ## 4. Couche 3 — Infrastructure serveur (Cloud/On-premise) ### 4.1 Phase initiale (1-10 rochers) — Serveur unique ``` ┌─ SERVEUR UNIQUE (VPS ou bare metal) ────────────────────────┐ │ │ │ OS: Ubuntu Server 24.04 LTS │ │ RAM: 8 Go | CPU: 4 vCPU | SSD: 500 Go │ │ Coût: ~30-50€/mois (Hetzner, OVH, Scaleway) │ │ │ │ ┌────────────────┐ │ │ │ Mosquitto MQTT │ ← Réception données rochers │ │ │ Broker │ (port 8883 TLS) │ │ └───────┬────────┘ │ │ │ │ │ ▼ │ │ ┌────────────────┐ │ │ │ Service │ ← Parsing MQTT → insertion DB │ │ │ Ingestion │ Validation données │ │ │ (Python/Rust) │ Détection anomalies │ │ └───────┬────────┘ │ │ │ │ │ ▼ │ │ ┌────────────────┐ │ │ │ TimescaleDB │ ← Base time-series (extension PostgreSQL) │ │ │ (PostgreSQL) │ Compression auto, rétention configurable│ │ │ │ ~1 Go/rocher/an (données agrégées) │ │ └───────┬────────┘ │ │ │ │ │ ┌────┴────┬──────────┐ │ │ ▼ ▼ ▼ │ │ ┌───────┐ ┌────────┐ ┌──────────┐ │ │ │ API │ │ Moteur │ │ Rapport │ │ │ │ REST │ │ Alertes│ │ DCSMM │ │ │ │ + WS │ │ │ │ (cron) │ │ │ └───┬───┘ └───┬────┘ └──────────┘ │ │ │ │ │ │ │ SMS/email │ │ ▼ ▼ │ │ ┌───────┐ ┌────────┐ │ │ │ Nginx │ │ Twilio │ │ │ │ + │ │ / SMTP │ │ │ │ Front │ │ │ │ │ │ (Vue/ │ └────────┘ │ │ │ React)│ │ │ └───────┘ │ │ │ │ ┌────────────────┐ │ │ │ Grafana │ ← Monitoring interne (santé rochers, │ │ │ + Prometheus │ latence, uptime, batterie, signal 4G) │ │ └────────────────┘ │ │ │ │ Tout en Docker Compose sur 1 serveur │ └──────────────────────────────────────────────────────────────┘ ``` **Coût infra Phase initiale : ~50€/mois tout compris** ### 4.2 Scale-up (10-100 rochers) — Architecture distribuée ``` ┌─ LOAD BALANCER (Nginx/HAProxy) ─────────────────────────────┐ │ │ │ ┌──────────┬──────────┬──────────┐ │ │ ▼ ▼ ▼ ▼ │ │ ┌──────────┐┌──────────┐┌──────────┐┌──────────┐ │ │ │ MQTT ││ MQTT ││ API ││ API │ │ │ │ Broker 1 ││ Broker 2 ││ Server 1 ││ Server 2 │ │ │ │ (EMQX) ││ (EMQX) ││ ││ │ │ │ └────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘ │ │ │ │ │ │ │ │ └─────┬─────┘ └─────┬─────┘ │ │ ▼ ▼ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ Apache Kafka │ │ Redis Cache │ │ │ │ (streaming) │ │ (temps réel) │ │ │ └────────┬────────┘ └─────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ TimescaleDB │ ← Cluster avec réplication │ │ │ (Primary + │ Partitionnement par rocher │ │ │ Read replica) │ ~100 Go total pour 100 rochers/an │ │ └─────────────────┘ │ │ │ │ + Kubernetes (K3s) pour orchestration │ │ + Backup automatisé (S3/Glacier) │ │ + CDN pour dashboard (CloudFlare) │ │ │ │ Coût: ~200-500€/mois (cloud managé ou 2-3 serveurs dédiés)│ └──────────────────────────────────────────────────────────────┘ ``` ### 4.3 Mass market (100+ rochers) — Full cloud ``` ┌─ CLOUD MANAGÉ (AWS/GCP/Scaleway) ───────────────────────────┐ │ │ │ IoT Core (AWS IoT / GCP IoT) ← Gestion flotte rochers │ │ │ │ │ ▼ │ │ Streaming (Kinesis/Pub-Sub) → Lambda/Cloud Functions │ │ │ │ │ ▼ │ │ TimescaleDB Cloud / Amazon Timestream │ │ │ │ │ ├──→ API Gateway + serveurs auto-scalés │ │ ├──→ Moteur alertes (serverless) │ │ ├──→ ML Pipeline (détection espèces, anomalies) │ │ └──→ Data Lake (S3) pour WAV bruts et archives │ │ │ │ Coût: ~1 000-3 000€/mois selon usage │ │ Mais: scalable à l'infini, HA automatique, 0 maintenance │ └──────────────────────────────────────────────────────────────┘ ``` --- ## 5. Couche 4 — Traitement des données ### 5.1 Pipeline de traitement ``` Données brutes → Validation → Traitement → Stockage → Exploitation (MQTT) (QA/QC) (calcul) (DB) (API/alertes) Acoustique: SPL 63Hz, 125Hz → Vérif plage → Lissage, → TimescaleDB → Dashboard SPL (déjà FFT edge) valide moyenne horaire + archive Alerte seuil Physico-chimie: T°, pH, O2, sal → Vérif plage → Moyenne 10min → TimescaleDB → Dashboard (moyennes 1min) détection interpolation + Quadrige Alerte anomalie dérive capteur Métadonnées: Batterie, signal → — → — → Prometheus → Grafana GPS, température + alertes monitoring interne ops ``` ### 5.2 Traitement acoustique détaillé ``` SUR LE ROCHER (edge): SUR LE SERVEUR (cloud): Hydrophone Réception SPL │ │ ▼ ▼ ADC 24-bit Validation (plage, cohérence) │ │ ▼ ▼ Fenêtrage (Hanning) Agrégation temporelle │ (horaire, journalier, mensuel) ▼ │ FFT 1024/4096 pts ▼ │ Calcul indicateurs DCSMM ▼ D11C2.1 (SPL médian 63Hz) Extraction bandes: D11C2.2 (SPL médian 125Hz) - 1/3 octave 63 Hz │ - 1/3 octave 125 Hz ▼ - Broadband SPL Comparaison seuils BEE │ (Bon État Écologique) ▼ │ Envoi MQTT (~1Ko/min) ▼ │ Rapport annuel DCSMM D11 ▼ (PDF auto-généré) Stockage WAV local (optionnel, SSD) → récupérable pour analyse fine (bioacoustique, détection espèces) ``` ### 5.3 Moteur d'alertes ``` ┌─────────────────────────────────────────────────────┐ │ MOTEUR D'ALERTES │ │ │ │ Règles configurables par rocher / par client: │ │ │ │ SI SPL_125Hz > seuil_dcsmm PENDANT 30min │ │ → Alerte "Dépassement D11C2.2" → SMS + email │ │ │ │ SI O2_dissous < 4 mg/L │ │ → Alerte "Risque hypoxie" → SMS + email URGENT │ │ │ │ SI turbidité > 50 NTU ET hors marée │ │ → Alerte "Rejet suspect" → email + log │ │ │ │ SI batterie < 20% │ │ → Alerte OPS "Maintenance requise" → dashboard │ │ │ │ SI signal_4G = 0 PENDANT 2h │ │ → Alerte OPS "Rocher hors ligne" → SMS ops │ │ │ │ Canaux de notification: │ │ - SMS (Twilio) : alertes urgentes │ │ - Email (SMTP) : alertes standards + rapports │ │ - Webhook (API) : intégration systèmes tiers │ │ - Push mobile : app NowYouSea │ │ - Dashboard : toutes les alertes │ └─────────────────────────────────────────────────────┘ ``` --- ## 6. Couche 5 — Interfaces utilisateur ### 6.1 Dashboard web (prioritaire) ``` ┌─ DASHBOARD NOWYOUSEA ──────────────────────────────────────┐ │ │ │ 🗺️ Carte interactive │ │ ├─ Position de chaque rocher (marqueurs) │ │ ├─ Code couleur état (vert/orange/rouge) │ │ ├─ Clic = détail du rocher │ │ └─ Zones DCSMM superposées │ │ │ │ 📊 Vue rocher individuel │ │ ├─ Graphiques temps réel (courbes SPL, T°, O2...) │ │ ├─ Historique (1j, 1sem, 1mois, 1an) │ │ ├─ Indicateurs DCSMM (jauge vert/rouge par descripteur) │ │ ├─ État système (batterie, signal, uptime) │ │ └─ Journal des alertes │ │ │ │ 📄 Rapports │ │ ├─ Export CSV/JSON (chercheurs) │ │ ├─ Rapport DCSMM PDF (auto-généré, annuel) │ │ ├─ Export format Quadrige (Ifremer) │ │ └─ Rapport personnalisé (période, paramètres) │ │ │ │ ⚙️ Administration │ │ ├─ Gestion rochers (ajout, config, maintenance) │ │ ├─ Gestion alertes (seuils, destinataires) │ │ ├─ Gestion utilisateurs (rôles : admin, viewer, ops) │ │ └─ Firmware OTA (mise à jour des rochers) │ │ │ │ Tech: Vue.js/React + Leaflet (carte) + Grafana embed │ └─────────────────────────────────────────────────────────────┘ ``` ### 6.2 API publique ``` GET /api/v1/rocks → Liste des rochers GET /api/v1/rocks/{id}/data?param=spl_63hz&from=...&to=... → Données GET /api/v1/rocks/{id}/status → État système GET /api/v1/rocks/{id}/alerts → Alertes GET /api/v1/rocks/{id}/report/dcsmm → Rapport DCSMM POST /api/v1/rocks/{id}/config → Reconfiguration (admin) WS /api/v1/rocks/{id}/stream → Flux temps réel (WebSocket) ``` --- ## 7. Dimensionnement par phase ### Phase initiale : 1-10 rochers (2026) | Composante | Choix | Coût mensuel | |-----------|-------|-------------| | Serveur | 1 VPS (Hetzner CX31 : 4 vCPU, 8 Go RAM, 160 Go SSD) | 15€ | | Base de données | TimescaleDB sur même serveur | 0€ (inclus) | | MQTT Broker | Mosquitto sur même serveur | 0€ (inclus) | | Monitoring | Grafana + Prometheus sur même serveur | 0€ (inclus) | | Domaine + SSL | nowyousea.fr + Let's Encrypt | 1€ | | Backup | Stockage objet Scaleway (50 Go) | 2€ | | SMS alertes | Twilio (~100 SMS/mois) | 5€ | | SIM M2M (×10) | 10 × 5€ | 50€ | | **Total infra mensuel** | | **~73€** | | **Stockage données** | ~10 Go/an total | Confortable | | **Bande passante** | ~5 Go/mois total | Confortable | | **Administration** | 1 personne temps partiel | — | ### Scale-up : 10-100 rochers (2027-2028) | Composante | Choix | Coût mensuel | |-----------|-------|-------------| | Serveurs | 2-3 serveurs dédiés (ou K3s cluster) | 100€ | | Base de données | TimescaleDB dédié + réplica lecture | 50€ | | MQTT Broker | EMQX cluster (2 nœuds) | Inclus (open-source) | | Cache | Redis | 15€ | | Streaming | Apache Kafka (si nécessaire) | Inclus (open-source) | | CDN | CloudFlare (gratuit/pro) | 0-20€ | | Backup | Stockage objet (500 Go) | 10€ | | SMS alertes | ~1000 SMS/mois | 40€ | | SIM M2M (×100) | 100 × 3€ (volume) | 300€ | | Monitoring | Grafana Cloud (ou self-hosted) | 0-30€ | | **Total infra mensuel** | | **~535-565€** | | **Stockage données** | ~100 Go/an | Confortable | | **Administration** | 1 personne temps plein (DevOps) | — | ### Mass market : 100+ rochers (2029+) | Composante | Choix | Coût mensuel | |-----------|-------|-------------| | Cloud managé | AWS/GCP/Scaleway | 1 000-3 000€ | | IoT Platform | AWS IoT Core ou équivalent | Inclus | | Base de données | TimescaleDB Cloud | 200-500€ | | Data Lake | S3 (archives WAV, données historiques) | 50-200€ | | ML Pipeline | Détection espèces, anomalies | 100-300€ | | SIM M2M (×300) | 300 × 2€ (gros volume) | 600€ | | **Total infra mensuel** | | **~2 000-4 500€** | | **Administration** | Équipe 2-3 personnes (DevOps, Data, Support) | — | --- ## 8. Sécurité | Couche | Mesure | |--------|--------| | Rocher → Cloud | VPN WireGuard + TLS 1.3 + certificats client | | Authentification rocher | Clé unique par appareil, révocable | | Données stockées | Chiffrement at-rest (LUKS / cloud natif) | | Dashboard | HTTPS + OAuth2 / OIDC + 2FA | | API | Token JWT + rate limiting | | Accès maintenance | SSH clé uniquement, pas de mot de passe | | Firmware OTA | Signature cryptographique des mises à jour | | RGPD | Pas de données personnelles collectées (données environnementales = pas RGPD) | | Gestion incidents | Alertes auto si intrusion / comportement anormal | --- ## 9. Fiabilité & disponibilité | Mécanisme | Description | |-----------|-------------| | Store & forward (rocher) | Si perte réseau, données stockées localement, envoyées à la reconnexion | | Watchdog hardware | Redémarrage automatique si crash logiciel | | Watchdog connectivité | Si perte MQTT > 5min, reboot modem 4G | | Batterie tampon | 3-5 jours sans soleil | | Mode basse conso | Nuit / hiver : réduction fréquence acquisition | | Réplication DB | Read-replica (scale-up+) | | Backup quotidien | Snapshot DB + export S3 | | SLA cible | 99.5% uptime (données non-critique = quelques heures de gap tolérables) | --- ## 10. Évolutions futures | Fonctionnalité | Phase | Description | |----------------|-------|-------------| | IA embarquée (edge) | 2027+ | Détection cétacés en temps réel sur le rocher (TinyML / Jetson Nano) | | Réseau LoRa mesh | 2027+ | Rochers proches se relaient mutuellement (résilience) | | Satellite LEO backup | 2028+ | Starlink IoT / Swarm pour rochers sans couverture 4G | | Digital Twin | 2028+ | Modèle 3D de chaque site avec données temps réel superposées | | Open Data | 2027+ | Publication données anonymisées pour la communauté scientifique | | Intégration Copernicus | 2029+ | Corrélation données satellite (chlorophylle, SST) + données terrain | | API Quadrige native | 2027 | Export automatique au format Ifremer pour intégration nationale | --- *Document de travail — NowYouSea Team* *Version 1 — 10 février 2026*