From 9a4b76398009cf76c508d61f7e48fb6f5cb7ac2d Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期二, 21 七月 2020 09:46:53 +0800 Subject: [PATCH] 请合并最新多功能面板代码 --- ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs | 124 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 122 insertions(+), 2 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs index da81728..0ae3f20 100755 --- a/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs +++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs @@ -85,6 +85,7 @@ /// <para>鎸佺画鏁版嵁涓婃姤(MomentStatus=0 TriggerZoneStatus>=1锛滄姤璀︼紴 TriggerZoneStatus=0锛滃彇娑堟姤璀︼紴)</para> /// <para>21: Door/Window 闂ㄧ獥浼犳劅鍣紙鏈�21鍜�22锛岃繖閲屾病鏈夊啓閿欙級</para> /// <para>22:Door/Window 闂ㄧ獥浼犳劅鍣紙鏈�21鍜�22锛岃繖閲屾病鏈夊啓閿�</para> + /// <para>541 鐞冨瀷绉诲姩浼犳劅鍣�</para> /// </summary> public int IasDeviceType; /// <summary> @@ -248,9 +249,21 @@ { device = Newtonsoft.Json.JsonConvert.DeserializeObject<ToggleLight>(strDeviceByte); } + else if (strDeviceType == ZigBee.Device.DeviceType.ColorDimmerSwitch.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<ColorDimmerSwitch>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.LevelControlSwitch.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<LevelControlSwitch>(strDeviceByte); + } else if (strDeviceType == ZigBee.Device.DeviceType.WindowCoveringDevice.ToString()) { device = Newtonsoft.Json.JsonConvert.DeserializeObject<Rollershade>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.WindowCoveringController.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<WindowCoveringController>(strDeviceByte); } else if (strDeviceType == ZigBee.Device.DeviceType.OnOffSwitch.ToString()) { @@ -675,6 +688,10 @@ /// 濂藉儚鏄簭鍒楀彿 /// </summary> public string ProductCode = string.Empty; + /// <summary> + /// 璁惧鍔熻兘绫诲瀷(绌烘皵寮�鍏冲拰缁х數鍣ㄤ笓鐢�) + /// </summary> + public int FunctionType = -1; /// <summary> /// 杈撳叆绨囧垪琛� /// </summary> @@ -833,6 +850,109 @@ } #endregion + #region 涓�閿洿鏂板洓瀵稿睆鎸夐敭灞炴�� + /// <summary> + /// 鍚屾璁惧鍔熻兘 + /// </summary> + /// <returns></returns> + public async System.Threading.Tasks.Task<SynchronizationDeviceResponseAllData> SyncMsgToBindSource(string deviceAddr, int deviceEpoint) + { + if (Gateway == null) + { + return null; + } + + return await System.Threading.Tasks.Task.Run(async () => + { + SynchronizationDeviceResponseAllData resContent = null; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + resContent = new SynchronizationDeviceResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + resContent = new SynchronizationDeviceResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "Bind/SyncMsgToBindSourceRespon") + { + var res = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["Result"].ToString()); + if (res == null) + { + resContent = new SynchronizationDeviceResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + resContent = new SynchronizationDeviceResponseAllData { result = res }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + Gateway.Actions = action; + DebugPrintLog("Bind/SyncMsgToBindSourceRespon_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", deviceAddr }, { "Epoint", deviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5010 } }; + Gateway.Send("Bind/SyncMsgToBindSource", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (resContent != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + resContent = new SynchronizationDeviceResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("Bind/SyncMsgToBindSource_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return resContent; + }); + + } + + /// <summary> + /// 鍚屾璁惧,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class SynchronizationDeviceResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 鍚屾缁撴灉 + /// 0:鎴愬姛锛氱綉鍏冲唴閮ㄨ嚜鍔ㄥ啓鍏ヨ澶囩洰鏍囧悕瀛椼�佽澶囩洰鏍囧姛鑳界被鍨嬨�佸満鏅洰鏍囧悕瀛椼�乽tc鏃堕棿鍐欏叆4瀵稿睆 + /// 1:澶辫触 + /// </summary> + public int result; + } + #endregion + #region 鍒犻櫎璁惧锛堜娇璁惧绂荤綉锛� /// <summary> /// 鍒犻櫎璁惧锛堜娇璁惧绂荤綉锛� @@ -883,7 +1003,7 @@ } }; Gateway.Actions += action; - System.Console.WriteLine("RemoveDevice_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + DebugPrintLog("RemoveDevice_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); try { @@ -921,7 +1041,7 @@ d = new RemoveDeviceResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; } Gateway.Actions -= action; - System.Console.WriteLine("RemoveDevice_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + DebugPrintLog("RemoveDevice_Actions 閫�鍑�" + System.DateTime.Now.ToString()); return d; }); -- Gitblit v1.8.0