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