Перейти к основному содержимому

Timetable

Timetable - возможность, реализованная в студии для удобного управления сценариями*, которая представляет собой аналог планировщика задач. Ключевая возможность заключается в предоставлении пользователю интерфейса по управлению сценариями.

Ознакомится со статьей по созданию сценариев(Routines) можно здесь.

Применение:

  1. Настройка включения освещения в заданный период времени;

  2. Снижение уровня электропотребления в ночное время;

  3. Регулировка включения системы полива и др.

Работа в iRidium Studio

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

Работа с Timetable в панельном проекте Работа с Timetable в серверном проекте

Работа с Timetable в панельном проекте

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

Создание элемента Timetable

  1. Создайте графический элемент Timetable. Создать элемент в редакторе скриптов можно с помощью IR.CreateItem(). Чтобы создать элемент на определенной странице, нужно применить метод IR.CreateItem() к ссылке на объект Page или Popup, полученной с помощью метода IR.GetItem().

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

Синтаксис:

IR.CreateItem(IR.ITEM_SCHEDULE, name, {parameter});

На входеЗначениеОписание
name"SCHEDULE_ITEM"type: String
название элемента Timetable, уникальное для страницы.
X8type: Number
координата по оси X.
Y104type: Number
координата по оси Y.
Width1008type: Number
ширина элемента.
Height656type: Number
высота элемента.
Routine"Routine 1"type: String
ссылка на рутину.
На выходе
Object[Object DialogItemPrototype]type: Object
экземпляр графического объекта.

Пример создания расписания на активной странице

IR.AddListener(IR.EVENT_START,0, function() {
var scheduleItem = IR.CreateItem(IR.ITEM_SCHEDULE, "SCHEDULE_ITEM", { //метод
X: 8, // координата по оси Х
Y: 104, // координата по оси Y
Width: 1008, // ширина элемента
Height: 656, // высота элемента
Routine: "Routine 1", // привязка рутины
});
IR.Log(scheduleItem); // [Object DialogItemPrototype]
});

Пример создания расписания на неактивной странице


IR.AddListener(IR.EVENT_START,0,function() {
var scheduleItem = IR.GetItem("Page 2").CreateItem(IR.ITEM_SCHEDULE, "SCHEDULE_ITEM", { //метод
X: 8, // координата по оси Х
Y: 104, // координата по оси Y
Width: 1008, // ширина элемента
Height: 656, // высота элемента
Routine: "Routine 1", // привязка рутины
});
IR.Log(scheduleItem);
});
примечание

Расписание можно создавать по старту приложения или по любому другому событию.

  1. Настройте цвет, шрифт отдельных элементов Timetable с помощью .UpdateColors .

Синтаксис:

scheduleItem.UpdateColors = ({parameter})

На входеЗначениеОписание
scheduleItemIR.GetItem("Page 1") .GetItem("SCHEDULE_ITEM")type: Object
ссылка на расписание

Полный список параметров, которые можно изменить для Timetable:

  • GridColor - цвет фона за ячейками дней и часов.
  • TemplatesSelectState1Color - цвет 1-ого состояния фона настроечных ячеек добавления события.
  • TemplatesSelectState2Color - цвет 2-ого состояния фона настроечных ячеек добавления события.
  • CellsState1Color - цвет текста дней без события в годичном, месячном видах.
  • CellsState2Color - цвет текста дней с событиями в годичном, месячном видах.
  • CellsState1TextColor - цвет фона ячеек без события (месяцев в годичном, дней в месячном, часов в дневном).
  • CellsState2TextColor - цвет фона ячеек с событиями (месяцев в годичном, дней в месячном, часов в дневном).
  • EventBlockState1Color - цвет 1-ого состояния события в недельном виде.
  • EventBlockState2Color - цвет 2-ого состояния события в недельном виде.
  • EventBlockState1TextColor - цвет текста 1-ого состояния события в недельном виде.
  • EventBlockState2TextColor - цвет текста 2-ого состояния события в недельном виде.
  • HeaderColor - цвет фона заголовков (дни в недельном, часы и дата в дневном).
  • HeaderTextColor - цвет текста заголовков (дни в недельном, часы и дата в дневном).
  • ControlBackgroundColor - цвет заголовка.
  • ControlButtonState1Color - цвет 1-ого состояния навигационных кнопок.
  • ControlButtonState2Color - цвет 2-ого состояния навигационных кнопок.
  • ListBackgroundColor - цвет фона за ячейками в окне добавления события (цвет подложки окна добавления события).
  • TemplatesDescriptionTextColor - цвет текста значения настроек в добавлении события.
  • TemplatesLabelTextColor - цвет текста имени настроек в добавлении события.
  • MonthNameState1TextColor - цвет имени месяцев в годичном виде без события.
  • MonthNameState2TextColor - цвет имени месяцев в годичном виде с событием.
  • YearNumberTextColor - цвет года.
  • ControlLabelTextColor - цвет верхнего заголовка.
  • CheckMarkColor - цвет чекбокса (галочки).
  • TemplatesCaptionAddTextColor - цвет текста "Add".
  • TemplatesCaptionDeleteTextColor - цвет текста "Delete".
