From 19d0e070e128daf855beaf72e00f55334be9f87b Mon Sep 17 00:00:00 2001 From: wei <kaede@kaededeMacBook-Air.local> Date: 星期六, 28 八月 2021 13:47:25 +0800 Subject: [PATCH] 1 --- HDL_ON/DAL/DriverLayer/Control.cs | 396 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 291 insertions(+), 105 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index 335e8db..85ebba3 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -26,7 +26,6 @@ public class Control { - static Control _control; public static Control Ins { @@ -229,7 +228,7 @@ public void SearchLoaclGateway() { //2021-01-15 : 浣忓畢娌℃湁缁戝畾缃戝叧鐨勬椂鍊欎笉鐢ㄦ悳绱紝骞朵笖涓嶈兘閾炬帴mqtt - if(DB_ResidenceData.Instance.HomeGateway == null) + if(DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId)) { return; } @@ -283,6 +282,30 @@ /// </summary> public void ControlScene(Scene scene) { + //浣撻獙妯″紡 + if(MainPage.NoLoginMode) + { + 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(() => @@ -299,6 +322,15 @@ } } } + /// <summary> + /// 瀹夐槻鎺у埗 + /// </summary> + public void ControlArm() + { + DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); + //var pack = httpServer.GetSecurityAlarmLogList + } + /// <summary> /// 鍙戦�佸懡浠� @@ -336,10 +368,31 @@ } } - MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}"); + ///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) + switch (function.spk) { case SPK.ElectricTuyaAirCleaner: case SPK.ElectricTuyaFan: @@ -361,16 +414,6 @@ } else { - ////杩滅▼閫氳 - //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) { @@ -399,12 +442,32 @@ //杩滅▼閫氳 else { + //Bug淇锛氫竴绔彛杩滅▼鎺у埗璋冨厜璁惧鐨勮皟鍏夊睘鎬ф椂锛屾棤娉曟帶鍒跺埌0锛屽弽澶嶆í璺炽�� + //鍥犱负On + 杩滅▼鎺у埗鍙戦�佺粰浜戠浣跨敤鐨勬槸link鍗忚鏁版嵁锛屾潹娑涗腑杞粰楂樿儨澶勭悊鏃跺�欓�昏緫涓婃湁鍐茬獊锛屽鑷存棤娉曞崟鐙帶鍒朵寒搴﹀�硷紝闇�瑕佸悓鏃跺彂閫佸紑鍏冲�间笌浜害鍊笺�� + if (DB_ResidenceData.Instance.GatewayType == 0) + { + if (commandDictionary.Count == 1) + { + if (commandDictionary.ContainsKey(FunctionAttributeKey.Brightness)) + { + commandDictionary.Add(FunctionAttributeKey.OnOff, commandDictionary[FunctionAttributeKey.Brightness] == "0" ? "off" : "on"); + } + } + if(function.spk == SPK.LightCCT) + { + if (!commandDictionary.ContainsKey(FunctionAttributeKey.CCT)) + { + commandDictionary.Add(FunctionAttributeKey.CCT, function.GetAttrState(FunctionAttributeKey.CCT)); + } + } + } 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); + MainPage.Log($"杩滅▼鎺у埗鍙嶉:{pack.message}"); } } @@ -414,29 +477,59 @@ /// </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) + //涓�绔彛鍏ㄥ紑鍏ㄥ叧闇�瑕佸欢鏃跺彂閫� + if (DB_ResidenceData.Instance.GatewayType == 0) { - logString += temp.spk + ":" + temp.sid + "\r\n"; - var apiControlData = temp.GetApiControlData(d); - actionObjs.Add(apiControlData); - count++; - if (count > 9) + new System.Threading.Thread(() => { - var result = pm.ControlDevice(actionObjs); - actionObjs = new List<ApiAlinkControlActionObj>(); - count = 0; - MainPage.Log(logString); - logString = ""; - } + foreach (var temp in functions) + { + var apiControlData = temp.GetApiControlData(d); + var result = pm.ControlDevice(new List<ApiAlinkControlActionObj>() { apiControlData }); + System.Threading.Thread.Sleep(100); + } + }) + { IsBackground = true }.Start(); } - var pack = pm.ControlDevice(actionObjs); - MainPage.Log(logString); + else + { + foreach (var temp in functions) + { + var apiControlData = temp.GetApiControlData(d); + actionObjs.Add(apiControlData); + count++; + if (count > 9) + { + var result = pm.ControlDevice(actionObjs); + actionObjs = new List<ApiAlinkControlActionObj>(); + count = 0; + System.Threading.Thread.Sleep(100); + } + } + var pack = pm.ControlDevice(actionObjs); + } } public void SendApiReadCommand(List<string> functionIds) @@ -477,47 +570,90 @@ /// 鍙戦�佽鍙栧懡浠� /// 鑷姩鍒ゆ柇鏄惁涓篈鍗忚璁惧 /// </summary> - public void SendReadCommand(Function function) + public void SendReadCommand(Function function ,bool forceRemote = false) { function.refreshTime = DateTime.Now; - if (Ins.GatewayOnline_Local) + if (forceRemote) { - - if (DB_ResidenceData.Instance.GatewayType == 0) + var pm = new DAL.Server.HttpServerRequest(); + var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId }); + } + else + { + 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); - MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{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 ControlSecurity(SecurityAlarm securityAlarm,string state) + { + if (!Ins.GatewayOnline_Local)//缃戝叧鏈湴涓嶅湪绾� + { + var pm = new DAL.Server.HttpServerRequest(); + var result = pm.SetSecurityStatus(new List<SecurityState>() { new SecurityState() { + gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId, + sid = securityAlarm.sid, status = state, userSecurityId = securityAlarm.userSecurityId + } }); + MainPage.Log($"瀹夐槻鎺у埗缁撴灉:{result.Code}"); } else { - var pm = new DAL.Server.HttpServerRequest(); - var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId }); + Dictionary<string, string> keys = new Dictionary<string, string>(); + keys.Add("sid", securityAlarm.sid); + keys.Add("status", state); + keys.Add("alarm", securityAlarm.alarm.ToString()); + var aLinkData = new AlinkReadFunctionStatusObj() + { + id = Ins.msg_id.ToString(), + objects = new List<Dictionary<string, string>>() + { + keys + }, + time_stamp = Utlis.GetTimestamp() + }; + var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlSeurity, aLinkJson); + new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id); } } @@ -551,7 +687,7 @@ } } /// <summary> - /// 杞崲閫氳鏁版嵁 + /// 杞崲鍙戦�佹暟鎹� /// </summary> public byte[] ConvertSendBodyData(string topic, string bodyDataString) { @@ -561,7 +697,7 @@ string sendDataString = topicString + lengthString + bodyDataString; byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString); - //MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n"); + MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n"); return sendDataBytes; } @@ -602,7 +738,7 @@ } } - //MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic}"); + MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}"); //楠岃瘉鏈夋晥鏁版嵁闀垮害 @@ -613,17 +749,19 @@ //} receiveObj.BodyDataString = res[1]; - var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]); - if (bodyJObj == null) + if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast) { - 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) { - //MainPage.Log("鏈湴鎼滅储缃戝叧鎴愬姛"); + 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)) @@ -634,7 +772,7 @@ { Ins.GatewayId = device.device_mac; } - reportIp = "239.0.168.188";// device.ip_address; + reportIp = "239.0.168.188";// device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧 } } else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" || @@ -643,6 +781,42 @@ { //TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮� UpdataFunctionStatus(receiveObj.BodyDataString, null); + } + else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity +"_reply" + || receiveObj.Topic == CommunicationTopic.ct.ReadSecurityStatus + "_reply" + || receiveObj.Topic == CommunicationTopic.ct.SecurityStatusUp) + { + try + { + MainPage.Log($"灞�鍩熺綉瀹夐槻淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}"); + var tt = ""; + lock (tt) { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString); + if (temp != null) + { + Control_Udp.ReceiveRepeatManager(temp.id, null); + foreach (var updataSecurity in temp.objects) + { + var updataLocalSecurity = FunctionList.List.securities.Find((obj) => obj.sid == updataSecurity.sid); + if (updataLocalSecurity != null) + { + updataLocalSecurity.status = updataSecurity.status; + updataLocalSecurity.alarm = updataSecurity.alarm; + ArmCenterPage.LoadEvent_RefreshSecurityStatus(updataLocalSecurity); + } + } + HomePage.LoadEvent_RefreshSecurityStatus(); + } + } + } + catch (Exception ex){ + MainPage.Log($"瀹夐槻灞�鍩熺綉寮傚父锛歿ex.Message}"); + } + } + else + { + //涓�浜涚壒娈婄殑涓婚澶勭悊(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�) + Stan.HdlCloudReceiveLogic.Current.CloudOverallMsgReceiveEx(receiveObj.Topic, receiveObj.BodyDataString); } } return receiveObj; @@ -655,15 +829,6 @@ /// <param name="updateBytes"></param> public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false) { - - if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞� - { - if (FunctionList.List.GetDeviceFunctionList(SPK.BrandType.Tuya).Count == 0) - { - //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�..."); - return; - } - } var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); if (temp != null) { @@ -673,6 +838,22 @@ { try { + + if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞� + { + if (FunctionList.List.OtherBrandFunction.Count != 0) + { + if (FunctionList.List.OtherBrandFunction.Find((obj) => obj.sid == updateTemp.sid) == null) + { + //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�..."); + return; + } + } + } + + + + var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); if (localFunction == null) { @@ -686,7 +867,7 @@ return; } } - MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); + //MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); foreach (var attr in updateTemp.status) { localFunction.time_stamp = temp.time_stamp; @@ -697,6 +878,12 @@ Function localObj = null; switch (localFunction.spk) { + case SPK.AirSwitch: + AirSwitchPage.UpdataState(localFunction); + break; + case SPK.ElectricEnergy: + EnergyMainPage.UpdataStatus(localFunction); + break; case SPK.LightSwitch: RelayPage.UpdataState(localFunction); break; @@ -777,6 +964,7 @@ } break; case SPK.FloorHeatStandard: + localFunction.lastState = ""; switch (localFunction.GetAttrState(FunctionAttributeKey.Mode)) { case "normal": @@ -803,36 +991,31 @@ case SPK.SensorTVOC: case SPK.SensorTemperature: case SPK.SensorHumidity: - var sensor = FunctionList.List.GetEnvirSensorsList().Find((obj) => obj.sid == updateTemp.sid); - if (sensor != null) + if(localFunction.spk == SPK.SensorTemperature) { - 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); + HomePage.LoadEvent_RefreshEnvirIndoorTemp(); } + else if (localFunction.spk == SPK.SensorHumidity) + { + HomePage.LoadEvent_RefreshEnvirIndoorHumi(); + } + EnvironmentalPage.LoadEvent_UpdataStatus(localFunction); + break; + case SPK.SensorEnvironment: + case SPK.SensorEnvironment2: + case SPK.SensorEnvironment3: + if (localFunction.GetAttributes().Contains(FunctionAttributeKey.Temperature)) + { + HomePage.LoadEvent_RefreshEnvirIndoorTemp(); + } + if (localFunction.GetAttributes().Contains(FunctionAttributeKey.Humidity)) + { + HomePage.LoadEvent_RefreshEnvirIndoorHumi(); + } + EnvironmentalPage.LoadEvent_UpdataStatus(localFunction); break; case SPK.ElectricSocket: - var es = FunctionList.List.GetElectricSocketList().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); - } + SocketPage.UpdataState(localFunction); break; case SPK.ElectricTV: break; @@ -845,8 +1028,11 @@ case SPK.SensorSmoke: case SPK.SensorWater: case SPK.ClothesHanger: - case SPK.IrAC: + case SPK.AcIr: + case SPK.SenesorMegahealth: + case SPK.AirFreshStandard: //璁惧鐘舵�佹帹閫� + //鐘舵�佹洿鏂� Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status); break; } -- Gitblit v1.8.0