Редактирование расписания на панели управления
Расписание хранится в памяти сервера. Требуется изменять параметры расписания на экране смартфона или планшета. Для этого у платформы iRidium имеется решение.
Описание демо-проекта
На экране панели размещены:
- список событий Event list ,
- поле для вывода имени события Name ,
- индикатор состояния и переключатель Enabled ,
- два поля для вывода даты и времени начала и окончания события (Start и Finish ),
- два поля для ввода новых даты и времени Enter new date-time ,
- кнопка Update .
-f46dd822bab0bda915d51b44b675fd64.png)
Список событий содержит в себе все события из расписания сервера. Пользователь может выбрать любое событие из списка, и данные этого события появятся в полях справа от списка.
Пользователь вводит новые данные в поля Enter new date-time , переключателем Enabled выбирает состояние события (активно/неактивно) и затем нажимает кнопку Update . После этого новые данные отправляются в сервер, расписание обновляется и при успешном результате обновлённая информация о расписании возвращается в панель.
Архив демо-проекта содержит два готовых проекта:
- проект для сервера (файл Schedule_edit.sirpz)
- проект для панели (файл Schedule_edit.irpz).
Настройка серверного проекта
- Добавьте виртуальный канал EventData_to_server и виртуальный тег EventData_from_server.
- Добавьте события в расписание:
- Добавьте скрипт:
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 методов работы с серверными сценариями и расписанием по ссылке.
- Сохраните проект.
Настройка панельного проекта
- Добавьте драйвер iRidium Server . В параметре Source Project укажите сохранённый файл серверного проекта, в параметре Host - IP-адрес сервера.

- Нажмите кнопку Sync With Server Project .
- Добавьте графические элементы на поле экрана:
-e383ba26ed6c21d4710e9d133fafe145.png)
- Добавьте скрипт:
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. Панельный проект запускается в эмуляторе.