From dee21bf452a8979d0515d13e534fbb69ed9715dd Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期二, 01 九月 2020 15:33:13 +0800 Subject: [PATCH] 上传一个版本 --- ZigbeeApp/Shared/Common/Device.cs | 164 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 129 insertions(+), 35 deletions(-) diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs index 8b92a87..8031876 100755 --- a/ZigbeeApp/Shared/Common/Device.cs +++ b/ZigbeeApp/Shared/Common/Device.cs @@ -99,7 +99,7 @@ this.dicDeviceEpoint.Clear(); //鍒濆鍖栬澶囨灇涓� - this.InitDeviceModelIdEnum(); + this.InitDeviceModelIdEnum(); //鑾峰彇鏈湴鍏ㄩ儴鐨勮澶囨枃浠� List<string> listFile = this.GetAllDeviceFile(); @@ -260,7 +260,10 @@ dicExist.Remove(maikey); } //鑾峰彇璁惧鐨勫浐瀹氬睘鎬� - HdlDeviceFixedAttributeLogic.Current.SetAllFixedAttributeToDevice(device); + if (HdlDeviceFixedAttributeLogic.Current.SetAllFixedAttributeToDevice(device) == true) + { + System.Threading.Thread.Sleep(200); + } //瀵规湭鍛藉悕鐨勮櫄鎷熻澶囬噸鏂板懡鍚� if (device.DriveCode > 0 && this.GetSimpleEpointName(device) == string.Empty) { @@ -565,7 +568,7 @@ //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� if (Common.Config.Instance.Home.IsVirtually == true) { - return Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceMacName(device, macName, "MacRename"); + return Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceMacName(device, macName); } //鑾峰彇缂栬緫璁惧Mac鍚嶅瓧鐨勫懡浠ゅ瓧绗� @@ -576,7 +579,7 @@ return null; } //鍔犵紦瀛� - Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceMacName(device, macName, "MacRename"); + Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceMacName(device, macName); var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.RenameDeviceMacNameData>(result.ReceiptData); return new CommonDevice.RenameDeviceMacNameAllData { renameDeviceMacNameData = tempData }; @@ -593,7 +596,7 @@ //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� if (Common.Config.Instance.Home.IsVirtually == true) { - return Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceEpointName(device, deviceName, "DeviceRename"); + return Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceEpointName(device, deviceName); } //鑾峰彇缂栬緫璁惧绔偣鍚嶅瓧鐨勫懡浠ゅ瓧绗� var sendData = this.GetReDeviceEpointNameCommandText(device.DeviceAddr, device.DeviceEpoint, deviceName); @@ -603,7 +606,7 @@ return null; } //鍔犵紦瀛� - Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceEpointName(device, deviceName, "DeviceRename"); + Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceEpointName(device, deviceName); var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceRenameResponseData>(result.ReceiptData); return new CommonDevice.DeviceRenameAllData { deviceRenameData = tempData }; @@ -885,7 +888,7 @@ return false; } //娓╂箍搴︿紶鎰熷櫒娌℃湁瀹氫綅鍔熻兘 - if (myTypeInfo.ConcreteType == DeviceConcreteType.Sensor_TemperatrueHumidity) + if (myTypeInfo.ConcreteType == DeviceConcreteType.Sensor_TemperatureHumidity) { return false; } @@ -1275,10 +1278,15 @@ /// <returns></returns> public bool SendDeviceFunctionTypeToGateway(CommonDevice device, DeviceFunctionType functionType) { - var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 110 } }; - var data = new Newtonsoft.Json.Linq.JObject { { "FunctionType", (int)functionType } }; - jObject.Add("Data", data); - var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Device/SetEPDeviceFunctionType", jObject.ToString(), "Device/SetEPDeviceFunctionTypeRespon"); + //濡傛灉鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + device.DfunctionType = functionType; + return true; + } + //鑾峰彇鍛戒护瀛楃 + var sendCommond = this.GetDeviceFunctionTypeCommandText(device, functionType); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Device/SetEPDeviceFunctionType", sendCommond, "Device/SetEPDeviceFunctionTypeRespon"); if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) { return false; @@ -1290,6 +1298,20 @@ return resultData["Result"].ToString() == "0"; } return false; + } + + /// <summary> + /// 鑾峰彇鏇存敼璁惧鍔熻兘绫诲瀷鐨勫懡浠ゆ枃鏈� + /// </summary> + /// <param name="device"></param> + /// <param name="functionType"></param> + /// <returns></returns> + public string GetDeviceFunctionTypeCommandText(CommonDevice device, DeviceFunctionType functionType) + { + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 110 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "FunctionType", (int)functionType } }; + jObject.Add("Data", data); + return jObject.ToString(); } #endregion @@ -1376,15 +1398,26 @@ { if (deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir || deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleEnvironment + || deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment || deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction) { - //鏂伴闈㈡澘/绠�绾﹀鍔熻兘/绠�绾︾幆澧冮潰鏉� 娓╁害浼犳劅鍣� + //鏂伴闈㈡澘/绠�绾﹀鍔熻兘/绠�绾�/鏂规偊鐜闈㈡澘 娓╁害浼犳劅鍣� return deviceInfoType.DeviceDefultName + Language.StringByID(R.MyInternationalizationString.TemperatureSensor); } else if (deviceInfoType.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘) { //闈㈡澘鐨勬俯搴︽帰澶村彨 闈㈡澘鍚嶅瓧+娓╁害 return deviceInfoType.DeviceDefultName + Language.StringByID(R.MyInternationalizationString.uTemperature); + } + else if (((TemperatureSensor)device).SensorDiv == 1) + { + //娓╁害浼犳劅鍣� + return Language.StringByID(R.MyInternationalizationString.TemperatureSensor); + } + else if (((TemperatureSensor)device).SensorDiv == 2) + { + //婀垮害浼犳劅鍣� + return Language.StringByID(R.MyInternationalizationString.HumiditySensor); } } //鍏朵粬鎯呭喌,浣跨敤瀹冪殑榛樿鍚嶇О @@ -1420,7 +1453,7 @@ /// <param name="device">璁惧瀵硅薄</param> /// <param name="macName">Mac鍚嶅瓧</param> /// <returns></returns> - private void SetMacName(CommonDevice device, string macName) + public void SetMacName(CommonDevice device, string macName) { device.DeviceName = macName; } @@ -1431,7 +1464,7 @@ /// <param name="device">璁惧瀵硅薄</param> /// <param name="epointName">绔偣鍚嶅瓧</param> /// <returns></returns> - private void SetEpointName(CommonDevice device, string epointName) + public void SetEpointName(CommonDevice device, string epointName) { device.DeviceEpointName = epointName; } @@ -2079,14 +2112,14 @@ //璁剧疆浼犳劅鍣ㄥ叿浣撶殑绫诲瀷 info.BeloneType = DeviceBeloneType.A娓╂箍搴︿紶鎰熷櫒; info.ConcreteText = this.dicDeviceModelIdEnum["A411"].A瀹樻柟鍚嶅瓧; - info.ConcreteType = DeviceConcreteType.Sensor_TemperatrueHumidity; + info.ConcreteType = DeviceConcreteType.Sensor_TemperatureHumidity; } else if (temperatrue == true && humidity == false) { //璁剧疆浼犳劅鍣ㄥ叿浣撶殑绫诲瀷 info.BeloneType = DeviceBeloneType.A娓╁害浼犳劅鍣�; info.ConcreteText = this.dicDeviceModelIdEnum["A412"].A瀹樻柟鍚嶅瓧; - info.ConcreteType = DeviceConcreteType.Sensor_Temperatrue; + info.ConcreteType = DeviceConcreteType.Sensor_Temperature; } else if (temperatrue == false && humidity == true) { @@ -2187,12 +2220,6 @@ //闂ㄧ獥浼犳劅鍣� info.ConcreteType = DeviceConcreteType.Sensor_DoorWindow; info.ConcreteText = Language.StringByID(R.MyInternationalizationString.uSensorDoorWindow); - } - else if (iasZone.IasDeviceType == 541) - { - //鐞冨瀷绉诲姩浼犳劅鍣� - info.ConcreteType = DeviceConcreteType.Sensor_SphericalMotion; - info.ConcreteText = this.dicDeviceModelIdEnum["MSPIRB-ZB.10"].A瀹樻柟鍚嶅瓧; } } @@ -2737,12 +2764,30 @@ var localDevice = this.GetDevice(mainkeys); var tempDevice = localDevice == null ? device : localDevice; + //濡傛灉杩欎釜璁惧ID鍙樻洿浜嗙殑璇� + bool typeNotEquals = localDevice != null && deviceID != localDevice.Type; + if (typeNotEquals == true) + { + //閲嶆柊New杩欎釜瀵硅薄 + typeNotEquals = this.ReNewDeviceOnTypeIsChanged(localDevice, deviceID); + //閲嶆柊鍐嶆鑾峰彇瀵硅薄 + tempDevice = this.GetDevice(mainkeys); + } + //鍒锋柊灞炴�� this.SetDeviceInfoToMain(tempDevice, device); if (this.RefreshDeviceFunctionType(tempDevice, device, false) == true) { //闇�瑕佸彂閫佸姛鑳界被鍨嬬粰缃戝叧 listFucDevice.Add(tempDevice); + } + if (typeNotEquals == true) + { + //閲嶆柊鐢熸垚缂撳瓨 + tempDevice.ReSave(); + HdlAutoBackupLogic.AddOrEditorFile(tempDevice.FilePath); + //鍏ㄩ儴涓婚〉鑿滃崟闇�瑕佸埛鏂� + Phone.UserView.UserPage.Instance.RefreshAllForm = true; } } } @@ -2834,6 +2879,45 @@ return listDevice; } + /// <summary> + /// 鍦ㄨ澶嘥ype鍙樻洿鏃�,閲嶆柊New杩欎釜璁惧瀵硅薄(浠呴檺鍦ㄥ埛鏂拌澶囧垪琛ㄤ娇鐢�,骞朵笖鏈湴闇�瑕佸瓨鍦�) + /// </summary> + /// <param name="oldLocalDevice">鍘熸潵鐨勬湰鍦板璞�</param> + /// <param name="newDeviceType">鏂扮殑璁惧Type</param> + private bool ReNewDeviceOnTypeIsChanged(CommonDevice oldLocalDevice, DeviceType newDeviceType) + { + //鍏堣幏鍙栨湰鍦拌繖涓棫璁惧瀵硅薄鐨刯son + string oldFile = System.IO.Path.Combine(Config.Instance.FullPath, oldLocalDevice.FilePath); + var deviceData = HdlFileLogic.Current.ReadFileTextContent(oldFile); + if (deviceData == null) + { + //搴旇涓嶄細 + return false; + } + //鏍规嵁鏂癟ype閲嶆柊New瀵硅薄 + var newDevice = CommonDevice.CommonDeviceByByteString(newDeviceType.ToString(), deviceData); + if (newDevice == null) + { + //濂藉儚鏈夌偣鍙兘 + return false; + } + //鍒犻櫎鏈湴鏂囦欢 + HdlFileLogic.Current.DeleteFile(oldFile); + HdlAutoBackupLogic.DeleteFile(oldLocalDevice.FilePath); + + //閲嶆柊鐢熸垚鏂囦欢 + if (newDevice.IsCustomizeImage == false) + { + newDevice.IconPath = string.Empty; + } + string mainkey = this.GetDeviceMainKeys(newDevice); + lock (dicAllDevice) + { + this.dicAllDevice[mainkey] = newDevice; + } + return true; + } + #endregion #region 鈻� 鍒涘缓鏂拌澶囧璞$浉鍏砡________________ @@ -2877,14 +2961,8 @@ /// <param name="device">璁剧疆婧愯澶囧璞�</param> public void SetDeviceInfoToMain(CommonDevice mainDevice, CommonDevice device) { - if (string.IsNullOrEmpty(device.DeviceInfo.MacName) == false) - { - mainDevice.DeviceName = device.DeviceInfo.MacName; - } - if (string.IsNullOrEmpty(device.DeviceInfo.DeviceName) == false) - { - mainDevice.DeviceEpointName = device.DeviceInfo.DeviceName; - } + mainDevice.DeviceName = device.DeviceInfo.MacName; + mainDevice.DeviceEpointName = device.DeviceInfo.DeviceName; mainDevice.CurrentGateWayId = device.CurrentGateWayId; mainDevice.ZigbeeType = device.DeviceInfo.ZigbeeType; mainDevice.IsOnline = device.DeviceInfo.IsOnline; @@ -2892,6 +2970,7 @@ mainDevice.IasDeviceType = device.DeviceInfo.DeviceType; mainDevice.Profile = device.DeviceInfo.Profile; mainDevice.Type = device.Type; + mainDevice.DeviceID = (int)device.Type; //鍥轰欢鐗堟湰 mainDevice.ImgVersion = device.DeviceInfo.ImgVersion; @@ -2917,6 +2996,8 @@ mainDevice.InClusterList.AddRange(device.DeviceInfo.InClusterList); mainDevice.OutClusterList.Clear(); mainDevice.OutClusterList.AddRange(device.DeviceInfo.OutClusterList); + mainDevice.AttributeStatus.Clear(); + mainDevice.AttributeStatus.AddRange(device.DeviceInfo.AttributeStatus); //濡傛灉鏄俯搴︿紶鎰熷櫒 if (mainDevice.Type == DeviceType.TemperatureSensor) @@ -3194,6 +3275,7 @@ this.dicPictrueShard["ButtonPanel_SimpleTwo"] = "ButtonPanel_Two";//绠�绾�2鎸夐敭闈㈡澘 娌跨敤 2鎸夐敭鐨勫浘鏍� this.dicPictrueShard["IntelligentLocks_Sone"] = "IntelligentLocks_H06C";//S-one鐨勯棬閿佸浘鐗� 娌跨敤 H06C鐨勫浘鏍� this.dicPictrueShard["Relay_FangyueFreshAirModul"] = "Relay_ThreeLoad";//鏂规偊鏂伴灏忔ā鍧楀浘鐗� 娌跨敤 3璺户鐢靛櫒鐨勫浘鏍� + this.dicPictrueShard["ButtonPanel_FourButtonScene"] = "ButtonPanel_Four";//绠�绾�4鎸夐敭鍦烘櫙闈㈡澘 娌跨敤 4鎸夐敭闈㈡澘鐨勫浘鏍� } /// <summary> @@ -3399,9 +3481,9 @@ /// </summary> Sensor_PMTwoPointFive = 1307, /// <summary> - /// 娓╂箍搴︿紶鎰熷櫒 + /// 娓╂箍搴︿紶鎰熷櫒(杩欎釜鍗曡瘝鎷奸敊浜�,浣嗘槸閿欎簡灏遍敊浜嗗憲,灏辫繖鏍蜂簡) /// </summary> - Sensor_TemperatrueHumidity = 1308, + Sensor_TemperatureHumidity = 1308, /// <summary> /// 杩愬姩浼犳劅鍣� @@ -3412,9 +3494,9 @@ /// </summary> Sensor_Keyfob = -1307, /// <summary> - /// 娓╁害浼犳劅鍣� + /// 娓╁害浼犳劅鍣�(杩欎釜鍗曡瘝鎷奸敊浜�,浣嗘槸閿欎簡灏遍敊浜嗗憲,灏辫繖鏍蜂簡) /// </summary> - Sensor_Temperatrue = -1309, + Sensor_Temperature = -1309, /// <summary> /// 婀垮害浼犳劅鍣� /// </summary> @@ -3433,7 +3515,19 @@ /// 鏂规偊鏂伴灏忔ā鍧� 闀滃儚id锛�2310 /// </summary> Relay_FangyueFreshAirModul = 2310, - + /// <summary> + /// 鍥芥爣3璺�10A缁х數鍣ㄥ皬妯″潡 闀滃儚id锛�2311(涓存椂) + /// </summary> + Relay_NationalThreeLoadTenA = 2311, + /// <summary> + /// 娆ф爣2璺�5A缁х數鍣ㄥ皬妯″潡 闀滃儚id锛�2312(涓存椂) + /// </summary> + Relay_EuropeanTwoLoadFiveA = 2312, + /// <summary> + /// 娆ф爣14璺共鎺ョ偣灏忔ā鍧� 闀滃儚id锛�2313(涓存椂) + /// </summary> + Relay_EuropeanFourteenLoadDryContact = 2313, + //=========鈽呪槄璋冨厜鍣ㄧ被(2500-2799)鈽呪槄========= /// <summary> /// 璋冨厜鍣� -- Gitblit v1.8.0