Переключение между проектами
Настройка автоматического переключения между проектами в i3 pro.
документация обновлена 04.6.2021
Автоматическое переключение между проектами позволяет запустить другой проект, по заранее заданному событию. В качестве события может выступать самостоятельный выбор проекта из списка скачанных на панель, автоматическая загрузка проекта по подключению к необходимой Wi-Fi сети, или при получении устройством заранее заданных координат.
Переключение между проектами работает только с проектами, которые были скачаны на панель с облака.
Скачать пример:
Настройка выбора проекта из списка скачанных на панель
-
Скачайте пример проекта.
-
Объедините пример с вашим проектом для переноса данных.
В проекте появится дополнительная страница с элементом List , на котором будут отображаться все скачанные на панель проекты с облака. По нажатию на пункт списка вы перейдете к выбранному проекту.
Для перехода к изначальному проекту или выбору другого проекта, на дополнительном проекте так же необходимо добавить переход по проектам с помощью листа.

Пример скрипта:
IR.AddListener(IR.EVENT_START, 0, function() // Actions are performed at start
{
// getting the number of projects
var l_iCount = IR.GetDesignsCount();
//get a list
var list = IR.GetItem("Page 1").GetItem("Item 1");
// making a list of projects
for(var i = 0; i < l_iCount; i++)
{
// get a link to the project
var l_sName = IR.GetDesignByIndex(i);
//сhecking that the project is downloaded from the cloud
if(l_sName.CloudID > 0){
// create a list item (ListItem)
var item = list.AddItem("Popup 1", {
Name: {
Text: l_sName.OriginalName
}
});
//setting custom data to a list item
item.SetData({name: l_sName.OriginalName, id: l_sName.CloudID})
// execute a function when the button is released
item.SetReleaseAction(function(in_item, in_subItem){
var name = in_item.Data.name;
var id = in_item.Data.id;
//switch to the selected project
IR.DesignSwitch(name, id);
IR.Log(name + " " + id);
});
}
}
});
Используемые методы:
- IR.GetDesignsCount - подсчитывает число проектов визуализации в памяти приложения;
- IR.GetDesignByIndex - получает ссылку на проект, как объект, обратившись к нему по индексу в списке загруженных проектов;
- IR.DesignSwitch - переключает между проектами визуализации в памяти панели.
Настройка автоматического переключения проектов по названию Wi-Fi сети
-
Скачайте пример проекта.
-
Объедините пример с вашим проектом для переноса данных или скопируйте скрипт примера в ваш проект.
- Откройте скрипт примера и измените:
- название проекта Project1 на проект, который будет загружаться при подключении к Wi-Fi сети ssid1 ;
- название Wi-Fi сети ssid1 на сеть, при подключении к которой будет открываться Project1 ;
- название проекта Project2 на проект, который будет загружаться при подключении к Wi-Fi сети ssid2 ;
- название Wi-Fi сети ssid2 на сеть, при подключении к которой будет открываться Project2 ;
- название проекта Project3 на название проекта, который будет загружаться при подключении к другим Wi-Fi сетям или мобильному интернету.
Данное решение позволит автоматически переключаться между проектами автоматизации (например, так можно объединить проекты нескольких квартир, дачу и т.д.). Скрипт проекта можно при необходимости доработать и добавить дополнительные проекты и названия Wi-Fi сети.
Для перехода между проектами, все связанные проекты должны содержать данный скрипт с одинаково заполненными параметрами.
Пример скрипта:
(function(){
/**
* Auto project selector
*/
function ProjectSelector(projects)
{
this.trigger = "System.Net.SSID";
this.projects = projects;
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, this.select, this);
IR.SubscribeTagChange(this.trigger);
IR.AddListener(IR.EVENT_START, 0, this.analize, this);
}
/**
* Select project by trigger
*/
ProjectSelector.prototype.select = function()
{
var selectID = 0;
var selectName = "";
var ssid = IR.GetVariable(this.trigger);
var unknownItem;
for(var j = 0; j < this.projects.length; j++)
{
var item = this.projects[j];
if(item.CloudID == 0)
IR.Log("ProjectSelector: " + item.projectName + " is not found");
if(item.ssid == undefined)
unknownItem = item;
if(item.ssid == ssid && item.CloudID)
{
selectID = item.CloudID;
selectName = item.projectName;
break;
}
}
// не один проект не подошел
if(selectID == 0 && unknownItem != undefined)
{
selectID = unknownItem.CloudID;
selectName = unknownItem.projectName;
}
var currentProject = IR.GetCurrentDesign();
if(currentProject)
{
if(selectID != currentProject.CloudID)
{
IR.Log("ProjectSelector: " + selectName + " will be selected");
IR.DesignSwitch(selectName, selectID);
}
else
IR.Log("ProjectSelector: " + selectName + " selecte skipped, is already started");
}
}
/**
* Analize project names and find his clouds ids
*/
ProjectSelector.prototype.analize = function()
{
var count = IR.GetDesignsCount();
for(var i = 0; i < count; i++)
{
var project = IR.GetDesignByIndex(i);
for(var j = 0; j < this.projects.length; j++)
{
var item = this.projects[j];
if(item.projectName == project.OriginalName)
item.CloudID = project.CloudID;
}
}
this.select();
}
/**
* Make instance
*/
new ProjectSelector([
{
ssid: "ssid1",
projectName: "Project1",
},
{
ssid: "ssid2",
projectName: "Project2",
},
{
/* unknown ssid */
projectName: "Project3",
}
]);
})();
Используемые методы:
- IR.GetDesignsCount - подсчитывает число проектов визуализации в памяти приложения;
- IR.GetDesignByIndex - получает ссылку на проект, как объект, обратившись к нему по индексу в списке загруженных проектов;
- IR.GetVariable - выбор токена для активации события (в данном примере использовался идентификатор Wi-Fi сети ("System.Net.SSID"));
- IR.DesignSwitch - переключает между проектами визуализации в памяти панели;
- IR.SetGlobalListener - создает глобальный слушатель;
- IR.SubscribeTagChange - подписывается на тег.