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

Редактирование расписания на панели управления


Расписание хранится в памяти сервера. Требуется изменять параметры расписания на экране смартфона или планшета. Для этого у платформы iRidium имеется решение.

Описание демо-проекта


Скачать демо-проект

На экране панели размещены:

  • список событий Event list ,
  • поле для вывода имени события Name ,
  • индикатор состояния и переключатель Enabled ,
  • два поля для вывода даты и времени начала и окончания события (Start и Finish ),
  • два поля для ввода новых даты и времени Enter new date-time ,
  • кнопка Update .

Schedule_edit01(2).png

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

Пользователь вводит новые данные в поля Enter new date-time , переключателем Enabled выбирает состояние события (активно/неактивно) и затем нажимает кнопку Update . После этого новые данные отправляются в сервер, расписание обновляется и при успешном результате обновлённая информация о расписании возвращается в панель.

Архив демо-проекта содержит два готовых проекта:

  • проект для сервера (файл Schedule_edit.sirpz)
  • проект для панели (файл Schedule_edit.irpz).

Настройка серверного проекта


  1. Добавьте виртуальный канал EventData_to_server и виртуальный тег EventData_from_server.

Schedule_edit02.png

  1. Добавьте события в расписание:

Schedule_edit022.png

  1. Добавьте скрипт:
var schedule = IR.GetScheduler("Schedule 1");
// creating a string with schedule data
var EventChanger = function() {
// writing schedule data in virtual tag
this.Write = function(in_events) {
var EventBuff = [];
for(var i in in_events) {
EventBuff.push({
"name": in_events[i].Name,
"end": in_events[i].End,
"start": in_events[i].Start,
"enable": in_events[i].enable
});
}
IR.SetVariable("Server.Tags.EventData_from_server", JSON.Stringify(EventBuff));
}
// reading schedule data in virtual tag
this.Read = function(in_schedule, in_NewData) {
var data = JSON.Parse(in_NewData);
var newData = JSON.Parse(data.join());
EventEdit = in_schedule.GetEvent(newData.name);
EventEdit.Start = newData.start;
EventEdit.End = newData.end;
EventEdit.Enabled = newData.enable;
EventEdit.Done(); // event update */
}
}

var EventsObj = new EventChanger();
// getting schedule data at server start
IR.AddListener(IR.EVENT_START,0,function() {
schedule = IR.GetScheduler("Schedule 1");
EventsObj.Write(schedule.GetEvents());
});

// getting new data from panel
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(in_sName, in_sValue) {
var newData = in_sValue.split(',');
EventsObj.Read(schedule, newData);
EventsObj.Write(schedule.GetEvents());
});

// subscribing for tag changes
IR.SubscribeTagChange("Server.Channels.EventData_to_server");
  • Подробное описание JS методов работы с серверными сценариями и расписанием по ссылке.
  1. Сохраните проект.

Настройка панельного проекта


  1. Добавьте драйвер iRidium Server . В параметре Source Project укажите сохранённый файл серверного проекта, в параметре Host - IP-адрес сервера.

Schedule_edit03.png

  1. Нажмите кнопку Sync With Server Project .

Sync_with_server_project_first.png

  1. Добавьте графические элементы на поле экрана:

Schedule_edit04(2).png

  1. Добавьте скрипт:
var Server = IR.GetDevice("iRidium Server");
var ListBox = IR.GetItem("Page 1").GetItem("ListBox");
var EventNameField = IR.GetItem("Page 1").GetItem("EventName");
var EventStartField = IR.GetItem("Page 1").GetItem("EventStart");
var EventFinishField = IR.GetItem("Page 1").GetItem("EventFinish");
var EventStartFieldEdit = IR.GetItem("Page 1").GetItem("EventStartEdit");
var EventFinishFieldEdit = IR.GetItem("Page 1").GetItem("EventFinishEdit");
var UpdateButton = IR.GetItem("Page 1").GetItem("UpdateBtn");
var Lamp = IR.GetItem("Page 1").GetItem("Lamp");
var Switch = IR.GetItem("Page 1").GetItem("Switch");
var EventsObj;

// processing incoming and outgoing values for the server
var EventChanger = function(in_list, in_server) {
this.list = in_list; // link to GUI list with items and data
// read event data from virtual tag in JSON format and fill the list with items
this.Read = function(in_ChannelName, in_Value) {
if (in_ChannelName == "EventData_from_server") {
this.events = JSON.Parse(in_Value);
this.list.Clear();
for (var event in this.events) {
this.list.AddItem(null, {
"Item 1":
{
Text: this.events[event].name
}
});
}
fill(0);
}
}
// write new date-times of event in virtual tag
this.Write = function(eventName, startNewTime, finishNewTime, enableEvent) {
var newEventsData = {
"name": eventName,
"start": startNewTime,
"end": finishNewTime,
"enable": enableEvent
};
Server.Set("EventData_to_server", JSON.Stringify(newEventsData));
}

// populating the first item in the list
IR.AddListener(IR.EVENT_ITEM_SELECT, ListBox, function(item, subitem) {
fill(item);
}, this);

IR.AddListener(IR.EVENT_TAG_CHANGE, in_server, this.Read, this);
}

IR.AddListener(IR.EVENT_START,0,function() {
EventsObj = new EventChanger(ListBox, Server);
});

// filling fields with data
function fill(index) {
var event = EventsObj.events[index];
var startTime = new Date(event.start * 1000);
var finishTime = new Date(event.end * 1000);
var enableState = event.enable;

EventNameField.Text = event.name;
EventStartField.Text = startTime;
EventFinishField.Text = finishTime;
EventStartFieldEdit.Text = startTime;
EventFinishFieldEdit.Text = finishTime;
Lamp.Value = enableState;
Switch.Value = enableState;
}

// sending new data to server
IR.AddListener(IR.EVENT_ITEM_PRESS, UpdateButton, function() {
var eventName = EventNameField.Text;
var startNewTime = Math.floor(new Date(EventStartFieldEdit.Text) / 1000);
var finishNewTime = Math.floor(new Date(EventFinishFieldEdit.Text) / 1000);
var enableEvent = Switch.Value;
if (startNewTime > 0 && finishNewTime > 0)
EventsObj.Write(eventName, startNewTime, finishNewTime, enableEvent);
else
IR.Log("invalid date")
});

Тестирование системы

Вы можете запустить серверный и панельный проекты на обычном компьютере. Серверный проект можно загрузить в iRidium server для Windows c помощью iRidium transfer. Панельный проект запускается в эмуляторе.