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

Переключение между проектами

Настройка автоматического переключения между проектами в i3 pro.

документация обновлена 04.6.2021

Автоматическое переключение между проектами позволяет запустить другой проект, по заранее заданному событию. В качестве события может выступать самостоятельный выбор проекта из списка скачанных на панель, автоматическая загрузка проекта по подключению к необходимой Wi-Fi сети, или при получении устройством заранее заданных координат.

Переключение между проектами работает только с проектами, которые были скачаны на панель с облака.

Скачать пример:

Настройка выбора проекта из списка скачанных на панель

  1. Скачайте пример проекта.

  2. Объедините пример с вашим проектом для переноса данных.

DesignSwitch1.png

В проекте появится дополнительная страница с элементом List , на котором будут отображаться все скачанные на панель проекты с облака. По нажатию на пункт списка вы перейдете к выбранному проекту.

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

DesignSwitch2.png

Пример скрипта:

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 сети

  1. Скачайте пример проекта.

  2. Объедините пример с вашим проектом для переноса данных или скопируйте скрипт примера в ваш проект.

DesignSwitch1.png

  1. Откройте скрипт примера и измените:
  • название проекта 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 - подписывается на тег.