Diagnóstico OBD2 universal para veículos 2015+
Project description
AutoDiag
Ferramenta de diagnóstico OBD2 em Python para veículos 2015+ usando adaptadores ELM327 (USB, Bluetooth serial ou Wi-Fi). Lê códigos de falha (DTCs), coleta PIDs ao vivo, identifica o veículo pelo VIN, guarda o histórico em SQLite e oferece uma interface web local com acompanhamento do scan em tempo real.
Não tem um adaptador em mãos? autodiag scan --demo executa o fluxo completo
com um veículo simulado — sem hardware nenhum.
O que ela faz hoje
- Leitura de DTCs (modo 03) via ELM327, com decodificação dos códigos P/C/B/U e consulta a uma base local com ~65 códigos comuns (descrição em português, severidade, sistema e causas prováveis).
- Limpeza de DTCs (modo 04), com confirmação.
- PIDs ao vivo (modo 01): RPM, velocidade, temperatura do motor e da admissão, posição da borboleta, MAF, fuel trim curto/longo B1, tensão da sonda O2 B1S1 e nível de combustível.
- Identificação do veículo: leitura do VIN (modo 09 02), decodificação local (WMI + ano-modelo) e enriquecimento opcional pela API pública da NHTSA (vPIC).
- Heurística de urgência (
critico/atencao/informativo) baseada nos DTCs encontrados e em limites de PIDs (superaquecimento, fuel trim alto, MAF baixo). - Modo demo (
--demona CLI e checkbox na web): adaptador simulado com um cenário realista de mistura pobre + falha de ignição (P0171/P0300), para testar a ferramenta inteira sem hardware. - Análise opcional com IA (Claude Opus 4.8 via SDK da Anthropic, com
streaming e thinking adaptativo) quando
ANTHROPIC_API_KEYestá definida — pode ser desativada com--no-ai. - Histórico local em SQLite (
~/.autodiag/history.db) com listagem e resumo estatístico (total, críticos, DTCs mais frequentes). - Interface web (FastAPI + uvicorn) com página única e streaming do scan via Server-Sent Events, além de API JSON para histórico e consulta de DTCs.
Arquitetura
src/autodiag/
├── cli.py # CLI (argparse): scan, history, summary, dtc, clear, serve
├── core/
│ ├── dtc.py # Base local de DTCs (DTCInfo, lookup, severidade)
│ └── vehicle.py # Decodificação de VIN (local + API NHTSA)
├── elm327/
│ ├── __init__.py # Protocolo OBDReader + fábrica create_reader (real/simulado)
│ ├── reader.py # Comunicação ELM327 (serial/Wi-Fi), decodificação de DTCs e PIDs
│ └── sim.py # Adaptador simulado do modo demo
├── agents/
│ └── diagnostic.py # Análise assistida por IA (Anthropic)
├── db/
│ └── history.py # Histórico de diagnósticos em SQLite
├── ui/
│ └── display.py # Saída no terminal (rich): tabelas, painéis, status
└── web/
├── server.py # FastAPI: página web, API JSON e stream SSE do scan
└── static/ # index.html da interface web
Instalação
Requer Python 3.11+ e uv:
git clone https://github.com/lucianoon/autodiag.git
cd autodiag
uv sync
Para usar a análise com IA (opcional), copie .env.example para .env e
defina ANTHROPIC_API_KEY (também é lido de ~/.autodiag/.env).
Uso
Com um adaptador ELM327 conectado ao veículo:
# Diagnóstico completo (detecta a porta automaticamente em macOS/Linux)
uv run autodiag scan
# Porta específica ou adaptador Wi-Fi
uv run autodiag scan --port /dev/cu.usbserial-1410
uv run autodiag scan --wifi 192.168.0.10
# Sem análise de IA
uv run autodiag scan --no-ai
# Apagar DTCs do veículo (pede confirmação)
uv run autodiag clear
Sem hardware, ainda funcionam:
# Fluxo de diagnóstico completo com veículo simulado (P0171 + P0300)
uv run autodiag scan --demo
# Consultar um código na base local
uv run autodiag dtc P0171
# Histórico e estatísticas dos diagnósticos salvos
uv run autodiag history --limit 20
uv run autodiag summary
# Interface web em http://localhost:8000
uv run autodiag serve --open
A detecção automática de porta funciona em Windows, Linux e macOS: as portas
seriais do sistema são enumeradas via pyserial e filtradas por identificadores
típicos de adaptadores ELM327 (chipsets CH340/CP210x/FTDI/PL2303 e nomes
"OBDII"). Se o seu adaptador não for reconhecido, informe a porta com
--port (ex.: COM3 no Windows, /dev/ttyUSB0 no Linux).
Testes
Os testes cobrem a lógica pura (decodificação de DTCs e PIDs com um reader falso, VIN, heurística de urgência e histórico com banco temporário) e não exigem hardware nem chaves de API:
uv sync
uv run pytest
Qualidade de código é verificada com ruff (lint) e mypy (tipos):
uv run ruff check .
uv run mypy
Testes, lint e type-check rodam em CI (GitHub Actions, Ubuntu, Python 3.12) a cada push e pull request.
Licença
MIT — © 2026 Luciano de Oliveira Nunes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autodiag-0.1.0.tar.gz.
File metadata
- Download URL: autodiag-0.1.0.tar.gz
- Upload date:
- Size: 100.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f01080780e1ddb05234f303aecf8b3ca328c9460e042eed5de9922f6d62905a0
|
|
| MD5 |
b0a534562588aacab80b75980b9ea417
|
|
| BLAKE2b-256 |
91b25ff0b0b9bdfd9338d4218976332904fd1f1e3605356f659622f9e3f6ef62
|
File details
Details for the file autodiag-0.1.0-py3-none-any.whl.
File metadata
- Download URL: autodiag-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48b5c3bba64875ac6fd3d87551c1268d63cbce3653763a8598539b1fd3c71252
|
|
| MD5 |
f2340d2a28ec082a1c29a8a22a9e13a5
|
|
| BLAKE2b-256 |
fd8761f73ceee6f7b12950217dd532fea5b909d5a41d12a0290c7414e610c559
|