Об этом проекте

UniPlateTracker — это самостоятельная, частная панель управления для отслеживания номерных знаков, захваченных камерами UniFi Protect. Она получает события обнаружения, отправленные NVR UniFi через вебхуки, записывает их в базу данных PostgreSQL и представляет их через веб-интерфейс для просмотра, поиска и анализа активности транспортных средств. Миниатюры и видеофайлы остаются на сервере пользователя, а проверка DVLA Великобритании является единственным описанным внешним источником данных. Что она делает - Обработка событий в реальном времени: обнаружения номерных знаков поступают из вебхуков UniFi Protect и обрабатываются по мере их поступления. - Захват видео по требованию: отдельный рабочий процесс Node.js записывает короткий клип для каждого обнаружения из потока RTSP камеры, с буферизацией до и после события, управляемой отдельным процессом управления буфером. - Опциональная интеграция с DVLA (Великобритания): извлекает данные о транспортном средстве, такие как марка, цвет, статус налога и MOT. Международный режим отключает специфические для Великобритании функции, позволяя приложению работать в других регионах, хотя небританские номера будут отображаться как "Неизвестно", если не настроен ENABLE_INTERNATIONAL_API. - Административная панель: защищенная административная область с графиками и статистикой использования, а также иерархическими административными учетными записями, где первоначальный администратор может предоставлять или отзывать доступ для других администраторов; эти действия записываются в журнал аудита для проверки. - Таблица обнаружений: плотная и сортируемая, предназначенная для быстрого чтения. Сортировка и фильтрация выполняются в базе данных, поэтому порядок применяется ко всему набору результатов, а не только к текущей странице, и таблица перестраивается в список карточек на узких экранах. - Выделение статуса: оплаченные налоги транспортные средства с действительным MOT остаются визуально спокойными, в то время как просроченные, неоплаченные и SORN транспортные средства выделяются; "нет записи DVLA" отображается как отдельный полый, пунктирный чип, чтобы отсутствующая информация никогда не читалась как чистый результат. - Доступность: помеченные элементы управления, сортировка и разбивка на страницы с поддержкой клавиатуры, aria-sort в таблице и поддержка prefers-reduced-motion. Проект утверждает, что был проверен на отсутствие нарушений. Светлый и темный режим следуют системным предпочтениям. Технологический стек Next.js 16 (App Router) с TypeScript, React 19, Tailwind CSS v4 и shadcn/ui; API-маршруты Next.js наряду с отдельным рабочим процессом Node.js/управлением буфером; PostgreSQL для хранения; FFmpeg для обработки видео; интеграции с вебхуками UniFi Protect и API DVLA. Поскольку Tailwind v4 берет свою тему из CSS, нет tailwind.config.ts — токены дизайна, стили номерных знаков и статусов находятся в блоке @theme файла src/app/globals.css. Развертывание Документированная базовая установка — Debian 12 с камерой UVC-AI-Pro (версия устройства 5.1.57) и UniFi Protect 9.4.19, с примечанием, что другие конфигурации должны работать. Описаны два метода: - Ручная установка: установите Node.js 20+, PostgreSQL и FFmpeg; скопируйте пример файла среды в .env.local и заполните значения, такие как POSTGRES_URL и SESSION_SECRET; создайте каталоги буфера и окончательного захвата, если включен захват видео; установите зависимости как для приложения, так и для рабочего процесса; запустите npm run db:init для создания таблиц и регистрации первого администратора; соберите и запустите приложение, опционально сделав его постоянным с помощью PM2. - Docker: загрузите файл compose и шаблон среды, переименуйте его в .env.local, укажите POSTGRES_URL, SESSION_SECRET и NEXTAUTH_URL (используя сетевой IP сервера, а не localhost), запустите одноразовый контейнер для инициализации базы данных и создания первого администратора, затем загрузите и запустите с помощью Docker Compose. Веб-интерфейс задокументирован на порту 3000, а конечная точка вебхука — на порту 4000. В UniFi Protect создается тревога в разделе Settings > System > Other Settings > Alarm Manager, срабатывающая на ID > LPR для неизвестных и известных транспортных средств, ограниченная камерами LPR, и направленная на URL /webhook приложения с включенными миниатюрами. Примечания по устранению неполадок из README Обнаружения могут показывать "Нет клипа", потому что обнаружение и захват — это отдельные пути: вебхук записывает строку, а рабочий процесс записывает из RTSP, поэтому захват может не удаться, в то время как обнаружения продолжают поступать. Рекомендуемые проверки — это дата последнего файла в VIDEO_FINAL_CAPTURE_PATH, установлен ли FFmpeg и находится ли он на ожидаемом пути, действительны ли учетные данные камеры или URL RTSP, живы ли оба фоновых процесса и может ли пользователь, запускающий приложение, читать каталог захвата. Пунктирная плитка "Нет клипа" означает, что клип ожидался, но отсутствует, в то время как простая иконка камеры означает, что обнаружение никогда не ссылалось на него. Запросы видео и миниатюр возвращают 404, если имена файлов содержат только буквы, цифры, точки, дефисы и подчеркивания с расширениями .mp4 или .jpg, и любой путь, который меняется при нормализации, отклоняется, поэтому попытки обхода каталога не удаются.