Files

10 KiB
Raw Permalink Blame History

PROJECT_KNOWLEDGE.md — ACS Monitoring (СКУД + Датчики воды)

Что это

ACS Monitoring — система мониторинга и контроля доступа на базе ESP32.

Два направления:

  1. Датчики воды — мониторинг расхода воды, давления, утечек. ESP32-сенсоры → MQTT → backend → frontend.
  2. СКУД (контроль доступа) — 15 дверей с Wiegand RFID. ESP32-контроллер на каждую дверь, управление через веб-панель.

Сервер

Параметр Значение
IP 77.222.43.248
SSH root@77.222.43.248
Домен acs.zeroday.su
OS Ubuntu 24.04
Node.js v22.22.0
Nginx 1.24.0
MCP коннектор dev.zeroday.su (server-connector)

Пути на сервере

/var/www/acs-monitoring/
├── backend/
│   ├── src/
│   │   ├── index.ts               # точка входа, Express + MQTT
│   │   ├── api/                   # REST routes
│   │   │   ├── access-keys.ts     # СКУД: ключи доступа
│   │   │   ├── access.ts          # СКУД: журнал событий
│   │   │   ├── alerts.ts
│   │   │   ├── auth.ts            # JWT авторизация
│   │   │   ├── backups.ts
│   │   │   ├── dashboard.ts
│   │   │   ├── devices.ts         # СКУД: устройства (двери)
│   │   │   ├── dictionaries.ts
│   │   │   ├── discovery.ts       # обнаружение новых устройств
│   │   │   ├── employees.ts       # СКУД: сотрудники
│   │   │   ├── firmware.ts        # управление прошивками
│   │   │   ├── registration-station.ts  # станция регистрации карт
│   │   │   ├── sensors.ts         # датчики воды
│   │   │   ├── telegram.ts
│   │   │   ├── users.ts
│   │   │   └── water.ts           # данные расхода воды
│   │   ├── mqtt/
│   │   │   ├── index.ts           # MQTT клиент (mosquitto)
│   │   │   ├── handlers.ts        # обработчики датчиков воды
│   │   │   └── skud-handlers.ts   # обработчики СКУД
│   │   ├── database/              # pg pool, migrations
│   │   ├── middleware/            # JWT, CORS, rate limit
│   │   ├── services/
│   │   └── utils/
│   └── .env                       # переменные окружения
├── frontend/
│   ├── src/
│   │   ├── App.tsx                # роутинг (hash routing)
│   │   ├── pages/
│   │   │   ├── SCUD/              # страницы контроля доступа
│   │   │   │   ├── AccessLogPage.tsx    # журнал событий (группировка по дате, пагинация, CSV)
│   │   │   │   ├── AccessKeysPage.tsx   # RFID карты
│   │   │   │   ├── DevicesPage.tsx      # двери (open door, сеть, команды)
│   │   │   │   ├── EmployeesPage.tsx    # сотрудники
│   │   │   │   ├── FirmwarePage.tsx     # прошивки (OTA push, стабильная/бета)
│   │   │   │   └── DiscoveryPage.tsx    # поиск новых устройств
│   │   │   ├── Sensors/           # датчики воды
│   │   │   ├── Dashboard/
│   │   │   ├── Auth/
│   │   │   └── Admin/
│   │   └── services/
│   │       └── api.ts             # все API вызовы
│   └── dist/                      # собранный фронтенд (nginx)
├── firmware/
│   ├── door-controller-v2.0/      # Production СКУД прошивка
│   │   ├── door_controller_v2.ino
│   │   ├── config.h
│   │   ├── mqtt_handler.h
│   │   ├── web_config.h           # AP Mode web configurator
│   │   ├── wiegand_reader.h
│   │   ├── card_cache.h           # NVS кеш до 10,000 карт
│   │   ├── event_queue.h          # offline очередь до 500 событий
│   │   └── README.md
│   ├── water-sensor-v3.3.2/       # Последняя стабильная прошивка датчика воды
│   └── ota_module.ino
└── scripts/                       # bash скрипты

PM2 процессы

pm2 list                           # все процессы
pm2 logs acs-monitoring --lines 50 # логи СКУД
pm2 restart acs-monitoring         # рестарт

⚠️ Сейчас acs-monitoring в статусе stopped (238+ рестартов). Вероятно упал по ошибке.


База данных PostgreSQL

  • Хост: localhost:5432
  • База: acs_monitoring
  • Пользователь: acs_user
  • Пароль: в /var/www/acs-monitoring/backend/.env

