Перейти к содержанию

Xiot-plc-message-system-development-plan: различия между версиями

Материал из XIOT Wiki
Добавлен полный план доработки единой системы сообщений и аналитики PLC
 
Оставлены только таблицы сообщений; уточнена отправка в мессенджеры
Строка 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:Планы доработок]]

Версия от 18:04, 1 августа 2026

Правило отправки в мессенджеры

Тип сообщения Записывается в журнал Отправляется в мессенджеры
Отладка Нет Нет
События Да Нет
Сводки Да Нет
Информация Да Да
Предупреждения Да Да
Тревоги Да Да
Ошибки в работе Да Нет
Критические ошибки Да Нет

Первая очередь

№ Раздел Добавить или уточнить сообщения Типы сообщений Приоритет
1 Контроллер Запущен; запущен частично; запрошен перезапуск; остановлен; предыдущая работа завершилась аварийно; работа восстановлена Информация; События; Предупреждения Критический
2 Конфигурация проекта Загрузка начата; конфигурация принята; применена; не изменилась; загрузка прервана; отклонена; не применена События; Информация; Предупреждения; Ошибки в работе; Критические ошибки Критический
3 Устройства в конфигурации Устройство добавлено; изменено; удалено; изменение не выполнено Информация; События; Ошибки в работе Критический
4 Сценарии в конфигурации Сценарий добавлен; изменён; удалён; изменение не выполнено Информация; События; Ошибки в работе Критический
5 Облако контроллера Контроллер подключён; связь потеряна; связь восстановлена; подключение выключено; подключение отклонено События; Предупреждения; Информация; Ошибки в работе Критический
6 Авторизация облака Авторизация утрачена; восстановлена; сброшена; отклонена Предупреждения; Информация; События; Ошибки в работе Критический
7 Панели Новая панель; панель подключена; отключена; восстановлена; перенесена; удалена; приложение панели обновлено Информация; События; Предупреждения Критический
8 Каналы связи панели Локальная связь потеряна и восстановлена; облачная связь потеряна и восстановлена Предупреждения; Информация Высокий
9 Все драйверы Запущен; выключен; подключён; недоступен; восстановлен; ошибка настройки События; Предупреждения; Информация; Ошибки в работе Критический
10 Физические устройства Обнаружено; подключено; недоступно; восстановлено; удалено Информация; Предупреждения Критический
11 Каналы устройств Канал не работает; канал восстановлен Ошибки в работе; Информация Высокий
12 Команды устройств Команда отправлена; подтверждена; не подтверждена; аварийная команда не подтверждена События; Ошибки в работе; Критические ошибки Критический
13 Сценарии Запущен; завершён; пропущен; остановлен; завершён с ошибкой События; Информация; Предупреждения; Ошибки в работе Критический
14 Инциденты Открыт; усилен до тревоги; закрыт; повторился Предупреждения; Тревоги; Информация; События Критический

Драйверы и интеграции

№ Драйвер или интеграция Добавить или уточнить сообщения Приоритет
15 Wiren Board Линия подключена; линия недоступна; линия восстановлена; устройство недоступно; устройство восстановлено; ошибка канала устранена Высокий
16 Modbus Порт подключён; порт недоступен; порт занят; нет доступа; устройство недоступно; устройство восстановлено; ошибка настройки канала Высокий
17 Zigbee2MQTT Мост подключён; мост недоступен; добавление разрешено; устройство обнаружено; подключено; удалено; недоступно; восстановлено Высокий
18 Внешние MQTT-подключения Подключено; авторизация отклонена; связь потеряна; восстановлена; команда не доставлена; доставка восстановлена Высокий
19 Пользовательский MQTT-брокер Служба запущена; недоступна; клиент подключён; клиент отключён; клиент восстановил связь Высокий
20 REST и TCP Подключено; связь потеряна; восстановлена; неверная настройка; команда не выполнена; выполнение восстановлено Высокий
21 DMX Выход подключён; выход недоступен; передача восстановлена Средний
22 HomeKit Мост запущен; остановлен; запуск не выполнен; сопряжение добавлено; сопряжение сброшено; конфигурация обновлена Средний
23 Яндекс Алиса Авторизация утрачена; восстановлена; доставка задержана; восстановлена; событие отклонено Средний
24 Russound Подключено; связь потеряна; восстановлена; ошибка обмена Средний
25 1-Wire Датчик добавлен; удалён; недоступен; восстановлен Средний
26 Global Caché Подключено; связь потеряна; восстановлена; команда не доставлена Средний
27 Погода и интернет-медиа Данные устарели; источник недоступен; получение данных восстановлено Средний
28 Основной и резервный интернет Основной канал потерян; резервный канал включён; основной канал восстановлен Высокий

Обновления и состояние системы

№ Раздел Добавить или уточнить сообщения Типы сообщений Приоритет
29 Обновление XIOT Обновление начато; пакет проверен; обновление установлено; применено; не выполнено Информация; Отладка; Ошибки в работе Высокий
30 Приложение проекта Обновление начато; приложение обновлено; обновление отменено; приложение не обновлено Информация; События; Ошибки в работе Высокий
31 Журнал Хранилище почти заполнено; место освобождено; запись недоступна; запись восстановлена Предупреждения; Информация; Ошибки в работе Высокий
32 История измерений История недоступна; история восстановлена Ошибки в работе; Информация Высокий
33 Системное время Часовой пояс изменён; изменение отклонено; системное время существенно скорректировано События; Ошибки в работе; Предупреждения Средний
34 Сетевое подключение Основное подключение изменено; интернет недоступен; интернет восстановлен События; Предупреждения; Информация Высокий
35 Суточная сводка Доступность облака, панелей, драйверов и устройств; число тревог и незавершённых инцидентов Сводки Средний

Единые правила сообщений

№ Доработка Ожидаемый результат Приоритет
36 Для каждого отключения добавить парное восстановление В журнале видны начало, окончание и длительность проблемы Критический
37 Не создавать повтор одного и того же состояния Один период неисправности не превращается в поток одинаковых строк Критический
38 Не считать начальное неизвестное состояние отключением После запуска не появляются ложные предупреждения Критический
39 Краткие разрывы записывать только после подтверждения Журнал не заполняется кратковременными переключениями связи Критический
40 В тексте команды указывать инициатора и причину Понятно, кто и почему изменил состояние устройства Высокий
41 В итоговом сообщении указывать результат команды Видны отправка, подтверждение или отсутствие подтверждения Высокий
42 В сообщении восстановления указывать длительность Можно оценить продолжительность недоступности Высокий
43 При переименовании сохранять понятное имя объекта в старых сообщениях История остаётся однозначной после изменения конфигурации Высокий
44 Не включать секретные данные и содержимое конфигурации в текст Сообщения остаются безопасными для журнала и мессенджеров Критический
45 Отправлять в мессенджеры только «Информация», «Предупреждения» и «Тревоги» «События», «Сводки», «Ошибки в работе», «Критические ошибки» и «Отладка» остаются только локальными Критический
46 Исключить «Сводки» из отправки в мессенджеры Периодические итоги не создают лишние уведомления Критический

Связанные таблицы

Таблица Содержание
Система сообщений XIOT-PLC — полная карта Количество существующих сообщений по устройствам, сценариям и типам
Система сообщений XIOT-PLC — каталог шаблонов Полные тексты существующих сообщений
Системные события в журнале XIOT-PLC Полные тексты предлагаемых системных сообщений