Словарь домена автоматизаций¶
Единый контролируемый словарь: канонический термин ↔ wire/код ↔ UI-лейбл ↔ определение. Снимает путаницу «сценарий/автоматизация/расписание» и «условие/сравнение/выражение».
Канон — «автоматизация». «Сценарий» — исторический алиас (код Scenario*,
scenarios-worker-db.md — легаси-имена; переименование символов — отдельный follow-up).
Канон (RU) |
wire / код |
UI-лейбл |
Определение |
|---|---|---|---|
Автоматизация |
|
«Автоматизация» |
Сущность: |
Триггер |
|
— |
Что запускает вычисление. |
Расписание |
триггер |
«Когда (по времени)» |
Time-триггер (cron/one_time, fixed/solar). НЕ отдельная сущность. |
Предварительный запуск (готовность к времени) |
|
«Предварительный запуск», «Нужно время на подготовку» |
Пользователь задаёт целевое время T ( |
Событие устройства |
триггер |
«Когда (устройство)» |
Триггер по MQTT-сообщению устройства. |
Блок условия |
элемент |
«Если → Тогда» |
Пара |
Условие |
|
«Если» |
Булева формула. Ранее — строка |
Действие |
|
«Тогда» |
Что выполнить. |
Ожидание |
действие |
«Ожидание» |
Блокирует run, пока |
Регистр (exposes) |
|
«Регистр» |
Именованное значение состояния прибора — аналог exposes в zigbee2mqtt ( |
Умение против виртуального регистра |
|
«свой» у виртуального |
Умение объявлено через справочник: типизировано, валидируется по метаданным, видно в панели и Алисе. Виртуальный регистр умением не объявлен — тип берётся из значения. Здесь живут фаза сеанса, счётчик кругов, «сколько парить». Цена названа вслух: словарной валидации у него нет. |
Границы регистра |
|
«Виден» / «Принимает команды» |
Две НЕЗАВИСИМЫЕ границы, обе ставятся руками (у умения подняты, у виртуального опущены). Регулируемая настройка должна приходить снаружи и быть видна, не становясь умением; служебное состояние не обязано быть видно, чтобы им пользовались собственные задачи прибора. Запрещена одна комбинация: принимать запись, не публикуя (422). Граница публикации действует на ПРОВОД (шина, панель, Алиса), а не на движок: свои обработчики и задачи видят все регистры — иначе условие по скрытому регистру читало бы «неизвестно», а у задач это ложь. |
Обработчик записи |
|
«Разложить по регистрам» |
Блок логики группы, привязанный к РЕГИСТРУ: на каждый регистр сообщения свой обработчик, они складываются в цепочку в порядке объявления умений. Регистр без переопределения обслуживает встроенное умолчание — порегистрово. Обработчик видит ВСЁ сообщение, а не только свой ключ, поэтому вправе уступить соседу. Шаги — только команды (пауза и ожидание 422: обработчик отвечает, пока сообщение ждёт). Смешивать «с регистром» и «без» в одной ветке нельзя. |
Применить умолчание |
|
«Применить умолчание» |
Позвать встроенную запись своего регистра по правилам умения. Без него переопределение обработчика — всегда «вместо умолчания» и никогда «вдобавок». Только внутри обработчика. |
Ответить |
|
«Ответить» |
Точка, в которой прибор отвечает состоянием на |
Исход ожидания |
|
«Ожидание → если не дождались» |
Что делает шаг, если статуса так и не было: |
Ветвление внутри цепочки |
|
«Ветвление» (шаг цепочки) |
Развилка, которая проверяется в тот момент, когда цепочка до неё ДОШЛА, — этим она и
отличается от блоков «Если» самой автоматизации: те выбраны один раз, при срабатывании.
После получасовой паузы или ожидания обстановка уже другая. Тело — те же блоки: работает
первый подошедший, блок без условия это «иначе». Не подошёл ни один — шаг ничего не делает.
Пустая ветка законна и означает «в этом случае — ничего»: ветвление последним шагом с
пустой веткой и есть обрыв цепочки по условию, который вернули вместо снятого шага
«Завершение». Внутри нельзя ветвление (глубина одна), регулятор и вопрос; в условии ветки
нельзя операторы перехода. В журнале прогона цепочка видна развёрнутой.
Требует |
Фоновая задача группы |
автоматизация с |
«Фоновые задачи» (карточка группы) |
Цикл: блоки означают «Пока верно», и пока держится хоть одно условие, задача крутит круги.
Перестали держаться все — сеанс кончается веткой остановки и гасит выключатель своей группы.
Заменила снятый примитив «циклический переключатель»: тот умел «одно устройство, два
состояния, круг», задача — произвольную циклограмму, регулятор и осмысленное окончание. Окно
исполнения одно на все задачи — минута, от начала круга: настроек темпа у входа нет, более
редкий цикл держит пауза внутри цепочки. Ветка остановки — |
Задача-взводчик |
фоновая задача, пишущая выключатель ДРУГОЙ группы |
обычные блоки «Если → Тогда» в окне фоновой задачи |
Так выражается «работай, пока держится условие», когда нагрузка должна остаться
переиспользуемой: выключатель самого взводчика значит «я разрешаю», а его блоки включают и
выключают выключатель РАБОЧЕЙ группы. Мёртвая зона пишется блоком с условием и ПУСТЫМ
списком действий («держись, ничего не делай»); показания нет — не держится ни одно условие,
и сеанс кончается сам. Заменил снятое поле |
Исход отказа шага |
|
«Если не вышло» (у шага) |
Что делать с СЕАНСОМ, когда этот шаг не удался: команда не ушла, регистр не записался, длина
паузы не взялась из пустого источника. Закончить и погасить (умолчание) — ветка остановки
отрабатывает, выключатель гаснет, прогон закрывается |
Момент сверки условия |
|
«Проверять: перед кругом / после первого круга» |
У блока задачи. После первого круга — блок держится, пока сам ни разу не отработал: свой
круг он получит обязательно, даже если первый достался соседу. Так пишется «в конце
обязательно продуть». Долг принадлежит блоку, а не сеансу. Дальше блок сверяется как
обычный, поэтому без условия он держится вечно — такое сочетание отвергается (422);
«однажды в начале» пишется условием, которое сам круг и опровергает.
Требует |
Регулятор |
|
«Регулятор» |
Считает выход по измерению и уставке (П/ПИ/ПИД — по тому, какие коэффициенты ненулевые) и
кладёт его в переменную прогона |
Длительность из значения (ШИМ) |
|
«Пауза → Переменная» |
Длина паузы берётся из переменной прогона (выход регулятора) или регистра группы — так выход
становится скважностью медленного ШИМ. Вырожденный сегмент (длина меньше секунды)
пропускается целиком вместе с открывающей его командой; порог |
Длина паузы прямо в секундах |
|
«Пауза → Регистр, как есть» |
Когда в источнике лежат секунды, а не проценты, диапазоны делают одинаковыми:
|
Коридор поддержания |
device-триггер + два |
«Если датчик < низ → ВКЛ» / «> верх → ВЫКЛ» |
Не отдельный примитив, а композиция: одна device-триггерная автоматизация с двумя блоками
( |
Канал сообщения |
|
— |
Транспорт действия |
Узел (условия) |
AST-узел |
— |
группа | сравнение | именованный оператор | exists. |
Группа |
|
И / ИЛИ |
Логическое объединение узлов. |
Оператор |
|
код (display SCREAMING) |
Сравнение/переход. Не переводится. |
Функция |
|
код (display SCREAMING) |
Обёртка операнда-свойства. |
Операнд |
|
— |
Левая/правая часть сравнения. |
Свойство |
|
имя свойства |
Ссылка на сигнал устройства (dotted-path). |
Константа |
JSON |
значение |
Число (typed) или строка. |
Параметр |
определение |
«Параметр» |
Именованное типизированное значение, которым пользователь влияет на автоматизацию, не правя её
логику. Значения спрашиваются при ЗАПУСКЕ ( |
Обязательный параметр |
|
галка «Обязательный», звёздочка у поля |
Значение обязано быть заполнено при запуске (иначе кнопка запуска заблокирована, а сервер ответит 422). Автоматизация, у обязательного параметра которой значения нет, выключается — значения спросят при включении. |
Предустановленное значение |
|
«Предустановленное значение» |
Чем предзаполняется диалог ввода и что подставится, если введённых значений нет.
Необязательно: необязательный параметр можно оставить и без него — тогда значения при
исполнении нет, и в местах вставки подставится пустое, а в сравнениях параметр считается
пустой строкой; шаг, длительность которого он задаёт, пропускается.
Прежнее |
Разовый запуск |
|
«Разовый запуск» (диалог «Расписания») |
Добавляется/взводится из списка автоматизаций, вне редактора; спрашивает время и значения
параметров. Отработавший гаснет ( |
Продолжительность |
|
«Продолжительность» (диалог часы/минуты) |
Мета-формат параметра: целое число секунд, потолок 12 ч; ввод в UI через часы/минуты. Не отдельный тип — number с маркером формата. |
Плейсхолдер свойства |
|
чип свойства |
Текущее значение свойства устройства в строке действия (резолв при исполнении). |
Порог / Гистерезис |
|
— |
Параметры |
wire / display |
— |
— |
wire = хранимый JSON (lowercase); display = отображение (SCREAMING/инфикс). |
Версия контракта |
|
— |
Мажор доменного SemVer (см. Версионирование и расширяемость (SemVer)). |
Действие |
шаг |
«Действие» + подтип |
Один пункт списка с двумя подтипами. «Устройство» — команда прибору из справочника (адрес
считает сервер). «Публикация в топик» — свой MQTT-адрес внутри локации и свой payload; адрес
пишется как есть, префикс дома брокер добавляет сам, шаблоны |
Продление шага |
поле шага |
«Продлевать при повторном срабатывании» |
Что делает срабатывание триггера, пока прогон спит на ЭТОМ шаге: отбрасывается (по умолчанию) либо перевзводит его дедлайн на полную длительность. Продлевает только статус, проходящий «Если» того блока, из которого растёт прогон. Этим выражается «N минут после ПОСЛЕДНЕГО движения»: «движения нет» паузу не продлит. Настройка живёт в диалоге шага, а не у автоматизации: перевзвести можно только дедлайн, а он принадлежит конкретному ожиданию. |
Отмена прогона |
|
«Отменять по событию» в самом шаге |
Событие прерывает идущий прогон: |
Режим сообщения |
|
«Что сделать»: «Сообщить» / «Запросить подтверждение» / «Запросить значения» |
Что шаг «Сообщение» делает с человеком. «Сообщить» — односторонняя телеграмма: кнопок нет, автоматизация не ждёт. Два других режима ЖДУТ ответа: подтверждение спрашивает «да/нет», запрос значений добавляет к нему поля — например, на сколько минут включить. Пока ответа нет, автоматизация занята и повторно не срабатывает, поэтому ждать можно не дольше часа. |
Подписи кнопок |
|
«Кнопка согласия» / «Кнопка отказа» |
Что будет написано на кнопках у жильца. Пустые — подставится текст по умолчанию, причём у кнопки отказа он зависит от того, прерывает отказ прогон или нет: «Прервать автоматизацию» на кнопке, которая ничего не прерывает, вводила бы в заблуждение. |
Таймаут вопроса |
|
«Ждать ответа, минут» + «Если ответа не будет» |
Сколько ждать и что считать молчанием: продолжить прогон (параметры сохраняют прежние значения) или прервать его. Значения по умолчанию нет намеренно — «не дозвонились, значит не открываем ворота» и «не дозвонились, значит греем как обычно» одинаково законны. |
Отказ на вопросе |
|
«Если ответят отказом» |
Что делает вторая кнопка: прерывает прогон целиком или лишь пропускает этот шаг, оставляя остальные действия. Значения по умолчанию нет намеренно — «спросил и всё равно сделал» и «спросил и не сделал» одинаково законны. |
Ответ на вопрос |
ссылка |
подписи кнопок задаёт автор |
Страница из текста вопроса. Токен в ссылке и есть право ответить — авторизации страница не требует, поэтому ссылку не пересылают: тот, у кого она есть, может подтвердить действие или прервать прогон. Отвечает первый: повторный переход ничего не переигрывает. |
Место исполнения |
|
«Исполнять локально» |
Где исполняется автоматизация: в облаке или на локальном сервере (хабе). Ровно одно место в любой момент. Локальная работает без интернета; расписания на хабе не навёрстывают пропущенное время простоя (выключенный хаб = пропуск срабатывания, облако не подстраховывает). См. Локальное исполнение автоматизаций (Zigbee2MQTT). |
Адрес на шине |
|
«Адрес автоматизации» |
Имя, по которому к автоматизации можно обратиться из MQTT. Выдаётся сервером как hex
идентификатора и не выводится из названия: переименование автоматизации не рвёт чужую
подписку. |
Уровень телеметрии |
|
«Что рассказывать на шине» |
Сколько автоматизация сообщает о себе внешним подписчикам, накопительно. Уровень у
КАЖДОЙ автоматизации, а не у дома: шумит конкретная задача, глушить нужно её. Ответ на
прямой запрос состояния ( |
См. также: спецификация языка.