scheduleItem.UpdateColors({
GridColor : 0xFF4500FF, // цвет фона за ячейками дней и часов
TemplatesSelectState1Color : 0xD8BFD8FF, // цвет 1-ого состояния фона настроечных ячеек добавления события
TemplatesSelectState2Color : 0xF08080FF, // цвет 2-ого состояния фона настроечных ячеек добавления события
CellsState1Color : 0xFA8072FF, // цвет текста дней без события в годичном, месячном видах
CellsState2Color : 0xE9967AFF, //цвет текста дней с событиями в годичном, месячном видах
CellsState1TextColor : 0xFFA07AFF, // цвет фона ячеек без события (месяцев в годичном, дней в месячном, часов в дневном)
CellsState2TextColor : 0xDC143CFF, // цвет фона ячеек с событиями (месяцев в годичном, дней в месячном, часов в дневном)
EventBlockState1Color : 0xB22222FF, // цвет 1-ого состояния события в недельном виде
EventBlockState2Color : 0x8B0000FF, // цвет 2-ого состояния события в недельном виде
EventBlockState1TextColor : 0xF08080FF, // цвет текста 1-ого состояния события в недельном виде
EventBlockState2TextColor : 0xDC143CFF, // цвет текста 2-ого состояния события в недельном виде
HeaderColor : 0xFFFF00FF, // цвет фона заголовков (дни в недельном, часы и дата в дневном)
HeaderTextColor : 0xFF1493FF, // цвет текста заголовков (дни в недельном, часы и дата в дневном)
ControlBackgroundColor : 0xDC143CFF, // цвет заголовка
ControlButtonState1Color : 0xFA8072FF, // цвет 1-ого состояния навигационных кнопок (+ / Cancel / etc...)
ControlButtonState2Color : 0xF08080FF, // цвет 2-ого состояния навигационных кнопок (+ / Cancel / etc...)
ListBackgroundColor : 0xDC143CFF, // цвет фона за ячейками в окне добавления события (цвет подложки окна добавления события)
TemplatesDescriptionTextColor : 0xF08080FF, // цвет текста значения настроек в добавлении события
TemplatesLabelTextColor : 0xFA8072FF, // цвет текста имени настроек в добавлении события
MonthNameState1TextColor : 0xFF4500FF, // цвет имени месяцев в годичном виде без события
MonthNameState2TextColor : 0xFF8C00FF, // цвет имени месяцев в годичном виде с событием
YearNumberTextColor : 0xFFA500FF, // цвет года
ControlLabelTextColor : 0xFFFF00FF, // цвет верхнего заголовка
CheckMarkColor : 0xFF4500FF, // цвет чекбокса (галочки)
TemplatesCaptionAddTextColor : 0xFFA500FF, // цвет текста "Add"
TemplatesCaptionDeleteTextColor : 0x8B0000FF, // цвет текста "Delete"
})
  1. Привяжите необходимый сценарий к расписанию с помощью параметра .Routine

Синтаксис:

scheduleItem.Routine = routine

