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

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

Материал из XIOT Wiki
Добавлен полный план доработки единой системы сообщений и аналитики PLC
 
Английские адреса Wiki: обновление ссылок с сохранением русских подписей
 
(не показаны 4 промежуточные версии этого же участника)
Строка 2: Строка 2:
__TOC__
__TOC__


=Цель=
=Правило отправки в мессенджеры=
 
Создать единую базу событий XIOT-PLC, по которой пользователь, интегратор и аналитический бот смогут восстановить полную картину работы объекта:
 
* какая конфигурация была загружена и применена;
* когда запускался, останавливался и обновлялся контроллер;
* было ли подключение к облаку;
* какие драйверы и устройства были доступны;
* когда подключались и отключались панели;
* кто и почему отправил команду;
* получила ли команда подтверждение;
* какое событие стало причиной работы сценария;
* сколько длилась неисправность и когда система восстановилась;
* какие сообщения ещё не переданы в облако.
 
=Что уже работает=
 
* Все устройства и сценарии используют общий модуль сообщений.
* В редакторе определены уровни «Отладка», «События», «Сводки», «Информация», «Предупреждения», «Тревоги», «Ошибки в работе» и «Критические ошибки».
* Сообщения, кроме отладки, сохраняются в локальном журнале.
* Команды устройств и сценариев умеют показывать отправку, ожидание обратной связи, подтверждение и ошибку ожидания.
* Для аварийных команд крана, защитного реле и сирены используется критическая ошибка.
* Защита от протечки, пожарная сигнализация и охрана разделяют тревогу, итог выполнения и техническую неисправность.
* Драйверы уже публикуют признаки подключения, доступности и ошибок, но эти переходы почти не попадают в общий журнал.
* Панели уже передают heartbeat, комнату, версию приложения и состояние локальной и облачной связи.
* Modbus уже различает состояние порта, устройства и отдельного канала.
* Есть локальная история, фильтры, постраничное чтение и временная шкала сообщений.
 
=Критические пробелы=


{| class="wikitable sortable"
{| class="wikitable sortable"
! Проблема !! Последствие
! Тип сообщения !! Раздел в редакторе !! Записывается в журнал !! Отправляется пользователю в мессенджеры
|-
|-
| В облако передаются не все уровни сообщений || Бот не получает обычные события, ошибки в работе и критические ошибки
| Отладка || Интегратор || Нет || Нет
|-
|-
| При ошибке облачной отправки пакет удаляется || События безвозвратно теряются при отсутствии интернета или недоступности сервера
| События || Диагностика || Да || Нет
|-
|-
| Очередь облачной отправки хранится только в памяти || Перезапуск контроллера удаляет ещё не отправленные события
| Сводки || Сводки || Да || Нет
|-
|-
| В журнале остаётся в основном русский текст || Бот вынужден угадывать объект, причину, старое и новое состояние по формулировке
| Информация || Пользователь || Да || Да
|-
|-
| Причинный контекст не сохраняется в базе || После закрытия онлайн-диагностики теряется цепочка «источник → команда → устройство → подтверждение»
| Предупреждения || Пользователь || Да || Да
|-
|-
| Не сохраняется версия конфигурации и сессия запуска || Нельзя уверенно связать проблему с конкретной загрузкой или перезапуском
| Тревоги || Пользователь || Да || Да
|-
|-
| Имя, тип и комната объекта не фиксируются вместе с событием || После переименования или удаления устройства старая история становится неоднозначной
| Ошибки в работе || Интегратор || Да || Нет
|-
|-
| Переходы драйверов остаются в служебном логе и тегах || Пользовательский журнал и бот не видят состояние инфраструктуры
| Критические ошибки || Интегратор || Да || Нет
|-
| Нет единого правила задержки и восстановления || Прямое добавление сообщений во все драйверы создаст поток ложных отключений и переподключений
|-
| Завершение процесса не гарантирует запись очереди || Сообщения перед перезапуском или остановкой могут потеряться
|-
| Горячее создание объекта определяется неверно || Новый объект может ошибочно отмечаться как обновлённый, а событие создания не появляется
|-
| Настройка видимости уровней сохраняется неполно || После перезапуска фильтры журнала могут не соответствовать выбору пользователя
|}
|}


=Целевая модель события=
=Первая очередь=
 
Русский текст остаётся основным представлением для человека, но каждое сообщение получает сохраняемые аналитические данные.


