From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期五, 10 七月 2020 10:52:13 +0800 Subject: [PATCH] 2020-07-10-01 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs | 511 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 437 insertions(+), 74 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs index a650b64..9c94480 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs @@ -41,90 +41,453 @@ #region 鈻� 鍐欏叆璁惧灞炴�______________________ /// <summary> - /// 璁剧疆绌鸿皟鐨勮嚜瀹氫箟妯″紡 + /// 鑾峰彇鏇存敼璁惧绉佹湁灞炴�х殑鍛戒护 /// </summary> - /// <param name="device">璁惧瀵硅薄</param> - /// <param name="clusterId">闀濱D</param> - /// <param name="attributeId">灞炴�D</param> - /// <param name="attributeDataType">鏁版嵁绫诲瀷</param> - /// <param name="attributeData">闇�瑕佸啓鍏ョ殑鏁版嵁(鏁板�兼垨鑰呭瓧绗︿覆)</param> + /// <param name="clusterId"></param> + /// <param name="attributeId"></param> + /// <param name="attributeDataType"></param> + /// <param name="attributeData"></param> /// <returns></returns> - public async System.Threading.Tasks.Task<CommonDevice.SetWritableValueResponAllData> WriteDeviceAttribute(CommonDevice device, int clusterId, int attributeId, int attributeDataType, object attributeData) + public string GetWriteDeviceAttributeText(string DeviceAddr, int DeviceEpoint, int clusterId, int attributeId, int attributeDataType, object attributeData) { - var MyGateway = device.Gateway; - if (MyGateway == null) + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterId }, { "Command", 120 } }; + Newtonsoft.Json.Linq.JObject data = null; + if (attributeData is int) { - return null; + data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", Convert.ToInt32(attributeData) } }; } - - CommonDevice.SetWritableValueResponAllData d = null; - Action<string, string> action = (topic, message) => + else { - var gatewayID = topic.Split('/')[0]; - var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); - - if (topic == gatewayID + "/" + "Error_Respon") - { - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); - if (temp == null) - { - d = new CommonDevice.SetWritableValueResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; - } - else - { - d = new CommonDevice.SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error) }; - } - } - - if (topic == gatewayID + "/" + "SetWritableValue_Respon") - { - var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(jobject["Data"].ToString()); - if (tempData == null) - { - d = new CommonDevice.SetWritableValueResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; - } - else - { - d = new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData }; - } - } - }; - MyGateway.Actions += action; - try - { - var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", clusterId }, { "Command", 120 } }; - Newtonsoft.Json.Linq.JObject data = null; - if (attributeData is int) - { - data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", Convert.ToInt32(attributeData) } }; - } - else - { - data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", attributeData.ToString() } }; - } - jObject.Add("Data", data); - MyGateway.Send("SetWritableValue", jObject.ToString()); + data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", attributeData.ToString() } }; } - catch { } + jObject.Add("Data", data); - var timeOut = 0; - while (timeOut <= 30) - { - await System.Threading.Tasks.Task.Delay(100); - if (d != null) - { - break; - } - timeOut++; - } - if (timeOut > 30 && d == null) - { - d = new CommonDevice.SetWritableValueResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; - } - MyGateway.Actions -= action; - return d; + return jObject.ToString(); } #endregion + + #region 鈻� 绌鸿皟_______________________________ + + /// <summary> + /// SendACStatuComand + /// </summary> + /// <param name="device">璁惧</param> + public void SendACStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + new System.Threading.Thread(() => + { + SendFanStatuComand(device); + System.Threading.Thread.Sleep(300); + SendThermostatStatuComand(device); + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// SendThermostatStatuComand + /// </summary> + /// <param name="device">璁惧</param> + public void SendThermostatStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.Thermostat }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.LocalTemperature} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.CoolingSetpoint} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.HeatingSetpoint} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.AutoSetpoint} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.SystemMode} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.AcModeSupport} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.CleanStatu} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + /// <summary> + /// SendFanStatuComand + /// </summary> + /// <param name="device">璁惧</param> + private void SendFanStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.FanControl }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.FanMode} + }, + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.FanSwing} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send("GetDeviceStatus", jObject.ToString()); + } + + #endregion + + #region 鈻� 鏂伴_______________________________ + /// <summary> + /// SendFreshAirStatuComand + /// </summary> + /// <param name="device">璁惧</param> + public void SendFreshAirStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + new System.Threading.Thread(() => + { + SendFreshAirFanStatuComand(device); + System.Threading.Thread.Sleep(300); + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// SendFanStatuComand + /// </summary> + /// <param name="device">璁惧</param> + private void SendFreshAirFanStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.FanControl }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.FanMode} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send("GetDeviceStatus", jObject.ToString()); + } + + #endregion + + #region 鈻� PM2.5_______________________________ + /// <summary> + /// SendPmSensorComand + /// </summary> + /// <param name="device">璁惧</param> + public void SendPmSensorComand(CommonDevice device) + { + if (device == null) + { + return; + } + new System.Threading.Thread(() => + { + SendPmSensorStatuComand(device); + //璇诲彇Pm2.5浼犳劅鍣ㄧ殑娓╁害鏁版嵁 + HdlDeviceAttributeLogic.Current.SendTemperatureStatuComand(device); + //璇诲彇Pm2.5浼犳劅鍣ㄧ殑婀垮害鏁版嵁 + HdlDeviceAttributeLogic.Current.SendHumidityStatuComand(device); + System.Threading.Thread.Sleep(300); + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// SendFanStatuComand + /// </summary> + /// <param name="device">璁惧</param> + private void SendPmSensorStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.PmTwoPointFiveMeasurement }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.MeasuredValue} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send("GetDeviceStatus", jObject.ToString()); + } + + #endregion + + #region 鈻� 绐楀笜_______________________________ + /// <summary> + /// 鍙戦�佽幏鍙栫獥甯樼姸鎬佸懡浠� + /// </summary> + /// <param name="device">绐楀笜</param> + public void SendCurtainStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.WindowCovering }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.CurrentPositionLiftPercentage} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + #endregion + + #region 鈻� 鐏厜_______________________________ + + /// <summary> + /// Light + /// </summary> + /// <param name="device"></param> + public void SendLightStatuComand(CommonDevice device) + { + SendSwitchStatuComand(device); + } + + /// <summary> + /// Light + /// </summary> + /// <param name="device"></param> + public void SendDimmableLightStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + new System.Threading.Thread(() => + { + SendSwitchStatuComand(device); + System.Threading.Thread.Sleep(300); + SendLevelStatuComand(device); + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// 鍙戦�佽幏鍙栫伅鍏夌姸鎬佸懡浠� + /// </summary> + /// <param name="device">绐楀笜</param> + private void SendSwitchStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.Switch }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.Switch} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + /// <summary> + /// 鍙戦�佽幏鍙栫伅鍏夌姸鎬佸懡浠� + /// </summary> + /// <param name="device">绐楀笜</param> + private void SendLevelStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.LevelControl }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.LevelControl} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + #endregion + + #region 鈻� 鑹叉俯鐏痏____________________________ + + /// <summary> + /// 鍙戦�佽幏鍙栬壊娓╃伅鐘舵�佸懡浠� + /// </summary> + /// <param name="device"></param> + public void SendColorTemperatureLightStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var colorDevice = (ColorTemperatureLight)device; + new System.Threading.Thread(() => + { + colorDevice.ReadOnOffStatus(); + System.Threading.Thread.Sleep(300); + colorDevice.ReadLevel(); + System.Threading.Thread.Sleep(300); + colorDevice.ReadColorTemperature(); + }) + { IsBackground = true }.Start(); + } + + #endregion + + #region 鈻� 娓╂箍搴____________________________ + + /// <summary> + /// 璇诲彇娓╁害 + /// </summary> + /// <param name="device"></param> + public void SendTemperatureStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.TemperatureMeasurement }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.MeasuredValue} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + /// <summary> + /// 璇诲彇婀垮害 + /// </summary> + /// <param name="device"></param> + public void SendHumidityStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.RelativeHumidityMeasurement }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.MeasuredValue} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + #endregion } } -- Gitblit v1.8.0