Initial commit — Serveur Lucas SmartEye

API réception alertes chute (SmartEye/YOLO), analyse IA (Gemini 2.5 Flash),
gestion alertes avec escalade (watchdog), notifications Firebase,
dashboard web, documentation MkDocs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-03-14 21:26:06 +01:00
commit 24dbc7cd6a
64 changed files with 9677 additions and 0 deletions

View File

@@ -0,0 +1,222 @@
#!/bin/bash
# ============================================================
# setup_shared.sh — À lancer depuis le serveur OVH (session Lucas)
# Initialise le dossier partagé pour les 3 agents
# ============================================================
SHARED="/var/www/shared/deployment"
echo "📁 Création de l'arborescence..."
mkdir -p "$SHARED"/{smarteye,lucas,lucasapp,synthesis}
# ============================================================
# BRIEF COMMUN
# ============================================================
cat > "$SHARED/BRIEF.md" << 'BRIEF_EOF'
# 🎯 Mission : Préparer le Déploiement Multi-Client
## Contexte
Le système SmartEye/Lucas/LucasApp fonctionne en mode pilote (Aléria).
TOUT est en dur : IPs caméras, ports tunnels, nom du senior, coordonnées GPS,
clés API, tokens Firebase, URLs RTSP, etc.
## Objectif
Rendre le système **déployable chez n'importe quel client** en externalisant
TOUTES les valeurs en dur dans des fichiers de configuration.
## Architecture
```
Caméras IP (réseau local client)
↓ RTSP
Jetson Orin Nano (SmartEye) — détection chutes
↓ SSH tunnels (autossh)
Serveur OVH 57.128.74.87 (Lucas) — backend, Gemini, Firebase
↓ FCM push
App mobile (LucasApp) — alertes, flux live, interphone
```
## Valeurs actuellement en dur
### SmartEye (Jetson)
- IPs caméras : 192.168.1.143, 192.168.1.148, 192.168.1.109
- Ports RTSP : 554, chemins /11 (HD) et /12 (SD)
- Serveur Lucas : 46.105.30.107 (ANCIEN — maintenant 57.128.74.87)
- Tunnels SSH : ports 8554/8555/8556 (RTSP) + 8800 (audio)
- User SSH : rachid (sur ancien serveur) ou debian (nouveau)
- Seuils détection : conf=0.15, pose=0.25, GS=45/30/20, ghost=30s, immobilité=12s
- Port web UI : 8080
### Lucas (OVH)
- senior_name : "Mamie Lucas"
- senior_photo_url : https://lucas.unigest.fr/photos/mamie.jpg
- Coordonnées GPS : 42.1028, 9.5147 (Aléria)
- URLs RTSP publiques : rtsp://46.105.30.107:8554/12, :8555/12, :8556/12
- Clé Gemini : en dur dans analyze.py
- Credentials Firebase : chemin fixe
- Tokens FCM : en dur ou semi-dur
- Config SMS OVH : clés en dur
- Numéro urgence : +33652631829
- Ports firewall : fixes
### LucasApp (Flutter)
- URL API : https://lucas.unigest.fr
- WebSocket audio : ws://46.105.30.107:8800
- Numéro urgence SAMU : 15
## Livrables attendus par agent
Chaque agent doit produire dans son dossier :
1. `plan.md` — Son plan d'action détaillé
2. `config_spec.*` — Le format de fichier config proposé (yaml/ini/dart)
3. `dependencies.md` — Ce dont il a besoin des 2 autres agents
4. `questions.md` — Questions ouvertes pour les autres
5. `status.txt` — "DONE" quand il a terminé son round
## Convention de ports par client
Chaque site client = plage de 10 ports sur OVH :
- Site 1 (pilote) : 8550-8559
- Site 2 : 8560-8569
- Site N : 8550 + N*10
## IMPORTANT
- Le user SSH sur le nouveau OVH est `debian` (pas `rachid`)
- L'IP OVH est maintenant `57.128.74.87`
- Domaine : lucas.unigest.fr
- Les caméras sont des CTronic avec RTSP + audio ONVIF
- Flux HD = /11, flux SD = /12
BRIEF_EOF
echo "✅ Brief créé : $SHARED/BRIEF.md"
# ============================================================
# INSTRUCTIONS SMARTEYE
# ============================================================
cat > "$SHARED/smarteye/INSTRUCTIONS.md" << 'EOF'
# 📷 Instructions — Agent SmartEye
## Ton rôle
Tu es responsable du code Python de détection embarqué sur le Jetson Orin Nano.
## Lis d'abord
- `/var/www/shared/deployment/BRIEF.md` — le brief commun
## Ce que tu dois faire
1. Identifier TOUTES les valeurs en dur dans le code SmartEye
2. Créer un format `smarteye_config.yaml` qui externalise tout
3. Modifier le code pour charger depuis ce YAML au démarrage
4. Adapter le service systemd autossh pour lire les ports depuis la config
5. Créer un script `setup_site.sh` interactif pour générer la config d'un nouveau site
6. Documenter les dépendances vers Lucas (endpoints, format des alertes)
## Écris tes résultats dans
- `/var/www/shared/deployment/smarteye/plan.md`
- `/var/www/shared/deployment/smarteye/config_spec.yaml` (exemple de config)
- `/var/www/shared/deployment/smarteye/dependencies.md`
- `/var/www/shared/deployment/smarteye/questions.md`
## Consulte les travaux des autres
- `/var/www/shared/deployment/lucas/` — ce que Lucas propose
- `/var/www/shared/deployment/lucasapp/` — ce que LucasApp propose
- `/var/www/shared/deployment/synthesis/` — les synthèses croisées
## Quand tu as fini
Écris "DONE" dans `/var/www/shared/deployment/smarteye/status.txt`
EOF
echo "✅ Instructions SmartEye créées"
# ============================================================
# INSTRUCTIONS LUCAS
# ============================================================
cat > "$SHARED/lucas/INSTRUCTIONS.md" << 'EOF'
# 🖥️ Instructions — Agent Lucas
## Ton rôle
Tu es responsable du backend serveur sur OVH (57.128.74.87).
## Lis d'abord
- `/var/www/shared/deployment/BRIEF.md` — le brief commun
## Ce que tu dois faire
1. Identifier TOUTES les valeurs en dur dans analyze.py, alert_ack.php, alert_watchdog.py
2. Créer un format `lucas_config.ini` qui externalise tout
3. Modifier les scripts Python/PHP pour charger depuis cette config
4. Gérer le MULTI-SITE : un seul serveur Lucas doit pouvoir servir N clients
5. Créer un script `add_site.py` pour initialiser un nouveau site (BDD + config + firewall)
6. Documenter le format exact du payload FCM (ce que LucasApp attend)
7. Documenter les endpoints HTTP (ce que SmartEye appelle)
## Écris tes résultats dans
- `/var/www/shared/deployment/lucas/plan.md`
- `/var/www/shared/deployment/lucas/config_spec.ini` (exemple de config)
- `/var/www/shared/deployment/lucas/dependencies.md`
- `/var/www/shared/deployment/lucas/questions.md`
- `/var/www/shared/deployment/lucas/api_contract.md` (endpoints + payloads)
## Consulte les travaux des autres
- `/var/www/shared/deployment/smarteye/` — ce que SmartEye propose
- `/var/www/shared/deployment/lucasapp/` — ce que LucasApp propose
- `/var/www/shared/deployment/synthesis/` — les synthèses croisées
## Quand tu as fini
Écris "DONE" dans `/var/www/shared/deployment/lucas/status.txt`
EOF
echo "✅ Instructions Lucas créées"
# ============================================================
# INSTRUCTIONS LUCASAPP
# ============================================================
cat > "$SHARED/lucasapp/INSTRUCTIONS.md" << 'EOF'
# 📱 Instructions — Agent LucasApp
## Ton rôle
Tu es responsable de l'application mobile Flutter (Android).
## Lis d'abord
- `/var/www/shared/deployment/BRIEF.md` — le brief commun
## Ce que tu dois faire
1. Identifier TOUTES les valeurs en dur dans le code Dart
2. Faire en sorte que l'app soit 100% pilotée par le payload FCM (zéro config statique liée à un site)
3. Vérifier que les URLs RTSP, WebSocket, endpoints API viennent tous du serveur
4. Proposer un `lib/config.dart` minimal (uniquement l'URL de base Lucas)
5. Documenter ce que l'app attend dans le payload FCM (champs requis)
6. S'assurer que l'app fonctionne pour n'importe quel client sans rebuild
## Écris tes résultats dans
- `/var/www/shared/deployment/lucasapp/plan.md`
- `/var/www/shared/deployment/lucasapp/config_spec.dart` (exemple)
- `/var/www/shared/deployment/lucasapp/dependencies.md`
- `/var/www/shared/deployment/lucasapp/questions.md`
- `/var/www/shared/deployment/lucasapp/fcm_payload_spec.md` (ce que le payload doit contenir)
## Consulte les travaux des autres
- `/var/www/shared/deployment/smarteye/` — ce que SmartEye propose
- `/var/www/shared/deployment/lucas/` — ce que Lucas propose
- `/var/www/shared/deployment/synthesis/` — les synthèses croisées
## Quand tu as fini
Écris "DONE" dans `/var/www/shared/deployment/lucasapp/status.txt`
EOF
echo "✅ Instructions LucasApp créées"
# ============================================================
# PERMISSIONS
# ============================================================
chmod -R 775 "$SHARED"
chown -R debian:debian "$SHARED" 2>/dev/null || true
echo ""
echo "════════════════════════════════════════════════════════"
echo "✅ Dossier partagé prêt : $SHARED"
echo "════════════════════════════════════════════════════════"
echo ""
ls -la "$SHARED"
echo ""
echo "Contenu :"
find "$SHARED" -type f | sort
echo ""
echo "🚀 Prochaine étape : coller les prompts dans chaque Claude Code"
echo "════════════════════════════════════════════════════════"