{| class="wikitable sortable"
{| class="wikitable sortable" style="width:100%"
! Данные !! Назначение
! № !! Раздел !! Добавить или уточнить сообщения !! Типы сообщений !! Приоритет
|-
|-
| Уникальный идентификатор события || Защита от дублей при повторной облачной доставке
| 1 || Контроллер || Запущен; запущен частично; не запущен; запрошен перезапуск; остановлен; предыдущая работа завершилась аварийно; повторные аварийные перезапуски; работа восстановлена || События; Ошибки в работе; Критические ошибки || Критический
|-
|-
| Машинный код события || Стабильное понимание смысла независимо от русского текста
| 2 || Конфигурация проекта || Загрузка начата; конфигурация принята; применена; не изменилась; загрузка прервана; отклонена; новая конфигурация не применена; рабочая конфигурация отсутствует || События; Ошибки в работе; Критические ошибки || Критический
|-
|-
| Уровень сообщения || Отображение и уведомления
| 3 || Устройства в конфигурации || Устройство добавлено; изменено; удалено; изменение не выполнено || События; Ошибки в работе || Критический
|-
|-
| Вид события || Команда, состояние, подключение, конфигурация, инцидент, сводка
| 4 || Сценарии в конфигурации || Сценарий добавлен; изменён; удалён; изменение не выполнено || События; Ошибки в работе || Критический
|-
|-
| Состояние || Открыто, активно, восстановлено, завершено, отклонено
| 5 || Облако контроллера || Контроллер подключён; связь потеряна; связь восстановлена; подключение выключено; подключение отклонено || События; Ошибки в работе || Критический
|-
|-
| Время возникновения и время получения || Правильный порядок при задержанной доставке
| 6 || Авторизация облака || Авторизация утрачена; восстановлена; сброшена; отклонена || События; Ошибки в работе || Критический
|-
|-
| Контроллер и сессия запуска || Связь событий с конкретным запуском PLC
| 7 || Панели || Новая панель; панель подключена; отключена; восстановлена; перенесена; удалена; приложение панели обновлено || События; Ошибки в работе || Критический
|-
|-
| Версия PLC и версия конфигурации || Поиск проблем после обновления
| 8 || Каналы связи панели || Локальная связь потеряна и восстановлена; облачная связь потеряна и восстановлена || События; Ошибки в работе || Высокий
|-
|-
| Тип, постоянный адрес и сохранённое имя объекта || Надёжная история после переименования или удаления
| 9 || Все драйверы || Запущен; выключен; подключён; недоступен; восстановлен; ошибка настройки || События; Ошибки в работе; Критические ошибки для обязательной защиты || Критический
|-
|-
| Этаж и комната || Привязка события к месту
| 10 || Физические устройства || Обнаружено; подключено; недоступно; восстановлено; удалено || События; Ошибки в работе || Критический
|-
|-
| Предыдущее и новое состояние || Анализ перехода без разбора текста
| 11 || Каналы устройств || Канал не работает; канал восстановлен || Ошибки в работе; События || Высокий
|-
|-
| Инициатор и причина || Кто вызвал изменение и почему
| 12 || Команды устройств || Команда отправлена; подтверждена; не подтверждена; аварийная команда не подтверждена || События; Ошибки в работе; Критические ошибки || Критический
|-
|-
| Действие и результат || Что система пыталась выполнить и чем это закончилось
| 13 || Сценарии || Запущен; завершён; пропущен; остановлен; завершён с ошибкой || События; Ошибки в работе || Критический
|-
|-
| Связь с исходным событием || Построение цепочки команды или сценария
| 14 || Пользовательские состояния || Понятное предупреждение о недоступной функции; сообщение об опасности; сообщение о восстановлении || Предупреждения; Тревоги; Информация || Критический
|-
| Номер инцидента || Объединение отключения, повторов и восстановления
|-
| Длительность и число повторов || Оценка устойчивости системы
|-
| Статус облачной доставки || Контроль полноты данных бота
|}
|}


Секреты, токены, пароли, полный текст конфигурации и персональные данные в аналитические поля не записываются.
=Исправленные типы системных сообщений=
 
=Единый каталог событий=
 
Для каждого машинного кода необходимо один раз определить:
 
