From 9a4b76398009cf76c508d61f7e48fb6f5cb7ac2d Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期二, 21 七月 2020 09:46:53 +0800 Subject: [PATCH] 请合并最新多功能面板代码 --- ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs | 2426 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 2,426 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs new file mode 100755 index 0000000..0ae3f20 --- /dev/null +++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs @@ -0,0 +1,2426 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json.Linq; + +namespace ZigBee.Device +{ + [System.Serializable] + public class CommonDevice + { + #region 闇�瑕佷繚瀛樼殑鍙橀噺 + + /// <summary> + /// 鏄惁鏄嚜瀹氫箟鍥剧墖 + /// </summary> + public bool IsCustomizeImage = false; + /// <summary> + /// 璁惧鍥剧墖 + /// </summary> + public string IconPath = string.Empty; + /// <summary> + /// 璁惧鍥剧墖--鍦ㄧ嚎鎴栬�呴�変腑鐘舵�� + /// </summary> + /// <value>The online icon path.</value> + [Newtonsoft.Json.JsonIgnore] + public string OnlineIconPath + { + get + { + if (string.IsNullOrEmpty(IconPath)) + { + return string.Empty; + } + var pathArr = IconPath.Split('.'); + if (pathArr == null || string.IsNullOrEmpty(pathArr[0])) + { + return string.Empty; + } + return $"{pathArr[0]}Selected.png"; + } + } + /// <summary> + /// 褰撳墠缃戝叧鐨処D + /// </summary> + public string CurrentGateWayId; + /// <summary> + /// 褰撳墠璁惧绫诲瀷 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public DeviceType Type = DeviceType.UnKown; + /// <summary> + /// 璁惧鐨勫姛鑳界被鍨�(姝ょ被鍨嬬洰鍓嶅彧閽堝缁х數鍣ㄥ洖璺湁鏁�,榛樿鏈寚瀹�) + /// </summary> + public DeviceFunctionType DfunctionType = DeviceFunctionType.A鏈畾涔�; + /// <summary> + /// MAC鍦板潃 + /// </summary> + public string DeviceAddr; + /// <summary> + /// 璁惧绔彛鍙� + /// </summary> + public int DeviceEpoint; + /// <summary> + /// 璁惧id + /// <para>258:color dimmable light,璋冨叧鐏� </para> + /// <para>10:Door lock,闂ㄩ攣</para> + /// <para>514:Window covering device,绐楀笜</para> + /// <para>515:Window covering controller锛岀獥甯樻帶鍒跺櫒</para> + /// <para>769:Thermostat,鎭掓俯闈㈡澘/绌鸿皟</para> + /// <para>770:Temperature Sensor,娓╁害浼犳劅鍣�</para> + /// <para>775:Temperature Sensor,婀垮害浼犳劅鍣�</para> + /// <para>262:Light sensor,鍏夌収浼犳劅鍣�</para> + /// <para>1026:sensor,浼犳劅鍣紝鍏蜂綋绫诲瀷鐨勪紶鎰熷櫒DeviceType鏉ュ尯鍒�</para> + /// </summary> + public int DeviceID; + /// <summary> + /// 璇ュ瓧娈典富瑕侀拡瀵笽AS瀹夐槻璁惧璁剧珛銆傛墍鏈塈AS瀹夐槻璁惧鍏辩敤涓�涓狣eviceID涓�1026銆傛墍浠ヨ鍖哄垎瀛愯澶囩被鍨嬶紝闇�瑕佽瀛楁銆� + /// 鐬棿鏁版嵁涓婃姤鐨勪紶鎰熷櫒 (MomentStatus=1 TriggerZoneStatus>=1锛滄姤璀︼紴) + /// <para>13:Motion sensor (杩愬姩浼犳劅鍣級</para> + /// <para>40 Fire sensor 鐑熼浘浼犳劅鍣�</para> + /// <para>42 Water sensor 姘翠镜浼犳劅鍣�</para> + /// <para>43 Carbon Monoxide (CO) 鐕冩皵浼犳劅鍣�</para> + /// <para>44 Personal emergency device 绱ф�ユ寜閽�</para> + /// <para>277 Key fob 閽ュ寵鎵�</para> + /// <para>鎸佺画鏁版嵁涓婃姤(MomentStatus=0 TriggerZoneStatus>=1锛滄姤璀︼紴 TriggerZoneStatus=0锛滃彇娑堟姤璀︼紴)</para> + /// <para>21: Door/Window 闂ㄧ獥浼犳劅鍣紙鏈�21鍜�22锛岃繖閲屾病鏈夊啓閿欙級</para> + /// <para>22:Door/Window 闂ㄧ獥浼犳劅鍣紙鏈�21鍜�22锛岃繖閲屾病鏈夊啓閿�</para> + /// <para>541 鐞冨瀷绉诲姩浼犳劅鍣�</para> + /// </summary> + public int IasDeviceType; + /// <summary> + /// 璁惧鍚嶇О,浠ヨ澶囩殑MAC鍛藉悕 + /// </summary> + public string DeviceName = "UnKown"; + /// <summary> + /// 璁惧绔偣鍚嶇О锛屼互璁惧绔偣鍚嶇О鍛藉悕 + /// </summary> + public string DeviceEpointName = "UnKown"; + /// <summary> + /// 鐢ㄤ簬鍒ゆ柇璁惧鐨剒igbee鍗忚鐗堟湰銆� + ///<para>49246锛歓LL1.0鏍囧噯璁惧銆�</para> + ///<para>260锛� ZHA1.2鏍囧噯璁惧銆� Z3.0鏍囧噯璁惧銆�</para> + ///<para>41440锛歓GP3.0鏍囧噯璁惧銆�</para> + ///<para>265锛歓SE1.4鏍囧噯璁惧銆�</para> + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public int Profile; + /// <summary> + /// 0锛氳澶囦笉鍦ㄧ嚎 + /// <para>1锛氳澶囧湪绾�</para> + /// </summary> + public int IsOnline; + /// <summary> + /// 1锛氳矾鐢辫澶� + /// <para>2锛氱粓绔澶囷紝鐢垫睜璁惧</para> + /// </summary> + public int ZigbeeType; + /// <summary> + /// 褰撳墠杩愯绋嬪簭鐗堟湰淇℃伅銆� 鏈�澶�64瀛楄妭 + /// </summary> + public int ImgVersion; + /// <summary> + /// 纭欢鐗堟湰 + /// </summary> + public int HwVersion; + /// <summary> + /// 褰撳墠闀滃儚绫诲瀷id + /// </summary> + public int ImgTypeId; + /// <summary> + /// 椹卞姩浠g爜銆備负0鏃讹紝琛ㄧずzigbee鍗忚皟鍣ㄨ澶囥�傚叾浠栧�艰〃绀轰负铏氭嫙椹卞姩璁惧 + /// </summary> + public int DriveCode; + /// <summary> + /// 鐢熶骇鍟嗗悕瀛� + /// </summary> + public string ManufacturerName = string.Empty; + /// <summary> + /// 妯″潡ID锛堣繖涓笢瑗夸篃鍙�愬瀷鍙风爜銆戯級 + /// </summary> + public string ModelIdentifier = string.Empty; + /// <summary> + /// 鐢熶骇鏃ユ湡 + /// </summary> + public string ProductionDate = string.Empty; + /// <summary> + /// 鐢垫簮 + /// </summary> + public int PowerSource = -1; + /// <summary> + /// 搴忓垪鍙� + /// </summary> + public string SerialNumber = string.Empty; + /// <summary> + /// 杈撳叆绨囧垪琛� + /// </summary> + public List<InClusterObj> InClusterList = new List<InClusterObj>(); + /// <summary> + /// 杈撳嚭绨囧垪琛� + /// </summary> + public List<OutClusterObj> OutClusterList = new List<OutClusterObj>(); + + [Newtonsoft.Json.JsonIgnore] + public DateTime LastDateTime = DateTime.MinValue; + /// <summary> + /// 鏄惁宸茬粡璇诲彇浜嗚澶囩姸鎬�(姝ゅ睘鎬ф槸缁欎富椤典娇鐢ㄧ殑) + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public bool HadReadDeviceStatu = false; + + /// <summary> + /// 绛夊緟浠庣綉鍏虫帴鏀舵暟鎹殑鏃堕棿 + /// </summary> + /// <value>The wait receive data time.</value> + [Newtonsoft.Json.JsonIgnore] + public virtual int WaitReceiveDataTime + { + get + { + if (Device.ZbGateway.RemoteMqttClient != null && Device.ZbGateway.RemoteMqttClient.IsConnected) + { + return 10000; + } + else + { + return 3000; + } + } + } + + /// <summary> + /// 閫氳繃璁惧璋冪敤缃戝叧 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public ZbGateway Gateway + { + get + { + if (string.IsNullOrEmpty(CurrentGateWayId)) + { + return null; + } + var gateWay = ZbGateway.GateWayList.Find(obj => (obj != null) && (obj.GwId == CurrentGateWayId)); + if (gateWay == null) + { + gateWay = new ZbGateway { IsVirtual = true, }; + gateWay.GwId = CurrentGateWayId; + gateWay.HomeId = Shared.Common.Config.Instance.HomeId; + ZbGateway.GateWayList.Add(gateWay); + } + + return gateWay; + } + } + + /// <summary> + /// 淇濆瓨璁惧鏁版嵁鐨勬枃浠跺悕 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public virtual string FilePath + { + get + { + var deviceType = Type.ToString(); + var fileName = "Device_" + deviceType + "_" + DeviceAddr; + fileName += "_" + (DeviceEpoint.ToString().Length < 2 ? "0" + DeviceEpoint.ToString() : DeviceEpoint.ToString()); + return fileName; + } + } + + #endregion + + #region 璁惧淇濆瓨鍙婄敓鎴� + + /// <summary> + /// 鐢辫澶囧瓧绗︿覆姣旂壒鎭㈠璁惧瀵硅薄 + /// </summary> + /// <param name="strDeviceType">璁惧DeviceType鐨勫瓧绗︿覆绫诲瀷</param> + /// <param name="strDeviceByte">璁惧Json鏂囦欢杞负姣旂壒鍚庡啀杞负鐨勫瓧绗︿覆</param> + /// <returns></returns> + public static CommonDevice CommonDeviceByByteString(string strDeviceType, string strDeviceByte) + { + CommonDevice device = null; + if (strDeviceType == ZigBee.Device.DeviceType.DimmableLight.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<DimmableLight>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.OnOffOutput.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<ToggleLight>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.ColorDimmerSwitch.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<ColorDimmerSwitch>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.LevelControlSwitch.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<LevelControlSwitch>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.WindowCoveringDevice.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<Rollershade>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.WindowCoveringController.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<WindowCoveringController>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.OnOffSwitch.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.IASZone.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.OtaDevice.ToString() || strDeviceType == ZigBee.Device.DeviceType.OtaPanelDevice.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<OTADevice>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.AirSwitch.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<AirSwitch>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.Repeater.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<Repeater>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.Thermostat.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.Transverter.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<Transverter>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.DoorLock.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLock>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.TemperatureSensor.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<TemperatureSensor>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.FreshAirHumiditySensor.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<HumiditySensor>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.FreshAir.ToString()) + { + device = Newtonsoft.Json.JsonConvert.DeserializeObject<FreshAir>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.PMSensor.ToString()) + { + return Newtonsoft.Json.JsonConvert.DeserializeObject<PMSensor>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.ColorTemperatureLight.ToString()) + { + return Newtonsoft.Json.JsonConvert.DeserializeObject<ColorTemperatureLight>(strDeviceByte); + } + else if (strDeviceType == ZigBee.Device.DeviceType.Buzzer.ToString()) + { + return Newtonsoft.Json.JsonConvert.DeserializeObject<Buzzer>(strDeviceByte); + } + else { return null; } + //鑳藉皯瀛樹竴涓彉閲忓氨灏戝瓨涓�涓� + device.Type = (DeviceType)device.DeviceID; + + return device; + } + + /// <summary> + /// 鐢辫澶囪矾寰勬仮澶嶈澶囧璞� + /// </summary> + /// <returns>The device by file path.</returns> + /// <param name="deviceFilePath">Device file path.</param> + public static CommonDevice CommonDeviceByFilePath(string deviceFilePath) + { + var v = deviceFilePath.Split('_'); + if (v.Length < 3) + { + return null; + } + return CommonDeviceByByteString(v[1], System.Text.Encoding.UTF8.GetString(Shared.Common.Global.ReadFileByHomeId(deviceFilePath))); + } + + /// <summary> + /// 淇濆瓨璁惧 + /// </summary> + public void Save() + { + if (Shared.Common.Global.IsExistsByHomeId(FilePath)) + { + return; + } + ReSave(); + } + + /// <summary> + /// 閲嶆柊淇濆瓨璁惧 + /// </summary> + public void ReSave() + { + if (IconPath == string.Empty) + { + //淇濆瓨璁惧鍥炬爣(杩欓噷浼氫繚瀛樹竴娆�,涓嬮潰灏变笉鐢ㄤ繚瀛樹簡) + this.SaveDeviceIcon(); + return; + } + Shared.Common.Global.WriteFileByBytesByHomeId(FilePath, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this))); + } + + /// <summary> + /// 淇濆瓨璁惧鍥炬爣 + /// </summary> + private void SaveDeviceIcon() + { + if (IconPath == string.Empty) + { + //骞叉帴鐐� + if (this.Type == DeviceType.OnOffSwitch) + { + IconPath = "Device/DryContact.png"; + } + else if (this.Type == DeviceType.ColorDimmableLight) + { + //褰╃伅 + IconPath = "Device/ColorLight.png"; + } + else if (this.Type == DeviceType.DimmableLight) + { + //璋冨厜鍣� + IconPath = "Device/Light.png"; + } + else if (this.Type == DeviceType.ColorTemperatureLight) + { + //鑹叉俯鐏� + IconPath = "Device/ColorLightTemperature.png"; + } + else if (this.Type == DeviceType.OnOffOutput) + { + //缁х數鍣� + IconPath = "Device/RelayEpoint.png"; + } + else if (this.Type == DeviceType.Thermostat) + { + //绌鸿皟 + IconPath = "Device/AirConditionerEpoint.png"; + } + else if (this.Type == DeviceType.FreshAir) + { + //鏂伴 + IconPath = "Device/FreshAirEpoint.png"; + } + else if (this.Type == DeviceType.PMSensor) + { + //PM2.5绌烘皵璐ㄩ噺浼犳劅鍣� + IconPath = "Device/AirQualitySensorEpoint.png"; + } + else if (this.Type == DeviceType.FreshAirHumiditySensor) + { + //婀垮害浼犳劅鍣� + IconPath = "Device/SensorHumidity.png"; + } + else if (this.Type == DeviceType.TemperatureSensor) + { + if (((TemperatureSensor)this).SensorDiv == 1) + { + //娓╁害浼犳劅鍣� + IconPath = "Device/SensorTemperature.png"; + } + else if (((TemperatureSensor)this).SensorDiv == 2) + { + //婀垮害浼犳劅鍣� + IconPath = "Device/SensorHumidity.png"; + } + } + else if (this.Type != DeviceType.UnKown) + { + //鍏朵粬鐨勫浘鏍囨湁鐐圭壒娈� + string unSelectPic = string.Empty; + string selectPic = string.Empty; + Shared.Common.LocalDevice.Current.GetDeviceObjectIcon(new List<CommonDevice> { this }, ref unSelectPic, ref selectPic); + IconPath = unSelectPic; + } + Shared.Common.Global.WriteFileByBytesByHomeId(FilePath, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this))); + } + } + + #endregion + + #region 杈撳叆杈撳嚭闀炲畾涔� + + /// <summary> + /// 璁惧鏈�鏂颁笂鎶ョ殑灞炴�х姸鎬佷俊鎭� + /// </summary> + [System.Serializable] + public class AttributeStatusObj + { + /// <summary> + /// 灞炴�х皣id + /// </summary> + public int ClusterId; + /// <summary> + /// 灞炴�d + /// </summary> + public int AttributeId; + /// <summary> + /// 灞炴�у�硷紝鏈�澶у崰鐢�4涓瓧鑺� + /// </summary> + public int AttributeData; + /// <summary> + /// 灞炴�х姸鎬佹渶鍚庢洿鏂扮殑utc鏃堕棿鎴� + /// </summary> + public int ReportTime; + } + + /// <summary> + /// 杈撳叆绨� + /// </summary> + [System.Serializable] + public class InClusterObj + { + /// <summary> + /// 璁惧鏀寔鐨勮緭鍏ュ姛鑳� + /// <para>0:Basic,璁惧鏀寔鈥滃熀纭�灞炴�р�� </para> + /// <para>3:Identify,璁惧鏀寔鈥滆瘑鍒姛鑳解��</para> + /// <para>4:Groups,璁惧鏀寔鈥滅粍鍔熻兘鈥�</para> + /// <para>5:Scenes,璁惧鏀寔鈥滃満鏅姛鑳解��</para> + /// <para>6:on/off,璁惧鏀寔鈥滃紑鍏冲姛鑳解��</para> + /// 寮�鍏冲姛鑳界殑璁惧濡傦細璋冨叧鐏�/缁х數鍣�/绐楀笜绛夈�傘�傘�� + /// <para>8:Level Control,璁惧鏀寔鈥滀寒搴﹁皟鑺傚姛鑳解��</para> + /// 浜害璋冭妭鍔熻兘鐨勮澶囧锛氳皟鍏崇伅銆傘�傘�� + /// <para>257:Door Lock,璁惧鏀寔鈥滈棬閿佸姛鑳解��</para> + /// 闂ㄩ攣鍔熻兘鐨勮澶囧锛氶棬閿併�傘�傘�� + /// <para>258:Window Covering,璁惧鏀寔鈥滅獥甯樻帶鍒跺姛鑳解��</para> + /// 绐楀笜鎺у埗鍔熻兘鐨勮澶囧锛氱獥甯�/寮�鍚堝笜/鍗峰笜銆傘�傘�� + /// <para>513:Thermostat,璁惧鏀寔鈥滄亽娓╁櫒鍔熻兘鈥�</para> + /// 鎭掓俯鍣ㄥ姛鑳界殑璁惧濡傦細绌鸿皟銆傘�傘�� + /// <para>768:Color Control,璁惧鏀寔鈥滈鑹茶皟鑺傚姛鑳解��</para> + /// 棰滆壊璋冭妭鍔熻兘鐨勮澶囧锛氳皟鍏夌伅銆傘�傘�� + /// <para>1026:Temperature Measurement,璁惧鏀寔鈥滄俯搴︽祴閲忓姛鑳解��</para> + /// 娓╁害娴嬮噺鍔熻兘鐨勮澶囧锛氭俯搴︿紶鎰熷櫒銆傘�傘�� + /// <para>1029:Relative Humidity Measurement,璁惧鏀寔鈥滄箍搴︽祴閲忓姛鑳解��</para> + /// 婀垮害娴嬮噺鍔熻兘鐨勮澶囧锛氭箍搴︿紶鎰熷櫒銆傘�傘�� + /// <para>1066:Pm2.5 Measurement,璁惧鏀寔鈥減m2.5娴嬮噺鍔熻兘鈥�</para> + /// Pm2.5娴嬮噺鍔熻兘鐨勮澶囧锛歅m2.5浼犳劅鍣ㄣ�傘�傘�� + /// </summary> + public int InCluster; + } + + /// <summary> + /// 杈撳嚭绨� + /// </summary> + [System.Serializable] + public class OutClusterObj + { + /// <summary> + /// 璁惧鏀寔鐨勮緭鍑哄姛鑳� + /// <para>0:Basic,璁惧鏀寔鈥滃熀纭�灞炴�р�� </para> + /// <para>3:Identify,璁惧鏀寔鈥滆瘑鍒姛鑳解��</para> + /// <para>4:Groups,璁惧鏀寔鈥滅粍鍔熻兘鈥�</para> + /// <para>5:Scenes,璁惧鏀寔鈥滃満鏅姛鑳解��</para> + /// <para>6:on/off,璁惧鏀寔鈥滃紑鍏冲姛鑳解��</para> + /// 寮�鍏冲姛鑳界殑璁惧濡傦細璋冨叧鐏�/缁х數鍣�/绐楀笜绛夈�傘�傘�� + /// <para>8:Level Control,璁惧鏀寔鈥滀寒搴﹁皟鑺傚姛鑳解��</para> + /// 浜害璋冭妭鍔熻兘鐨勮澶囧锛氳皟鍏崇伅銆傘�傘�� + /// <para>257:Door Lock,璁惧鏀寔鈥滈棬閿佸姛鑳解��</para> + /// 闂ㄩ攣鍔熻兘鐨勮澶囧锛氶棬閿併�傘�傘�� + /// <para>258:Window Covering,璁惧鏀寔鈥滅獥甯樻帶鍒跺姛鑳解��</para> + /// 绐楀笜鎺у埗鍔熻兘鐨勮澶囧锛氱獥甯�/寮�鍚堝笜/鍗峰笜銆傘�傘�� + /// <para>513:Thermostat,璁惧鏀寔鈥滄亽娓╁櫒鍔熻兘鈥�</para> + /// 鎭掓俯鍣ㄥ姛鑳界殑璁惧濡傦細绌鸿皟銆傘�傘�� + /// <para>768:Color Control,璁惧鏀寔鈥滈鑹茶皟鑺傚姛鑳解��</para> + /// 棰滆壊璋冭妭鍔熻兘鐨勮澶囧锛氳皟鍏夌伅銆傘�傘�� + /// <para>1026:Temperature Measurement,璁惧鏀寔鈥滄俯搴︽祴閲忓姛鑳解��</para> + /// 娓╁害娴嬮噺鍔熻兘鐨勮澶囧锛氭俯搴︿紶鎰熷櫒銆傘�傘�� + /// <para>1029:Relative Humidity Measurement,璁惧鏀寔鈥滄箍搴︽祴閲忓姛鑳解��</para> + /// 婀垮害娴嬮噺鍔熻兘鐨勮澶囧锛氭箍搴︿紶鎰熷櫒銆傘�傘�� + /// </summary> + public int OutCluster; + } + + /// <summary> + /// 鏀寔鐨勫睘鎬ф暟鎹� + /// </summary> + [System.Serializable] + public class AttributeObj + { + /// <summary> + /// 鍝嶅簲鐨勫睘鎬D + /// </summary> + public int AttributeId; + /// <summary> + /// 灞炴�у�肩殑鏁版嵁绫诲瀷 + /// </summary> + public int AttributeType; + } + + /// <summary> + /// 璁惧涓婃姤鐨勫睘鎬ф暟鎹� + /// </summary> + [System.Serializable] + public class AttributeDataObj + { + /// <summary> + /// 灞炴�d + /// </summary> + public int AttributeId; + /// <summary> + /// 瑕佹姤鍛婂睘鎬х殑鏁版嵁绫诲瀷 + /// </summary> + public int AttriButeDataType; + /// <summary> + /// AttriButeData鍗犵敤鐨勫瓧鑺傛暟 + /// </summary> + public int AttriButeDataLength; + /// <summary> + /// 灞炴�у�� + /// </summary> + public int AttriButeData = 999; + /// <summary> + /// 灞炴�ф暟鎹�16杩涘埗杞瓧绗� + /// </summary> + public string AttriButeDataHex; + } + + /// <summary> + /// Command鏁扮粍 + /// </summary> + [System.Serializable] + public class CommandObj + { + /// <summary> + /// 鏀寔鐨勫懡浠d + /// </summary> + public int commandId; + } + + #endregion + + #region 鑾峰彇宸插叆缃戣澶囦俊鎭� + + /// <summary> + /// 缃戝叧涓殑璁惧淇℃伅 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public DeviceInfoData DeviceInfo = null; + /// <summary> + /// 缃戝叧涓殑璁惧淇℃伅 + /// </summary> + [System.Serializable] + public class DeviceInfoData + { + /// <summary> + /// 鍏ョ綉璁惧鎬绘暟銆傜瓑浜�0鏃讹紝琛ㄧず娌℃湁璁惧淇℃伅锛屼笅闈㈠瓧娈靛皢涓嶅瓨鍦ㄣ�� + /// </summary> + public int TotalNum; + /// <summary> + /// 鏍囪瘑褰撳墠璁惧鏄彂閫佺殑鏄鍑犱釜璁惧銆侱eviceNum浠�1寮�濮嬫瘡鍙戦�佷竴涓澶囦俊鎭紝涓嬩竴涓澶囦俊鎭殑DeviceNum灏嗗姞1銆傜洿鍒癉eviceNum绛変簬TotalNum璇存槑鎵�鏈夎澶囦俊鎭彂閫佸畬姣曘�� + /// </summary> + public int DeviceNum; + /// <summary> + /// 鍏ョ綉鐨剈tc鏃堕棿鎴� + /// </summary> + public int JoinTime; + /// <summary> + /// 1:璺敱鍣ㄨ澶� + /// <para>2锛氱粓绔澶�</para> + /// </summary> + public int ZigbeeType; + /// <summary> + /// 璁惧缃戠粶鍦板潃 + /// </summary> + public int NwkAddr; + /// <summary> + /// 璇ュ瓧娈典富瑕侀拡瀵笽AS瀹夐槻璁惧璁剧珛銆傛墍鏈塈AS瀹夐槻璁惧鍏辩敤涓�涓狣eviceID涓�1026銆傛墍浠ヨ鍖哄垎瀛愯澶囩被鍨嬶紝闇�瑕佽瀛楁銆� + /// <para>13:Motion sensor (杩愬姩浼犳劅鍣級</para> + /// <para>43:Carbon Monoxide sensor (涓�姘у寲纰充紶鎰熷櫒锛�</para> + /// <para>44:Personal emergency device (绱ф�ユ寜閽級</para> + /// </summary> + public int DeviceType; + /// <summary> + /// 鐢ㄤ簬鍒ゆ柇璁惧鐨剒igbee鍗忚鐗堟湰銆� + ///<para>49246锛歓LL1.0鏍囧噯璁惧銆�</para> + ///<para>260锛� ZHA1.2鏍囧噯璁惧銆� Z3.0鏍囧噯璁惧銆�</para> + ///<para>41440锛歓GP3.0鏍囧噯璁惧銆�</para> + ///<para>265锛歓SE1.4鏍囧噯璁惧銆�</para> + /// </summary> + public int Profile; + /// <summary> + /// 璁惧mac鍚嶇О + /// </summary> + public string MacName; + /// <summary> + /// 璁惧鍚�(Mac+鏂偣鍛藉悕鐨勶級 + /// </summary> + public string DeviceName; + /// <summary> + /// 0锛氳澶囦笉鍦ㄧ嚎 + /// <para>1锛氳澶囧湪绾�</para> + /// </summary> + public int IsOnline; + /// <summary> + /// 褰撳墠杩愯绋嬪簭鐗堟湰淇℃伅銆� 鏈�澶�64瀛楄妭 + /// </summary> + public int ImgVersion; + /// <summary> + /// 纭欢鐗堟湰 + /// </summary> + public int HwVersion; + /// <summary> + /// 褰撳墠闀滃儚绫诲瀷id + /// </summary> + public int ImgTypeId; + /// <summary> + /// 椹卞姩浠g爜銆備负0鏃讹紝琛ㄧずzigbee鍗忚皟鍣ㄨ澶囥�傚叾浠栧�艰〃绀轰负铏氭嫙椹卞姩璁惧 + /// </summary> + public int DriveCode; + /// <summary> + /// 鍘傚晢鍚嶇О + /// </summary> + public string ManufacturerName = string.Empty; + /// <summary> + /// 妯″潡ID + /// </summary> + public string ModelIdentifier = string.Empty; + /// <summary> + /// 濂藉儚鏄簭鍒楀彿 + /// </summary> + public string ProductCode = string.Empty; + /// <summary> + /// 璁惧鍔熻兘绫诲瀷(绌烘皵寮�鍏冲拰缁х數鍣ㄤ笓鐢�) + /// </summary> + public int FunctionType = -1; + /// <summary> + /// 杈撳叆绨囧垪琛� + /// </summary> + public List<InClusterObj> InClusterList = new List<InClusterObj>(); + /// <summary> + /// 杈撳嚭绨囧垪琛� + /// </summary> + public List<OutClusterObj> OutClusterList = new List<OutClusterObj>(); + /// <summary> + /// 鐢ㄤ簬璁板綍璁惧鏈�鏂颁笂鎶ョ殑灞炴�х姸鎬佷俊鎭�傛渶澶ф敮鎸佽褰�16涓睘鎬х姸鎬侊紝涓斿彧璁板綍灞炴�у�奸暱搴︿笉澶т簬4瀛楄妭鐨勬暟鎹�� + /// </summary> + public List<AttributeStatusObj> AttributeStatus = new List<AttributeStatusObj>(); + + } + + #endregion + + #region 閿欒缁撴灉瀹氫箟 + + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉鍏遍�� + /// </summary> + [System.Serializable] + public class ErrorResponCommon + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + } + + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + [System.Serializable] + public class ErrorResponData + { + /// <summary> + /// Error鍙傛暟鍚箟 + ///<para>1锛氱綉鍏虫棤娉曡В鏋愬懡浠ゆ暟鎹��</para> + ///<para>2锛氬崗璋冨櫒姝e湪鍗囩骇鎴栧浠�/鎭㈠鏁版嵁 + ///<para>3锛氭搷浣滆澶�/缁�/鍦烘櫙涓嶅瓨鍦�</para> + ///<para>4锛氬叾浠栭敊璇�</para> + ///<para>5锛氭暟鎹紶杈撻敊璇紙鍦ㄦ煇娆″鎴风鍚戠綉鍏冲彂閫佹暟鎹殑杩囩▼涓紝缃戝叧鍦ㄥ悎鐞嗘椂闂磋寖鍥村唴鎺ユ敹瀹㈡埛绔暟鎹笉瀹屾暣瀵艰嚧璇ラ敊璇彂鐢熴�傚瀹㈡埛绔悜缃戝叧涓�娆″彂閫�100涓瓧鑺傜殑鏁版嵁锛屼絾缃戝叧绛夊緟鎺ユ敹浜嗕竴绉掑彧鎺ユ敹浜�80涓瓧鑺傘�傚彂鐢熻閿欒锛岀綉鍏冲皢涓诲姩鍏抽棴瀹㈡埛绔繛鎺ワ級</para> + /// </summary> + public int Error; + } + + /// <summary> + /// 缃戝叧閿欒淇℃伅鍏蜂綋鍐呭 + /// </summary> + public static string ErrorMess(int err) + { + string message = ""; + switch (err) + { + case 1: + message = " 缃戝叧鏃犳硶瑙f瀽鍛戒护鏁版嵁銆�"; + break; + case 2: + message = " 鍗忚皟鍣ㄦ鍦ㄥ崌绾ф垨澶囦唤 / 鎭㈠鏁版嵁銆�"; + break; + case 3: + message = "鎿嶄綔璁惧 / 缁� / 鍦烘櫙涓嶅瓨鍦�"; + break; + case 4: + message = " 鍏朵粬閿欒"; + break; + case 5: + message = " 鏁版嵁浼犺緭閿欒锛堝湪鏌愭瀹㈡埛绔悜缃戝叧鍙戦�佹暟鎹殑杩囩▼涓紝缃戝叧鍦ㄥ悎鐞嗘椂闂磋寖鍥村唴鎺ユ敹瀹㈡埛绔暟鎹笉瀹屾暣瀵艰嚧璇ラ敊璇彂鐢熴�傚瀹㈡埛绔悜缃戝叧涓�娆″彂閫�100涓瓧鑺傜殑鏁版嵁锛屼絾缃戝叧绛夊緟鎺ユ敹浜嗕竴绉掑彧鎺ユ敹浜� 涓瓧鑺傘�傚彂鐢熻閿欒锛岀綉鍏冲皢涓诲姩鍏抽棴瀹㈡埛绔繛鎺ワ級"; + break; + default: + break; + } + return message; + } + + #endregion + + #region 淇敼璁惧绔彛鍚嶇О + + /// <summary> + /// 閲嶅懡鍚嶈澶�,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class DeviceRenameAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 璁惧鍚嶇О淇敼 + /// </summary> + public DeviceRenameResponseData deviceRenameData; + } + + /// <summary> + /// 璁惧鍚嶇О淇敼 + /// </summary> + [System.Serializable] + public class DeviceRenameResponseData + { + /// <summary> + /// 0:淇敼鎴愬姛 + /// <para>1:淇敼澶辫触</para> + /// </summary> + public int Result; + /// <summary> + /// 淇敼鍚庣殑璁惧鍚嶇О + /// </summary> + public string DeviceName; + } + #endregion + + #region 淇敼璁惧mac鍚嶇О + + /// <summary> + /// 淇敼璁惧mac鍚嶇О鏁版嵁,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class RenameDeviceMacNameAllData : ErrorResponCommon + { + /// <summary> + /// 淇敼璁惧mac鍚嶇О鏁版嵁 + /// </summary> + public RenameDeviceMacNameData renameDeviceMacNameData; + } + + /// <summary> + /// 淇敼璁惧mac鍚嶇О鏁版嵁 + /// </summary> + [System.Serializable] + public class RenameDeviceMacNameData + { + /// <summary> + /// 0:淇敼鎴愬姛 + /// <para>1:淇敼澶辫触,mac涓嶅瓨鍦�</para> + /// </summary> + public int Result; + /// <summary> + /// 淇敼鍚庣殑璁惧鍚嶇О + /// </summary> + public string MacName; + } + #endregion + + #region 涓�閿洿鏂板洓瀵稿睆鎸夐敭灞炴�� + /// <summary> + /// 鍚屾璁惧鍔熻兘 + /// </summary> + /// <returns></returns> + public async System.Threading.Tasks.Task<SynchronizationDeviceResponseAllData> SyncMsgToBindSource(string deviceAddr, int deviceEpoint) + { + if (Gateway == null) + { + return null; + } + + return await System.Threading.Tasks.Task.Run(async () => + { + SynchronizationDeviceResponseAllData resContent = null; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + resContent = new SynchronizationDeviceResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + resContent = new SynchronizationDeviceResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "Bind/SyncMsgToBindSourceRespon") + { + var res = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["Result"].ToString()); + if (res == null) + { + resContent = new SynchronizationDeviceResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + resContent = new SynchronizationDeviceResponseAllData { result = res }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + Gateway.Actions = action; + DebugPrintLog("Bind/SyncMsgToBindSourceRespon_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", deviceAddr }, { "Epoint", deviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5010 } }; + Gateway.Send("Bind/SyncMsgToBindSource", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (resContent != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + resContent = new SynchronizationDeviceResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("Bind/SyncMsgToBindSource_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return resContent; + }); + + } + + /// <summary> + /// 鍚屾璁惧,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class SynchronizationDeviceResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 鍚屾缁撴灉 + /// 0:鎴愬姛锛氱綉鍏冲唴閮ㄨ嚜鍔ㄥ啓鍏ヨ澶囩洰鏍囧悕瀛椼�佽澶囩洰鏍囧姛鑳界被鍨嬨�佸満鏅洰鏍囧悕瀛椼�乽tc鏃堕棿鍐欏叆4瀵稿睆 + /// 1:澶辫触 + /// </summary> + public int result; + } + #endregion + + #region 鍒犻櫎璁惧锛堜娇璁惧绂荤綉锛� + /// <summary> + /// 鍒犻櫎璁惧锛堜娇璁惧绂荤綉锛� + /// </summary> + /// <returns>The device async.</returns> + /// <param name="removeData">Remove data.</param> + public async System.Threading.Tasks.Task<RemoveDeviceResponseAllData> DeleteDeviceAsync(ZigBee.Device.CommonDevice.RemoveDeviceData removeData) + { + if (Gateway == null || removeData == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + RemoveDeviceResponseAllData d = null; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new RemoveDeviceResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new RemoveDeviceResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "RemoveDeviceRespon") + { + var removeDeviceResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.RemoveDeviceResponseData>(jobject["Data"].ToString()); + + if (removeDeviceResponseData == null) + { + d = new RemoveDeviceResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new RemoveDeviceResponseAllData { removeDeviceResponseData = removeDeviceResponseData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + Gateway.Actions += action; + DebugPrintLog("RemoveDevice_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + if (removeData != null) + { + var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 99 } }; + var deviceAddrList = new JArray { }; + foreach (var a in removeData.DeviceAddrList) + { + var dd = new JObject { { "DeviceAddr", a.DeviceAddr } }; + deviceAddrList.Add(dd); + } + + var data = new JObject { + { "CompelClear", removeData.CompelClear }, + { "DeviceAddrList", deviceAddrList } + }; + jObject.Add("Data", data); + Gateway.Send(("RemoveDevice"), jObject.ToString()); + } + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new RemoveDeviceResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("RemoveDevice_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 闇�瑕佸垹闄よ澶囩殑鏁版嵁 + /// </summary> + [System.Serializable] + public class RemoveDeviceData + { + /// <summary> + /// 0锛氫笉寮哄埗娓呴櫎銆傞渶瑕佽妭鐐硅澶囧弽棣堢缃戠‘璁や俊鎭悗鎵嶈兘鍒犻櫎璁惧淇℃伅銆� + ///<para>1锛氬己鍒舵竻闄ゃ�備笉闇�瑕佽妭鐐硅澶囧弽棣堢缃戠‘璁や俊鎭紝鐩存帴鍒犻櫎璁惧淇℃伅銆�</para> + ///<para>璇存槑锛氭甯告儏鍐典笅璁╄妭鐐硅澶囩缃戯紝闇�瑕佽妭鐐硅澶囧湪绾匡紝鑺傜偣璁惧鍙嶉绂荤綉纭淇℃伅鍚庣綉鍏虫柟鍙垹闄よ璁惧鐨勮澶囦俊鎭�備絾濡傛灉璁惧宸茬粡鎹熷潖锛屾垨宸茬粡閫氳繃澶栭儴鍔熻兘绂荤綉锛屾鏃惰妭鐐硅澶囧凡缁忔棤娉曞弽棣堢缃戠‘璁や俊鎭紝闈㈠杩欑鎯呭喌锛岃鍒犻櫎淇濆瓨鍦ㄧ綉鍏充笂鐨勮鑺傜偣璁惧鐨勮澶囦俊鎭紝闇�瑕佸皢璇ュ瓧娈佃祴鍊间负1锛岀綉鍏冲己鍒跺垹闄よ璁惧淇℃伅锛屼笉闇�瑕佽妭鐐硅澶囩‘璁ゃ��</para> + /// </summary> + public int CompelClear = 1; + /// <summary> + /// 鍑虹綉璁惧鍒楄〃 + /// </summary> + public List<RemoveDeviceListInfo> DeviceAddrList = new List<RemoveDeviceListInfo>(); + } + + /// <summary> + /// 鍦烘櫙淇℃伅 + /// </summary> + public class RemoveDeviceListInfo + { + /// <summary> + /// 璁惧mac鍦板潃 + /// </summary> + public string DeviceAddr; + } + + /// <summary> + /// 绉婚櫎璁惧,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class RemoveDeviceResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 璁惧鍚嶇О淇敼 + /// </summary> + public RemoveDeviceResponseData removeDeviceResponseData; + } + + /// <summary> + /// 鍒犻櫎璁惧鍥炲鏁版嵁 + /// <para>杩斿洖缁撴灉Resul=锛屽垹闄ゆ垚鍔�</para> + /// </summary> + [System.Serializable] + public class RemoveDeviceResponseData + { + /// <summary> + /// 0锛氬垹闄ゆ垚鍔� + /// <para>鍒犻櫎澶辫触</para> + /// </summary> + public int Result = 2; + /// <summary> + /// 鍑虹綉璁惧鍒楄〃 + /// </summary> + public List<DeviceListInfo> DeviceList = new List<DeviceListInfo>(); + } + + /// <summary> + /// 鍦烘櫙淇℃伅 + /// </summary> + [System.Serializable] + public class DeviceListInfo + { + /// <summary> + /// 璁惧ID + /// </summary> + public int Device_ID; + + /// <summary> + /// 璁惧mac鍦板潃 + /// </summary> + public string MacAddr; + + /// <summary> + /// 璁惧绔彛鍙� + /// </summary> + public int Epoint; + + } + #endregion + + #region 璇嗗埆璁惧 + ///<summary > + /// 璇嗗埆璁惧 + /// <para>cluster=3锛屽叿鏈塈dentify锛堣瘑鍒級鍔熻兘锛屽睘浜嶼CL搴�</para> + /// <para>time:璁剧疆璁惧闂儊鏃堕棿锛堢锛夎寖鍥达細0-65535</para> + /// </summary> + public void IdentifyControl(string deviceAddr, int deviceEpoint, int time) + { + if (Gateway == null) + { + return; + } + Action<string, string> action = (topic, message) => { }; + Gateway.Actions += action; + System.Console.WriteLine("Identify_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", deviceAddr }, { "Epoint", deviceEpoint }, { "Cluster_ID", 3 }, { "Command", 0 }, { "SendMode", 2 } }; + var data = new JObject { { "Time", time } }; + jObject.Add("Data", data); + Gateway.Send(("Identify"), jObject.ToString()); + } + catch { } + + Gateway.Actions -= action; + System.Console.WriteLine("Identify_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + } + #endregion + + #region 璁惧灞炴�х姸鎬佷笂鎶� + /// <summary> + /// 鑾峰彇璁惧褰撳墠灞炴�х姸鎬� + /// </summary> + /// <param name="clusterID">Cluster identifier.</param> + /// <param name="attriButeId">Attri bute identifier.</param> + public async void ReadAttri(Cluster_ID clusterID, AttriButeId attriButeId) + { + if (Gateway == null) + { + return; + } + await System.Threading.Tasks.Task.Run(async () => + { + //Action<string, string> action = (topic, message) => { }; + + // Gateway.Actions += action; + System.Console.WriteLine("GetDeviceStatus_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var JObject = new JObject { + { "DeviceAddr",DeviceAddr }, + { "Epoint", DeviceEpoint }, + { "Cluster_ID", (int)clusterID }, + { "Command", 108 } + }; + var attriBute = new JArray{ + new JObject { + { "AttriButeId", (int)attriButeId} + } + }; + var data = new JObject { { "AttriBute", attriBute } }; + JObject.Add("Data", data); + Gateway?.Send(("GetDeviceStatus"), JObject.ToString()); + } + catch { } + + // Gateway.Actions -= action; + System.Console.WriteLine("GetDeviceStatus_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + }); + } + + /// <summary> + /// 璁惧灞炴�х姸鎬佷笂鎶� + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public DeviceStatusReportData DeviceStatusReport = new DeviceStatusReportData(); + /// <summary> + /// 璁惧灞炴�х姸鎬佷笂鎶� + /// </summary> + [System.Serializable] + public class DeviceStatusReportData + { + /// <summary> + /// 灞炴�ф墍鍦–luterID + /// <summary> + /// 璁惧鏀寔鐨勮緭鍏ュ姛鑳� + /// <para>0:Basic,璁惧鏀寔鈥滃熀纭�灞炴�р�� </para> + /// <para>3:Identify,璁惧鏀寔鈥滆瘑鍒姛鑳解��</para> + /// <para>4:Groups,璁惧鏀寔鈥滅粍鍔熻兘鈥�</para> + /// <para>5:Scenes,璁惧鏀寔鈥滃満鏅姛鑳解��</para> + /// <para>6:on/off,璁惧鏀寔鈥滃紑鍏冲姛鑳解��</para> + /// 寮�鍏冲姛鑳界殑璁惧濡傦細璋冨叧鐏�/缁х數鍣�/绐楀笜绛夈�傘�傘�� + /// <para>8:Level Control,璁惧鏀寔鈥滀寒搴﹁皟鑺傚姛鑳解��</para> + /// 浜害璋冭妭鍔熻兘鐨勮澶囧锛氳皟鍏崇伅銆傘�傘�� + /// <para>257:Door Lock,璁惧鏀寔鈥滈棬閿佸姛鑳解��</para> + /// 闂ㄩ攣鍔熻兘鐨勮澶囧锛氶棬閿併�傘�傘�� + /// <para>258:Window Covering,璁惧鏀寔鈥滅獥甯樻帶鍒跺姛鑳解��</para> + /// 绐楀笜鎺у埗鍔熻兘鐨勮澶囧锛氱獥甯�/寮�鍚堝笜/鍗峰笜銆傘�傘�� + /// <para>513:Thermostat,璁惧鏀寔鈥滄亽娓╁櫒鍔熻兘鈥�</para> + /// 鎭掓俯鍣ㄥ姛鑳界殑璁惧濡傦細绌鸿皟銆傘�傘�� + /// <para>768:Color Control,璁惧鏀寔鈥滈鑹茶皟鑺傚姛鑳解��</para> + /// 棰滆壊璋冭妭鍔熻兘鐨勮澶囧锛氳皟鍏夌伅銆傘�傘�� + /// <para>1026:Temperature Measurement,璁惧鏀寔鈥滄俯搴︽祴閲忓姛鑳解��</para> + /// 娓╁害娴嬮噺鍔熻兘鐨勮澶囧锛氭俯搴︿紶鎰熷櫒銆傘�傘�� + /// <para>1029:Relative Humidity Measurement,璁惧鏀寔鈥滄箍搴︽祴閲忓姛鑳解��</para> + /// 婀垮害娴嬮噺鍔熻兘鐨勮澶囧锛氭箍搴︿紶鎰熷櫒銆傘�傘�� + /// </summary> + /// </summary> + public int CluterID; + /// <summary> + /// 灞炴�у垪琛� + /// </summary> + public List<AttributeDataObj> AttriBute = new List<AttributeDataObj>(); + } + #endregion + + #region 璁剧疆鍙啓灞炴�х殑鍊� + /// <summary> + /// 璁剧疆鍙啓灞炴�х殑鍊� + /// </summary> + /// <returns>The writable value async.</returns> + /// <param name="gateway">Gateway.</param> + /// <param name="clusterID">瑕侀厤缃殑灞炴�ф墍鍦ㄧ殑cluster.</param> + /// <param name="setWritableValue">璁剧疆鍙啓灞炴�х殑鏁版嵁</param> + public async System.Threading.Tasks.Task<SetWritableValueResponAllData> SetWritableValueAsync(ZigBee.Device.ZbGateway gateway, int clusterID, SetWritableValueData setWritableValue) + { + if (gateway == null || setWritableValue == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + SetWritableValueResponAllData d = null; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new SetWritableValueResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "SetWritableValue_Respon") + { + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<SetWritableValueResponData>(jobject["Data"].ToString()); + + if (tempData == null) + { + d = new SetWritableValueResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new SetWritableValueResponAllData { setWritableValueResponData = tempData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("SetWritableValue_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterID }, { "Command", 120 } }; + var data = new JObject { { "Undivided", setWritableValue.Undivided }, { "AttributeId", setWritableValue.AttributeId }, { "AttributeDataType", setWritableValue.AttributeDataType }, { "AttributeData", setWritableValue.AttributeData } }; + jObject.Add("Data", data); + gateway.Send("SetWritableValue", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new SetWritableValueResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + gateway.Actions -= action; + System.Console.WriteLine("SetWritableValue_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 缃戝叧鐗堟湰淇℃伅,缃戝叧鍙嶉淇℃伅 + /// </summary> + [System.Serializable] + public class SetWritableValueResponAllData : ErrorResponCommon + { + /// <summary> + /// 缃戝叧鐗堟湰淇℃伅 + /// </summary> + public SetWritableValueResponData setWritableValueResponData; + } + + /// <summary> + /// 璁剧疆鍙啓灞炴�х殑鍊肩殑鏁版嵁 + /// </summary> + [System.Serializable] + public class SetWritableValueResponData + { + /// <summary> + /// 閰嶇疆灞炴�ф墍鍦ㄧ殑cluster + /// </summary> + public int Cluster; + /// <summary> + /// 0锛氶厤缃垚鍔燂紙鑻ラ厤缃垚鍔燂紝涓嬮潰鐨凙ttributeId瀛楁涓嶅瓨鍦級 + ///<para>134锛氫笉鏀寔璇ュ睘鎬�</para> + ///<para>135锛氭棤鏁堢殑灞炴�у��</para> + ///<para>141锛氭棤鏁堢殑鏁版嵁绫诲瀷</para> + /// </summary> + public int Status; + /// <summary> + /// 閰嶇疆鐨勫睘鎬D锛堝綋Status=0 鏃讹紝璇ュ瓧娈靛皢涓嶅瓨鍦� 锛屼篃灏辨槸鍙湁澶辫触鐨勭粨鏋滄墠浼氳繑鍥炶瀛楁锛� + /// </summary> + public int AttributeId; + + } + + /// <summary> + /// 璁剧疆鍙啓灞炴�х殑鍊肩殑鏁版嵁 + /// </summary> + [System.Serializable] + public class SetWritableValueData + { + /// <summary> + /// 鏄惁寮哄埗鍐欏叆灞炴�� + ///<para>0锛氬惁</para> + ///<para>1锛氬己鍒跺啓灞炴�у��</para> + ///<para>鍙己鐪侊紝榛樿涓�0銆�</para> + /// </summary> + public int Undivided; + /// <summary> + /// 灞炴�d + /// </summary> + public int AttributeId; + /// <summary> + /// 灞炴�ф暟鎹被鍨� + /// </summary> + public int AttributeDataType; + /// <summary> + /// 鍐欏叆鏁板�� + /// </summary> + public int AttributeData; + + } + #endregion + + #region 寮�鍏� + ///<summary > + ///寮�鍏虫帶鍒�(浠呯敤浜巆luster=6鐨勮澶囷級 + /// <para>璁惧鏀寔cluster=6鐨勮澶囨墠鑳借皟鐢ㄨ鎺ュ彛</para> + /// <para>command鐨勫��</para> + ///<para>0 : 鍏抽棴</para> + ///<para>1: 鎵撳紑</para> + ///<para>2锛氬彇鍙�</para> + /// </summary> + public void SwitchControl(int command) + { + try + { + var jobject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 6 }, { "Command", command }, { "SendMode", 2 } }; + Gateway?.Send(("DeviceControl"), jobject.ToString()); + System.Console.WriteLine("SwitchControl_鍙戦�佹暟鎹�" + "_" + jobject.ToString() + "_" + System.DateTime.Now.ToString()); + + } + catch { } + } + #endregion + + #region ZCL搴�-鍙戠幇灞炴�� + /// <summary> + ///ZCL搴�-鍙戠幇灞炴��(濡傛灉杩斿洖涓虹┖锛屽彲鑳芥槸璁惧涓嶆槸鏍囧噯璁惧锛屼笉鏀寔杩欐潯鍛戒护锛� + /// <para>鑾峰彇璁惧鐨勬煇涓狢luster鎵�鏀寔鐨凙ttributes</para> + /// <para> gateway锛氬綋鍓嶇綉鍏�</para> + /// <para> clusterID锛氶渶瑕佹煡璇㈢殑cluster</para> + /// <para>璇籔anel鐨勫睘鎬э細clusterID=6</para> + /// <para>璇讳寒搴︾殑灞炴�э細clusterID=8</para> + /// </summary> + public async System.Threading.Tasks.Task<ClusterOwnAttributesResponAllData> ClusterOwnAttributesAsync(ZigBee.Device.ZbGateway gateway, int clusterID) + { + if (gateway == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + ClusterOwnAttributesResponAllData d = null; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new ClusterOwnAttributesResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new ClusterOwnAttributesResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "Cluster/OwnAttributes_Respon") + { + var clusterOwnAttributesResponData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ClusterOwnAttributesResponData>(jobject["Data"].ToString()); + var tempAttributes = Newtonsoft.Json.Linq.JArray.Parse(jobject["Data"]["Attribute"].ToString()); + for (int m = 0; tempAttributes != null && m < tempAttributes.Count; m++) + { + var tempAttribute = tempAttributes[m]; + clusterOwnAttributesResponData.AttributeList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AttributeObj>(tempAttribute.ToString())); + } + + if (clusterOwnAttributesResponData == null) + { + d = new ClusterOwnAttributesResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new ClusterOwnAttributesResponAllData { clusterOwnAttributesResponData = clusterOwnAttributesResponData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("Cluster/OwnAttributes_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterID }, { "Command", 301 } }; + gateway.Send("Cluster/OwnAttributes", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new ClusterOwnAttributesResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + gateway.Actions -= action; + System.Console.WriteLine("Cluster/OwnAttributes_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 鍙戠幇灞炴��,缃戝叧鍙嶉淇℃伅 + /// </summary> + [System.Serializable] + public class ClusterOwnAttributesResponAllData : ErrorResponCommon + { + /// <summary> + /// 缃戝叧鐗堟湰淇℃伅 + /// </summary> + public ClusterOwnAttributesResponData clusterOwnAttributesResponData; + } + + [System.Serializable] + public class ClusterOwnAttributesResponData + { + /// <summary> + /// 鏌ヨ鐨刢luste + /// </summary> + public int Cluster; + /// <summary> + /// 璁惧灞炴�у垪琛� + /// </summary> + public List<AttributeObj> AttributeList = new List<AttributeObj>(); + + } + #endregion + + #region ZCL搴�-鏀寔鐨凜ommand + /// <summary> + ///ZCL搴�-璁惧鏌恈luster鎵�鏀寔鐨凜ommand ;(濡傛灉杩斿洖涓虹┖锛屽彲鑳芥槸璁惧涓嶆槸鏍囧噯璁惧锛屼笉鏀寔杩欐潯鍛戒护锛� + /// <para>鑾峰彇璁惧鏌恈luster鎵�鏀寔鐨凜ommand</para> + /// <para> gateway锛氬綋鍓嶇綉鍏�</para> + /// <para> clusterID锛氶渶瑕佹煡璇㈢殑cluster</para> + /// </summary> + public async System.Threading.Tasks.Task<ClusterOwnCommandResponAllData> ClusterOwnCommandAsync(ZigBee.Device.ZbGateway gateway, int clusterID) + { + if (gateway == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + ClusterOwnCommandResponAllData d = null; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new ClusterOwnCommandResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new ClusterOwnCommandResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + + } + } + + if (topic == gatewayID + "/" + "Cluster/OwnCommand_Respon") + { + var clusterOwnCommandResponData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClusterOwnCommandResponData>(jobject["Data"].ToString()); + + if (clusterOwnCommandResponData == null) + { + d = new ClusterOwnCommandResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + + } + else + { + d = new ClusterOwnCommandResponAllData { clusterOwnCommandResponData = clusterOwnCommandResponData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("Cluster/OwnCommand_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterID }, { "Command", 302 } }; + gateway.Send("Cluster/OwnCommand", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new ClusterOwnCommandResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + + } + gateway.Actions -= action; + System.Console.WriteLine("Cluster/OwnCommand_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 璁惧鏌恈luster鎵�鏀寔鐨凜ommand鏁版嵁,缃戝叧鍙嶉淇℃伅 + /// </summary> + [System.Serializable] + public class ClusterOwnCommandResponAllData : ErrorResponCommon + { + /// <summary> + /// 缃戣澶囨煇cluster鎵�鏀寔鐨凜ommand鏁版嵁 + /// </summary> + public ClusterOwnCommandResponData clusterOwnCommandResponData; + } + + /// <summary> + /// 璁惧鏌恈luster鎵�鏀寔鐨凜ommand鏁版嵁 + /// </summary> + [System.Serializable] + public class ClusterOwnCommandResponData + { + /// <summary> + /// 鏌ヨ鐨刢luste + /// </summary> + public int Cluster; + /// <summary> + /// 璁惧灞炴�у垪琛� + /// </summary> + public List<CommandObj> Command = new List<CommandObj>(); + + } + #endregion + + #region 璁惧畾OTA鍗囩骇鍥轰欢.; + /// <summary> + /// 璁惧畾OTA鍗囩骇鍥轰欢 + /// </summary> + /// <returns>The NVA sync.</returns> + /// <param name="gateway">Gateway.</param> + /// <param name="oTAImageName">O TAI mage name:鍗囩骇闀滃儚鍚嶇О</param> + public async System.Threading.Tasks.Task<OTASetImageResponseAllData> UpgradeDeviceAsync(ZigBee.Device.ZbGateway gateway, string oTAImageName) + { + return await System.Threading.Tasks.Task.Run(async () => + { + OTASetImageResponseAllData d = null; ; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new OTASetImageResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + d = new OTASetImageResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "OTA/SetImage_Respon") + { + var oTASetImageData = Newtonsoft.Json.JsonConvert.DeserializeObject<OTASetImageData>(jobject["Data"].ToString()); + + if (oTASetImageData == null) + { + d = new OTASetImageResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new OTASetImageResponseAllData { otaSetImageData = oTASetImageData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("OTA/SetImage_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "Cluster_ID", 25 }, { "Command", 30 } }; + var data = new JObject { { "OTAImageName", oTAImageName }, { "OTAImagePath", "/tmp" } }; + jObject.Add("Data", data); + gateway.Send(("OTA/SetImage"), jObject.ToString()); + } + catch + { } + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new OTASetImageResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + gateway.Actions -= action; + System.Console.WriteLine("OTA/SetImage_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 璁惧杩涜OTA鍗囩骇,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class OTASetImageResponseAllData : ErrorResponCommon + { + /// <summary> + /// 淇濆瓨zigbee鍗忚皟鍣ㄧ粍缃戜俊鎭� + /// </summary> + public OTASetImageData otaSetImageData; + } + + [System.Serializable] + public class OTASetImageData + { + /// <summary> + /// 0锛氭垚鍔� + ///<para>1锛氭病鏈夋壘鍒版枃浠舵垨鎵撳紑鏂囦欢澶辫触</para> + ///<para>2锛氬綋鍓嶆湁鑺傜偣璁惧姝e湪ota鍗囩骇锛屽師鏉ョ殑ota鍥轰欢杩樺湪鍗犵敤锛屼笉鑳介噸鏂拌瀹氬浐浠躲�傝嫢瑕侀噸鏂拌瀹歰ta鍥轰欢锛屽垯闇�瑕佸厛鐢ㄧ粓姝㈠崌绾ф寚浠ょ粓姝㈡墍鏈夋鍦ㄥ崌绾х殑鑺傜偣璁惧銆�</para> + /// </summary> + public int Result; + + /// <summary> + /// 璇ta鍥轰欢鐨勫埗閫犲晢ID(Result = 0鏃跺瓨鍦�) + /// </summary> + public int Manufacture; + + /// <summary> + /// 璇ta鍥轰欢鐨勫浐浠剁被鍨媔d(Result = 0鏃跺瓨鍦�) + /// </summary> + public int ImgTypeId; + + /// <summary> + /// 璇ta鍥轰欢鐨勭増鏈�(Result = 0鏃跺瓨鍦�) + /// </summary> + public int FileVersion; + + /// <summary> + /// 鍥轰欢澶у皬 + /// </summary> + public int FileSize; + + /// <summary> + ///姝e湪鍗囩骇鐨刼ta鑺傜偣璁惧鍒�(Result=2鏃讹紝璇ュ瓧娈垫墠瀛樺湪) + /// </summary> + public List<OTADeviceList> DeviceList = new List<OTADeviceList>(); + } + + /// <summary> + /// 杈撳叆绨� + /// </summary> + [System.Serializable] + public class OTADeviceList + { + /// <summary> + /// MAC鍦板潃 + /// </summary> + public string MacAddr; + + /// <summary> + /// 璁惧绔彛鍙凤紝褰撳崌绾ц澶囷紝HDL鐨勮澶囧ぇ澶氭暟鐨勭鐐归粯璁ゆ槸200 + /// </summary> + public int Epoint = 200; + } + #endregion + + #region 鍚姩鍗囩骇; + /// <summary> + /// 璁惧畾OTA鍗囩骇鍥轰欢 + /// </summary> + /// <returns>The NVA sync.</returns> + /// <param name="gateway">Gateway.</param> + /// <param name="oTAImageName">O TAI mage name:鍗囩骇闀滃儚鍚嶇О</param> + public async System.Threading.Tasks.Task<StartDeviceUpdateResponseAllData> StartDeviceUpdateAsync(ZigBee.Device.ZbGateway gateway, StartUpdateData startUpdateData) + { + return await System.Threading.Tasks.Task.Run(async () => + { + StartDeviceUpdateResponseAllData d = null; ; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new StartDeviceUpdateResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + d = new StartDeviceUpdateResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "OTA/StartUpdate_Respon") + { + var startUpdateDeviceData = Newtonsoft.Json.JsonConvert.DeserializeObject<StartDeviceUpdateData>(jobject["Data"].ToString()); + + if (startUpdateDeviceData == null) + { + d = new StartDeviceUpdateResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new StartDeviceUpdateResponseAllData { startUpdateDeviceData = startUpdateDeviceData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("OTA/StartUpdate_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + if (startUpdateData != null) + { + var jObject = new JObject { { "Cluster_ID", 25 }, { "Command", 0 } }; + var deviceList = new JArray { }; + foreach (var de in startUpdateData.DeviceList) + { + var dInfo = new JObject{ + { "MacAddr",de.MacAddr}, + { "Epoint", de.Epoint} + }; + deviceList.Add(dInfo); + } + var data = new JObject { { "DeviceList", deviceList } }; + jObject.Add("Data", data); + gateway.Send(("OTA/StartUpdate"), jObject.ToString()); + } + } + catch + { } + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < 30 * 1000) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > 30 * 1000) + { + d = new StartDeviceUpdateResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + + } + gateway.Actions -= action; + System.Console.WriteLine("OTA/StartUpdate_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 鍚姩鍗囩骇,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class StartDeviceUpdateResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 淇濆瓨zigbee鍗忚皟鍣ㄧ粍缃戜俊鎭� + /// </summary> + public StartDeviceUpdateData startUpdateDeviceData; + } + + [System.Serializable] + public class StartDeviceUpdateData + { + /// <summary> + /// 0锛氭甯� + /// <para>1锛氬惎鍔ㄥけ璐ワ紝鏈瀹氬崌绾у浐浠�</para> + /// </summary> + public int Result = 999; + + /// <summary> + ///鍗囩骇璁惧鍒楄〃 + /// </summary> + public List<OTAStartUpdateList> DeviceList = new List<OTAStartUpdateList>(); + } + + /// <summary> + /// 杈撳叆绨� + /// </summary> + [System.Serializable] + public class OTAStartUpdateList + { + /// <summary> + /// MAC鍦板潃 + /// </summary> + public string MacAddr; + + /// <summary> + /// 璁惧绔彛鍙凤紝褰撳崌绾ц澶囷紝HDL鐨勮澶囧ぇ澶氭暟鐨勭鐐归粯璁ゆ槸200 + /// </summary> + public int Epoint = 200; + + /// <summary> + /// 璁惧鍚嶇О + /// </summary> + public string DeviceName; + } + + /// <summary> + /// 鍚姩鍗囩骇 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public OTAScheduleResponData oTAScheduleResponData; + + [System.Serializable] + public class OTAScheduleResponData + { + /// <summary> + /// 0锛氳妭鐐硅澶囧彲杩涜OTA鍗囩骇锛堝鏋滆澶囧湪绾匡紝涓旀敮鎸丱TA鍗囩骇锛屽垯璁惧棣栧厛浼氬弽棣堣鐘舵�侊紝璇存槑璇ヨ澶嘜TA鍗囩骇宸插惎鍔級 + ///<para>1锛氭鍦ㄥ崌绾э紙璁惧澶勪簬涓嬭浇OTA鍗囩骇鍥轰欢鐘舵�佸皢鍙嶉璇ョ姸</para> + ///<para>2锛氬崌绾у畬鎴愶紙OTA鍗囩骇瀹屾垚锛岃妭鐐硅澶囧弽棣堣鐘舵�侊級</para> + ///<para>3锛氬崌绾уけ璐ワ紝鍝嶅簲瓒呮椂</para> + ///<para>150锛氭棤鏁堢殑OTA鍗囩骇鍥轰欢锛堜笅杞藉畬鎴愬悗锛岀敱鑺傜偣璁惧鍒ゆ柇鍥轰欢鏄惁鏈夋晥锛�</para> + ///<para>153锛氬鎴风浠嶉渶鏇村鐨凮TA鍗囩骇鍥轰欢</para> + ///<para>149锛氬崌绾х粓姝�</para> + /// </summary> + public int Status = 999; + + /// <summary> + /// 鍗囩骇鐧惧垎姣斻��(褰揝tatus=1鏃舵湁鏁�) + /// </summary> + public int Percent = 999; + } + + [System.Serializable] + public class StartUpdateData + { + /// <summary> + ///鍗囩骇璁惧鍒楄〃 + /// </summary> + public List<OTADeviceList> DeviceList = new List<OTADeviceList>(); + } + + #endregion + + #region 瀹㈡埛绔悜鑺傜偣璁惧閫忎紶鏁版嵁. + /// <summary> + /// 瀹㈡埛绔悜鑺傜偣璁惧閫忎紶鏁版嵁 + /// <para>passData:閫忎紶鏁版嵁(杩欓噷鐨勫�兼槸鍦ㄥ悇涓澶囧璞′腑澶嶅埗濂界殑锛屼紶杩涙潵鍗冲彲锛�</para> + /// <para>閫忎紶鏁版嵁杩斿洖鍚庯紝鍙互璋冪敤鍚勪釜璁惧瀵硅薄涓幏鍙栫浉搴旂殑澶勭悊瀹屾垚鐨勬暟鎹�</para> + /// </summary> + public async System.Threading.Tasks.Task<ClientDataPassthroughResponseAllData> ClientDataPassthroughAsync(ZigBee.Device.ZbGateway gateway, string passData) + { + return await System.Threading.Tasks.Task.Run(async () => + { + ClientDataPassthroughResponseAllData d = null; ; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new ClientDataPassthroughResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + d = new ClientDataPassthroughResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "ZbDataPassthrough") + { + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + + if (clientDataPassthroughResponseData == null) + { + d = new ClientDataPassthroughResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new ClientDataPassthroughResponseAllData { clientDataPassthroughResponseData = clientDataPassthroughResponseData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + gateway.Send("ClientDataPassthrough", jObject.ToString()); + } + catch + { } + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new ClientDataPassthroughResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + gateway.Actions -= action; + System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 瀹㈡埛绔悜鑺傜偣璁惧閫忎紶鏁版嵁,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class ClientDataPassthroughResponseAllData : ErrorResponCommon + { + /// <summary> + /// 瀹㈡埛绔悜鑺傜偣璁惧閫忎紶鏁版嵁 + /// </summary> + public ClientDataPassthroughResponseData clientDataPassthroughResponseData; + } + /// <summary> + /// 瀹㈡埛绔悜鑺傜偣璁惧閫忎紶鏁版嵁 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public ClientDataPassthroughResponseData clientDataPassthroughResponseData = new ClientDataPassthroughResponseData(); + + [System.Serializable] + public class ClientDataPassthroughResponseData + { + /// <summary> + /// 閫忎紶鐨勬暟鎹紝鏈�澶�256涓瓧绗︼紝涔熷氨鏄�忎紶128涓瓧鑺� + /// </summary> + public string PassData; + } + + /// <summary> + /// 鍚敤鎴栧叧闂妭鐐硅澶囬�忎紶鏁版嵁涓婁紶鎺ュ彛,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class OnZbDataPassthroughResponseAllData : ErrorResponCommon + { + /// <summary> + /// 鍚敤鎴栧叧闂妭鐐硅澶囬�忎紶鏁版嵁涓婁紶鎺ュ彛 + /// </summary> + public OnZbDataPassthroughData onZbDataPassthroughData; + } + + [System.Serializable] + public class OnZbDataPassthroughData + { + /// <summary> + /// 宸茬粡杞崲鎴愬瓧绗︽牸寮忕殑16杩涘埗鐨勯�忎紶鏁版嵁 + /// </summary> + public string PassData; + } + #endregion + + #region 涓嬭浇浜戠鍥轰欢. + /// <summary> + /// 涓嬭浇浜戠璁惧鍥轰欢 + /// </summary> + /// <returns>The file async.</returns> + /// <param name="gateway">Gateway:褰撳墠缃戝叧</param> + /// <param name="distributedMark">Distributed mark:鍥轰欢鍞竴鏍囪瘑</param> + /// <param name="imageName">Image name:鍥轰欢鐗堟湰</param> + public async System.Threading.Tasks.Task<DownloadFileResponAllData> DownloadFileAsync(ZigBee.Device.ZbGateway gateway, string distributedMark, string imageName) + { + if (gateway == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + DownloadFileResponAllData d = null; ; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new DownloadFileResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new DownloadFileResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "DownloadFile_Respon") + { + var downloadFileResponData = Newtonsoft.Json.JsonConvert.DeserializeObject<DownloadFileResponData>(jobject["Data"].ToString()); + + if (downloadFileResponData == null) + { + d = new DownloadFileResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new DownloadFileResponAllData { downloadFileResponData = downloadFileResponData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + try + { + var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 6000 } }; + var data = new JObject { + { "DistributeMark", distributedMark}, + { "DownloadPath", "/tmp" }, + { "FileName", imageName } + }; + jObject.Add("Data", data); + gateway.Send("DownloadFile", jObject.ToString()); + } + catch + { + } + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < 30 * 1000) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > 30 * 1000) + { + d = new DownloadFileResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + + } + gateway.Actions -= action; + System.Console.WriteLine("DownloadFile_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + + } + + /// <summary> + /// 缃戝叧绯荤粺鍗囩骇,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class DownloadFileResponAllData : ErrorResponCommon + { + /// <summary> + /// 涓嬭浇浜戠鍥轰欢 + /// </summary> + public DownloadFileResponData downloadFileResponData; + } + + /// <summary> + /// 涓嬭浇浜戠鍥轰欢 + /// </summary> + [System.Serializable] + public class DownloadFileResponData + { + /// <summary> + /// 涓嬭浇鍥轰欢鐨勫敮涓�鏍囪瘑 + /// </summary> + public string DistributeMark; + /// <summary> + /// 0锛氭垚鍔燂紝寮�鍚惎鍔ㄤ笅杞姐�� + ///<para>1锛氬け璐ワ紝鏂囦欢鍒涘缓澶辫触銆�</para> + ///<para>2锛氬け璐ワ紝浜戠娌℃湁鎵惧埌璇ユ爣璇嗘枃浠躲��</para> + ///<para>3锛氱綉鍏虫湭鑳借繛鎺ヤ簯绔��</para> + ///<para>4锛氬叾浠栭敊璇��</para> + /// </summary> + public int Result; + } + + /// <summary> + /// 涓嬭浇杩涘害 + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public DownloadFileProgressResponData downloadFileProgressResponData; + /// <summary> + /// 涓嬭浇杩涘害 + /// </summary> + [System.Serializable] + public class DownloadFileProgressResponData + { + /// <summary> + /// 涓嬭浇鍥轰欢鐨勫敮涓�鏍囪瘑 + /// </summary> + public string DistributeMark; + /// <summary> + ///<para>0锛氫笅杞芥垚鍔�</para> + ///<para>1锛氭鍦ㄤ笅杞�</para> + ///<para>2锛氫笅杞藉け璐�</para> + /// </summary> + public int Status; + /// <summary> + ///鏂囦欢鎬诲ぇ灏� + /// </summary> + public int TotalSize; + /// <summary> + ///褰撳墠宸茬粡涓嬭浇鏂囦欢澶у皬 + /// </summary> + public int DownloadSize; + /// <summary> + ///涓嬭浇杩涘害锛岀櫨鍒嗘瘮銆傛瘡鐧惧垎涔嬪崄鍙嶉涓�娆� + /// </summary> + public int DownloadPercent; + } + + #endregion + + #region 缁堟璁惧鍗囩骇; + /// <summary> + /// 缁堟璁惧鍗囩骇 + /// </summary> + /// <returns>The NVA sync.</returns> + /// <param name="gateway">Gateway.</param> + /// <param name="oTAImageName">O TAI mage name:鍗囩骇闀滃儚鍚嶇О</param> + public async System.Threading.Tasks.Task<KillUpdateResponseAllData> KillUpdateAsync(ZigBee.Device.ZbGateway gateway, int deviceEpoint = 200) + { + return await System.Threading.Tasks.Task.Run(async () => + { + KillUpdateResponseAllData d = null; ; + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + d = new KillUpdateResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + d = new KillUpdateResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "OTA/KillUpdate_Respon") + { + var killUpdateData = Newtonsoft.Json.JsonConvert.DeserializeObject<KillUpdateData>(jobject["Data"].ToString()); + + if (killUpdateData == null) + { + d = new KillUpdateResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new KillUpdateResponseAllData { killUpdateData = killUpdateData }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + gateway.Actions += action; + System.Console.WriteLine("OTA/KillUpdate_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", deviceEpoint }, { "Cluster_ID", 25 }, { "Command", 5 } }; + gateway.Send("OTA/KillUpdate", jObject.ToString()); + } + catch + { } + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new KillUpdateResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + gateway.Actions -= action; + System.Console.WriteLine("OTA/KillUpdate_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return d; + }); + } + + /// <summary> + /// 缁堟璁惧鍗囩骇,缃戝叧鍙嶉鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class KillUpdateResponseAllData : ErrorResponCommon + { + /// <summary> + /// 缁堟璁惧鍗囩骇 + /// </summary> + public KillUpdateData killUpdateData; + } + + [System.Serializable] + public class KillUpdateData + { + /// <summary> + ///0锛氱粓姝㈡垚鍔� + ///<para>1锛氱粓姝㈠け璐ワ紝璁惧骞朵笉澶勪簬OTA鍗囩骇鐘舵�併��</para> + /// </summary> + public int Result; + } + #endregion + + #region 绉佹湁鍗忚缃戝叧鍜岃澶囩殑榛樿鍥炲 + + [System.Serializable] + public class ResponseAllData : ErrorResponCommon + { + /// <summary> + /// 鎸夐敭鎸囩ず鐏鑹蹭俊鎭� + /// </summary> + public ResponseData responseData; + } + + /// <summary> + /// 绉佹湁鍗忚缃戝叧鍜岃澶囩殑榛樿鍥炲 + /// </summary> + [System.Serializable] + public class ResponseData + { + /// <summary> + ///鍝嶅簲鎿嶄綔鐮侊紙0-ffff锛� + /// </summary> + public string command; + /// <summary> + /// 鐘舵�佸�� + /// <para>0--鎴愬姛 1--澶辫触 ff--鏃犳晥</para> + /// </summary> + public int status = -1; + } + #endregion + + #region 鈻� 璋冭瘯鎵撳嵃 + + /// <summary> + /// 璋冭瘯鏃舵墦寮�鎵撳嵃淇℃伅锛宼rue:鎵撳嵃锛宖alse:涓嶆墦鍗� + /// </summary> + /// <param name="msg">Message.</param> + /// <param name="flage">If set to <c>true</c> flage.</param> + public static void DebugPrintLog(string msg, bool flage = true) + { +#if DEBUG + if (flage == true) + { + if (msg.Contains("DeviceStatusReport") == false) + { + System.Console.WriteLine(msg + " " + System.DateTime.Now.ToLongTimeString() + " " + System.DateTime.Now.Millisecond); + } + } +#endif + } + + #endregion + } +} -- Gitblit v1.8.0