# Installation du Jetson SmartEye

## Philosophie : le Jetson est une Box

Le Jetson SmartEye se deploie comme une box internet (Free, Orange). L'installateur arrive chez le beneficiaire avec le boitier pre-configure, le branche sur le reseau local, et **tout se passe depuis son smartphone**. Aucun ecran, aucun clavier, aucun cable HDMI.

```mermaid
graph LR
    subgraph Domicile["Domicile du beneficiaire"]
        BOX["Jetson SmartEye"]
        CAM1["Camera 1"]
        CAM2["Camera 2"]
        CAM3["Camera 3"]
        ROUTER["Box Internet"]
        BOX ---|Ethernet| ROUTER
        CAM1 ---|WiFi/Ethernet| ROUTER
        CAM2 ---|WiFi/Ethernet| ROUTER
        CAM3 ---|WiFi/Ethernet| ROUTER
    end

    subgraph Install["Smartphone installateur"]
        APP["LucasApp / Navigateur"]
    end

    ROUTER ---|WiFi| APP
    APP -.->|"http://smarteye.local:8080"| BOX
```

## Materiel necessaire

| Element | Detail |
|---------|--------|
| **Jetson Orin Nano** | Avec SmartEye pre-installe sur carte SD |
| **Alimentation** | USB-C 5V/3A (fournie) |
| **Cable Ethernet** | RJ45, branchement sur la box internet du client |
| **Cameras IP** | CTronic ou compatible ONVIF, deja installees |
| **Smartphone** | Android ou iOS, connecte au meme reseau WiFi |

---

## Etape 1 : Branchement physique

1. **Brancher le cable Ethernet** du Jetson a la box internet du client
2. **Brancher l'alimentation USB-C** du Jetson
3. **Attendre 60 secondes** — le Jetson demarre et se connecte au reseau local

!!! info "LED de statut"
    Le Jetson n'a pas d'ecran mais dispose d'une LED verte :

    - **Clignotement lent** : demarrage en cours
    - **Fixe** : connecte au reseau, pret pour la configuration
    - **Clignotement rapide** : surveillance active, tout fonctionne

---

## Etape 2 : Decouverte sur le reseau local

Le Jetson annonce automatiquement sa presence sur le reseau local via **mDNS (Avahi/Bonjour)**. Depuis le smartphone connecte au meme WiFi :

### Option A : Acces direct (recommande)

Ouvrir un navigateur et aller a :

```
http://smarteye.local:8080
```

!!! tip "Si smarteye.local ne repond pas"
    Certaines box internet bloquent le mDNS. Dans ce cas, utiliser l'option B.

### Option B : Scan reseau depuis LucasApp

1. Ouvrir **LucasApp** sur le smartphone
2. Aller dans **Parametres > Installer un SmartEye**
3. L'application scanne le reseau local (plage 192.168.x.x)
4. Le Jetson apparait dans la liste des appareils detectes
5. Appuyer dessus pour ouvrir l'interface de configuration

```mermaid
sequenceDiagram
    participant Phone as Smartphone
    participant Jetson as Jetson SmartEye
    participant Router as Box Internet

    Phone->>Router: Scan reseau local (UDP broadcast)
    Router-->>Phone: Liste des appareils
    Phone->>Jetson: GET /api/identity (port 8080)
    Jetson-->>Phone: {"type": "smarteye", "version": "v30", "status": "setup"}
    Phone->>Phone: Affiche "SmartEye detecte"
```

### Option C : QR Code sur le boitier

Un QR code colle sur le Jetson contient son adresse MAC. LucasApp peut scanner ce QR code pour identifier le bon appareil sur le reseau.

---

## Etape 3 : Interface de configuration (WebUI)

L'interface web du Jetson s'affiche sur le smartphone. L'installation se fait en **4 sous-etapes** guidees.

### 3.1 — Identification du site

| Champ | Description | Exemple |
|-------|-------------|---------|
| **ID Client** | Identifiant du beneficiaire (fourni par Lucas) | `dupont_marie` |
| **Token** | Jeton d'authentification (fourni par Lucas) | `b5ce5015` |
| **Nom du site** | Nom lisible | `Residence Dupont` |

!!! warning "Ou trouver l'ID et le Token ?"
    L'ID client et le token sont generes lors de la creation du dossier dans l'interface d'administration Lucas ([admin.php](https://lucas.unigest.fr/admin.php)). Voir le [Guide nouveau client](../guide/nouveau-client.md).