* русский шаблон;
* допустимый уровень;
* категорию;
* обязательные аналитические поля;
* правило открытия и закрытия инцидента;
* задержку подтверждения;
* правило повторов;
* возможность передачи в облако;
* срок хранения;
* допустимые источники события.


Первый набор категорий:
{| class="wikitable sortable" style="width:100%"
 
! Сообщение !! Было !! Стало !! Получатель
{| class="wikitable sortable"
! Категория !! Примеры
|-
| Контроллер || запуск, остановка, аварийное завершение, обновление
|-
| Конфигурация || загрузка начата, принята, применена, отклонена, не изменилась
|-
| Облако || подключение, потеря связи, восстановление, ошибка авторизации
|-
| Драйвер || запущен, выключен, недоступен, восстановлен, ошибка настройки
|-
|-
| Устройство || обнаружено, добавлено, недоступно, восстановлено, удалено
| Служба приложения не запущена: адрес уже используется || Предупреждения || Ошибки в работе || Интегратор
|-
|-
| Панель || обнаружена, подключена, отключена, перенесена, удалена, обновлена
| Веб-интерфейс не запущен: адрес уже используется || Предупреждения || Ошибки в работе || Интегратор
|-
|-
| Команда || отправлена, подтверждена, повторена, не подтверждена
| Служба управления не запущена: адрес уже используется || Предупреждения || Ошибки в работе || Интегратор
|-
|-
| Сценарий || запущен, завершён, пропущен, остановлен, завершён с ошибкой
| Служба управления недоступна || Предупреждения || Ошибки в работе || Интегратор
|-
|-
| Инцидент || открыт, изменён, закрыт, повторился
| Служба авторизации не запущена: адрес уже используется || Предупреждения || Ошибки в работе || Интегратор
|-
| Хранилище || почти заполнено, ошибка записи, восстановлено, очистка
|-
| Сеть и время || изменился маршрут, нет сети, сеть восстановлена, скорректировано время
|-
| Авторизация || контроллер привязан, авторизация истекла, привязка сброшена
|}
|}


=Архитектурные доработки=
=Драйверы и интеграции=


