Сценарии в Sprut.hub - основные элементы управления

Материал из Sprut.hub Wiki

Для начала, если вы перейдете в раздел Сценариев, который расположен в настройках, то слева вы увидите четыре типа сценариев.

  • Блочные - основные пользовательские сценарии, которые используются больше всего. Единственные, которые имеют визуальную блочную структуру.
  • Логические сценарии - это скрипты, которые могут быть назначены на различные устройства, например датчики движения или другие подобные устройства. Они создаются пока исключительно с помощью кода и требуют знания структуры.
  • Шаблоны - это шаблоны для различных сценариев
  • Глобальные - это сценарии, которые можно вызывать из других сценариев на любом уровне, передавая им определенные данные и получать определенные ответы. Например сценарий для уведомлений через бота в Телеграм - именно глобальный, так как должен вызываться из любого уровня. Тоже создаются пока исключительно с помощью кода и требуют знания структуры.

Обычные блочные сценарии - не требуют программирования и создаются за счет визуального интерфейса.

В логических и глобальных сценариях - используется JavaScript на базе Nashorn. Поэтому для работы с этими видами сценариев - необходимо обладание навыками программирования. При этом эти типы сценариев, обитают в ограниченной "песочнице", в которой доступна работа с сервисами и характеристиками аксессуаров, а также некоторый набор функций, типа HTTP запросов или работы с SSH.

В блочных сценариях тоже есть возможность использовать блоки кода, в которых используется тот же JavaScript.

Так что основными видами сценариев для пользователей - являются классические, визуальные и простые блочные сценарии.

О них и поговорим.

Видео инструкция по базовым элементам управления сценариями

Описание базовых элементов управления сценариями и базовых принципах их работы (с голосовыми комментариями)

Общее окно управления сценариями

Главное окно блочных сценариев, позволяет:

  • отобразить сценарии по комнатам
  • изменить порядок выполнения сценариев
  • загрузить/импортировать шаблон сценария
  • создать новый сценарий
  • посмотреть активность сценариев

Импорт и экспорт сценариев, позволяет делиться ими с другими пользователями.

При экспорте сценария - он обезличивается. Это означает, что даже если вы экспортировали а потом импортировали сценарий на одном и том же хабе - он будет обезличен и вам придется подставлять все аксессуары в сценарий заново

Создание блочного сценария

  • добавить устройства в блоки, при этом можно добавлять и скрытые, а также изменять группировку отображения устройств
  • добавлять устройства в сценарий путем перетаскивания из блока устройств в нужный блок сценария
  • добавлять различные блоки в сценарий
  • удалить сценарий
  • изменить настройки сценария
  • удалить сценарий
  • запустить его для проверки
  • сохранить как шаблон - экспорт шаблона сценария для отправки или сохранения. Экспортированный шаблон, может импортировать любой пользователь Sprut.hub
  • сохранить изображение сценария

Настройки сценария

В настройках можно изменить:

  • выполнение сценария при старте хаба
  • включить или выключить сценарий
  • включить режим последовательного выполнения, который учитывает сортировку сценариев для их запуска, которая настраивается в общем окне управления сценариями

Блоки сценария

На надписи "Если", "Тогда" и "Иначе" - можно нажимать и они открывают такое же меню, как если нажать на обычный "+" внутри блока

У разделов Если и Тогда - различный набор допустимых блоков

В разделе Если, вам доступно добавление следующих блоков:

  • добавить сервис (устройства)
  • добавить дополнительный блок условий (следующий уровень Если)
  • добавить планировщик
  • добавить условие в виде кода
  • добавить глобальный раздел Иначе в сценарий

В разделе Тогда, перечень уже немного другой:

  • добавить сервис (Устройство)
  • добавить дополнительный блок условий
  • добавить задержку
  • добавить очистку задержки
  • добавить запуск дочернего сценария
  • добавить блок кода
  • добавить уведомление в веб интерфейсе
  • добавить глобальный блок Иначе

У раздела Иначе, набор возможных к добавлению блоков похож на набор для раздела Тогда за одним исключением:

  • в этом меню можно удалить раздел Иначе

Внутрь блока задержки, также можно добавить элементы, просто нажав по названию "Задержка"

Что делает значок бесконечности в сценариях

Во всех блочных сценариях, в блоке если есть значок бесконечности. Его отключение - предотвращает повторный запуск сценария если устройства в блоке Если не меняли свое состояние ИЛИ не пересекали порог. Его включение - будет запускать сценарий при любом действии устройств в блоке Если.

Не стоит отключать знак бесконечности для выключателей, лампочек и прочих устройств с двумя состояниями (ВКЛ/ВЫКЛ и подобные)

Для планировщика - бесконечность должна быть включена всегда. Иначе он не будет работать

В указанном примере:

при включенном значке бесконечности

  • выключатель будет выключаться каждый раз, когда ваттметр пришлет показания, которые больше 10 Вт и включаться каждый раз, когда ваттметр будет присылать показания меньше или равно 10 Вт
  • выключатель будет включаться каждый раз, когда ваттметр будет присылать показания меньше или равно 10 Вт

при выключенном значке бесконечности:

  • сценарий сработает только один раз при превышении ваттметром значения в 10 Вт и выключит выключатель
  • сценарий сработает только однажды при получении значения ваттметра меньше или равно 10 Вт и включит выключатель

Так как подобные устройства (ваттметры, датчики температуры, влажности и т.п.) обновляют показания постоянно, если их показания совпадают с условием при каждом обновлении (а у некоторых датчиков это может происходить даже чаще одного раза в секунду), то каждое новое показание будет запускать сценарий при включенной бесконечности.

При выключенной бесконечности, если, например температура, будет всегда выше установленного порога - сценарий выполнит условие только один раз до тех пор, пока температура не пересечет указанный в блоке Если порог в обратную сторону.

Еще несколько особенностей на примерах:

Если бесконечность включена у кнопки но выключена у датчика движения - то сценарий пришлет уведомление только один раз и не будет присылать до тех пор, пока датчик движения (физический) не сменит состояние (относительно того, в котором он сейчас находится).

Например реальный датчик был в состоянии "Нет движения". Сценарий по однократному нажатию кнопки - отработает блок Иначе один раз и больше не будет срабатывать при повторном однократном нажатии кнопки. До тех пор, пока датчик движения не сменит свое состояние на "Есть движение". Потом датчик опять должен будет сменить свое состояние на противоположное, то есть "Нет движения", чтобы сценарий опять сработал.

А если выключить бесконечность еще и у кнопки, то если на нее нажимать однократно много раз - сработает только при первом совпадении. Потом сценарий просто не будет работать, пока на кнопку не нажмут каким либо другим образом (двойной или долгое)