diff --git a/can_sniffer/deploy/README.md b/can_sniffer/deploy/README.md index c80ac4a..9af0f83 100644 --- a/can_sniffer/deploy/README.md +++ b/can_sniffer/deploy/README.md @@ -31,6 +31,7 @@ Running... ### Hardware - Raspberry Pi 5 - 2-CH CAN HAT (MCP2515 или MCP251xFD) +- Flipper Zero (опционально, для мониторинга) ### Software - Raspberry Pi OS Bookworm (64-bit recommended) @@ -72,6 +73,50 @@ ip link show | grep can # Должны появиться can0 и can1 ``` +## Настройка UART для Flipper Zero + +Для работы с Flipper Zero через UART (`/dev/ttyAMA0`) необходимо: + +### 1. Отключить serial console +```bash +sudo raspi-config +# Interface Options → Serial Port +# - Login shell over serial: NO +# - Serial port hardware enabled: YES +``` + +### 2. Добавить в `/boot/firmware/config.txt`: +```ini +# Enable UART +enable_uart=1 + +# На RPI5 освобождаем ttyAMA0 от Bluetooth +# Вариант 1: Полностью отключить BT (рекомендуется) +dtoverlay=disable-bt + +# Вариант 2: Переместить BT на mini-UART +# dtoverlay=miniuart-bt +``` + +### 3. Перезагрузить и проверить: +```bash +sudo reboot + +# После перезагрузки +ls -la /dev/ttyAMA0 +# Должен показать устройство + +# Тест чтения (Ctrl+C для выхода) +cat /dev/ttyAMA0 +``` + +### 4. Подключение Flipper Zero +| Flipper Pin | RPI5 Pin | +|-------------|----------| +| TX | GPIO15 (RXD) | +| RX | GPIO14 (TXD) | +| GND | GND | + ## Установка ### 1. Клонирование репозитория @@ -200,6 +245,46 @@ ls -la /opt/can_sniffer/data/ # Синхронизация произойдёт автоматически когда PostgreSQL станет доступен ``` +#### 5. Flipper Zero не подключается (нет handshake) + +**Симптомы:** `cat /dev/ttyAMA0` показывает "INIT:flipper", но ACK не отправляется. + +**Проверки:** +```bash +# 1. Проверить что flipper enabled в конфиге +grep -A5 '"flipper"' /opt/can_sniffer/src/config.json +# Должно быть: "enabled": true + +# 2. Проверить что pyserial установлен +/opt/can_sniffer/venv/bin/pip show pyserial + +# 3. Проверить права на UART +ls -la /dev/ttyAMA0 +# crw-rw---- 1 root dialout ... + +# 4. Проверить что пользователь в группе dialout +groups pi +# Должен содержать: dialout + +# 5. Проверить что serial console отключена +sudo dmesg | grep ttyAMA0 +# НЕ должно быть "console [ttyAMA0]" + +# 6. Проверить логи flipper handler +sudo journalctl -u can-sniffer | grep -i flipper +``` + +**Типичные исправления:** +```bash +# Добавить в группу dialout +sudo usermod -aG dialout pi + +# Перезапустить после изменения групп +sudo systemctl restart can-sniffer + +# Или перелогиниться для применения группы +``` + ## Удаление ```bash diff --git a/can_sniffer/deploy/can-sniffer.service b/can_sniffer/deploy/can-sniffer.service index 64799eb..3d14439 100644 --- a/can_sniffer/deploy/can-sniffer.service +++ b/can_sniffer/deploy/can-sniffer.service @@ -51,5 +51,9 @@ ReadWritePaths=/opt/can_sniffer/data /opt/can_sniffer/logs CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN +# Доступ к UART для Flipper Zero (/dev/ttyAMA0) +SupplementaryGroups=dialout +DeviceAllow=/dev/ttyAMA0 rw + [Install] WantedBy=multi-user.target diff --git a/can_sniffer/deploy/config.production.json b/can_sniffer/deploy/config.production.json index 4427ab7..10a51da 100644 --- a/can_sniffer/deploy/config.production.json +++ b/can_sniffer/deploy/config.production.json @@ -28,7 +28,7 @@ "sync_interval": 30.0 }, "flipper": { - "enabled": false, + "enabled": true, "device": "/dev/ttyAMA0", "baudrate": 115200, "send_interval": 1.0 diff --git a/can_sniffer/deploy/diagnose.sh b/can_sniffer/deploy/diagnose.sh index 8b990f3..434b37e 100644 --- a/can_sniffer/deploy/diagnose.sh +++ b/can_sniffer/deploy/diagnose.sh @@ -152,6 +152,52 @@ else warn "CAN Sniffer process not running" fi +section "UART / Flipper Zero" +UART_DEV="/dev/ttyAMA0" +if [[ -e "$UART_DEV" ]]; then + ok "UART device exists: $UART_DEV" + ls -la "$UART_DEV" | sed 's/^/ /' + + # Проверить права + if [[ -r "$UART_DEV" ]] && [[ -w "$UART_DEV" ]]; then + ok "UART readable/writable by current user" + else + warn "UART not accessible by current user" + echo " Check: sudo usermod -aG dialout \$USER" + fi + + # Проверить serial console + if dmesg 2>/dev/null | grep -q "console \[ttyAMA0\]"; then + fail "Serial console is using ttyAMA0!" + echo " Disable via: sudo raspi-config -> Interface Options -> Serial Port" + else + ok "Serial console not blocking ttyAMA0" + fi +else + warn "UART device not found: $UART_DEV" + echo " Check /boot/firmware/config.txt: enable_uart=1" +fi + +# Проверить конфиг flipper +if [[ -f "$INSTALL_DIR/src/config.json" ]]; then + FLIPPER_ENABLED=$(grep -A2 '"flipper"' "$INSTALL_DIR/src/config.json" | grep '"enabled"' | grep -oE '(true|false)') + if [[ "$FLIPPER_ENABLED" == "true" ]]; then + ok "Flipper handler enabled in config" + else + warn "Flipper handler DISABLED in config" + fi +fi + +# Проверить pyserial +if [[ -f "$INSTALL_DIR/venv/bin/pip" ]]; then + if "$INSTALL_DIR/venv/bin/pip" show pyserial &>/dev/null; then + ok "pyserial installed" + else + fail "pyserial NOT installed" + echo " Install: $INSTALL_DIR/venv/bin/pip install pyserial" + fi +fi + section "Network (PostgreSQL target)" # Извлекаем хост из конфига if [[ -f "$INSTALL_DIR/src/config.json" ]]; then diff --git a/can_sniffer/deploy/install.sh b/can_sniffer/deploy/install.sh index b6628d1..f68aef4 100644 --- a/can_sniffer/deploy/install.sh +++ b/can_sniffer/deploy/install.sh @@ -81,6 +81,25 @@ if [[ -f "$CONFIG_TXT" ]]; then else log_info "CAN HAT overlay found in config.txt" fi + + # Проверяем UART для Flipper Zero + if ! grep -q "enable_uart=1" "$CONFIG_TXT"; then + log_warn "UART not enabled in $CONFIG_TXT" + log_warn "For Flipper Zero support, add to $CONFIG_TXT:" + echo "" + echo " enable_uart=1" + echo " dtoverlay=disable-bt # или dtoverlay=miniuart-bt" + echo "" + else + log_info "UART enabled in config.txt" + fi +fi + +# Проверяем что serial console отключена +if grep -q "console=serial0" /boot/firmware/cmdline.txt 2>/dev/null || \ + grep -q "console=ttyAMA0" /boot/firmware/cmdline.txt 2>/dev/null; then + log_warn "Serial console may be using ttyAMA0!" + log_warn "Disable via: sudo raspi-config -> Interface Options -> Serial Port" fi # === 3. Создание директорий === diff --git a/can_sniffer/requirements.txt b/can_sniffer/requirements.txt index 3c602f4..a3bb901 100644 --- a/can_sniffer/requirements.txt +++ b/can_sniffer/requirements.txt @@ -2,4 +2,5 @@ pydantic>=2.0.0 pydantic-settings>=2.0.0 python-can>=4.0.0 psycopg2-binary>=2.9.0 +pyserial>=3.5