==Основа — обязательный этап==
{| class="wikitable sortable" style="width:100%"
 
! № !! Драйвер или интеграция !! Добавить или уточнить сообщения !! Типы сообщений !! Приоритет
{| class="wikitable sortable"
! № !! Доработка !! Результат !! Приоритет
|-
| 1 || Утвердить единый каталог машинных кодов событий || Один смысл не создаётся под разными текстами в разных модулях || Критический
|-
| 2 || Разделить уровень, вид и состояние события || Тревожность не смешивается с назначением сообщения || Критический
|-
| 3 || Добавить новую таблицу аналитических событий с безопасной миграцией || Старый журнал продолжает работать, новые события получают полную структуру || Критический
|-
| 4 || Оставить один компонент, управляющий схемой базы || Исключаются конфликтующие создания и миграции таблиц || Критический
|-
| 5 || Сохранять нормализованную цепочку причины и действия || Бот видит инициатора, причину, маршрут и результат после факта || Критический
|-
| 6 || Сохранять снимок названия, типа и комнаты объекта || История не ломается после изменения конфигурации || Высокий
|-
|-
| 7 || Добавить идентификатор запуска и версию конфигурации || Все события можно привязать к перезапуску и загрузке || Критический
| 15 || Wiren Board || Линия подключена; линия недоступна; линия восстановлена; устройство недоступно; устройство восстановлено; ошибка канала устранена || События; Ошибки в работе || Высокий
|-
|-
| 8 || Ввести последовательный номер события внутри запуска || События с одинаковым временем имеют однозначный порядок || Высокий
| 16 || Modbus || Порт подключён; порт недоступен; порт занят; нет доступа; устройство недоступно; устройство восстановлено; ошибка настройки канала || События; Ошибки в работе || Высокий
|-
|-
| 9 || Сохранить старый формат ответа для совместимости || Действующие панели и редактор продолжают работать во время перехода || Критический
| 17 || Zigbee2MQTT || Мост подключён; мост недоступен; добавление разрешено; устройство обнаружено; подключено; удалено; недоступно; восстановлено || События; Ошибки в работе || Высокий
|-
|-
| 10 || Исправить сохранение пользовательских фильтров уровней || Настройки журнала переживают перезапуск || Средний
| 18 || Внешние MQTT-подключения || Подключено; авторизация отклонена; связь потеряна; восстановлена; команда не доставлена; доставка восстановлена || События; Ошибки в работе || Высокий
|}
 
==Надёжность локальной записи и облака==
 
{| class="wikitable sortable"
! № !! Доработка !! Результат !! Приоритет
|-
|-
| 11 || Заменить память очереди записи на постоянную очередь || События не теряются при перезапуске или временной ошибке базы || Критический
| 19 || Пользовательский MQTT-брокер || Служба запущена; недоступна; клиент подключён; клиент отключён; клиент восстановил связь || События; Ошибки в работе || Высокий
|-
|-
| 12 || Создать постоянную очередь облачной доставки || Неотправленные события переживают отсутствие сети и рестарт || Критический
| 20 || REST и TCP || Подключено; связь потеряна; восстановлена; неверная настройка; команда не выполнена; выполнение восстановлено || События; Ошибки в работе || Высокий
|-
|-
| 13 || Передавать в облако все сохраняемые уровни || Бот получает события, ошибки в работе и критические ошибки || Критический
| 21 || DMX || Выход подключён; выход недоступен; передача восстановлена || События; Ошибки в работе || Средний
|-
|-
| 14 || Не удалять пакет при ошибке отправки || Повторная доставка выполняется после восстановления связи || Критический
| 22 || HomeKit || Мост запущен; остановлен; запуск не выполнен; сопряжение добавлено; сопряжение сброшено; конфигурация обновлена || События; Ошибки в работе || Средний
|-
|-
| 15 || Подтверждать облачную доставку по уникальному идентификатору || Повтор не создаёт дубль на сервере || Критический
| 23 || Яндекс Алиса || Авторизация утрачена; восстановлена; доставка задержана; восстановлена; событие отклонено || События; Ошибки в работе || Средний
|-
|-
| 16 || Добавить нарастающие интервалы повторной отправки || Недоступное облако не создаёт постоянную нагрузку || Высокий
| 24 || Russound || Подключено; связь потеряна; восстановлена; ошибка обмена || События; Ошибки в работе || Средний
|-
|-
| 17 || Ограничить очередь по классу и возрасту, а не простым обрезанием || Критические и ещё не доставленные события не вытесняются обычными || Высокий
| 25 || 1-Wire || Датчик добавлен; удалён; недоступен; восстановлен || События; Ошибки в работе || Средний
|-
|-
| 18 || Добавить состояние самой доставки || Видны размер очереди, возраст старейшего события и задержка облака || Высокий
| 26 || Global Caché || Подключено; связь потеряна; восстановлена; команда не доставлена || События; Ошибки в работе || Средний
|-
|-
| 19 || Гарантированно завершать запись перед штатной остановкой || Последнее событие и причина перезапуска не теряются || Критический
| 27 || Погода и интернет-медиа || Данные устарели; источник недоступен; получение данных восстановлено || События; Ошибки в работе || Средний
|-
|-
| 20 || Передавать события между отдельными процессами через постоянную очередь || Обновлятор и вспомогательные службы попадают в общий журнал || Высокий
| 28 || Основной и резервный интернет || Основной канал потерян; резервный канал включён; основной канал восстановлен || События; Ошибки в работе || Высокий
|}
|}


==Единый наблюдатель состояния==
=Обновления и состояние системы=


