From c7df85937f73fb347ee0b19e9c052d2d00a6df6c Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期五, 18 九月 2020 13:58:19 +0800 Subject: [PATCH] 新版本 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 199 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 191 insertions(+), 8 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs index 48f59b9..b912a16 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -173,7 +173,7 @@ //璁惧鎺у埗鐘舵�佸弽棣� else if (reportTopic == "DeviceDefaultAck") { - //this.DeviceControlResponePush(JObject.Parse(msgData)); + this.DeviceControlResponePush(JObject.Parse(msgData)); } //鎾ら槻 else if (topic == gatewayId + "/Security/WithdrawMode_Respon") @@ -247,6 +247,51 @@ ((LightBase)locadevice).OnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; //宸茬粡鎺ユ敹鍒扮姸鎬� locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 鐢甸噺鎺ㄩ�� + //鐢甸噺鎺ㄩ�� + if (report.DeviceStatusReport.CluterID == 1) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //鐢甸噺 + if (attData.AttributeId == 33) + { + string receiptData = string.Empty; + //涓や釜涓や釜浣嶇疆鏇挎崲 + for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) + { + receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); + } + int batteryValue = Convert.ToInt32(receiptData, 16); + //浣庝簬20%,鍒欎唬琛ㄧ數閲忎綆 + locadevice.IsBatteryDown = batteryValue < 20; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + + #endregion + + #region 鈻� 铚傞福鍣ㄦ帹閫� + //铚傞福鍣ㄦ暟鎹� + else if (report.DeviceStatusReport.CluterID == 1282) + { + //mini澶滅伅 + if (Common.LocalDevice.Current.IsMiniLight(locadevice) == true) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + if (attData.AttributeId == 0) + { + //杩欎釜鏄姤璀︽寔缁椂闂�(澶т簬2绉掓椂,鏍囪涓鸿繕鍦ㄥ搷鐫�) + ((ColorTemperatureLight)locadevice).IsBuzzerRing = attData.AttriButeData > 2 ? true : false; + } + } } } #endregion @@ -420,6 +465,12 @@ } //宸茬粡鎺ユ敹鍒扮姸鎬� locadevice.HadReadDeviceStatu = true; + + //if (locadevice is LightBase) + //{ + // //褰撴帴鏀跺埌浜害鍊兼椂,榛樿鎵撳紑 + // ((LightBase)locadevice).OnOffStatus = 1; + //} } } #endregion @@ -434,7 +485,8 @@ if (locadevice.Type == DeviceType.ColorTemperatureLight) { //姝ゅ睘鎬ц〃鏄庡綋鍓嶈壊娓� - ((ColorTemperatureLight)locadevice).ColorTemperature = report.DeviceStatusReport.AttriBute[0].AttriButeData; + int value = report.DeviceStatusReport.AttriBute[0].AttriButeData != 0 ? 1000000 / report.DeviceStatusReport.AttriBute[0].AttriButeData : 0; + ((ColorTemperatureLight)locadevice).ColorTemperature = value; } //宸茬粡鎺ユ敹鍒扮姸鎬� locadevice.HadReadDeviceStatu = true; @@ -490,7 +542,7 @@ //娓╁害浼犳劅鍣� if (locadevice is TemperatureSensor) { - ((TemperatureSensor)locadevice).Temperatrue = temperatrue; + ((TemperatureSensor)locadevice).currentTemperature = temperatrue; } //PM2.5浼犳劅鍣� else if (locadevice is PMSensor) @@ -499,6 +551,8 @@ } //宸茬粡鎺ユ敹鍒扮姸鎬� locadevice.HadReadDeviceStatu = true; + //娓╁害鍊奸渶瑕佷繚瀛� + locadevice.ReSave(); } } } @@ -539,21 +593,23 @@ //婀垮害浼犳劅鍣� if (locadevice is TemperatureSensor) { - ((TemperatureSensor)locadevice).Humidity = humidity; + ((TemperatureSensor)locadevice).currentHumidity = humidity; } //鏂伴鐨勬箍搴︿紶鎰熷櫒 else if (locadevice is HumiditySensor) { - ((HumiditySensor)locadevice).Humidity = humidity; + ((HumiditySensor)locadevice).currentHumidity = humidity; } //PM2.5浼犳劅鍣� else if (locadevice is PMSensor) { ((PMSensor)locadevice).currentHumidity = (int)humidity; } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + //婀垮害鍊奸渶瑕佷繚瀛� + locadevice.ReSave(); } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; } } #endregion @@ -579,8 +635,135 @@ } #endregion - } + #region 鈻� 璁惧鍩虹淇℃伅 + + else if (report.DeviceStatusReport.CluterID == 0) + { + var listLocalDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr, false); + //灞炴�ч兘鏄竴鏍风殑 + foreach (var myDevice in listLocalDevice) + { + //灞炴�ф槸鍚︽敼鍙� + bool attriButeChanged = false; + foreach (var data in report.DeviceStatusReport.AttriBute) + { + //鐢熶骇鍟嗗悕瀛� + if (data.AttributeId == 4 && data.AttriButeDataHex.Length > 2) + { + if (data.AttriButeDataHex.Length > 2) + { + var value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + if (myDevice.ManufacturerName != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.ManufacturerName = value; + } + } + //鍨嬪彿鐮�(涔熷彨妯″潡ID) + if (data.AttributeId == 5) + { + if (data.AttriButeDataHex.Length > 2) + { + var value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + if (myDevice.ModelIdentifier != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.ModelIdentifier = value; + } + } + //鐢熶骇鏃ユ湡 + if (data.AttributeId == 6) + { + if (data.AttriButeDataHex.Length > 2) + { + var value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + if (myDevice.ProductionDate != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.ProductionDate = value; + } + } + //鐢垫簮 + if (data.AttributeId == 7) + { + myDevice.PowerSource = data.AttriButeData; + } + //搴忓垪鍙� + if (data.AttributeId == 13) + { + if (data.AttriButeDataHex.Length > 2) + { + string value; + if (Common.LocalDevice.Current.IsHdlDevice(myDevice) == false) + { + //绗笁鏂硅澶� + value = data.AttriButeDataHex.Substring(2); + } + else + { + //娌充笢璁惧 + value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + } + if (myDevice.SerialNumber != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.SerialNumber = value; + } + } + } + //濡傛灉灞炴�у彉鏇翠簡 + if (attriButeChanged == true && myDevice.IsCustomizeImage == false) + { + //UI閲嶆柊鐢熸垚 + myDevice.IconPath = string.Empty; + myDevice.ReSave(); + } + } + } + + #endregion + } + else if (deviceEpoint == 200) + { + var localOta = Common.LocalDevice.Current.GetOTADevice(deviceAddr); + if (localOta != null) + { + #region 鈻� 鍥轰欢鐗堟湰 + //鍥轰欢鐗堟湰 + if (report.DeviceStatusReport.CluterID == (int)Cluster_ID.Ota) + { + foreach (var data in report.DeviceStatusReport.AttriBute) + { + //闀滃儚鐗堟湰 + if (data.AttributeId == (int)AttriButeId.ImgVersion) + { + localOta.ImgVersion = data.AttriButeData; + } + //纭欢鐗堟湰 + if (data.AttributeId == (int)AttriButeId.mgHWversion) + { + localOta.HwVersion = data.AttriButeData; + } + //闀滃儚ID + if (data.AttributeId == (int)AttriButeId.ImgTypeId) + { + localOta.ImgTypeId = data.AttriButeData; + } + } + localOta.ReSave(); + } + #endregion + } + } this.DeviceReportPush(report, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); } -- Gitblit v1.8.0