# Architecture du système

## Vue d'ensemble

```mermaid
graph TB
    subgraph Domicile["🏠 Domicile du bénéficiaire"]
        CAM1[Caméra 1 - Salon]
        CAM2[Caméra 2 - Chambre]
        CAM3[Caméra 3 - Cuisine]
        JETSON[Jetson Orin Nano<br/>SmartEye v30]
        CAM1 -->|RTSP local| JETSON
        CAM2 -->|RTSP local| JETSON
        CAM3 -->|RTSP local| JETSON
    end

    subgraph OVH["☁️ Serveur OVH (57.128.74.87)"]
        API[api.php<br/>Réception images]
        ANALYZE[analyze.py<br/>Gemini 2.5 Flash]
        ALERT[alert_manager.py<br/>Cycle de vie alertes]
        WATCHDOG[alert_watchdog.py<br/>Escalade cron]
        DB[(database.json)]
        API --> ANALYZE
        ANALYZE --> ALERT
        ANALYZE --> DB
        WATCHDOG --> ALERT
    end

    subgraph Mobile["📱 Téléphones aidants"]
        APP1[LucasApp - Fille]
        APP2[LucasApp - Fils]
    end

    JETSON ==>|SSH Tunnel<br/>Image POST| API
    ANALYZE ==>|Firebase Push| APP1
    ANALYZE ==>|Firebase Push| APP2
    JETSON -.->|RTSP Tunnel| APP1
    JETSON -.->|Audio WebSocket| APP1
```

## Composants

### SmartEye (Jetson Orin Nano)

| Caractéristique | Détail |
|----------------|--------|
| **Modèle IA** | YOLOv8 (détection) + pose estimation |
| **Caméras max** | 6 par site |
| **Flux** | HD (/11) pour détection, SD (/12) pour streaming |
| **Communication** | SSH tunnels inversés vers OVH |

### Lucas (Serveur OVH)

| Caractéristique | Détail |
|----------------|--------|
| **Analyse IA** | Google Gemini 2.5 Flash (vision) |
| **Notifications** | Firebase Cloud Messaging |
| **SMS backup** | OVH SMS API |
| **Dashboard** | PHP + Tailwind CSS |

### LucasApp (Flutter)

| Caractéristique | Détail |
|----------------|--------|
| **Plateforme** | Android (Flutter) |
| **Flux vidéo** | RTSP via tunnels SSH |
| **Interphone** | WebSocket audio bidirectionnel (PCM A-law) |
| **Acquittement** | POST vers alert_ack.php |

## Convention de ports

Chaque site client utilise une plage de 10 ports :

```
Site N → base_port = 8550 + (N-1) × 10

Offset 0-5 : RTSP caméras (max 6)
Offset 6   : Audio WebSocket relay
Offset 7   : WebUI locale SmartEye
Offset 8-9 : Réservés
```

!!! note "Site pilote (Aléria)"
    Le site pilote conserve ses ports historiques : 8554/8555/8556 (RTSP) + 8800 (audio).
