LogiTrain — Guide d'administration
Version 0.1 — septembre 2026 — InTech Solutions pour le CFA Sidi Mansour (ATFP)
Ce guide s'adresse à la personne qui installe et exploite le serveur LogiTrain : informaticien du centre ou formateur référent. Il couvre l'installation, la configuration initiale, les comptes, les bases de données par promotion, les sauvegardes, le RFID, les mises à jour et le dépannage.
Documents liés : manuel_utilisateur.md (utilisation des écrans), guide_formateur.md (conduite des cours), docs/API.md (API ouverte), logitrain_wms/static/description/rfid_hardware.md (matériel RFID indicatif).
1. Vue d'ensemble
LogiTrain est un ensemble de modules Odoo 18 Community (logiciel libre, aucune licence récurrente) installés sur un serveur du centre et utilisés depuis un simple navigateur web sur les postes de la salle.
| Module Odoo | Rôle | Menu dans LogiTrain |
|---|---|---|
logitrain_base |
Cadre de formation : promotions, exercices, remises, notation, catalogue (types de contenants, profils de véhicules, compétences), paramètres, réinitialisation | Formation, Catalogue, Configuration |
logitrain_tour |
Tournées de livraison : carte, itinéraires, optimisation, réglementation | Tournées |
logitrain_loadplan |
Plans de chargement 3D (véhicules, conteneurs, palettes) | Plans de chargement |
logitrain_tour_loadplan |
Liaison tournée → plan de chargement (installé automatiquement) | bouton sur la tournée |
logitrain_tour_fleet |
Liaison tournée → parc (mission, consommation, contrôle des documents) (installé automatiquement) | voir manuel, section Tournées |
logitrain_fleet |
Gestion de parc : administratif, technique, financier | Parc |
logitrain_wms |
Entrepôt et RFID | Entrepôt et RFID |
logitrain_demo_tn |
Jeu de données pédagogique tunisien fictif (base modèle) | — |
Services techniques autour d'Odoo (tous auto-hébergés, sans abonnement) :
| Service | Rôle | Obligatoire ? |
|---|---|---|
| PostgreSQL 16 | Base de données | Oui |
| OSRM | Calcul d'itinéraires routiers et de matrices distance/temps sur la carte OpenStreetMap de la Tunisie | Non : sans OSRM, les tournées passent en mode approché (vol d'oiseau × coefficient routier) |
| VROOM | Optimisation des tournées multi-véhicules | Non : sans VROOM, une heuristique intégrée prend le relais |
| Serveur de tuiles (tileserver-gl) | Fond de carte hors ligne | Non : sinon tuiles OpenStreetMap en ligne |
| nginx | Point d'entrée web (port 80), restriction du gestionnaire de bases | Oui |
| backup | Sauvegarde quotidienne automatique | Recommandé |
| rfid-bridge | Passerelle entre un lecteur RFID fixe (LLRP) ou série et Odoo | Non : uniquement avec un lecteur fixe |
Principe pédagogique : aucun cours ne doit être bloqué par un moteur absent. Sans Internet, sans OSRM et sans VROOM, toutes les fonctions restent utilisables en mode approché.
2. Prérequis
2.1 Serveur
| Élément | Recommandation (≤ 30 utilisateurs simultanés) |
|---|---|
| Système | Linux 64 bits (Ubuntu Server 22.04 ou 24.04 LTS conseillé). Sur Windows Server, utiliser une machine virtuelle Linux (Hyper-V). |
| Processeur | 4 vCPU |
| Mémoire | 8 Go (Odoo ≈ 2 Go, PostgreSQL ≈ 2 Go, OSRM Tunisie ≈ 1 Go ; la construction du graphe OSRM demande environ 2 Go) |
| Disque | 60 Go (bases, pièces jointes, sauvegardes 14 jours, données OSM) |
| Logiciels | Docker Engine et le plugin Docker Compose v2, git, curl |
| Réseau | Adresse IP fixe sur le réseau local de la salle ; port 80 ouvert vers les postes |
2.2 Postes de la salle
Navigateur récent (Chrome, Edge ou Firefox). Aucune installation. La vue 3D des plans de chargement utilise WebGL (actif par défaut sur tous les navigateurs récents).
2.3 Accès Internet
Nécessaire seulement pour : télécharger les images Docker et l'extrait OpenStreetMap lors de l'installation, et (facultatif) afficher les tuiles OpenStreetMap en ligne. En mode hors ligne, rien ne sort du serveur (voir § 4.3).
3. Installation (pile docker-compose)
Tous les fichiers de déploiement sont dans le dossier deploy/ du dépôt.
3.1 Récupérer le logiciel
sudo mkdir -p /opt/logitrain && cd /opt/logitrain
git clone <URL du dépôt> intech-logitrain
cd intech-logitrain/deploy
Le fichier
Dockerfile.odoocopie le dossieraddons/du dépôt dans l'image Odoo (/mnt/logitrain-addons). Vérifier que ce dossier contient bien les huit modules listés au § 1 avant de construire l'image.
3.2 Fichier .env
cp .env.example .env
nano .env
| Variable | Rôle |
|---|---|
POSTGRES_PASSWORD |
Mot de passe de l'utilisateur PostgreSQL odoo — à changer |
ODOO_ADMIN_PASSWD |
Mot de passe maître Odoo — à changer (voir remarque ci-dessous) |
ODOO_IMAGE_TAG |
Version de l'image Odoo (laisser 18.0) |
PUBLIC_HOST |
Nom ou IP du serveur vu par les postes (ex. logitrain.centre.local) |
OSM_PBF_URL |
Extrait OpenStreetMap utilisé par osrm/build.sh (Tunisie, Geofabrik, par défaut) |
TILES_URL |
Rappel de l'URL de tuiles à saisir dans les paramètres Odoo |
Mot de passe maître :
deploy/odoo.confdésactive la liste et le gestionnaire web des bases (list_db = False), ce qui protège déjà les bases. Si vous réactivez le gestionnaire, ajoutez une ligneadmin_passwd = <mot de passe fort>dansodoo.conf.
3.3 Construire le graphe routier OSRM (Tunisie)
./osrm/build.sh
Le script télécharge tunisia-latest.osm.pbf (Geofabrik), puis exécute osrm-extract (profil voiture), osrm-partition et osrm-customize (algorithme MLD). Compter quelques minutes et ~2 Go de mémoire. Le résultat est dans deploy/osrm/data/.
Mise à jour de la carte (gratuite, à faire par exemple chaque trimestre) : supprimer osrm/data/tunisia-latest.osm.pbf, relancer ./osrm/build.sh, puis docker compose restart osrm vroom.
Limite connue : OSRM utilise le profil voiture pour tous les véhicules. Le comportement des poids lourds est approché par le coefficient de vitesse du profil de véhicule ; les restrictions poids lourds (hauteur, poids, zones) sont simulées par LogiTrain sur le tracé calculé (voir manuel, Restrictions routières).
3.4 Démarrer la pile
docker compose up -d --build
docker compose ps # tous les services doivent être "running" / "healthy"
Services démarrés : db, odoo, osrm, vroom, nginx, backup. Le serveur est accessible sur http://<PUBLIC_HOST>/.
VROOM est configuré par deploy/vroom/config.yml : moteur de routage osrm (service osrm:5000), jusqu'à 1 000 points et 50 véhicules par problème, délai maximal 300 s.
3.5 Fond de carte hors ligne (facultatif)
- Produire un fichier
.mbtilescouvrant la Tunisie (zooms 5 à 14), par exemple à partir d'OpenMapTiles ou Protomaps. - Le copier dans
deploy/tiles/data/tunisia.mbtilesavec unconfig.jsonpour tileserver-gl. - Démarrer le service :
docker compose --profile offline up -d tiles. - Dans Odoo, Paramètres → LogiTrain → Tuiles de carte :
http://<PUBLIC_HOST>/tiles/styles/basic/{z}/{x}/{y}.png.
nginx publie le serveur de tuiles sous /tiles/ (cache navigateur 30 jours). Les données OpenStreetMap sont sous licence ODbL : l'attribution « © OpenStreetMap contributors » reste affichée sur les cartes.
3.6 nginx
Fichier deploy/nginx/logitrain.conf :
- proxy vers Odoo (port 8069) et le canal temps réel
/websocket(port 8072) ; /web/database/*accessible uniquement depuis les réseaux192.168.0.0/16et10.0.0.0/8— adapter au plan d'adressage du centre ;/logitrain/rfid/ouvert pour la passerelle RFID (authentification par jeton dans Odoo) ;/tiles/vers le serveur de tuiles hors ligne ;- taille maximale des envois : 64 Mo.
La configuration fournie écoute en HTTP (port 80) sur le réseau local. Pour du HTTPS, ajouter un bloc listen 443 ssl avec le certificat du centre.
3.7 Créer la base modèle (« golden template »)
Le gestionnaire web des bases étant désactivé, les bases se créent en ligne de commande :
docker compose run --rm odoo odoo -d logitrain_template \
-i logitrain_demo_tn --load-language=fr_FR,ar_001 \
--without-demo=all --stop-after-init
docker compose restart odoo
L'installation de logitrain_demo_tn entraîne celle de tous les modules LogiTrain (les modules de liaison logitrain_tour_loadplan et logitrain_tour_fleet s'installent automatiquement) et charge le jeu de données fictif : société SudLog Distribution (dépôt de Sfax), une trentaine de clients géolocalisés avec secteurs de livraison, produits avec dimensions, codes-barres, lots, dates de péremption et étiquettes RFID ; entrepôt avec zones (réception, racks, chambre froide, zone ADR, quarantaine, expédition, retours, magasin pièces) et allées D à F dessinées sur la carte ; parc de 5 véhicules (fourgon à semi-remorque) avec documents, contrats, pneus, amortissements, missions et incidents ; bibliothèque de contenants et profils ; restrictions routières et péages d'exemple ; plans de tournées, plan récurrent, plans de chargement et scénarios d'exemple ; une promotion, des exercices, 2 formateurs et 5 apprenants (voir § 6.4).
Se connecter ensuite une première fois : http://<PUBLIC_HOST>/web/login?db=logitrain_template avec le compte admin (mot de passe initial admin), puis changer immédiatement ce mot de passe (menu utilisateur → Mon profil / Préférences → Changer le mot de passe).
3.8 Contrôle après installation (recette technique)
| # | Test | Résultat attendu |
|---|---|---|
| 1 | docker compose ps |
6 services actifs |
| 2 | curl http://<PUBLIC_HOST>/logitrain/rfid/ping |
{"ok": true} |
| 3 | Connexion admin, menu LogiTrain visible |
Sous-menus Tournées, Plans de chargement, Parc, Entrepôt et RFID, Formation, Catalogue, Configuration |
| 4 | Tournées → Plans de tournées, ouvrir « Tournée Sud », calculer une tournée | Tracé routier sur la carte, moteur « osrm » ; si « approximate », vérifier l'URL OSRM |
| 5 | Plans de chargement, ouvrir « Exemple — camion 19 t », Calculer le plan de chargement | Vue 3D affichée, indicateurs remplis |
| 6 | Entrepôt et RFID → Carte de l'entrepôt | Allées et racks colorés |
| 7 | Imprimer un PDF (fiche véhicule, plan de chargement) | PDF généré |
| 8 | Changer la langue en arabe (§ 5) | Interface de droite à gauche, libellés traduits |
| 9 | Lendemain : dossier deploy/backup/out/ |
Un fichier .dump par base + une archive filestore-*.tgz |
4. Configuration initiale
4.1 Société
Paramètres → Utilisateurs et sociétés → Sociétés : renseigner le nom du centre (ou de la société fictive), le pays Tunisie et la devise TND (dinar tunisien, 3 décimales). Les coûts (tournées, parc, chargement) s'affichent dans la devise de la société. Le logo apparaît sur les documents PDF.
4.2 Paramètres LogiTrain
Menu : LogiTrain → Configuration → Paramètres (ou Paramètres → onglet LogiTrain). Réservé au groupe Administrateur LogiTrain.
| Bloc | Paramètre | Valeur type (pile Docker) | Effet |
|---|---|---|---|
| Moteurs de calcul | URL OSRM | http://osrm:5000 |
Itinéraires et matrices. Vide ou injoignable → mode approché |
| Moteurs de calcul | URL VROOM | http://vroom:3000 |
Optimisation multi-véhicules. Vide ou injoignable → heuristique intégrée |
| Moteurs de calcul | Mode hors ligne | coché si pas d'OSRM | N'appelle jamais de moteur externe : tournées en mode approché (vol d'oiseau × coefficient routier des règles, 1,3 par défaut) |
| Cartes | Tuiles de carte | https://tile.openstreetmap.org/{z}/{x}/{y}.png (en ligne) ou l'URL locale du § 3.5 |
Fond de carte des widgets. Une URL locale ajoute la couche « Local tiles » au sélecteur de couches ; elle devient la couche par défaut en mode hors ligne |
| Cartes | Géocodage (Nominatim) | vide (désactivé) ou URL d'un serveur Nominatim | Conversion adresse → coordonnées GPS (bouton de géocodage des contacts et des arrêts). Vide = désactivé ; les coordonnées peuvent toujours être choisies en cliquant sur la carte |
Les URL osrm et vroom sont les noms des services dans le réseau Docker : ne pas les remplacer par localhost.
4.3 Fonctionnement hors ligne
Si la salle n'a pas Internet :
- Construire OSRM pendant l'installation (le graphe fonctionne ensuite sans Internet) — ou cocher Mode hors ligne.
- Installer le fond de carte local (§ 3.5).
- Laisser Géocodage (Nominatim) vide, sauf si un serveur Nominatim local a été installé (non fourni dans la pile).
Aucune fonction LogiTrain n'appelle alors de service extérieur.
4.4 Paramètres pédagogiques
Les règles métier modifiables par les formateurs (règles de tournée, restrictions routières, TVA, barème de taxe, coefficients d'amortissement, plans pneumatiques, réglementation conducteurs, infractions, matrice ADR, bibliothèque de contenants, catégories de stockage) sont décrites dans le guide formateur, § 5. Les valeurs livrées sont des valeurs d'exemple à vérifier et remplacer par les valeurs tunisiennes en vigueur.
4.5 Tâches planifiées
Paramètres → Technique → Automatisation → Actions planifiées (mode développeur). Toutes quotidiennes :
| Action | Rôle |
|---|---|
| LogiTrain Parc : alertes d'expiration des documents | Met à jour l'état des documents ; activité à J-30 et J-7 ; rappel de contre-visite technique à J-7 |
| LogiTrain Parc : planification de la maintenance préventive | Crée les interventions planifiées dues (km ou temps) et une activité |
| LogiTrain Fleet: tyre rotation / replacement plan | Signale les pneus à permuter ou remplacer |
| LogiTrain WMS : purge des anciennes lectures RFID | Supprime les lectures brutes de plus de 30 jours |
Pour une démonstration, un formateur peut lancer la vérification d'un plan de maintenance immédiatement avec le bouton Vérifier maintenant du plan.
5. Langues français / arabe
L'interface est livrée en anglais (langue source), français et arabe (fichiers i18n/fr.po et i18n/ar.po de chaque module).
5.1 Activer les langues
- À la création de la base : option
--load-language=fr_FR,ar_001(§ 3.7). - Après coup : Paramètres → Paramètres généraux → Langues → Ajouter des langues, choisir French / Français puis Arabic / العربية.
Les traductions des langues activées sont rechargées automatiquement à chaque mise à jour des modules (-u, § 11). Pour forcer le remplacement de termes déjà présents en base, ajouter l'option --i18n-overwrite à la commande de mise à jour.
5.2 Changer de langue
Chaque utilisateur choisit sa langue : menu utilisateur (en haut à droite) → Mon profil / Préférences → Langue. Le changement est immédiat après rechargement de la page ; l'arabe s'affiche de droite à gauche. L'administrateur peut fixer la langue par défaut de chaque compte (Paramètres → Utilisateurs).
Les documents PDF sont imprimés dans la langue de l'utilisateur qui les génère : pour obtenir un plan de chargement en arabe, basculer la langue puis imprimer.
5.3 Limites connues
- Les traductions arabes n'ont pas encore été relues par un locuteur natif.
- Les libellés ajoutés en dernier (certains écrans du parc, de l'entrepôt et des tournées) peuvent apparaître en anglais tant que les fichiers
.pon'ont pas été complétés : les signaler à InTech. - Les données du jeu de démonstration (noms des clients, produits, exercices) sont en français.
5.4 Unités et formats
Kilomètres, kilogrammes, millimètres et m³ ; heures au format 24 h ; montants en TND. Le fuseau horaire se règle par utilisateur (Préférences → Fuseau horaire : Africa/Tunis).
6. Utilisateurs et droits
6.1 Groupes LogiTrain
Paramètres → Utilisateurs et sociétés → Utilisateurs, ouvrir ou créer l'utilisateur, onglet Droits d'accès, rubrique LogiTrain :
| Groupe | Ce qu'il permet |
|---|---|
| Apprenant | Travaille sur ses propres tournées, plans de chargement, missions, réparations, sessions RFID, inventaires… et sur les enregistrements « partagés » (sans propriétaire, ex. données de démonstration). Lecture seule sur les données de base (règles, catalogue, barèmes). Ne voit pas les travaux des autres apprenants (sauf plan de chargement explicitement partagé). Ne voit pas les corrigés. |
| Formateur | Tout ce que fait l'apprenant + gestion des promotions, exercices, corrigés, notation, données de base et paramètres pédagogiques ; voit les enregistrements de tous les apprenants ; approuve les bons de sortie et les réparations ; outils de simulation RFID ; menu Configuration des modules. |
| Administrateur | Tout ce que fait le formateur + Configuration → Paramètres (moteurs, cartes), lecteurs RFID et leurs jetons. |
Les groupes sont cumulatifs (Administrateur ⊃ Formateur ⊃ Apprenant).
6.2 Droits Odoo standard à ajouter
| Application | Apprenant | Formateur | Pourquoi |
|---|---|---|---|
| Parc automobile | Utilisateur (ajouté automatiquement par le groupe LogiTrain) | Administrateur (ajouté automatiquement) | Accès aux véhicules, contrats, interventions |
| Inventaire | Utilisateur — à cocher manuellement | Administrateur — à cocher manuellement | Réceptions, transferts, inventaires, emplacements (module Entrepôt et RFID) |
Sans le droit Inventaire, un apprenant ne peut pas travailler dans le module Entrepôt et RFID.
6.3 Créer les comptes d'une promotion
- Paramètres → Utilisateurs → Nouveau : nom, identifiant (ex.
app2026a01), langue, fuseau horaire. - Droits : LogiTrain = Apprenant, Inventaire = Utilisateur.
- Définir le mot de passe (menu Action → Changer le mot de passe).
- Répéter pour chaque apprenant (le cahier des charges prévoit 20 postes) ; pour aller plus vite, dupliquer un compte modèle (Action → Dupliquer) puis changer nom et identifiant.
- Ajouter les comptes à la promotion (LogiTrain → Formation → Promotions, voir guide formateur).
Les comptes peuvent aussi être importés depuis un fichier Excel/CSV (vue liste → Importer).
6.4 Comptes de démonstration (base modèle)
| Identifiant | Mot de passe | Rôle |
|---|---|---|
admin |
admin (à changer) |
Administrateur |
formateur1, formateur2 |
identiques à l'identifiant | Formateur (+ Parc et Inventaire administrateur) |
apprenant1 … apprenant5 |
identiques à l'identifiant | Apprenant (+ Parc et Inventaire utilisateur) |
Changer ou désactiver ces mots de passe avant toute utilisation sur un réseau partagé.
6.5 Données personnelles
Les données sont stockées uniquement sur le serveur du centre. Le jeu de démonstration est fictif. Pour les comptes réels, ne saisir que le nécessaire (nom, identifiant). La suppression d'un compte ou son archivage se fait dans Paramètres → Utilisateurs.
7. Base modèle et bases par promotion
7.1 Principe
- Base modèle (
logitrain_template) : jeu de données de référence, préparé par le formateur référent (paramètres, exercices, comptes). On n'y fait pas travailler les apprenants. - Base de promotion (ex.
promo_2026a) : copie exacte de la base modèle (données et pièces jointes), dans laquelle une promotion travaille toute la session. - En fin de session ou pour repartir de zéro : on recopie la base modèle.
7.2 Script deploy/cohort_db.sh
À lancer depuis deploy/ sur le serveur :
./cohort_db.sh list # lister les bases
./cohort_db.sh create promo_2026a # copier logitrain_template -> promo_2026a
./cohort_db.sh create promo_2026a mon_modele # copier depuis un autre modèle
./cohort_db.sh reset promo_2026a # supprimer puis recopier depuis le modèle
./cohort_db.sh drop promo_2026a # supprimer la base et ses pièces jointes
- Le modèle par défaut est
logitrain_template(ou la variable d'environnementTEMPLATE_DB). - Noms autorisés : minuscules, chiffres,
_, commençant par une lettre. - La copie coupe les connexions à la base modèle (les utilisateurs connectés au modèle sont déconnectés) : lancer le script hors séance.
- La base copiée reçoit un nouvel identifiant unique (comme une duplication Odoo).
resetetdropsont irréversibles : faire une sauvegarde avant si les travaux doivent être conservés (§ 8).
7.3 Accès des apprenants à la bonne base
La liste des bases étant masquée, chaque promotion utilise un lien direct :
http://<PUBLIC_HOST>/web/login?db=promo_2026a
Distribuer ce lien (favori sur les postes). Pour attribuer automatiquement une base par nom d'hôte, on peut aussi utiliser l'option Odoo dbfilter dans odoo.conf (configuration avancée).
7.4 Réinitialisation des données d'exercice (sans recopier la base)
Deux niveaux :
| Besoin | Outil | Ce qui est effacé | Ce qui est conservé |
|---|---|---|---|
| Recommencer un exercice pour un apprenant, des apprenants choisis ou toute une promotion | Assistant LogiTrain → Formation → Réinitialiser les données d'exercice (voir guide formateur § 8) | Enregistrements d'exercice appartenant aux apprenants ciblés : tournées, plans de tournées, plans de chargement, scénarios, missions, réparations, incidents, activités conducteur, tableaux d'amortissement, documents créés, sessions RFID, campagnes d'inventaire… ; en option leurs remises | Données de base (produits, véhicules, contenants, règles, barèmes, paramètres) et enregistrements partagés |
| Repartir d'une base propre (tous les modules, y compris mouvements de stock) | ./cohort_db.sh reset <base> |
Toute la base de promotion | La base modèle |
Les mouvements de stock (réceptions, livraisons, ajustements validés), les pleins de carburant et les pneus n'ont pas de « propriétaire » : l'assistant ne les efface pas. Pour eux, utiliser
cohort_db.sh reset.
8. Sauvegardes et restauration
8.1 Sauvegarde automatique
Le service backup exécute deploy/backup/backup.sh toutes les 24 h (à partir de son démarrage) :
- un fichier
pg_dumpau format personnalisé par base :deploy/backup/out/<base>-AAAAMMJJ-HHMM.dump; - une archive des pièces jointes de toutes les bases :
filestore-AAAAMMJJ-HHMM.tgz; - suppression automatique des fichiers de plus de 14 jours.
Copier régulièrement deploy/backup/out/ sur un support externe (disque USB, NAS).
Sauvegarde immédiate (avant une mise à jour, par exemple) :
docker compose exec backup /backup.sh
8.2 Restaurer une base
cd /opt/logitrain/intech-logitrain/deploy
# 1. (si elle existe) supprimer la base abîmée
./cohort_db.sh drop promo_2026a
# 2. créer une base vide et y restaurer la sauvegarde
docker compose exec -T db createdb -U odoo -O odoo promo_2026a
docker compose exec -T db pg_restore -U odoo -d promo_2026a --no-owner < backup/out/promo_2026a-20261012-0300.dump
# 3. restaurer les pièces jointes de cette base
docker compose exec -T odoo tar xzf - -C /var/lib/odoo filestore/promo_2026a < backup/out/filestore-20261012-0300.tgz
docker compose restart odoo
Tester une restauration au moins une fois par trimestre sur une base de test (ex. restaurer sous le nom test_restore, puis ./cohort_db.sh drop test_restore).
9. RFID : lecteurs et passerelle
Aucun matériel n'est obligatoire : le simulateur (lecteur de type Simulateur, boutons Simuler des lectures) permet de faire tous les exercices. La liste indicative de matériels compatibles est dans logitrain_wms/static/description/rfid_hardware.md (UHF EPC Gen2, bande ETSI 865–868 MHz).
9.1 Déclarer un lecteur
Entrepôt et RFID → Lecteurs (formateurs ; création et jeton réservés aux administrateurs) :
| Champ | Contenu |
|---|---|
| Nom | ex. « Portique quai 1 » |
| Nature | Émulation clavier (USB / bureau), Lecteur fixe (LLRP via passerelle), SDK constructeur (via passerelle) ou Simulateur |
| Installé à | Emplacement de stock où se trouve le lecteur |
| Fenêtre anti-collision (s) | Les lectures répétées d'un même EPC par ce lecteur, dans la même session, à moins de N secondes d'intervalle, ne comptent qu'une fois (défaut 2 s ; 0 = seuls les doublons exacts sont écartés ; maximum 3600) |
| Jeton API | Visible par les administrateurs ; à copier dans la configuration de la passerelle. Bouton Régénérer le jeton en cas de fuite (l'ancien jeton cesse de fonctionner) |
| Dernière connexion | Mise à jour à chaque envoi de lectures |
La base modèle contient trois lecteurs : Lecteur USB bureau (wedge), Portique quai (LLRP), Simulateur formateur.
9.2 Lecteurs en émulation clavier (USB, douchettes, terminaux)
Pas de passerelle : le lecteur « tape » l'EPC suivi d'Entrée dans la Console de scan (Entrepôt et RFID → Console de scan). Configurer le lecteur pour envoyer l'EPC en hexadécimal (24 caractères) avec un suffixe Entrée.
9.3 Lecteurs fixes (LLRP) ou série : passerelle rfid-bridge
La passerelle (dossier rfid-bridge/, Python) lit le lecteur, regroupe les lectures et les envoie à Odoo (POST /logitrain/rfid/reads, en-tête X-Logitrain-Token).
- Copier
config.example.yamlenconfig.yamlet renseigner :
| Clé | Valeur |
|---|---|
odoo_url |
http://<PUBLIC_HOST> (depuis un poste) ou http://odoo:8069 (depuis le réseau Docker) |
token |
Jeton du lecteur copié depuis Odoo |
session |
null : Odoo range les lectures dans la dernière session ouverte du lecteur |
adapter |
llrp (lecteur fixe Impinj/Zebra…, port 5084), serial (lecteur USB-série, un EPC par ligne), mock (démonstration) |
llrp.host, llrp.antennas, llrp.tx_power |
Adresse IP du lecteur, antennes actives, puissance (0 = défaut) |
serial.port, serial.baudrate |
ex. /dev/ttyUSB0, 115200 |
batch_size, flush_seconds, max_queue |
Envoi par lots (50 lectures ou 2 s), file locale de 5 000 lectures en cas de coupure |
- Lancer :
- en service système :
logitrain-rfid-bridge.service(installation dans/opt/logitrain/rfid-bridge, configuration/etc/logitrain/rfid-bridge.yaml) ; - ou en conteneur : image construite depuisrfid-bridge/Dockerfile, configuration montée dans/config/config.yaml; - ou manuellement :python -m logitrain_bridge --config config.yaml. - Vérifier : ouvrir une session RFID sur ce lecteur, présenter des étiquettes ; les lectures apparaissent dans la session et dans Entrepôt et RFID → Lectures brutes.
Les envois sont idempotents : une même lecture (EPC + lecteur + horodatage) n'est enregistrée qu'une fois, même si la passerelle la renvoie après une coupure.
Les adaptateurs LLRP et série n'ont pas encore été testés sur matériel réel : prévoir une séance de mise au point à la livraison des lecteurs.
9.4 Codes d'erreur de l'API RFID
| Code | Cause | Action |
|---|---|---|
| 401 | Jeton absent, inconnu ou lecteur archivé | Recopier le jeton ; vérifier que le lecteur est actif |
| 400 | JSON invalide ou champ reads absent |
Vérifier la version de la passerelle |
200 avec unknown > 0 |
EPC lus mais non enregistrés dans Étiquettes RFID | Générer ou saisir les étiquettes (voir manuel) |
10. API ouverte et accès SQL
- API : toutes les données LogiTrain sont accessibles par l'API externe standard d'Odoo (XML-RPC / JSON-RPC) avec les droits de l'utilisateur ; points d'accès LogiTrain spécifiques pour le RFID et la cartographie. Voir
docs/API.md. - Structure de la base : PostgreSQL ; les tables LogiTrain sont préfixées
logitrain_(ex.logitrain_tour,logitrain_loadplan_placement,logitrain_fleet_repair). Le scriptscripts/gen_database_doc.pygénère la documentation des tables et champs (docs/DATABASE.md). Le rapport de coût total du parc (logitrain_fleet_tco_report) est une vue SQL lisible, utile en cours de bases de données. - Accès SQL en lecture pour l'enseignement : créer un rôle PostgreSQL en lecture seule, par exemple :
docker compose exec db psql -U odoo -d promo_2026a -c "CREATE ROLE etudiant_sql LOGIN PASSWORD 'xxx';
GRANT CONNECT ON DATABASE promo_2026a TO etudiant_sql;
GRANT USAGE ON SCHEMA public TO etudiant_sql;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO etudiant_sql;"
Le port PostgreSQL n'est pas publié par défaut : pour un accès depuis la salle, ajouter ports: ["5432:5432"] au service db et limiter l'accès par pare-feu. Ne jamais donner d'accès en écriture.
11. Mises à jour
11.1 Mettre à jour LogiTrain
cd /opt/logitrain/intech-logitrain
docker compose -f deploy/docker-compose.yml exec backup /backup.sh # 1. sauvegarde
git pull # 2. nouvelle version
cd deploy
docker compose build odoo # 3. nouvelle image
docker compose run --rm odoo odoo -d logitrain_template -u all --stop-after-init # 4. mise à jour de chaque base
docker compose run --rm odoo odoo -d promo_2026a -u all --stop-after-init
docker compose up -d # 5. redémarrage
Mettre à jour toutes les bases (modèle et promotions) : une base non mise à jour affiche des erreurs à l'ouverture de certains écrans.
Les paramètres livrés (règles, barèmes, taux) sont chargés en mode « ne pas écraser » : une mise à jour ne remplace pas les valeurs modifiées par les formateurs.
11.2 Mettre à jour Odoo et les moteurs
- Odoo 18 :
docker compose pullpuisdocker compose build --pull odooet étape 4 ci-dessus. - Carte : § 3.3. OSRM et VROOM :
docker compose pull osrm vroom && docker compose up -d.
12. Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| Page blanche / « 502 Bad Gateway » | Odoo pas démarré ou en cours de redémarrage | docker compose ps, docker compose logs --tail 100 odoo |
| « Database not found » / l'apprenant arrive sur la mauvaise base | Lien sans ?db= |
Utiliser http://<serveur>/web/login?db=<base> |
| Tournées en « approximate » (tracés en lignes droites) | URL OSRM vide, service arrêté ou mode hors ligne coché | Vérifier Paramètres → LogiTrain ; docker compose logs osrm ; relancer ./osrm/build.sh si osrm/data est vide |
| Optimisation lente ou heuristique au lieu de VROOM | VROOM injoignable | docker compose logs vroom ; vérifier que osrm fonctionne (VROOM en dépend) |
| Carte grise, pas de fond | Pas d'Internet et pas de tuiles locales | Installer le serveur de tuiles (§ 3.5) ou rétablir Internet |
| « Aucune URL Nominatim configurée : le géocodage est désactivé » | Paramètre vide | Normal hors ligne : placer les points en cliquant sur la carte |
| Vue 3D vide dans le plan de chargement | Plan non calculé ou WebGL désactivé | Cliquer Calculer le plan de chargement ; tester un autre navigateur |
| Un apprenant ne voit pas le menu Entrepôt | Droit Inventaire manquant | § 6.2 |
| Un apprenant ne voit pas le travail d'un camarade | Comportement normal (cloisonnement) | Le formateur voit tout ; pour un plan de chargement, utiliser Partagé avec |
| Lecteur RFID : aucune lecture reçue | Jeton erroné, pas de session ouverte, pare-feu | § 9.4 ; ouvrir une session sur ce lecteur ; tester curl http://<serveur>/logitrain/rfid/ping depuis le poste de la passerelle |
cohort_db.sh create : « Template database … not found » |
Base modèle absente ou autre nom | ./cohort_db.sh list ; passer le nom du modèle en 3e argument |
cohort_db.sh : erreur « is being accessed by other users » |
Connexion ouverte sur le modèle | Refaire hors séance ; le script coupe normalement les connexions |
| Libellés en anglais | Langue non chargée ou traductions non mises à jour | § 5.1 |
| Disque plein | Sauvegardes ou lectures RFID | Déplacer les anciennes sauvegardes ; vérifier la tâche de purge RFID |
Journaux : docker compose logs -f odoo (erreurs applicatives), docker compose logs nginx. Pour une demande d'assistance à InTech, joindre : description, heure, base concernée, extrait des journaux et capture d'écran.