{| class="wikitable sortable"
{| class="wikitable sortable" style="width:100%"
! № !! Доработка !! Результат !! Приоритет
! № !! Раздел !! Добавить или уточнить сообщения !! Типы сообщений !! Приоритет и состояние
|-
| 21 || Добавить единый наблюдатель системных переходов || Драйверы используют одинаковые формулировки и правила || Критический
|-
| 22 || Не создавать отключение до получения первого достоверного состояния || Стартовые значения не выглядят как аварии || Критический
|-
|-
| 23 || Добавить задержку подтверждения отключения || Короткий сетевой дребезг не засоряет журнал || Критический
| 29 || Обновление XIOT || Обновление начато; пакет проверен; обновление установлено; применено; не выполнено || События; Отладка; Ошибки в работе || Высокий
|-
|-
| 24 || Подавлять повтор одного состояния || На один период недоступности создаётся одно основное сообщение || Критический
| 30 || Приложение проекта || Обновление начато; приложение обновлено; обновление отменено; приложение не обновлено || События; Ошибки в работе || Высокий
|-
|-
| 25 || Создавать парное сообщение о восстановлении || Каждый зафиксированный разрыв получает завершение и длительность || Критический
| 31 || Журнал || Хранилище почти заполнено; место освобождено; запись недоступна; запись восстановлена || События; Ошибки в работе; Критические ошибки || Высокий
|-
|-
| 26 || Различать штатную остановку и неисправность || Перезапуск драйвера при применении конфигурации не считается аварией || Высокий
| 32 || История измерений || История недоступна; история восстановлена || Ошибки в работе; События || Высокий
|-
|-
| 27 || Агрегировать повторные ошибки || Вместо сотен строк хранится число повторов и последняя причина || Высокий
| 33 || Системное время || Часовой пояс изменён; системное время скорректировано; изменение часового пояса отклонено; синхронизация времени недоступна || События; Ошибки в работе || Средний
|-
|-
| 28 || Не наблюдать собственные теги журнала || Исключается цикл создания сообщений || Критический
| 34 || Сетевое подключение || Основное подключение изменено; интернет недоступен; интернет восстановлен || События; Ошибки в работе || Высокий
|-
|-
| 29 || Сохранять открытые инциденты между перезапусками || Восстановление после рестарта закрывает исходную неисправность || Высокий
| 35 || Сводки устройств и сценариев || Комната — средние, минимальные и максимальные показатели; тёплый пол — время нагрева и неисправности; антиобледенение — время работы и ошибок; реле давления воды — давление, работа реле и подтверждения команд; энергоменеджмент — ежедневное или ежемесячное потребление; для «Циркадных ритмов» сводку не формировать || Сводки || Средний; реализовано
|}
|}


=Системные источники сообщений=
=Единые правила сообщений=


==Контроллер и конфигурация==
{| class="wikitable sortable" style="width:100%"
 
! № !! Доработка !! Ожидаемый результат !! Приоритет и состояние
{| class="wikitable sortable"
! № !! Доработка !! Сообщения
|-
|-
| 30 || Жизненный цикл контроллера || Запущен; планово останавливается; предыдущая работа завершилась аварийно; восстановлен после перезапуска
| 36 || Для каждого отключения добавить парное восстановление || В журнале видны начало, окончание и длительность проблемы || Критический
|-
|-
| 31 || Причина перезапуска || Применение конфигурации; обновление; команда интегратора; восстановление службы; неизвестная причина
| 37 || Не создавать повтор одного и того же состояния || Один период неисправности не превращается в поток одинаковых строк || Критический
|-
|-
| 32 || Загрузка конфигурации || Загрузка начата; конфигурация принята; конфигурация не изменилась; загрузка отклонена
| 38 || Не считать начальное неизвестное состояние отключением || После запуска не появляются ложные предупреждения || Критический
|-
|-
| 33 || Фактическое применение конфигурации || Конфигурация применена; количество устройств и сценариев; версия конфигурации
| 39 || Краткие разрывы записывать только после подтверждения || Журнал не заполняется кратковременными переключениями связи || Критический
|-
|-
| 34 || Сравнение конфигураций || Какие устройства и сценарии добавлены, изменены и удалены
| 40 || В тексте команды указывать инициатора и причину || Понятно, кто и почему изменил состояние устройства || Высокий
|-
|-
| 35 || Горячее обновление объектов || Устройство или сценарий создан, обновлён, удалён; ошибка обновления
| 41 || В итоговом сообщении указывать результат команды || Видны отправка, подтверждение или отсутствие подтверждения || Высокий
|-
|-
| 36 || Исправить определение нового объекта || Событие создания действительно отличается от события обновления
| 42 || В сообщении восстановления указывать длительность || Можно оценить продолжительность недоступности || Высокий
|}
 
Сообщение «конфигурация применена» создаётся после успешного запуска с новым вариантом, а не только после записи файла. Ожидающий результат должен переживать перезапуск.
 
==Облако контроллера и внутренняя шина==
 
{| class="wikitable sortable"
! № !! Доработка !! Сообщения и правила
|-
|-
| 37 || Подключение контроллера к облаку || Подключён; связь потеряна; восстановлена с длительностью
| 43 || При переименовании сохранять понятное имя объекта в старых сообщениях || История остаётся однозначной после изменения конфигурации || Высокий
|-
|-
| 38 || Авторизация облака || Нет авторизации; срок истёк; авторизация отклонена; авторизация восстановлена
| 44 || Не включать секретные данные и содержимое конфигурации в текст || Сообщения остаются безопасными для журнала и мессенджеров || Критический
|-
|-
| 39 || Подписка облачного соединения || Подписка не подтверждена после исчерпания повторов; восстановлена
| 45 || Отправлять пользователю в мессенджеры только «Информация», «Предупреждения» и «Тревоги» || «События» остаются в диагностике, «Ошибки в работе» и «Критические ошибки» — в канале интегратора || Критический; реализовано
|-
|-
| 40 || Сертификат облака || Не удалось получить или проверить сертификат; проверка сертификата выключена
| 46 || Исключить «Сводки» из отправки в мессенджеры || Периодические итоги не создают лишние уведомления || Критический; реализовано
|-
|-
| 41 || Состояние облачной доставки журнала || Доставка задерживается; очередь переполнена; доставка восстановлена
| 47 || Не использовать «Предупреждения» для технических ошибок контроллера || Все жёстко заданные источники проверены; технические ошибки попадают в раздел «Интегратор» и не отправляются пользователю || Критический; реализовано
|-
|-
| 42 || Внутренняя шина сообщений PLC || Недоступна; перезапускается; восстановлена с длительностью
| 48 || При влиянии технической ошибки на пользователя создавать отдельное пользовательское сообщение || Пользователь получает понятное последствие без адресов, кодов и технических причин; интегратор получает «Ошибки в работе» или «Критические ошибки» || Критический
|}
 
Факт подключения к облаку следует считать подтверждённым только после успешной подписки, а не сразу после открытия сетевого соединения.
 
==Панели управления==
 
{| 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 || Погода и интернет-медиа || Данные устарели; источник недоступен после нескольких попыток; обновление восстановлено
| 49 || Не преобразовывать «Ошибки в работе» и «Критические ошибки» в «Тревоги» || Технические ошибки остаются в разделе интегратора и не появляются у пользователя как опасность объекта || Критический
|-
| 65 || Маршрутизация интернета || Основной канал потерян; включён резервный; основной восстановлен; убраны дубли технических строк
|}
|}


