Пример #1
0
        /// <summary>
        /// Attempts to get current registration information for a USB Fan, if it was registered.
        /// </summary>
        /// <param name="fan">USB Fan to query information for.</param>
        /// <param name="temperatureSensor">Temperature sensor fan is tied to.</param>
        /// <param name="celsiusThreshold">Warmest allowd reading before fan cooling is automated.</param>
        /// <returns>true if registration information was queried; false otherwise.</returns>
        internal bool TryGetRegistrationInfo(Fan fan,
                                             out TemperatureSensor temperatureSensor,
                                             out Single celsiusThreshold)
        {
            bool result = false;
            Tuple <TemperatureSensor, Single> value = null;

            temperatureSensor = null;
            celsiusThreshold  = Single.NaN;

            //Parameter Validations.
            if (fan == null)
            {
                throw new ArgumentNullException("Fan fan");
            }

            //Check our cache, which is synchronized.
            if (m_registeredFansDict.TryGetValue(fan, out value) == true)
            {
                //Set outputs.
                temperatureSensor = value.Item1;
                celsiusThreshold  = value.Item2;

                result = true;
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="mooseBoxRESTAPI">Instance of a versioned MooseBox REST API.</param>
        /// <param name="registeredAlarms">Current MooseBox temperature alarm configuration to synchronize instance to.</param>
        internal TemperatureAlarm(IMooseBoxRESTAPI mooseBoxRESTAPI, List <TemperatureAlarmConfig> registeredAlarms)
        {
            //Parameter Validations.
            if (mooseBoxRESTAPI == null)
            {
                throw new ArgumentNullException("IMooseBoxRESTAPI mooseBoxRESTAPI");
            }

            if (registeredAlarms == null)
            {
                throw new ArgumentNullException("List<TemperatureAlarmConfig> registeredAlarms");
            }

            //Set Members.
            m_mooseBoxRESTAPI = mooseBoxRESTAPI;

            m_registeredAlarmsDict = new Dictionary <Tuple <TemperatureSensor, string>, Tuple <Single, Single> >();

            //Configure N Temperature Alarms if we have something to configure from.
            foreach (var registeredAlarm in registeredAlarms)
            {
                TemperatureSensor temperatureSensor = new TemperatureSensor(registeredAlarm.SerialNumber, mooseBoxRESTAPI);

                foreach (var subscriber in registeredAlarm.Subscribers)
                {
                    m_registeredAlarmsDict.Add(new Tuple <TemperatureSensor, string>(temperatureSensor, subscriber.Email),
                                               new Tuple <Single, Single>(subscriber.CelsiusMin, subscriber.CelsiusMax));
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Unregisteres a temperature alarm from MooseBox.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor with the registered alarm.</param>
        /// <param name="emailAddress">Email address to unregister from sensor.</param>
        /// <returns>Asynchronous Processing Task.</returns>
        internal async Task Unregister(TemperatureSensor temperatureSensor, string emailAddress)
        {
            Tuple <TemperatureSensor, string> key = Tuple.Create(temperatureSensor, emailAddress);

            //Parameter Validations.
            if (temperatureSensor == null)
            {
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");
            }

            if (string.IsNullOrEmpty(emailAddress) == true)
            {
                throw new ArgumentNullException("string emailAddress");
            }

            //Are we registered?
            if (m_registeredAlarmsDict.ContainsKey(key) == true)
            {
                //Unregister it from MooseBox.
                await m_mooseBoxRESTAPI.UnregisterTemperatureAlarm(emailAddress, temperatureSensor.SerialNumber);

                //Remove it from local cache.
                m_registeredAlarmsDict.Remove(key);
            }
        }
Пример #4
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="mooseBoxRESTAPI">Instance to a versioned MooseBox REST API.</param>
        /// <param name="registeredFans">Current MooseBox Fan Automation config to build instance from.</param>
        internal FanAutomation(IMooseBoxRESTAPI mooseBoxRESTAPI, List<FanAutomationConfig> registeredFans)
        {
            //Parameter Validations.
            if (mooseBoxRESTAPI == null)
                throw new ArgumentNullException("IMooseBoxRESTAPI mooseBoxRESTAPI");

            if (registeredFans == null)
                throw new ArgumentNullException("List<FanAutomationConfig> registeredFans");

            //Set Members.
            m_mooseBoxRESTAPI = mooseBoxRESTAPI;

            m_registeredFansDict = new Dictionary<Fan, Tuple<TemperatureSensor, Single>>();

            //Populate cache if we're building from a config object.
            foreach (var registeredFan in registeredFans)
            {
                TemperatureSensor temperatureSensor = new TemperatureSensor(registeredFan.SerialNumber, mooseBoxRESTAPI);

                foreach (var fanConfig in registeredFan.FansConfig)
                {
                    Fan fan = new Fan(fanConfig.FanNumber, mooseBoxRESTAPI);

                    m_registeredFansDict[fan] = new Tuple<TemperatureSensor, Single>(temperatureSensor, fanConfig.PowerOnThresholdCelsius);
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="mooseBoxRESTAPI">Instance to a versioned MooseBox REST API.</param>
        /// <param name="registeredFans">Current MooseBox Fan Automation config to build instance from.</param>
        internal FanAutomation(IMooseBoxRESTAPI mooseBoxRESTAPI, List <FanAutomationConfig> registeredFans)
        {
            //Parameter Validations.
            if (mooseBoxRESTAPI == null)
            {
                throw new ArgumentNullException("IMooseBoxRESTAPI mooseBoxRESTAPI");
            }

            if (registeredFans == null)
            {
                throw new ArgumentNullException("List<FanAutomationConfig> registeredFans");
            }

            //Set Members.
            m_mooseBoxRESTAPI = mooseBoxRESTAPI;

            m_registeredFansDict = new Dictionary <Fan, Tuple <TemperatureSensor, Single> >();

            //Populate cache if we're building from a config object.
            foreach (var registeredFan in registeredFans)
            {
                TemperatureSensor temperatureSensor = new TemperatureSensor(registeredFan.SerialNumber, mooseBoxRESTAPI);

                foreach (var fanConfig in registeredFan.FansConfig)
                {
                    Fan fan = new Fan(fanConfig.FanNumber, mooseBoxRESTAPI);

                    m_registeredFansDict[fan] = new Tuple <TemperatureSensor, Single>(temperatureSensor, fanConfig.PowerOnThresholdCelsius);
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Compares this instance of TemperatureSensor against another for value equality.
        /// </summary>
        /// <param name="obj">Instance to compare against.</param>
        /// <returns>true if equal; false otherwise.</returns>
        public override bool Equals(object obj)
        {
            bool result             = true;
            TemperatureSensor other = obj as TemperatureSensor;

            if (other != null)
            {
                result &= (this.m_serialNumber == other.m_serialNumber);
            }
            else
            {
                result = false;
            }

            return(result);
        }
Пример #7
0
        /// <summary>
        /// Registers a temperature alarm with MooseBox.  It a temperature reading goes lower or higher than
        /// the acceptable thresholds, MooseBox will attempt to email receipiant indicating a problem.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor to register alarm with.</param>
        /// <param name="emailAddress">Email address to broadcast alerts to.</param>
        /// <param name="celsiusMin">Coldest acceptable temperature threshold.</param>
        /// <param name="celsiusMax">Warmest acceptable temperature threshold.</param>
        /// <returns>Asynchronous Processing Task.</returns>
        internal async Task Register(TemperatureSensor temperatureSensor,
                                     string emailAddress,
                                     Single celsiusMin,
                                     Single celsiusMax)
        {
            bool unregisterPrev          = false;
            Tuple <Single, Single> value = null;

            //Parameter Validations.
            if (temperatureSensor == null)
            {
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");
            }

            if (string.IsNullOrEmpty(emailAddress) == true)
            {
                throw new ArgumentNullException("string emailAddress");
            }

            //Is this already registered?
            if (m_registeredAlarmsDict.TryGetValue(Tuple.Create(temperatureSensor, emailAddress), out value) == true)
            {
                Debug.Assert(value != null);

                if (celsiusMin == value.Item1 && celsiusMax == value.Item2)
                {
                    return; //Nothing to do!
                }
                unregisterPrev = true;
            }

            //If it's already registered, unregister it first.
            if (unregisterPrev == true)
            {
                await m_mooseBoxRESTAPI.UnregisterTemperatureAlarm(emailAddress, temperatureSensor.SerialNumber);
            }

            //Register the temperature alarm.
            await m_mooseBoxRESTAPI.RegisterTemperatureAlarm(temperatureSensor.SerialNumber,
                                                             celsiusMin,
                                                             celsiusMax,
                                                             emailAddress);

            //Update local cache.
            m_registeredAlarmsDict[Tuple.Create(temperatureSensor, emailAddress)] = Tuple.Create(celsiusMin, celsiusMax);
        }
Пример #8
0
        /// <summary>
        /// Registers a fan for automation with an associated temperature sensor.
        /// </summary>
        /// <param name="fan">USB Fan to register.</param>
        /// <param name="temperatureSensor">Temperature sensor to register against.</param>
        /// <param name="celsiusThreshold">Warmest allowable reading before automating fan cooling.</param>
        /// <returns>Asynchronous Processing Task.</returns>
        internal async Task Register(Fan fan, TemperatureSensor temperatureSensor, Single celsiusThreshold)
        {
            bool unregisterPrev = false;
            Tuple <TemperatureSensor, Single> value = null;

            //Parameter Validations.
            if (fan == null)
            {
                throw new ArgumentNullException("Fan fan");
            }

            if (temperatureSensor == null)
            {
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");
            }

            //Is it already registered?  Are we changing?
            if (m_registeredFansDict.TryGetValue(fan, out value) == true)
            {
                Debug.Assert(value != null);
                Debug.Assert(value.Item1 != null);

                if (value.Item1.Equals(temperatureSensor) == true && value.Item2 == celsiusThreshold)
                {
                    return; //Nothing to do!
                }
                unregisterPrev = true;
            }

            //User is requesting an overwrite, which is an unregistration first.
            if (unregisterPrev == true)
            {
                await m_mooseBoxRESTAPI.UnegisterFanAutomation(fan.Number);
            }

            //Register the new fan information.
            await m_mooseBoxRESTAPI.RegisterFanAutomation(fan.Number,
                                                          temperatureSensor.SerialNumber,
                                                          celsiusThreshold);

            //Update the local cache.
            m_registeredFansDict[fan] = new Tuple <TemperatureSensor, Single>(temperatureSensor, celsiusThreshold);
        }
Пример #9
0
        /// <summary>
        /// Queries all registered entries associated with a singular temperature sensor.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor to lookup all registered alarms from.</param>
        /// <param name="registeredAlarms">[0...N] temperature alarms registration information.</param>
        /// <returns>true if registration information was queried; false otherwise.</returns>
        /// <remarks>O(N)</remarks>
        internal bool TryGetRegistrationInfo(TemperatureSensor temperatureSensor,
                                             out List <Tuple <string, Single, Single> > registeredAlarms)
        {
            registeredAlarms = new List <Tuple <string, Single, Single> >();

            //Parameter Validations.
            if (temperatureSensor == null)
            {
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");
            }

            //Enumerate each entry in the dictionary associated with this sensor.
            foreach (var kvp in m_registeredAlarmsDict)
            {
                if (kvp.Key.Item1.Equals(temperatureSensor) == true)
                {
                    registeredAlarms.Add(Tuple.Create(kvp.Key.Item2, kvp.Value.Item1, kvp.Value.Item2));
                }
            }

            return(registeredAlarms.Count > 0);
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="mooseBoxRESTAPI">Instance of a versioned MooseBox REST API.</param>
        /// <param name="registeredAlarms">Current MooseBox temperature alarm configuration to synchronize instance to.</param>
        internal TemperatureAlarm(IMooseBoxRESTAPI mooseBoxRESTAPI, List<TemperatureAlarmConfig> registeredAlarms)
        {
            //Parameter Validations.
            if (mooseBoxRESTAPI == null)
                throw new ArgumentNullException("IMooseBoxRESTAPI mooseBoxRESTAPI");

            if (registeredAlarms == null)
                throw new ArgumentNullException("List<TemperatureAlarmConfig> registeredAlarms");

            //Set Members.
            m_mooseBoxRESTAPI = mooseBoxRESTAPI;

            m_registeredAlarmsDict = new Dictionary<Tuple<TemperatureSensor, string>, Tuple<Single, Single>>();

            //Configure N Temperature Alarms if we have something to configure from.
            foreach (var registeredAlarm in registeredAlarms)
            {
                TemperatureSensor temperatureSensor = new TemperatureSensor(registeredAlarm.SerialNumber, mooseBoxRESTAPI);

                foreach (var subscriber in registeredAlarm.Subscribers)
                    m_registeredAlarmsDict.Add(new Tuple<TemperatureSensor, string>(temperatureSensor, subscriber.Email),
                                               new Tuple<Single, Single>(subscriber.CelsiusMin, subscriber.CelsiusMax));
            }
        }
Пример #11
0
        /// <summary>
        /// Sets the text of the temperature indicator, in Fahrenheit.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor associated with the indicator.</param>
        /// <param name="celsius">Temperature reading to display.</param>
        private void UpdateTemperatureIndicator(TemperatureSensor temperatureSensor, Single celsius)
        {
            Debug.Assert(temperatureSensor != null);

            if (temperatureSensor == TemperatureSensor._59000002A218F928)
                textBox59000002A218F928.Text = Math.Round(ConvertUnits.Temperature.CelsiusToFahrenheit(celsius), 2).ToString();
            else if (temperatureSensor == TemperatureSensor._F7000002A215B828)
                textBoxF7000002A215B828.Text = Math.Round(ConvertUnits.Temperature.CelsiusToFahrenheit(celsius), 2).ToString();
            else
                throw new ArgumentOutOfRangeException("TemperatureSensor temperatureSensor",
                                                      string.Format("Invalid Temperature Sensor. Serial #: {0}",
                                                                    temperatureSensor.SerialNumber));
        }
Пример #12
0
        /// <summary>
        /// Registers a fan for automation with an associated temperature sensor.
        /// </summary>
        /// <param name="fan">USB Fan to register.</param>
        /// <param name="temperatureSensor">Temperature sensor to register against.</param>
        /// <param name="celsiusThreshold">Warmest allowable reading before automating fan cooling.</param>
        /// <returns>Asynchronous Processing Task.</returns>
        internal async Task Register(Fan fan, TemperatureSensor temperatureSensor, Single celsiusThreshold)
        {
            bool unregisterPrev = false;
            Tuple<TemperatureSensor, Single> value = null;

            //Parameter Validations.
            if (fan == null)
                throw new ArgumentNullException("Fan fan");

            if (temperatureSensor == null)
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");

            //Is it already registered?  Are we changing?
            if (m_registeredFansDict.TryGetValue(fan, out value) == true)
            {
                Debug.Assert(value != null);
                Debug.Assert(value.Item1 != null);

                if (value.Item1.Equals(temperatureSensor) == true && value.Item2 == celsiusThreshold)
                    return; //Nothing to do!

                unregisterPrev = true;
            }

            //User is requesting an overwrite, which is an unregistration first.
            if (unregisterPrev == true)
                await m_mooseBoxRESTAPI.UnegisterFanAutomation(fan.Number);

            //Register the new fan information.
            await m_mooseBoxRESTAPI.RegisterFanAutomation(fan.Number,
                                                          temperatureSensor.SerialNumber,
                                                          celsiusThreshold);

            //Update the local cache.
            m_registeredFansDict[fan] = new Tuple<TemperatureSensor, Single>(temperatureSensor, celsiusThreshold);
        }
Пример #13
0
        /// <summary>
        /// Attempts to get current registration information for a USB Fan, if it was registered.
        /// </summary>
        /// <param name="fan">USB Fan to query information for.</param>
        /// <param name="temperatureSensor">Temperature sensor fan is tied to.</param>
        /// <param name="celsiusThreshold">Warmest allowd reading before fan cooling is automated.</param>
        /// <returns>true if registration information was queried; false otherwise.</returns>
        internal bool TryGetRegistrationInfo(Fan fan,
                                             out TemperatureSensor temperatureSensor,
                                             out Single celsiusThreshold)
        {
            bool result = false;
            Tuple<TemperatureSensor, Single> value = null;

            temperatureSensor = null;
            celsiusThreshold = Single.NaN;

            //Parameter Validations.
            if (fan == null)
                throw new ArgumentNullException("Fan fan");

            //Check our cache, which is synchronized.
            if (m_registeredFansDict.TryGetValue(fan, out value) == true)
            {
                //Set outputs.
                temperatureSensor = value.Item1;
                celsiusThreshold = value.Item2;

                result = true;
            }

            return result;
        }
        /// <summary>
        /// Registers a temperature alarm with MooseBox.  It a temperature reading goes lower or higher than 
        /// the acceptable thresholds, MooseBox will attempt to email receipiant indicating a problem.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor to register alarm with.</param>
        /// <param name="emailAddress">Email address to broadcast alerts to.</param>
        /// <param name="celsiusMin">Coldest acceptable temperature threshold.</param>
        /// <param name="celsiusMax">Warmest acceptable temperature threshold.</param>
        /// <returns>Asynchronous Processing Task.</returns>
        internal async Task Register(TemperatureSensor temperatureSensor,
                                     string emailAddress,
                                     Single celsiusMin,
                                     Single celsiusMax)
        {
            bool unregisterPrev = false;
            Tuple<Single, Single> value = null;

            //Parameter Validations.
            if (temperatureSensor == null)
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");

            if (string.IsNullOrEmpty(emailAddress) == true)
                throw new ArgumentNullException("string emailAddress");

            //Is this already registered?
            if (m_registeredAlarmsDict.TryGetValue(Tuple.Create(temperatureSensor, emailAddress), out value) == true)
            {
                Debug.Assert(value != null);

                if (celsiusMin == value.Item1 && celsiusMax == value.Item2)
                    return; //Nothing to do!

                unregisterPrev = true;
            }
        
            //If it's already registered, unregister it first.
            if (unregisterPrev == true)
                await m_mooseBoxRESTAPI.UnregisterTemperatureAlarm(emailAddress, temperatureSensor.SerialNumber);
        
            //Register the temperature alarm.
            await m_mooseBoxRESTAPI.RegisterTemperatureAlarm(temperatureSensor.SerialNumber,
                                                             celsiusMin,
                                                             celsiusMax,
                                                             emailAddress);

            //Update local cache.
            m_registeredAlarmsDict[Tuple.Create(temperatureSensor, emailAddress)] = Tuple.Create(celsiusMin, celsiusMax);
        }
        /// <summary>
        /// Queries all registered entries associated with a singular temperature sensor.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor to lookup all registered alarms from.</param>
        /// <param name="registeredAlarms">[0...N] temperature alarms registration information.</param>
        /// <returns>true if registration information was queried; false otherwise.</returns>
        /// <remarks>O(N)</remarks>
        internal bool TryGetRegistrationInfo(TemperatureSensor temperatureSensor, 
                                             out List<Tuple<string, Single, Single>> registeredAlarms)
        {
            registeredAlarms = new List<Tuple<string, Single, Single>>();

            //Parameter Validations.
            if (temperatureSensor == null)
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");

            //Enumerate each entry in the dictionary associated with this sensor.
            foreach (var kvp in m_registeredAlarmsDict)
                if (kvp.Key.Item1.Equals(temperatureSensor) == true)
                    registeredAlarms.Add(Tuple.Create(kvp.Key.Item2, kvp.Value.Item1, kvp.Value.Item2));

            return (registeredAlarms.Count > 0);
        }
        /// <summary>
        /// Unregisteres a temperature alarm from MooseBox.
        /// </summary>
        /// <param name="temperatureSensor">Temperature sensor with the registered alarm.</param>
        /// <param name="emailAddress">Email address to unregister from sensor.</param>
        /// <returns>Asynchronous Processing Task.</returns>
        internal async Task Unregister(TemperatureSensor temperatureSensor, string emailAddress)
        {
            Tuple<TemperatureSensor, string> key = Tuple.Create(temperatureSensor, emailAddress);

            //Parameter Validations.
            if (temperatureSensor == null)
                throw new ArgumentNullException("TemperatureSensor temperatureSensor");

            if (string.IsNullOrEmpty(emailAddress) == true)
                throw new ArgumentNullException("string emailAddress");

            //Are we registered?
            if (m_registeredAlarmsDict.ContainsKey(key) == true)
            {
                //Unregister it from MooseBox.
                await m_mooseBoxRESTAPI.UnregisterTemperatureAlarm(emailAddress, temperatureSensor.SerialNumber);

                //Remove it from local cache.
                m_registeredAlarmsDict.Remove(key);
            }
        }