Словарь домена автоматизаций

Единый контролируемый словарь: канонический термин ↔ wire/код ↔ UI-лейбл ↔ определение. Снимает путаницу «сценарий/автоматизация/расписание» и «условие/сравнение/выражение».

Канон — «автоматизация». «Сценарий» — исторический алиас (код Scenario*, scenarios-worker-db.md — легаси-имена; переименование символов — отдельный follow-up).

Канон (RU)

wire / код

UI-лейбл

Определение

Автоматизация

automation

«Автоматизация»

Сущность: name, triggers, condition_blocks, is_active, schema_version.

Триггер

trigger.kind = time | device | manual

Что запускает вычисление.

Расписание

триггер kind:"time" (schedule_type, time_mode)

«Когда (по времени)»

Time-триггер (cron/one_time, fixed/solar). НЕ отдельная сущность.

Опережающий запуск (готовность к времени)

lead_seconds на разовом fixed-триггере

«Готово к … (за N до)»

Пользователь задаёт целевое время T (one_time_at) и длительность подготовки; запуск = clamp(now, T lead_seconds) (менее чем за lead → немедленно). Для процессов с прогревом (баня, тёплый пол).

Событие устройства

триггер kind:"device"

«Когда (устройство)»

Триггер по MQTT-сообщению устройства.

Блок условия

элемент condition_blocks[]

«Если → Тогда»

Пара {condition, then_actions}. Исполняется первый истинный.

Условие

condition (JSON-AST, null = всегда истина)

«Если»

Булева формула. Ранее — строка if_expression.

Действие

then_actions[].type = pause | device_command | message | wait_until

«Тогда»

Что выполнить.

Ожидание состояния

действие type:"wait_until"

«Дождаться, пока …»

Блокирует run, пока condition по свойству целевого устройства (device_id) не станет истинным ЛИБО не истечёт timeout_minutes; send_get (best-effort) провоцирует свежую публикацию статуса. Не бампит schema_version (аддитивный тип действия).

Канал сообщения

channel = email | push | tg | max

Транспорт действия message.

Узел (условия)

AST-узел

группа | сравнение | именованный оператор | exists.

Группа

op = and | or (+``not``)

И / ИЛИ

Логическое объединение узлов.

Оператор

op (символьный =,``< | именованный ``crosses_up,``changed_to``…)

код (display SCREAMING)

Сравнение/переход. Не переводится.

Функция

fn = round | bool | upper | lower

код (display SCREAMING)

Обёртка операнда-свойства.

Операнд

{var} | скаляр | {var, fn} | {arg}

Левая/правая часть сравнения.

Свойство

{"var":"temperature"}

имя свойства

Ссылка на сигнал устройства (dotted-path).

Константа

JSON 24 / "ON"

значение

Число (typed) или строка.

Аргумент

определение automation.arguments[]; ссылка {"arg":"name"} / {{arg:name}}

«Аргумент»

Именованный типизированный параметр (v2). Значения per-schedule + дефолт; типы number/string/boolean/enum/datetime.

Продолжительность

number + constraints.format=duration (max 43200)

«Продолжительность» (диалог часы/минуты)

Мета-формат аргумента: целое число секунд, потолок 12 ч; ввод в UI через часы/минуты. Не отдельный тип — number с маркером формата.

Плейсхолдер свойства

{{prop:path}}

чип свойства

Текущее значение свойства устройства в строке действия (резолв при исполнении).

Порог / Гистерезис

threshold / hysteresis

Параметры crosses_* (детектор фронта).

wire / display

wire = хранимый JSON (lowercase); display = отображение (SCREAMING/инфикс).

Версия контракта

schema_version

Мажор доменного SemVer (см. Версионирование и расширяемость (SemVer)).

См. также: спецификация языка.