Таблицы

Таблица Назначение
devices ESP32 устройства (двери, датчики)
employees Сотрудники
access_keys RFID карты и RF брелоки
access_events Журнал событий доступа
device_commands Очередь команд устройствам
device_discovery Обнаруженные новые устройства
device_network_config Сетевые настройки устройств (static IP)
firmware Версии прошивок
firmware_updates История OTA обновлений
sensors Датчики воды
water_data Показания расхода воды
pressure_data Данные давления
electricity_data Электроэнергия (планируется)
alerts Алерты системы
users Пользователи веб-панели
departments Отделы
positions Должности
telegram_settings Настройки Telegram уведомлений

Стек технологий

Backend

  • Node.js v22 + Express + TypeScript
  • PostgreSQL + pg
  • MQTT: Mosquitto (порт 1883, WS: 8883)
  • Socket.IO — real-time обновления
  • JWT авторизация
  • PM2 (порт 3003)

Frontend

  • React 18 + Vite + TypeScript
  • shadcn/ui (Card, Table, Dialog, Badge, Select, Input...)
  • Lucide React иконки
  • Hash routing (без React Router)
  • Chart.js — графики

ESP32 (СКУД — Door Controller v2.0)

  • Arduino Framework
  • WiFi (встроенная)
  • PubSubClient (MQTT)
  • ArduinoJson
  • ArduinoOTA
  • Preferences/NVS — хранение конфига и кеша карт

ESP32 (Датчики воды — v3.5.x)

  • Arduino Framework + SPIFFS (журналирование)
  • MQTT с journal-first архитектурой
  • NTP синхронизация времени
  • OTA обновления

Распиновка ESP32 (СКУД)

GPIO 26 ← Wiegand D0 (зелёный провод)
GPIO 27 ← Wiegand D1 (белый провод)
GPIO 25 → Relay IN  (управление замком)
GPIO 33 ← Кнопка выхода → GND
GPIO 32 → Buzzer (опционально)
GPIO  2   LED статус (встроенный)
VIN/5V  ← Mini560 OUT+ (5.0V!)
GND     ← Общий GND

MQTT топики (СКУД)

Топик Направление Описание
skud/{device_id}/status ESP→Server Heartbeat каждые 30 сек
skud/{device_id}/access ESP→Server Событие прохода
skud/{device_id}/sync ESP↔Server Синхронизация карт / batch offline событий
devices/provision ESP→Server Активация нового устройства
skud/{device_id}/command Server→ESP Команды (open_door, reboot, sync_cards...)
skud/{device_id}/provision/ack Server→ESP Ответ на provision

Команды устройствам (СКУД)

Команда Описание
open_door Открыть дверь (+duration мс)
close_door Закрыть дверь
sync_cards Пересинхронизация кеша карт
sync_time Синхронизация NTP
reboot Перезагрузка
factory_reset Сброс настроек
set_door_duration Изменить время открытия

Переменные окружения (без секретов)

PORT=3003
NODE_ENV=production
DB_HOST=localhost
DB_PORT=5432
DB_NAME=acs_monitoring
DB_USER=acs_user
DB_PASSWORD=<в .env на сервере>
MQTT_HOST=localhost
MQTT_PORT=1883
MQTT_WS_PORT=8883
JWT_SECRET=<в .env на сервере>
FRONTEND_URL=https://acs.zeroday.su
TELEGRAM_CHAT_ID=<опционально>

Деплой

# Frontend — сборка и деплой
cd /var/www/acs-monitoring/frontend
npm run build
# nginx отдаёт из /var/www/acs-monitoring/frontend/dist/

# Backend — применить изменения
cd /var/www/acs-monitoring/backend
npm run build
pm2 restart acs-monitoring

# Логи
pm2 logs acs-monitoring --lines 100

Hardware (1 дверь)

Компонент Модель Примечание
Контроллер ESP32 DevKit 30-pin Type-C
Считыватель Wiegand RFID 26/34 bit 12V питание
Реле 5V 1-канальное IN: GPIO 25
Преобразователь Mini560 (12V→5V) Точно 5.0V!
БП 12V 2A
АКБ 12V 7Ah Резерв питания 2-6 дней
Замок Электромагнитный 12V NO контакты реле
Кнопка Кнопка выхода GPIO 33 → GND

Стоимость 1 двери: ~4 750 ₽
Стоимость 15 дверей: ~71 250 ₽


Обновлено: май 2026