示例#1
0
        private bool VerifyProgramCondition(ProgramCondition c)
        {
            bool   returnValue     = false;
            string comparisonValue = c.ComparisonValue;

            //
            if (c.Domain == Domains.HomeAutomation_HomeGenie && c.Target == "Automation" && (c.Property == "Scheduler.TimeEvent" || c.Property == "Scheduler.CronEvent"))
            {
                return(homegenie.ProgramEngine.SchedulerService.IsScheduling(c.ComparisonValue));
            }
            //
            // if the comparison value starts with ":", then the value is read from another module property
            // eg: ":HomeAutomation.X10/B3/Level"
            if (comparisonValue.StartsWith(":"))
            {
                string[] propertyPath = comparisonValue.Substring(1).Split('/');
                comparisonValue = "";
                if (propertyPath.Length >= 3)
                {
                    string domain       = propertyPath[0];
                    string address      = propertyPath[1];
                    string propertyName = propertyPath[2];
                    var    targetModule = homegenie.Modules.Find(m => m.Domain == domain && m.Address == address);
                    if (targetModule == null)
                    {
                        // abbreviated path, eg: ":X10/B3/Level"
                        targetModule = homegenie.Modules.Find(m => m.Domain.EndsWith("." + domain) && m.Address == address);
                    }
                    //
                    if (targetModule != null)
                    {
                        var mprop = Utility.ModuleParameterGet(targetModule, propertyName);
                        if (mprop != null)
                        {
                            comparisonValue = mprop.Value;
                        }
                    }
                }
            }
            //
            // the following Programs.* parameters are deprecated, just left for compatibility with HG < r340
            //
            ModuleParameter parameter = null;

            if (c.Domain == Domains.HomeAutomation_HomeGenie && c.Target == "Automation")
            {
                parameter      = new ModuleParameter();
                parameter.Name = c.Property;
                switch (parameter.Name)
                {
                case "Programs.DateDay":
                case "Scheduler.DateDay":
                    parameter.Value = DateTime.Now.Day.ToString();
                    break;

                case "Programs.DateMonth":
                case "Scheduler.DateMonth":
                    parameter.Value = DateTime.Now.Month.ToString();
                    break;

                case "Programs.DateDayOfWeek":
                case "Scheduler.DateDayOfWeek":
                    parameter.Value = ((int)DateTime.Now.DayOfWeek).ToString();
                    break;

                case "Programs.DateYear":
                case "Scheduler.DateYear":
                    parameter.Value = DateTime.Now.Year.ToString();
                    break;

                case "Programs.DateHour":
                case "Scheduler.DateHour":
                    parameter.Value = DateTime.Now.Hour.ToString();
                    break;

                case "Programs.DateMinute":
                case "Scheduler.DateMinute":
                    parameter.Value = DateTime.Now.Minute.ToString();
                    break;

                case "Programs.Date":
                case "Scheduler.Date":
                    parameter.Value = DateTime.Now.ToString("YY-MM-dd");
                    break;

                case "Programs.Time":
                case "Scheduler.Time":
                    parameter.Value = DateTime.Now.ToString("HH:mm:ss");
                    break;

                case "Programs.DateTime":
                case "Scheduler.DateTime":
                    parameter.Value = DateTime.Now.ToString("YY-MM-dd HH:mm:ss");
                    break;
                }
            }
            else
            {
                Module module = homegenie.Modules.Find(m => m.Address == c.Target && m.Domain == c.Domain);
                parameter = module.Properties.Find(delegate(ModuleParameter mp)
                {
                    return(mp.Name == c.Property);
                });
            }
            //
            if (parameter != null)
            {
                IComparable lvalue = parameter.Value;
                IComparable rvalue = comparisonValue;
                //
                double   dval  = 0;
                DateTime dtval = new DateTime();
                //
                if (double.TryParse(
                        parameter.Value.Replace(",", "."),
                        NumberStyles.Float | NumberStyles.AllowDecimalPoint,
                        CultureInfo.InvariantCulture,
                        out dval
                        ))
                {
                    lvalue = dval;
                    rvalue = double.Parse(
                        comparisonValue.Replace(",", "."),
                        NumberStyles.Float | NumberStyles.AllowDecimalPoint,
                        CultureInfo.InvariantCulture
                        );
                }
                else if (DateTime.TryParse(parameter.Value, out dtval))
                {
                    lvalue = dtval;
                    rvalue = DateTime.Parse(comparisonValue);
                }
                //
                int comparisonresult = lvalue.CompareTo(rvalue);
                if (c.ComparisonOperator == ComparisonOperator.LessThan && comparisonresult < 0)
                {
                    returnValue = true;
                }
                else if (c.ComparisonOperator == ComparisonOperator.Equals && comparisonresult == 0)
                {
                    returnValue = true;
                }
                else if (c.ComparisonOperator == ComparisonOperator.GreaterThan && comparisonresult > 0)
                {
                    returnValue = true;
                }
            }
            return(returnValue);
        }