### 3.2 — Detection automatique des cameras (ONVIF)

Le Jetson scanne le reseau local a la recherche de cameras compatibles ONVIF.

```
Scan en cours...

Camera detectee : 192.168.1.143 (CTronic - Salon)
Camera detectee : 192.168.1.148 (CTronic - Chambre)
Camera detectee : 192.168.1.152 (CTronic - Cuisine)

3 cameras trouvees.
```

Pour chaque camera detectee :

| Champ | Auto-detecte | Modifiable |
|-------|:------------:|:----------:|
| **Adresse IP** | Oui | Oui |
| **Nom** (piece) | Non | Oui |
| **Login RTSP** | Non | Oui |
| **Mot de passe RTSP** | Non | Oui |
| **Flux HD** (/11) | Oui | Oui |
| **Flux SD** (/12) | Oui | Oui |
| **Active** | Oui | Oui |

!!! tip "Verifier le flux en direct"
    Appuyer sur **Tester** a cote de chaque camera pour afficher un apercu en direct sur le smartphone. Cela confirme que les identifiants RTSP sont corrects.

### 3.3 — Connexion au serveur Lucas

Le Jetson doit etablir une connexion securisee (tunnel SSH) vers le serveur OVH.

| Parametre | Valeur par defaut | Modifiable |
|-----------|-------------------|:----------:|
| **Serveur** | `57.128.74.87` | Oui |
| **Utilisateur SSH** | `debian` | Oui |
| **Domaine** | `lucas.unigest.fr` | Oui |
| **Numero de site** | Auto (prochain disponible) | Oui |

```mermaid
sequenceDiagram
    participant Jetson
    participant OVH as Serveur OVH

    Jetson->>OVH: Test connexion SSH
    OVH-->>Jetson: OK - Cle autorisee
    Jetson->>OVH: Ouverture tunnels RTSP (ports 8560-8565)
    Jetson->>OVH: Ouverture tunnel Audio (port 8566)
    Jetson->>OVH: POST api.php (test image)
    OVH-->>Jetson: 200 OK - Client reconnu
    Jetson-->>Jetson: Connexion validee
```

!!! note "Attribution automatique des ports"
    Le Jetson calcule automatiquement sa plage de ports selon la convention :

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

    Ports attribues :
      base+0 a base+5 : RTSP cameras (max 6)
      base+6           : Audio WebSocket
      base+7           : WebUI locale
      base+8 a base+9  : Reserves
    ```

    Exemple pour le site n°2 : ports 8560 a 8569.

### 3.4 — Test de bout en bout

Le Jetson effectue un test complet de la chaine :

```
[1/5] Connexion cameras RTSP............ OK
[2/5] Detection IA (YOLO)............... OK (personne detectee)
[3/5] Tunnel SSH vers OVH............... OK
[4/5] Envoi image test a api.php........ OK (Gemini: "RAS")
[5/5] Notification push Firebase........ OK (recue sur LucasApp)

=== INSTALLATION TERMINEE ===
SmartEye est operationnel.
La surveillance demarre automatiquement.
```

!!! success "Installation terminee"
    Une fois le test valide, le Jetson passe en mode **surveillance active**. Il demarre automatiquement a chaque mise sous tension, sans aucune intervention.

---

## Etape 4 : Verification depuis LucasApp

Sur le smartphone de chaque aidant :

1. Ouvrir **LucasApp**
2. Verifier que le flux video en direct est accessible
3. Verifier que l'interphone fonctionne (audio bidirectionnel)
4. Effectuer un **test de chute simule** :
    - Se coucher au sol dans le champ d'une camera
    - Attendre ~30 secondes
    - Verifier la reception de la notification push
    - Verifier l'image et le message Gemini dans l'alerte

---

## Architecture reseau complete

```mermaid
graph TB
    subgraph Domicile["Domicile du beneficiaire"]
        CAM1["Camera 1<br/>192.168.1.143"]
        CAM2["Camera 2<br/>192.168.1.148"]
        CAM3["Camera 3<br/>192.168.1.152"]
        JETSON["Jetson SmartEye<br/>192.168.1.xxx"]
        ROUTER["Box Internet<br/>192.168.1.1"]

        CAM1 -->|RTSP local| JETSON
        CAM2 -->|RTSP local| JETSON
        CAM3 -->|RTSP local| JETSON
        JETSON ---|Ethernet| ROUTER
    end

    subgraph OVH["Serveur OVH (57.128.74.87)"]
        SSH["SSH Gateway"]
        RTSP_RELAY["Relay RTSP<br/>ports 8560-8565"]
        AUDIO["Audio WebSocket<br/>port 8566"]
        API["api.php"]
        GEMINI["Gemini 2.5 Flash"]
        FCM["Firebase Cloud Messaging"]
    end

    JETSON ==>|"SSH Tunnel (autossh)<br/>Persistant, auto-reconnect"| SSH
    SSH --> RTSP_RELAY
    SSH --> AUDIO
    JETSON ==>|"POST image<br/>si chute detectee"| API
    API --> GEMINI
    GEMINI --> FCM

    subgraph Aidants["Smartphones aidants"]
        APP1["LucasApp - Fille"]
        APP2["LucasApp - Fils"]
    end

    FCM ==>|Push notification| APP1
    FCM ==>|Push notification| APP2
    RTSP_RELAY -.->|"Flux video live"| APP1
    AUDIO -.->|"Interphone"| APP1
