This commit is contained in:
2026-01-29 22:37:59 +03:00
parent 1659970896
commit d4ffce28d5
16 changed files with 1826 additions and 0 deletions

127
obd2_client/README.md Normal file
View File

@@ -0,0 +1,127 @@
# OBD2 Client для Skoda Kodiaq 2021 на RPi5
Python приложение для чтения OBD2 данных через WaveShare 2-CH CAN HAT.
## Установка
```bash
pip install -r requirements.txt
```
## Конфигурация RPi5
### /boot/config.txt
```
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=23
```
### Инициализация CAN интерфейса
```bash
sudo ip link set can0 up type can bitrate 500000
sudo ifconfig can0 txqueuelen 65536
```
## Использование
### Запуск с реальным авто
```bash
python -m src.main --interface can0
```
### Только сканирование PID
```bash
python -m src.main --interface can0 --scan-only
```
### Тестирование с виртуальным CAN
```bash
# Создание виртуального интерфейса
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
# Запуск клиента
python -m src.main --interface vcan0 --virtual
```
### Параметры командной строки
| Параметр | Описание |
|----------|----------|
| `-i, --interface` | CAN интерфейс (can0, vcan0) |
| `-c, --config` | Путь к config.json |
| `-v, --virtual` | Использовать виртуальный CAN |
| `--scan-only` | Только сканировать PID |
| `--debug` | Включить отладочный вывод |
## Поддерживаемые PID
| PID | Параметр | Единицы |
|-----|----------|---------|
| 0x04 | Engine Load | % |
| 0x05 | Coolant Temp | °C |
| 0x0C | Engine RPM | RPM |
| 0x0D | Vehicle Speed | km/h |
| 0x0F | Intake Air Temp | °C |
| 0x10 | MAF Rate | g/s |
| 0x11 | Throttle Position | % |
| 0x2F | Fuel Level | % |
| 0x5C | Oil Temperature | °C |
## Конфигурация
Файл `config.json`:
```json
{
"can": {
"interface": "can0",
"bitrate": 500000,
"virtual": false
},
"obd2": {
"request_id": "0x7DF",
"response_id": "0x7E8",
"timeout": 0.1
},
"polling": {
"interval_fast": 0.1,
"interval_slow": 1.0,
"fast_pids": ["0x0C", "0x0D", "0x11"],
"slow_pids": ["0x05", "0x2F", "0x5C"]
}
}
```
## Переменные окружения
- `OBD2_CONFIG_PATH` - путь к config.json
- `OBD2_CAN_INTERFACE` - CAN интерфейс
- `OBD2_CAN_BITRATE` - битрейт
- `OBD2_CAN_VIRTUAL` - использовать виртуальный CAN (true/false)
- `OBD2_TIMEOUT` - таймаут ответа
## Структура проекта
```
obd2_client/
├── src/
│ ├── __init__.py
│ ├── main.py # Точка входа, CLI
│ ├── config.py # Конфигурация
│ ├── logger.py # Логирование
│ ├── can/
│ │ ├── frame.py # CAN фрейм dataclass
│ │ └── interface.py # Абстракция CAN шины
│ ├── obd2/
│ │ ├── pids.py # Определения PID
│ │ ├── protocol.py # OBD2 запросы/ответы
│ │ └── scanner.py # Автодетект PID
│ └── vehicle/
│ ├── state.py # Состояние авто
│ └── poller.py # Циклический опрос
├── config.json
├── requirements.txt
└── README.md
```