From 617a02739b82ae30772de25b4f9a8f6e9460f468 Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期三, 12 八月 2020 17:42:36 +0800 Subject: [PATCH] 请合并代码:新增多功能面板一对一绑定机制 --- ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs | 65 + ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs | 67 + ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD | 798 ++++++++++++++++ ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs | 114 - ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD | 1731 ++++++++++++++++++++++++++++++++++++ 5 files changed, 2,700 insertions(+), 75 deletions(-) diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD b/ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD new file mode 100644 index 0000000..69638eb --- /dev/null +++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD @@ -0,0 +1,798 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Text; +using ZigBee.Device; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; + +namespace Shared.Phone.UserCenter +{ + /// <summary> + /// 璁惧缁戝畾鐨勯�昏緫 + /// </summary> + public class HdlDeviceBindLogic + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 璁惧缁戝畾鐨勯�昏緫 + /// </summary> + private static HdlDeviceBindLogic m_Current = null; + /// <summary> + /// 璁惧缁戝畾鐨勯�昏緫 + /// </summary> + public static HdlDeviceBindLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlDeviceBindLogic(); + } + return m_Current; + } + } + + #endregion + + #region 鈻� 鑾峰彇璁惧涓嬮潰缁戝畾鐨勮澶嘷____________ + + /// <summary> + /// 鑾峰彇璁惧涓嬮潰缁戝畾鐨勮澶�(閿欒鏃惰繑鍥瀗ull),杩欎釜鏄粰pir浼犳劅鍣ㄧ敤鐨� + /// </summary> + /// <param name="mainDevice">璁惧瀵硅薄</param> + /// <returns></returns> + public List<CommonDevice> GetBindTargetDevice(CommonDevice mainDevice) + { + var result = this.GetDeviceBindAsync(mainDevice); + if (result == null || result.getAllBindResponseData == null) + { + //鑾峰彇璁惧鐨勭粦瀹氱洰鏍囧け璐� + string msg = Language.StringByID(R.MyInternationalizationString.uGetDeviceBindTargetFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + + this.ShowErrorMsg(msg); + return null; + } + var listDevice = new List<CommonDevice>(); + foreach (var data in result.getAllBindResponseData.BindList) + { + CommonDevice deviceTemp = Common.LocalDevice.Current.GetDevice(data.BindMacAddr, data.BindEpoint); + if (deviceTemp == null) + { + continue; + } + listDevice.Add(deviceTemp); + } + return listDevice; + } + + /// <summary> + ///鑾峰彇鎵�鏈夌粦瀹� + /// </summary> + public BindObj.GetDeviceBindResponseAllData GetDeviceBindAsync(CommonDevice device) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + var listBind = ModelData.DeviceModelDataLogic.Current.GetDeviceBindList(device, "Bind/GetDeviceBind"); + return new BindObj.GetDeviceBindResponseAllData() + { + getAllBindResponseData = new BindObj.GetDeviceBindResponseData + { + Result = 0, + BindList = listBind + } + }; + } + + var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5007 } }; + string sendData = jObject.ToString(); + //鍙戦�� + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/GetDeviceBind", sendData, "Bind/GetDeviceBind_Respon", 6); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.GetDeviceBindResponseData>(result.ReceiptData); + return new BindObj.GetDeviceBindResponseAllData() { getAllBindResponseData = tempData }; + } + + #endregion + + #region 鈻� 鎵ц缁戝畾璁惧鐩爣___________________ + + /// <summary> + /// 缁戝畾璁惧鐨勭洰鏍�(杩斿洖鎴愬姛璁剧疆鐨勮澶�,閿欒鏃讹紝杩斿洖null) + /// </summary> + /// <param name="mainDevice">璁惧瀵硅薄</param> + /// <param name="listDevice">瑕佺粦瀹氱殑鐩爣璁惧</param> + /// <param name="BindCluster">BindCluster</param> + /// <returns></returns> + public List<CommonDevice> BindDeviceTarget(CommonDevice mainDevice, List<CommonDevice> listDevice, int BindCluster = 6) + { + if (listDevice.Count == 0) + { + return new List<CommonDevice>(); + } + + var dicDevice = new Dictionary<string, CommonDevice>(); + + //缁勮鏁版嵁 + var addData = new IASZone.AddBindData(); + addData.DeviceAddr = mainDevice.DeviceAddr; + addData.Epoint = mainDevice.DeviceEpoint; + foreach (var device in listDevice) + { + var info = new IASZone.AddBindListObj(); + info.BindCluster = BindCluster; + info.BindMacAddr = device.DeviceAddr; + info.BindEpoint = device.DeviceEpoint; + info.BindType = 0; + + addData.BindList.Add(info); + + //杩斿洖鎴愬姛璁惧鐨勬椂鍊欎娇鐢� + string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); + dicDevice[mainkeys] = device; + } + //鎵ц缁戝畾 + var result = this.AddDeviceBindAsync(addData); + if (result == null || result.addedDeviceBindResponseData == null) + { + //缁戝畾鐩爣璁剧疆澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + + this.ShowErrorMsg(msg); + return null; + } + + var listSuccess = new List<CommonDevice>(); + foreach (var data in result.addedDeviceBindResponseData.BindList) + { + string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint); + if (dicDevice.ContainsKey(mainkeys) == true) + { + listSuccess.Add(dicDevice[mainkeys]); + } + } + + if (listSuccess.Count == 0) + { + //缁戝畾鐩爣璁剧疆澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail); + this.ShowTipMsg(msg); + } + return listSuccess; + } + + /// <summary> + ///璁惧缁戝畾 + /// </summary> + public BindObj.AddedDeviceBindResponseAllData AddDeviceBindAsync(BindObj.AddBindData addBindData) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind"); + } + + var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint); + //鑾峰彇鍙戦�佺殑鍛戒护瀛楃 + var sendData = this.GetAddDeviceListBindCommandText(addBindData); + //鍙戦�� + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/SetBind", sendData, "Bind/SetBind_Respon", 20); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + + //淇敼缂撳瓨 +<<<<<<< HEAD:ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs + ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind"); + + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData); + return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData }; + } + +======= + TemplateData.TemplateDeviceDataLogic.Current.AddDeviceBindList(addBindData, result.JsonData[0]); + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData); + return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData }; + } + +>>>>>>> dev-tzy:ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs + /// <summary> + ///璁惧缁戝畾銆愪竴瀵逛竴 缁戝畾锛屼竴涓寜閿洖璺彧鑳界粦瀹氫竴涓澶囥�� + /// </summary> + public BindObj.AddedDeviceBindResponseAllData AddDeviceSingleBindAsync(BindObj.AddBindData addBindData) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind"); + } + + var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint); + //鑾峰彇鍙戦�佺殑鍛戒护瀛楃 + var sendData = this.GetAddDeviceListBindCommandText(addBindData); + //鍙戦�� + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/SetSingleBind", sendData, "Bind/SetSingleBind_Respon", 20); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } +<<<<<<< HEAD:ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs + + //淇敼缂撳瓨 + ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind"); +======= + //淇敼缂撳瓨 + TemplateData.TemplateDeviceDataLogic.Current.AddDeviceBindList(addBindData, result.JsonData[0]); +>>>>>>> dev-tzy:ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs + + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData); + return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData }; + } + + /// <summary> + /// 鑾峰彇娣诲姞璁惧缁戝畾鐨勫懡浠ゅ瓧绗� + /// </summary> + /// <param name="addBindData"></param> + /// <returns></returns> + public string GetAddDeviceListBindCommandText(BindObj.AddBindData addBindData) + { + var jObject = new JObject { { "DeviceAddr", addBindData.DeviceAddr }, { "Epoint", addBindData.Epoint }, { "Cluster_ID", 0 }, { "Command", 5001 } }; + var bindList = new JArray { }; + foreach (var bindInfo in addBindData.BindList) + { + if (bindInfo.BindType == 0) + { + var dInfo = new JObject{{ "BindMacAddr",bindInfo.BindMacAddr},{ "BindEpoint", bindInfo.BindEpoint} , + { "BindCluster", bindInfo.BindCluster} ,{ "BindType",bindInfo.BindType}}; + bindList.Add(dInfo); + } + else if (bindInfo.BindType == 1) + { + var dInfo = new JObject{{ "BindCluster", bindInfo.BindCluster} ,{ "BindType",bindInfo.BindType}, + { "BindScenesId", bindInfo.BindScenesId}}; + bindList.Add(dInfo); + } + } + var data = new JObject { { "BindName", addBindData.BindName }, { "BindList", bindList } }; + jObject.Add("Data", data); + return jObject.ToString(); + } + + #endregion + + #region 鈻� 鍒犻櫎璁惧缁戝畾鐨勭洰鏍嘷________________ + + /// <summary> + /// 鍒犻櫎璁惧缁戝畾鐨勭洰鏍� + /// </summary> + /// <param name="mainDevice">璁惧瀵硅薄</param> + /// <param name="deleteDevice">瑕佸垹闄ょ殑缁戝畾鐩爣璁惧</param> + /// <param name="BindCluster">BindCluster</param> + /// <returns></returns> + public bool DeleteDeviceTarget(CommonDevice mainDevice, CommonDevice deleteDevice, int BindCluster = 6) + { + //缁勮鏁版嵁 + var deleteData = new IASZone.DelDeviceBindData(); + deleteData.DeviceAddr = mainDevice.DeviceAddr; + deleteData.Epoint = mainDevice.DeviceEpoint; + + var info = new IASZone.RemoveBindListObj(); + info.BindCluster = BindCluster; + info.BindMacAddr = deleteDevice.DeviceAddr; + info.BindEpoint = deleteDevice.DeviceEpoint; + info.BindType = 0; + + deleteData.RemoveBindList.Add(info); + + //鎵ц鍒犻櫎 + var result = this.DelDeviceBindAsync(deleteData); + if (result == null || result.delDeviceBindResponseData == null) + { + //鍒犻櫎缁戝畾鐩爣澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + + this.ShowErrorMsg(msg); + return false; + } + + foreach (var data in result.delDeviceBindResponseData.RemoveBindList) + { + //0:鎴愬姛 1:璁惧涓嶅湪缁戝畾鍒楄〃涓� 锛屼篃鍙互浠h〃鎴愬姛 + if (data.Result == 0 || data.Result == 1 || data.Result == 5) + { + return true; + } + //3:澶辫触锛屽湪绛夊緟鑺傜偣璁惧纭鏄惁瑙i櫎缁戝畾鎴愬姛 + else if (data.Result == 3) + { + //鍏朵粬缁戝畾鐩爣姝e湪鍒犻櫎涓紝璇风◢鍚庡啀璇� + string msg = Language.StringByID(R.MyInternationalizationString.uOtherBindTargetsIsDelettingPleaseWait); + this.ShowErrorMsg(msg); + return false; + } + //2锛氭湭鐭ワ紝鐢辫妭鐐硅澶囧弽棣堝彂閫佲�淏ind/BindResult鈥濅富棰樻秷鎭‘瀹氭槸鍚︽垚鍔� + else if (data.Result == 2) + { + if (result.removeBindResultResponseData == null) + { + //鍒犻櫎缁戝畾鐩爣澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail); + this.ShowErrorMsg(msg); + return false; + } + else + { + //鎴愬姛 + if (result.removeBindResultResponseData.Result == 0) + { + return true; + } + //136锛氭帶鍒惰澶囨湰鍦扮粦瀹氬垪琛ㄤ腑鏃犳缁戝畾 + else if (result.removeBindResultResponseData.Result == 136) + { + //杩欎釜鍙互褰撳仛鎴愬姛 + return true; + } + else + { + //鍒犻櫎缁戝畾鐩爣澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail); + this.ShowErrorMsg(msg); + return false; + } + } + } + } + return false; + } + + /// <summary> + /// 鍒犻櫎璁惧缁戝畾鐨勭洰鏍� + /// </summary> + /// <param name="mainDevice">璁惧瀵硅薄</param> + /// <param name="listDeleteDevice">瑕佸垹闄ょ殑缁戝畾鐩爣璁惧</param> + /// <param name="BindCluster">BindCluster</param> + /// <returns>杩斿洖鐨勬槸鎴愬姛鍒犻櫎鐨勮澶�</returns> + public List<CommonDevice> DeleteDeviceTarget(CommonDevice mainDevice, List<CommonDevice> listDeleteDevice, int BindCluster = 6) + { + //缁勮鏁版嵁 + var deleteData = new IASZone.DelDeviceBindData(); + deleteData.DeviceAddr = mainDevice.DeviceAddr; + deleteData.Epoint = mainDevice.DeviceEpoint; + + var dicDevice = new Dictionary<string, CommonDevice>(); + foreach (var device in listDeleteDevice) + { + var info = new IASZone.RemoveBindListObj(); + info.BindCluster = BindCluster; + info.BindMacAddr = device.DeviceAddr; + info.BindEpoint = device.DeviceEpoint; + info.BindType = 0; + + deleteData.RemoveBindList.Add(info); + //杩斿洖鎴愬姛璁惧鐨勬椂鍊欎娇鐢� + string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); + dicDevice[mainkeys] = device; + } + var listSuccess = new List<CommonDevice>(); + + var result = this.DelDeviceBindAsync(deleteData); + if (result == null || result.delDeviceBindResponseData == null) + { + //鍒犻櫎缁戝畾鐩爣澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + + this.ShowErrorMsg(msg); + return listSuccess; + } + + foreach (var data in result.delDeviceBindResponseData.RemoveBindList) + { + string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint); + //0:鎴愬姛 1:璁惧涓嶅湪缁戝畾鍒楄〃涓� 锛屼篃鍙互浠h〃鎴愬姛 + if (data.Result == 0 || data.Result == 1) + { + listSuccess.Add(dicDevice[mainkeys]); + } + //3:澶辫触锛屽湪绛夊緟鑺傜偣璁惧纭鏄惁瑙i櫎缁戝畾鎴愬姛 + else if (data.Result == 3) + { + //璁惧鍚嶇О 鍏朵粬缁戝畾鐩爣姝e湪鍒犻櫎涓紝璇风◢鍚庡啀璇� + string msg = Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + "\r\n"; + msg += Language.StringByID(R.MyInternationalizationString.uOtherBindTargetsIsDelettingPleaseWait); + this.ShowErrorMsg(msg); + } + //2锛氭湭鐭ワ紝鐢辫妭鐐硅澶囧弽棣堝彂閫佲�淏ind/BindResult鈥濅富棰樻秷鎭‘瀹氭槸鍚︽垚鍔� + else if (data.Result == 2) + { + if (result.removeBindResultResponseData == null) + { + //璁惧鍚嶇О 鍒犻櫎缁戝畾鐩爣澶辫触 + string msg = Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + "\r\n"; + msg += Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail); + this.ShowErrorMsg(msg); + } + else + { + //鎴愬姛 + if (result.removeBindResultResponseData.Result == 0) + { + listSuccess.Add(dicDevice[mainkeys]); + } + //136锛氭帶鍒惰澶囨湰鍦扮粦瀹氬垪琛ㄤ腑鏃犳缁戝畾 + else if (result.removeBindResultResponseData.Result == 136) + { + //杩欎釜鍙互褰撳仛鎴愬姛 + listSuccess.Add(dicDevice[mainkeys]); + } + else + { + //璁惧鍚嶇О 鍒犻櫎缁戝畾鐩爣澶辫触 + string msg = Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + "\r\n"; + msg += Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail); + this.ShowErrorMsg(msg); + } + } + } + } + return listSuccess; + } + + /// <summary> + /// 鍒犻櫎璁惧鐨勭粦瀹氱洰鏍� + /// </summary> + /// <param name="delDeviceBindData"></param> + /// <returns></returns> + public BindObj.DelDeviceBindResponseAllData DelDeviceBindAsync(BindObj.DelDeviceBindData delDeviceBindData) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.DeleteDeviceBindList(delDeviceBindData); + } + var device = Common.LocalDevice.Current.GetDevice(delDeviceBindData.DeviceAddr, delDeviceBindData.Epoint); + //鑾峰彇闇�瑕佸彂閫佺殑鏁版嵁 + var sendData = this.GetDeleteDeviceBindCommandText(delDeviceBindData); + //鍙戦�佸懡浠� + var result = this.SendDeleteBindJobjectDataToGateway(device, "Bind/RemoveBind", + sendData, new List<string>() { "Bind/RemoveBind_Respon", "Bind/RemoveBindResult" }, 6); + + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + var responseData = new BindObj.DelDeviceBindResponseAllData(); + if (result.listReceiptData[0] != null) + { + var tempData1 = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.DelDeviceBindResponseData>(result.listReceiptData[0]); + responseData.delDeviceBindResponseData = tempData1; + } + + if (result.listReceiptData[1] != null) + { + var tempData2 = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.RemoveBindResultResponseData>(result.listReceiptData[1]); + responseData.removeBindResultResponseData = tempData2; + } + + //淇敼缂撳瓨 + ModelData.DeviceModelDataLogic.Current.DeleteDeviceBindList(delDeviceBindData); + + return responseData; + } + + /// <summary> + ///鍒犻櫎涓�涓帶鍒惰澶囨墍鏈夌粦瀹氫俊鎭� + /// </summary> + public BindObj.ClearBindInfoResponseAllData ClearBindInfoAsync(CommonDevice device) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.ClearDeviceAllBind(device); + } + + var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } }; + var sendData = jObject.ToString(); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/ClearBindInfo", sendData, "Bind/ClearBindInfo_Respon", 25); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + + //淇敼缂撳瓨 + ModelData.DeviceModelDataLogic.Current.ClearDeviceAllBind(device); + + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.ClearBindInfoResponseData>(result.ReceiptData); + return new BindObj.ClearBindInfoResponseAllData { clearBindInfoResponseData = tempData }; + } + + + /// <summary> + /// 鑾峰彇鍒犻櫎璁惧缁戝畾鍒楄〃鐨勫懡浠ゅ瓧绗� + /// </summary> + /// <param name="delDeviceBindData"></param> + /// <returns></returns> + public string GetDeleteDeviceBindCommandText(BindObj.DelDeviceBindData delDeviceBindData) + { + var jObject = new JObject { { "DeviceAddr", delDeviceBindData.DeviceAddr }, { "Epoint", delDeviceBindData.Epoint }, { "Cluster_ID", 0 }, { "Command", 5003 } }; + var removeBindList = new JArray { }; + foreach (var removeBindInfo in delDeviceBindData.RemoveBindList) + { + //鍒犻櫎璁惧 + if (removeBindInfo.BindType == 0) + { + var dInfo = new JObject{{ "BindMacAddr",removeBindInfo.BindMacAddr},{ "BindEpoint", removeBindInfo.BindEpoint} , + { "BindCluster", removeBindInfo.BindCluster} ,{ "BindType",removeBindInfo.BindType}}; + removeBindList.Add(dInfo); + } + //鍒犻櫎鍦烘櫙 + else if (removeBindInfo.BindType == 1) + { + var dInfo = new JObject{{ "BindCluster", removeBindInfo.BindCluster} ,{ "BindType",removeBindInfo.BindType}, + { "BindScenesId", removeBindInfo.BindScenesId}}; + removeBindList.Add(dInfo); + } + } + var data = new JObject { { "RemoveBindList", removeBindList } }; + jObject.Add("Data", data); + + return jObject.ToString(); + } + + /// <summary> + /// 鍙戦�佸垹闄ょ粦瀹氱殑鏁版嵁鍒扮綉鍏筹紝骞舵帴鍙楃綉鍏宠繑鍥炵殑鏁版嵁,listReceiptData涓鸿繑鍥炲��(鍒犻櫎缁戝畾鐨勬帴鍙e緢鐗规畩,闇�瑕佺嫭绔嬪嚭鏉�) + /// </summary> + /// <param name="device">璁惧瀵硅薄</param> + /// <param name="sendTopic">鍙戦�佺殑涓婚</param> + /// <param name="sendData">闇�瑕佸彂閫佺殑鏁版嵁 JObject.ToString()鐨勪笢瑗�</param> + /// <param name="listReceiptTopic">鎸囧畾鎺ユ敹鍝簺涓婚</param> + /// <param name="waitTime">瓒呮椂鏃堕棿(绉�)</param> + /// <returns>缃戝叧杩斿洖鐨勬暟鎹�</returns> + private ReceiptGatewayResult SendDeleteBindJobjectDataToGateway(CommonDevice device, string sendTopic, string sendData, List<string> listReceiptTopic, int waitTime = 3) + { + var reResult = new ReceiptGatewayResult(); + reResult.listReceiptData = new string[listReceiptTopic.Count]; + var myGateway = device.Gateway; + if (myGateway == null) + { + //鑾峰彇缃戝叧瀵硅薄澶辫触 + reResult.ErrorMsg = Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail); + reResult.ErrorMsgDiv = -1; + return reResult; + } + //缃戝叧ID + string gatewayID = device.Gateway.GwId; + //閿欒涓婚 + string errorTopic = gatewayID + "/" + "Error_Respon"; + //妫�娴嬪璞$殑涓婚 + for (int i = 0; i < listReceiptTopic.Count; i++) + { + listReceiptTopic[i] = gatewayID + "/" + listReceiptTopic[i]; + } + + bool canbreak = false; + BindObj.DelDeviceBindResponseData delDeviceBindData = null; + BindObj.RemoveBindResultResponseData removeBindResult = null; + + Action<string, string> receiptAction = (topic, message) => + { + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + //缃戝叧鍥炲閿欒 + if (topic == errorTopic) + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + reResult.ErrorMsg = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error); + } + //濡傛灉鏄寚瀹氱殑涓婚 + for (int i = 0; i < listReceiptTopic.Count; i++) + { + if (topic == listReceiptTopic[i]) + { + string deviceMac = jobject["DeviceAddr"].ToString(); + int deviceEpoint = Convert.ToInt32(jobject["Epoint"].ToString()); + if (device.DeviceAddr != deviceMac) + { + //涓嶆槸鍚屼竴涓笢瑗縈ac + return; + } + if (device.DeviceEpoint != deviceEpoint && deviceEpoint != 200) + { + //涓嶆槸鍚屼竴涓笢瑗�,杩欓噷搴旇闇�瑕佺壒娈婂鐞�200绔偣 + return; + } + reResult.listReceiptData[i] = jobject["Data"].ToString(); + + if (i == 0) + { + //"Bind/RemoveBind_Respon"涓婚 + delDeviceBindData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.DelDeviceBindResponseData>(reResult.listReceiptData[i]); + } + else if (i == 1) + { + //"Bind/RemoveBindResult"涓婚 + removeBindResult = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.RemoveBindResultResponseData>(reResult.listReceiptData[i]); + } + + if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 1).Count) + { + canbreak = true; + } + else if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 3).Count) + { + if (removeBindResult != null) + { + canbreak = true; + } + } + else if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 2).Count) + { + if (removeBindResult != null) + { + canbreak = true; + } + } + else + { + canbreak = true; + } + } + } + + }; + myGateway.Actions += receiptAction; + //鍙戦�佹暟鎹� + myGateway.Send(sendTopic, sendData); + + //瓒呮椂鏃堕棿 + int TimeOut = 0; + waitTime = 20 * waitTime; + while (canbreak == false && TimeOut < waitTime) + { + //鍏ㄩ儴鎺ユ敹鎵嶉��鍑� + System.Threading.Thread.Sleep(50); + TimeOut++; + } + myGateway.Actions -= receiptAction; + receiptAction = null; + if (canbreak == false) + { + //瓒呮椂 + reResult.ErrorMsgDiv = 0; + } + else + { + //姝e父鎺ユ敹鍒扮綉鍏宠繑鍥炵殑鏁版嵁 + if (reResult.listReceiptData.Length == 1) + { + //濡傛灉鍙湁涓�涓富棰�,鍒欐浛鎹㈠彉閲� + reResult.ReceiptData = reResult.listReceiptData[0]; + reResult.listReceiptData = null; + } + } + + return reResult; + } + + + #endregion + + #region 鈻� 閰嶇疆闈㈡澘鍔熻兘_______________________ + + ///<summary > + ///閰嶇疆闈㈡澘鍔熻兘 + ///<para>value:缁欓潰鏉块厤缃殑妯″紡</para> + /// </summary> + public CommonDevice.SetWritableValueResponAllData ConfigureHdlKeyValueAsync(CommonDevice device, Panel.KeyMode value, int clusterID = 6) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, "SetWritableValue"); + } + //鑾峰彇鍙戦�佹暟鎹� + var sendData = this.GetConfigureHdlKeyCommandText(device.DeviceAddr, device.DeviceEpoint, value, clusterID); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "SetWritableValue", sendData, "SetWritableValue_Respon"); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + + //淇敼缂撳瓨 + ModelData.DeviceModelDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, "SetWritableValue"); + + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData); + return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData }; + } + + /// <summary> + /// 璇诲彇闈㈡澘鐨勯厤缃俊鎭� + /// </summary> + public Panel.PanelConfigureInfoResponAllData ReadPanelConfigureInfoAsync(CommonDevice device) + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.ReadPanelConfigureKeyModel(device); + } + + var JObject = new JObject {{ "DeviceAddr",device.DeviceAddr },{ "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.HdlKey },{ "Command", 108 }}; + var attriBute = new JArray { new JObject { { "AttriButeId", (int)AttriButeId.HdlKey } } }; + var data = new JObject { { "AttriBute", attriBute } }; + JObject.Add("Data", data); + + //鍙戦�佹暟鎹� + var sendData = JObject.ToString(); + string receiptTopic = "DeviceStatusReport/" + device.DeviceAddr + "/" + device.DeviceEpoint + "/" + (int)Cluster_ID.HdlKey + "/" + (int)AttriButeId.HdlKey; + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "GetDeviceStatus", sendData, receiptTopic); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel.DeviceStatusReportData>(result.ReceiptData); + return new Panel.PanelConfigureInfoResponAllData { deviceStatusReportData = tempData }; + } + + /// <summary> + /// 鑾峰彇閰嶇疆闈㈡澘鍔熻兘鐨勫懡浠ゅ瓧绗� + /// </summary> + /// <param name="device">璁惧瀵硅薄</param> + /// <param name="value">閿��</param> + /// <param name="clusterID">闀濱D</param> + /// <returns></returns> + public string GetConfigureHdlKeyCommandText(string DeviceAddr, int DeviceEpoint, Panel.KeyMode value, int clusterID = 6) + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterID }, { "Command", 120 } }; + var data = new JObject { { "Undivided", 0 }, { "AttributeId", 6533 }, { "AttributeDataType", 33 }, { "AttributeData", (int)value } }; + jObject.Add("Data", data); + return jObject.ToString(); + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 鏄剧ず閿欒淇℃伅绐楀彛 + /// </summary> + /// <param name="msg"></param> + private void ShowErrorMsg(string msg) + { + Application.RunOnMainThread(() => + { + var contr = new ShowMsgControl(ShowMsgType.Error, msg); + contr.Show(); + }); + } + + /// <summary> + /// 鏄剧ずTip淇℃伅绐楀彛 + /// </summary> + /// <param name="msg"></param> + private void ShowTipMsg(string msg) + { + Application.RunOnMainThread(() => + { + var contr = new UserCenter.ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + }); + } + + #endregion + } +} diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD new file mode 100644 index 0000000..3cd26ac --- /dev/null +++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD @@ -0,0 +1,1731 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Shared.Common; +using Shared.Phone.UserCenter.Device.Bind; +using Shared.Phone.UserCenter.DeviceBind; +using ZigBee.Device; + +namespace Shared.Phone.UserCenter.Device +{ + /// <summary> + /// 缂栬緫璁惧鐨勪俊鎭�(杩欓噷淇敼鐨勬槸MAC鍚�,杩欎釜鐢婚潰浼氭洿鏀筂AC鐨勭墿鐞嗗悕瀛�) + /// </summary> + public class DeviceMacInfoEditorForm : EditorCommonForm + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 璁惧瀵硅薄 + /// </summary> + private List<CommonDevice> listNewDevice = null; + /// <summary> + /// 鍒楄〃鎺т欢 + /// </summary> + private FrameListControl listview = null; + /// <summary> + /// 璁惧鐨勮澶囩被鍨� + /// </summary> + private HashSet<DeviceType> listDeviceType = new HashSet<DeviceType>(); + /// <summary> + /// 璁惧鍏蜂綋绫诲瀷鐨勪俊鎭� + /// </summary> + private DeviceEnumInfo deviceEnumInfo = null; + /// <summary> + /// 涓ぎ绌鸿皟鐨勭増鏈帶浠� + /// </summary> + private NormalViewControl btnAirConditionerVersion = null; + /// <summary> + /// 绠�绾﹂潰鏉跨粦瀹氱殑娓╁害鐩爣鍚嶅瓧 + /// </summary> + private string bindTemperatureName = string.Empty; + /// <summary> + /// 绠�绾﹂潰鏉跨粦瀹氱殑婀垮害鐩爣鍚嶅瓧 + /// </summary> + private string bindHumidityName = string.Empty; + /// <summary> + /// 绠�绾﹂潰鏉跨粦瀹氳缁戠洰鏍囨槸娓╁害 + /// </summary> + private CommonDevice bindTemperatureDev; + /// <summary> + /// 绠�绾﹂潰鏉跨粦瀹氳缁戠洰鏍囨槸婀垮害 + /// </summary> + private CommonDevice bindHumidityDev; + /// <summary> + /// 绠�绾﹂潰鏉垮綋鍓峂ac + /// </summary> + private string deviceMacTemp = string.Empty; + // <summary> + /// 绠�绾﹂潰鏉夸腑琚粦瀹氱殑娓╂箍搴︾洰鏍囧垪琛� + /// </summary> + private List<BindObj.BindListResponseObj> bindList = new List<BindObj.BindListResponseObj>(); + #endregion + + #region 鈻� 鍒濆鍖朹____________________________ + + /// <summary> + /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓) + /// </summary> + /// <param name="deviceMac">璁惧mac鍦板潃</param> + public void ShowForm(string deviceMac) + { + this.listNewDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceMac); + if (listNewDevice.Count == 0) + { + //閽堝鍗曠函鍙湁涓�涓�200绔偣鐨勮澶� + listNewDevice.Add(Common.LocalDevice.Current.GetOTADevice(deviceMac)); + } + this.listDeviceType.Clear(); + deviceMacTemp = deviceMac; + foreach (var device in listNewDevice) + { + //鏀堕泦璁惧绫诲瀷 + this.listDeviceType.Add(device.Type); + } + //鑾峰彇杩欎竴鍫嗚澶囨椂灞炰簬浠�涔堢被鍨嬬殑 + this.deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listNewDevice); + + //璁剧疆鏍囬淇℃伅 + base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uDeviceSettion)); + + //鍒濆鍖栧彸涓婅鑿滃崟 + this.InitTopRightMenu(); + + //鍒濆鍖栦腑閮ㄦ帶浠� + this.InitMiddleFrame(); + + //閲嶆柊鑾峰彇纭欢淇℃伅 + this.RefreshHardFirmwareInfo(); + + //绠�绾﹀鍔熻兘闈㈡澘鑾峰彇缁戝畾鐩爣鐨勬樉绀� + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction) + { + //绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧淇℃伅 + var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62); + if (dev != null) + { + var key = new ZigBee.Device.Panel(); + key.DeviceAddr = deviceMac; + key.CurrentGateWayId = dev.CurrentGateWayId; + InitBindInfo(key); + } + } + } + + /// <summary> + /// 鍒濆鍖栦腑閮ㄦ帶浠� + /// </summary> + private void InitMiddleFrame() + { + //娓呯┖bodyFrame + this.ClearBodyFrame(); + + var listBackControl = new VerticalFrameControl(); + listBackControl.Height = bodyFrameLayout.Height; + bodyFrameLayout.AddChidren(listBackControl); + + //鍒濆鍖栨甯� + var tableContr = new InformationEditorControl(); + this.listview = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 1368); + + //鍥剧墖 + var btnPic = new DeviceInfoIconControl(); + btnPic.Y = Application.GetRealHeight(92); + btnPic.Gravity = Gravity.CenterHorizontal; + listBackControl.frameTable.AddChidren(btnPic); + btnPic.InitControl(listNewDevice[0]); + + //璁惧澶囨敞 + string caption = Language.StringByID(R.MyInternationalizationString.uDeviceNote); + string deviceName = Common.LocalDevice.Current.GetDeviceMacName(listNewDevice[0]); + var btnNote = new FrameCaptionInputControl(caption, deviceName, listview.rowSpace / 2); + listview.AddChidren(btnNote); + btnNote.InitControl(); + //鍒掔嚎 + btnNote.AddBottomLine(); + btnNote.txtInput.FinishInputEvent += () => + { + string oldName = Common.LocalDevice.Current.GetDeviceMacName(listNewDevice[0]); + if (btnNote.Text == string.Empty) + { + btnNote.Text = oldName; + } + if (oldName != btnNote.Text) + { + //淇敼鍚嶅瓧 + this.DeviceReName(btnNote.Text, false); + } + }; + + //璁惧绫诲瀷 + caption = Language.StringByID(R.MyInternationalizationString.uDeviceType); + deviceName = Common.LocalDevice.Current.GetDeviceObjectText(listNewDevice); + var btnType = new FrameCaptionViewControl(caption, deviceName, listview.rowSpace / 2); + btnType.UseClickStatu = false; + listview.AddChidren(btnType); + btnType.InitControl(); + //鍒掔嚎 + btnType.AddBottomLine(); + + //瀹夎浣嶇疆 + var rowBeloneArea = new BelongAreaControl(listview.rowSpace / 2); + listview.AddChidren(rowBeloneArea); + rowBeloneArea.InitControl(Language.StringByID(R.MyInternationalizationString.uInstallationLocation), this.listNewDevice); + //搴曠嚎 + rowBeloneArea.AddBottomLine(); + + var listCheck = new List<string>(); + rowBeloneArea.SelectRoomEvent += (roomKeys) => + { + //閫夋嫨鏈垎閰嶆椂,娓呯┖ + if (roomKeys == string.Empty) { listCheck = new List<string>(); } + foreach (var device in this.listNewDevice) + { + if (device is OTADevice) + { + //閽堝鍗曠函鍙湁涓�涓�200绔偣鐨勮澶� + continue; + } + if (roomKeys == string.Empty) + { + //濡傛灉閫夋嫨鐨勬槸鏈垎閰嶏紝鍒欏畠鐨勫叏閮ㄥ洖璺棤鏉′欢鍏ㄩ儴娓呯┖鎴块棿 + HdlRoomLogic.Current.ChangedRoom(device, roomKeys); + continue; + } + var room = HdlRoomLogic.Current.GetRoomByDevice(device); + string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); + if (room == null) + { + //杩欓噷鏈夌偣鐗规畩,濡傛灉鍥炶矾娌℃湁璁剧疆鏈夊尯鍩熺殑鏃跺��,鎵嶈缃� + listCheck.Add(mainKeys); + HdlRoomLogic.Current.ChangedRoom(device, roomKeys); + } + else if (this.deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir + && device.Type == DeviceType.FreshAir) + { + //鏂伴闈㈡澘鐨勬柊椋庤澶囷紝鍒欏尯鍩熻窡鐫�妯″潡涓�璧� + HdlRoomLogic.Current.ChangedRoom(device, roomKeys); + } + else if (listCheck.Contains(mainKeys) == true) + { + //濡傛灉杩欎釜鍥炶矾涔嬪墠閮借繕娌℃湁鍖哄煙,鍦ㄦ湰鐣岄潰杩樻病鏈夊叧闂箣鍓�,鍙互鏃犳潯浠堕殢渚垮彉鏇� + HdlRoomLogic.Current.ChangedRoom(device, roomKeys); + } + } + //淇濆瓨璁惧鎴块棿绱㈠紩 + Common.LocalDevice.Current.SaveRealDeviceRoomId(this.listNewDevice, roomKeys); + }; + + //娣诲姞鍏ㄩ儴鑿滃崟 + this.AddAllMenuRow(); + + //鍒濆鍖栨甯冨畬鎴� + tableContr.FinishInitControl(); + tableContr = null; + + //淇濆瓨 + var btnFinish = new BottomClickButton(); + btnFinish.TextID = R.MyInternationalizationString.uSave; + bodyFrameLayout.AddChidren(btnFinish); + btnFinish.ButtonClickEvent += (sender, e) => + { + string oldName = Common.LocalDevice.Current.GetDeviceMacName(listNewDevice[0]); + if (btnNote.Text.Trim() == string.Empty) + { + btnNote.Text = oldName; + } + if (oldName != btnNote.Text.Trim()) + { + //淇敼鍚嶅瓧 + this.DeviceReName(btnNote.Text.Trim(), true); + } + else + { + //鍏抽棴鑷韩 + this.CloseForm(); + } + }; + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�,璁╂墍鏈夎彍鍗曢兘涓嶈兘鐐瑰嚮 + if (Common.Config.Instance.Home.IsVirtually == true) + { + for (int i = 0; i < listview.ChildrenCount; i++) + { + var myRow = listview.GetChildren(i) as FrameRowControl; + if (myRow != null) + { + myRow.UseClickStatu = false; + myRow.CanClick = false; + } + } + } + } + + #endregion + + #region 鈻� 娣诲姞鑿滃崟___________________________ + + /// <summary> + /// 娣诲姞鍏ㄩ儴鑿滃崟 + /// </summary> + private void AddAllMenuRow() + { + if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣) + { + //鍙湁鏄渤涓滅殑璁惧鐨勬椂鍊� + if (deviceEnumInfo.IsHdlDevice == true) + { + //娣诲姞銆愮敤鎴风鐞嗐�戣 + this.AddUserManageRow(); + //娣诲姞銆愯繙绋嬪紑閿併�戣 + this.AddRemoteUnLocksRow(); + //娣诲姞銆愰棬閿佹椂闂淬�戣 + this.AddDoorLocksTimeRow(); + } + } + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.AirConditioner_ZbGateway) + { + //娣诲姞銆愬鍐呮満璁剧疆銆戣(绌鸿皟涓撶敤) + this.AddIndoorUnitSettionRow(); + } + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction) + { + //绠�绾﹀鍔熻兘闈㈡澘 + this.AddIBindRow(deviceMacTemp); + this.AddFunctionSettionRow(); + this.AddHumiditySourceRow(deviceMacTemp); + this.AddTemperatureSensorRow(deviceMacTemp); + } + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleEnvironment) + { + //娣诲姞銆愮粦瀹氱洰鏍囥�戣(绠�绾︾幆澧冮潰鏉跨敤) + this.AddSimplePanelSettionRow(); + } + else + { + //娣诲姞銆愬伐浣滄ā寮忋�戣(pir浼犳劅鍣ㄤ笓鐢�) + this.AddPirSensorWorkModeRow(); + //娣诲姞銆愮粦瀹氱洰鏍囥�戣(pir浼犳劅鍣ㄤ笓鐢�) + this.AddPirSensorBindRow(); + //娣诲姞銆愭柟鍚戜笌闄愪綅銆戣(寮�鍚堝笜,鍗峰笜涓撶敤) + this.AddDirectionAndLimitRow(); + //娣诲姞銆愭墜鎷夋帶鍒躲�戣(寮�鍚堝笜涓撶敤) + this.AddHandPullControlRow(); + //娣诲姞銆愭寜閿缃�戣(鏂规偊涓撶敤) --杩欎釜鏈夊彲鑳藉拰闈㈡澘閲嶅彔 + if (this.AddFangyuePanelSettionRow() == false) + { + //娣诲姞銆愭寜閿缃�戣(闈㈡澘涓撶敤) + this.AddPanelSettionRow(); + } + //妫�娴嬭兘鍚︽樉绀哄姛鑳借缃殑鑿滃崟 + if (this.CheckCanShowFunctionSettionRow() == true) + { + //娣诲姞銆愬姛鑳借缃�戣 + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.Sensor_PMTwoPointFive) + { + //PM浼犳劅鍣� + this.AddFunctionSettionRowPM(); + } + else + { + this.AddFunctionSettionRow(); + } + + } + + //娣诲姞銆愬共鎺ョ偣璁剧疆銆戣 + this.AddDryContactSettionRow(); + } + //娣诲姞銆愬姛鑳界被鍨嬨�戣(绌烘皵寮�鍏充笓鐢�) + this.AddAirSwitchFunctionTypeRow(); + //娣诲姞銆愰�氱敤淇℃伅銆戣 + this.AddGeneralInformationRow(); + + //娣诲姞銆愮┖璋冩ā鍧楃増鏈�(绌鸿皟涓撶敤)銆戣 + this.AddAirConditionerModelVersionRow(); + + if (deviceEnumInfo.IsHdlDevice == true) + { + //娣诲姞銆愬浐浠跺崌绾с�戣 + this.AddFirmwareUpdateRow(); + } + } + + #endregion + + #region 鈻� 鐢ㄦ埛绠$悊(闂ㄩ攣)_____________________ + + /// <summary> + /// 娣诲姞銆愮敤鎴风鐞嗐�戣锛堥棬閿佷笓鐢級 + /// </summary> + private void AddUserManageRow() + { + //濡傛灉鏄櫤鑳介棬閿� + if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣) + { + //鐢ㄦ埛绠$悊 + string caption = Language.StringByID(R.MyInternationalizationString.uUserManage); + var btnRow = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnRow); + btnRow.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnRow.AddRightArrow(); + //搴曠嚎 + btnRow.AddBottomLine(); + var doorLock = this.listNewDevice[0] as ZigBee.Device.DoorLock; + btnRow.ButtonClickEvent += async (sender, e) => + { + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + Action action = null; + Action actionNone = null; + action = () => + { + var userManagement = new Shared.Phone.UserCenter.DoorLock.UserManagement(doorLock); + Shared.Phone.UserView.HomePage.Instance.AddChidren(userManagement); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + userManagement.Show(); + }; + actionNone = () => + { + Shared.Phone.UserCenter.DoorLock.DoorLockCommonLayout.SecurityRequest(doorLock); + }; + HdlCheckLogic.Current.CheckSecondarySecurity(action, actionNone); + } + else + { + CommonPage.Loading.Start(""); + var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid); + if (result == false) + { + Action action = null; + Action actionNone = null; + action = () => + { + var userManagement = new Shared.Phone.UserCenter.DoorLock.UserManagement(doorLock); + Shared.Phone.UserView.HomePage.Instance.AddChidren(userManagement); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + userManagement.Show(); + }; + actionNone = () => + { + Shared.Phone.UserCenter.DoorLock.DoorLockCommonLayout.SecurityRequest(doorLock); + }; + HdlCheckLogic.Current.CheckSecondarySecurity(action, actionNone); + + } + else + { + this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed)); + } + CommonPage.Loading.Hide(); + } + }; + } + } + + #endregion + + #region 鈻� 杩滅▼寮�閿�(闂ㄩ攣)_____________________ + + /// <summary> + /// 娣诲姞銆愯繙绋嬪紑閿併�戣锛堥棬閿佷笓鐢級 + /// </summary> + private void AddRemoteUnLocksRow() + { + //濡傛灉鏄櫤鑳介棬閿� + if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣) + { + //杩滅▼寮�閿� + string caption = Language.StringByID(R.MyInternationalizationString.uRemoteUnLocks); + var btnRow = new FrameRowControl(listview.rowSpace / 2); + btnRow.UseClickStatu = false; + listview.AddChidren(btnRow); + btnRow.AddLeftCaption(caption, 600); + //寮�鍏冲浘鏍� + var btnswitch = btnRow.AddMostRightSwitchIcon(); + //搴曠嚎 + btnRow.AddBottomLine(); + + var doorLock = (ZigBee.Device.DoorLock)listNewDevice[0]; + if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword) == false) + { + btnswitch.IsSelected = true; + } + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�,璁╂墍鏈夎彍鍗曢兘涓嶈兘鐐瑰嚮 + if (Common.Config.Instance.Home.IsVirtually == true) + { + btnswitch.CanClick = false; + } + + btnswitch.ButtonClickEvent += async (sender, e) => + { + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + if (btnswitch.IsSelected == true) + { + btnswitch.IsSelected = false; + doorLock.RemoteUnlockPassword = string.Empty; + return; + } + var frame = new DoorLock.DoorLockCommonLayout(); + frame.RemotePasswordDialog((ZigBee.Device.DoorLock)listNewDevice[0], btnswitch.btnIcon); + frame = null; + } + else + { + var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid); + if (result == false) + { + var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid); + if (result1 == true) + { + if (btnswitch.IsSelected == true) + { + btnswitch.IsSelected = false; + doorLock.RemoteUnlockPassword = string.Empty; + return; + } + var frame = new DoorLock.DoorLockCommonLayout(); + frame.RemotePasswordDialog((ZigBee.Device.DoorLock)listNewDevice[0], btnswitch.btnIcon); + frame = null; + } + else + { + this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess)); + } + } + else + { + this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed)); + } + } + }; + } + } + + #endregion + + #region 鈻� 闂ㄩ攣鏃堕棿(闂ㄩ攣)_____________________ + + /// <summary> + /// 娣诲姞銆愰棬閿佹椂闂淬�戣锛堥棬閿佷笓鐢級 + /// </summary> + private void AddDoorLocksTimeRow() + { + //濡傛灉鏄櫤鑳介棬閿� + if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣) + { + //闂ㄩ攣鏃堕棿 + string caption = Language.StringByID(R.MyInternationalizationString.uDoorLocksTime); + var btnRow = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnRow); + btnRow.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnRow.AddRightArrow(); + //搴曠嚎 + btnRow.AddBottomLine(); + var doorLock = this.listNewDevice[0] as ZigBee.Device.DoorLock; + btnRow.ButtonClickEvent += async (sender, e) => + { + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + var tempPage = new Shared.Phone.UserCenter.DoorLock.TimeSettignPage(doorLock, "DoorLockTime"); + Shared.Phone.UserView.HomePage.Instance.AddChidren(tempPage); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + tempPage.Show(); + } + else + { + var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid); + if (result == false) + { + var tempPage = new Shared.Phone.UserCenter.DoorLock.TimeSettignPage(doorLock, "DoorLockTime"); + Shared.Phone.UserView.HomePage.Instance.AddChidren(tempPage); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + tempPage.Show(); + } + else + { + this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed)); + } + } + }; + } + } + + #endregion + + #region 鈻� 鎸夐敭璁剧疆(闈㈡澘)_____________________ + + /// <summary> + /// 娣诲姞銆愭寜閿缃�戣(闈㈡澘) + /// </summary> + private void AddPanelSettionRow() + { + //蹇呴』鏄渤涓滆澶�,蹇呴』鏄潰鏉匡紝骞朵笖鏈夊共鎺ョ偣鎵嶈 + if (deviceEnumInfo.IsHdlDevice == false || deviceEnumInfo.BeloneType != DeviceBeloneType.A鎸夐敭闈㈡澘 || listDeviceType.Contains(DeviceType.OnOffSwitch) == false) + { + return; + } + //鎸夐敭璁剧疆 + string caption = Language.StringByID(R.MyInternationalizationString.uPanelSettion); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + var form = new DevicePanel.PanelButtonSettionForm(); + form.AddForm(listNewDevice[0]); + }; + } + + #region 鈻� 绠�绾︾幆澧�(闈㈡澘)_____________________ + + /// <summary> + /// 娣诲姞銆愭寜閿缃�戣绠�绾︾幆澧�(闈㈡澘) + /// </summary> + private void AddSimplePanelSettionRow() + { + //鎸夐敭璁剧疆 + string caption = Language.StringByID(R.MyInternationalizationString.uPanelSettion); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + //绠�绾︾幆澧冮潰鏉跨殑鎸夐敭閰嶇疆 + var form = new DevicePanel.PanelSettionWithSourceForm(); + form.AddForm(listNewDevice[0]); + }; + } + + #endregion + + #endregion + + #region 鈻� 鎸夐敭璁剧疆(鏂规偊)_____________________ + + /// <summary> + /// 娣诲姞銆愭寜閿缃�戣(鏂规偊) + /// </summary> + private bool AddFangyuePanelSettionRow() + { + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir) + { + //鎸夐敭璁剧疆 + string caption = Language.StringByID(R.MyInternationalizationString.uPanelSettion); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight) + { + //鏂规偊鎸夐敭闈㈡澘[鍗曞紑鍙屾帶/鍙屽紑鍥涙帶/鍥涘紑鍏帶]閰嶇疆 + var form = new DevicePanel.PanelFangyueButtonSettionForm(); + form.AddForm(listNewDevice[0]); + } + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir) + { + //鏂规偊鐜闈㈡澘鐨勬寜閿厤缃�&鏂规偊鏂伴闈㈡澘鐨勬寜閿厤缃� + var form = new DevicePanel.PanelSettionWithSourceForm(); + form.AddForm(listNewDevice[0]); +<<<<<<< HEAD:ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs + } +======= + } +>>>>>>> dev-tzy:ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs + else + { + var form = new DevicePanel.PanelFangyueButtonSettionForm(); + form.AddForm(listNewDevice[0]); + } + }; + return true; + } + return false; + } + + #endregion + + #region 鈻� 骞叉帴鐐硅缃�(骞叉帴鐐�)_________________ + + /// <summary> + /// 娣诲姞銆愬共鎺ョ偣璁剧疆銆戣 + /// </summary> + private void AddDryContactSettionRow() + { + if (this.listDeviceType.Contains(DeviceType.OnOffSwitch) == false) + { + //蹇呴』鏈変竴璺洖璺槸OnOffSwitch鎵嶈,闈㈡澘鐨勫共鎺ョ偣鐨勮瘽锛屼娇鐢ㄧ殑鏄埆鐨勮彍鍗� + return; + } + if (deviceEnumInfo.IsHdlDevice == true && deviceEnumInfo.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘) + { + //娌充笢鐨勯潰鏉跨殑璇濓紝瀹冩湁鑷繁鐨勯厤缃晫闈�, + //濡傛灉鏄涓夋柟璁惧鐨勮瘽锛屼娇鐢ㄦ櫘閫氬共鎺ョ偣鐣岄潰(瀹冭兘浣跨敤缁戝畾鍔熻兘,鏃犺儗鍏夎缃�) + return; + } + + //骞叉帴鐐硅缃� + string caption = Language.StringByID(R.MyInternationalizationString.uDryContactSettion); + var btnBackLight = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnBackLight); + btnBackLight.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnBackLight.AddRightArrow(); + //搴曠嚎 + btnBackLight.AddBottomLine(); + btnBackLight.ButtonClickEvent += (sender, e) => + { + var form = new DeviceDryContactSettionForm(); + form.AddForm(listNewDevice[0]); + }; + } + + #endregion + + #region 鈻� 宸ヤ綔妯″紡(pir浼犳劅鍣ㄤ笓鐢�)____________ + + /// <summary> + /// 娣诲姞銆愬伐浣滄ā寮忋�戣(pir浼犳劅鍣ㄤ笓鐢�) + /// </summary> + private void AddPirSensorWorkModeRow() + { + if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.Sensor_Pir + || deviceEnumInfo.IsHdlDevice == false) + { + return; + } + //宸ヤ綔妯″紡 + string caption = Language.StringByID(R.MyInternationalizationString.uWorkMode); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + var form = new DevicePirSensor.PirSensorWorkModeMenuForm(); + form.AddForm((IASZone)this.listNewDevice[0]); + }; + } + + #endregion; + + #region 鈻� 缁戝畾鐩爣(pir浼犳劅鍣ㄤ笓鐢�)____________ + + /// <summary> + /// 娣诲姞銆愮粦瀹氱洰鏍囥�戣(pir浼犳劅鍣ㄤ笓鐢�) + /// </summary> + private void AddPirSensorBindRow() + { + if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.Sensor_Pir) + { + return; + } + //缁戝畾鐩爣 + string caption = Language.StringByID(R.MyInternationalizationString.uBindTargets); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + var form = new DevicePirSensor.PirSensorBindTargetSettionForm(); + form.AddForm((IASZone)this.listNewDevice[0]); + }; + } + + #endregion; + + #region 鈻� 鍔熻兘璁剧疆(閫氱敤)_____________________ + + /// <summary> + /// 娣诲姞銆愬姛鑳借缃�戣 + /// </summary> + private void AddFunctionSettionRow() + { + //鍙湁鍥炶矾鏁板ぇ浜�1鎵嶈兘鏈夎繖涓彍鍗� + if (Common.LocalDevice.Current.GetDevicesCountByMac(listNewDevice[0].DeviceAddr) == 1) + { + //鏂伴灏忔ā鍧楀彧鏈変竴涓洖璺紝浣嗚姹傛柊椋庡皬妯″潡鐨勬柊椋庢湁鍔熻兘璁剧疆 + if (deviceEnumInfo.ConcreteType != DeviceConcreteType.Relay_FangyueFreshAirModul) + { + return; + } + } + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir) + { + //鐜闈㈡澘娌℃湁鍔熻兘璁剧疆 + return; + } + + //2020.03.06鏂拌拷鍔狅細濡傛灉鍏ㄩ儴閮芥槸骞叉帴鐐圭殑璇�,涔熶笉鑳芥湁杩欎釜涓滆タ + int dryContactCount = 0; + for (int i = 0; i < listNewDevice.Count; i++) + { + if (listNewDevice[i].Type == DeviceType.OnOffSwitch) + { + dryContactCount++; + } + } + if (listNewDevice.Count == dryContactCount) + { + //杩欎釜璁惧鍏ㄦ槸骞叉帴鐐� + return; + } + + //鍔熻兘璁剧疆 + string caption = Language.StringByID(R.MyInternationalizationString.uFunctionSettingUp); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + //鏂规偊闈㈡澘 + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight) + { + var form = new DevicePanel.PanelFangyueFunctionSettionForm(); + form.AddForm(listNewDevice[0], deviceEnumInfo); + } + //绠�绾︾幆澧冮潰鏉跨殑鎸夐敭閰嶇疆 + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction) + { + var form = new DeviceFunctionSettionForm(); + if (listNewDevice.Count > 62) + { + form.AddForm(listNewDevice[62], true); + } + } + //娌充笢鐨勯潰鏉胯澶� + else if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘 && deviceEnumInfo.IsHdlDevice == true) + { + var form = new DevicePanel.PanelFunctionSettionForm(); + form.AddForm(listNewDevice[0]); + } + else + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(listNewDevice[0], false); + } + }; + } + + /// <summary> + /// 娣诲姞浼犳劅鍣ㄣ�愬姛鑳借缃�戣 + /// </summary> + private void AddFunctionSettionRowPM() + { + //鍔熻兘璁剧疆 + string caption = Language.StringByID(R.MyInternationalizationString.uFunctionSettingUp); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(listNewDevice[0], false); + }; + } + + #endregion; + + #region 鈻� 鏂瑰悜涓庨檺浣�(绐楀笜)___________________ + + /// <summary> + /// 娣诲姞銆愭柟鍚戜笌闄愪綅銆戣(绐楀笜涓撶敤) + /// </summary> + private void AddDirectionAndLimitRow() + { + if (deviceEnumInfo.BeloneType != DeviceBeloneType.A绐楀笜) + { + return; + } + var deviceCurtain = (Rollershade)this.listNewDevice[0]; + if (deviceCurtain.WcdType != 4 && deviceCurtain.WcdType != 0) + { + //寮�鍚堝笜,鍗峰笜涓撶敤 + return; + } + + //鏂瑰悜涓庨檺浣� + string caption = Language.StringByID(R.MyInternationalizationString.uDirectionAndLimit); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + if (deviceCurtain.WcdType == 4) + { + var form = new DeviceCurtain.AutoOpenDirectionAndLimitSettionForm(); + form.AddForm(deviceCurtain); + } + else if (deviceCurtain.WcdType == 0) + { + var form = new DeviceCurtain.SiphonateDirectionAndLimitSettionForm(); + form.AddForm(deviceCurtain); + } + }; + } + + #endregion; + + #region 鈻� 鎵嬫媺鎺у埗(寮�鍚堝笜)___________________ + + /// <summary> + /// 娣诲姞銆愭墜鎷夋帶鍒躲�戣(寮�鍚堝笜涓撶敤) + /// </summary> + private void AddHandPullControlRow() + { + if (deviceEnumInfo.BeloneType != DeviceBeloneType.A绐楀笜) + { + return; + } + var deviceCurtain = (Rollershade)this.listNewDevice[0]; + if (deviceCurtain.WcdType != 4) + { + //寮�鍚堝笜涓撶敤 + return; + } + + //鎵嬫媺鎺у埗 + string caption = Language.StringByID(R.MyInternationalizationString.uHandPullControl); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + btnFunction.UseClickStatu = false; + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //寮�鍏冲浘鏍� + var btnSwitch = btnFunction.AddMostRightSwitchIcon(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnSwitch.ButtonClickEvent += (sender, e) => + { + //鍒囨崲妯″紡 + bool statu = !btnSwitch.IsSelected; + var result = HdlDeviceCurtainLogic.Current.SetHandPullControl(deviceCurtain, statu); + if (result == true) + { + btnSwitch.IsSelected = statu; + } + }; + //濡傛灉鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + btnSwitch.IsSelected = ModelData.DeviceModelDataLogic.Current.GetCurtainHandPullControl(deviceCurtain); + return; + } + + //娣诲姞灞炴�т笂鎶ョ洃鍚� + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(this.listNewDevice[0]); + HdlGatewayReceiveLogic.Current.AddAttributeEvent("HandPullControl", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (device) => + { + string checkKey = LocalDevice.Current.GetDeviceMainKeys(device); + if (mainkeys != checkKey || device.DeviceStatusReport.CluterID != 258) + { + return; + } + foreach (var attriBute in device.DeviceStatusReport.AttriBute) + { + if (attriBute.AttributeId == 23) + { + //鎵嬫媺鎺у埗 + if (0 < (attriBute.AttriButeData & 0x04)) + { + HdlThreadLogic.Current.RunMain(() => + { + btnSwitch.IsSelected = true; + }); + } + } + } + }); + //鍙戦�佸懡浠� + deviceCurtain.ReadCurtainDirectionAndMode(); + } + + #endregion; + + #region 鈻� 瀹ゅ唴鏈鸿缃�(绌鸿皟)___________________ + + /// <summary> + /// 娣诲姞銆愬鍐呮満璁剧疆銆戣(绌鸿皟涓撶敤) + /// </summary> + private void AddIndoorUnitSettionRow() + { + if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway + || this.listNewDevice[0] is OTADevice)//杩藉姞锛氬崟绾彧鏈�200绔偣鐨勮瘽锛屼笉鏄剧ず杩欎釜鑿滃崟 + { + return; + } + + //瀹ゅ唴鏈鸿缃� + string caption = Language.StringByID(R.MyInternationalizationString.uIndoorUnitSettion); + var btnFunction = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnFunction); + btnFunction.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnFunction.AddRightArrow(); + //搴曠嚎 + btnFunction.AddBottomLine(); + btnFunction.ButtonClickEvent += (sender, e) => + { + var form = new DeviceAirConditioner.IndoorUnitListForm(); + form.AddForm(listNewDevice[0].DeviceAddr); + }; + } + #endregion + + #region 鈻� 绠�绾﹀鍔熻兘闈㈡澘鐢╛__________________ + /// <summary> + /// 娣诲姞銆愮粦瀹氱洰鏍囥�戣 + /// </summary> + private void AddIBindRow(string deviceMac) + { + string bindTargets = Language.StringByID(R.MyInternationalizationString.uBindTargets); + var btnBindTargets = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnBindTargets); + btnBindTargets.AddLeftCaption(bindTargets, 600); + //鍚戝彸鍥炬爣 + btnBindTargets.AddRightArrow(); + //搴曠嚎 + btnBindTargets.AddBottomLine(); + btnBindTargets.ButtonClickEvent += (sender, e) => + { + var simpleMutilfunctionTargetsPage = new Shared.Phone.UserCenter.DeviceBind.PanelSimpleMutilfunctionTargetsForm(deviceMac); + Shared.Phone.UserView.HomePage.Instance.AddChidren(simpleMutilfunctionTargetsPage); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + simpleMutilfunctionTargetsPage.Show(); + }; + } + + /// <summary> + /// 婀垮害鏉ユ簮琛� + /// </summary> + private void AddHumiditySourceRow(string deviceMac) + { + //婀垮害 + var rowHumidity = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(rowHumidity); + rowHumidity.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.HumiditySource), 600); + //搴曠嚎 + rowHumidity.AddBottomLine(); + //鍙崇澶� + rowHumidity.AddRightArrow(); + var msg = Language.StringByID(R.MyInternationalizationString.nothing); + if (!string.IsNullOrEmpty(bindHumidityName)) + { + msg = bindHumidityName; + } + var btnHumidityStatu = rowHumidity.AddMostRightView(msg, 700); + rowHumidity.ButtonClickEvent += (sender, e) => + { + + var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62);//绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧 + var device = new CommonDevice(); + if (dev != null) + { + device.CurrentGateWayId = dev.CurrentGateWayId; + } + device.Type = DeviceType.OnOffSwitch; + device.DeviceAddr = deviceMac; + device.DeviceEpoint = 65;//鑳界粦瀹氭箍搴︾殑鍥炶矾 + var paneTargetsBaseFormp = new PaneTargetsBaseForm(device, bindHumidityDev, BindInfo.BindType.Humidity); + Shared.Phone.UserView.HomePage.Instance.AddChidren(paneTargetsBaseFormp); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + paneTargetsBaseFormp.Show(); + paneTargetsBaseFormp.actionHumidityTarget += (bindName) => + { + HdlThreadLogic.Current.RunMain(() => + { + if (string.IsNullOrEmpty(bindName)) + { + btnHumidityStatu.Text = Language.StringByID(R.MyInternationalizationString.nothing); + } + else + { + btnHumidityStatu.Text = bindName; + } + }); + }; + }; + } + + /// <summary> + /// 娓╁害鏉ユ簮琛� + /// </summary> + private void AddTemperatureSensorRow(string deviceMac) + { + //娓╁害鏉ユ簮 + var rowTemPerature = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(rowTemPerature); + rowTemPerature.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.TemperatureSource), 600); + //搴曠嚎 + rowTemPerature.AddBottomLine(); + //鍙崇澶� + rowTemPerature.AddRightArrow(); + var msg = Language.StringByID(R.MyInternationalizationString.nothing); + if (!string.IsNullOrEmpty(bindTemperatureName)) + { + msg = bindTemperatureName; + } + var btnTemperatureStatu = rowTemPerature.AddMostRightView(msg, 700); + rowTemPerature.ButtonClickEvent += (sender, e) => + { + var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62);//绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧 + var device = new CommonDevice(); + if (dev != null) + { + device.CurrentGateWayId = dev.CurrentGateWayId; + } + device.Type = DeviceType.OnOffSwitch; + device.DeviceAddr = deviceMac; + device.DeviceEpoint = 64;//鑳界粦瀹氭俯搴︾殑鍥炶矾 + var paneTargetsBaseFormp = new PaneTargetsBaseForm(device, bindTemperatureDev, BindInfo.BindType.Temperature); + Shared.Phone.UserView.HomePage.Instance.AddChidren(paneTargetsBaseFormp); + Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; + paneTargetsBaseFormp.Show(); + paneTargetsBaseFormp.actionTemperatureTarget += (bindName) => + { + HdlThreadLogic.Current.RunMain(() => + { + if (string.IsNullOrEmpty(bindName)) + { + btnTemperatureStatu.Text = Language.StringByID(R.MyInternationalizationString.nothing); + } + else + { + btnTemperatureStatu.Text = bindName; + } + }); + }; + }; + } + + /// <summary> + ///璇绘俯婀垮害鏁版嵁 + /// </summary> + void InitBindInfo(CommonDevice curControlDev) + { + System.Threading.Tasks.Task.Run(async () => + { + try + { + Application.RunOnMainThread(() => + { + CommonPage.Loading.Start(""); + }); + //1銆佽幏鍘荤粦瀹氱殑娓╁害浼犳劅鍣� + curControlDev.DeviceEpoint = 64; + var result = await GetBindName(curControlDev); + if (!result) + { + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5007_2" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); + }); + return; + } + + //2銆佽幏鍘荤粦瀹氱殑婀垮害搴︿紶鎰熷櫒 + curControlDev.DeviceEpoint = 65; + var result2 = await GetBindName(curControlDev); + if (!result2) + { + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5007_3" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); + }); + return; + } + } + catch (Exception ex) + { + var mess = ex.Message; + } + finally + { + Application.RunOnMainThread(() => + { + //鍒濆鍖栦腑閮ㄦ帶浠� + this.InitMiddleFrame(); + CommonPage.Loading.Hide(); + }); + } + }); + } + + /// <summary> + /// 鑾峰彇缁戝畾鐨勬俯婀垮害鐩爣 + /// </summary> + /// <param name="curControlDev"></param> + /// <returns></returns> + private async System.Threading.Tasks.Task<bool> GetBindName(CommonDevice curControlDev) + { + bool result = false; + var panelBindListRes = HdlDeviceBindLogic.Current.GetDeviceBindAsync(curControlDev); + if (panelBindListRes != null && panelBindListRes.getAllBindResponseData != null) + { + bindList = panelBindListRes.getAllBindResponseData.BindList; + foreach (var bDev in bindList) + { + var device = Common.LocalDevice.Current.GetDevice(bDev.BindMacAddr, bDev.BindEpoint); + if (device == null) + { + continue; + } + if (device.Type == DeviceType.TemperatureSensor) + { + var bD = device as TemperatureSensor; + if (bD.SensorDiv == 1 && bDev.BindCluster == 1026) + { + if (string.IsNullOrEmpty(bDev.ESName)) + { + bindTemperatureName = Common.LocalDevice.Current.GetDeviceEpointName(device); + } + else + { + bindTemperatureName = bDev.ESName; + } + bindTemperatureDev = device; + } + if (bD.SensorDiv == 2 && bDev.BindCluster == 1029) + { + if (string.IsNullOrEmpty(bDev.ESName)) + { + bindHumidityName = Common.LocalDevice.Current.GetDeviceEpointName(device); + } + else + { + bindHumidityName = bDev.ESName; + } + + bindHumidityDev = device; + } + } + if (device.Type == DeviceType.FreshAirHumiditySensor) + { + if (string.IsNullOrEmpty(bDev.ESName)) + { + bindHumidityName = Common.LocalDevice.Current.GetDeviceEpointName(device); + } + else + { + bindHumidityName = bDev.ESName; + } + + bindHumidityDev = device; + } + } + result = true; + } + return result; + } + #endregion + + #region 鈻� 鍔熻兘绫诲瀷(绌烘皵寮�鍏充笓鐢�)_____________ + + /// <summary> + /// 娣诲姞銆愬姛鑳界被鍨嬨�戣(绌烘皵寮�鍏充笓鐢�) + /// </summary> + private void AddAirSwitchFunctionTypeRow() + { + //2020.04.28鍙樻洿:鏈変釜鍒澶囧畠闄や簡缁х數鍣ㄥ洖璺紝浠�涔堥兘娌℃湁浜�, + //杩欎釜鏃跺�欎篃瑕佺幇瀹炲嚭鏉� + if (this.listNewDevice.Count != 1) + { + return; + } + if (this.listNewDevice[0].Type != DeviceType.OnOffOutput + && this.listNewDevice[0].Type != DeviceType.AirSwitch) + { + return; + } + //鑷畾涔夊姛鑳界被鍨嬫帶浠� + var rowFunction = new DeviceFunctionTypeRowControl(this.listNewDevice[0], listview.rowSpace / 2); + listview.AddChidren(rowFunction); + rowFunction.InitControl(); + //搴曠嚎 + rowFunction.AddBottomLine(); + } + + #endregion + + #region 鈻� 閫氱敤淇℃伅___________________________ + + /// <summary> + /// 娣诲姞銆愰�氱敤淇℃伅銆戣 + /// </summary> + private void AddGeneralInformationRow() + { + string caption = Language.StringByID(R.MyInternationalizationString.uGeneralInformation); + var btnGeneral = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(btnGeneral); + btnGeneral.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + btnGeneral.AddRightArrow(); + //搴曠嚎 + btnGeneral.AddBottomLine(); + btnGeneral.ButtonClickEvent += (sender, e) => + { + var form = new DeviceGeneralInformationForm(); + form.AddForm(listNewDevice[0].DeviceAddr); + }; + } + + #endregion + + #region 鈻� 绌鸿皟妯″潡鐗堟湰(绌鸿皟涓撶敤)_____________ + + /// <summary> + /// 娣诲姞銆愮┖璋冩ā鍧楃増鏈�戣(娌充笢鐨勪腑澶┖璋�) + /// </summary> + private void AddAirConditionerModelVersionRow() + { + if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway) + { + //涓嶆槸涓ぎ绌鸿皟 + return; + } + string caption = Language.StringByID(R.MyInternationalizationString.uAirConditionerModelVersion); + var rowVersion = new FrameRowControl(listview.rowSpace / 2); + rowVersion.UseClickStatu = false; + listview.AddChidren(rowVersion); + rowVersion.AddLeftCaption(caption, 600); + //鐗堟湰 + this.btnAirConditionerVersion = rowVersion.AddMostRightView("", 800); + //搴曠嚎 + rowVersion.AddBottomLine(); + + //鑾峰彇涓ぎ绌鸿皟妯″潡鐨勭増鏈� + this.ReadAirConditionerVersion(); + } + + #endregion + + #region 鈻� 鍥轰欢鍗囩骇___________________________ + + /// <summary> + /// 娣诲姞銆愬浐浠跺崌绾с�戣 + /// </summary> + private void AddFirmwareUpdateRow() + { + //鎷ユ湁200绔彛杩欎釜涓滆タ鐨勬椂鍊欙紝鎵嶄細鏄剧ず杩欎竴琛� + var oTADevice = Common.LocalDevice.Current.GetOTADevice(listNewDevice[0].DeviceAddr); + if (oTADevice == null) + { + return; + } + + //鍥轰欢鍗囩骇 + string caption = Language.StringByID(R.MyInternationalizationString.uFirmwareUpdate); + var rowUpDate = new FrameRowControl(listview.rowSpace / 2); + listview.AddChidren(rowUpDate); + rowUpDate.AddLeftCaption(caption, 600); + //鍚戝彸鍥炬爣 + rowUpDate.AddRightArrow(); + //搴曠嚎 + rowUpDate.AddBottomLine(); + + //鎻愮ず鏈夋柊鐗堟湰 + var btnNewVersion = new PicViewControl(78, 55); + btnNewVersion.UnSelectedImagePath = "Item/NewVersion.png"; + btnNewVersion.Visible = false; + btnNewVersion.X = Application.GetRealWidth(242); + btnNewVersion.Y = Application.GetRealHeight(23); + rowUpDate.AddChidren(btnNewVersion, ChidrenBindMode.BindEvent); + + rowUpDate.ButtonClickEvent += (sender, e) => + { + if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway) + { + //杩欎釜鏄竴鑸澶囩殑鍗囩骇 + var form = new DeviceFirmwareUpdateForm(); + form.AddForm(listNewDevice[0].DeviceAddr); + } + else + { + //涓ぎ绌鸿皟鐨勫崌绾х殑璇濓紝鏄壒娈婄殑 + var form = new DeviceAirConditioner.ACZbGatewayUpdateMenuForm(); + form.AddForm(listNewDevice[0], btnNewVersion.Visible); + } + btnNewVersion.Visible = false; + }; + + //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢 + if (Common.Config.Instance.Home.IsVirtually == false) + { + //璁剧疆璁惧鐨勭増鏈俊鎭� + this.SetDeviceVersionInfo(btnNewVersion, oTADevice); + } + } + + /// <summary> + /// 璁剧疆璁惧鐨勭増鏈俊鎭� + /// </summary> + /// <param name="btnNewVersion">鏈夋柊鐗堟湰鐨勬彁绀烘帶浠�</param> + /// <param name="oTADevice">ota璁惧</param> + private void SetDeviceVersionInfo(PicViewControl btnNewVersion, OTADevice oTADevice) + { + HdlThreadLogic.Current.RunThread(() => + { + bool receiveImageInfo = false; + //璁剧疆璁惧鍏ㄩ儴鐨勯暅鍍忎俊鎭� + HdlDeviceImageInfoLogic.Current.SetAllImageInfoToOtaDevice(oTADevice, (device, reportData) => + { + receiveImageInfo = true; + }); + int count = 5; + while (receiveImageInfo == false && count > 0) + { + //绛夊緟璁惧闀滃儚鐨勫弽棣� + System.Threading.Thread.Sleep(300); + count--; + } + //绉婚櫎浜嬩欢 + HdlDeviceImageInfoLogic.Current.RemoveDeviceFirmwareVersionThread(oTADevice); + + oTADevice = Common.LocalDevice.Current.GetOTADevice(listNewDevice[0].DeviceAddr); + //娣诲姞鍗囩骇鍥轰欢淇℃伅(鎴愪笉鎴愬姛閮芥棤鎵�璋�) + var result = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.ZigbeeDevice, oTADevice.HwVersion.ToString(), oTADevice.ImgTypeId.ToString()); + + //鑾峰彇璁惧鏈�鏂扮増鏈� + var deviceFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.ZigbeeDevice, + oTADevice.HwVersion.ToString(), + oTADevice.ImgTypeId.ToString(), + oTADevice.ImgVersion); + + if (deviceFirmware != null && deviceFirmware.FirmwareVersion > oTADevice.ImgVersion) + { + HdlThreadLogic.Current.RunMain(() => + { + if (btnNewVersion != null) + { + btnNewVersion.Visible = true; + } + }, ShowErrorMode.NO); + } + }); + } + + #endregion + + #region 鈻� 淇敼鍚嶅瓧___________________________ + + /// <summary> + /// 璁惧閲嶅懡鍚� + /// </summary> + /// <param name="i_deviceName">deviceName.</param> + private void DeviceReName(string i_deviceName, bool closeForm) + { + //淇敼MAC鍚� + string deviceName = i_deviceName.Trim(); + var result = Common.LocalDevice.Current.ReMacName(this.listNewDevice, deviceName); + if (result == false) + { + return; + } + if (closeForm == true) + { + //鍏抽棴鐣岄潰 + this.CloseForm(); + } + else + { + //璁惧澶囨敞淇敼鎴愬姛! + string msg = Language.StringByID(R.MyInternationalizationString.uDeviceReNoteSuccess); + this.ShowMassage(ShowMsgType.Tip, msg); + } + } + + #endregion + + #region 鈻� 鍙充笂瑙掕彍鍗昣________________________ + + /// <summary> + /// 鍒濆鍖栧彸涓婅鑿滃崟 + /// </summary> + private void InitTopRightMenu() + { + var btnIcon = new MostRightIconControl(69, 69); + btnIcon.UnSelectedImagePath = "Item/More.png"; + topFrameLayout.AddChidren(btnIcon); + btnIcon.InitControl(); + btnIcon.ButtonClickEvent += ((sender, e) => + { + //鏄剧ず鍙充笂瑙掕彍鍗曠晫闈� + this.ShowTopRightMenu(); + }); + } + + /// <summary> + /// 鏄剧ず鍙充笂瑙掕彍鍗曠晫闈� + /// </summary> + private void ShowTopRightMenu() + { + //妫�娴嬫鍥炶矾鏄惁鎷ユ湁瀹氫綅鍔熻兘(鎷跨鐐规渶灏忕殑閭d釜鍥炶矾鍘诲畾浣�) + bool canTest = Common.LocalDevice.Current.DeviceIsCanFixedPosition(listNewDevice[0]); + + TopRightMenuControl frame = null; + + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction) + { + frame = new TopRightMenuControl(3, 1); + } + else + { + frame = new TopRightMenuControl(canTest == true ? 2 : 1, 1); + } + + string deviceMenu = string.Empty; + if (canTest == true) + { + //瀹氫綅 + deviceMenu = Language.StringByID(R.MyInternationalizationString.uFixedPosition); + frame.AddRowMenu(deviceMenu, "Item/FixedPosition.png", "Item/FixedPositionSelected.png", () => + { + //鍙戦�佸畾浣嶅姛鑳� + Common.LocalDevice.Current.SetFixedPositionCommand(listNewDevice[0]); + }); + } + + //鍒犻櫎 + deviceMenu = Language.StringByID(R.MyInternationalizationString.uDelete); + frame.AddRowMenu(deviceMenu, "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () => + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�,姝ゅ姛鑳芥棤鏁� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return; + } + //纭鍒犻櫎璇ヨ澶囧強鍔熻兘锛� + string msg = Language.StringByID(R.MyInternationalizationString.uDeleteDeviceMsg); + this.ShowMassage(ShowMsgType.Confirm, msg, () => + { + //鍒犻櫎鎸囧畾璁惧 + this.DoDeleteDevice(); + }); + }); + + //鍚屾 + deviceMenu = Language.StringByID(R.MyInternationalizationString.Synchronization); + if (Common.LocalDevice.Current.DeviceIsCanFixedPosition(listNewDevice[0])) + { + frame.AddRowMenu(deviceMenu, "", "Item/SynchronizationSelected.png", () => + { + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�,姝ゅ姛鑳芥棤鏁� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return; + } + + //鍚屾鎸囧畾璁惧 + this.SynchronizationDevice(); + }); + } + + } + + /// <summary> + /// 鍒犻櫎鎸囧畾璁惧 + /// </summary> + private void DoDeleteDevice() + { + HdlThreadLogic.Current.RunThread(async () => + { + //鎵撳紑杩涘害鏉� + this.ShowProgressBar(); + + //鍒犻櫎璁惧 + bool result = await Common.LocalDevice.Current.DeleteDevice(listNewDevice); + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(); + if (result == false) + { + return; + } + HdlThreadLogic.Current.RunMain(() => + { + //鍏抽棴鐣岄潰 + this.CloseForm(); + }); + }); + } + + /// <summary> + /// 鍚屾鎸囧畾璁惧 + /// </summary> + private void SynchronizationDevice() + { + HdlThreadLogic.Current.RunThread(async () => + { + //鎵撳紑杩涘害鏉� + this.ShowProgressBar(); + + //鍚屾璁惧 + bool result = await Common.LocalDevice.Current.SynchronizationDevice(listNewDevice); + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(); + if (result == false) + { + return; + } + }); + } + #endregion + + #region 鈻� 鍏抽棴鐣岄潰___________________________ + + /// <summary> + /// 鐢婚潰鍏抽棴 + /// </summary> + public override void CloseFormBefore() + { + HdlGatewayReceiveLogic.Current.RemoveEvent("HandPullControl"); + //绉婚櫎鑾峰彇璁惧纭欢淇℃伅鐨勭洃鍚嚎绋� + HdlDeviceHardInfoLogic.Current.RemoveDeviceHardInfoThread(listNewDevice[0]); + + //璁惧鏂板叆缃� + if (UserCenterResourse.DicActionForm.ContainsKey("AddDeviceTypeListForm") == true) + { + this.LoadFormMethodByName("DeviceListMainForm", "RefreshDeviceRow", new object[] { listNewDevice[0].DeviceAddr }); + } + + base.CloseFormBefore(); + } + + #endregion + + #region 鈻� 纭欢淇℃伅___________________________ + + /// <summary> + /// 閲嶆柊鑾峰彇纭欢淇℃伅 + /// </summary> + private void RefreshHardFirmwareInfo() + { + if (listNewDevice[0].DriveCode > 0) + { + //铏氭嫙璁惧娌℃湁杩欑鎿嶄綔 + return; + } + //閲嶆柊鑾峰彇纭欢淇℃伅 + HdlDeviceHardInfoLogic.Current.SetAllHardFirmwareInfoToDevice(listNewDevice[0], (device, reportData) => + { + for (int i = 1; i < listNewDevice.Count; i++) + { + //鍏ㄩ儴鍥炶矾鐨勪俊鎭兘鏄竴鑷寸殑 + HdlDeviceHardInfoLogic.Current.SetHardFirmwareInfo(device.DeviceStatusReport, listNewDevice[i]); + listNewDevice[i].ReSave(); + } + }); + } + + #endregion + + #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________ + + /// <summary> + /// 鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠� + /// </summary> + public override int FormActionAgainEvent() + { + //閲嶆柊鑾峰彇涓ぎ绌鸿皟妯″潡鐨勭増鏈� + this.ReadAirConditionerVersion(); + + return 0; + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 鑾峰彇涓ぎ绌鸿皟妯″潡鐨勭増鏈� + /// </summary> + private void ReadAirConditionerVersion() + { + if (this.btnAirConditionerVersion == null) + { + return; + } + //鑾峰彇涓�.... + this.btnAirConditionerVersion.TextID = R.MyInternationalizationString.uGetting; + HdlThreadLogic.Current.RunThread(async () => + { + //璇诲彇绌鸿皟妯″潡鐗堟湰 + var result = await HdlDeviceAirConditionerLogic.Current.ReadACFirewareVersionAsync(listNewDevice[0]); + if (result == null || result.readACFirewareVersionResponData == null || result.readACFirewareVersionResponData.Status != 0) + { + HdlThreadLogic.Current.RunMain(() => + { + //鑾峰彇澶辫触 + btnAirConditionerVersion.TextID = R.MyInternationalizationString.uGettingFail; + }); + } + else + { + HdlThreadLogic.Current.RunMain(() => + { + btnAirConditionerVersion.Text = result.readACFirewareVersionResponData.FirewareVersion.Replace("-", string.Empty); + }); + } + }); + } + + /// <summary> + /// 妫�娴嬭兘鍚︽樉绀哄姛鑳借缃殑鑿滃崟 + /// </summary> + /// <returns></returns> + private bool CheckCanShowFunctionSettionRow() + { + //鏂规偊鏂伴闈㈡澘娌℃湁鍔熻兘璁剧疆 + if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FourButtonScene + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_TwoButtonCurtain) + { + return false; + } + return true; + } + + #endregion + } +} diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs index 14a496b..2ac771c 100644 --- a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs +++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs @@ -1027,22 +1027,20 @@ for (int i = 0; i < targetScList.Count; i++) { //缁戝畾鏂扮殑鏁版嵁 - var addBindeDev = new AddBindData(); - addBindeDev.DeviceAddr = curControlDev.DeviceAddr; + var addSingleBindData = new AddSingleBindData(); + addSingleBindData.DeviceAddr = curControlDev.DeviceAddr; for (int j = 0; j < curSupportBindEpointList.Count; j++) { curSendEpointList.Add(curSupportBindEpointList[0]); - addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0]; + addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0]; break; } var de = targetScList[i]; - var addBindInfo = new AddBindListObj(); - addBindInfo.BindType = 1; - addBindInfo.BindCluster = 6; - addBindInfo.BindScenesId = de.Id; - addBindeDev.BindList.Add(addBindInfo); + addSingleBindData.BindType = 1; + addSingleBindData.BindClusterList.Add(6); + addSingleBindData.BindScenesId = de.Id; - var resT = AddDeviceBind(addBindeDev, targetSendCount, ref targetRecCount); + var resT = AddDeviceBind(addSingleBindData, targetSendCount, ref targetRecCount); if (!resT) { break; @@ -1071,8 +1069,8 @@ foreach (var de in targetList) { //缁戝畾鏂扮殑鏁版嵁 - var addBindeDev = new AddBindData(); - addBindeDev.DeviceAddr = curControlDev.DeviceAddr; + var addSingleBindData = new AddSingleBindData(); + addSingleBindData.DeviceAddr = curControlDev.DeviceAddr; if (curBindType == 3) { @@ -1081,7 +1079,7 @@ for (int j = 0; j < curSupportDimmerEpointList.Count; j++) { curSendEpointList.Add(curSupportDimmerEpointList[0]); - addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportDimmerEpointList[0]; + addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportDimmerEpointList[0]; break; } } @@ -1091,7 +1089,7 @@ for (int j = 0; j < curSupportLightEpointList.Count; j++) { curSendEpointList.Add(curSupportLightEpointList[0]); - addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportLightEpointList[0]; + addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportLightEpointList[0]; break; } } @@ -1101,68 +1099,48 @@ for (int j = 0; j < curSupportBindEpointList.Count; j++) { curSendEpointList.Add(curSupportBindEpointList[0]); - addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0]; + addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0]; break; } } - var addBindInfo = new AddBindListObj(); - addBindInfo.BindType = 0; - addBindInfo.BindMacAddr = de.DeviceAddr; - addBindInfo.BindEpoint = de.DeviceEpoint; + addSingleBindData.BindType = 0; + addSingleBindData.BindMacAddr = de.DeviceAddr; + addSingleBindData.BindEpoint = de.DeviceEpoint; switch (curBindType) { case 0: - addBindInfo.BindCluster = 6; - break; case 1: - addBindInfo.BindCluster = 6; - break; case 2: - addBindInfo.BindCluster = 6; + addSingleBindData.BindClusterList.Add(6); break; case 3: - addBindInfo.BindCluster = 6; - break; - case 4: - addBindInfo.BindCluster = 258; - break; - case 5: - addBindInfo.BindCluster = 513; - break; - case 6: - addBindInfo.BindCluster = 514; - break; - } - addBindeDev.BindList.Add(addBindInfo); - - //閮ㄥ垎鐩爣闇�瑕佷簩娆$粦瀹氱浜岀鍔熻兘 - var addBindInfo2 = new AddBindListObj(); - addBindInfo2.BindType = 0; - addBindInfo2.BindMacAddr = de.DeviceAddr; - addBindInfo2.BindEpoint = de.DeviceEpoint; - switch (curBindType) - { - case 3: + addSingleBindData.BindClusterList.Add(6); var device = LocalDevice.Current.GetDevice(de.DeviceAddr, de.DeviceEpoint); if (device != null) { if (device.Type == DeviceType.DimmableLight) { //鐏厜涓鸿皟鍏夋椂闇�瑕佺粦瀹�6锛�8 - addBindInfo2.BindCluster = 8; - addBindeDev.BindList.Add(addBindInfo2); + addSingleBindData.BindClusterList.Add(8); } } break; + case 4: + addSingleBindData.BindClusterList.Add(258); + break; case 5: //瑕佺粦瀹氱┖璋冿細闇�瑕佺粦瀹�513锛�514 - addBindInfo2.BindCluster = 514; - addBindeDev.BindList.Add(addBindInfo2); + addSingleBindData.BindClusterList.Add(513); + addSingleBindData.BindClusterList.Add(514); + break; + case 6: + addSingleBindData.BindClusterList.Add(514); break; } - var resT = AddDeviceBind(addBindeDev, targetSendCount, ref targetRecCount); + + var resT = AddDeviceBind(addSingleBindData, targetSendCount, ref targetRecCount); if (!resT) { break; @@ -1186,36 +1164,36 @@ /// <summary> /// AddDeviceBind /// </summary> - /// <param name="addBindeDev"></param> + /// <param name="addSingleBindData"></param> /// <param name="targetSendCount"></param> /// <param name="targetRecCount"></param> /// <returns></returns> - private bool AddDeviceBind(AddBindData addBindeDev, int targetSendCount, ref int targetRecCount) + private bool AddDeviceBind(AddSingleBindData addSingleBindData, int targetSendCount, ref int targetRecCount) { var addSuccess = false; - var dev = HdlDeviceBindLogic.Current.AddDeviceBindAsync(addBindeDev); - if (dev != null && dev.addedDeviceBindResponseData != null) + var dev = HdlDeviceBindLogic.Current.AddDeviceSingleBindAsync(addSingleBindData); + if (dev != null && dev.addedDeviceSingleBindResponseData != null) { addSuccess = true; targetRecCount++; - if (dev.addedDeviceBindResponseData.Result == 0) + if (dev.addedDeviceSingleBindResponseData.Result == 0) { var countTotal = targetRecCount; - var bList = new List<BindListAllInfo>(); - foreach (var devB in dev.addedDeviceBindResponseData.BindList) + foreach (var cluster in dev.addedDeviceSingleBindResponseData.BindClusterList) { var curD = new BindListAllInfo(); curD.KeyMacAddr = curControlDev.DeviceAddr; curD.KeyEpoint = curControlDev.DeviceEpoint; - curD.BindCluster = devB.BindCluster; - curD.BindScenesId = devB.BindScenesId; - curD.BindMacAddr = devB.BindMacAddr; - curD.BindEpoint = devB.BindEpoint; - curD.ESName = devB.ESName; - curD.BindType = devB.BindType; + curD.BindCluster = cluster; + curD.BindScenesId = dev.addedDeviceSingleBindResponseData.BindScenesId; + curD.BindMacAddr = dev.addedDeviceSingleBindResponseData.BindMacAddr; + curD.BindEpoint = dev.addedDeviceSingleBindResponseData.BindEpoint; + curD.ESName = dev.addedDeviceSingleBindResponseData.ESName; + curD.BindType = dev.addedDeviceSingleBindResponseData.BindType; bList.Add(curD); } + if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.ContainsKey(curControlDev.DeviceAddr + curControlDev.DeviceEpoint)) { MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList[curControlDev.DeviceAddr + curControlDev.DeviceEpoint] = bList; @@ -1227,12 +1205,12 @@ if (curBindType == 3) { - if (addBindeDev.Epoint >= 22 && addBindeDev.Epoint <= 28) + if (addSingleBindData.Epoint >= 22 && addSingleBindData.Epoint <= 28) { curSupportDimmerEpointList.RemoveAt(0); } - if (addBindeDev.Epoint >= 52 && addBindeDev.Epoint <= 61) + if (addSingleBindData.Epoint >= 52 && addSingleBindData.Epoint <= 61) { curSupportLightEpointList.RemoveAt(0); } @@ -1257,7 +1235,7 @@ } }); } - else if (dev.addedDeviceBindResponseData.Result == 1) + else if (dev.addedDeviceSingleBindResponseData.Result == 1) { Application.RunOnMainThread(() => { @@ -1268,7 +1246,7 @@ new Tip() { MaxWidth = 150, - Text = Language.StringByID(R.MyInternationalizationString.BindFailed) + "(" + "5001_1" + ")", + Text = Language.StringByID(R.MyInternationalizationString.BindFailed) + "(" + "5020_1" + ")", Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); @@ -1285,7 +1263,7 @@ new Tip() { MaxWidth = 150, - Text = Language.StringByID(R.MyInternationalizationString.BindUnknownError) + "(" + "5001_2" + ")", + Text = Language.StringByID(R.MyInternationalizationString.BindUnknownError) + "(" + "5020_2" + ")", Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs index aaab4fc..307140e 100644 --- a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs +++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs @@ -546,7 +546,7 @@ var btnDel = rowLayout.AddDeleteControl(); btnDel.ButtonClickEvent += (sender, e) => { - RemoveTargets(bindObj, btnDel); + ClearTargets(bindObj); }; #endregion } @@ -706,7 +706,7 @@ /// <param name="bindDevice"></param> /// <param name="btnDel"></param> /// <returns></returns> - private void RemoveTargets(BindListAllInfo bindDevice, Button btnDel) + private void RemoveTargets(BindListAllInfo bindDevice) { var delDevice = new DelDeviceBindData(); delDevice.DeviceAddr = bindDevice.KeyMacAddr; @@ -857,7 +857,68 @@ }); } - + /// <summary> + /// 娓呴櫎澶氬姛鑳介潰鏉跨殑鐩爣 + /// </summary> + /// <param name="bindDevice"></param> + /// <param name="btnDel"></param> + /// <returns></returns> + private void ClearTargets(BindListAllInfo bindDevice) + { + System.Threading.Tasks.Task.Run(() => + { + try + { + Application.RunOnMainThread(() => + { + CommonPage.Loading.Start(""); + }); + var currentKey = new Panel(); + currentKey.DeviceAddr = bindDevice.KeyMacAddr; + currentKey.DeviceEpoint = bindDevice.KeyEpoint; + currentKey.CurrentGateWayId = curControlDev.CurrentGateWayId; + var bindResult = HdlDeviceBindLogic.Current.ClearBindInfoAsync(currentKey); + if (bindResult != null && bindResult.clearBindInfoResponseData != null) + { + if (bindResult.clearBindInfoResponseData.Result != 0) + { + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(CommonPage.Instance); + CommonPage.Loading.Hide(); + }); + } + else + { + if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.ContainsKey(bindDevice.KeyMacAddr + bindDevice.KeyEpoint)) + { + MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Remove(bindDevice.KeyMacAddr + bindDevice.KeyEpoint); + } + Application.RunOnMainThread(() => + { + RefreshBindListUI(); + CommonPage.Loading.Hide(); + }); + } + } + else + { + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5006" + ")", Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(CommonPage.Instance); + }); + } + } + catch { } + finally + { + Application.RunOnMainThread(() => + { + CommonPage.Loading.Hide(); + }); + } + }); + } /// <summary> /// 鍖归厤鐨勭被鍨嬪垪琛� diff --git a/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs b/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs index 28e3abc..abcd33e 100644 --- a/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs +++ b/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs @@ -19,6 +19,15 @@ } [System.Serializable] + public class AddedDeviceSingleBindResponseAllData : ErrorResponCommon + { + /// <summary> + /// 缃戝叧鐩存帴鍙嶉缁戝畾璁惧淇℃伅 + /// </summary> + public AddedDeviceSingleBindResponseData addedDeviceSingleBindResponseData; + } + + [System.Serializable] public class AddedDeviceBindResponseData { /// <summary> @@ -34,6 +43,55 @@ ///<para>1锛氱粦瀹氱洰鏍囧け璐ワ紝缁戝畾璁惧鐩爣鏈夋紡鎺�</para> /// </summary> public int Result = -1; + } + + [System.Serializable] + public class AddedDeviceSingleBindResponseData + { + /// <summary> + /// 鎺у埗璁惧鑺傜偣鐨刴ac鍦板潃 + /// </summary> + public string DeviceAddr; + /// <summary> + /// 鎺у埗璁惧鑺傜偣鐨勭鍙e彿 + /// </summary> + public int Epoint; + /// <summary> + ///缁戝畾鍚嶇О + /// </summary> + public string BindName; + /// <summary> + /// 0锛氭垚鍔燂紝閽堝鍦烘櫙鍜岃法缃戝叧缁戝畾 + ///<para>1锛氬け璐ワ紝鑺傜偣璁惧鎴栧満鏅笉瀛樺湪銆�</para> + ///<para>2锛氬悓缃戝叧璁惧缁戝畾锛岀瓑寰呮帶鍒舵簮璁惧鍐欏叆鍙嶉缁撴灉锛涗互涓嬮潰涓婚缁撴灉涓哄噯</para> + /// </summary> + public int Result = -1; + /// <summary> + /// 缁戝畾绫诲瀷 + ///<para>0锛氱粦瀹氳澶� </para> + ///<para>1锛氱粦瀹氬満鏅�</para> + /// </summary> + public int BindType; + /// <summary> + ///缁戝畾鐨刢luster鏁扮粍 + /// </summary> + public List<int> BindClusterList = new List<int>(); + /// <summary> + /// 缁戝畾璁惧Mac鍦板潃锛� 褰揃indType=0鏃跺瓨鍦� + /// </summary> + public string BindMacAddr; + /// <summary> + /// 缁戝畾璁惧鐨勭鍙e彿锛屽綋BindType=0鏃跺瓨鍦� + /// </summary> + public int BindEpoint; + /// <summary> + /// 缁戝畾鍦烘櫙锛屽綋BindType=2鏃跺瓨鍦� + /// </summary> + public int BindScenesId; + /// <summary> + ///缁戝畾鐨勮澶囨垨鍦烘櫙鐨勫悕绉� + /// </summary> + public string ESName; } /// <summary> @@ -97,7 +155,7 @@ /// </summary> public string DeviceAddr; /// <summary> - /// 閿欒淇℃伅 + /// 鎺у埗璁惧鑺傜偣鐨勭鍙e彿 /// </summary> public int Epoint; /// <summary> @@ -166,10 +224,9 @@ /// </summary> public int BindType; /// <summary> - /// 缁戝畾鐨刢luster,闇�瑕佹帶鍒惰澶囩殑OutCluster鍒楄〃涓瓨鍦ㄨcluster銆� - ///濡傜粦瀹氭煇涓澶囩殑on/off锛屼负6銆� + ///缁戝畾鐨刢lusters鏁扮粍锛岄渶瑕佹帶鍒惰澶囩殑OutCluster鍒楄〃涓瓨鍦ㄨcluster銆傚缁戝畾鏌愪釜璁惧鐨刼n/off锛屼负6銆傚缁戝畾鍦烘櫙锛屽~鏃廔d涓�6 /// </summary> - public int BindCluster; + public List<int> BindClusterList = new List<int>(); /// <summary> /// 缁戝畾璁惧Mac鍦板潃锛� 褰揃indType=0鏃跺瓨鍦� /// </summary> -- Gitblit v1.8.0