예제 #1
0
 public virtual void Cooked(int cookingTime)
 {
     if (cookingTime <= 0)
     {
         this.CookingStatus = CookingStatus.None;
     }
     else if (cookingTime < this.IdealTime)
     {
         this.CookingStatus = CookingStatus.Under;
     }
     else if (cookingTime == this.IdealTime)
     {
         this.CookingStatus = CookingStatus.Cooked;
     }
     else
     {
         this.CookingStatus = CookingStatus.Over;
     }
 }
        private void EventCheck(Device device)
        {
            CookingStatus cookingStatus = CookingStatus.None;

            while (true)
            {
                try
                {
                    if (clp_connection != null && device.Properties != null && device.Events != null && device.Properties.Count > 0 && device.Events.Count > 0)
                    {
                        string json_response = clp_connection.GetCLPObject(clp_user, CLPtokenToString(), device.AUID);

                        CLP_Parameters clp_parameters = new CLP_Parameters();
                        clp_parameters.Parse(json_response);
                        Dictionary <string, string> props = clp_parameters.GetParams(device.AUID);

                        if (props != null)
                        {
                            foreach (var item in device.Events)
                            {
                                if (props.ContainsKey(item.CLPID) && device.Properties.ContainsKey(item.CLPID) &&
                                    !device.Properties[item.CLPID].ToUpper().Equals(props[item.CLPID].ToUpper()))
                                {
                                    //property value has changed
                                    //publish event
                                    device.Properties[item.CLPID] = props[item.CLPID];
                                    string value = props[item.CLPID].ToUpper();

                                    PublishEvent(item.EID, device.OID, device.AUID, item.CLPID, value);

                                    if (item.EID.Equals("device_status") && (value.Equals("IDLE")))
                                    {
                                        cookingStatus = CookingStatus.None;
                                        ChangeActionStatus(device.OID, device.AUID);
                                    }
                                    else if ((item.EID.Equals("refrigerator_door") || item.EID.Equals("freezer_door") || item.EID.Equals("door")) &&
                                             value.Equals("OPENED"))
                                    {
                                        item.LastChanged    = DateTime.Now;
                                        item.EmergencyStage = EmergencyStage.None;
                                        if (cookingStatus == CookingStatus.BakingFinished)
                                        {
                                            cookingStatus = CookingStatus.None;
                                        }
                                    }
                                    else if (item.EID.Equals("device_status") && (value.Equals("RUNNING")))
                                    {
                                        cookingStatus = CookingStatus.Baking;
                                    }
                                }
                                else if (item.EmergencyLevel != null && item.LastChanged.Year >= 2018 && item.EmergencyStage != EmergencyStage.Three &&
                                         ((device.DeviceType == DeviceType.refrigerator && device.Properties[item.CLPID].ToUpper().Equals("OPENED")) ||
                                          (device.DeviceType == DeviceType.oven && device.Properties[item.CLPID].ToUpper().Equals("CLOSED") && cookingStatus == CookingStatus.BakingFinished)))
                                {
                                    DateTime now = DateTime.Now;
                                    foreach (var level in item.EmergencyLevel)
                                    {
                                        int index = item.EmergencyLevel.IndexOf(level);
                                        if ((now - item.LastChanged).TotalMinutes >= level.Min && index == (int)item.EmergencyStage)
                                        {
                                            int    lvl     = (int)level.Stage;
                                            string eventID = null;
                                            if (device.DeviceType == DeviceType.oven)
                                            {
                                                eventID = "oven_emergency";
                                            }
                                            else
                                            {
                                                if (item.EID.Contains("refrigerator"))
                                                {
                                                    eventID = "refrigerator_emergency";
                                                }
                                                else
                                                {
                                                    eventID = "freezer_emergency";
                                                }
                                            }

                                            PublishEvent(eventID, device.OID, device.AUID, eventID, lvl.ToString());

                                            item.EmergencyStage = (EmergencyStage)(index + 1);
                                            break;
                                        }
                                    }
                                }
                                else if (cookingStatus == CookingStatus.Baking &&
                                         item.EID.Equals("device_status") && device.Properties[item.CLPID].ToUpper().Equals("RUNNING") &&
                                         props["BAKE_REMAINING_TIME_MINUTES"].Equals("0") && props["BAKE_REMAINING_TIME_SECONDS"].Equals("0"))
                                {
                                    cookingStatus = CookingStatus.BakingFinished;

                                    foreach (var evnt in device.Events)
                                    {
                                        if (evnt.EID.Equals("door"))
                                        {
                                            evnt.LastChanged    = DateTime.Now;
                                            evnt.EmergencyStage = EmergencyStage.None;
                                            break;
                                        }
                                    }

                                    PublishEvent(item.EID, device.OID, device.AUID, item.CLPID, "AFTER_BAKE");
                                }
                            }
                        }
                    }
                    Thread.Sleep(1000);
                }
                catch (Exception e)
                {
                    Logger.Log(LogMsgType.ERROR, "Device: " + device.OID + " " + e.ToString(), LogAuthor.Event);
                }
            }
        }