```

---

## Fichier de configuration genere

A la fin de l'installation, le Jetson cree automatiquement le fichier `smarteye_config.yaml` :

```yaml
# Genere automatiquement par l'assistant d'installation
# Ne pas modifier manuellement sauf si necessaire

site:
  id: "dupont_marie"
  name: "Residence Dupont"
  client_token: "b5ce5015"

server:
  api_url: "https://lucas.unigest.fr/api.php"
  ovh_ip: "57.128.74.87"
  ssh_user: "debian"

ports:
  site_number: 2
  base_port: 8560

cameras:
  - id: "Cam1"
    name: "Salon"
    ip: "192.168.1.143"
    username: "admin"
    password: "********"
    stream_hd: "/11"
    stream_sd: "/12"
    tunnel_port: 8560
    enabled: true

  - id: "Cam2"
    name: "Chambre"
    ip: "192.168.1.148"
    username: "admin"
    password: "********"
    stream_hd: "/11"
    stream_sd: "/12"
    tunnel_port: 8561
    enabled: true

  - id: "Cam3"
    name: "Cuisine"
    ip: "192.168.1.152"
    username: "admin"
    password: "********"
    stream_hd: "/11"
    stream_sd: "/12"
    tunnel_port: 8562
    enabled: true

audio:
  local_port: 8800
  tunnel_port: 8566

detection:
  yolo:
    std_confidence: 0.15
    pose_confidence: 0.25
  alert_interval: 120
```

---

## Maintenance et acces distant

Une fois installe, le Jetson est accessible a distance depuis le serveur OVH via le tunnel SSH inverse :

```bash
# Depuis le serveur OVH, acceder au WebUI du Jetson
# (tunnel inverse sur le port base+7)
curl http://localhost:8567/api/status
```

### Commandes utiles (pour le support technique)

| Action | Commande |
|--------|----------|
| **Statut du Jetson** | `curl http://localhost:<base+7>/api/status` |
| **Redemarrer SmartEye** | `ssh -p <tunnel> jetson "sudo systemctl restart smarteye"` |
| **Voir les logs** | `ssh -p <tunnel> jetson "journalctl -u smarteye -f"` |
| **Mettre a jour** | `ssh -p <tunnel> jetson "cd /w && git pull && sudo systemctl restart smarteye"` |

!!! warning "Resilience reseau"
    Le service `autossh` maintient les tunnels SSH en permanence. En cas de coupure internet :

    - Les tunnels se retablissent automatiquement a la reconnexion
    - SmartEye continue la detection localement meme sans internet
    - Les alertes en attente sont envoyees des que la connexion revient

---

## Resume du flux d'installation

```mermaid
graph TD
    A["Branchement Ethernet + USB-C"] --> B["Demarrage automatique (60s)"]
    B --> C["Annonce mDNS sur le reseau local"]
    C --> D{"Smartphone detecte le Jetson"}
    D -->|"smarteye.local:8080"| E["WebUI de configuration"]
    D -->|"LucasApp scan"| E
    D -->|"QR Code"| E
    E --> F["Saisie ID client + Token"]
    F --> G["Scan ONVIF des cameras"]
    G --> H["Configuration des cameras"]
    H --> I["Connexion SSH vers OVH"]
    I --> J["Test de bout en bout"]
    J -->|"Tout OK"| K["Surveillance active"]
    J -->|"Echec"| L["Diagnostic et correction"]
    L --> J

    style A fill:#455a64,color:#fff
    style K fill:#00695c,color:#fff
    style L fill:#bf360c,color:#fff
```
