Subversion Repositories HomeAutomation

Rev

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

  1.  
  2. Require("plugin/module.js");
  3.  
  4. Dimmer_ModuleNames    = [ "Dimmer230", "hwPWM", "softPWM", "SlowPWM", "rfTransceive" ];
  5. Dimmer_SpeedLevels    = function() { return [ 50, 135, 200, 255 ]; };
  6. Dimmer_StrengthLevels = function() { return [ 0, 50, 100, 150, 200, 255 ]; };
  7. Dimmer_StepsLevels    = function() { return [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 ]; };
  8. Dimmer_Directions     = function() { return [ "Increase", "Decrease" ]; };
  9. Dimmer_Channels       = function() { return [ 0 ]; };
  10. Dimmer_Aliases        = function() { return Module_GetAliasNames(Dimmer_ModuleNames); };
  11. Dimmer_AvailableIds   = function() { return Module_GetAvailableIds(Dimmer_ModuleNames); };
  12.  
  13. function Dimmer_StartFade(alias_name, speed, direction)
  14. {
  15.     if (arguments.length < 3)
  16.     {
  17.         Log("\033[31mNot enough parameters given.\033[0m\n");
  18.         return false;
  19.     }
  20.    
  21.     var aliases_data = Module_ResolveAlias(alias_name, Dimmer_ModuleNames);
  22.     var found = false;
  23.    
  24.     for (var name in aliases_data)
  25.     {
  26.         var variables = {
  27.             "Channel"   : aliases_data[name]["specific"]["Channel"],
  28.             "Speed"     : speed,
  29.             "Direction" : direction };
  30.            
  31.             if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Start_Fade", variables))
  32.             {
  33.                 //Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  34.             }
  35.             else
  36.             {
  37.                 Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  38.             }
  39.            
  40.             found = true;
  41.     }
  42.    
  43.     if (!found)
  44.     {
  45.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  46.         return false;
  47.     }
  48.    
  49.     return true;
  50. }
  51. Console_RegisterCommand(Dimmer_StartFade, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Dimmer_Aliases(), Dimmer_SpeedLevels(), Dimmer_Directions()); });
  52.  
  53. function Dimmer_StopFade(alias_name)
  54. {
  55.     if (arguments.length < 1)
  56.     {
  57.         Log("\033[31mNot enough parameters given.\033[0m\n");
  58.         return false;
  59.     }
  60.    
  61.     var aliases_data = Module_ResolveAlias(alias_name, Dimmer_ModuleNames);
  62.     var found = false;
  63.    
  64.     for (var name in aliases_data)
  65.     {
  66.         var variables = {
  67.             "Channel" : aliases_data[name]["specific"]["Channel"] };
  68.            
  69.             if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Stop_Fade", variables))
  70.             {
  71.                 //Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  72.             }
  73.             else
  74.             {
  75.                 Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  76.             }
  77.            
  78.             found = true;
  79.     }
  80.    
  81.     if (!found)
  82.     {
  83.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  84.         return false;
  85.     }
  86.    
  87.     return true;
  88. }
  89. Console_RegisterCommand(Dimmer_StopFade, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Dimmer_Aliases()); });
  90.  
  91. function Dimmer_AbsoluteFade(alias_name, speed, level)
  92. {
  93.     if (arguments.length < 3)
  94.     {
  95.         Log("\033[31mNot enough parameters given.\033[0m\n");
  96.         return false;
  97.     }
  98.    
  99.     var aliases_data = Module_ResolveAlias(alias_name, Dimmer_ModuleNames);
  100.     var found = false;
  101.     var level_set = level;
  102.    
  103.     for (var name in aliases_data)
  104.     {
  105.       if (aliases_data[name]["module_name"] == "hwPWM")
  106.       {
  107.         level_set = level*39;
  108.  
  109.           if (level_set > 9940)
  110.         {
  111.             level_set = 10000;
  112.           }
  113.       }
  114.       else if (aliases_data[name]["module_name"] == "rfTransceive")
  115.       {
  116.         var data = parseInt(aliases_data[name]["specific"]["Data"], 10);
  117.         var level_index = Math.ceil(parseInt(level, 10) / 16);
  118.         var level_values = [ 0, 15, 7, 11, 3, 13, 5, 9, 1, 14, 6, 10, 2, 12, 4, 8, 0 ];
  119.  
  120.         if (level_index === 0)
  121.         {
  122.           var highest_bit = data | 1;
  123.  
  124.           data |= 0x8000000;
  125.  
  126.           var down_shifted_data = data >>> 1;
  127.           data = (down_shifted_data * 2) + (highest_bit & 1);
  128.         }
  129.         else
  130.         {
  131.           data += 0x8000000000; // Set MSB = Dimmer mode
  132.         }
  133.  
  134.         data += level_values[level_index] * 0x100000000; //Add dimmer level
  135.  
  136.         var variables = {
  137.           "Channel"  : aliases_data[name]["specific"]["Channel"],
  138.           "Protocol" : "Nexa2",
  139.           "IRdata"   : data,
  140.           "Status"   : "Burst" };
  141.  
  142.         if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "IR", variables))
  143.         {
  144.           Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  145.  
  146.           var last_value = {};
  147.           var last_value_string = Storage_GetParameter("LastValues", name);
  148.  
  149.           if (last_value_string)
  150.           {
  151.             last_value = eval("(" + last_value_string + ")");
  152.           }
  153.  
  154.           last_value["Level"] = { "value" : level, "timestamp" : get_time() };
  155.  
  156.           Storage_SetParameter("LastValues", name, JSON.stringify(last_value));
  157.         }
  158.         else
  159.         {
  160.           Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  161.         }
  162.  
  163.         found = true;
  164.  
  165.         continue;
  166.       }
  167.       else
  168.       {
  169.         level_set = level;
  170.         }
  171.        
  172.       //Check for undefined Channel parameter in alias
  173.       if (typeof aliases_data[name]["specific"]["Channel"] == 'undefined')
  174.       {
  175.         Log("\033[31mFailed to send command to " + name + ", Alias does not contain specific parameter \"Channel\".\033[0m\n");
  176.         break;
  177.       }
  178.        
  179.         var variables = {
  180.             "Channel"   : aliases_data[name]["specific"]["Channel"],
  181.             "Speed"     : speed,
  182.             "EndValue"  : level_set
  183.         };
  184.        
  185.         if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Abs_Fade", variables))
  186.         {
  187.             //Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  188.         }
  189.         else
  190.         {
  191.             Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  192.         }
  193.        
  194.         found = true;
  195.        
  196.     }
  197.    
  198.     if (!found)
  199.     {
  200.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  201.         return false;
  202.     }
  203.    
  204.     return true;
  205. }
  206. Console_RegisterCommand(Dimmer_AbsoluteFade, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Dimmer_Aliases(), Dimmer_SpeedLevels(), Dimmer_StrengthLevels()); });
  207.  
  208. function Dimmer_RelativeFade(alias_name, speed, direction, steps)
  209. {
  210.     if (arguments.length < 4)
  211.     {
  212.         Log("\033[31mNot enough parameters given.\033[0m\n");
  213.         return false;
  214.     }
  215.    
  216.     var aliases_data = Module_ResolveAlias(alias_name, Dimmer_ModuleNames);
  217.     var found = false;
  218.     var steps_set = steps;
  219.    
  220.     for (var name in aliases_data)
  221.     {
  222.         if (aliases_data[name]["module_name"]=="hwPWM") {
  223.             steps_set = steps*39;
  224.         if (steps_set > 9940) {
  225.           level_set = 10000;
  226.         }
  227.         }      
  228.     else if (aliases_data[name]["module_name"] == "rfTransceive")
  229.     {
  230.        var last_value = { "Level" : { "value" : 0, "timestamp" : 0 } };
  231.         var last_value_string = Storage_GetParameter("LastValues", name);
  232.  
  233.         if (last_value_string)
  234.         {
  235.           last_value = eval("(" + last_value_string + ")");
  236.         }
  237.        
  238.         var current_level = parseInt(last_value["Level"]["value"], 10)
  239.         if (direction == "Decrease")
  240.         {
  241.           current_level -= parseInt(steps,10);
  242.         }
  243.         else
  244.         {
  245.           current_level += parseInt(steps,10);
  246.         }
  247.         if (current_level > 255)
  248.         {
  249.           current_level = 255;
  250.         }
  251.         if (current_level < 0)
  252.         {
  253.           current_level = 0;
  254.         }
  255.       var data = parseInt(aliases_data[name]["specific"]["Data"], 10);
  256.       var level_index = Math.ceil(current_level / 16);
  257.       var level_values = [ 0, 15, 7, 11, 3, 13, 5, 9, 1, 14, 6, 10, 2, 12, 4, 8, 0 ];
  258.  
  259.       if (level_index === 0)
  260.       {
  261.         var highest_bit = data | 1;
  262.  
  263.         data |= 0x8000000;
  264.  
  265.         var down_shifted_data = data >>> 1;
  266.         data = (down_shifted_data * 2) + (highest_bit & 1);
  267.       }
  268.       else
  269.       {
  270.         data += 0x8000000000; // Set MSB = Dimmer mode
  271.       }
  272.  
  273.       data += level_values[level_index] * 0x100000000; //Add dimmer level
  274.  
  275.       var variables = {
  276.         "Channel"  : aliases_data[name]["specific"]["Channel"],
  277.         "Protocol" : "Nexa2",
  278.         "IRdata"   : data,
  279.         "Status"   : "Burst" };
  280.  
  281.       if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "IR", variables))
  282.       {
  283.         //Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  284.  
  285.         var last_value = {};
  286.         var last_value_string = Storage_GetParameter("LastValues", name);
  287.  
  288.         if (last_value_string)
  289.         {
  290.           last_value = eval("(" + last_value_string + ")");
  291.         }
  292.  
  293.         last_value["Level"] = { "value" : current_level, "timestamp" : get_time() };
  294.  
  295.         Storage_SetParameter("LastValues", name, JSON.stringify(last_value));
  296.       }
  297.       else
  298.       {
  299.         Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  300.       }
  301.  
  302.       found = true;
  303.  
  304.       continue;
  305.     }  
  306.         else {
  307.             steps_set = steps;
  308.     }
  309.         var variables = {
  310.             "Channel"   : aliases_data[name]["specific"]["Channel"],
  311.             "Speed"     : speed,
  312.             "Direction" : direction,
  313.             "Steps"     : steps_set
  314.         };
  315.        
  316.         //Check for undefined Channel parameter in alias
  317.         if (typeof aliases_data[name]["specific"]["Channel"] == 'undefined') {
  318.             Log("\033[31mFailed to send command to " + name + ", Alias does not contain specific parameter \"Channel\".\033[0m\n");
  319.             break;
  320.         }
  321.        
  322.         if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Rel_Fade", variables))
  323.         {
  324.             //Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  325.         }
  326.         else
  327.         {
  328.             Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  329.         }
  330.        
  331.         found = true;
  332.     }
  333.    
  334.     if (!found)
  335.     {
  336.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  337.         return false;
  338.     }
  339.    
  340.     return true;
  341. }
  342. Console_RegisterCommand(Dimmer_RelativeFade, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Dimmer_Aliases(), Dimmer_SpeedLevels(), Dimmer_Directions(), Dimmer_StepsLevels()); });
  343.  
  344. function Dimmer_Demo(alias_name, speed, steps)
  345. {
  346.     if (arguments.length < 3)
  347.     {
  348.         Log("\033[31mNot enough parameters given.\033[0m\n");
  349.         return false;
  350.     }
  351.    
  352.     var aliases_data = Module_ResolveAlias(alias_name, Dimmer_ModuleNames);
  353.     var found = false;
  354.     var steps_set = steps;
  355.    
  356.     for (var name in aliases_data)
  357.     {
  358.         if (aliases_data[name]["module_name"]=="hwPWM") {
  359.             steps_set = steps*39;
  360.         if (steps_set > 9940) {
  361.           level_set = 10000;
  362.         }
  363.         } else {
  364.             steps_set = steps;
  365.     }
  366.         var variables = {
  367.             "Channel"   : aliases_data[name]["specific"]["Channel"],
  368.             "Speed"     : speed,
  369.             "Steps"     : steps_set
  370.         };
  371.        
  372.         //Check for undefined Channel parameter in alias
  373.         if (typeof aliases_data[name]["specific"]["Channel"] == 'undefined') {
  374.             Log("\033[31mFailed to send command to " + name + ", Alias does not contain specific parameter \"Channel\".\033[0m\n");
  375.             break;
  376.         }
  377.        
  378.         if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Demo", variables))
  379.         {
  380.             //Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
  381.         }
  382.         else
  383.         {
  384.             Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
  385.         }
  386.        
  387.         found = true;
  388.     }
  389.    
  390.     if (!found)
  391.     {
  392.         Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
  393.         return false;
  394.     }
  395.    
  396.     return true;
  397. }
  398. Console_RegisterCommand(Dimmer_Demo, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Dimmer_Aliases(), Dimmer_SpeedLevels(), Dimmer_StepsLevels()); });
  399.  
  400. function Dimmer_OnMessage(module_name, module_id, command, variables)
  401. {
  402.     if (in_array(Dimmer_ModuleNames, module_name))
  403.     {
  404.         var aliases_data = Module_LookupAliases({
  405.             "module_name" : module_name,
  406.             "module_id"   : module_id,
  407.             "group"       : false
  408.         });
  409.        
  410.         switch (command)
  411.         {
  412.             case "Netinfo":
  413.             {
  414.                 for (var alias_name in aliases_data)
  415.                 {
  416.                     if (aliases_data[alias_name]["specific"]["Channel"] != variables["Channel"])
  417.                     {
  418.                         continue;
  419.                     }
  420.                    
  421.                     var last_value = {};
  422.                     var last_value_string = Storage_GetParameter("LastValues", alias_name);
  423.                    
  424.                     if (last_value_string)
  425.                     {
  426.                         last_value = eval("(" + last_value_string + ")");
  427.                     }
  428.                    
  429.                     last_value["Connection"] = { "value" : variables["Connection"], "timestamp" : get_time() };
  430.                     last_value["Frequency"] = { "value" : variables["Frequency"], "timestamp" : get_time() };
  431.                     last_value["Level"] = { "value" : variables["DimmerValue"], "timestamp" : get_time() };
  432.                    
  433.                     Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
  434.                 }
  435.                
  436.                 break;
  437.             }
  438.             case "Pwm":
  439.             {
  440.                 for (var alias_name in aliases_data)
  441.                 {
  442.                     if (aliases_data[alias_name]["specific"]["Channel"] != variables["Channel"])
  443.                     {
  444.                         continue;
  445.                     }
  446.                    
  447.                     var last_value = {};
  448.                     var last_value_string = Storage_GetParameter("LastValues", alias_name);
  449.                    
  450.                     if (last_value_string)
  451.                     {
  452.                         last_value = eval("(" + last_value_string + ")");
  453.                     }
  454.                     var value = 0 + variables["Value"];
  455.                     value = value / 39;
  456.                     value = parseInt(value).toString();
  457.                     last_value["Level"] = { "value" : value, "timestamp" : get_time() };
  458.                    
  459.                     Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
  460.                 }
  461.                
  462.                 break;
  463.             }
  464.         }
  465.     }
  466. }
  467. Module_RegisterToOnMessage("all", Dimmer_OnMessage);
  468.