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 | 530 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 413 insertions(+), 117 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs index d56af50..9c94480 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs @@ -7,18 +7,18 @@ namespace Shared.Phone.UserCenter { /// <summary> - /// 璁惧灞炴�т笂鎶ョ殑閫昏緫绫� + /// 璁惧灞炴�х殑閫昏緫绫� /// </summary> - public class HdlDeviceAttributeLogic : ZigBee.Common.IStatus + public class HdlDeviceAttributeLogic { #region 鈻� 鍙橀噺澹版槑___________________________ /// <summary> - /// 灞炴�т笂鎶ョ殑閫昏緫 + /// 灞炴�х殑閫昏緫 /// </summary> private static HdlDeviceAttributeLogic m_Current = null; /// <summary> - /// 灞炴�т笂鎶ョ殑閫昏緫 + /// 灞炴�х殑閫昏緫 /// </summary> public static HdlDeviceAttributeLogic Current { @@ -36,162 +36,458 @@ } } - /// <summary> - /// 浜嬩欢闆嗗悎 - /// </summary> - private Dictionary<string, Action<CommonDevice>> dicEvent = new Dictionary<string, Action<CommonDevice>>(); - /// <summary> - /// 鍛戒护鍖哄垎 - /// </summary> - private Dictionary<string, string> dicCommandDiv = new Dictionary<string, string>(); - #endregion - #region 鈻� 娣诲姞浜嬩欢___________________________ + #region 鈻� 鍐欏叆璁惧灞炴�______________________ /// <summary> - /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(鎺ㄩ�佸凡缁忓己鍒舵寚瀹氳繍琛屼簬涓荤嚎绋嬶紝灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport) + /// 鑾峰彇鏇存敼璁惧绉佹湁灞炴�х殑鍛戒护 /// </summary> - /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> - /// <param name="comand">鍛戒护鍖哄垎,姣斿锛欴eviceStatusReport,IASInfoReport绛夌瓑</param> - /// <param name="action">褰撴帴鏀跺埌缃戝叧鍥炲涔嬪悗鐨勫洖璋冨嚱鏁�,灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport</param> - public void AddAttributeEvent(string mainKeys, string comand, Action<CommonDevice> action) + /// <param name="clusterId"></param> + /// <param name="attributeId"></param> + /// <param name="attributeDataType"></param> + /// <param name="attributeData"></param> + /// <returns></returns> + public string GetWriteDeviceAttributeText(string DeviceAddr, int DeviceEpoint, int clusterId, int attributeId, int attributeDataType, object attributeData) { - lock (this.dicEvent) + 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) { - if (this.dicEvent.Count == 0) - { - ZbGateway.StatusList.Add(this); - } - this.dicEvent[mainKeys] = action; - this.dicCommandDiv[mainKeys] = comand; + 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); + + return jObject.ToString(); } #endregion - #region 鈻� 绉婚櫎鐩戝惉___________________________ + #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="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> - public void RemoveEvent(string mainKeys) + /// <param name="device">璁惧</param> + public void SendThermostatStatuComand(CommonDevice device) { - lock (this.dicEvent) + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject { - if (this.dicEvent.ContainsKey(mainKeys) == true) - { - var action = this.dicEvent[mainKeys]; - this.dicEvent.Remove(mainKeys); - this.dicCommandDiv.Remove(mainKeys); - - action = null; - } - if (this.dicEvent.Count == 0) - { - ZbGateway.StatusList.Remove(this); - } - } - } - + { "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> - public void RemoveAllEvent() + /// <param name="device">璁惧</param> + private void SendFanStatuComand(CommonDevice device) { - lock (this.dicEvent) + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject { - var list = new HashSet<string>(); - foreach (var keys in this.dicEvent.Keys) - { - list.Add(keys); - } - foreach (var keys in list) - { - //闇�瑕佹參鎱竴涓竴涓殑閲婃斁Action,鍚 - this.RemoveEvent(keys); - } - } - } - - #endregion - - #region 鈻� 瀹炵幇鎺ュ彛___________________________ - + { "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="common"></param> - /// <param name="typeTag"></param> - public void DeviceInfoChange(CommonDevice common, string typeTag) + /// <param name="device">璁惧</param> + public void SendFreshAirStatuComand(CommonDevice device) { - if (common == null || string.IsNullOrEmpty(common.DeviceAddr) == true) + if (device == null) { - //鎴戜篃涓嶇煡閬撹繖鏈夋病鏈夊彲鑳� return; } - - lock (this.dicEvent) + new System.Threading.Thread(() => { - var list = new List<Action<CommonDevice>>(); - foreach (string keys in this.dicEvent.Keys) - { - if (this.dicCommandDiv[keys] != typeTag) - { - //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 - continue; - } - //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟 - list.Add(this.dicEvent[keys]); - } - HdlThreadLogic.Current.RunMain(() => - { - //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤 - foreach (var action in list) - { - action?.Invoke(common); - } - list.Clear(); - }); + 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="common"></param> - public void Changed(CommonDevice common) + /// <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()); } - /// <summary> - /// 涓嶄娇鐢� - /// </summary> - public void ChangedILogicStatus(ZigBee.Device.Logic logic) - { - } - - /// <summary> - /// 涓嶄娇鐢� - /// </summary> - public void ChangedISceneStatus(Scene scene) - { - } #endregion - #region 鈻� 涓�鑸柟娉昣__________________________ - + #region 鈻� 绐楀笜_______________________________ /// <summary> - /// 鏄惁瀛樺湪鎸囧畾鐨勪簨浠� + /// 鍙戦�佽幏鍙栫獥甯樼姸鎬佸懡浠� /// </summary> - /// <param name="mainkeys"></param> - /// <returns></returns> - public bool IsEsixt(string mainkeys) + /// <param name="device">绐楀笜</param> + public void SendCurtainStatuComand(CommonDevice device) { - return this.dicCommandDiv.ContainsKey(mainkeys); + 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