| | |
| | | /// <summary> |
| | | /// 网关是否在线 |
| | | /// </summary> |
| | | public bool GatewayOnline { |
| | | public bool GatewayOnline |
| | | { |
| | | get |
| | | { |
| | | return _gatewayOnline; |
| | |
| | | /// <summary> |
| | | /// 网关通讯ID |
| | | /// </summary> |
| | | public string GatewayId =""; |
| | | public string GatewayId = ""; |
| | | |
| | | bool _isRemote = false; |
| | | /// <summary> |
| | | /// 是否为远程连接 |
| | | /// </summary> |
| | | public bool IsRemote { |
| | | public bool IsRemote |
| | | { |
| | | get |
| | | { |
| | | return _isRemote; |
| | |
| | | { |
| | | function.usageCount++; |
| | | function.refreshTime = DateTime.Now; |
| | | |
| | | |
| | | //远程通讯 |
| | | if (Ins.IsRemote) |
| | | { |
| | |
| | | if (Ins.IsRemote) |
| | | { |
| | | var pm = new DAL.Server.HttpServerRequest(); |
| | | var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId}); |
| | | var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId }); |
| | | } |
| | | else |
| | | { |
| | |
| | | }; |
| | | var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); |
| | | var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes,readDataObj.id); |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id); |
| | | } |
| | | } |
| | | } |
| | |
| | | }; |
| | | var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData); |
| | | var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlScene, aLinkJson); |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes,aLinkData.id); |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id); |
| | | } |
| | | } |
| | | /// <summary> |
| | |
| | | if (device.device_mac == DB_ResidenceData.Instance.residenceGatewayMAC) |
| | | { |
| | | Ins.GatewayOnline = true; |
| | | if(!string.IsNullOrEmpty( device.gatewayId)) |
| | | if (!string.IsNullOrEmpty(device.gatewayId)) |
| | | { |
| | | Ins.GatewayId = device.gatewayId; |
| | | } |
| | |
| | | Ins.IsRemote = false; |
| | | } |
| | | } |
| | | else if(receiveObj.Topic == CommunicationTopic.ct.ReadStatus+"_reply" || |
| | | else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" || |
| | | receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus) |
| | | { |
| | | //TODO 暂时不传正确的数据上去,如果后面要优化前面这些代码 |
| | | UpdataFunctionStatus(receiveObj.BodyDataString,null); |
| | | UpdataFunctionStatus(receiveObj.BodyDataString, null); |
| | | } |
| | | } |
| | | return receiveObj; |
| | |
| | | /// A协议数据 |
| | | /// </summary> |
| | | /// <param name="updateBytes"></param> |
| | | public void UpdataFunctionStatus(string revString,byte []usefulBytes) |
| | | public void UpdataFunctionStatus(string revString, byte[] usefulBytes) |
| | | { |
| | | MainPage.Log($"A协议更新状态:{revString}"); |
| | | var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); |
| | | if (temp != null) |
| | | { |
| | | Control_Udp.ReceiveRepeatManager(temp.id,usefulBytes); |
| | | Control_Udp.ReceiveRepeatManager(temp.id, usefulBytes); |
| | | var allLocalFuntion = FunctionList.List.GetDeviceFunctionList(); |
| | | foreach (var updateTemp in temp.objects) |
| | | { |
| | | try |
| | | { |
| | | //bool hadChange = false;//状态有变化再更新界面 |
| | | var updataObj = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); |
| | | if (updataObj != null) |
| | | var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); |
| | | if (localFunction != 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; |
| | | } |
| | | } |
| | | } |
| | | //2020-12-13 如果控制时,立即更新界面即状态,收到数据不用在处理,目前只修改设备状态,界面没有更新,还是需要接收数据更新 |
| | | //if (!hadChange)//状态有变化再更新界面 |
| | | //var updateInfoString = $"更新设备:{localFunction.name}"; |
| | | //foreach (var attr in updateTemp.status) |
| | | //{ |
| | | // continue; |
| | | // updateInfoString += $" key:{attr.key};value:{attr.value}"; |
| | | //} |
| | | //MainPage.Log(updateInfoString); |
| | | |
| | | |
| | | //更新界面状态 |
| | | switch (updataObj.spk) |
| | | Function localObj = null; |
| | | switch (localFunction.spk) |
| | | { |
| | | case SPK.LightSwitch: |
| | | RelayPage.UpdataState(updataObj as Light); |
| | | 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 = updataObj as Light; |
| | | dimming.lastState = Language.StringByID(StringId.Brightness) + " : " + dimming.brightness + "%"; |
| | | DimmerPage.UpdataStates(dimming); |
| | | 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 = updataObj as Fan; |
| | | fan.lastState = Language.StringByID(StringId.Level) + " : " + fan.openLevel; |
| | | FanPage.UpdataState(fan); |
| | | 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 = updataObj as Light; |
| | | rgb.lastState = Language.StringByID(StringId.Brightness) + " : " + rgb.brightness + "%"; |
| | | RGBPage.UpdataStates(rgb); |
| | | 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: |
| | | case SPK.LightCCT: |
| | | 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 = updataObj as Curtain; |
| | | curtain.lastState = curtain.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close); |
| | | CurtainModulePage.UpdataState(curtain); |
| | | 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 = updataObj as Curtain; |
| | | trietex.lastState = Language.StringByID(StringId.Open) + trietex.percent + "%"; |
| | | MotorCurtainPage.UpdataState(trietex); |
| | | 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 = updataObj as Curtain; |
| | | roller.lastState = Language.StringByID(StringId.Open) + roller.percent + "%"; |
| | | RollingShutterPage.UpdataState(roller); |
| | | 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 = updataObj as AC; |
| | | ac.lastState = ""; |
| | | switch (ac.trait_mode.curValue.ToString()) |
| | | var ac = FunctionList.List.aCs.Find((obj) => obj.sid == updateTemp.sid); |
| | | if (ac != null) |
| | | { |
| | | 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; |
| | | 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); |
| | | } |
| | | 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) |
| | | var fh = FunctionList.List.floorHeatings.Find((obj) => obj.sid == updateTemp.sid); |
| | | if (fh != null) |
| | | { |
| | | 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; |
| | | 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); |
| | | } |
| | | 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); |
| | | 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; |
| | | } |
| | | HomePage.UpdataFunctionStates(updataObj); |
| | | RoomPage.UpdataStates(updataObj); |
| | | FunctionPage.UpdataStates(updataObj); |
| | | ClassificationPage.UpdataInfo(updataObj); |
| | | HomePage.UpdataFunctionStates(localObj); |
| | | RoomPage.UpdataStates(localObj); |
| | | FunctionPage.UpdataStates(localObj); |
| | | ClassificationPage.UpdataInfo(localObj); |
| | | } |
| | | } |
| | | catch (Exception ex) |