Subversion Repositories HomeAutomation

Rev

Rev 1642 | 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]);
  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.     Log("length=" + length);
  173.    
  174.     args.push(length);
  175.    
  176.     for (var key in variables)
  177.     {
  178.         args.push(key);
  179.         args.push(variables[key]);
  180.     }
  181.    
  182.     return ModuleExport_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
  183. }
  184.  
  185. var Module_MessageAliasLookupFunctions = {};
  186. var Module_OnChangeFunctions = {};
  187. var Module_OnMessageFunctions = {};
  188.  
  189. function Module_RegisterMessageAliasLookup(module_name, callback)
  190. {
  191.     Module_MessageAliasLookupFunctions[module_name] = callback;
  192. }
  193.  
  194. function Module_RegisterToOnChange(alias_name, callback)
  195. {
  196.     if (!Module_OnChangeFunctions[alias_name])
  197.     {
  198.         Module_OnChangeFunctions[alias_name] = [];
  199.     }
  200.    
  201.     Module_OnChangeFunctions[alias_name].push(callback);
  202. }
  203.  
  204. function Module_RegisterToOnMessage(alias_name, callback)
  205. {
  206.     if (!Module_OnMessageFunctions[alias_name])
  207.     {
  208.         Module_OnMessageFunctions[alias_name] = [];
  209.     }
  210.    
  211.     Module_OnMessageFunctions[alias_name].push(callback);
  212. }
  213.  
  214. function Module_OnMessage(full_id, command, variables)
  215. {
  216.     var id_parts = full_id.split(":", 2);
  217.     var aliases_data = {};
  218.    
  219.     if (Module_MessageAliasLookupFunctions[id_parts[0]])
  220.     {
  221.         aliases_data = Module_MessageAliasLookupFunctions[id_parts[0]](id_parts[1], command, variables);
  222.     }
  223.    
  224.     for (var alias_name in alias_data)
  225.     {
  226.         if (Module_OnMessageFunctions[alias_name])
  227.         {
  228.             for (var n in Module_OnMessageFunctions[alias_name])
  229.             {
  230.                 Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
  231.             }
  232.         }
  233.     }
  234. }
  235.  
  236. function Module_OnChange(full_id, available)
  237. {
  238.     var id_parts = full_id.split(":", 2);
  239.    
  240.     var aliases_data = Module_LookupAliases({
  241.         "module_name" : id_parts[0],
  242.         "module_id"   : id_parts[1],
  243.     });
  244.    
  245.     for (var alias_name in alias_data)
  246.     {
  247.         if (Module_OnChangeFunctions[alias_name])
  248.         {
  249.             for (var n in Module_OnChangeFunctions[alias_name])
  250.             {
  251.                 Module_OnChangeFunctions[alias_name][n](alias_name, available);
  252.             }
  253.         }
  254.     }
  255. }
  256.