示例#2
0
 private bool VerifyProgramCondition(ProgramCondition c)
 {
     bool returnValue = false;
     string comparisonValue = c.ComparisonValue;
     //
     if (c.Domain == Domains.HomeAutomation_HomeGenie && c.Target == "Automation" && (c.Property == "Scheduler.TimeEvent" || c.Property == "Scheduler.CronEvent"))
     {
         return homegenie.ProgramEngine.SchedulerService.IsScheduling(c.ComparisonValue);
     }
     //
     // if the comparison value starts with ":", then the value is read from another module property
     // eg: ":HomeAutomation.X10/B3/Level"
     if (comparisonValue.StartsWith(":"))
     {
         string[] propertyPath = comparisonValue.Substring(1).Split('/');
         comparisonValue = "";
         if (propertyPath.Length >= 3)
         {
             string domain = propertyPath[0];
             string address = propertyPath[1];
             string propertyName = propertyPath[2];
             var targetModule = homegenie.Modules.Find(m => m.Domain == domain && m.Address == address);
             if (targetModule == null)
             {
                 // abbreviated path, eg: ":X10/B3/Level"
                 targetModule = homegenie.Modules.Find(m => m.Domain.EndsWith("." + domain) && m.Address == address);
             }
             //
             if (targetModule != null)
             {
                 var mprop = Utility.ModuleParameterGet(targetModule, propertyName);
                 if (mprop != null)
                 {
                     comparisonValue = mprop.Value;
                 }
             }
         }
     }
     //
     // the following Programs.* parameters are deprecated, just left for compatibility with HG < r340
     //
     ModuleParameter parameter = null;
     if (c.Domain == Domains.HomeAutomation_HomeGenie && c.Target == "Automation")
     {
         parameter = new ModuleParameter();
         parameter.Name = c.Property;
         switch (parameter.Name)
         {
         case "Programs.DateDay":
         case "Scheduler.DateDay":
             parameter.Value = DateTime.Now.Day.ToString();
             break;
         case "Programs.DateMonth":
         case "Scheduler.DateMonth":
             parameter.Value = DateTime.Now.Month.ToString();
             break;
         case "Programs.DateDayOfWeek":
         case "Scheduler.DateDayOfWeek":
             parameter.Value = ((int)DateTime.Now.DayOfWeek).ToString();
             break;
         case "Programs.DateYear":
         case "Scheduler.DateYear":
             parameter.Value = DateTime.Now.Year.ToString();
             break;
         case "Programs.DateHour":
         case "Scheduler.DateHour":
             parameter.Value = DateTime.Now.Hour.ToString();
             break;
         case "Programs.DateMinute":
         case "Scheduler.DateMinute":
             parameter.Value = DateTime.Now.Minute.ToString();
             break;
         case "Programs.Date":
         case "Scheduler.Date":
             parameter.Value = DateTime.Now.ToString("YY-MM-dd");
             break;
         case "Programs.Time":
         case "Scheduler.Time":
             parameter.Value = DateTime.Now.ToString("HH:mm:ss");
             break;
         case "Programs.DateTime":
         case "Scheduler.DateTime":
             parameter.Value = DateTime.Now.ToString("YY-MM-dd HH:mm:ss");
             break;
         }
     }
     else
     {
         Module module = homegenie.Modules.Find(m => m.Address == c.Target && m.Domain == c.Domain);
         parameter = module.Properties.Find(delegate(ModuleParameter mp)
         {
             return mp.Name == c.Property;
         });
     }
     //
     if (parameter != null)
     {
         IComparable lvalue = parameter.Value;
         IComparable rvalue = comparisonValue;
         //
         double dval = 0;
         DateTime dtval = new DateTime();
         //
         if (double.TryParse(
                 parameter.Value.Replace(",", "."),
                 NumberStyles.Float | NumberStyles.AllowDecimalPoint,
                 CultureInfo.InvariantCulture,
                 out dval
             ))
         {
             lvalue = dval;
             rvalue = double.Parse(
                 comparisonValue.Replace(",", "."),
                 NumberStyles.Float | NumberStyles.AllowDecimalPoint,
                 CultureInfo.InvariantCulture
             );
         }
         else if (DateTime.TryParse(parameter.Value, out dtval))
         {
             lvalue = dtval;
             rvalue = DateTime.Parse(comparisonValue);
         }
         //
         int comparisonresult = lvalue.CompareTo(rvalue);
         if (c.ComparisonOperator == ComparisonOperator.LessThan && comparisonresult < 0)
         {
             returnValue = true;
         }
         else if (c.ComparisonOperator == ComparisonOperator.Equals && comparisonresult == 0)
         {
             returnValue = true;
         }
         else if (c.ComparisonOperator == ComparisonOperator.GreaterThan && comparisonresult > 0)
         {
             returnValue = true;
         }
     }
     return returnValue;
 }