Сценарии

Расположение раздела: Панель управления → Объекты → Сценарии

Сценарий – это программа, которая исполняет заданную последовательность действий. В разделе Сценарии можно создать любое количество подобных программ и, для удобства организации, привязать их к определённым категориям.

Обязательными свойствами любого сценария являются Название и Код.

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

Варианты программирования сценария

Для программирования сценариев существует несколько способов, которые устанавливаются путём выбора опции “Использовать для программирования”. Обратите внимание, что описанные ниже варианты программирования, могут применяться не только в сценариях, но и в других частях системы, позволяющих задавать код (например, методы объектов).

Код

“Классический” способ программирования – написание программы с использованием языка программирования. Основным языком программирования, используемом в проекте, является язык PHP (на нём же написана большая часть кода проекта). Т.е. можно использовать встроенный редактор кода для написания полноценной программы, задействовав все имеющиеся в PHP функции и операторы, а так же используя дополнительный набор функций, который предоставляется проектом MajorDoMo (см. раздел Встроенные PHP функции).

Пример PHP-кода сценария:

$weather = "Сегодня ожидается ".str_replace('°',' ',getGlobal('weatherToday'));
$weather .= ". Завтра ".str_replace('°',' ',getGlobal('weatherTomorrow'));
$weather .= ". Сейчас на улице ".getGlobal('TempOutside').'.';
$weather = str_replace('°','',$weather);
say($weather,2);

Кроме языка программирования PHP, код также может быть написан с использованием языка программирования Python, поддержка которого также реализована в системе (см. раздел Поддержка Python)

Blockly

При выборе опции Blockly появляется доступ к визуальной среде программирования, где программа создаётся путём перетаскивания блоков, как в детском конструкторе Лего. В левой части интерфейса находятся категории, нажав на которую появляется список блоков, любой из которых можно добавить в программу, перетащив в основную рабочую область.

Пример программы на Blockly:

Важно отметить, что программа на Blockly в итоге представляет собой всё тот же PHP-код и переключение в опцию программирования Код сохранит программу на Blockly, но покажет её именно в виде кода.

Пример представление программы выше в виде кода:

function length($value) {
  if (is_string($value)) {
    return strlen($value);
  } else {
    return count($value);
  }
}

if (length('123') > 2) {
  say('Привет', 2);
  callMethod("Dimmer11.turnOn");
}

Устройства

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

Пример:

Способы вызова сценария

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

Запуск кодом

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

runScript('MyScript'); // простой запуск
runScript('MyScript',array('param1'=>123, 'param2'=>'Test')); // запуск с передачей параметров

Переданные параметры доступны внутри кода MyScript как массив $params, т.е. их можно использовать в таком виде:

if ($params['param1']===123) { // проверка условия 
 say("Значение параметра ".$params['param2']); // часть кода
}

Запуск по времени

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

Пример расписания:

Запуск при изменении свойства

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

В данном примере сценарий начинается с проверки текущего времени:

Система автоматически связала сценарий со свойством ClockChime.time и, в случае если выбран автоматически запуск, сценарий будет исполнен каждый раз, когда изменяется указанное свойство:

Запуск как “метода”

Во многих раздела системы существует возможность “привязать” определённое событие к сценарию или методу объекта. В тех случаях, где есть привязка только к методу объекта, можно использовать “виртуальный” объект AllScripts, у которого в качестве методов имеются все созданные сценарии.

Запуск по ссылке

Любой сценарий можно так же исполнить прямым открытием ссылки вида:

http://IP_адрес_сервера/objects/?script=devicesTest

Также имеется возможность передавать параметры аналогично параметрам через вызов кода:

http://IP_адрес_сервера/objects/?script=devicesTest&param1=123&param2=Test

Данный способ может использоваться для инициирования определённых действий открытием ссылки с другого устройства.