# CHANGELOG — ACS Monitoring (СКУД + Датчики воды) --- ## [Unreleased] — 2026 Q2 - ⏳ Прошивка door-controller v2.0 ожидает первого деплоя на железо - ⏳ Датчик воды v3.5.8 ожидает USB flash деплой --- ## [2026-02-10] — Прошивка СКУД v2.0 написана ### Добавлено - `firmware/door-controller-v2.0/door_controller_v2.ino` — главный файл state machine - `firmware/door-controller-v2.0/config.h` — GPIO пины, константы, структуры DeviceConfig - `firmware/door-controller-v2.0/mqtt_handler.h` — MQTT клиент: provision, heartbeat, команды, batch sync - `firmware/door-controller-v2.0/web_config.h` — AP Mode captive portal с тёмной темой (192.168.4.1) - `firmware/door-controller-v2.0/wiegand_reader.h` — Wiegand 26/34 bit с проверкой чётности - `firmware/door-controller-v2.0/card_cache.h` — NVS кеш до 10,000 карт - `firmware/door-controller-v2.0/event_queue.h` — Offline очередь до 500 событий - `firmware/door-controller-v2.0/README.md` — полная документация ### Возможности v2.0 - WiFi + MQTT связь с сервером - Авторизация карт по локальному кешу (до 10,000) - Offline режим: карты работают без WiFi, события копятся и синхронизируются - AP Mode при первом запуске: `ACS-DOOR-XXXX`, 192.168.4.1 - OTA обновления - Команды от сервера: open_door, close_door, reboot, factory_reset, sync_cards, set_door_duration - Heartbeat каждые 30 сек (uptime, RSSI, free_heap, card_cache_count) --- ## [2026-02-09] — Завершение страниц СКУД ### Обновлено - **AccessLogPage.tsx** — полная переработка: - Группировка событий по дате (Сегодня / Вчера / дата) - Сворачиваемые группы со счётчиком разрешённых/запрещённых - Calendar picker с пресетами (Сегодня / Неделя / Месяц) - Пагинация (load more, по 50 записей) - Экспорт CSV с BOM для Excel - Фильтр по устройству - Сортировка новые/старые - Цветовые бейджи по типу события - Подсветка запрещённых проходов красным фоном - **FirmwarePage.tsx** — добавлено: - Удаление прошивки - Модалка "Подробнее" (changelog, размер, дата) - Переключение стабильная/бета (`toggleFirmwareStable`) - Кнопка "Push OTA" на устройства (`pushFirmwareOTA`) - **DevicesPage.tsx** — добавлено: - Кнопка "Открыть дверь" прямо из карточки - Настройка сети устройства (static IP / DHCP, gateway, DNS) - Команды: перезагрузка, синхронизация карт, blink LED - Dropdown обновления прошивки - **AccessKeysPage.tsx** — добавлено: - Интеграция со станцией регистрации (кнопка "Считать карту") - Пагинация - Фильтр по типу карты (RFID / RF) - **EmployeesPage.tsx** — добавлено: - Фильтр по отделу/должности - Пагинация ### Деплой ```bash cd /var/www/acs-monitoring/frontend && npm run build # Сборка: 2708 модулей, 10.28с, 843 kB JS, 42 kB CSS ``` --- ## [2026-02-09] — Backend API прошивок завершён ### Добавлено/завершено в `backend/src/api/firmware.ts` - GET `/api/firmware` — список прошивок - POST `/api/firmware` — добавить прошивку - DELETE `/api/firmware/:id` — удалить - PUT `/api/firmware/:id/toggle-stable` — стабильная/бета - POST `/api/firmware/:id/push-ota` — OTA push на устройства --- ## [2026-02-09] — СКУД backend MQTT завершён ### Добавлено в `backend/src/mqtt/skud-handlers.ts` - Обработчик `devices/provision` — активация нового устройства, запись в `devices`, отправка списка карт - Обработчик `skud/{id}/status` — обновление `is_online`, `last_seen`, firmware_version - Обработчик `skud/{id}/access` — запись в `access_events`, проверка прав - Обработчик `skud/{id}/sync` — batch синхронизация offline событий - Отправка команд через `skud/{id}/command` - Топик `skud/{id}/provision/ack` с ответом + списком карт --- ## [2026-02-09] — Первые 5 страниц СКУД (базовая версия) ### Создано (первая версия) - `AccessLogPage.tsx` — журнал с базовой таблицей - `FirmwarePage.tsx` — список прошивок, загрузка - `DevicesPage.tsx` — список дверей, статус online/offline - `AccessKeysPage.tsx` — CRUD карт, привязка к сотруднику - `EmployeesPage.tsx` — CRUD сотрудников, RF регистрация - `DiscoveryPage.tsx` — поиск новых устройств --- ## [2026-02-09] — Сборка первого физического устройства ### Выполнено - Получены все компоненты - ESP32 DevKit 30-pin прошит прошивкой v1.0 - Mini560 настроен на 5.0V - Wiegand считыватель подключён (GPIO 26/27) - Реле подключено (GPIO 25) - Кнопка выхода (GPIO 33) - Тест: считыватель читает карты (любая карта открывает — тестовый режим v1.0) --- ## [2026-01-30] — Прошивка СКУД v1.0 (тестовая) ### Добавлено - `firmware/door-controller-v1.0/` — тестовая прошивка - Wiegand RFID 26/34 bit - Управление реле (замок) - Кнопка выхода (GPIO прерывание) - Serial Monitor логи - Автотесты компонентов при старте - **⚠️ Открывает дверь для ЛЮБОЙ карты** — только для тестирования --- ## [2026-01-30] — Схема подключения и документация ### Добавлено - Схема подключения ESP32 ↔ Wiegand ↔ Реле ↔ Замок ↔ БП ↔ АКБ - Распиновка ESP32 DevKit 30-pin - Чеклист сборки - Инструкция по прошивке - `TROUBLESHOOTING.md` --- ## [2026-01-28] — Проектирование БД и веб-панели ### Добавлено - SQL схема 6 таблиц: employees, access_keys, devices, access_log, firmware, remote_controls - Структура веб-панели: раздел СКУД в боковом меню - Обсуждение шлагбаумов, RF брелоков, станции регистрации - MQTT топики и протокол взаимодействия --- ## [2026-01-14] — Начало проекта СКУД ### Добавлено - Архитектурное решение: ESP32 на каждую дверь + Wiegand RFID - Список компонентов для 1 двери (~4 750 ₽) - Заказ компонентов (15 дверей) - Интеграция с существующей системой ACS Monitoring --- ## История (датчики воды) ### [2026-01-20] — Прошивка датчика воды v3.5.8 - **journal-first архитектура**: запись в SPIFFS перед MQTT - Монотонные счётчики для дедупликации - FIFO очередь неотправленных показаний - `isFresh` логика на backend (заменила `isJournal`) - Исправлен timezone bug (3-часовой offset → pure UTC NTP) - Устранены аномальные показания > 900 л/мин ### [2026-01-18] — Прошивка датчика воды v3.5.x - Non-blocking file scanning (исправлены lockups MQTT keepalive) - Batch processing файлов журнала - Оптимизация OTA — исправлено зависание при обновлении ### [2026-01-01] — Датчики воды v3.3.2 (стабильная) - Базовая версия с MQTT reporting - `firmware/water-sensor-v3.3.2/acs_sensor_v3.3.2.ino` --- *Обновлено: май 2026*