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); }
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()); } }