Your comments

В итоге заработал несколько видоизмененный скрипт. Переменная i в глобальном слушателе в Вашем варианте всегда равна длине массива. Я добавил к названиям кнопок номера и потом вычленял их. Решение работает, но несколько туповатое. Нет ли более изящного варианта? Вот итоговый скрипт:


var objBtn, testPopup = "Подсобные", testBtn = "Вход";
var relay = ["Вход","Душ","Пещера Потолок","Купель Патио","Купель Щит и Люстра","Батареи и Потолок","Пещера Люстра"];
IR.AddListener(IR.EVENT_START,0,function(){
//добавляем цифру к названию кнопки
for (var i = 0; i < relay.length; i++) {
if (i > 9) {
relay[i] = i + relay[i];
Log(relay[i]);
} else {
relay[i] = "0" + i + relay[i];
Log("добавляем ноль " + relay[i]);
};
}; MakePanelID();
InitController();
NewPopup (testPopup);
IR.ShowPopup(testPopup)

// создаем список выключателей, и заполняем кнопками
IR.GetItem(testPopup).CreateItem(IR.ITEM_LISTBOX,"Выключатели",0,0,750,1344);
test_list = IR.GetItem(testPopup).GetItem("Выключатели");
test_list.Template = "Шаблон Списка Выключателей";

for (var i = 0; i < relay.length; i++) {
var val = IR.GetDevice("amx").GetFeedback(relay[i]);
test_list.CreateItem(i, 1,{Text: relay[i].slice(2), Value: val});
Log("Кнопка '" + relay[i] + "' создана со значением Value '" + val+ "'" );
};

Log("---------------------------------------------");


IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value){

var i = Number(name.slice(12,14));
Log (name.slice(12,14) + "номер элемента списка " + i);
test_list.CreateItem(i, 1,{Text: relay[i].slice(2), Value: value});
Log("Глобальный слушатель активирован для: '" + name + "' со значением Value: '" + value)+"'";
Log("Relay[i]: "+relay[i]+", Val: "+val+", i: "+ i);
Log("---------------------------------------------");
}); for (var i = 0; i < relay.length; i++) {
IR.SubscribeTagChange("Drivers.amx."+relay[i]);
Log ("relay[i]: " + relay[i]);
};
IR.AddListener(IR.EVENT_LIST_ITEM_CHANGE, test_list, function(Item, Subitem, TypeEvent, object){
var tempnum = TypeEvent;
if(tempnum==12) {
amx.Set(relay[Item],1);
amx.Set(relay[Item],0);
};
});
});

Большое спасибо за разъяснения! По поводу четвертого пункта, собственно, я не понимал, как решать первые два пункта через скрипт. А так, собственно всего хватает.

Спасибо, сделал, работает как надо. Вот код функции, формирующей ID панели:


function MakePanelID(){

var panelID = "Have no number";

var panelIP = panelIPInfo[0].IP;

var panelIPArray = panelIP.split(".");

//IR.Log("Четвертый кусок IP адреса равен " + panelIPArray[3]);

if (Number(panelIPArray[3]) < 100 ){

panelID = "100" + panelIPArray[3];

} else {

panelID = "10" + panelIPArray[3];

};

Return panelID;

};

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