Неактивные или не подключённые к текущему запуску драйверы не включаются в обязательную базу до их фактической активации.
=Связанные таблицы=
 
==Физические устройства==


{| class="wikitable sortable"
{| class="wikitable"
! № !! Доработка !! Правило
! Таблица !! Содержание
|-
| 66 || Разделить доступность драйвера и устройства || Работающий порт не означает, что каждое устройство отвечает
|-
| 67 || Добавить обнаружение и подключение нового оборудования || Записывать только подтверждённое обнаружение или завершённое добавление
|-
| 68 || Добавить длительную недоступность устройства || Использовать правила конкретного протокола, а не один общий таймаут
|-
|-
| 69 || Добавить восстановление устройства || Указывать длительность и число неудачных проверок
| [[Xiot-plc-message-system-map|Система сообщений XIOT-PLC — полная карта]] || Количество существующих сообщений по устройствам, сценариям и типам
|-
|-
| 70 || Агрегировать ошибки каналов || Не создавать отдельный поток для каждого регистра или контрола
| [[Xiot-plc-message-templates|Система сообщений XIOT-PLC — каталог шаблонов]] || Полные тексты существующих сообщений
|-
|-
| 71 || Сохранять последний успешный обмен || Бот понимает свежесть данных устройства
| [[Xiot-plc-system-log-events|Системные события в журнале XIOT-PLC]] || Полные тексты предлагаемых системных сообщений
|}
|}


=Команды, сценарии и инциденты=
[[Category:XIOT-PLC]][[Category:Сообщения]][[Category:Планы доработок]]
 
{{DEFAULTSORT:План доработки системы сообщений XIOT-PLC}}
{| class="wikitable sortable"
! № !! Доработка !! Результат
|-
| 72 || Присваивать одной команде единый идентификатор || Отправка, повтор, подтверждение и таймаут образуют одну цепочку
|-
| 73 || Связывать запуск сценария с исходным событием || Видно, какой датчик или пользователь запустил сценарий
|-
| 74 || Добавить итог сценария || Завершён, пропущен, остановлен или завершён с ошибкой
|-
| 75 || Не писать каждое промежуточное действие в историю || Подробные шаги остаются в отладке
|-
| 76 || Открывать инцидент при устойчивой проблеме || Все повторы и восстановление объединяются одной карточкой
|-
| 77 || Закрывать инцидент только парным восстановлением || Отсутствие новых ошибок не считается восстановлением
|-
| 78 || Объединять зависимые отказы || Потеря внутренней шины объясняет одновременное отключение нескольких драйверов
|-
| 79 || Формировать суточную сводку здоровья объекта || Доступность облака, драйверов, панелей, устройств и число инцидентов
|}
 
