Ваши комментарии
What is the problem with using Commands and Feedbacks of iRidium Server (TCP) driver?
http://dev.iridiummobile.net/IRidium_Server_Panel_Project/en#Control_of_variables
Тогда уж Static List, если не на одном шаблоне
"Обычный" List работает по-другому
вариант с индификатором
var act_txtBx = function (action, key)
{
if (action == 2) // enter
{
var txt=this.Text;
/*for (i=0; i<txt.length; i++) {
IR.Log(txt.charCodeAt(i));
//IR.GetDevice("Crestron").Set("JoinAnalog", txt.charCodeAt(i)); ////!
} */
IR.Log('@'+this.Parent.Name+'_'+this.Name+'#'+txt);
//IR.GetDevice("AV & Custom Systems (TCP)").Send(['@'+this.Parent.Name+'_'+this.Name+'#'+txt]);
; }
} IR.AddListener(IR.EVENT_START,0,function()
{
var txtBxs=[IR.GetItem("Page 1").GetItem("Item 1"),IR.GetItem("Page 1").GetItem("Item 4")]
for (t in txtBxs) {
IR.AddListener(IR.EVENT_ITEM_CHANGE, txtBxs[t],act_txtBx,txtBxs[t]);
}
});
Для отроботки обратной связи AV & Custom Systems используются IR.EVENT_RECEIVE_DATA и IR.EVENT_RECEIVE_TEXT
http://dev.iridiummobile.net/AV_%26_Custom_Systems/en#Feedback
для обратной связи можно использовать и Serial Join от Crestron'а http://dev.iridiummobile.net/Drivers_API#IR.EVENT_TAG_CHANGE
function prss() {
var dev=IR.GetDevice("Modbus TCP");
var n=dev.GetFeedback("Channel_Feedback 16406");
var mask = 1 << 1; // gets the 2th bit
if ((n & mask) != 0) {
// bit is set
n &= ~mask; //clear a bit: 0
} else {
// bit is not set
n |= mask; //set a bit: 1
}
dev.Set("Channel_Command 16406", n);
}
IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("Modbus TCP")), function(name, value)
{
if (name=="Channel_Feedback 16406") {
var mask = 1 << 1; // gets the 2th bit
value ^= mask; //toggle a bit: 0|1
dev.Set("Channel_Command 16406", value );
}
});
Первый вариант: передавать по Enter код каждого символа в TextBox через аналоговый джойн, или делать это при каждом нажатии
http://dev.iridiummobile.net/GUI_API#IR.EVENT_ITEM_CHANGE
IR.AddListener(IR.EVENT_ITEM_CHANGE, IR.GetItem("Page 1").GetItem("Item 1"), function (action, key)
{
if (action == 2) // enter
{
var txt=IR.GetItem("Page 1").GetItem("Item 1").Text;
for (i=0; i<txt.length; i++) {
IR.Log(txt.charCodeAt(i));
//IR.GetDevice("Crestron").Set("JoinAnalog", txt.charCodeAt(i)); ////!
}
; }
});
могут возникнуть сложности с кодировками
Второй вариант: запустить на Crestron'е TCP-Server и передавать данные с Iridium'а через AV & Custom Systems (TCP) (как по telnet)
https://github.com/ladrua/pycres/wiki/Crestron-Simpl-example
работа с битами
Установить значение регистра
http://dev.iridiummobile.net/Drivers_API#.Set
событие при изменении регистра
http://dev.iridiummobile.net/Drivers_API#IR.EVENT_TAG_CHANGE
IR.AddListener(IR.EVENT_START,0,function()
{
pXMLTV.request(function(resp) {
try {
if (resp.tv[0] !== undefined) {
IR.Log("TEMPERATURE is " + resp.tv.channel.url);
for (j=0; j<pXMLTV.lngth(resp.tv.channel); j++) {
IR.Log(resp.tv.channel[j]["display-name"]);
IR.Log('------------------////----------------');
}
for (k=0; k<pXMLTV.lngth(resp.tv.programme); k++) {
st=pXMLTV.ctime(resp.tv.programme[k]["@start"]);
et=pXMLTV.ctime(resp.tv.programme[k]["@stop"]);
IR.Log(resp.tv.programme[k]["title"] + " ["+st +
" - " + et + "]") ;
}
//IR.Log(typeof resp.main.temp)
//IR.GetDevice("HDL-BUS Pro Network (UDP)").Set("HVAC:temp", resp.main.temp); //type conversion warring!
}
} catch (e) {
IR.Log("Something is wrong \n" + e); // error handler
}
});
});
var pXMLTV = {};
pXMLTV.dev = IR.CreateDevice(IR.DEVICE_CUSTOM_HTTP_TCP, "pXMLTV_dev",
{Host: "raspored.hrt.hr",
Port: 80,
SSL: false,
ScriptMode: IR.DIRECT_AND_SCRIPT,
SendCommandAttempts: 0,
ConnectWaitTimeMax: 3000,
ReceiveWaitTimeMax: 5000
});
pXMLTV.request = function(in_callback){
pXMLTV.dev.Connect(); // Must be
pXMLTV.dev.SendEx({
Type: "GET",
Url: "/format/xmltv.xml?mreza=2",
/*Headers: {
"Content-Type": "application/json"
},*/
cbReceiveText: function(text, code, headers) {
if (code != 200) return; //parse other error codes!
var resp = new XML(text);
//BUG: new XML return always null || Ticket ID: #11928
pXMLTV.dev.Disconnect();
in_callback(resp);
},
});
}
pXMLTV.lngth= function(node) { //childNode does not have the length property || Ticket ID: #11929
var i = 0;
while (node[i] !== undefined) ++i;
return i;
}
pXMLTV.ctime= function(tme) { //
return tme.replace(
/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)\s([+-])(\d{4})$/,
'$2/$3/$1 $4:$5:$6' //bug with GMT/UTC ;
);
} Сервис поддержки клиентов работает на платформе UserEcho
http://support.iridiummobile.net/topics/12089-changing-schedules-clockstimers-in-iridium-server-by-end-user/