# GPIO Monitor Dashboard for Raspberry Pi Реалтайм-мониторинг параллельной GPIO-шины Raspberry Pi: C + Go + Web Dashboard. Проект читает входящие сигналы с GPIO-пинов Raspberry Pi по прерыванию, передаёт данные через FIFO pipe в Go-сервер и отображает их в браузере в реальном времени с возможностью просмотра исторических данных. --- ## Возможности ✅ Захват данных по GPIO interrupt (C + WiringPi) ✅ FIFO pipe между капчером и Go-сервером (systemd socket-activation) ✅ Кольцевой буфер в RAM + бинарный архив на диске ✅ HTTP API + встроенный Web Dashboard (TypeScript) ✅ **Автоматическая ротация** лог-файлов (почасовые `.bin`) ✅ **Retention** — автоочистка старых логов по возрасту и размеру ✅ **Watchdog** — события при пропадании данных ✅ **Монитор звука** с микрофона (arecord/ALSA) ✅ **MJPEG-камера** через go2rtc ✅ Сборка **deb-пакета** с версионированием через git ✅ Работа через Wi-Fi Access Point --- ## Документация | Документ | Содержание | Для кого | |---|---|---| | [docs/operations.md](docs/operations.md) | Установка (deb и вручную), systemd, firewall, камера, микрофон, диагностика | Администраторы | | [docs/architecture.md](docs/architecture.md) | Устройство системы: компоненты, поток данных, конкурентность | Разработчики | | [docs/api.md](docs/api.md) | Спецификация HTTP API: все эндпоинты с примерами ответов | Разработчики | | [docs/data-formats.md](docs/data-formats.md) | Байт GPIO, формат `.bin`, протокол pipe, события, пути хранения | Разработчики | | [docs/development.md](docs/development.md) | Сборка, Makefile, эмуляторы, тесты, соглашения | Разработчики | | [docs/frontend.md](docs/frontend.md) | Веб-дашборд: модули TypeScript, сборка, dev-цикл | Разработчики | | [docs/tech-debt.md](docs/tech-debt.md) | Реестр технического долга | Разработчики | | [SDR/README.md](SDR/README.md) | Подпроект OFDM-радиолинка на PlutoSDR (автономный) | Разработчики | | [CHANGELOG.md](CHANGELOG.md) | История изменений | Все | --- ## Архитектура (кратко) ```text GPIO BUS (8 bit) ↓ прерывание gpio-interrupt (C + WiringPi) ← поставляется отдельно, вне репозитория ↓ stdout → systemd socket FIFO pipe (/tmp/gpio_pipe) ↓ Go Server (gpio-monitor-server) ├── RingBuffer (RAM) ├── Data Logger (почасовые .bin) ├── Human / Event Logger (текстовые логи) ├── Watchdog + Retention ├── Audio Monitor (arecord) └── HTTP API (:8080) + Web Dashboard (embedded) ↓ Браузер: dashboard.html / logs.html ``` HTTP API: `/api/health`, `/api/latest`, `/api/history` (последние 300), `/api/stream`, `/api/cam` (MJPEG-прокси), `/api/log/files`, `/api/log/data?file=...&page=...`, `/api/log/events?page=...` — подробности в [docs/api.md](docs/api.md). Подробная схема — [docs/architecture.md](docs/architecture.md). --- ## Структура проекта ``` . ├── Makefile # Сборка (основной способ) ├── build.sh # Исторический скрипт сборки ├── start-server.sh # Скрипт запуска на устройстве ├── build/ # Артефакты сборки (генерируется) ├── cmd/server/ │ ├── main.go # Go HTTP-сервер (точка входа) │ └── web/ # Веб-интерфейс │ ├── js/ # TypeScript-исходники (10 модулей) │ ├── dist/ # Скомпилированный JS (генерируется tsc) │ ├── css/, fonts/ │ ├── index.html, dashboard.html, logs.html, favicon.png │ ├── package.json, tsconfig.json │ └── README.md ├── internal/ │ ├── adapter/buffer.go # Кольцевой буфер │ ├── audio/monitor.go # Монитор уровня звука (arecord) │ ├── logger/ # Система логирования │ │ ├── config.go # Конфигурация │ │ ├── data_logger.go # Бинарные логи │ │ ├── event_logger.go # События │ │ ├── human_logger.go # Человекочитаемые логи │ │ ├── monitor.go # Watchdog │ │ ├── parser.go # Разбор байта GPIO │ │ ├── paths.go # Пути хранения │ │ ├── retention.go # Очистка старых логов │ │ ├── retention_test.go # Тесты retention │ │ └── rotation.go # Почасовая ротация │ └── pipe/reader.go # Чтение из FIFO pipe ├── scripts/ │ ├── monitor-gpio.service # systemd: капчер GPIO │ ├── monitor-gpio.socket # systemd: FIFO pipe │ ├── go2monitor.service # systemd: Go-сервер (ручная установка) │ ├── go2rtc, go2rtc.yaml # Стрим камеры │ ├── emulator.py, array.txt # Эмулятор потока GPIO │ ├── imi_wire.py # Имитатор шины на реальных GPIO │ ├── emulatohackrf.sh # Передача данных через HackRF │ ├── vu_meter.py # Консольный VU-метр микрофона │ └── view_logs.sh # Статистика dev-логов ├── debian/ # Сборка deb-пакета (control, unit, скрипты) ├── SDR/ # Подпроект: OFDM-радиолинк PlutoSDR (C) │ ├── common.c/h, transmitter.c, reciever.c │ ├── makefile │ └── README.md ├── docs/ # Документация (см. таблицу выше) ├── go.mod # module gpio-monitor, Go 1.21, без зависимостей ├── CHANGELOG.md └── README.md ``` Каталоги `build/`, `cmd/server/web/dist/` и `cmd/server/web/node_modules/` генерируются при сборке и в git не хранятся. ## GPIO-пины ``` WR/STROBE = GPIO27 DATA BUS: D0 = GPIO21 D4 = GPIO25 D1 = GPIO7 D5 = GPIO24 D2 = GPIO6 D6 = GPIO23 D3 = GPIO5 D7 = GPIO22 ``` --- ## Быстрый старт ### Сборка ```bash sudo apt install -y golang git build-essential wiringpi nodejs npm alsa-utils git clone && cd golang make init # подготовка окружения (Node.js, Go-модули, npm-пакеты) make build # TypeScript-фронтенд + Go-сервер → build/gpio-monitor-server ``` Подробности, кросс-компиляция, эмуляция без железа — [docs/development.md](docs/development.md). ### Запуск ```bash ./build/gpio-monitor-server \ -pipe /tmp/gpio_pipe \ -retention-hours=72 \ -retention-mb=2000 ``` Дашборд: `http://:8080` (через Wi-Fi AP — `http://192.168.77.1:8080`, локально — `http://localhost:8080`). Страницы: `/dashboard.html` — мониторинг, `/logs.html` — история. Полная таблица из 13 CLI-флагов, настройка systemd, firewall (nftables), камеры и микрофона — [docs/operations.md](docs/operations.md). ### Deb-пакет ```bash make deb # от обычного пользователя, без sudo sudo dpkg -i build/gpio-monitor-server_1.0.0-build_arm64.deb ``` Версия пакета формируется автоматически: `<база из debian/control>-build<число git-коммитов>`. Полезные цели: `make version` (показать версию), `make deb-info` (информация о пакете), `make deb-contents` (список файлов), `make deb-clean` (очистка). Подробнее — [docs/development.md](docs/development.md#сборка-deb-пакета); что делает пакет при установке — [docs/operations.md](docs/operations.md#установка-из-deb-пакета). --- ## Хранение данных (кратко) Бинарные данные пишутся в почасовые файлы `gpio-YYYY-MM-DD-HH.bin` в каталоге данных (`/var/log/gpio-monitoring/data/` при deb-установке, `~/.local/share/gpio-monitoring/logs/data/` в dev-режиме). Ротация открывает новый файл каждый час; retention удаляет старые файлы по возрасту (`-retention-hours`) и суммарному размеру (`-retention-mb`), всегда сохраняя минимум 2 свежих файла. Форматы файлов, словарь событий и алгоритм очистки — [docs/data-formats.md](docs/data-formats.md). --- ## Диагностика (кратко) ```bash sudo systemctl status gpio-monitor-server # или monitor-gpio / go2monitor sudo ss -tlnp | grep 8080 # сервер слушает порт? sudo nft list ruleset | grep 8080 # firewall пропускает? ls -la /tmp/gpio_pipe # FIFO существует? gpio-logs -f # журнал сервиса (deb-установка) ``` Полный чек-лист (дашборд, звук, камера, «Нет связи») — [docs/operations.md](docs/operations.md#диагностика-проблем).