На входеЗначениеОписание
scheduleItemIR.GetItem("Page 1").GetItem("SCHEDULE_ITEM")type: Object
ссылка на расписание.
routine"Routine 1"type: String
ссылка на сценарий.
var scheduleItem = IR.GetItem("Page 1").GetItem("SCHEDULE_ITEM"); // ссылка на объект
scheduleItem.Routine = "Routine 1"; // привязка рутины
IR.Log("Линковка рутины: " + scheduleItem.Routine); // вывод в лог
  1. Активируйте сценарий на сервере с помощью метода IR.SetRoutineActive() .

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

Синтаксис:

IR.SetRoutineActive(routine, active)

На входеЗначениеОписание
routine"Routine 1"type: String, ссылка на сценарий
active1 - сценарий включен
0 - сценарий выключен
type: Number
активность сценария
IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetItem("Page 1").GetItem("Item 1"),
function() //активация события
{
IR.SetRoutineActive("Routine 1", 1); // подключение рутины
IR.Log("Подключение рутины: Routine 1"); // вывод в лог
});

Свойства элемента

Свойства расписания - графического элемента типа Timetable: IR.GetItem(page/popup).GetItem(schedule_Item).property

На входеЗначениеОписание
.Title"Title 1"type: String
смена заголовка элемента.

Работа с Timetable в серверном проекте

Компонент “Timetable” для серверного проекта - это специализированная версия стандартного сценария. Данный сценарий отличается от стандартного тем, что имеет специальные параметры, с помощью которых мы можем передать значения сценарию из компонента “Timetable” панельного проекта.

Создание расписания

Существует 2 типа расписаний: “Расписание на неделю” и “Календарное расписание”.

Тип расписания задается в редакторе скриптов методом IR.AddProRoutine (schedule_type).

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

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

  1. Для создания расписания - откройте вкладку “SCHEDULE” в серверном проекте и добавьте новое событие, нажав “+”.

AddSchedule.png

Откроется окно настройки даты и времени события:

Event.png

  1. С помощью “Start” и “Finish” указываем время начала и окончания события, которое будет задано по умолчанию в расписании.

StartFinish.png

  1. В настройках события для недельного расписания выбираем цикличность повторения (Repeat): Every week (каждую неделю) или Custom (на выбор). Для календарного расписания подойдут все указанные типы.

Repeat.png

При выборе “Custom” откроются дополнительные настройки дат повторения события:

Period.png

В строке “Period” выбираем отрезок времени повторения: By days (день), By weeks (неделя), By month (месяц) или By year (год). Для настройки определенных дней повторения в недельном расписании используется By week (неделя), для календарного типа подойдет любой период из предложенных.

  1. Указываем конец цикла работы расписания в строке “End”. *Never - событие будет срабатывать до тех пор, пока мы не остановим работу расписания самостоятельно; *Date - необходимо указать определенную дату конца расписания.

End.png

примечание
  • Все подробности по настройке расписания можно найти перейдя по ссылке.

  • Настроенные события будут выделены в расписании. При необходимости их можно удалить или деактивировать (подробности в главе "Использование элемента Timetable").

Timetable1.png

  1. В редакторе скриптов добавьте код на проверку наличия расписания. В случае, если расписание не будет получено, в лог выводим ошибку:
