Ваши комментарии

вариант с индификатором

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

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