Требования#
1. Функциональные требования (черновик)#
Полевые устройства IOOT PRO должны работать без Linux и состоять из AT32 (real-time + CANopen) и ESP32 (MQTT transport).
AT32 должен выполнять технологический процесс в реальном времени и обмен PDO/SDO по CANopen.
ESP32 должен быть связан с AT32 по UART.
ESP32 должен передавать данные в MQTT-брокер локального Linux-контроллера ПО «Зеленый робот».
Данные PDO из CAN-сегмента должны транслироваться в MQTT-топики.
Команды из MQTT должны преобразовываться в SDO-команды для AT32 и других CANopen-устройств.
Один локальный контроллер должен обслуживать один конкретный объект.
Локальный контроллер ПО «Зеленый робот» должен иметь CAN-интерфейс и возможность direct SDO/PDO работы с CANopen сетью.
Локальный контроллер ПО «Зеленый робот» с 10» экраном и аккумулятором должен поддерживать RFID MIFARE считыватель карт для идентификации пользователя.
Локальный контроллер ПО «Зеленый робот» должен применять ролевые права доступа к операциям на основании идентификации по RFID MIFARE.
Локальный контроллер ПО «Зеленый робот» должен содержать локальный MQTT-брокер для приема данных от ESP32 transport-уровня.
Локальный контроллер ПО «Зеленый робот» должен выполнять супервизорное управление технологическими сценариями и бизнес-процессами объекта.
Локальный контроллер ПО «Зеленый робот» должен формировать и вносить уставки по технологической цепочке через SDO в CANopen.
Локальный Linux-контроллер не должен брать на себя критичные hard real-time контуры, закрепленные за AT32.
Обработка и регулирование технологических параметров должны выполняться на runtime AT32 устройствах.
Контроллер ПО «Зеленый робот» должен контролировать, сравнивать и мониторить процесс по данным PDO (CAN) и MQTT pub.
Робот должен передавать телеметрию в backend в реальном времени.
Оператор должен иметь возможность отправлять управляющие команды.
Система должна хранить историю телеметрии.
Платформа должна поддерживать удаленное обновление ПО устройства.
Должна быть базовая диагностика состояния узлов.
REST API должен быть описан и публиковаться через Swagger/OpenAPI.
OpenAPI должен быть source-of-truth для API-контракта с синхронизацией runtime и документации.
Глобальный UI-контракт данных:
GET /api/v1/<resource>/list+GET /api/v1/<resource>/schemeдля таблиц, карточек и форм.UI-навигация должна строиться backend-driven через API-каталоги модулей/папок/меню.
Backend-каталог модулей должен поддерживать параметры отображения
display_module,show_filters,module_viewи расширяться без слома базового каркаса.Frontend reference runtime должен реализовываться на Vue 3 + Vite (TypeScript допускается как релизный профиль).
UI должен быть mobile-oriented (mobile-first, адаптивный интерфейс для телефона/планшета/десктопа).
Модули должны отображаться в основном окне приложения в виде карточек.
Карточка модуля должна поддерживать 3 состояния:
свёрнутое (минимальный виджет),
развернутое (нормальный виджет),
полноэкранное (режим работы в карточке).
По выбранному объекту карточки открывается popup Infobar и содержит инструменты операций с объектом.
Справочник, настройки и дополнительные элементы должны находиться в burger-меню.
Кнопка выхода должна оставаться в topbar вне burger-меню, чтобы сценарий logout не зависел от прав на доступ к самому меню.
Отдельные fullscreen представления (карты, пульт) должны вызываться кнопками быстрого доступа в правом верхнем углу интерфейса.
Табличный режим должен поддерживать smart-функции (drag-and-drop колонок, сортировка, глобальный поиск, smart-фильтры).
Табличный режим должен поддерживать двунаправленную lazy-пагинацию с оконной выгрузкой.
Табличный режим должен поддерживать серверные и пользовательские пресеты фильтров.
Frontend должен передавать route-context заголовки
X-Route-Path,X-Route-Module,X-Route-Filter.Frontend должен передавать build-context заголовки
X-Client-Version,X-Client-Build-Time.UI runtime должен использовать config-driven bootstrap с обогащением модулей из backend-каталога.
Shell runtime должен поддерживать versioned export/import/rollback profile для
theme,dashboard layout,quick modules,ui-accessс изоляцией поtenant/site/industry.Для pilot-контуров должны поддерживаться готовые shell presets как минимум для
cloud-multiиedge-single.Pilot handover должен поддерживать evidence bundle с
app/context,ready,modules,site-policy,shell-profile,security-log.Pilot release-gate должен включать автоматизированный rollback/restore drill с возвратом baseline runtime без расхождения
modules_state/site-policy/shell-profile.Следующий эксплуатационный этап должен обеспечить retention pilot-артефактов и observability по
/ready,tenant-master-sync lag,status heartbeat,Postgres/NanoMQ.Для pilot-контура должен поддерживаться единый sign-off bundle (
inspect/apply/smoke/evidence/rollback/archive) и архив площадки.Для multi-site эксплуатации должен вестись rollout registry по площадкам и production waves с привязкой к последнему sign-off и promotion-check.
Operational incident должен передаваться как единый handover package с
pilot-summary,ready, sign-off reference и rollback decision.Production rollout должен ссылаться только на immutable versioned artifacts (
bootstrap_ref,signoff_ref,promotion_ref,build_commit,content_hash) без mutable aliaseslatest/current/tmp.i18n-политика: русский как source-locale, синхронизация ключей на поддерживаемые языки.
PWA-подход должен поддерживаться как базовая опция (service worker, auto-update, offline-ready), с возможностью отключения по политике релиза.
Платформа должна поддерживать MQTT broker/client для телеметрии и событий.
Контроллер должен поддерживать CANopen для связи с датчиками и блоками управления.
Контроллер должен поддерживать RS485 Modbus RTU для интеграции сторонних счетчиков и устройств.
Базовые промышленные интеграции текущего контура: CANopen и RS485 Modbus RTU.
Платформа должна поддерживать изолированные отраслевые пакеты с едиными контрактами ядра и отдельными отраслевыми задачами/архитектурой.
В cloud-контуре должен поддерживаться multi-industry режим, в site/cabinet edge-контуре — single-industry режим.
Для отрасли melioration учет воды должен поддерживать
mmкак primary иm3как derived значение.Для осадков в melioration локальная метеостанция должна быть primary-источником, внешний weather service — fallback и контур контроля аномалий.
Режим управления поливом в MVP должен использовать
B(semi-auto) по умолчанию с поддержкой переключения вAиCпо policy.Протоколы ISOBUS/J1939/BACnet не включаются в текущий контур и переносятся на этап после MVP.
Платформа должна поддерживать два контура подготовки продуктовых пакетов: ПО «Зеленый робот» и ПАК «IOOT PRO».
Платформа должна вести обязательный комплект технической, пользовательской и эксплуатационной документации для продуктовых пакетов и сопровождения.
Для ПАК должны вестись версии embedded-прошивок и Linux-embedded сборок контроллера/камеры.
Облачный контур клиента должен синхронизироваться одновременно с множеством локальных контроллеров.
Для каждого клиента (хозяйства) должен развертываться отдельный cloud-контейнер с tenant-контроллером.
Каждый tenant-контейнер должен иметь собственный MQTT-брокер для обмена с локальными контроллерами.
Tenant-контейнеры должны обмениваться с master-контроллером только ограниченным набором служебных данных.
Master-контроллер должен использовать MQTT-брокер NanoMQ.
Master-контроллер должен управлять подписками клиентов.
Master-контроллер должен предоставлять сервисы аналитики и данных по режимам/методикам.
Локальный и облачный контуры должны использовать единое приложение ПО «Зеленый робот» в разных режимах развертывания (edge/cloud).
2. Нефункциональные требования (черновик)#
Надежность канала связи при кратковременных сбоях.
Расширяемость для новых типов сенсоров/приводов.
Безопасность: аутентификация устройств и пользователей.
Наблюдаемость: логи, метрики, алерты.
Документируемость API и протоколов.
Требования к MQTT: устойчивое переподключение и delivery-гарантии (QoS по профилю нагрузки).
Требования к промышленным интерфейсам: обработка ошибок шины CANopen/RS485 и таймаутов опроса.
Требования к мосту AT32 <-> ESP32: гарантированная и проверяемая трансляция PDO -> MQTT и MQTT -> SDO.
Требования к direct CAN контуру: гарантированная доставка SDO уставок, контроль подтверждений и повтор при отказе.
При недоступности облака локальный контроллер должен сохранять автономное выполнение супервизорных сценариев, а критичные контуры продолжают выполняться на AT32 уровне.
После восстановления связи должна выполняться консистентная синхронизация состояния с облаком.
Tenant-контейнеры должны быть логически изолированы друг от друга (данные и каналы управления).
Обмен tenant-контейнеров с master-контроллером должен быть ограничен утвержденным набором метрик/событий и обновлений.
Масштабирование master-контроллера и NanoMQ должно поддерживать рост числа tenant-контейнеров без деградации SLA.
Документация проекта должна поддерживаться в актуальном состоянии и быть трассируемой до требований/релизов.
Комплект документов должен покрывать требования подготовки продуктовых пакетов и аудита изменений.
Перед релизом UI обязателен quality-gate: i18n checks, тесты, сборка и smoke основных endpoint-ов.
Перед pilot rollout обязателен acceptance smoke для shell permissions, quick modules, fullscreen flow и shell-profile portability.
3. Открытые вопросы#
Какие условия эксплуатации (улица/помещение/производство)?
Какой допустимый уровень задержки команд?
Какие требования по автономности питания?
Какие ограничения по стоимости BOM для MVP?
Нужен ли офлайн-режим при потере сети?
Какой точный whitelist данных разрешен для обмена Tenant -> Master?
Какие данные запрещено передавать в master-контур по политике клиента?
Какой SLA синхронизации и доставки обновлений между master, tenant и local слоями?
Как финально фиксируется совместимость CRUD-контракта (
/api/v1/<resource>и/{id}) относительно приоритетногоlist/scheme?Какой целевой профиль модульного Pinia-store принимается для ПО «Зеленый робот» (границы store-срезов, ответственность, правила взаимодействия)?
Какой минимальный обязательный состав backend-каркаса Go фиксируем как стандарт (env/validation/middleware/shutdown)?
В каком релизе и с каким контрактом вводятся endpoint-ы
/healthz,/readyz,/version, учитывая что фактический baseline сейчас используетGET /health?