=Хранение и обслуживание=
 
{| class="wikitable sortable"
! № !! Доработка !! Результат
|-
| 80 || Разные сроки хранения по классу события || Частая диагностика не вытесняет конфигурацию и аварии
|-
| 81 || Не удалять открытые, критические и неотправленные события || Сохраняется расследуемая информация
|-
| 82 || Хранить долгие суточные итоги после удаления подробностей || Аналитика доступности сохраняется при ограниченном месте
|-
| 83 || Выполнять очистку небольшими фоновыми пакетами || Запись новых событий не блокируется
|-
| 84 || Выполнять полное уплотнение базы по расписанию || Обслуживание не запускается после каждого удаления
|-
| 85 || Сообщать о заполнении и ошибках записи журнала || Система наблюдает за собственной аналитикой
|-
| 86 || Связать журнал с историей измерений по времени и объекту || Бот может запросить телеметрию вокруг инцидента без объединения двух баз
|}
 
Рекомендуемые сроки:
 
* подробная отладка — 7–30 дней, если будет включено её сохранение;
* частые события — 90–180 дней;
* команды, системные переходы и обычные инциденты — 12–24 месяца;
* конфигурация, обновления, безопасность и аварии — 3–5 лет в облаке;
* суточные итоги доступности — дольше подробных событий.
 
=Доступ для аналитического бота=
 
{| class="wikitable sortable"
! № !! Доработка !! Возможности
|-
| 87 || Единый защищённый API событий || Период, уровень, категория, код, объект, драйвер, инцидент, конфигурация
|-
| 88 || Надёжная постраничная навигация || Однозначный курсор по времени и идентификатору события
|-
| 89 || API открытых и закрытых инцидентов || Причина, длительность, связанные объекты, восстановление
|-
| 90 || API сводок || Доступность, число отказов, среднее время восстановления, частота неподтверждённых команд
|-
| 91 || API здоровья журнала || Размер базы, длина очереди, старейшее неотправленное событие, задержка облака
|-
| 92 || Поток новых событий || Один формат для истории и событий реального времени
|-
| 93 || Версия формата ответа || Бот и интерфейсы безопасно переживают развитие схемы
|}
 
=Интерфейс журнала=
 
{| class="wikitable sortable"
! № !! Доработка
|-
| 94 || Добавить категории «Система», «Подключения», «Устройства», «Сценарии», «Безопасность», «Обновления»
|-
| 95 || Показывать все уровни сообщений с русскими названиями редактора
|-
| 96 || Добавить отдельный фильтр сводок, событий, предупреждений и инцидентов
|-
| 97 || Показывать длительность отключения и признак восстановления
|-
| 98 || Открывать цепочку исходного события, команд и подтверждений
|-
| 99 || Показывать действующую версию конфигурации и запуск контроллера
|-
| 100 || Отображать задержку облачной доставки без смешивания её с событиями объекта
|}
 
=Обновления, сеть и состояние самого PLC=
 
