English | Русский
ModbusLab это fullstack-приложение для промышленного мониторинга и автоматизации тестирования. Проект имитирует лабораторию устройств с Modbus-подобной моделью работы: защищённые операции, ролевая модель доступа, хранение данных в PostgreSQL, обновление регистров в реальном времени, аудит действий, администрирование устройств, администрирование пользователей и операторская панель.
Промышленные устройства часто проверяются вручную: оператор читает регистры, записывает управляющие значения, сравнивает измерения с допустимыми диапазонами, запускает отдельные тестовые операции и фиксирует результат. Такой подход медленный, плохо масштабируется и легко ломается из-за человеческого фактора.
ModbusLab переносит этот процесс в web-платформу:
-
мониторинг имитированных slave-устройств и их регистров;
-
чтение и запись значений регистров с проверкой прав доступа;
-
запуск повторяемых тестовых сценариев;
-
отслеживание прогресса выполнения тестов в реальном времени;
-
просмотр успешных и неуспешных шагов тестирования;
-
экспорт отчётов по тестовым запускам;
-
аудит действий пользователей;
-
управление пользователями, ролями, устройствами, типами устройств и определениями регистров.
-
React + TypeScript frontend с защищёнными страницами и интерфейсом, зависящим от роли пользователя;
-
ASP.NET Core backend с Minimal API endpoints;
-
PostgreSQL база данных с миграциями Entity Framework Core;
-
JWT-аутентификация и политики авторизации;
-
обновления в реальном времени через SignalR;
-
фоновые worker-сервисы для имитации изменения регистров и очереди выполнения тестов;
-
Docker Compose для локального запуска;
-
автоматические CI-проверки;
-
backend unit-тесты и браузерные E2E-тесты.
- JWT-аутентификация.
- Локальные пользователи с хешированными паролями.
- Роли:
Viewer,Engineer,Admin. - Защищённые frontend-страницы и навигация с учётом роли.
- Поддержка Bearer-аутентификации в Swagger.
- Публичная регистрация управляется через конфигурацию.
- Rate limiting для входа и регистрации.
- Правила безопасности:
- отключённые пользователи не могут войти в систему;
- последнего активного администратора нельзя отключить или понизить в роли;
- администратор не может отключить собственную учётную запись.
Пользователи с ролью Admin могут:
- просматривать список пользователей;
- создавать новых пользователей;
- изменять роли пользователей;
- включать и отключать учётные записи;
- просматривать связанные с пользователями действия через журнал аудита.
Пользователи с ролями Engineer/Admin могут:
- создавать типы устройств;
- создавать slave-устройства с уникальными Modbus slave-адресами;
- включать и отключать устройства;
- создавать определения регистров для типа устройства;
- инициализировать значения регистров для уже существующих устройств этого типа.
- Несколько заранее созданных demo-устройств.
- Определения регистров с режимами доступа и допустимыми диапазонами.
- Операции чтения и записи регистров.
- Проверка прав доступа для операций записи.
- Журнал Modbus-операций.
- Обновление значений регистров в реальном времени через SignalR.
- Тестовые профили с упорядоченными шагами.
- Поддерживаемые типы шагов:
- запись регистра;
- задержка;
- проверка значения регистра на попадание в диапазон.
- Успешные и намеренно падающие demo-сценарии.
- Очередь выполнения тестов в фоновом режиме.
- Прогресс выполнения теста в реальном времени через SignalR.
- История тестовых запусков.
- Экспорт отчёта в CSV.
- Журнал аудита для аутентификации, управления пользователями, записи регистров, управления устройствами и действий, связанных с тестированием.
- Фильтрация аудита по действию, пользователю, результату и диапазону дат в API.
- Health endpoints для API и базы данных.
- Docker healthchecks для PostgreSQL, API и frontend.
| Страница | Назначение | Типичный доступ |
|---|---|---|
| Login | Вход в систему или переход к регистрации | Public |
| Dashboard | Общий обзор устройств, последних логов, профилей и тестовых запусков | Viewer / Engineer / Admin |
| Monitoring | Значения регистров, операции чтения/записи и Modbus-журнал | Viewer может читать, Engineer/Admin могут записывать |
| Testing | Тестовые профили, запуск тестов, прогресс, история и CSV-отчёты | Engineer / Admin |
| Device Admin | Типы устройств, устройства, определения регистров и статус устройств | Engineer / Admin |
| Users | Создание пользователей, изменение ролей и управление статусом аккаунтов | Admin |
| Audit Logs | История действий безопасности и бизнес-операций | Admin |
- .NET 10
- ASP.NET Core Minimal API
- Entity Framework Core
- PostgreSQL
- SignalR
- JWT Bearer Authentication
- xUnit
- React
- TypeScript
- Vite
- TanStack Query
- SignalR Client
- Playwright
- Custom CSS
- Docker Compose
- PostgreSQL 17
- GitHub Actions
- Swagger / OpenAPI
React + TypeScript UI
|
| HTTP + JWT / SignalR
v
ASP.NET Core Minimal API
|
| Application services
v
Domain entities and business rules
|
| EF Core repositories
v
PostgreSQL
Структура репозитория:
src/
ModbusLab.Api/ HTTP API, auth, endpoints, SignalR, background services
ModbusLab.Application/ Application services and use cases
ModbusLab.Domain/ Domain entities and business rules
ModbusLab.Infrastructure/ EF Core, PostgreSQL, repositories, migrations
tests/
ModbusLab.Tests/ Backend unit tests
frontend/
src/ React application
e2e/ Playwright E2E tests
Эти аккаунты предназначены только для локальной разработки.
| Login | Password | Role | Access |
|---|---|---|---|
admin |
Admin123! |
Admin |
Полный доступ, пользователи, аудит, управление устройствами, управление тестовыми профилями |
engineer |
Engineer123! |
Engineer |
Мониторинг, запись регистров, запуск тестов, управление устройствами |
viewer |
Viewer123! |
Viewer |
Только чтение мониторинга и истории |
Сборка и запуск PostgreSQL, API и frontend:
docker compose up --buildАдреса по умолчанию:
| Сервис | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Swagger | http://localhost:8080/swagger |
| API health | http://localhost:8080/api/health |
| Database health | http://localhost:8080/api/health/db |
| PostgreSQL | localhost:5433 |
Остановить контейнеры:
docker compose downСбросить локальный volume базы данных:
docker compose down -vЗапустить только PostgreSQL:
docker compose up -d postgresЗапустить API:
dotnet restore
dotnet run --project src/ModbusLab.ApiЗапустить frontend:
npm install --prefix frontend
npm run dev --prefix frontendBackend:
dotnet restore
dotnet build
dotnet testFrontend:
npm install --prefix frontend
npm run build --prefix frontend
npm run lint --prefix frontendE2E:
npm run e2e --prefix frontendDocker:
docker compose config
docker compose buildGitHub Actions запускает backend-, frontend-, Docker- и Playwright E2E-проверки при push и pull request в ветку main.
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/login |
Вход в систему и получение JWT |
POST |
/api/auth/register |
Публичная регистрация, если она включена |
GET |
/api/auth/me |
Текущий аутентифицированный пользователь |
GET |
/api/users |
Список пользователей для Admin |
POST |
/api/users |
Создание пользователя администратором |
PATCH |
/api/users/{userId}/role |
Изменение роли пользователя администратором |
PATCH |
/api/users/{userId}/status |
Включение или отключение пользователя администратором |
GET |
/api/devices |
Список устройств |
GET |
/api/devices/{deviceId}/registers |
Регистры устройства |
GET |
/api/device-management/types |
Список типов устройств |
POST |
/api/device-management/types |
Создание типа устройства |
POST |
/api/device-management/devices |
Создание slave-устройства |
PATCH |
/api/device-management/devices/{deviceId}/status |
Включение или отключение устройства |
POST |
/api/device-management/registers |
Создание определения регистра |
POST |
/api/modbus/read |
Чтение регистра |
POST |
/api/modbus/write |
Запись регистра |
GET |
/api/modbus/logs |
Журнал Modbus-операций |
GET |
/api/test-profiles |
Тестовые профили |
POST |
/api/test-profiles |
Создание тестового профиля |
POST |
/api/test-profiles/{profileId}/run |
Запуск тестового профиля |
GET |
/api/test-runs |
Последние тестовые запуски |
GET |
/api/test-runs/{runId}/report.csv |
Экспорт CSV-отчёта |
GET |
/api/audit-logs |
Отфильтрованный журнал аудита |
GET |
/api/health |
Проверка состояния API |
GET |
/api/health/db |
Проверка состояния базы данных |
GET |
/hubs/modbus |
SignalR hub для обновлений в реальном времени |
- Refresh tokens и управление активными сессиями.
- Редактирование и удаление типов устройств, slave-устройств и регистров.
- OpenTelemetry traces и структурированное логирование запросов.
- Более подробная аналитика на dashboard.
- PDF-отчёты по тестам.
- Интеграционные тесты с PostgreSQL.
- Реальный Modbus RTU/TCP adapter за текущими контрактами application services.






