Files

91 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).