From 22c5c030f2262b6a9d6840bf3b5196b7ab2d4dd5 Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期二, 10 三月 2020 14:31:53 +0800 Subject: [PATCH] 2020-03-10 1.替换最新控件库,增加无网络监听,Loading效果优化。 2.电能插座修复点亮统计个数问题。 3 .定时检测网关是否在线,发送CheckGateway间隔为10S,收到主题刷新该时间,重置发送次数,发送次数到达3次以上,则判定网关为离线状态。 4.远程重复增加为3次,重发后等待5s才回调结果。 5.修复去掉普通继电器读电能操作。 6.读状态间隔缩短为200ms。 --- Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs | 184 +++++++++++++++++++++++++++++++++------------ 1 files changed, 133 insertions(+), 51 deletions(-) diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs index 4d25cae..8650a0b 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs @@ -45,6 +45,7 @@ static MqttCommon () { InitMqtt (); + InitCheckGateway (); } /// <summary> @@ -55,11 +56,13 @@ { new System.Threading.Thread (async () => { while (true) { - System.Threading.Thread.Sleep (100); - if (!CommonPage.IsRemote) continue; + try { + System.Threading.Thread.Sleep (100); + if (!CommonPage.IsRemote) continue; - await StartCloudMqtt (); - await CheckingSubscribeTopics (); + await StartCloudMqtt (); + await CheckingSubscribeTopics (); + } catch { } } }) { IsBackground = true }.Start (); @@ -197,52 +200,21 @@ } else if (aesDecryptTopic == $"/BusGateWayToClient/{mMqttInfo.connEmqClientId}/Push/NotifySqueeze") {//璁㈤槄鎸や笅绾块棶棰� await ReceiveNotifySqueezeAsync (aesDecryptPayload); }else if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/CheckGateway") { - MainPage.WiFiStatus = "CrabtreeAdd/CloudUnlink.png"; - // = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON"; - var ss = CommonPage.MyEncodingUTF8.GetString (aesDecryptPayload); - var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack> (ss); - if (obj == null) { - return; - } - switch (obj.StateCode) { - case "HDLUdpDataForwardServerMqttClientNoOnLine": - case "NoOnline": - case "NetworkAnomaly"://涓嶅湪绾� - MainPage.AddTip ("Gateway offline"); - //Application.RunOnMainThread (() => { - // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor; - //}); - break; - case "NoRecord"://MAC涓嶆纭� - MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.MACError)); - //Application.RunOnMainThread (() => { - // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor; - //}); - break; - case "Success": - MainPage.AddTip (UserConfig.Instance.CurrentRegion.Name + ":" + Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess)); - MainPage.WiFiStatus = "CrabtreeAdd/CloudLink.png"; - break; - default: - MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkLoser)); - //Application.RunOnMainThread (() => { - // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor; - //}); - break; - } - Application.RunOnMainThread (() => { - UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus; - }); + ReceiveCheckGatewayTopic (); } else { + SetGatewayOnlineResetCheck (); + if (!string.IsNullOrEmpty (mqttEncryptKey)) { aesDecryptPayload = Shared.Securitys.EncryptionService.AesDecryptPayload (e.ApplicationMessage.Payload, mqttEncryptKey); } + var packet = new Packet (); + packet.IsLocal = false; + packet.Bytes = aesDecryptPayload; + packet.Manager (); + } - var packet = new Packet (); - packet.IsLocal = false; - packet.Bytes = aesDecryptPayload; - packet.Manager (); + } catch { } }); } @@ -489,7 +461,7 @@ break; case 3: topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/CheckGateway"; - Console.WriteLine ("CheckGateway"); + //Console.WriteLine ("CheckGateway"); await RemoteMqttClient.PublishAsync (new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce }); break; } @@ -578,12 +550,9 @@ static async Task ReceiveNotifyBusGateWayInfoChange () { System.Console.WriteLine ("============>Mqtt 缃戝叧涓婄嚎"); - IsGatewayOnline = true; + SetGatewayOnlineResetCheck (); if (CommonPage.IsRemote) { - if (MainPage.WiFiStatus != "CrabtreeAdd/CloudLink.png") { - Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink); - } //#if DEBUG MainPage.AddTip ("Gateway login online"); //#endif @@ -591,8 +560,6 @@ IfNeedReadAllDeviceStatus = false; Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus (); } - - } //褰撳墠浣忓畢涓嶆槸鍒嗕韩鏉� @@ -631,8 +598,123 @@ } } + + static int CheckGatewayCount = 0; + static DateTime mCheckGatewayTime; + + /// <summary> + /// 璁剧疆缃戝叧鍦ㄧ嚎鏍囧織锛屽苟閲嶇疆CheckGateway鍙傛暟 + /// </summary> + static void SetGatewayOnlineResetCheck () + { + IsGatewayOnline = true; + mCheckGatewayTime = DateTime.Now; + CheckGatewayCount = 0; + if (CommonPage.IsRemote) { + if (MainPage.WiFiStatus != "CrabtreeAdd/CloudLink.png") { + Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink); + } + } + } + + //static void TipGatewayOffline () { + + //} + + /// <summary> + /// 瀹氭椂妫�娴嬬綉鍏虫槸鍚﹀湪绾� + /// 1.绾跨▼浼戠湢闂撮殧5s + /// 2.鍙戦�丆heckGateway闂撮殧涓�9S锛屾敹鍒颁富棰樺埛鏂拌鏃堕棿锛岄噸缃彂閫佹鏁� + /// 3.鍙戦�佹鏁板埌杈�3娆′互涓婏紝鍒欏垽瀹氱綉鍏充负绂荤嚎鐘舵�� + /// </summary> + /// <returns></returns> + static void InitCheckGateway () + { + new System.Threading.Thread (async () => { + while (true) { + try { + + if (CommonPage.IsRemote && remoteIsConnected) { + if (CheckGatewayCount >= 3) { + //杩炵画3娆℃病鍥炲锛屽垽瀹氱綉鍏宠秴鏃� + if (MainPage.WiFiStatus == "CrabtreeAdd/CloudLink.png") { + IsGatewayOnline = false; + Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline); + MainPage.AddTip ("Gateway offline!"); + } + } + + if (mCheckGatewayTime.AddSeconds (10).Ticks <= System.DateTime.Now.Ticks) { + mCheckGatewayTime = DateTime.Now; + //CheckGateway + MqttRemoteSend (new byte [] { }, 3); + CheckGatewayCount++; +#if DEBUG + Console.WriteLine ("CheckGateway"); +#endif + + + } + } + + System.Threading.Thread.Sleep (5500); + } catch { } + + } + }) { IsBackground = true }.Start (); + } + + + /// <summary> + /// 鏀跺埌CheckGateway涓婚 + /// </summary> + static void ReceiveCheckGatewayTopic () { + //System.Console.WriteLine ("============>Mqtt CheckGateway缃戝叧鍥炲"); + SetGatewayOnlineResetCheck (); + + + + //鏃х綉鍏虫柟娉� + //MainPage.WiFiStatus = "CrabtreeAdd/CloudUnlink.png"; + //// = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON"; + //var ss = CommonPage.MyEncodingUTF8.GetString (aesDecryptPayload); + //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack> (ss); + //if (obj == null) { + // return; + //} + //switch (obj.StateCode) { + //case "HDLUdpDataForwardServerMqttClientNoOnLine": + //case "NoOnline": + //case "NetworkAnomaly"://涓嶅湪绾� + // MainPage.AddTip ("Gateway offline"); + // //Application.RunOnMainThread (() => { + // // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor; + // //}); + // break; + //case "NoRecord"://MAC涓嶆纭� + // MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.MACError)); + // //Application.RunOnMainThread (() => { + // // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor; + // //}); + // break; + //case "Success": + // MainPage.AddTip (UserConfig.Instance.CurrentRegion.Name + ":" + Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess)); + // MainPage.WiFiStatus = "CrabtreeAdd/CloudLink.png"; + // break; + //default: + // MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkLoser)); + // //Application.RunOnMainThread (() => { + // // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor; + // //}); + // break; + //} + //Application.RunOnMainThread (() => { + // UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus; + //}); + } + /// <summary> /// 鏀跺埌鎸や笅绾挎帹閫� /// </summary> -- Gitblit v1.8.0