Suite complète d'outils pour le diagnostic automobile via CAN-Bus
Ensemble d'outils Python et Bash pour lire, enregistrer et effacer les codes d'erreur (DTC) des véhicules via interface CAN-Bus utilisant le protocole OBD-II. Inclut une configuration automatisée et une gestion complète du cycle de vie des interfaces CAN.
scan-can/
├── main.py # Scanner DTC principal (Python)
├── install.py # Installation automatisée des dépendances
├── setup_can.sh # Configuration automatique CAN-Bus
├── cleanup_can.sh # Nettoyage et fermeture des interfaces CAN
├── README.md # Documentation (ce fichier)
├── requirements.txt # Dépendances Python (généré automatiquement)
├── venv/ # Environnement virtuel Python
└── dtc_log.txt # Fichier de log des DTC (généré)
# Installation complète en une commande
python3 install.py
# Configuration CAN
sudo ./setup_can.sh
# Test
source venv/bin/activate
python main.py --help# Créer l'environnement virtuel
python3 -m venv venv
source venv/bin/activate
# Installer les dépendances
pip install python-can can-isotp
# Configuration CAN manuelle
sudo modprobe can can_raw
sudo ip link set can0 type can bitrate 500000
sudo ip link set up can0Installation des dépendances Python et configuration de l'environnement
# Installation standard
python3 install.py
# Options avancées
python3 install.py --venv-name mon_env # Nom personnalisé pour l'environnement
python3 install.py --no-test # Sans test d'installation
python3 install.py --system-check-only # Vérification système uniquementFonctionnalités :
- Création automatique d'environnement virtuel
- Installation des dépendances Python
- Vérification des dépendances système
- Création de scripts d'activation
- Test de l'installation
Configuration automatique des interfaces CAN
# Configuration par défaut (can0, 500kbps)
sudo ./setup_can.sh
# Configuration personnalisée
sudo ./setup_can.sh can1 250000 # Interface can1 à 250k
sudo ./setup_can.sh --status # Statut des interfaces
sudo ./setup_can.sh --test-only # Test seulement
sudo ./setup_can.sh --no-service # Sans service systemdFonctionnalités :
- Détection automatique d'adaptateurs USB CAN
- Configuration interface CAN native ou virtuelle
- Installation automatique de can-utils
- Création de service systemd pour auto-démarrage
- Support slcan pour adaptateurs USB
- Test de l'interface configurée
Options :
-h, --help: Afficher l'aide--status: Statut des interfaces CAN--test-only: Tester l'interface existante--no-service: Ne pas créer le service systemd
Enregistrement simple du bus CAN avec horodatage (via candump).
# Enregistrement par défaut (can0) avec horodatage absolu
./record_can.sh
# Spécifier l'interface et le fichier de sortie
./record_can.sh can1 runs/can1_$(date +%F_%H%M%S).log
# Inclure les trames d'erreur (bus off, error frames)
./record_can.sh can0 can_capture.log --errorsNotes:
- Le script nécessite
can-utils(commandecandump). - Les logs générés sont lisibles et rejouables avec
canplayer(voir plus bas).
Lecture et effacement des codes d'erreur DTC
# Activation de l'environnement
source venv/bin/activate
# Utilisation de base
python main.py # Lecture DTC simple
python main.py --help # Aide complète
# Exemples avancés
python main.py -l dtc_log.txt -v # Avec logging verbeux
python main.py --clear --log-file history.txt # Lecture + effacement + log
python main.py -i can1 -t 0x7DF -r 0x7E8 # Interface et IDs personnalisés
python main.py --no-scan --clear # Effacement sans lecture
python main.py -v --timeout 5.0 --clear # Timeout personnaliséOptions complètes :
-i, --interface: Interface CAN (défaut: can0)-t, --txid: ID CAN transmission (défaut: 0x7E0)-r, --rxid: ID CAN réception (défaut: 0x7E8)-c, --clear: Effacer les DTC après lecture-l, --log-file: Fichier de log pour DTC-v, --verbose: Mode verbeux avec logging détaillé--timeout: Timeout requêtes en secondes (défaut: 2.0)--no-scan: Effacement seulement, pas de lecture
Fermeture propre des interfaces et processus CAN
# Nettoyage par défaut (can0)
sudo ./cleanup_can.sh
# Options de nettoyage
sudo ./cleanup_can.sh can1 # Interface spécifique
sudo ./cleanup_can.sh --all # Toutes les interfaces
sudo ./cleanup_can.sh --full-cleanup # Nettoyage complet
sudo ./cleanup_can.sh --status # Statut avant nettoyageFonctionnalités :
- Arrêt propre des interfaces CAN
- Terminaison des processus CAN actifs
- Suppression des interfaces slcan (USB)
- Déchargement des modules kernel (optionnel)
- Nettoyage des fichiers temporaires
- Rapport de statut après nettoyage
Quand les DTC ont été effacés, il reste utile d'observer le comportement en temps réel et le trafic CAN pour identifier la cause racine. Voici un guide pratique avec votre câble USB2CAN :
# Interface active (ex: can0)
**Options :**
- `--all` : Arrêter toutes les interfaces
- `--kill-processes` : Tuer tous les processus CAN
- `--unload-modules` : Décharger les modules kernel
Que regarder:
- Erreurs dans le bus (si `--errors`): frames d’erreur récurrentes
- Variation régulière des IDs (ex: trames moteur/ECU, ABS, etc.)
- Présence d’IDs « bruyants » ou absents selon le modèle
### 2) Reproduire le symptôme et enregistrer
```bash
- `--full-cleanup` : Nettoyage complet
- `--status` : Afficher le statut
Conseils:
- Notez les horodatages réels (ex: « 12:03:15: raté d’allumage ressenti ») pour corréler.
- Faites des runs courts et ciblés (1–3 minutes) pour faciliter l’analyse.
### 3) Filtrer le trafic pour réduire le bruit
`candump` permet de filtrer par ID(s) pour isoler des ECU:
```bash
## 📋 Workflow recommandé
### Premier démarrage
```bash
# 1. Installation
python3 install.py
### 4) Rejouer les captures et comparer
```bash
# 2. Configuration CAN
sudo ./setup_can.sh
# 3. Test de base
Astuce: utilisez une interface virtuelle `vcan0` pour rejouer sans matériel physique:
```bash
source venv/bin/activate
python main.py -v
# 4. Nettoyage (optionnel)
### 5) Analyse avec Wireshark (SocketCAN)
Wireshark peut lire `can0/vcan0` directement:
1. Ouvrez Wireshark → Capture → Options → Sélectionnez `can0` ou `vcan0`
2. Filtrez avec `can.id == 0x7E8` ou plage `can.id >= 0x700 && can.id <= 0x7EF`
3. Comparez baseline vs symptom pour repérer des trames manquantes ou anormales.
### 6) Bonnes pratiques de diagnostic
- Toujours capturer un baseline sain pour comparer.
- Annoter les événements (journal papier ou smartphone) avec l’heure exacte.
- Réaliser des runs séparés par scénario (ralenti, accélération, charge, clim ON/OFF…).
- Si le bus est trop bruyant, filtrez par ECU/ID pour investiguer progressivement.
- Après tests, exécutez `sudo ./cleanup_can.sh` pour fermer proprement les interfaces.
sudo ./cleanup_can.sh# Démarrage
sudo ./setup_can.sh can0 500000
source venv/bin/activate
# Diagnostic avec logging
python main.py -l diagnostic_$(date +%Y%m%d).txt -v
# Nettoyage après usage
sudo ./cleanup_can.sh --all# Scanner et effacer sur interface custom
sudo ./setup_can.sh can1 250000
source venv/bin/activate
python main.py -i can1 -t 0x7DF -r 0x7E8 --clear -l custom_log.txt -v
# Nettoyage complet
sudo ./cleanup_can.sh --full-cleanupLe fichier de log contient un historique horodaté de tous les scans DTC :
=== Scan DTC - 2025-10-26 14:30:15 ===
DTC trouvés: P0171, P0300, U0100
----------------------------------------
=== Scan DTC - 2025-10-26 15:45:22 ===
Aucun DTC trouvé
----------------------------------------
Le scanner décode automatiquement les codes DTC au format SAE J2012 :
| Préfixe | Système | Description |
|---|---|---|
| P | Powertrain | Moteur, transmission, système de propulsion |
| C | Chassis | ABS, ESP, airbags, direction assistée |
| B | Body | Éclairage, climatisation, vitres électriques |
| U | Network | Communication CAN, réseaux de bord |
Exemples courants :
P0171: Mélange trop pauvre (banque 1)P0300: Ratés d'allumage détectésU0100: Perte de communication avec l'ECU moteurC1234: Problème ABS/ESP
- PCAN-USB (Peak Systems)
- CANtact (Linklayer Labs)
- Kvaser (gamme Leaf)
- gs_usb (compatible SocketCAN)
- slcan (adaptateurs série vers CAN)
- can0, can1... (interfaces CAN natives Linux)
- vcan (interfaces virtuelles pour test)
- Raspberry Pi CAN HAT
Le script setup_can.sh détecte automatiquement :
- Type d'adaptateur (USB vs natif)
- Port série pour adaptateurs USB
- Configuration optimale selon le matériel
# Vérifications de base
sudo ./setup_can.sh --status # Statut des interfaces
python main.py -v --timeout 5.0 # Timeout plus longCauses possibles :
- Contact véhicule non mis
- Mauvais bitrate (essayer 250k au lieu de 500k)
- IDs TX/RX incorrects
- Interface CAN mal configurée
# Solution temporaire
sudo chmod 666 /dev/can0
# Solution permanente
sudo usermod -a -G dialout $USER
# Puis redémarrer la session# Lister les interfaces disponibles
ip link show
# Reconfigurer
sudo ./cleanup_can.sh --all
sudo ./setup_can.sh can0 500000# Chargement manuel
sudo modprobe can can_raw can_bcm
# Ou via le script
sudo ./setup_can.sh| Erreur | Solution |
|---|---|
No such device |
Interface CAN non configurée → sudo ./setup_can.sh |
Permission denied |
Permissions insuffisantes → sudo ou groupe dialout |
Timeout |
ECU non accessible → vérifier contact véhicule |
Module not found |
Dépendances manquantes → python3 install.py |
export CAN_INTERFACE="can1" # Interface par défaut
export CAN_BITRATE="250000" # Bitrate par défaut
export DTC_LOG_DIR="/var/log/dtc" # Répertoire logsSelon le constructeur et le type d'ECU :
| Constructeur | ECU | TX ID | RX ID |
|---|---|---|---|
| Standard OBD-II | Moteur | 0x7E0 | 0x7E8 |
| Standard OBD-II | Broadcast | 0x7DF | 0x7E8-0x7EF |
| VAG/Audi/VW | Moteur | 0x7E0 | 0x7E8 |
| BMW | Moteur | 0x6F1 | 0x6F9 |
| Mercedes | Moteur | 0x7E0 | 0x7E8 |
Le script setup_can.sh peut créer un service systemd pour auto-démarrage :
# Activer le service
sudo ./setup_can.sh --create-service
# Gérer le service
sudo systemctl status can-setup
sudo systemctl stop can-setup
sudo systemctl disable can-setup# Surveillance en temps réel
candump can0
# Envoi de trames manuelles
cansend can0 7DF#0201050000000000
# Analyse de trafic
canlogger can0 -f logfile.txt
# Interface graphique
sudo apt install can-utils-extra
cansequence can0Pour contribuer au projet :
- Fork le repository
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add some AmazingFeature') - Push sur la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Distribué sous licence MIT. Voir LICENSE pour plus d'informations.
- Utilisez uniquement sur vos propres véhicules ou avec autorisation explicite
- Testez d'abord en mode lecture avant d'effacer des DTC
- Sauvegardez toujours les DTC avant effacement
- Respectez les réglementations locales concernant la modification des systèmes véhicules
- Ce logiciel est fourni "tel quel" sans garantie d'aucune sorte
Développé avec ❤️ pour la communauté automobile open-source