Aller au contenu

SimStudio — Vue d'ensemble

L’écosystème SimStudio se compose de deux parties :

  • SimServer : le backend Docker-first (FastAPI, MQTT, Redis, go2rtc, Caddy) qui centralise tous les flux (vidéo, audio, données, réseau)
  • SimStudio : le dashboard de régie audiovisuelle (PWA Vue.js) qui offre une interface de production vidéo en temps réel pour le débriefing de simulations médicales

Le produit commercial pré-assemblé (mini-PC avec SimServer pré-installé) s’appelle SimBox.

SimServer est une application Docker-first qui s’exécute sur n’importe quelle machine Linux. Plus besoin de dispositif dédié : un simple PC, un mini-PC ARM ou un NUC Intel suffit. Un ESP32-S3 USB bridge (~5 EUR, PCB 2 couches, USB-C) assure la communication directe avec les nodes de simulation via ESP-NOW.

SimServer se déploie en une seule commande via Docker Compose :

Fenêtre de terminal
docker compose up -d
ServiceRôleImage
CaddyReverse proxy, TLS automatique (certificats auto-signés pour IPs locales)caddy:2-alpine
SimServer APIAPI principale, logique métier, WebSocket temps réelkersim/server (FastAPI + uvicorn)
MQTTBus de messages entre services et nodes (Eclipse Mosquitto)eclipse-mosquitto:2
RedisCache, sessions, pub/sub interneredis:7-alpine
go2rtcAgrégation de flux caméras (RTSP, RTMP, WebRTC)alexxit/go2rtc

SimServer fonctionne sur n’importe quelle machine Linux avec Docker, mais les performances d’encodage vidéo varient selon le matériel :

ProfilAccélérationMachines typesEncodage
CPU onlyAucuneRPi 4/5, PC génériqueFFmpeg software (1-2 flux 1080p)
Intel VA-APIGPU intégré IntelIntel NUC, mini-PC x86FFmpeg VA-API (4+ flux 1080p)
RK3588 MPPNPU/VPU RockchipRadxa ROCK 5 ITX+MPP hardware (4+ flux 4K)

Radxa ROCK 5 ITX+ (recommandé)

ARM RK3588, 8-32 GB RAM, NVMe, 4x HDMI out, 2x RJ45 2.5G. Accélération matérielle MPP. ~150 EUR. Profils matériels →

Intel NUC / mini-PC x86

Intel N100/i5, 8-16 GB RAM, NVMe, HDMI, RJ45 2.5G. Accélération VA-API. ~150-300 EUR. Profils matériels →

Raspberry Pi 4/5 (budget)

ARM BCM2712, 4-8 GB RAM, microSD/NVMe (Pi 5), 2x HDMI. CPU only. ~80-120 EUR. Profils matériels →

SimServer centralise tous les flux de la simulation :

graph LR
CamPoE["Caméras IP PoE"] -->|RTSP| Studio
CamUSB["Caméras USB"] -->|USB/UVC| Studio
SimCam["SimCam (smartphones)"] -->|WebRTC| Studio
SimPilot["SimPilot"] <-->|WebSocket| Studio
Nodes["Nodes"] <-->|ESP-NOW via USB bridge| Studio
MQTT["MQTT (Mosquitto)"] <-->|pub/sub| Studio
subgraph Studio["SIMSERVER (Docker Compose)"]
direction TB
S1["Mixage vidéo / audio"]
S2["Overlay paramètres"]
S3["Enregistrement"]
S4["Scénarios"]
S5["Journal / Export"]
end
Studio -->|HDMI| Salle["Salle simulation"]
Studio -->|HDMI| Regie["Régie formateur"]
Studio -->|HDMI| Debrief["Salle débriefing"]
Studio -->|NVMe| Storage["Stockage"]
style Studio fill:#4a90d9,color:#fff
style SimPilot fill:#50b87a,color:#fff
style Nodes fill:#d94a4a,color:#fff

Lorsqu’un SimServer est présent, il remplace le coordinateur ESP32 externe comme point d’accès WiFi et comme pont vers les nodes (via l’ESP32-S3 USB bridge connecté en USB-C à la machine hôte).

Le mode régie est le cœur du dashboard SimStudio.

  • Aperçu mosaïque de tous les flux caméras en temps réel
  • Contrôle des caméras PTZ (pan, tilt, zoom) via ONVIF/VISCA
  • QR code pour connecter un smartphone via SimCam
  • État de santé par caméra (latence, perte de paquets, batterie)
LayoutDescription
Plein écran1 caméra sur toute la surface
Deux vuesSplit horizontal ou vertical
Trois vues1 principale + 2 secondaires
Quatre vuesGrille 2×2

