more G-Labs products

Author Topic: SmartControl - parameter.LastUpdateTime replacement?  (Read 800 times)

July 03, 2015, 08:46:20 PM
Read 800 times

Boeky

  • **
  • Information
  • Jr. Member
  • Posts: 31
Hi,


I used to have a SmartControl Code running on top of Dimmers in order to control them in the following way :
short press -> toggle
long press -> dim+ or dim-
release -> change dim direction.

This program was running fin until the LastUpdateTime method was removed.
Does anyone knows the replacement method for this?

I tried changing the code but nothing works as fine as it did before. Anyone any solution to this problem;

(The new code I addes is tagged between START and END NEW CODE, the old code is put in comment)

Thx,
Boeky



Code: [Select]
var SMART_CONTROL_ENABLE = "HomeGenie.SmartControl.Enable";
var DIGITAL_INPUT_MODULE_NAME = "HomeGenie.SmartControl.DigitalInputModule";
//var DIGITAL_OUTPUT_MODULE_NAME = "HomeGenie.SmartControl.DigitalOutputModule";

int LEVEL_ON = 1;
double LONG_PRESS_SECONDS = 1.5;
int DIM_AMOUNT = 5;
var DIM_DIRECTION = "down";



//
var smart_devices = Modules.WithFeature(SMART_CONTROL_ENABLE);
//
When.ModuleParameterIsChanging((module, parameter) => {
   
 
    // TODO: the sensor buttons should also be marked with a specific feature
    if (module.IsOfDeviceType("Sensor"))
    {
        if (parameter.Name == "Status.Level")
        {
            var sensorLevel = parameter.DecimalValue;
            var levelTimestamp = parameter.UpdateTime.Ticks;
         
         
            if (sensorLevel == LEVEL_ON)
            {
            Pause(LONG_PRESS_SECONDS);
              if (levelTimestamp == parameter.UpdateTime.Ticks)
              {
       
                   // while the button is kept pressed...
              while (levelTimestamp == parameter.UpdateTime.Ticks)
                    {
                       
                      // Dim all SmartControl enabled dimmers by 5%
smart_devices.Each((mod) =>
  {
                        if (mod.Parameter(DIGITAL_INPUT_MODULE_NAME).Value == module.Instance.Name && mod.Parameter(DIGITAL_INPUT_MODULE_NAME).Value != "")
                            {
                              if(DIM_DIRECTION == "down")
                                {
                                mod.Level -= DIM_AMOUNT;
                                }
                              else
                                {
                                    mod.Level += DIM_AMOUNT;
                                }
                           
                            }
                         
                            return false;
                      });
                }
                   
                    //Changing DIM_DIRECTION
                    if(DIM_DIRECTION == "down")
                    {
                    DIM_DIRECTION = "up"; 
                    }
                    else
                    {
                    DIM_DIRECTION = "down";       
                    }
            } else  // START NEW CODE
                {
                smart_devices.Each((mod) =>
                    {
                        if (mod.Parameter(DIGITAL_INPUT_MODULE_NAME).Value == module.Instance.Name && mod.Parameter(DIGITAL_INPUT_MODULE_NAME).Value != "")
                        {
                            mod.Toggle();
                           
                            //Reset DIM_DIRECTION to down when the lamp is turned on.
                          if(mod.Level > 0)
                            {
                            DIM_DIRECTION = "down";
                            }
                           
                         
                        }
                        return false;
                    });
                }  //END NEW CODE
            }
            //else
            //{
                // timeout before turning it off
                //var endTime = parameter.UpdateTime;
                //var startTime = parameter.LastUpdateTime;
                //var pressDuration = new TimeSpan(endTime.Ticks - startTime.Ticks);
                // short press
                //if (pressDuration.TotalSeconds < LONG_PRESS_SECONDS)
                //{
                    //smart_devices.Each((mod) =>
                    //{
                        //if (mod.Parameter(DIGITAL_INPUT_MODULE_NAME).Value == module.Instance.Name && mod.Parameter(DIGITAL_INPUT_MODULE_NAME).Value != "")
                        //{
                            //mod.Toggle();
                           
                            //Reset DIM_DIRECTION to down when the lamp is turned on.
                          //if(mod.Level > 0)
                            //{
                            //DIM_DIRECTION = "down";
                            //}
                           
                         
                        //}
                        //return false;
                    //});
                //}
             
             
            //}
        }
    }
    return true;
 
     
});
Program.GoBackground();

July 04, 2015, 08:58:50 AM
Reply #1

bkenobi

  • *****
  • Information
  • Global Moderator
  • Posts: 1525
I think the code you want is part of Statistics.  I use the following in my code:
Code: [Select]
mymodule.Parameter("Status.Level").Statistics.LastOn.Timestamp
mymodule.Parameter("Status.Level").Statistics.History[0].Value
mymodule.Parameter("Status.Level").Statistics.History[0].Timestamp

The history list can be set to whatever length you want.  It keeps track of the last n set values.  I use it to see if the last command and the second to last command were the same to trigger a double tap command.