91 lines
5.4 KiB
Markdown
91 lines
5.4 KiB
Markdown
# CARIA Automotive · Cockpit
|
||
|
||
Interface tactile automobile en HTML/CSS/JavaScript, déployée avec quatre services Docker. Le rendu et les fonctions du cockpit sont conservés lors du découpage du 13 septembre 2026.
|
||
|
||
## Démarrer ou mettre à jour
|
||
|
||
```sh
|
||
docker compose up -d --build
|
||
```
|
||
|
||
Ouvrir `http://localhost:8080` ou `http://ADRESSE_DU_SERVEUR:8080`. Copier `.env.example` vers `.env` pour personnaliser le port ou les fournisseurs. Les préférences du navigateur restent conservées si l’origine (adresse et port) ne change pas.
|
||
|
||
```sh
|
||
docker compose ps
|
||
docker compose logs --tail=50 interface telemetry weather navigation
|
||
docker compose restart weather
|
||
```
|
||
|
||
Docker et Nginx ne sont pas installés sur le poste de développement : la construction et le lancement de cette nouvelle composition restent à vérifier sur l’hôte Docker. Le modèle et l’architecture de l’ODroid doivent également être confirmés.
|
||
|
||
## Modifier l’UI sans reconstruire
|
||
|
||
```sh
|
||
docker compose -f compose.yaml -f compose.dev.yaml up -d --build
|
||
```
|
||
|
||
Ce mode monte `./ui` en lecture seule dans Nginx. Modifier les fichiers sur l’hôte Docker, puis actualiser le navigateur (Ctrl+F5 si nécessaire). Une modification de `ui/nginx.conf` ou des images demande toujours une reconstruction. Pour revenir au déploiement normal :
|
||
|
||
```sh
|
||
docker compose -f compose.yaml up -d --build --force-recreate interface
|
||
```
|
||
|
||
## Services indépendants
|
||
|
||
| Service | Fonction | Routes publiques |
|
||
| --- | --- | --- |
|
||
| `interface` | Fichiers UI, compression, routage Nginx | `/`, fichiers statiques, relais `/api/…` |
|
||
| `telemetry` | Simulation du véhicule | `/api/telemetry`, `/api/health` |
|
||
| `weather` | Fournisseur météo, cache et limitation des requêtes | `/api/weather` |
|
||
| `navigation` | Géocodage, itinéraires, configuration des tuiles | `/api/search`, `/api/route`, `/api/map-config` |
|
||
|
||
Seul le port de l’interface est publié. Chaque API dispose aussi de son `/api/health` interne. Les trois API réutilisent une image Node sans dépendance npm et sélectionnent un rôle explicite avec `SERVICE_ROLE`. Elles ont des processus, caches et cycles de redémarrage séparés. Nginx résout leurs noms sur le réseau Compose ; il ne dépend pas de leur disponibilité pour servir le cockpit. Une route appartenant à un autre rôle renvoie 404.
|
||
|
||
Les chemins API et leurs réponses restent identiques. Les images n’embarquent ni les tests ni les anciens fichiers du projet scolaire. L’audio local reste dans le navigateur : aucun service audio n’est ajouté artificiellement.
|
||
|
||
## Développement sans Docker
|
||
|
||
Avec Node.js 22 ou supérieur :
|
||
|
||
```sh
|
||
npm start
|
||
```
|
||
|
||
Le serveur de développement regroupe les API et les fichiers UI sur le port 8080. `HOST` et `PORT` sont configurables. Le déploiement Compose emploie les rôles séparés ; le mode regroupé ne sert qu’au développement et aux tests.
|
||
|
||
## Fonctions conservées
|
||
|
||
- Accueil avec heure, météo et accès multimédia ; température extérieure du véhicule dans l’en-tête.
|
||
- Cadrans analogiques, analogiques lumineux et numériques ; petits instruments carburant/température, rapport et page de détails. Données véhicule simulées ; CAN non connecté.
|
||
- Thèmes jour/nuit, couleurs et pastille personnalisée ; favoris, hamburger, menus et préférences locales.
|
||
- Bibliothèque musicale locale et lecteur immersif partageant le même audio, halo, aléatoire, répétition, volume. Un appui sur précédent revient au début, deux appuis rapides reviennent au morceau précédent.
|
||
- Jellyfin fixé à `https://media.cunatbrule.fr/web/`, Spotify, YouTube, YouTube Music et Waze. Les lecteurs intégrés restent soumis aux possibilités des services.
|
||
- Carte Leaflet, recherche Photon, itinéraires OSRM, météo Open-Meteo et import de zones GeoJSON. Pas de base radar fournie ni de cartographie hors ligne.
|
||
|
||
L’écran de référence reste un 10 pouces paysage, 1200 × 1080. Le navigateur, le tactile, le son et le kiosque relèvent de l’OS. L’accès GPS Web demande HTTPS ou localhost ; un départ manuel reste possible. Les fichiers musicaux doivent être resélectionnés après rechargement.
|
||
|
||
## Organisation
|
||
|
||
- `ui/app.js` : navigation, réglages et acquisition de télémétrie.
|
||
- `ui/instruments.js` : rendu SVG et projection des mesures.
|
||
- `ui/music.js` : bibliothèque, sélection et commandes audio partagées.
|
||
- `ui/cockpit.js` : disposition, lecteur immersif et pagination.
|
||
- `ui/theme.js`, `applications.js`, `embeds.js`, `journey.js`, `geo.js` : fonctions UI dédiées.
|
||
- `server/` : HTTP, rôles, fournisseurs et simulateur ; tests unitaires.
|
||
- `tests/` : tests navigateur ; `docs/` : contrats et guides.
|
||
|
||
`WebControl/` a été supprimé par le propriétaire. Aucun composant actuel n’en dépend. La licence Leaflet reste dans `ui/vendor/leaflet/LICENSE` ; la licence globale du projet reste à définir.
|
||
|
||
## Vérification
|
||
|
||
```sh
|
||
npm test
|
||
node tests/touch-browser.mjs
|
||
node tests/applications-browser.mjs
|
||
node tests/browser.mjs
|
||
```
|
||
|
||
Les tests navigateur nécessitent Playwright et Chromium dans l’environnement de test, et un serveur démarré. Variables : `CARIA_URL`, `CHROME_PATH`, `PLAYWRIGHT_MODULE` (URL `file:///…` si nécessaire). Aucune dépendance de test n’est installée dans les images. Fournisseurs et tuiles sont simulés pendant les tests.
|
||
|
||
Voir [le contrat et l’architecture](docs/architecture.md), [les applications](docs/applications.md), [la navigation](docs/navigation.md) et [le bilan du nettoyage](docs/maintenance.md).
|