Les layouts sont configurables indépendamment pour chaque sortie HDMI.

SimServer permet un mixage audio indépendant par sortie HDMI :

SortieUsage typeMix audio
HDMI 1Salle de simulationAudio ambiance seul
HDMI 2Régie formateurAmbiance + retour micro
HDMI 3Salle de débriefingAudio mixé complet

Sources audio : micro USB/boundary, audio des caméras IP (RTSP), SimCam. Contrôle de volume par source, VU-mètres en temps réel, mute individuel.

Superposition en temps réel sur les flux vidéo :

  • Paramètres vitaux (FC, SpO2, PA, FR, température, glycémie)
  • Chronomètre de simulation
  • Marqueurs d’événements (choc, médicaments, etc.)
  • Identifiant du scénario et étape en cours
  • Bibliothèque de scénarios JSON préchargés
  • Filtrage par catégorie, difficulté, durée estimée
  • Prévisualisation des étapes et paramètres
  • Import/Export de scénarios (JSON, clé USB)
  • Création et édition de scénarios personnalisés
ActionEffet
PlayDémarrer ou reprendre le scénario
PauseSuspendre le scénario (les nodes se figent)
StopArrêter la simulation (retour à l’état initial)
EnregistrerDémarrer/arrêter l’enregistrement de tous les flux
Étape suivanteForcer le passage à l’étape suivante
Override vitalModifier manuellement un paramètre vital
Déclencher événementInjecter un événement (choc, alarme, etc.)
MarqueurPoser un marqueur temporel pour le débriefing

La timeline graphique du scénario affiche les étapes passées, en cours et à venir, avec les paramètres vitaux prévus et les conditions de transition.

  • Liste en temps réel de tous les dispositifs ESP32 connectés (via ESP-NOW)
  • Type d’appareil, état, niveau de batterie
  • Qualité de liaison ESP-NOW (RSSI)
  • Historique des connexions/déconnexions
  • Assignation à un groupe/kit
  • Vue topologique du réseau (SimServer → appareils connectés)
  • Latence par appareil (ping, ESP-NOW round-trip)
  • Bande passante disponible et conflits de canaux WiFi
  • Test de connectivité bout-en-bout
  • Suggestions de résolution de problèmes

Le mode débriefing permet de rejouer la simulation enregistrée :

  • Multi-flux : visualiser simultanément plusieurs flux vidéo synchronisés
  • Navigation temporelle : avance rapide, retour, saut à un marqueur
  • Marqueurs : automatiques (étapes, événements) + manuels
  • Paramètres vitaux : courbes superposées à la timeline vidéo
  • Personnalisation : le débriefeur choisit les flux, marqueurs et courbes affichés
  • Journal chronologique (événements, paramètres, horodatages)
  • Export JSON, CSV, PDF
  • Export des enregistrements vidéo (MP4)
  • Copie vers clé USB ou téléchargement réseau
  • Depuis une clé USB (mode hors-ligne)
  • Depuis Internet (mode en ligne) : docker compose pull && docker compose up -d
  • Mise à jour OTA des nodes ESP32 via SimServer
  • Vérification d’intégrité (signature, checksum), rollback en cas d’échec
  • Réseau WiFi AP (SSID, mot de passe, canal)
  • Sorties HDMI (résolution, rafraîchissement)
  • Audio (sources, gains, routage)
  • Interface (thème, langue, taille des polices)
  • Sauvegarde et restauration de la configuration

SimServer embarque une base de données légère (SQLite) pour :

  • Historique des sessions de simulation
  • Préférences et configurations
  • Cache des scénarios et métadonnées
  • Journal d’événements
  • Index des enregistrements vidéo

Plusieurs SimServers peuvent coexister dans un même organisme. Le SimHub est un concentrateur multi-sites qui supervise l’ensemble des SimServers, avec multiplexing et diffusion vidéo inter-salles. Voir aussi le mode multi-salles pour la configuration.

ComposantTechnologie
LangagePython 3.14
Framework webFastAPI (ASGI, uvicorn)
Temps réelWebSocket natif + MQTT (Eclipse Mosquitto)
Reverse proxy / TLSCaddy (certificats auto-signés automatiques)
VidéoFFmpeg (CPU), GStreamer (accélération matérielle)
PTZONVIF (python-onvif2), VISCA over IP
StreamingHLS (débriefing), RTSP (caméras IP), WebRTC (SimCam)
WiFi APhostapd
ESP-NOW bridgeESP32-S3 USB bridge (PCB 2 couches, USB-C, ~5 EUR)
Cache / pub-subRedis
BDDSQLite (WAL mode)
DéploiementDocker Compose