Логические сценарии

Что это, как устроены, как подключать к устройствам и отлаживать

В описании могут быть неточности и ошибки. Пишите замечания в Telegram: Умный Спутник.

Источники: ScenarioTemplate (основной), Элементы управления сценариями, Логические сценарии

Шаблон логического сценария

Введение простыми словами

Логические сценарии — это скрипты на JavaScript (движок Nashorn) и поддерживает только стандарт ES6 (ECMAScript 6), которые добавляют настраиваемую «логику» для выбранных типов устройств. Вы подключаете сценарий к устройству, выбираете триггер (событие), а код сценария реагирует и выполняет действия.

  • Сценарий появляется у подходящих устройств после сохранения и проверки его корректности.
  • Название пользовательского сценария должно отличаться от встроенных/существующих.
  • Срабатывает только от указанного триггера и только для поддерживаемых типов устройств.
  • Кнопка теста редактора не запускает логический сценарий (он зависит от события).

Быстрый старт

  1. Откройте примерную структуру в ScenarioTemplate.
  2. Создайте новый сценарий на его основе: задайте уникальное имя и целевые типы устройств/сервисов.
  3. Определите триггер(ы) сценария (например, изменение характеристики сервиса).
  4. Напишите логику на JavaScript: чтение/запись характеристик, условия, задержки и т.д.
  5. Сохраните. Сценарий автоматически станет доступен в разделе «Логика» подходящих устройств, если корректен.
  6. Подключите сценарий к нужному устройству: Настройки устройства → Логика → выбрать сервис → добавить логику.

Структура логического сценария

Структура приведена строго по README (раздел «Написание сценариев → Логические → Структура сценария») и примеру LogicScenarioTemplate.js.

info = {
  name: "Название сценария",
  description: "Описание сценария",
  version: "1.0",
  author: "@Author",
  onStart: true,
  sourceServices: [HS.Switch],
  sourceCharacteristics: [HC.On],
  options: {},
  variables: {}
}

function trigger(source, value, variables, options, context) {
}

function compute(source, value, variables, options, context) {
}
Объект info
  • name: название сценария.
  • description: описание сценария.
  • version: версия (строка).
  • author: автор сценария.
  • onStart: выполнять при старте (true/false).
  • sourceServices: массив типов сервисов (HS.*). Смотрите «Типы сервисов» в хабе/редакторе.
  • sourceCharacteristics: массив характеристик (HC.*).
  • options: объект опций сценария, доступных в коде.
  • variables: объект переменных сценария, доступных в коде.

Функция trigger(source, value, variables, options, context)

Назначение: Основная функция сценария.

Является главной функцией и точкой входа в сценарии. Вызывается системой после выполнения compute и фактической установки значения.
При включённом onStart в блоке info вызывается при запуске хаба и при сохранении сценария с текущим значением характеристики. Работает ассинхронно.

function trigger(source, value, variables, options, context) {
          // Код сценария
}
  • Вызывается после compute(source, value, variables, options, context).
  • Используется для выполнения основной логики (управление устройствами, записи характеристик и т.п.).
  • Используйте методы API хаба из раздела «Список доступных методов в коде» на вики.
Параметры
  • source: источник события — объект характеристики устройства, изменение которой привело к срабатыванию сценария.
  • value: новое значение характеристики (после применения compute, если оно меняло значение).
  • variables: объект переменных сценария (сохраняется между вызовами; можно читать и изменять).
  • options: объект опций сценария, заданных в info.options и настраиваемых в интерфейсе. Только для чтения.
  • context: контекст вызова события - откуда пришло событие и какой путь привёл к его вызову до сценария.

Функция compute(source, value, variables, options, context)

Назначение: Изменить устанавливаемое значение характеристики.

Вызывается при изменении характеристики. Результат устанавливается в характеристику.

function compute(source, value, variables, options, context) {
          return value;
}
  • Параметры соответствуют параметрам trigger: source, value, variables, options, context.
  • Вызывается первой для каждого события.
  • ВНИМАНИЕ! Функция выполняется синхронно и может замедлять работу хаба или приводить к неожиданному поведению. Применять только при острой необходимости и с особой осторожностью. Не выполнять в ней сложных вычислений или долгих операций.

Доступные методы в коде

Полный список методов и возможностей API логических сценариев смотрите в разделе «Список доступных методов в коде» на вики. Ориентируйтесь на статьи: Логические сценарии и Элементы управления сценарием.

Проверка и отладка

  • Ошибки кода подсвечиваются в редакторе. Некорректный сценарий не появится в списке доступных логик у устройств.
  • При необходимости временно отключайте логику в настройках устройства для проверки различных сценариев поведения.
  • Последовательное выполнение действий в сценарии (если задействовано) может ждать завершения записи значения перед чтением — учитывайте это при проектировании.

Рекомендации

  • Начинайте с простого сценария и одного триггера. Расширяйте постепенно.
  • Всегда проверяйте, не дублирует ли ваш сценарий штатную логику реального устройства.
  • Используйте «Типы сервисов» в хабе/редакторе, чтобы выбрать корректные характеристики и их значения.

Ссылки