From 592974441a4df95fffd9167c90192da1a390b1c2 Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期二, 06 六月 2023 11:51:12 +0800 Subject: [PATCH] Merge branch 'Dev-Branch' --- HDL_ON/DAL/DriverLayer/Control.cs | 230 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 152 insertions(+), 78 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index c1150a7..da0a7b2 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -83,8 +83,10 @@ /// <summary> /// 鍒ゆ柇鏄惁鏈湴鍔犲瘑骞朵笖鍔犲瘑key涓嶄负绌� /// </summary> - public bool IsLocalEncryptAndGetAesKey { - get { + public bool IsLocalEncryptAndGetAesKey + { + get + { return IsLocalEncrypt && (!string.IsNullOrEmpty(DB_ResidenceData.Instance.CurrentRegion.localSecret)); } } @@ -136,45 +138,51 @@ } set { - if (_GatewayOnline_Cloud != value) + try { - _GatewayOnline_Cloud = value; - if(GatewayOnline_Local) + if (_GatewayOnline_Cloud != value) { - return; - } - if (value) - { - if (DB_ResidenceData.Instance.HomeGateway == null) + _GatewayOnline_Cloud = value; + if (GatewayOnline_Local) { return; } - if (!DB_ResidenceData.Instance.HomeGateway.gatewayStatus)//杩滅▼鎯呭喌涓嬶紝缃戝叧鏈摼鎺ユ湇鍔″櫒涓嶈兘淇敼涓婚〉缃戝叧鐘舵�� + 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(3000); - var pm = new DAL.Server.HttpServerRequest(); - pm.GetGatewayInfo(); + System.Threading.Thread.Sleep(1000); + FunctionList.List.ReadAllFunctionStatus(); }) - { IsBackground = true }.Start(); - return; + { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); } - //淇敼涓婚〉杩炴帴鐘舵�� - HomePage.LoadEvent_CheckLinkStatus(); - MainPage.Log($"缃戝叧浜戠鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�"); - new System.Threading.Thread(() => + else { - System.Threading.Thread.Sleep(1000); - FunctionList.List.ReadAllFunctionStatus(); - }) - { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); + //淇敼涓婚〉杩炴帴鐘舵�� + HomePage.LoadEvent_CheckLinkStatus(); + } } - else - { - //淇敼涓婚〉杩炴帴鐘舵�� - HomePage.LoadEvent_CheckLinkStatus(); - } + }catch(Exception ex) + { + MainPage.Log($"Set GatewayCloudOnline Error:{ex.Message}"); } } } @@ -249,7 +257,8 @@ public void SearchLoaclGateway() { //2021-01-15 : 浣忓畢娌℃湁缁戝畾缃戝叧鐨勬椂鍊欎笉鐢ㄦ悳绱紝骞朵笖涓嶈兘閾炬帴mqtt - if(DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId)) + if (DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId) || + !UserInfo.Current.IsLogin) { return; } @@ -308,9 +317,10 @@ /// </summary> public void LoginGateway() { - if(loginGatewayThread== null) + if (loginGatewayThread == null) { - loginGatewayThread = new System.Threading.Thread(() => { + loginGatewayThread = new System.Threading.Thread(() => + { while (!Ins.myTcpClient.isConnected) { if (Ins.GatewayOnline_Local && myTcpClient.isConnected) @@ -337,7 +347,8 @@ try { loginGatewayThread?.Abort(); - }catch (Exception ex) + } + catch (Exception ex) { MainPage.Log($"閲嶅惎鐧诲綍缃戝叧绾跨▼寮傚父:{ex.Message}"); } @@ -347,7 +358,7 @@ LoginGateway(); } } - + } @@ -357,9 +368,9 @@ public void ControlScene(Scene scene) { //浣撻獙妯″紡 - if(MainPage.NoLoginMode) + if (MainPage.NoLoginMode) { - foreach(var sceneFunction in scene.functions) + foreach (var sceneFunction in scene.functions) { var revString = ""; var upDataObj = new AlinkFunctionStatusObj(); @@ -406,7 +417,7 @@ /// <param name="function"></param> /// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param> /// <returns></returns> - public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3) + public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false, int resend = 3) { function.controlCounter++; function.refreshTime = DateTime.Now; @@ -453,7 +464,6 @@ UpdataFunctionStatus(revString, null, true); return true; } - //MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}"); @@ -504,8 +514,9 @@ 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,resend); + new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, resend); MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}"); + Ins.myTcpClient.SendMessage(sendBytes); } } //杩滅▼閫氳 @@ -522,7 +533,7 @@ commandDictionary.Add(FunctionAttributeKey.OnOff, commandDictionary[FunctionAttributeKey.Brightness] == "0" ? "off" : "on"); } } - if(function.spk == SPK.LightCCT) + if (function.spk == SPK.LightCCT) { if (!commandDictionary.ContainsKey(FunctionAttributeKey.CCT)) { @@ -546,10 +557,10 @@ /// <summary> /// 鍏ㄥ紑鍏ㄥ叧鍔熻兘 /// </summary> - public void SwtichFunctions(bool open,List<Function> functions) + public void SwtichFunctions(bool open, List<Function> functions) { //dome妯″紡鎺у埗 - if(MainPage.NoLoginMode) + if (MainPage.NoLoginMode) { new System.Threading.Thread(() => { @@ -557,7 +568,7 @@ { Dictionary<string, string> d1 = new Dictionary<string, string>(); d1.Add(FunctionAttributeKey.OnOff, open ? "on" : "off"); - if (function.spk == SPK.PanelSocket) + if (function.spk == SPK.PanelSocket) { if (function.attributes.Find((obj) => obj.key == "on_off_usb") != null) { @@ -623,16 +634,16 @@ { var pm = new DAL.Server.HttpServerRequest(); var pack = pm.GetDeviceInfoList(functionIds); - if(pack!= null&& pack.Data!=null) + if (pack != null && pack.Data != null) { //寰呮祴璇�2021-03-04 var ddd = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString()); - if(ddd!= null) + if (ddd != null) { - foreach(var function in ddd) + foreach (var function in ddd) { var temp = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId); - if(temp!= null) + if (temp != null) { if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(temp.spk)) { @@ -648,7 +659,7 @@ /// 鍙戦�佽鍙栧懡浠� /// 鑷姩鍒ゆ柇鏄惁涓篈鍗忚璁惧 /// </summary> - public void SendReadCommand(Function function ,bool forceRemote = false) + public void SendReadCommand(Function function, bool forceRemote = false) { function.refreshTime = DateTime.Now; if (forceRemote) @@ -732,7 +743,7 @@ { busClient.ReadBusData(function); } - + } catch (Exception ex) { @@ -776,7 +787,7 @@ /// <summary> /// 瀹夐槻鎺у埗 /// </summary> - public void ControlSecurity(SecurityAlarm securityAlarm,string state) + public void ControlSecurity(SecurityAlarm securityAlarm, string state) { if (!Ins.GatewayOnline_Local)//缃戝叧鏈湴涓嶅湪绾� { @@ -834,7 +845,7 @@ }; var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData); var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlScene, aLinkJson); - new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id,0); + new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id, 0); } } @@ -928,10 +939,10 @@ /// 杞崲鎺ユ敹鍒扮殑鏁版嵁 /// </summary> /// <returns></returns> - public void ConvertReceiveData(byte[] receiveBytes,string ip) + public void ConvertReceiveData(byte[] receiveBytes, string ip) { var reString = Encoding.UTF8.GetString(receiveBytes); - AnalysisReceiveData(reString, receiveBytes,ip); + AnalysisReceiveData(reString, receiveBytes, ip); } /// <summary> /// 杞崲鎺ユ敹鍒扮殑鏁版嵁 @@ -939,7 +950,7 @@ /// <param name="receiveString">杞琒tring鍚庣殑鏁版嵁</param> /// <param name="originalReceiveBytes"鍘熷Bytes鏁版嵁</param> /// <returns></returns> - public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes , string sIp = null) + public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes, string sIp = null) { LocalCommunicationData receiveObj = new LocalCommunicationData(); @@ -1071,14 +1082,15 @@ //2021-09-23 鏂板鑾峰彇褰撳墠缃戝叧鏄惁鏈湴鍔犲瘑 Ins.IsLocalEncrypt = device.isLocalEncrypt; //MainPage.Log("缃戝叧鏈湴鍔犲瘑鐘舵�侊細" + device.local_encrypt.ToString()); - + //鐧诲綍缃戝叧Tcp OpenTcpClent(); } } else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" || - receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" || + receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" || + receiveObj.Topic == CommunicationTopic.ct.ControlGroupControlTopic + "_reply" || receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus || receiveObj.Topic.Contains(CommunicationTopic.ct.GatewayUpSortTopic)) { @@ -1118,7 +1130,8 @@ MainPage.Log($"瀹夐槻灞�鍩熺綉寮傚父锛歿ex.Message}"); } } - else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply") { + else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply") + { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString); if (temp.GetValue("objects").ToString().Contains("success")) { @@ -1161,7 +1174,7 @@ } else { - if(processedDataList.Count> 50) + if (processedDataList.Count > 50) { processedDataList.RemoveAt(0); } @@ -1170,12 +1183,63 @@ } + /// <summary> /// 鏇存柊璁惧鐘舵�� /// A鍗忚鏁版嵁 /// </summary> - /// <param name="updateBytes"></param> - public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false) + public void UpdataGroupControlStatus(string revString, byte[] usefulBytes, bool isCloudData = false) + { + var temp = JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); + if (temp != null) + { + Control_Udp.ReceiveRepeatManager(temp.id, usefulBytes); + var allLocalFuntion = FunctionList.List.groupControls; + foreach (var updateTemp in temp.objects) + { + try + { + var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); + if (localFunction == null) + { + continue; + } + MainPage.Log($"鏀跺埌鏁版嵁:{revString}"); + foreach (var attr in updateTemp.status) + { + localFunction.time_stamp = temp.time_stamp; + localFunction.SetAttrState(attr.key, attr.value); + + } + + //鏇存柊鐣岄潰鐘舵�� + switch (localFunction.spk) + { + case SPK.ElectricEnergy: + EnergyMainPage.UpdataStatus(localFunction); + break; + } + + HomePage.UpdataFunctionStates(localFunction); + RoomPage.UpdataStates(localFunction); + FunctionPage.UpdataStates(localFunction); + ClassificationPage.UpdataInfo(localFunction); + + } + catch (Exception ex) + { + MainPage.Log($"A鍗忚鏇存柊鐘舵�佸紓甯�:{ex.Message}"); + } + } + } + } + + + /// <summary> + /// 鏇存柊璁惧鐘舵�� + /// A鍗忚鏁版嵁 + /// </summary> + public void UpdataFunctionStatus(string revString, byte[] usefulBytes, bool isCloudData = false) { ////test 浜戠杩炴帴鎴愬姛鏃讹紝涓嶉�傜敤鏈湴鏁版嵁鏇存柊 //if (Ins.GatewayOnline_Cloud && !isCloudData) @@ -1218,7 +1282,7 @@ if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞� { - if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk) && !SPK.MusicSpkList().Contains( localFunction.spk)) + if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk) && !SPK.MusicSpkList().Contains(localFunction.spk)) { //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�........"); @@ -1235,12 +1299,11 @@ // return; // } //} - //MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); + MainPage.Log($"鏀跺埌鏁版嵁:{revString}"); foreach (var attr in updateTemp.status) { localFunction.time_stamp = temp.time_stamp; localFunction.SetAttrState(attr.key, attr.value); - //Console.WriteLine("闊充箰鎾斁鍣ㄦ坊鍔犵紦瀛樻暟鎹�=======" + revString); } @@ -1256,7 +1319,7 @@ break; case SPK.AirSwitch: AirSwitchPage.UpdataState(localFunction); - if(localFunction.GetAttribute(FunctionAttributeKey.Power)!=null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰 + if (localFunction.GetAttribute(FunctionAttributeKey.Power) != null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰 { EnergyMainPage.UpdataStatus(localFunction); } @@ -1283,6 +1346,8 @@ RGBPage.UpdataStates(localFunction); break; case SPK.LightRGBW: + localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%"; + RGBWPage.UpdataStates(localFunction); break; case SPK.LightCCT: localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%"; @@ -1293,7 +1358,7 @@ CurtainModulePage.UpdataState(localFunction); break; case SPK.CurtainDream: - if(localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0") + if (localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0") { localFunction.SetAttrState(FunctionAttributeKey.OnOff, "off"); } @@ -1309,6 +1374,8 @@ RollingShutterPage.UpdataState(localFunction); break; case SPK.CurtainShades: + localFunction.lastState = Language.StringByID(StringId.Open) + localFunction.GetAttrState(FunctionAttributeKey.Percent) + "%"; + VenetianBlindsPage.UpdataState(localFunction); break; case SPK.AcStandard: case SPK.HvacAC: @@ -1384,7 +1451,7 @@ case SPK.SensorTemperature: case SPK.SensorHumidity: case SPK.SensorHcho: - if(localFunction.spk == SPK.SensorTemperature) + if (localFunction.spk == SPK.SensorTemperature) { HomePage.LoadEvent_RefreshEnvirIndoorTemp(); } @@ -1395,7 +1462,7 @@ EnvironmentalPage.LoadEvent_UpdataStatus(localFunction); //A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction); break; - case SPK.SensorEnvironment: + case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin: case SPK.SensorEnvironment2: case SPK.SensorEnvironment3: if (localFunction.GetAttributes().Contains(FunctionAttributeKey.Temperature)) @@ -1434,12 +1501,14 @@ case SPK.SensorGas: case SPK.HvacCac: case SPK.SensorHelp: + case SPK.MechanicalArm: //璁惧鐘舵�佹帹閫� //鐘舵�佹洿鏂� Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status); break; case SPK.SenesorMegahealth: case SPK.SenesorMegahealth2: + case SPK.SensorMmvPose: var tempStatus = localFunction.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus); if (tempStatus != null) @@ -1484,14 +1553,16 @@ case SPK.AvMusic: case SPK.MusicStandard: //UI.Music.MusicMain.mMusicMain.RefreshView(updateTemp); - //Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�======="+ revString); + Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�=======" + revString); //wjc break; case SPK.Inverter: - MainPage.Log("閫嗗彉鍣ㄦ暟鎹洿鏂�"); + case SPK.InverterRst: var status = new Dictionary<string, object> { ["method"] = "status", ["data"] = temp.objects }; - //var dd = Newtonsoft.Json.JsonConvert.SerializeObject(status); - Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{Newtonsoft.Json.JsonConvert.SerializeObject(status)}\')"); + Application.RunOnMainThread(() => + { + Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{Newtonsoft.Json.JsonConvert.SerializeObject(status)}\')"); + }); break; } @@ -1516,12 +1587,12 @@ /// <summary> /// //涓�閿紙杩滅▼锛夊紑閿� /// </summary> - public void OneKeyUnlocking(Function doorlock,string extStr) + public void OneKeyUnlocking(Function doorlock, string extStr) { if (Ins.GatewayOnline_Local) { Dictionary<string, string> dic = new Dictionary<string, string>(); - var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID,extStr); + var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID, extStr); var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj); var sendBytes = Ins.ConvertSendBodyData($"/base/{Control.Ins.GatewayId}/thing/service/doorRemoteOpen/down", functionControlDataJson); new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 0); @@ -1536,7 +1607,7 @@ /// </summary> /// <param name="functionId"></param> /// <param name="pwd"></param> - public void ConfirmUnlocking(string functionId,string pwd) + public void ConfirmUnlocking(string functionId, string pwd) { Loading loading = new Loading(); MainPage.BaseView.AddChidren(loading); @@ -1572,8 +1643,10 @@ //{ // return false; //} - if (pack.Code != StateCode.SUCCESS) { - Application.RunOnMainThread(() => { + if (pack.Code != StateCode.SUCCESS) + { + Application.RunOnMainThread(() => + { new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message); UserInfo.Current.doorPasswordString = "";// UserInfo.Current.LastTimeOpenDoor = DateTime.MinValue; @@ -1582,8 +1655,9 @@ } if (pack.Code != StateCode.SUCCESS) { - Application.RunOnMainThread(() => { - if(string.IsNullOrEmpty(pack.message)) + Application.RunOnMainThread(() => + { + if (string.IsNullOrEmpty(pack.message)) { new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), Language.StringByID(StringId.OperationFailed)); -- Gitblit v1.8.0