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:
380
mkdocs-smarteye/docs/deploiement/jetson-expert.md
Normal file
380
mkdocs-smarteye/docs/deploiement/jetson-expert.md
Normal file
@@ -0,0 +1,380 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user