From 43b0d5870d528f23ecd6aeceb6cfd4325188b46f Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期四, 01 七月 2021 15:50:43 +0800 Subject: [PATCH] Revert "1" --- HDL_ON/DAL/DriverLayer/Control.cs | 934 ++++++++++++++++++++++++++++++++------------------------- 1 files changed, 524 insertions(+), 410 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index 3ef6d42..8f82384 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -1,4 +1,4 @@ -using System; +锘縰sing System; using System.Collections.Generic; using System.Text; using HDL_ON.Entity; @@ -50,44 +50,41 @@ return _msg_id++; } } - /// <summary> - /// 鑾峰彇13浣嶆椂闂存埑 - /// </summary> - /// <returns></returns> - public string Get_TimeStamp() - { - long t = DateTime.Now.Ticks / 10000; - return t.ToString(); - } + ///// <summary> + ///// 鑾峰彇13浣嶆椂闂存埑 + ///// </summary> + ///// <returns></returns> + //public string Get_TimeStamp() + //{ + // long t = DateTime.Now.Ticks / 10000; + // return t.ToString(); + //} /// <summary> /// 鏄惁鎼滅储鏈湴缃戝叧鎴愬姛 /// </summary> public bool IsSearchLocalGatewaySuccessful = false; + bool _GatewayOnline_Local = false; /// <summary> - /// + /// 缃戝叧鍦ㄧ嚎-灞�鍩熺綉 /// </summary> - bool _gatewayOnline = false; - /// <summary> - /// 缃戝叧鏄惁鍦ㄧ嚎 - /// </summary> - public bool GatewayOnline + public bool GatewayOnline_Local { get { - return _gatewayOnline; + return _GatewayOnline_Local; } set { - if (_gatewayOnline != value) + if (_GatewayOnline_Local != value) { - _gatewayOnline = value; - //淇敼涓婚〉杩炴帴鐘舵�� - UI.HomePage.LoadEvent_CheckLinkStatus(); + _GatewayOnline_Local = value; if (value) { - MainPage.Log($"缃戝叧鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�"); + //淇敼涓婚〉杩炴帴鐘舵�� + HomePage.LoadEvent_CheckLinkStatus(); + MainPage.Log($"缃戝叧灞�鍩熺綉鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�"); new System.Threading.Thread(() => { System.Threading.Thread.Sleep(1000); @@ -95,31 +92,79 @@ }) { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); } + else + { + //淇敼涓婚〉杩炴帴鐘舵�� + HomePage.LoadEvent_CheckLinkStatus(); + } } } } + bool _GatewayOnline_Cloud = false; + /// <summary> + /// 缃戝叧鍦ㄧ嚎-浜戠 + /// </summary> + public bool GatewayOnline_Cloud + { + get + { + return _GatewayOnline_Cloud; + } + set + { + if (_GatewayOnline_Cloud != value) + { + _GatewayOnline_Cloud = value; + if(GatewayOnline_Local) + { + return; + } + if (value) + { + if (DB_ResidenceData.Instance.HomeGateway == null) + { + return; + } + if (!DB_ResidenceData.Instance.HomeGateway.gatewayStatus)//杩滅▼鎯呭喌涓嬶紝缃戝叧鏈摼鎺ユ湇鍔″櫒涓嶈兘淇敼涓婚〉缃戝叧鐘舵�� + { + new System.Threading.Thread(() => + { + System.Threading.Thread.Sleep(3000); + var pm = new DAL.Server.HttpServerRequest(); + pm.GetGatewayInfo(); + }) + { IsBackground = true }.Start(); + return; + } + //淇敼涓婚〉杩炴帴鐘舵�� + HomePage.LoadEvent_CheckLinkStatus(); + MainPage.Log($"缃戝叧浜戠鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�"); + new System.Threading.Thread(() => + { + System.Threading.Thread.Sleep(1000); + FunctionList.List.ReadAllFunctionStatus(); + }) + { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); + } + else + { + //淇敼涓婚〉杩炴帴鐘舵�� + HomePage.LoadEvent_CheckLinkStatus(); + } + } + } + } + + /// <summary> /// 缃戝叧閫氳ID /// </summary> public string GatewayId = ""; - bool _isRemote = false; /// <summary> /// 鏄惁涓鸿繙绋嬭繛鎺� /// </summary> - public bool IsRemote - { - get - { - return _isRemote; - } - set - { - _isRemote = value; - //淇敼涓婚〉杩炴帴鐘舵�� - HomePage.LoadEvent_CheckLinkStatus(); - } - } + //public bool IsRemote = false; /// <summary> /// 閫氳鍦板潃IP /// </summary> @@ -183,19 +228,23 @@ /// </summary> public void SearchLoaclGateway() { - MainPage.Log($"鎼滅储鏈湴缃戝叧鍒楄〃锛岀綉鍏崇被鍨�:{DB_ResidenceData.Instance.GatewayType}"); + //2021-01-15 : 浣忓畢娌℃湁缁戝畾缃戝叧鐨勬椂鍊欎笉鐢ㄦ悳绱紝骞朵笖涓嶈兘閾炬帴mqtt + if(DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId)) + { + return; + } + Ins.GatewayOnline_Local = false; + var ggg = DB_ResidenceData.Instance.GatewayType == 0 ? "涓�绔彛" : "A缃戝叧"; + var ggg1 = MainPage.InternetStatus == 1 ? "4G" : "wifi"; + MainPage.Log($"鎼滅储缃戝叧鍒楄〃锛岀綉鍏崇被鍨�:{ggg};缃戠粶绫诲瀷:{ggg1}"); if (MainPage.InternetStatus == 0) { - Ins.GatewayOnline = false; + Ins.GatewayOnline_Cloud = false; return; } else if (MainPage.InternetStatus == 1) { - if (!Ins.IsRemote) - { - Ins.IsRemote = true; - DAL.Mqtt.MqttClient.InitState(); - } + DAL.Mqtt.MqttClient.InitState(); } else if (MainPage.InternetStatus == 2) { @@ -208,7 +257,10 @@ for (int i = 0; i < 5; i++) { if (IsSearchLocalGatewaySuccessful) + { + Ins.GatewayOnline_Local = true; break; + } if (DB_ResidenceData.Instance.GatewayType == 0) { new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) }); @@ -220,15 +272,7 @@ System.Threading.Thread.Sleep(500); } - if (!IsSearchLocalGatewaySuccessful) - { - //鏈湴鎼滅储涓嶅埌缃戝叧 - if (!Ins.IsRemote) - { - Ins.IsRemote = true; - DAL.Mqtt.MqttClient.InitState(); - } - } + DAL.Mqtt.MqttClient.InitState(); }) { IsBackground = true }.Start(); } @@ -239,9 +283,37 @@ /// </summary> public void ControlScene(Scene scene) { - if (Ins.IsRemote || DB_ResidenceData.Instance.GatewayType == 1) + //浣撻獙妯″紡 + if(MainPage.NoLoginMode) { - ControlAProtocolScene(scene); + foreach(var sceneFunction in scene.functions) + { + var revString = ""; + var upDataObj = new AlinkFunctionStatusObj(); + upDataObj.id = "999"; + upDataObj.objects = new List<AlinkStatusData>(); + var asd = new AlinkStatusData() { deviceId = sceneFunction.localFunction.deviceId, sid = sceneFunction.sid }; + var status1 = new List<AttributesStatus>(); + foreach (var dic in sceneFunction.status) + { + status1.Add(new AttributesStatus() { key = dic.key, value = dic.value }); + } + asd.status = status1; + upDataObj.objects.Add(asd); + revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj); + UpdataFunctionStatus(revString, null, true); + } + return; + } + + //杩滅▼鎴栬�呮帶鍒秎ink缃戝叧鍦烘櫙 + if (!Ins.GatewayOnline_Local || DB_ResidenceData.Instance.GatewayType == 1) + { + new System.Threading.Thread(() => + { + ControlAProtocolScene(scene); + }) + { IsBackground = true }.Start(); } else { @@ -259,10 +331,11 @@ /// </summary> /// <param name="commandString"></param> /// <param name="function"></param> + /// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param> /// <returns></returns> - public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary) + public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false) { - function.usageCount++; + function.controlCounter++; function.refreshTime = DateTime.Now; //濡傛灉鏄帶鍒惰皟鍏夌殑寮�鏃讹紝浜害鍊间笉鑳戒负0 @@ -277,11 +350,52 @@ commandDictionary[FunctionAttributeKey.Brightness] = "100"; } } + if (commandDictionary[FunctionAttributeKey.OnOff] == "off") + { + if (commandDictionary[FunctionAttributeKey.Brightness] != "0") + { + commandDictionary[FunctionAttributeKey.Brightness] = "0"; + } + } } } - //杩滅▼閫氳 - if (Ins.IsRemote) + ///dome鎺у埗 + if (MainPage.NoLoginMode) + { + var revString = ""; + var upDataObj = new AlinkFunctionStatusObj(); + upDataObj.id = "999"; + upDataObj.objects = new List<AlinkStatusData>(); + var asd = new AlinkStatusData() { deviceId = function.deviceId, sid = function.sid }; + var status1 = new List<AttributesStatus>(); + foreach (var dic in commandDictionary) + { + status1.Add(new AttributesStatus() { key = dic.Key, value = dic.Value }); + } + asd.status = status1; + upDataObj.objects.Add(asd); + revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj); + UpdataFunctionStatus(revString, null, true); + return; + } + + + //MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}"); + + ///绗笁鏂规秱楦﹁澶囩粺涓�浣跨敤杩滅▼鎺у埗 + switch (function.spk) + { + case SPK.ElectricTuyaAirCleaner: + case SPK.ElectricTuyaFan: + case SPK.ElectricTuyaWaterValve: + case SPK.ElectricTuyaWeepRobot: + useRemote = true; + break; + } + + //杩滅▼閫氳 --娑傞甫璁惧蹇呴』闇�瑕佽繙绋� + if (useRemote == true) { DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋� @@ -289,32 +403,102 @@ var actionObjs = new List<ApiAlinkControlActionObj>(); actionObjs.Add(apiControlData); var pack = httpServer.ControlDevice(actionObjs); - //MainPage.Log($"{pack.Code}:{pack.Data}"); } - //鏈湴閫氳 else { - //Bus鎺у埗 - if (DB_ResidenceData.Instance.GatewayType == 0) + ////杩滅▼閫氳 + //if (Ins.GatewayOnline_Local == false && Ins.GatewayOnline_Cloud == true) + //{ + // DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); + // //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋� + // var apiControlData = function.GetApiControlData(commandDictionary); + // var actionObjs = new List<ApiAlinkControlActionObj>(); + // actionObjs.Add(apiControlData); + // var pack = httpServer.ControlDevice(actionObjs); + //} + //鏈湴閫氳 + if (Ins.GatewayOnline_Local) { - try + //Bus鎺у埗 + if (DB_ResidenceData.Instance.GatewayType == 0) { - new Control_Udp().WriteBusData(function, commandDictionary); + try + { + new Control_Udp().WriteBusData(function, commandDictionary); + } + catch (Exception ex) + { + MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); + } } - catch (Exception ex) + //ALink鎺у埗 + else { - MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); + var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary); + var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson); + new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id); + MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}"); } } - //ALink鎺у埗 + //杩滅▼閫氳 else { - var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary); - var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj); - var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson); - new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id); + DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); + //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋� + var apiControlData = function.GetApiControlData(commandDictionary); + var actionObjs = new List<ApiAlinkControlActionObj>(); + actionObjs.Add(apiControlData); + var pack = httpServer.ControlDevice(actionObjs); + } + + } + } + /// <summary> + /// 鍏ㄥ紑鍏ㄥ叧鍔熻兘 + /// </summary> + public void SwtichFunctions(bool open,List<Function> functions) + { + //dome妯″紡鎺у埗 + if(MainPage.NoLoginMode) + { + new System.Threading.Thread(() => + { + foreach (var temp in functions) + { + Dictionary<string, string> d1 = new Dictionary<string, string>(); + d1.Add(FunctionAttributeKey.OnOff, open ? "on" : "off"); + SendWriteCommand(temp, d1); + System.Threading.Thread.Sleep(100); + } + }) + { IsBackground = true }.Start(); + return; + } + + var count = 0; + var logString = open ? "鎵撳紑\r\n" : "鍏抽棴\r\n"; + List<ApiAlinkControlActionObj> actionObjs = new List<ApiAlinkControlActionObj>(); + Dictionary<string, string> d = new Dictionary<string, string>(); + d.Add(FunctionAttributeKey.OnOff, open ? "on" : "off"); + var pm = new DAL.Server.HttpServerRequest(); + foreach (var temp in functions) + { + logString += temp.spk + ":" + temp.sid + "\r\n"; + var apiControlData = temp.GetApiControlData(d); + actionObjs.Add(apiControlData); + count++; + if (count > 9) + { + var result = pm.ControlDevice(actionObjs); + actionObjs = new List<ApiAlinkControlActionObj>(); + count = 0; + MainPage.Log(logString); + logString = ""; } } + var pack = pm.ControlDevice(actionObjs); + MainPage.Log(logString); } public void SendApiReadCommand(List<string> functionIds) @@ -322,67 +506,90 @@ var pm = new DAL.Server.HttpServerRequest(); var pack = pm.RefreshDeviceStatus(functionIds); } + /// <summary> + /// 璇诲彇鍔熻兘璇︾粏鏁版嵁 + /// </summary> + /// <param name="functionIds"></param> + public void ReadFunctionsInfo(List<string> functionIds) + { + var pm = new DAL.Server.HttpServerRequest(); + var pack = pm.GetDeviceInfoList(functionIds); + if(pack!= null&& pack.Data!=null) + { + //寰呮祴璇�2021-03-04 + var ddd = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString()); + if(ddd!= null) + { + foreach(var function in ddd) + { + var temp = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId); + if(temp!= null) + { + if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(temp.spk)) + { + Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(temp.sid, function.status); + } + } + } + } + } + } /// <summary> /// 鍙戦�佽鍙栧懡浠� /// 鑷姩鍒ゆ柇鏄惁涓篈鍗忚璁惧 /// </summary> - public void SendReadCommand(Function function) + public void SendReadCommand(Function function ,bool forceRemote = false) { function.refreshTime = DateTime.Now; - if (Ins.IsRemote) + if (forceRemote) { var pm = new DAL.Server.HttpServerRequest(); var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId }); } else { - if (DB_ResidenceData.Instance.GatewayType == 0) + if (Ins.GatewayOnline_Local) { - try + + if (DB_ResidenceData.Instance.GatewayType == 0) { - new Control_Udp().ReadBusData(function); + try + { + new Control_Udp().ReadBusData(function); + } + catch (Exception ex) + { + MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); + } } - catch (Exception ex) + else { - MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); + var readKey = new Dictionary<string, string>(); + readKey.Add("sid", function.sid); + + var readDataObj = new AlinkReadFunctionStatusObj() + { + id = Ins.msg_id.ToString(), + objects = new List<Dictionary<string, string>>() + { + readKey + }, + time_stamp = Utlis.GetTimestamp() + }; + var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); + MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}"); + new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id); } } else { - var readKey = new Dictionary<string, string>(); - readKey.Add("sid", function.sid); - - var readDataObj = new AlinkReadFunctionStatusObj() - { - id = Ins.msg_id.ToString(), - objects = new List<Dictionary<string, string>>() - { - readKey - }, - time_stamp = Utlis.GetTimestamp() - }; - var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); - var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); - new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id); + var pm = new DAL.Server.HttpServerRequest(); + var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId }); } } } - ///// <summary> - ///// 鍙戦�丄鍗忚璇诲彇鍛戒护 - ///// </summary> - //public void SendReadCommand(List<Dictionary<string, string>> keyValuePairs) - //{ - // var readDataObj = new GatewayAlinkReadObj() - // { - // id = Ins.msg_id.ToString(), - // objects = keyValuePairs, - // time_stamp = Utlis.GetTimestamp() - // }; - // var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); - // var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); - // Ins.myUdp.SendLocalHdlLinkData(sendBytes); - //} /// <summary> /// a鍗忚鎺у埗鍦烘櫙 @@ -390,10 +597,10 @@ /// <param name="scene"></param> static void ControlAProtocolScene(Scene scene) { - if (Ins.IsRemote) + if (!Ins.GatewayOnline_Local)//缃戝叧鏈湴涓嶅湪绾� { - var pm = new HDL_ON.DAL.Server.HttpServerRequest(); - pm.ExecuteScene(scene.userSceneId); + var pm = new DAL.Server.HttpServerRequest(); + var result = pm.ExecuteScene(scene.userSceneId); } else { @@ -414,7 +621,7 @@ } } /// <summary> - /// 杞崲閫氳鏁版嵁 + /// 杞崲鍙戦�佹暟鎹� /// </summary> public byte[] ConvertSendBodyData(string topic, string bodyDataString) { @@ -464,6 +671,10 @@ break; } } + + MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}"); + + //楠岃瘉鏈夋晥鏁版嵁闀垮害 //if (res[1].Length != receiveObj.Length) //{ @@ -472,19 +683,20 @@ //} receiveObj.BodyDataString = res[1]; - var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]); - if (bodyJObj == null) - { - return receiveObj; - } if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply) { - var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString()); - if (device.device_mac == DB_ResidenceData.Instance.residenceGatewayMAC) + var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]); + if (bodyJObj == null) { - //鏈湴鎼滅储缃戝叧鎴愬姛 - Control.Ins.IsSearchLocalGatewaySuccessful = true; - Ins.GatewayOnline = true; + return receiveObj; + } + + var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString()); + if (device.device_mac.ToUpper() == DB_ResidenceData.Instance.HomeGateway.mac.ToUpper()) + { + MainPage.Log("鏈湴鎼滅储缃戝叧鎴愬姛"); + Ins.IsSearchLocalGatewaySuccessful = true; + Ins.GatewayOnline_Local = true; if (!string.IsNullOrEmpty(device.gatewayId)) { Ins.GatewayId = device.gatewayId; @@ -493,15 +705,20 @@ { Ins.GatewayId = device.device_mac; } - reportIp = "239.0.168.188";// device.ip_address; - Ins.IsRemote = false; + reportIp = "239.0.168.188";// device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧 } } else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" || + receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" || receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus) { //TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮� UpdataFunctionStatus(receiveObj.BodyDataString, null); + } + else + { + //涓�浜涚壒娈婄殑涓婚澶勭悊(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�) + Stan.HdlCloudReceiveLogic.Current.CloudOverallMsgReceiveEx(receiveObj.Topic, receiveObj.BodyDataString); } } return receiveObj; @@ -512,9 +729,8 @@ /// A鍗忚鏁版嵁 /// </summary> /// <param name="updateBytes"></param> - public void UpdataFunctionStatus(string revString, byte[] usefulBytes) + public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false) { - MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); if (temp != null) { @@ -524,294 +740,192 @@ { try { - //bool hadChange = false;//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� - var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); - if (localFunction != null) + + if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞� { - //var updateInfoString = $"鏇存柊璁惧:{localFunction.name}"; - //foreach (var attr in updateTemp.status) - //{ - // updateInfoString += $" key:{attr.key};value:{attr.value}"; - //} - //MainPage.Log(updateInfoString); - - - //鏇存柊鐣岄潰鐘舵�� - Function localObj = null; - switch (localFunction.spk) + if (FunctionList.List.OtherBrandFunction.Count != 0) { - case SPK.LightSwitch: - var localSwitch = FunctionList.List.lights.Find((obj) => obj.sid == updateTemp.sid); - if (localSwitch != null) - { - localObj = localSwitch; - foreach (var attr in updateTemp.status) - { - var localAttr = localSwitch.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - MainPage.Log($"{localSwitch.trait_on_off.curValue}: "); - RelayPage.UpdataState(localSwitch); - } - break; - case SPK.LightDimming: - var dimming = FunctionList.List.lights.Find((obj) => obj.sid == updateTemp.sid); - if (dimming != null) - { - localObj = dimming; - foreach (var attr in updateTemp.status) - { - var localAttr = dimming.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - dimming.lastState = Language.StringByID(StringId.Brightness) + " : " + dimming.brightness + "%"; - DimmerPage.UpdataStates(dimming); - } - break; - case SPK.ElectricFan: - var fan = FunctionList.List.fans.Find((obj) => obj.sid == updateTemp.sid); - if (fan != null) - { - localObj = fan; - foreach (var attr in updateTemp.status) - { - var localAttr = fan.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - fan.lastState = Language.StringByID(StringId.Level) + " : " + fan.openLevel; - FanPage.UpdataState(fan); - } - break; - case SPK.LightRGB: - var rgb = FunctionList.List.lights.Find((obj) => obj.sid == updateTemp.sid); - if (rgb != null) - { - localObj = rgb; - foreach (var attr in updateTemp.status) - { - var localAttr = rgb.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - rgb.lastState = Language.StringByID(StringId.Brightness) + " : " + rgb.brightness + "%"; - RGBPage.UpdataStates(rgb); - } - break; - case SPK.LightRGBW: - break; - case SPK.LightCCT: - var lightCCT = FunctionList.List.lights.Find((obj) => obj.sid == updateTemp.sid); - if (lightCCT != null) - { - localObj = lightCCT; - foreach (var attr in updateTemp.status) - { - var localAttr = lightCCT.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - lightCCT.lastState = Language.StringByID(StringId.Brightness) + " : " + lightCCT.brightness + "%"; - DimmerPage.UpdataStates(lightCCT); - } - break; - case SPK.CurtainSwitch: - var curtain = FunctionList.List.curtains.Find((obj) => obj.sid == updateTemp.sid); - if (curtain != null) - { - localObj = curtain; - foreach (var attr in updateTemp.status) - { - var localAttr = curtain.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - curtain.lastState = curtain.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close); - CurtainModulePage.UpdataState(curtain); - } - break; - case SPK.CurtainTrietex: - var trietex = FunctionList.List.curtains.Find((obj) => obj.sid == updateTemp.sid); - if (trietex != null) - { - localObj = trietex; - foreach (var attr in updateTemp.status) - { - var localAttr = trietex.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - trietex.lastState = Language.StringByID(StringId.Open) + trietex.percent + "%"; - MotorCurtainPage.UpdataState(trietex); - } - break; - case SPK.CurtainRoller: - var roller = FunctionList.List.curtains.Find((obj) => obj.sid == updateTemp.sid); - if (roller != null) - { - localObj = roller; - foreach (var attr in updateTemp.status) - { - var localAttr = roller.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - roller.lastState = Language.StringByID(StringId.Open) + roller.percent + "%"; - RollingShutterPage.UpdataState(roller); - } - break; - case SPK.CurtainShades: - break; - case SPK.AcStandard: - var ac = FunctionList.List.aCs.Find((obj) => obj.sid == updateTemp.sid); - if (ac != null) - { - localObj = ac; - foreach (var attr in updateTemp.status) - { - var localAttr = ac.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - ac.lastState = ""; - switch (ac.trait_mode.curValue.ToString()) - { - case "cool": - ac.lastState = Language.StringByID(StringId.Cool); - break; - case "heat": - ac.lastState = Language.StringByID(StringId.Heat); - break; - case "dry": - ac.lastState = Language.StringByID(StringId.Dry); - break; - case "auto": - ac.lastState = Language.StringByID(StringId.Auto); - break; - case "fan": - ac.lastState = Language.StringByID(StringId.AirSupply); - break; - } - switch (ac.trait_fan.curValue.ToString()) - { - case "high": - ac.lastState += " " + Language.StringByID(StringId.HighWindSpeed); - break; - case "medium": - ac.lastState += " " + Language.StringByID(StringId.MiddleWindSpeed); - break; - case "low": - ac.lastState += " " + Language.StringByID(StringId.LowWindSpeed); - break; - case "auto": - ac.lastState += " " + Language.StringByID(StringId.Auto); - break; - } - ac.lastState += " " + ac.trait_temp.curValue + ac.tempUnitString; - ACPage.UpdataStates(ac); - } - break; - case SPK.FloorHeatStandard: - var fh = FunctionList.List.floorHeatings.Find((obj) => obj.sid == updateTemp.sid); - if (fh != null) - { - localObj = fh; - foreach (var attr in updateTemp.status) - { - var localAttr = fh.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - switch (fh.trait_mode.curValue) - { - case "normal": - fh.lastState = Language.StringByID(StringId.Normal); - break; - case "day": - fh.lastState = Language.StringByID(StringId.Day); - break; - case "night": - fh.lastState = Language.StringByID(StringId.Night); - break; - case "timer": - fh.lastState = Language.StringByID(StringId.Auto); - break; - case "away": - fh.lastState = Language.StringByID(StringId.Away); - break; - } - fh.lastState += " " + fh.trait_temp.curValue + fh.tempUnitString; - FloorHeatingPage.UpdataStates(fh); - } - break; - case SPK.SensorPm25: - case SPK.SensorCO2: - case SPK.SensorTVOC: - case SPK.SensorTemperature: - case SPK.SensorHumidity: - var sensor = FunctionList.List.sensorsEnvironmentalScience.Find((obj) => obj.sid == updateTemp.sid); - if (sensor != null) - { - localObj = sensor; - foreach (var attr in updateTemp.status) - { - var localAttr = sensor.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - EnvironmentalSciencePage.LoadEvent_UpdataStatus(sensor); - } - break; - case SPK.ElectricSocket: - var es = FunctionList.List.switchSockets.Find((obj) => obj.sid == updateTemp.sid); - if (es != null) - { - localObj = es; - foreach (var attr in updateTemp.status) - { - var localAttr = es.attributes.Find((obj) => obj.key == attr.key); - if (localAttr != null) - { - localAttr.curValue = attr.value; - } - } - SocketPage.UpdataState(es); - } - break; - case SPK.ElectricTV: - break; - default: - break; + if (FunctionList.List.OtherBrandFunction.Find((obj) => obj.sid == updateTemp.sid) == null) + { + //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�..."); + return; + } } - HomePage.UpdataFunctionStates(localObj); - RoomPage.UpdataStates(localObj); - FunctionPage.UpdataStates(localObj); - ClassificationPage.UpdataInfo(localObj); } + + + + + var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); + if (localFunction == null) + { + continue; + } + if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞� + { + if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk)) + { + //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�........"); + return; + } + } + MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); + foreach (var attr in updateTemp.status) + { + localFunction.time_stamp = temp.time_stamp; + localFunction.SetAttrState(attr.key, attr.value); + } + + //鏇存柊鐣岄潰鐘舵�� + Function localObj = null; + switch (localFunction.spk) + { + case SPK.ElectricEnergy: + EnergyMainPage.UpdataStatus(localFunction); + break; + case SPK.LightSwitch: + RelayPage.UpdataState(localFunction); + break; + case SPK.LightDimming: + localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%"; + DimmerPage.UpdataStates(localFunction); + break; + case SPK.ElectricFan: + localFunction.lastState = Language.StringByID(StringId.Level) + " : " + + localFunction.GetAttrState(FunctionAttributeKey.OpenLevel); + FanPage.UpdataState(localFunction); + break; + case SPK.LightRGB: + localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%"; + RGBPage.UpdataStates(localFunction); + break; + case SPK.LightRGBW: + break; + case SPK.LightCCT: + localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%"; + ColorTureLampPage.UpdataStatus(localFunction); + break; + case SPK.CurtainSwitch: + localFunction.lastState = localFunction.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close); + CurtainModulePage.UpdataState(localFunction); + break; + case SPK.CurtainTrietex: + localFunction.lastState = Language.StringByID(StringId.Open) + localFunction.GetAttrState(FunctionAttributeKey.Percent) + "%"; + MotorCurtainPage.UpdataState(localFunction); + break; + case SPK.CurtainRoller: + localFunction.lastState = Language.StringByID(StringId.Open) + localFunction.GetAttrState(FunctionAttributeKey.Percent) + "%"; + RollingShutterPage.UpdataState(localFunction); + break; + case SPK.CurtainShades: + break; + case SPK.AcStandard: + Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status); + if (localFunction != null) + { + localFunction.lastState = ""; + switch (localFunction.GetAttrState(FunctionAttributeKey.Mode)) + { + case "cool": + localFunction.lastState = Language.StringByID(StringId.Cool); + break; + case "heat": + localFunction.lastState = Language.StringByID(StringId.Heat); + break; + case "dry": + localFunction.lastState = Language.StringByID(StringId.Dry); + break; + case "auto": + localFunction.lastState = Language.StringByID(StringId.Auto); + break; + case "fan": + localFunction.lastState = Language.StringByID(StringId.AirSupply); + break; + } + switch (localFunction.GetAttrState(FunctionAttributeKey.FanSpeed)) + { + case "high": + localFunction.lastState += " " + Language.StringByID(StringId.HighWindSpeed); + break; + case "medium": + localFunction.lastState += " " + Language.StringByID(StringId.MiddleWindSpeed); + break; + case "low": + localFunction.lastState += " " + Language.StringByID(StringId.LowWindSpeed); + break; + case "auto": + localFunction.lastState += " " + Language.StringByID(StringId.Auto); + break; + } + localFunction.lastState += " " + localFunction.GetAttrState(FunctionAttributeKey.SetTemp) + new AC().GetTempUnitString(localFunction); + ACPage.UpdataStates(localFunction); + } + break; + case SPK.FloorHeatStandard: + switch (localFunction.GetAttrState(FunctionAttributeKey.Mode)) + { + case "normal": + localFunction.lastState = Language.StringByID(StringId.Normal); + break; + case "day": + localFunction.lastState = Language.StringByID(StringId.Day); + break; + case "night": + localFunction.lastState = Language.StringByID(StringId.Night); + break; + case "timer": + localFunction.lastState = Language.StringByID(StringId.Auto); + break; + case "away": + localFunction.lastState = Language.StringByID(StringId.Away); + break; + } + localFunction.lastState += " " + localFunction.GetAttrState(FunctionAttributeKey.SetTemp) + new FloorHeating().GetTempUnitString(localFunction); + FloorHeatingPage.UpdataStates(localFunction); + break; + case SPK.SensorPm25: + case SPK.SensorCO2: + case SPK.SensorTVOC: + case SPK.SensorTemperature: + case SPK.SensorHumidity: + if(localFunction.spk == SPK.SensorTemperature) + { + HomePage.LoadEvent_RefreshEnvirIndoorTemp(); + } + else if (localFunction.spk == SPK.SensorHumidity) + { + HomePage.LoadEvent_RefreshEnvirIndoorHumi(); + } + EnvironmentalPage.LoadEvent_UpdataStatus(localFunction); + break; + case SPK.ElectricSocket: + SocketPage.UpdataState(localFunction); + break; + case SPK.ElectricTV: + break; + case SPK.ElectricTuyaAirCleaner: + case SPK.ElectricTuyaFan: + case SPK.ElectricTuyaWeepRobot: + case SPK.ElectricTuyaWaterValve: + case SPK.SensorPir: + case SPK.SensorDoorWindow: + case SPK.SensorSmoke: + case SPK.SensorWater: + case SPK.ClothesHanger: + case SPK.AcIr: + case SPK.SenesorMegahealth: + //璁惧鐘舵�佹帹閫� + //鐘舵�佹洿鏂� + Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status); + break; + } + + HomePage.UpdataFunctionStates(localFunction); + RoomPage.UpdataStates(localFunction); + FunctionPage.UpdataStates(localFunction); + ClassificationPage.UpdataInfo(localFunction); + } catch (Exception ex) { -- Gitblit v1.8.0