Subversion Repositories HomeAutomation

Rev

Rev 1644 | Rev 1647 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. Require("plugin/storage.js");
  3.  
  4. function Module_CreateAliasGroupAutoComplete(args)
  5. {
  6.     // args[0] == command name
  7.     var arg_index = args.length - 2;
  8.    
  9.     if (arg_index == 0)
  10.     {
  11.         return Module_GetAliasNames();
  12.     }
  13.     else if (arg_index == 1)
  14.     {
  15.         return [ "Dimmer230", "irTransmit" ];
  16.     }
  17.     else if (arg_index >= 2)
  18.     {
  19.         return Module_GetAliasNames([ args[2] ])
  20.     }
  21.    
  22.     return [];
  23. }
  24.  
  25. function Module_CreateAliasGroup(alias_group_name, module_type, alias_name1, alias_name2)
  26. {
  27.     if (arguments.length < 3)
  28.     {
  29.         throw("Not enought parameters given");
  30.     }
  31.    
  32.     alias_group_name = arguments[0];
  33.     module_type = arguments[1];
  34.     var aliases = [];
  35.    
  36.     for (var n = 2; n < arguments.length; n++)
  37.     {
  38.         if (arguments[n].length > 0)
  39.         {
  40.             var aliases_data = Module_ResolveAlias(arguments[n]);
  41.             aliases.push(arguments[n]);
  42.         }
  43.     }
  44.    
  45.     if (aliases.length == 0)
  46.     {
  47.         throw("No valid aliases were found, aborting creation of group alias");
  48.     }
  49.    
  50.     var alias_data = {
  51.         "group"       : true,
  52.         "name"        : alias_group_name,
  53.         "module_name" : module_type,
  54.         "aliases"     : aliases
  55.     };
  56.    
  57.     return Storage_SetParameter("alias", alias_group_name, JSON.stringify(alias_data));
  58. }
  59. Console_RegisterCommand(Module_CreateAliasGroup, Module_CreateAliasGroupAutoComplete);
  60.  
  61. function Module_ResolveAlias(alias_name, filter_module_names)
  62. {
  63.     var aliases_data = {};
  64.     var alias_data_string = Storage_GetParameter("alias", alias_name);
  65.    
  66.     if (alias_data_string)
  67.     {
  68.         var alias_data = eval("(" + alias_data_string + ")");
  69.        
  70.         if (alias_data["group"])
  71.         {
  72.             for (var n in alias_data["aliases"])
  73.             {
  74.                 var aliases_data_sub = Module_ResolveAlias(alias_data["aliases"][n], filter_module_names);
  75.                
  76.                 for (var name in aliases_data_sub)
  77.                 {
  78.                     aliases_data[name] = aliases_data_sub[name];
  79.                 }
  80.             }
  81.         }
  82.         else
  83.         {
  84.             if (in_array(filter_module_names, alias_data["module_name"]))
  85.             {
  86.                 aliases_data[alias_name] = alias_data;
  87.             }
  88.         }
  89.     }
  90.    
  91.     return aliases_data;
  92. }
  93.  
  94. function Module_LookupAliases(match_filter)
  95. {
  96.     var aliases_data_filtered = {};
  97.     var aliases_data = Storage_GetParameters("alias");
  98.    
  99.     for (var name in aliases_data)
  100.     {
  101.         var alias_data = eval("(" + aliases_data[name] + ")");
  102.        
  103.         var valid = true;
  104.        
  105.         for (var key in match_filter)
  106.         {
  107.             if (alias_data[key] != match_filter[key])
  108.             {
  109.                 valid = false;
  110.                 break;
  111.             }
  112.         }
  113.        
  114.         if (valid)
  115.         {
  116.             aliases_data_filtered[name] = alias_data;
  117.         }
  118.     }
  119.    
  120.     return aliases_data_filtered;
  121. }
  122.  
  123. function Module_GetAliasNames(filter_module_names)
  124. {
  125.     var aliases_name_filtered = [];
  126.     var aliases_data = Storage_GetParameters("alias");
  127.    
  128.     for (var name in aliases_data)
  129.     {
  130.         var alias_data = eval("(" + aliases_data[name] + ")");
  131.        
  132.         if (!filter_module_names || in_array(filter_module_names, alias_data["module_name"]))
  133.         {
  134.             aliases_name_filtered.push(name)
  135.         }
  136.     }
  137.    
  138.     return aliases_name_filtered;
  139. }
  140.  
  141. function Module_GetAvailableIds(filter_module_names)
  142. {
  143.     var result_list = [];
  144.     var available_modules = ModuleExport_GetAvailableModules();
  145.    
  146.     for (var n in available_modules)
  147.     {
  148.         var id_parts = available_modules[n].split(":", 2);
  149.        
  150.         if (in_array(filter_module_names, id_parts[0]))
  151.         {
  152.             result_list.push(id_parts[1]);
  153.         }
  154.     }
  155.    
  156.     return result_list;
  157. }
  158.  
  159. function Module_SendMessage(module_name, module_id, command, variables)
  160. {
  161.     var args = [];
  162.    
  163.     args.push(module_name + ":" + module_id);
  164.     args.push(command);
  165.    
  166.     var length = 0;
  167.     for (var key in variables)
  168.     {
  169.         length++;
  170.     }
  171.    
  172.     args.push(length);
  173.    
  174.     for (var key in variables)
  175.     {
  176.         args.push(key);
  177.         args.push(variables[key]);
  178.     }
  179.    
  180.     return ModuleExport_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
  181. }
  182.  
  183. var Module_MessageAliasLookupFunctions = {};
  184. var Module_OnChangeFunctions = {};
  185. var Module_OnMessageFunctions = {};
  186.  
  187. function Module_RegisterMessageAliasLookup(module_name, callback)
  188. {
  189.     Module_MessageAliasLookupFunctions[module_name] = callback;
  190. }
  191.  
  192. function Module_RegisterToOnChange(alias_name, callback)
  193. {
  194.     if (!Module_OnChangeFunctions[alias_name])
  195.     {
  196.         Module_OnChangeFunctions[alias_name] = [];
  197.     }
  198.    
  199.     Module_OnChangeFunctions[alias_name].push(callback);
  200. }
  201.  
  202. function Module_RegisterToOnMessage(alias_name, callback)
  203. {
  204.     if (!Module_OnMessageFunctions[alias_name])
  205.     {
  206.         Module_OnMessageFunctions[alias_name] = [];
  207.     }
  208.    
  209.     Module_OnMessageFunctions[alias_name].push(callback);
  210. }
  211.  
  212. function Module_OnMessage(full_id, command, variables)
  213. {
  214.     var id_parts = full_id.split(":", 2);
  215.     var aliases_data = {};
  216.    
  217.     if (Module_MessageAliasLookupFunctions[id_parts[0]])
  218.     {
  219.         aliases_data = Module_MessageAliasLookupFunctions[id_parts[0]](id_parts[1], command, variables);
  220.     }
  221.    
  222.     for (var alias_name in alias_data)
  223.     {
  224.         if (Module_OnMessageFunctions[alias_name])
  225.         {
  226.             for (var n in Module_OnMessageFunctions[alias_name])
  227.             {
  228.                 Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
  229.             }
  230.         }
  231.     }
  232. }
  233.  
  234. function Module_OnChange(full_id, available)
  235. {
  236.     var id_parts = full_id.split(":", 2);
  237.    
  238.     var aliases_data = Module_LookupAliases({
  239.         "module_name" : id_parts[0],
  240.         "module_id"   : id_parts[1],
  241.     });
  242.    
  243.     for (var alias_name in alias_data)
  244.     {
  245.         if (Module_OnChangeFunctions[alias_name])
  246.         {
  247.             for (var n in Module_OnChangeFunctions[alias_name])
  248.             {
  249.                 Module_OnChangeFunctions[alias_name][n](alias_name, available);
  250.             }
  251.         }
  252.     }
  253. }
  254.