IR.AddListener(IR.EVENT_START, 0, function () {
var scheduleID = 0; //<translate> <!--T:100-->
создание переменной с ID расписания</translate>
var scheduleEventID = 0; // <translate><!--T:101-->
создание переменной с ID события</translate>

<!--T:57-->
var scheduler = IR.GetScheduler("Schedule 1"); // <translate><!--T:102-->
создание переменной с расписанием</translate>
if (scheduler) { // <translate><!--T:103-->
проверка наличия расписания</translate>
scheduleID = scheduler.ID;
var schedulerEvent = scheduler.GetEvent("Event 1");
if (schedulerEvent)
scheduleEventID = schedulerEvent.ID;


<!--T:58-->
} else // <translate><!--T:104-->
иначе выводим ошибку</translate>
IR.Log("<translate><!--T:105-->
НЕ УДАЛОСЬ ПОЛУЧИТЬ РАСПИСАНИЕ</translate>");
  1. Вы можете создать сценарий, указать событие и условие активации этого события в js редакторе серверного проекта. Описание доступных методов для работы со сценариями вы найдете перейдя по этой ссылке.

Пример работы с серверными сценариями

IR.AddProRoutine("Routine 1", IR.ROUTINE_TYPE_TIMETABLE, IR.ROUTINE_SERVICE_SCHEDULE_TYPE_WEEKLY_CYCLE); // создаем рутину
var routine = IR.GetProRoutine("Routine 1"); //получаем доступ к рутине
// УДАЛЕНИЕ РУТИНЫ
/*
IR.Log("DELETE ROUTINE 2 RESULT: " + IR.DeleteProRoutine(routine_aut));
routine_aut = null;
IR.Log("ROUTINES: " + IR.GetProRoutines());
*/
if (routine) { //создание параметров
// строковый параметр
var stringParam = routine.AddParameter({
Type: IR.ROUTINE_PARAMETER_TYPE_STRING,
Name: "String"
});

<!--T:61-->
// числовой параметр
var numberParam = routine.AddParameter({
Type: IR.ROUTINE_PARAMETER_TYPE_NUMBER,
Name: "Number",
MinValue: 0,
MaxValue: 50
});

<!--T:62-->
// цветовой параметр
var colorParam = routine.AddParameter({
Type: IR.ROUTINE_PARAMETER_TYPE_COLOR,
Name: "Color",
});

<!--T:63-->
// параметр выбора
var selectParam = routine.AddParameter({
Type: IR.ROUTINE_PARAMETER_TYPE_SELECT,
Name: "Select",
SubType: IR.PT_INTEGER,
SubParameterArray: [{
Key: "ON",
Value: "1"
}, {
Key: "OFF",
Value: "2"
}]
});

<!--T:64-->
//вывод в лог
IR.Log("GET ROUTINE PARAMETERS: " + routine.GetParameters());
IR.Log("GET PARAMETER: " + routine.GetParameter("Number"));

<!--T:65-->
//УДАЛЕНИЕ ПАРАМЕТРА
/*
IR.Log("DELETE_PARAMETER RESULT: " + routine.DeleteParameter(numberParam));
numberParam = null;
IR.Log("GET PARAMETERS: " + routine.GetParameters();
*/

<!--T:66-->
// Создание события
var event = routine.AddEvent({
Type: IR.ROUTINE_SERVICE_TYPE_SCHEDULE,
ScheduleID: scheduleID,
ScheduleEventID: scheduleEventID,
Value: IR.SCHEDULE_EVENT_STATE_START,
ParametersValues: [{
ParameterID: stringParam.ID,
Value: "Hello, world!"
}, {
ParameterID: numberParam.ID,
Value: "50"
}, {
ParameterID: colorParam.ID,
Value: 0xFF00FFFF.toString()
}, {
ParameterID: selectParam.ID,
Value: "ON"
}]
});

<!--T:67-->
//Вывод в лог:
IR.Log("GET EVENTS: " + routine.GetEvents());
IR.Log("GET EVENT: " + routine.GetEvent(1));
IR.Log("GET EVENT VALUE: " + event.Value);

<!--T:68-->
//УДАЛЕНИЕ СОБЫТИЯ
/*
IR.Log("DELETE_EVENT RESULT: " + routine.DeleteEvent(event));
event = null;
IR.Log("GET EVENTS: " + routine.GetEvents());
*/

<!--T:69-->
//Создание условия
var condition = routine.AddCondition({
Type: IR.ROUTINE_SERVICE_TYPE_TOKEN,
Value: "1",
Token: "Server.Channels.Modbus TCP.Channel 1",
Operation: IR.ROUTINE_COMPARE_EQUAL
});

<!--T:70-->
//вывод в лог
IR.Log("GET CONDITIONS: " + routine.GetConditions());
IR.Log("GET CONDITION: " + routine.GetCondition(1));

<!--T:71-->
// УДАЛЕНИЕ УСЛОВИЯ
/*
IR.Log("DELETE CONDITION RESULT: " + routine.DeleteCondition(condition));
condition = null;
IR.Log("GET CONDITION: " + routine.GetCondition(1));
*/

<!--T:72-->
// Создание действий:
var numberAction = routine.AddAction({
Type: IR.ACTION_TYPE_SEND_NUMBER,
Channel: "AV & Custom Systems (TCP).AV Control Command",
Value: "1"
});

<!--T:73-->
var colorAction = routine.AddAction({
Type: IR.ACTION_TYPE_SEND_TAG,
Channel: "Modbus TCP.Channel 1",
Value: "Routines." + routine.Name + "." + colorParam.Name
});

<!--T:74-->
//Вывод в лог:
IR.Log("GET ACTIONS: " + routine.GetActions());
IR.Log("GET ACTION: " + routine.GetAction(1));

<!--T:75-->
// УДАЛЕНИЕ ДЕЙСТВИЯ
/*
IR.Log("DELETE ACTION RESULT: " + routine.DeleteAction(colorAction));
colorAction = null;
IR.Log("ACTIONS: " + routine.GetActions());
*/
}
});

<!--T:76-->

Использование элемента TimeTable

Существует 2 типа расписания - расписание на неделю и календарное расписание. Особенностью расписания на неделю является то, что указанное событие будет повторяться каждую неделю в одно и то же время пока мы не изменим настройки расписания. События по календарному расписанию задаются на определенный день в году и не имеют свойства еженедельного или ежегодного повторения событий (если не указать параметр Repeat).

Расписание на неделю (навигация)

TT1.png

Чтобы перейти к настройке события, нажмите “+” в правом верхнем углу страницы или выберите ячейку на пересечении нужного дня и времени события.

Календарное расписание (навигация)

Разворот на год - обзор календаря на год. В нём закрашен сегодняшний день, но не отображаются события, которые сработают по расписанию. Вы можете переходить к предыдущим и следующим годам по свайпу вверх и вниз.

TT2.png

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

Timetable1.png

Разворот на день - открывается по клику на дату в месяце. Отображает события по временному промежутку. Работает так же, как в режиме “неделя”, но показывает только 1 день. На событии отображаются его параметры.

TT3.png

Создание и настройка событий

В каждом из разворотов в панели навигации есть “+”, нажав на который, можно перейти в окно создания события:

TT_NewEvent.png

  • Name - уникальное имя события.
  • Day and time - дата и время начала и окончания события.
  • Operation - активация сценария по началу или окончанию заданного промежутка времени (Day and time).
  • Параметры сценария (String, Number, Color, Select) - настраиваемые уставки для устройств.
  • Active status - активация / деактивация события.

Day and time

Параметр Day and time имеет следующие настройки:

TT_Date_and_Time.png

  • Start / End - это выбор даты и времени для начала и окончания события.
  • Repeat - настройка повторения события.

Repeat:

TT_Repeat.png

  • Never - событие не будет повторяться и сработает только один раз;
  • Every week - событие будет повторяться каждую неделю в заданное время / день недели;
  • Every 2 week - событие будет повторяться в заданное время / день недели, каждые две недели;
  • Every month - событие будет повторяться в заданное время / число, каждый месяц;
  • Every year - событие будет повторяться в заданное время / число / месяц, каждый год;
  • Custom - расширенная настройка повторения события.

Custom:

TT_Custom.png

  • Periodicity - выбор временного промежутка для повторения (по дням, по неделям, по месяцам и по годам);
  • Every - выбор периодичности повторения между выбранными временными промежутками. Пример: повторять событие в понедельник, вторник и среду, каждую неделю (Every = 1).

Параметры сценария

После создания события, необходимо указать данные для активации сценария. Входные данные бывают следующих типов: String, Number, Color и Select. Настройка и создание параметров расписание описаны здесь.

TT_NewEvent2.png

После создания события нажмите кнопку “Add” - оно добавится в расписание.

TT_Delete.png

При необходимости вы можете удалить созданное событие, нажав на кнопку “Delete”.