public bool CheckIfActuatorIsWithinUsageLimits(ISingleSwitchControlDevice dev)
        {
            foreach (var ul in UsageLimits)
            {
                UsageTracker ut = null;

                if (!UsageTracker.TryGetValue(dev.ISEID, out ut))
                {
                    continue;
                }

                int cnt = ut.GetEventCount(ul.TimeSpan, true);

                if (cnt > ul.MaximumTrue)
                {
                    if (dev.State.Value)
                    {
                        LOGGER.Info($"{dev.Name} is above usage limit: {cnt} (max {ul.MaximumTrue} in {ul.TimeSpan}");
                    }

                    return(false);
                }
            }

            return(true);
        }
        private void AddActuatorUsage(ISingleSwitchControlDevice dev)
        {
            if (!UsageTracker.ContainsKey(dev.ISEID))
            {
                UsageTracker.Add(dev.ISEID, new UsageTracker());
            }

            UsageTracker ut = UsageTracker[dev.ISEID];

            ut.SetUsageTrueWins(dev.State.Value);
        }
Esempio n. 3
0
        private void SetAlarmOutputDevicesSate(bool turnOn)
        {
            List <Task> taskList = new List <Task>();

            var alarmDevices = DeviceManager.Devices.Where(w => w.Functions.Contains(Function.Alarm)).ToList();

            foreach (var d in alarmDevices)
            {
                //switch devices
                ISingleSwitchControlDevice switchDevice = d as ISingleSwitchControlDevice;
                if (switchDevice != null)
                {
                    bool newState = turnOn;

                    if (switchDevice.State.Value != newState)
                    {
                        LOGGER.Info($"ALARM Activating '{switchDevice.Name}'");
                        taskList.Add(switchDevice.State.SetValueAsync(newState));
                    }
                }

                /*
                 * //dimmer devices
                 * HMIP_BDT dimmerDevice = d as HMIP_BDT;
                 * if (dimmerDevice != null)
                 * {
                 *  decimal newState = turnOn ? 1.0M : 0.0M;
                 *
                 *  if (dimmerDevice.Level.Value != newState)
                 *      taskList.Add(dimmerDevice.Level.SetValueAsync(newState));
                 * }
                 */

                /* LAUD!
                 *
                 * //smoke detectors
                 * HMIP_SWSD smokeDetector = d as HMIP_SWSD;
                 * if(smokeDetector != null)
                 * {
                 *  ISmokeDetectorDevice_Smoke_Detector_Command_Enum newState = turnOn ? ISmokeDetectorDevice_Smoke_Detector_Command_Enum.INTRUSION_ALARM : ISmokeDetectorDevice_Smoke_Detector_Command_Enum.INTRUSION_ALARM_OFF;
                 *
                 *  if (smokeDetector.Smoke_Detector_Command.Value != newState)
                 *      taskList.Add(smokeDetector.Smoke_Detector_Command.SetValueAsync(newState));
                 * }
                 *
                 */
            }

            if (taskList.Count > 0)
            {
                Task.WaitAll(taskList.ToArray());
            }
        }