|
|
| Строка 2: |
Строка 2: |
| __TOC__ | | __TOC__ |
|
| |
|
| =Цель= | | =Правило отправки в мессенджеры= |
| | |
| Создать единую базу событий XIOT-PLC, по которой пользователь, интегратор и аналитический бот смогут восстановить полную картину работы объекта:
| |
| | |
| * какая конфигурация была загружена и применена;
| |
| * когда запускался, останавливался и обновлялся контроллер;
| |
| * было ли подключение к облаку;
| |
| * какие драйверы и устройства были доступны;
| |
| * когда подключались и отключались панели;
| |
| * кто и почему отправил команду;
| |
| * получила ли команда подтверждение;
| |
| * какое событие стало причиной работы сценария;
| |
| * сколько длилась неисправность и когда система восстановилась;
| |
| * какие сообщения ещё не переданы в облако.
| |
| | |
| =Что уже работает=
| |
| | |
| * Все устройства и сценарии используют общий модуль сообщений.
| |
| * В редакторе определены уровни «Отладка», «События», «Сводки», «Информация», «Предупреждения», «Тревоги», «Ошибки в работе» и «Критические ошибки».
| |
| * Сообщения, кроме отладки, сохраняются в локальном журнале.
| |
| * Команды устройств и сценариев умеют показывать отправку, ожидание обратной связи, подтверждение и ошибку ожидания.
| |
| * Для аварийных команд крана, защитного реле и сирены используется критическая ошибка.
| |
| * Защита от протечки, пожарная сигнализация и охрана разделяют тревогу, итог выполнения и техническую неисправность.
| |
| * Драйверы уже публикуют признаки подключения, доступности и ошибок, но эти переходы почти не попадают в общий журнал.
| |
| * Панели уже передают heartbeat, комнату, версию приложения и состояние локальной и облачной связи.
| |
| * Modbus уже различает состояние порта, устройства и отдельного канала.
| |
| * Есть локальная история, фильтры, постраничное чтение и временная шкала сообщений.
| |
| | |
| =Критические пробелы=
| |
| | |
| {| class="wikitable sortable"
| |
| ! Проблема !! Последствие
| |
| |-
| |
| | В облако передаются не все уровни сообщений || Бот не получает обычные события, ошибки в работе и критические ошибки
| |
| |-
| |
| | При ошибке облачной отправки пакет удаляется || События безвозвратно теряются при отсутствии интернета или недоступности сервера
| |
| |-
| |
| | Очередь облачной отправки хранится только в памяти || Перезапуск контроллера удаляет ещё не отправленные события
| |
| |-
| |
| | В журнале остаётся в основном русский текст || Бот вынужден угадывать объект, причину, старое и новое состояние по формулировке
| |
| |-
| |
| | Причинный контекст не сохраняется в базе || После закрытия онлайн-диагностики теряется цепочка «источник → команда → устройство → подтверждение»
| |
| |-
| |
| | Не сохраняется версия конфигурации и сессия запуска || Нельзя уверенно связать проблему с конкретной загрузкой или перезапуском
| |
| |-
| |
| | Имя, тип и комната объекта не фиксируются вместе с событием || После переименования или удаления устройства старая история становится неоднозначной
| |
| |-
| |
| | Переходы драйверов остаются в служебном логе и тегах || Пользовательский журнал и бот не видят состояние инфраструктуры
| |
| |-
| |
| | Нет единого правила задержки и восстановления || Прямое добавление сообщений во все драйверы создаст поток ложных отключений и переподключений
| |
| |-
| |
| | Завершение процесса не гарантирует запись очереди || Сообщения перед перезапуском или остановкой могут потеряться
| |
| |-
| |
| | Горячее создание объекта определяется неверно || Новый объект может ошибочно отмечаться как обновлённый, а событие создания не появляется
| |
| |-
| |
| | Настройка видимости уровней сохраняется неполно || После перезапуска фильтры журнала могут не соответствовать выбору пользователя
| |
| |}
| |
| | |
| =Целевая модель события=
| |
| | |
| Русский текст остаётся основным представлением для человека, но каждое сообщение получает сохраняемые аналитические данные.
| |
| | |
| {| class="wikitable sortable"
| |
| ! Данные !! Назначение
| |
| |-
| |
| | Уникальный идентификатор события || Защита от дублей при повторной облачной доставке
| |
| |-
| |
| | Машинный код события || Стабильное понимание смысла независимо от русского текста
| |
| |-
| |
| | Уровень сообщения || Отображение и уведомления
| |
| |-
| |
| | Вид события || Команда, состояние, подключение, конфигурация, инцидент, сводка
| |
| |-
| |
| | Состояние || Открыто, активно, восстановлено, завершено, отклонено
| |
| |-
| |
| | Время возникновения и время получения || Правильный порядок при задержанной доставке
| |
| |-
| |
| | Контроллер и сессия запуска || Связь событий с конкретным запуском PLC
| |
| |-
| |
| | Версия PLC и версия конфигурации || Поиск проблем после обновления
| |
| |-
| |
| | Тип, постоянный адрес и сохранённое имя объекта || Надёжная история после переименования или удаления
| |
| |-
| |
| | Этаж и комната || Привязка события к месту
| |
| |-
| |
| | Предыдущее и новое состояние || Анализ перехода без разбора текста
| |
| |-
| |
| | Инициатор и причина || Кто вызвал изменение и почему
| |
| |-
| |
| | Действие и результат || Что система пыталась выполнить и чем это закончилось
| |
| |-
| |
| | Связь с исходным событием || Построение цепочки команды или сценария
| |
| |-
| |
| | Номер инцидента || Объединение отключения, повторов и восстановления
| |
| |-
| |
| | Длительность и число повторов || Оценка устойчивости системы
| |
| |-
| |
| | Статус облачной доставки || Контроль полноты данных бота
| |
| |}
| |
| | |
| Секреты, токены, пароли, полный текст конфигурации и персональные данные в аналитические поля не записываются.
| |
| | |
| =Единый каталог событий=
| |
| | |
| Для каждого машинного кода необходимо один раз определить:
| |
| | |
| * русский шаблон;
| |
| * допустимый уровень;
| |
| * категорию;
| |
| * обязательные аналитические поля;
| |
| * правило открытия и закрытия инцидента;
| |
| * задержку подтверждения;
| |
| * правило повторов;
| |
| * возможность передачи в облако;
| |
| * срок хранения;
| |
| * допустимые источники события.
| |
| | |
| Первый набор категорий:
| |
| | |
| {| class="wikitable sortable"
| |
| ! Категория !! Примеры
| |
| |-
| |
| | Контроллер || запуск, остановка, аварийное завершение, обновление
| |
| |-
| |
| | Конфигурация || загрузка начата, принята, применена, отклонена, не изменилась
| |
| |-
| |
| | Облако || подключение, потеря связи, восстановление, ошибка авторизации
| |
| |-
| |
| | Драйвер || запущен, выключен, недоступен, восстановлен, ошибка настройки
| |
| |-
| |
| | Устройство || обнаружено, добавлено, недоступно, восстановлено, удалено
| |
| |-
| |
| | Панель || обнаружена, подключена, отключена, перенесена, удалена, обновлена
| |
| |-
| |
| | Команда || отправлена, подтверждена, повторена, не подтверждена
| |
| |-
| |
| | Сценарий || запущен, завершён, пропущен, остановлен, завершён с ошибкой
| |
| |-
| |
| | Инцидент || открыт, изменён, закрыт, повторился
| |
| |-
| |
| | Хранилище || почти заполнено, ошибка записи, восстановлено, очистка
| |
| |-
| |
| | Сеть и время || изменился маршрут, нет сети, сеть восстановлена, скорректировано время
| |
| |-
| |
| | Авторизация || контроллер привязан, авторизация истекла, привязка сброшена
| |
| |}
| |
| | |
| =Архитектурные доработки=
| |
| | |
| ==Основа — обязательный этап==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Результат !! Приоритет
| |
| |-
| |
| | 1 || Утвердить единый каталог машинных кодов событий || Один смысл не создаётся под разными текстами в разных модулях || Критический
| |
| |-
| |
| | 2 || Разделить уровень, вид и состояние события || Тревожность не смешивается с назначением сообщения || Критический
| |
| |-
| |
| | 3 || Добавить новую таблицу аналитических событий с безопасной миграцией || Старый журнал продолжает работать, новые события получают полную структуру || Критический
| |
| |-
| |
| | 4 || Оставить один компонент, управляющий схемой базы || Исключаются конфликтующие создания и миграции таблиц || Критический
| |
| |-
| |
| | 5 || Сохранять нормализованную цепочку причины и действия || Бот видит инициатора, причину, маршрут и результат после факта || Критический
| |
| |-
| |
| | 6 || Сохранять снимок названия, типа и комнаты объекта || История не ломается после изменения конфигурации || Высокий
| |
| |-
| |
| | 7 || Добавить идентификатор запуска и версию конфигурации || Все события можно привязать к перезапуску и загрузке || Критический
| |
| |-
| |
| | 8 || Ввести последовательный номер события внутри запуска || События с одинаковым временем имеют однозначный порядок || Высокий
| |
| |-
| |
| | 9 || Сохранить старый формат ответа для совместимости || Действующие панели и редактор продолжают работать во время перехода || Критический
| |
| |-
| |
| | 10 || Исправить сохранение пользовательских фильтров уровней || Настройки журнала переживают перезапуск || Средний
| |
| |}
| |
| | |
| ==Надёжность локальной записи и облака==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Результат !! Приоритет
| |
| |-
| |
| | 11 || Заменить память очереди записи на постоянную очередь || События не теряются при перезапуске или временной ошибке базы || Критический
| |
| |-
| |
| | 12 || Создать постоянную очередь облачной доставки || Неотправленные события переживают отсутствие сети и рестарт || Критический
| |
| |-
| |
| | 13 || Передавать в облако все сохраняемые уровни || Бот получает события, ошибки в работе и критические ошибки || Критический
| |
| |-
| |
| | 14 || Не удалять пакет при ошибке отправки || Повторная доставка выполняется после восстановления связи || Критический
| |
| |-
| |
| | 15 || Подтверждать облачную доставку по уникальному идентификатору || Повтор не создаёт дубль на сервере || Критический
| |
| |-
| |
| | 16 || Добавить нарастающие интервалы повторной отправки || Недоступное облако не создаёт постоянную нагрузку || Высокий
| |
| |-
| |
| | 17 || Ограничить очередь по классу и возрасту, а не простым обрезанием || Критические и ещё не доставленные события не вытесняются обычными || Высокий
| |
| |-
| |
| | 18 || Добавить состояние самой доставки || Видны размер очереди, возраст старейшего события и задержка облака || Высокий
| |
| |-
| |
| | 19 || Гарантированно завершать запись перед штатной остановкой || Последнее событие и причина перезапуска не теряются || Критический
| |
| |-
| |
| | 20 || Передавать события между отдельными процессами через постоянную очередь || Обновлятор и вспомогательные службы попадают в общий журнал || Высокий
| |
| |}
| |
| | |
| ==Единый наблюдатель состояния==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Результат !! Приоритет
| |
| |-
| |
| | 21 || Добавить единый наблюдатель системных переходов || Драйверы используют одинаковые формулировки и правила || Критический
| |
| |-
| |
| | 22 || Не создавать отключение до получения первого достоверного состояния || Стартовые значения не выглядят как аварии || Критический
| |
| |-
| |
| | 23 || Добавить задержку подтверждения отключения || Короткий сетевой дребезг не засоряет журнал || Критический
| |
| |-
| |
| | 24 || Подавлять повтор одного состояния || На один период недоступности создаётся одно основное сообщение || Критический
| |
| |-
| |
| | 25 || Создавать парное сообщение о восстановлении || Каждый зафиксированный разрыв получает завершение и длительность || Критический
| |
| |-
| |
| | 26 || Различать штатную остановку и неисправность || Перезапуск драйвера при применении конфигурации не считается аварией || Высокий
| |
| |-
| |
| | 27 || Агрегировать повторные ошибки || Вместо сотен строк хранится число повторов и последняя причина || Высокий
| |
| |-
| |
| | 28 || Не наблюдать собственные теги журнала || Исключается цикл создания сообщений || Критический
| |
| |-
| |
| | 29 || Сохранять открытые инциденты между перезапусками || Восстановление после рестарта закрывает исходную неисправность || Высокий
| |
| |}
| |
| | |
| =Системные источники сообщений=
| |
| | |
| ==Контроллер и конфигурация==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Сообщения
| |
| |-
| |
| | 30 || Жизненный цикл контроллера || Запущен; планово останавливается; предыдущая работа завершилась аварийно; восстановлен после перезапуска
| |
| |-
| |
| | 31 || Причина перезапуска || Применение конфигурации; обновление; команда интегратора; восстановление службы; неизвестная причина
| |
| |-
| |
| | 32 || Загрузка конфигурации || Загрузка начата; конфигурация принята; конфигурация не изменилась; загрузка отклонена
| |
| |-
| |
| | 33 || Фактическое применение конфигурации || Конфигурация применена; количество устройств и сценариев; версия конфигурации
| |
| |-
| |
| | 34 || Сравнение конфигураций || Какие устройства и сценарии добавлены, изменены и удалены
| |
| |-
| |
| | 35 || Горячее обновление объектов || Устройство или сценарий создан, обновлён, удалён; ошибка обновления
| |
| |-
| |
| | 36 || Исправить определение нового объекта || Событие создания действительно отличается от события обновления
| |
| |}
| |
| | |
| Сообщение «конфигурация применена» создаётся после успешного запуска с новым вариантом, а не только после записи файла. Ожидающий результат должен переживать перезапуск.
| |
| | |
| ==Облако контроллера и внутренняя шина==
| |
|
| |
|
| {| class="wikitable sortable" | | {| class="wikitable sortable" |
| ! № !! Доработка !! Сообщения и правила | | ! Тип сообщения !! Записывается в журнал !! Отправляется в мессенджеры |
| |-
| |
| | 37 || Подключение контроллера к облаку || Подключён; связь потеряна; восстановлена с длительностью
| |
| |-
| |
| | 38 || Авторизация облака || Нет авторизации; срок истёк; авторизация отклонена; авторизация восстановлена
| |
| |-
| |
| | 39 || Подписка облачного соединения || Подписка не подтверждена после исчерпания повторов; восстановлена
| |
| |-
| |
| | 40 || Сертификат облака || Не удалось получить или проверить сертификат; проверка сертификата выключена
| |
| |-
| |
| | 41 || Состояние облачной доставки журнала || Доставка задерживается; очередь переполнена; доставка восстановлена
| |
| |-
| |
| | 42 || Внутренняя шина сообщений PLC || Недоступна; перезапускается; восстановлена с длительностью
| |
| |}
| |
| | |
| Факт подключения к облаку следует считать подтверждённым только после успешной подписки, а не сразу после открытия сетевого соединения.
| |
| | |
| ==Панели управления==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Сообщения и правила
| |
| |-
| |
| | 43 || Первая регистрация панели || Подключена новая панель, комната и версия приложения
| |
| |-
| |
| | 44 || Потеря heartbeat || Панель не выходит на связь после действующего таймаута
| |
| |-
| |
| | 45 || Возврат панели || Связь восстановлена с длительностью простоя
| |
| |-
| |
| | 46 || Привязка комнаты || Панель назначена или перенесена в другую комнату
| |
| |-
| |
| | 47 || Удаление панели || Панель удалена из контроллера
| |
| |-
| |
| | 48 || Обновление приложения панели || Старая и новая версия
| |
| |-
| |
| | 49 || Каналы связи панели || Локальная или облачная связь панели потеряна и восстановлена
| |
| |}
| |
| | |
| Heartbeat, последняя активность, открытая страница, яркость и громкость в журнал не записываются.
| |
| | |
| ==Драйверы первой очереди==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Драйвер !! Что добавить | |
| |-
| |
| | 50 || Wiren Board || Подключение линии; потеря; восстановление; ошибка устройства или канала; устранение ошибки
| |
| |-
| |
| | 51 || Modbus || Состояние порта; порт занят; нет прав; устройство недоступно; устройство восстановлено; ошибка настройки канала
| |
| |-
| |
| | 52 || Zigbee2MQTT || Мост подключён; мост недоступен; открыт режим добавления; устройство обнаружено; подключено; ошибка опроса; удалено; недоступно; восстановлено
| |
| |-
| |
| | 53 || Внешние MQTT-подключения || Брокер подключён; авторизация или TLS отклонены; связь потеряна; восстановлена; команды не доставлены
| |
| |-
| |
| | 54 || Пользовательский MQTT-брокер || Служба запущена; недоступна; клиент впервые подключён; клиент превысил таймаут; вернулся
| |
| |-
| |
| | 55 || REST и TCP || Связь потеряна после нескольких опросов; восстановлена; неверный адрес или шаблон; повторные ошибки команд агрегированы
| |
| |-
| |
| | 56 || DMX || Выходной порт недоступен; передача кадров восстановлена; нельзя заявлять доступность конечного светильника
| |
| |}
| |
| | |
| ==Интеграции второй очереди==
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Интеграция !! Что добавить
| |
| |-
| |
| | 57 || HomeKit || Мост запущен; неожиданно остановлен; запуск не выполнен; сопряжение добавлено или сброшено; конфигурация обновлена
| |
| |- | | |- |
| | 58 || Яндекс Алиса || Нет авторизации; доставка событий задерживается; очередь восстановлена; событие отклонено; хранилище очереди повреждено | | | Отладка || Нет || Нет |
| |- | | |- |
| | 59 || Russound || Подключение, разрыв, восстановление и ошибки обмена | | | События || Да || Нет |
| |- | | |- |
| | 60 || Удалённое управление || Настоящий таймаут ответа вместо переключения состояния на каждом опросе | | | Сводки || Да || Нет |
| |- | | |- |
| | 61 || 1-Wire || Датчик добавлен; удалён; недоступен по окну ошибок; восстановлен | | | Информация || Да || Да |
| |- | | |- |
| | 62 || Elsner || Нет корректных данных; связь восстановлена после нескольких правильных кадров | | | Предупреждения || Да || Да |
| |- | | |- |
| | 63 || Global Caché || Команда не доставлена; доставка восстановлена; отдельная проверка доступности при необходимости | | | Тревоги || Да || Да |
| |- | | |- |
| | 64 || Погода и интернет-медиа || Данные устарели; источник недоступен после нескольких попыток; обновление восстановлено | | | Ошибки в работе || Да || Нет |
| |- | | |- |
| | 65 || Маршрутизация интернета || Основной канал потерян; включён резервный; основной восстановлен; убраны дубли технических строк | | | Критические ошибки || Да || Нет |
| |} | | |} |
|
| |
|
| Неактивные или не подключённые к текущему запуску драйверы не включаются в обязательную базу до их фактической активации.
| | =Первая очередь= |
| | |
| ==Физические устройства==
| |
|
| |
|
| {| class="wikitable sortable" | | {| class="wikitable sortable" style="width:100%" |
| ! № !! Доработка !! Правило | | ! № !! Раздел !! Добавить или уточнить сообщения !! Типы сообщений !! Приоритет |
| |- | | |- |
| | 66 || Разделить доступность драйвера и устройства || Работающий порт не означает, что каждое устройство отвечает | | | 1 || Контроллер || Запущен; запущен частично; запрошен перезапуск; остановлен; предыдущая работа завершилась аварийно; работа восстановлена || Информация; События; Предупреждения || Критический |
| |- | | |- |
| | 67 || Добавить обнаружение и подключение нового оборудования || Записывать только подтверждённое обнаружение или завершённое добавление | | | 2 || Конфигурация проекта || Загрузка начата; конфигурация принята; применена; не изменилась; загрузка прервана; отклонена; не применена || События; Информация; Предупреждения; Ошибки в работе; Критические ошибки || Критический |
| |- | | |- |
| | 68 || Добавить длительную недоступность устройства || Использовать правила конкретного протокола, а не один общий таймаут | | | 3 || Устройства в конфигурации || Устройство добавлено; изменено; удалено; изменение не выполнено || Информация; События; Ошибки в работе || Критический |
| |- | | |- |
| | 69 || Добавить восстановление устройства || Указывать длительность и число неудачных проверок | | | 4 || Сценарии в конфигурации || Сценарий добавлен; изменён; удалён; изменение не выполнено || Информация; События; Ошибки в работе || Критический |
| |- | | |- |
| | 70 || Агрегировать ошибки каналов || Не создавать отдельный поток для каждого регистра или контрола | | | 5 || Облако контроллера || Контроллер подключён; связь потеряна; связь восстановлена; подключение выключено; подключение отклонено || События; Предупреждения; Информация; Ошибки в работе || Критический |
| |- | | |- |
| | 71 || Сохранять последний успешный обмен || Бот понимает свежесть данных устройства | | | 6 || Авторизация облака || Авторизация утрачена; восстановлена; сброшена; отклонена || Предупреждения; Информация; События; Ошибки в работе || Критический |
| |} | |
| | |
| =Команды, сценарии и инциденты=
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Результат
| |
| |- | | |- |
| | 72 || Присваивать одной команде единый идентификатор || Отправка, повтор, подтверждение и таймаут образуют одну цепочку | | | 7 || Панели || Новая панель; панель подключена; отключена; восстановлена; перенесена; удалена; приложение панели обновлено || Информация; События; Предупреждения || Критический |
| |- | | |- |
| | 73 || Связывать запуск сценария с исходным событием || Видно, какой датчик или пользователь запустил сценарий | | | 8 || Каналы связи панели || Локальная связь потеряна и восстановлена; облачная связь потеряна и восстановлена || Предупреждения; Информация || Высокий |
| |- | | |- |
| | 74 || Добавить итог сценария || Завершён, пропущен, остановлен или завершён с ошибкой | | | 9 || Все драйверы || Запущен; выключен; подключён; недоступен; восстановлен; ошибка настройки || События; Предупреждения; Информация; Ошибки в работе || Критический |
| |- | | |- |
| | 75 || Не писать каждое промежуточное действие в историю || Подробные шаги остаются в отладке | | | 10 || Физические устройства || Обнаружено; подключено; недоступно; восстановлено; удалено || Информация; Предупреждения || Критический |
| |- | | |- |
| | 76 || Открывать инцидент при устойчивой проблеме || Все повторы и восстановление объединяются одной карточкой | | | 11 || Каналы устройств || Канал не работает; канал восстановлен || Ошибки в работе; Информация || Высокий |
| |- | | |- |
| | 77 || Закрывать инцидент только парным восстановлением || Отсутствие новых ошибок не считается восстановлением | | | 12 || Команды устройств || Команда отправлена; подтверждена; не подтверждена; аварийная команда не подтверждена || События; Ошибки в работе; Критические ошибки || Критический |
| |- | | |- |
| | 78 || Объединять зависимые отказы || Потеря внутренней шины объясняет одновременное отключение нескольких драйверов | | | 13 || Сценарии || Запущен; завершён; пропущен; остановлен; завершён с ошибкой || События; Информация; Предупреждения; Ошибки в работе || Критический |
| |- | | |- |
| | 79 || Формировать суточную сводку здоровья объекта || Доступность облака, драйверов, панелей, устройств и число инцидентов | | | 14 || Инциденты || Открыт; усилен до тревоги; закрыт; повторился || Предупреждения; Тревоги; Информация; События || Критический |
| |} | | |} |
|
| |
|
| =Хранение и обслуживание= | | =Драйверы и интеграции= |
|
| |
|
| {| class="wikitable sortable" | | {| class="wikitable sortable" style="width:100%" |
| ! № !! Доработка !! Результат | | ! № !! Драйвер или интеграция !! Добавить или уточнить сообщения !! Приоритет |
| |- | | |- |
| | 80 || Разные сроки хранения по классу события || Частая диагностика не вытесняет конфигурацию и аварии | | | 15 || Wiren Board || Линия подключена; линия недоступна; линия восстановлена; устройство недоступно; устройство восстановлено; ошибка канала устранена || Высокий |
| |- | | |- |
| | 81 || Не удалять открытые, критические и неотправленные события || Сохраняется расследуемая информация | | | 16 || Modbus || Порт подключён; порт недоступен; порт занят; нет доступа; устройство недоступно; устройство восстановлено; ошибка настройки канала || Высокий |
| |- | | |- |
| | 82 || Хранить долгие суточные итоги после удаления подробностей || Аналитика доступности сохраняется при ограниченном месте | | | 17 || Zigbee2MQTT || Мост подключён; мост недоступен; добавление разрешено; устройство обнаружено; подключено; удалено; недоступно; восстановлено || Высокий |
| |- | | |- |
| | 83 || Выполнять очистку небольшими фоновыми пакетами || Запись новых событий не блокируется | | | 18 || Внешние MQTT-подключения || Подключено; авторизация отклонена; связь потеряна; восстановлена; команда не доставлена; доставка восстановлена || Высокий |
| |- | | |- |
| | 84 || Выполнять полное уплотнение базы по расписанию || Обслуживание не запускается после каждого удаления | | | 19 || Пользовательский MQTT-брокер || Служба запущена; недоступна; клиент подключён; клиент отключён; клиент восстановил связь || Высокий |
| |- | | |- |
| | 85 || Сообщать о заполнении и ошибках записи журнала || Система наблюдает за собственной аналитикой | | | 20 || REST и TCP || Подключено; связь потеряна; восстановлена; неверная настройка; команда не выполнена; выполнение восстановлено || Высокий |
| |- | | |- |
| | 86 || Связать журнал с историей измерений по времени и объекту || Бот может запросить телеметрию вокруг инцидента без объединения двух баз | | | 21 || DMX || Выход подключён; выход недоступен; передача восстановлена || Средний |
| |}
| |
| | |
| Рекомендуемые сроки:
| |
| | |
| * подробная отладка — 7–30 дней, если будет включено её сохранение;
| |
| * частые события — 90–180 дней;
| |
| * команды, системные переходы и обычные инциденты — 12–24 месяца;
| |
| * конфигурация, обновления, безопасность и аварии — 3–5 лет в облаке;
| |
| * суточные итоги доступности — дольше подробных событий.
| |
| | |
| =Доступ для аналитического бота=
| |
| | |
| {| class="wikitable sortable"
| |
| ! № !! Доработка !! Возможности
| |
| |- | | |- |
| | 87 || Единый защищённый API событий || Период, уровень, категория, код, объект, драйвер, инцидент, конфигурация | | | 22 || HomeKit || Мост запущен; остановлен; запуск не выполнен; сопряжение добавлено; сопряжение сброшено; конфигурация обновлена || Средний |
| |- | | |- |
| | 88 || Надёжная постраничная навигация || Однозначный курсор по времени и идентификатору события | | | 23 || Яндекс Алиса || Авторизация утрачена; восстановлена; доставка задержана; восстановлена; событие отклонено || Средний |
| |- | | |- |
| | 89 || API открытых и закрытых инцидентов || Причина, длительность, связанные объекты, восстановление | | | 24 || Russound || Подключено; связь потеряна; восстановлена; ошибка обмена || Средний |
| |- | | |- |
| | 90 || API сводок || Доступность, число отказов, среднее время восстановления, частота неподтверждённых команд | | | 25 || 1-Wire || Датчик добавлен; удалён; недоступен; восстановлен || Средний |
| |- | | |- |
| | 91 || API здоровья журнала || Размер базы, длина очереди, старейшее неотправленное событие, задержка облака | | | 26 || Global Caché || Подключено; связь потеряна; восстановлена; команда не доставлена || Средний |
| |- | | |- |
| | 92 || Поток новых событий || Один формат для истории и событий реального времени | | | 27 || Погода и интернет-медиа || Данные устарели; источник недоступен; получение данных восстановлено || Средний |
| |- | | |- |
| | 93 || Версия формата ответа || Бот и интерфейсы безопасно переживают развитие схемы | | | 28 || Основной и резервный интернет || Основной канал потерян; резервный канал включён; основной канал восстановлен || Высокий |
| |} | | |} |
|
| |
|
| =Интерфейс журнала= | | =Обновления и состояние системы= |
|
| |
|
| {| class="wikitable sortable" | | {| class="wikitable sortable" style="width:100%" |
| ! № !! Доработка | | ! № !! Раздел !! Добавить или уточнить сообщения !! Типы сообщений !! Приоритет |
| |- | | |- |
| | 94 || Добавить категории «Система», «Подключения», «Устройства», «Сценарии», «Безопасность», «Обновления» | | | 29 || Обновление XIOT || Обновление начато; пакет проверен; обновление установлено; применено; не выполнено || Информация; Отладка; Ошибки в работе || Высокий |
| |- | | |- |
| | 95 || Показывать все уровни сообщений с русскими названиями редактора | | | 30 || Приложение проекта || Обновление начато; приложение обновлено; обновление отменено; приложение не обновлено || Информация; События; Ошибки в работе || Высокий |
| |- | | |- |
| | 96 || Добавить отдельный фильтр сводок, событий, предупреждений и инцидентов | | | 31 || Журнал || Хранилище почти заполнено; место освобождено; запись недоступна; запись восстановлена || Предупреждения; Информация; Ошибки в работе || Высокий |
| |- | | |- |
| | 97 || Показывать длительность отключения и признак восстановления | | | 32 || История измерений || История недоступна; история восстановлена || Ошибки в работе; Информация || Высокий |
| |- | | |- |
| | 98 || Открывать цепочку исходного события, команд и подтверждений | | | 33 || Системное время || Часовой пояс изменён; изменение отклонено; системное время существенно скорректировано || События; Ошибки в работе; Предупреждения || Средний |
| |- | | |- |
| | 99 || Показывать действующую версию конфигурации и запуск контроллера | | | 34 || Сетевое подключение || Основное подключение изменено; интернет недоступен; интернет восстановлен || События; Предупреждения; Информация || Высокий |
| |- | | |- |
| | 100 || Отображать задержку облачной доставки без смешивания её с событиями объекта | | | 35 || Суточная сводка || Доступность облака, панелей, драйверов и устройств; число тревог и незавершённых инцидентов || Сводки || Средний |
| |} | | |} |
|
| |
|
| =Обновления, сеть и состояние самого PLC= | | =Единые правила сообщений= |
|
| |
|
| {| class="wikitable sortable" | | {| class="wikitable sortable" style="width:100%" |
| ! № !! Доработка !! Результат | | ! № !! Доработка !! Ожидаемый результат !! Приоритет |
| |-
| |
| | 101 || Передавать результат обновления XIOT через постоянную очередь || Отдельный процесс обновления попадает в единый журнал
| |
| |- | | |- |
| | 102 || Проверять новую версию после перезапуска || Успех обновления подтверждает уже запущенный контроллер, а не установщик | | | 36 || Для каждого отключения добавить парное восстановление || В журнале видны начало, окончание и длительность проблемы || Критический |
| |- | | |- |
| | 103 || Создавать один итог на каждую операцию обновления || Проценты загрузки остаются в окне обновления, журнал получает запрос, установку, успех или ошибку | | | 37 || Не создавать повтор одного и того же состояния || Один период неисправности не превращается в поток одинаковых строк || Критический |
| |- | | |- |
| | 104 || Обновлять пользовательское приложение через промежуточный каталог || Действующее приложение не удаляется до успешной загрузки и проверки нового архива | | | 38 || Не считать начальное неизвестное состояние отключением || После запуска не появляются ложные предупреждения || Критический |
| |- | | |- |
| | 105 || Ограничить повторы загрузки приложения || После исчерпания попыток создаётся одна итоговая ошибка и открытый инцидент | | | 39 || Краткие разрывы записывать только после подтверждения || Журнал не заполняется кратковременными переключениями связи || Критический |
| |- | | |- |
| | 106 || Разделить сетевой интерфейс, основной маршрут, доступ в интернет и облако || Одна неисправность не маскируется другим общим признаком «нет связи» | | | 40 || В тексте команды указывать инициатора и причину || Понятно, кто и почему изменил состояние устройства || Высокий |
| |- | | |- |
| | 107 || Убрать двойные сообщения при переключении основного и резервного интернета || Один переход создаёт одно событие | | | 41 || В итоговом сообщении указывать результат команды || Видны отправка, подтверждение или отсутствие подтверждения || Высокий |
| |- | | |- |
| | 108 || Записывать успешную смену часового пояса и отказ операции || Известно, почему изменилось отображаемое время | | | 42 || В сообщении восстановления указывать длительность || Можно оценить продолжительность недоступности || Высокий |
| |- | | |- |
| | 109 || Обнаруживать существенный скачок системных часов || Аналитика учитывает нарушение временного порядка | | | 43 || При переименовании сохранять понятное имя объекта в старых сообщениях || История остаётся однозначной после изменения конфигурации || Высокий |
| |- | | |- |
| | 110 || Контролировать свободное место, запись журнала, историю и постоянные настройки || Проблема хранения видна до потери данных | | | 44 || Не включать секретные данные и содержимое конфигурации в текст || Сообщения остаются безопасными для журнала и мессенджеров || Критический |
| |- | | |- |
| | 111 || Сообщать об ошибке базы через резервную постоянную очередь || Неисправный журнал способен сообщить о собственной неисправности после восстановления | | | 45 || Отправлять в мессенджеры только «Информация», «Предупреждения» и «Тревоги» || «События», «Сводки», «Ошибки в работе», «Критические ошибки» и «Отладка» остаются только локальными || Критический |
| |- | | |- |
| | 112 || Формировать итог готовности запуска || Указывается число запущенных и не запущенных драйверов, устройств и сценариев | | | 46 || Исключить «Сводки» из отправки в мессенджеры || Периодические итоги не создают лишние уведомления || Критический |
| |- | |
| | 113 || Различать готовый и частично готовый запуск || Общая строка «контроллер запущен» не скрывает ошибки отдельных компонентов | |
| |-
| |
| | 114 || Записывать таймаут незавершённой загрузки конфигурации || Бот видит брошенную загрузку, если были приняты части данных
| |
| |-
| |
| | 115 || Не считать отсутствие авторизации ошибкой непривязанного контроллера || Ошибка появляется только при потере ранее действовавшей авторизации или при отклонении входа
| |
| |} | | |} |
|
| |
|
| =Правила защиты от потока сообщений= | | =Связанные таблицы= |
|
| |
|
| * Начальное неизвестное состояние не считается отключением.
| | {| class="wikitable" |
| * Отключение подтверждается таймаутом или несколькими одинаковыми ошибками.
| | ! Таблица !! Содержание |
| * Повтор одного состояния увеличивает счётчик, но не создаёт новую строку.
| |
| * Восстановление создаётся только после ранее записанной неисправности.
| |
| * В сообщении о восстановлении указывается длительность.
| |
| * Штатное выключение при обновлении конфигурации не считается аварией.
| |
| * Ошибки нескольких каналов одного устройства агрегируются.
| |
| * Каждая попытка сетевого повтора остаётся в отладке, а не в истории.
| |
| * Heartbeat и успешные опросы не сохраняются как отдельные события.
| |
| * Для батарейных Zigbee-устройств используются признаки доступности протокола, а не короткий общий таймаут.
| |
| * DMX сообщает о доступности выходного порта, но не утверждает доступность светильника без обратной связи.
| |
| | |
| =Тесты=
| |
| | |
| {| class="wikitable sortable" | |
| ! Группа !! Обязательные проверки | |
| |-
| |
| | Миграция || Старая база обновляется без потери истории; повторная миграция безопасна
| |
| |-
| |
| | Порядок событий || Несколько событий в одну миллисекунду читаются без пропусков и дублей
| |
| |- | | |- |
| | Перезапуск || Ожидающая конфигурация, причина рестарта, открытые инциденты и облачная очередь сохраняются | | | [[Система сообщений XIOT-PLC — полная карта]] || Количество существующих сообщений по устройствам, сценариям и типам |
| |- | | |- |
| | Аварийное завершение || Новый запуск определяет незакрытую предыдущую сессию | | | [[Система сообщений XIOT-PLC — каталог шаблонов]] || Полные тексты существующих сообщений |
| |- | | |- |
| | Облако недоступно || События остаются локально и отправляются после восстановления | | | [[Системные события в журнале XIOT-PLC]] || Полные тексты предлагаемых системных сообщений |
| |-
| |
| | Повторная доставка || Сервер не создаёт дубль одного события
| |
| |-
| |
| | Поток ошибок || Тысячи одинаковых переходов превращаются в один инцидент со счётчиком
| |
| |-
| |
| | Дребезг связи || Короткий разрыв до таймаута не попадает в историю
| |
| |-
| |
| | Восстановление || У каждого записанного разрыва есть парное закрытие и длительность
| |
| |-
| |
| | Конфигурация || Различаются принятая и фактически применённая конфигурация
| |
| |-
| |
| | Драйверы || Для каждого драйвера проверяются подключение, отключение, восстановление и штатная остановка
| |
| |-
| |
| | Хранение || Низкоприоритетные записи удаляются раньше критических, открытых и неотправленных
| |
| |-
| |
| | Безопасность || Токены, пароли и полный конфиг не попадают в базу и облако
| |
| |-
| |
| | Совместимость || Старый редактор и панели продолжают читать журнал
| |
| |} | | |} |
|
| |
|
| =Этапы внедрения=
| | [[Category:XIOT-PLC]][[Category:Сообщения]][[Category:Планы доработок]] |
| | |
| {| class="wikitable sortable"
| |
| ! Этап !! Состав !! Критерий готовности
| |
| |-
| |
| | 1. Надёжная основа || Новая запись события, миграция, постоянная локальная и облачная очереди, все уровни, защита от дублей || Событие не теряется при отключении сети и перезапуске
| |
| |-
| |
| | 2. Контроллер и конфигурация || Запуск, остановка, аварийное завершение, загрузка и применение конфигурации, версия запуска || Бот точно знает, какая конфигурация и версия работали в любой момент
| |
| |-
| |
| | 3. Облако и панели || Облачное подключение контроллера, доставка журнала, полный жизненный цикл панелей || Все разрывы имеют восстановление и длительность
| |
| |-
| |
| | 4. Основные драйверы || Wiren Board, Modbus, Zigbee2MQTT, MQTT, REST/TCP, DMX || Единая сводка доступности основных интеграций
| |
| |-
| |
| | 5. Устройства и инциденты || Доступность физических устройств, корреляция команд и сценариев, открытие и закрытие инцидентов || Можно восстановить причинную цепочку отказа
| |
| |-
| |
| | 6. Остальные интеграции || HomeKit, Алиса, Russound, 1-Wire, Elsner, маршрутизация и другие активные модули || Все используемые драйверы покрыты едиными правилами
| |
| |-
| |
| | 7. API и аналитика || API событий, инцидентов, сводок, здоровья; связь с телеметрией || Бот получает полную структурированную картину без разбора служебного лога
| |
| |-
| |
| | 8. Интерфейс и эксплуатация || Новые фильтры, цепочки, длительности, настройки хранения и контроль очередей || Журнал одинаково понятен пользователю и интегратору
| |
| |}
| |
| | |
| =Первый рабочий релиз=
| |
| | |
| Первый релиз не должен пытаться сразу покрыть все драйверы. В него входят:
| |
| | |
| # новая совместимая запись аналитического события;
| |
| # постоянная очередь облачной доставки без удаления при ошибке;
| |
| # передача всех сохраняемых уровней;
| |
| # идентификатор запуска и версия конфигурации;
| |
| # запуск, остановка и аварийное завершение контроллера;
| |
| # принятие и фактическое применение конфигурации;
| |
| # подключение, потеря и восстановление облака контроллера;
| |
| # жизненный цикл панелей;
| |
| # единый наблюдатель переходов;
| |
| # защищённый API чтения для бота;
| |
| # тесты сети, рестарта, миграции и защиты секретов.
| |
| | |
| После этого новые драйверы можно подключать к единой базе небольшими адаптерами, не меняя правила хранения и аналитики.
| |
| | |
| =Связанные страницы=
| |
| | |
| * [[Система сообщений XIOT-PLC — полная карта]]
| |
| * [[Система сообщений XIOT-PLC — каталог шаблонов]]
| |
| * [[Системные события в журнале XIOT-PLC]]
| |
| | |
| [[Category:XIOT-PLC]][[Category:Сообщения]][[Category:Диагностика]][[Category:Планы доработок]] | |