{| class="wikitable sortable"
! № !! Доработка !! Результат
|-
| 101 || Передавать результат обновления XIOT через постоянную очередь || Отдельный процесс обновления попадает в единый журнал
|-
| 102 || Проверять новую версию после перезапуска || Успех обновления подтверждает уже запущенный контроллер, а не установщик
|-
| 103 || Создавать один итог на каждую операцию обновления || Проценты загрузки остаются в окне обновления, журнал получает запрос, установку, успех или ошибку
|-
| 104 || Обновлять пользовательское приложение через промежуточный каталог || Действующее приложение не удаляется до успешной загрузки и проверки нового архива
|-
| 105 || Ограничить повторы загрузки приложения || После исчерпания попыток создаётся одна итоговая ошибка и открытый инцидент
|-
| 106 || Разделить сетевой интерфейс, основной маршрут, доступ в интернет и облако || Одна неисправность не маскируется другим общим признаком «нет связи»
|-
| 107 || Убрать двойные сообщения при переключении основного и резервного интернета || Один переход создаёт одно событие
|-
| 108 || Записывать успешную смену часового пояса и отказ операции || Известно, почему изменилось отображаемое время
|-
| 109 || Обнаруживать существенный скачок системных часов || Аналитика учитывает нарушение временного порядка
|-
| 110 || Контролировать свободное место, запись журнала, историю и постоянные настройки || Проблема хранения видна до потери данных
|-
| 111 || Сообщать об ошибке базы через резервную постоянную очередь || Неисправный журнал способен сообщить о собственной неисправности после восстановления
|-
| 112 || Формировать итог готовности запуска || Указывается число запущенных и не запущенных драйверов, устройств и сценариев
|-
| 113 || Различать готовый и частично готовый запуск || Общая строка «контроллер запущен» не скрывает ошибки отдельных компонентов
|-
| 114 || Записывать таймаут незавершённой загрузки конфигурации || Бот видит брошенную загрузку, если были приняты части данных
|-
| 115 || Не считать отсутствие авторизации ошибкой непривязанного контроллера || Ошибка появляется только при потере ранее действовавшей авторизации или при отклонении входа
|}
 
=Правила защиты от потока сообщений=
 
* Начальное неизвестное состояние не считается отключением.
* Отключение подтверждается таймаутом или несколькими одинаковыми ошибками.
* Повтор одного состояния увеличивает счётчик, но не создаёт новую строку.
* Восстановление создаётся только после ранее записанной неисправности.
* В сообщении о восстановлении указывается длительность.
* Штатное выключение при обновлении конфигурации не считается аварией.
* Ошибки нескольких каналов одного устройства агрегируются.
* Каждая попытка сетевого повтора остаётся в отладке, а не в истории.
* Heartbeat и успешные опросы не сохраняются как отдельные события.
* Для батарейных Zigbee-устройств используются признаки доступности протокола, а не короткий общий таймаут.
* DMX сообщает о доступности выходного порта, но не утверждает доступность светильника без обратной связи.
 
=Тесты=
 
{| class="wikitable sortable"
! Группа !! Обязательные проверки
|-
| Миграция || Старая база обновляется без потери истории; повторная миграция безопасна
|-
| Порядок событий || Несколько событий в одну миллисекунду читаются без пропусков и дублей
|-
| Перезапуск || Ожидающая конфигурация, причина рестарта, открытые инциденты и облачная очередь сохраняются
|-
| Аварийное завершение || Новый запуск определяет незакрытую предыдущую сессию
|-
| Облако недоступно || События остаются локально и отправляются после восстановления
|-
| Повторная доставка || Сервер не создаёт дубль одного события
|-
| Поток ошибок || Тысячи одинаковых переходов превращаются в один инцидент со счётчиком
|-
| Дребезг связи || Короткий разрыв до таймаута не попадает в историю
|-
| Восстановление || У каждого записанного разрыва есть парное закрытие и длительность
|-
| Конфигурация || Различаются принятая и фактически применённая конфигурация
|-
| Драйверы || Для каждого драйвера проверяются подключение, отключение, восстановление и штатная остановка
|-
| Хранение || Низкоприоритетные записи удаляются раньше критических, открытых и неотправленных
|-
| Безопасность || Токены, пароли и полный конфиг не попадают в базу и облако
|-
| Совместимость || Старый редактор и панели продолжают читать журнал
|}
 
=Этапы внедрения=
 
{| 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:Планы доработок]]

Текущая версия от 22:19, 2 октября 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 Исключить «Сводки» из отправки в мессенджеры Периодические итоги не создают лишние уведомления Критический; реализовано
47 Не использовать «Предупреждения» для технических ошибок контроллера Все жёстко заданные источники проверены; технические ошибки попадают в раздел «Интегратор» и не отправляются пользователю Критический; реализовано
48 При влиянии технической ошибки на пользователя создавать отдельное пользовательское сообщение Пользователь получает понятное последствие без адресов, кодов и технических причин; интегратор получает «Ошибки в работе» или «Критические ошибки» Критический
49 Не преобразовывать «Ошибки в работе» и «Критические ошибки» в «Тревоги» Технические ошибки остаются в разделе интегратора и не появляются у пользователя как опасность объекта Критический

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

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