Требования#

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 aliases latest/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?