From 62d77d3bb8e7215d9da9ecf6f5aeda0b69f805f8 Mon Sep 17 00:00:00 2001 From: wei <kaede@kaededeMacBook-Air.local> Date: 星期二, 08 十二月 2020 18:57:15 +0800 Subject: [PATCH] 20201208 --- HDL_ON/DAL/DriverLayer/Control.cs | 270 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 231 insertions(+), 39 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index 80e292b..5f3c63b 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Text; using HDL_ON.Entity; +using HDL_ON.UI; +using Shared; namespace HDL_ON.DriverLayer { @@ -67,10 +69,17 @@ } set { - _gatewayOnline = value; - //淇敼涓婚〉杩炴帴鐘舵�� - UI.HomePage.LoadEvent_CheckLinkStatus(); - FunctionList.List.ReadAllFunctionStatus(); + if (_gatewayOnline != value) + { + _gatewayOnline = value; + //淇敼涓婚〉杩炴帴鐘舵�� + UI.HomePage.LoadEvent_CheckLinkStatus(); + if (value) + { + MainPage.Log($"缃戝叧鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�"); + FunctionList.List.ReadAllFunctionStatus(); + } + } } } /// <summary> @@ -90,13 +99,8 @@ set { _isRemote = value; - if(value) - { - DAL.Mqtt.MqttClient.InitState(); - }else - { - DAL.Mqtt.MqttClient.DisConnectRemote(); - } + //淇敼涓婚〉杩炴帴鐘舵�� + HomePage.LoadEvent_CheckLinkStatus(); } } /// <summary> @@ -198,6 +202,11 @@ } }) { IsBackground = true }.Start(); + if (!GatewayOnline)//缃戝叧涓嶅湪绾跨殑鏃跺�欐墠鍙皾璇曡繙绋嬭繛鎺� + { + Ins.IsRemote = true; + DAL.Mqtt.MqttClient.InitState(); + } } /// <summary> @@ -229,7 +238,7 @@ function.refreshTime = DateTime.Now; DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); //杩滅▼閫氳 - if (Ins.IsRemote || true) + if (Ins.IsRemote) { //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋� var apiControlData = function.GetApiControlData(commandDictionary); @@ -279,11 +288,12 @@ function.refreshTime = DateTime.Now; if (Ins.IsRemote) { - + var pm = new DAL.Server.HttpServerRequest(); + var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId}); } else { - if (function.bus_Data != null) + if (DB_ResidenceData.residenceData.GatewayType == 0) { try { @@ -299,14 +309,14 @@ var readKey = new Dictionary<string, string>(); readKey.Add("sid", function.sid); - var readDataObj = new GatewayAlinkReadObj() + var readDataObj = new AlinkReadFunctionStatusObj() { id = Ins.msg_id.ToString(), objects = new List<Dictionary<string, string>>() { readKey }, - //time_stamp = + time_stamp = Utlis.GetTimestamp() }; var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); @@ -314,21 +324,21 @@ } } } - /// <summary> - /// 鍙戦�丄鍗忚璇诲彇鍛戒护 - /// </summary> - public void SendReadCommand(List<Dictionary<string, string>> keyValuePairs) - { - var readDataObj = new GatewayAlinkReadObj() - { - id = Ins.msg_id.ToString(), - objects = keyValuePairs, - //time_stamp = - }; - var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); - var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); - Ins.myUdp.SendLocalHdlLinkData(sendBytes); - } + ///// <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鍗忚鍦烘櫙 @@ -405,21 +415,203 @@ { return receiveObj; } - switch (receiveObj.Topic) + if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply) { - case CommunicationTopic.SearchLoaclGatewayReply: - var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString()); - if (device.device_mac == DB_ResidenceData.residenceData.residenceGatewayMAC) + var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString()); + if (device.device_mac == DB_ResidenceData.residenceData.residenceGatewayMAC) + { + Ins.GatewayOnline = true; + if(!string.IsNullOrEmpty( device.gatewayId)) { - Ins.GatewayOnline = true; Ins.GatewayId = device.gatewayId; - reportIp = "239.0.168.188";// device.ip_address; - Ins.IsRemote = false; } - break; + else + { + Ins.GatewayId = device.device_mac; + } + reportIp = "239.0.168.188";// device.ip_address; + Ins.IsRemote = false; + } + } + else if(receiveObj.Topic == CommunicationTopic.ct.ReadStatus+"_reply" || + receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus) + { + UpdataFunctionStatus(receiveObj.BodyDataString); } } return receiveObj; } + + /// <summary> + /// 鏇存柊璁惧鐘舵�� + /// A鍗忚鏁版嵁 + /// </summary> + /// <param name="updateBytes"></param> + public void UpdataFunctionStatus(string revString) + { + MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); + if (temp != null) + { + var allLocalFuntion = FunctionList.List.GetAllDeviceFunctionList(); + foreach (var updateTemp in temp.objects) + { + try + { + bool hadChange = false;//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� + var updataObj = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); + if (updataObj != null) + { + foreach (var attr in updateTemp.status) + { + foreach (var locatAttr in updataObj.attributes) + { + if (attr.key == locatAttr.key) + { + if (locatAttr.curValue.ToString() == attr.value) + { + continue; + } + locatAttr.curValue = attr.value; + hadChange = true; + } + } + } + if (!hadChange)//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� + { + continue; + } + //鏇存柊鐣岄潰鐘舵�� + switch (updataObj.spk) + { + case SPK.LightSwitch: + RelayPage.UpdataState(updataObj as Light); + break; + case SPK.LightDimming: + var dimming = updataObj as Light; + dimming.lastState = Language.StringByID(StringId.Brightness) + " : " + dimming.brightness + "%"; + DimmerPage.UpdataStates(dimming); + break; + case SPK.ElectricFan: + var fan = updataObj as Fan; + fan.lastState = Language.StringByID(StringId.Level) + " : " + fan.openLevel; + FanPage.UpdataState(fan); + break; + case SPK.LightRGB: + var rgb = updataObj as Light; + rgb.lastState = Language.StringByID(StringId.Brightness) + " : " + rgb.brightness + "%"; + RGBPage.UpdataStates(rgb); + break; + case SPK.LightRGBW: + case SPK.LightCCT: + break; + case SPK.CurtainSwitch: + var curtain = updataObj as Curtain; + 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 = updataObj as Curtain; + trietex.lastState = Language.StringByID(StringId.Open) + trietex.percent + "%"; + MotorCurtainPage.UpdataState(trietex); + break; + case SPK.CurtainRoller: + var roller = updataObj as Curtain; + roller.lastState = Language.StringByID(StringId.Open) + roller.percent + "%"; + RollingShutterPage.UpdataState(roller); + break; + case SPK.CurtainShades: + break; + case SPK.AcStandard: + var ac = updataObj as AC; + 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 = updataObj as FloorHeating; + 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 = updataObj as Sensor; + EnvironmentalSciencePage.LoadEvent_UpdataStatus(sensor); + break; + case SPK.ElectricSocket: + break; + case SPK.ElectricTV: + break; + default: + break; + } + HomePage.UpdataFunctionStates(updataObj); + RoomPage.UpdataStates(updataObj); + FunctionPage.UpdataStates(updataObj); + ClassificationPage.UpdataInfo(updataObj); + } + } + catch (Exception ex) + { + MainPage.Log($"A鍗忚鏇存柊鐘舵�佸紓甯�:{ex.Message}"); + } + } + } + } + } } \ No newline at end of file -- Gitblit v1.8.0