Subversion Repositories HomeAutomation

Rev

Rev 2126 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. IROut_ModuleNames    = [ "irTransmit", "rfTransceive" ];
  3. IROut_Channels       = function() { return [ 0 ]; };
  4. IROut_Statuses       = function() { return [ "Pressed", "Released", "Burst" ]; };
  5. IROut_Protocols      = function() { return [ "RC5", "RC6", "RCMM", "SIRC", "Sharp", "NEC", "Samsung", "Marantz", "Panasonic", "Sky", "Nexa2", "Nexa" ]; };
  6. IROut_Aliases        = function() { return Module_GetAliasNames(IROut_ModuleNames); };
  7. IROut_AvailableIds   = function() { return Module_GetAvailableIds(IROut_ModuleNames); };
  8.  
  9. function IROut_StopSend(alias_name)
  10. {
  11.     if (arguments.length < 1)
  12.     {
  13.         Log("\033[31mNot enough parameters given.\033[0m\n");
  14.         return false;
  15.     }
  16.    
  17.     var aliases_data = Module_ResolveAlias(alias_name, IROut_ModuleNames);
  18.     var found = false;
  19.    
  20.     for (var name in aliases_data)
  21.     {
  22.         var variables = {
  23.         "Channel"  : aliases_data[name]["specific"]["Channel"],
  24.         "Status"   : "Released" };
  25.        
  26.         if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "IR", variables))
  27.         {
  28.             Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  29.         }
  30.         else
  31.         {
  32.             Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  33.         }
  34.        
  35.         found = true;
  36.     }
  37.    
  38.     if (!found)
  39.     {
  40.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  41.         return false;
  42.     }
  43.    
  44.     return true;
  45. }
  46. Console_RegisterCommand(IROut_StopSend, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, IROut_Aliases()); });
  47.  
  48. function IROut_StartSendAutoComplete(arg_index, args)
  49. {
  50.     if (arg_index == 0)
  51.     {
  52.         return IROut_Aliases();
  53.     }
  54.     else if (arg_index == 1)
  55.     {
  56.         return get_keys(Storage_GetParameters("RemoteList"));
  57.     }
  58.     else if (arg_index == 2)
  59.     {
  60.         var remote_storage_name = Storage_GetParameter("RemoteList", args[arg_index - 1]);
  61.  
  62.         return get_keys(Storage_GetParameters(remote_storage_name));
  63.     }
  64.    
  65.     return [];
  66. }
  67.  
  68. function IROut_Send_Raw(alias_name, protocol, data, status)
  69. {
  70.     if (arguments.length < 4)
  71.     {
  72.         Log("\033[31mNot enough parameters given.\033[0m\n");
  73.         return false;
  74.     }
  75.    
  76.     var aliases_data = Module_ResolveAlias(alias_name, IROut_ModuleNames);
  77.     var found = false;
  78.  
  79.     for (var name in aliases_data)
  80.     {
  81.         var variables = {
  82.         "Channel"  : aliases_data[name]["specific"]["Channel"],
  83.         "Protocol" : protocol,
  84.         "IRdata"   : data,
  85.         "Status"   : status };
  86.         Log("will send data to: "+aliases_data[name]["module_name"]+":"+aliases_data[name]["module_id"]+" Data: "+ data + " Prot: "+protocol+" Sts: "+status+"\n");
  87.         if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "IR", variables))
  88.         {
  89.             Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  90.         }
  91.         else
  92.         {
  93.             Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  94.         }
  95.        
  96.         found = true;
  97.     }
  98.    
  99.     if (!found)
  100.     {
  101.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  102.         return false;
  103.     }
  104.    
  105.     return true;
  106. }
  107. Console_RegisterCommand(IROut_SendBurst, IROut_StartSendAutoComplete);
  108.  
  109. function IROut_Send(alias_name, remote_name, button_name, status)
  110. {
  111.     if (arguments.length < 4)
  112.     {
  113.         Log("\033[31mNot enough parameters given.\033[0m\n");
  114.         return false;
  115.     }
  116.    
  117.     var remote_storage_name = Storage_GetParameter("RemoteList", remote_name);
  118.    
  119.     if (!remote_storage_name)
  120.     {
  121.         Log("\033[31mNo such remote name in list, " + remote_name + ".\033[0m\n");
  122.         return false;
  123.     }
  124.    
  125.     var button_string = Storage_GetParameter(remote_storage_name, button_name);
  126.    
  127.     if (!button_string)
  128.     {
  129.         Log("\033[31mNo such button " + button_name + " found on remote " + remote + ".\033[0m\n");
  130.         return false;
  131.     }
  132.    
  133.     var button_data = eval("(" + button_string + ")");
  134.    
  135.     if (typeof button_data["protocol"] == 'undefined' || typeof button_data["data"] == 'undefined')
  136.     {
  137.         Log("\033[31mButton data is corrupt.\033[0m\n");
  138.         return false;
  139.     }
  140.    
  141.     return IROut_Send_Raw(alias_name, button_data["protocol"], button_data["data"], status);
  142. }
  143.  
  144. function IROut_StartSend(alias_name, remote_name, button_name)
  145. {
  146.     return IROut_Send(alias_name, remote_name, button_name, "Pressed");
  147. }
  148. Console_RegisterCommand(IROut_StartSend, IROut_StartSendAutoComplete);
  149.  
  150. function IROut_SendBurst(alias_name, remote_name, button_name)
  151. {
  152.     return IROut_Send(alias_name, remote_name, button_name, "Burst");
  153. }
  154. Console_RegisterCommand(IROut_SendBurst, IROut_StartSendAutoComplete);
  155.  
  156. function IROut_SendBurst_Raw(alias_name, protocol, data)
  157. {
  158.     return IROut_Send_Raw(alias_name, protocol, data, "Burst");
  159. }
  160. Console_RegisterCommand(IROut_SendBurst_Raw, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, IROut_Aliases(), IROut_Protocols()); });
  161.  
  162. function IROut_SendDimmer(alias_name, remote_name, button_name, level)
  163. {
  164.     if (arguments.length < 4)
  165.     {
  166.         Log("\033[31mNot enough parameters given.\033[0m\n");
  167.         return false;
  168.     }
  169.    
  170.     var remote_storage_name = Storage_GetParameter("RemoteList", remote_name);
  171.    
  172.     if (!remote_storage_name)
  173.     {
  174.         Log("\033[31mNo such remote name in list, " + remote_name + ".\033[0m\n");
  175.         return false;
  176.     }
  177.    
  178.     var button_string = Storage_GetParameter(remote_storage_name, button_name);
  179.    
  180.     if (!button_string)
  181.     {
  182.         Log("\033[31mNo such button " + button_name + " found on remote " + remote_name + ".\033[0m\n");
  183.         return false;
  184.     }
  185.    
  186.     var button_data = eval("(" + button_string + ")");
  187.    
  188.     if (typeof button_data["protocol"] == 'undefined' || typeof button_data["data"] == 'undefined')
  189.     {
  190.         Log("\033[31mButton data is corrupt.\033[0m\n");
  191.         return false;
  192.     }  
  193.     levelInt = parseInt(level);
  194.     dataInt = parseInt(button_data["data"]);
  195.     if (levelInt  >= 0 && levelInt <= 16) {
  196.         dataInt += 549755813888; //Set MSB
  197.         switch(levelInt) {
  198.           case 0:
  199.             dataInt -= 549755813888; //Clear MSB
  200.  
  201.             var b = dataInt | 1;
  202.  
  203.             dataInt |= 134217728;
  204.            
  205.             var c = dataInt >>> 1;
  206.             dataInt = (c * 2) + (b & 1);
  207.             //dataInt |= 134217728;
  208.             levelInt = 0;
  209.             break;
  210.           case 1:
  211.             levelInt = 15;
  212.             break;
  213.           case 2:
  214.             levelInt = 7;
  215.             break;
  216.           case 3:
  217.             levelInt = 11;
  218.             break;
  219.           case 4:
  220.             levelInt = 3;
  221.             break;
  222.           case 5:
  223.             levelInt = 13;
  224.             break;
  225.           case 6:
  226.             levelInt = 5;
  227.             break;
  228.           case 7:
  229.             levelInt = 9;
  230.             break;
  231.           case 8:
  232.             levelInt = 1;
  233.             break;
  234.           case 9:
  235.             levelInt = 14;
  236.             break;
  237.           case 10:
  238.             levelInt = 6;
  239.             break;
  240.           case 11:
  241.             levelInt = 10;
  242.             break;
  243.           case 12:
  244.             levelInt = 2;
  245.             break;
  246.           case 13:
  247.             levelInt = 12;
  248.             break;
  249.           case 14:
  250.             levelInt = 4;
  251.             break;
  252.           case 15:
  253.             levelInt = 8;
  254.             break;
  255.           case 16:
  256.             levelInt = 0;
  257.             break;
  258.         }
  259.         dataInt += levelInt*4294967296//Add dimmer level
  260.         Log("button_data[protocol]=" + button_data["protocol"] + "\n");
  261.         return IROut_Send_Raw(alias_name, button_data["protocol"], dataInt.toString(), "Burst");   
  262.     } else {
  263.         Log("\033[31mDimmer level out of range [0 -> 16].\033[0m\n");
  264.         return false;
  265.     }
  266. }
  267. Console_RegisterCommand(IROut_SendDimmer, IROut_StartSendAutoComplete);
  268.  
  269.  
  270.  
  271. function IROut_SendDuration(alias_name, remote_name, button_name, duration_ms)
  272. {
  273.     IROut_Send(alias_name, remote_name, button_name, "Pressed");
  274.     Timer_SetTimer(function(timer) {IROut_StopSend(alias_name);}, duration_ms, false);
  275. }
  276. Console_RegisterCommand(IROut_SendDuration, IROut_StartSendAutoComplete);
  277.  
  278.