From a6e88ed16c1c2e28b209450d5c9abc21005ec5ee Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期四, 24 六月 2021 16:57:36 +0800 Subject: [PATCH] 2021-06-24 1.增加网关动态密钥处理 --- Crabtree/ON.Ios/Info.plist | 4 Crabtree/ON/Properties/AndroidManifest.xml | 4 Crabtree/.vs/SmartHome/xs/UserPrefs.xml | 39 ++++++------- Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs | 91 ++++++++++++++++++++++++----- Crabtree/SmartHome/UI/SimpleControl/MainPage.cs | 2 5 files changed, 97 insertions(+), 43 deletions(-) diff --git a/Crabtree/.vs/SmartHome/xs/UserPrefs.xml b/Crabtree/.vs/SmartHome/xs/UserPrefs.xml index 240550b..76f470b 100644 --- a/Crabtree/.vs/SmartHome/xs/UserPrefs.xml +++ b/Crabtree/.vs/SmartHome/xs/UserPrefs.xml @@ -1,40 +1,36 @@ 锘�<Properties StartupConfiguration="{1D83BF28-BA88-4152-BA41-D7EFE90A5437}|Default"> <MonoDevelop.Ide.ItemProperties.ON.Droid PreferredExecutionTarget="Android.Android_Accelerated_Oreo" /> - <MonoDevelop.Ide.Workbench ActiveDocument="ON.Ios/Resources/Language.ini"> + <MonoDevelop.Ide.Workbench ActiveDocument="SmartHome/UI/SimpleControl/MqttCommon.cs"> <Files> - <File FileName="SmartHome/UI/SimpleControl/Phone/Alexa/SmartSpeakertListPage.cs" Line="153" Column="48" /> - <File FileName="SmartHome/HDL/Common/HttpUtil/HttpUtil.cs" Line="236" Column="1" /> - <File FileName="SmartHome/HDL/Common/CommonUtlis.cs" Line="264" Column="27" /> - <File FileName="ON/Assets/Language.ini" Line="1114" Column="1" /> - <File FileName="SmartHome/UI/SimpleControl/R.cs" Line="1222" Column="44" /> - <File FileName="ON.Ios/Resources/Language.ini" Line="2230" Column="1" /> + <File FileName="SmartHome/HDL/Common/HttpUtil/HttpServerRequest.cs" Line="815" Column="1" /> + <File FileName="SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs" /> + <File FileName="SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs" /> + <File FileName="ON/Properties/AndroidManifest.xml" /> + <File FileName="ON.Ios/Info.plist" /> + <File FileName="SmartHome/UI/SimpleControl/MqttCommon.cs" Line="349" Column="1" /> + <File FileName="SmartHome/HDL/Common/HDLLinkUtlis.cs" Line="132" Column="1" /> + <File FileName="SmartHome/UI/SimpleControl/MainPage.cs" Line="1" Column="1" /> </Files> <Pads> <Pad Id="ProjectPad"> <State name="__root__"> <Node name="SmartHome" expanded="True"> - <Node name="ON.Droid" expanded="True"> - <Node name="Assets" expanded="True" /> - </Node> - <Node name="ON.Ios" expanded="True"> - <Node name="References" expanded="True" /> - <Node name="Resources" expanded="True"> - <Node name="Language.ini" selected="True" /> - </Node> - </Node> <Node name="Shared" expanded="True"> + <Node name="DLL" expanded="True" /> <Node name="HDL" expanded="True"> <Node name="Common" expanded="True"> <Node name="HttpUtil" expanded="True" /> </Node> + <Node name="Operation" expanded="True"> + <Node name="Device" expanded="True" /> + </Node> </Node> + <Node name="IO" expanded="True" /> + <Node name="Net" expanded="True" /> <Node name="UI" expanded="True"> <Node name="SimpleControl" expanded="True"> - <Node name="Phone" expanded="True"> - <Node name="Alexa" expanded="True" /> - <Node name="Schedule" expanded="True" /> - <Node name="User" expanded="True" /> - </Node> + <Node name="Phone" expanded="True" /> + <Node name="MqttCommon.cs" selected="True" /> </Node> </Node> </Node> @@ -56,6 +52,7 @@ <MonoDevelop.Ide.DebuggingService.Breakpoints> <BreakpointStore> <Breakpoint file="/Users/jlchen/JLChen/ProjectsCode/HDLGit/CrabtreeOnNew/Crabtree/SmartHome/HDL/Common/HttpUtil/HttpServerRequest.cs" relfile="SmartHome/HDL/Common/HttpUtil/HttpServerRequest.cs" line="153" column="1" /> + <Breakpoint file="/Users/jlchen/JLChen/ProjectsCode/HDLGit/CrabtreeOnNew/Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs" relfile="SmartHome/HDL/Common/HDLLinkUtlis.cs" line="661" column="1" /> </BreakpointStore> </MonoDevelop.Ide.DebuggingService.Breakpoints> <MultiItemStartupConfigurations /> diff --git a/Crabtree/ON.Ios/Info.plist b/Crabtree/ON.Ios/Info.plist index bb675f0..de909cb 100755 --- a/Crabtree/ON.Ios/Info.plist +++ b/Crabtree/ON.Ios/Info.plist @@ -17,9 +17,9 @@ <key>CFBundleIdentifier</key> <string>com.hdl.on</string> <key>CFBundleShortVersionString</key> - <string>2.603291</string> + <string>2.606221</string> <key>CFBundleVersion</key> - <string>2.603291</string> + <string>2.606221</string> <key>LSRequiresIPhoneOS</key> <true/> <key>MinimumOSVersion</key> diff --git a/Crabtree/ON/Properties/AndroidManifest.xml b/Crabtree/ON/Properties/AndroidManifest.xml index c76bc9c..b9a0df7 100644 --- a/Crabtree/ON/Properties/AndroidManifest.xml +++ b/Crabtree/ON/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@ 锘�<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.crabtreenew" android:versionName="2.604151" android:versionCode="202104151"> - <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28" /> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.crabtreenew" android:versionName="2.606221" android:versionCode="202106221"> + <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" /> <!-- 鍦ㄥ畨鍗揚鐗堟湰涔嬪悗锛屽繀椤昏鎺堜簣FOREGROUND_SERVICE鏉冮檺锛屾墠鑳藉浣跨敤鍓嶅彴鏈嶅姟 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 瀹氫綅鏉冮檺锛岀敤浜嶢PP閫氳繃鑾峰彇瀹氫綅鍧愭爣鏌ヨ褰撳墠鍦板尯澶╂皵--> diff --git a/Crabtree/SmartHome/UI/SimpleControl/MainPage.cs b/Crabtree/SmartHome/UI/SimpleControl/MainPage.cs index 8bd2e0c..5db8240 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/MainPage.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/MainPage.cs @@ -38,7 +38,7 @@ //public static Button LogoButton = new Button (); - public static string RequestVersion = "2.604151"; + public static string RequestVersion = "2.606221"; public static UserInfo LoginUser; /// <summary> /// 鏄惁鏄鐞嗗憳鏉冮檺(鍙樻洿浜�,鎴愬憳鐨勬椂鍊�,杩欎釜涔熶负ture銆備负浠�涔堜細澹版槑杩欐牱鍙橀噺,鍥犱负鏈変簺鎺ュ彛蹇呴』浣跨敤鍘熸潵鐨凾oken) diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs index 1d20d0c..c8f0475 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs @@ -9,6 +9,7 @@ using MQTTnet; using System.Text; using System.Security.Cryptography; +using System.Collections.Generic; namespace SmartHome { @@ -35,6 +36,10 @@ ///// </summary> //static readonly string TopicToApp = "/Push/NotifySqueeze"; + /// <summary> + /// 鏄惁鑾峰彇杩囧瘑閽� + /// </summary> + static bool isGetGatewaySecretKey = false; /// <summary> /// 闅忔満Key @@ -66,7 +71,7 @@ /// <summary> /// 鏂紑杩滅▼Mqtt鐨勯摼鎺� /// </summary> - public static async System.Threading.Tasks.Task DisConnectRemoteMqttClient (string s = "") + public static async System.Threading.Tasks.Task DisConnectRemoteMqttClient (string s = "") { try { if (remoteIsConnected) { @@ -120,6 +125,7 @@ bNeedStartTip = true; bNeedConnectTip = true; CommonConfig.Current.IfGetMqttInfoSuccess = false; + isGetGatewaySecretKey = false;//鑾峰彇瀵嗛挜鏍囪涓篺alse } await DisConnectRemoteMqttClient (s); } @@ -246,8 +252,16 @@ //QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce }; + //褰撹澶嘙QTT鎶ユ枃鍔犲瘑瀵嗛挜鍙戠敓鍙樻洿鏃�,浜戠閫氳繃璇ヤ富棰橀�氱煡鍏朵粬瀹㈡埛绔埛鏂板瘑閽�,鍏跺畠鍜岃缃戝叧浜や簰鐨勫鎴风鑷璁㈤槄璇ヤ富棰�,璇ヤ富棰樺寘涓嶅姞瀵� + var topicFilterPush3 = new MqttTopicFilter { + Topic = $"/user/{CommonConfig.Current.HomeGatewayInfo.gatewayId}/custom/mqtt/secret/change", + QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce, + }; + + + Utlis.WriteLine ("寮�濮嬭闃咃紒"); - var result = await RemoteMqttClient.SubscribeAsync (new MqttTopicFilter [] { topicFilterBusGateWayToClient, topicFilterPush2 }); + var result = await RemoteMqttClient.SubscribeAsync (new MqttTopicFilter [] { topicFilterBusGateWayToClient, topicFilterPush2, topicFilterPush3 }); if (result.Items [0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS0) { isSubscribeSuccess = true; Utlis.WriteLine ("璁㈤槄鎴愬姛锛�"); @@ -321,6 +335,11 @@ } else if (topic == $"/BusGateWayToClient/{CommonConfig.Current.HomeGatewayInfo.gatewayId}/NotifyBusGateWayInfoChange") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey //鏀跺埌缃戝叧涓婄嚎娑堟伅涓婚 ReceiveNotifyBusGateWayInfoChange (); + } else if (topic == $"/user/{CommonConfig.Current.HomeGatewayInfo.gatewayId}/custom/mqtt/secret/change") {//璁惧瀵嗛挜鏇存柊閫氱煡锛岄渶瑕佹洿鏂癮eskey + //璁惧瀵嗛挜鏇存柊閫氱煡 + HDLUtils.WriteLine ("璁惧瀵嗛挜鏇存柊閫氱煡"); + isGetGatewaySecretKey = false;//鑾峰彇瀵嗛挜鏍囪涓篺alse + GetGatewaySecretKey (); } else if (topic == $"/BusGateWayToClient/{CommonConfig.Current.HomeGatewayInfo.gatewayId}/NotifyGateWayOffline") {//缃戝叧鎺夌嚎 //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛� ReceiveNotifyGateWayOffline (); } else if (topic == $"/BusGateWayToClient/{CommonConfig.Current.HomeGatewayInfo.gatewayId}/Common/CheckGateway") { @@ -372,13 +391,16 @@ //} //(4)===========寮�濮嬭繛鎺ヨ繃绋�========== - //涔嬪墠宸茬粡鑾峰彇鍙傛暟鎴愬姛杩� - if (CommonConfig.Current.IfGetMqttInfoSuccess) { - //鍒ゆ柇鏄惁闇�瑕侀噸鏂拌幏鍙� - await CheckMQTTConnectAsync (); - } else { - //寮�濮嬭幏鍙栬繙绋嬭繛鎺ュ弬鏁� - await StartMQTTGetInfo (); + //4.1 濡傛灉娌¤幏鍙栬繃瀵嗛挜鍒欓噸鏂拌幏鍙栦竴娆�, 鑾峰彇涓�娆℃渶鏂扮殑瀵嗛挜 + if (isGetGatewaySecretKey || GetGatewaySecretKey ()) { + //涔嬪墠宸茬粡鑾峰彇鍙傛暟鎴愬姛杩� + if (CommonConfig.Current.IfGetMqttInfoSuccess) { + //鍒ゆ柇鏄惁闇�瑕侀噸鏂拌幏鍙� + await CheckMQTTConnectAsync (); + } else { + //寮�濮嬭幏鍙栬繙绋嬭繛鎺ュ弬鏁� + await StartMQTTGetInfo (); + } } } catch (Exception ex) { @@ -665,9 +687,6 @@ //#endif CheckIfNeedReadAllDeviceStatus (); } - - GetSingleHomeGatewayPaggerAndMQTTConnectAsync (false); - } catch { } } @@ -831,7 +850,7 @@ var mqttInfoRequestResult_Obj = HttpServerRequest.Current.GetMqttRemoteInfo (GetRandomKey ()); if (mqttInfoRequestResult_Obj != null) { CommonConfig.Current.mMqttInfo = mqttInfoRequestResult_Obj; - if (UserConfig.Instance.CheckHomeGatewaysNotEmpty()) { + if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) { //----绗簩姝ユ壘鍑烘槸鍚﹀瓨鍦ㄥ尮閰嶅綋鍓嶄綇瀹呯殑mac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆� CommonConfig.Current.HomeGatewayInfo = UserConfig.Instance.HomeGateway; if (CommonConfig.Current.HomeGatewayInfo != null) { @@ -848,13 +867,51 @@ } + /// <summary> - /// 鍒嗕韩浣忓畢 鑾峰彇褰撳墠浣忓畢缃戝叧淇℃伅骞朵笖杩炴帴MQTT 鎴栬�呭埛鏂� - /// 2020-03-17 + /// 璁惧瀵嗛挜鏇存柊閫氱煡锛岄噸鏂版嬁瀵嗛挜 /// </summary> - static async Task GetSingleHomeGatewayPaggerAndMQTTConnectAsync (bool bNeedConnect = true) + /// <returns></returns> + static bool GetGatewaySecretKey () { - + bool isSuccess = false; + try { + if (string.IsNullOrEmpty (UserConfig.Instance.CurrentRegion.Id)) return false; + var nowhomeId = UserConfig.Instance.CurrentRegion.Id; + var requestJson = HttpUtil.GetSignRequestJson (new HomeIdObj () { homeId = nowhomeId }); + var revertObj = HttpUtil.RequestHttpsPostFroHome (NewAPI.API_POST_GetGatewayList, requestJson); + if (revertObj.Code == StateCode.SUCCESS) { + var mHomeGatewayRes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<HomeGatewayInfo>> (revertObj.Data.ToString ()); + if (nowhomeId == UserConfig.Instance.CurrentRegion.Id) { + if (mHomeGatewayRes != null) { + if (mHomeGatewayRes.Count > 0) { + //鍙彇绗竴涓綇瀹� + var info = mHomeGatewayRes [0]; + UserConfig.Instance.HomeGateway = info; + UserConfig.Instance.SaveUserConfig (); + CommonConfig.Current.HomeGatewayInfo = info; + //鏇存柊缃戝叧淇℃伅鍜屽姞瀵咾ey + mqttEncryptKey = info.aesKey; + CommonConfig.Current.Save (); + isSuccess = true; + isGetGatewaySecretKey = true;//鑾峰彇瀵嗛挜鏍囪涓簍rue + + } else { + //鎵撳嵃閿欒 + HDLUtils.WriteLine ("gateway is not bound"); + } + } + } + } else { + //鎵撳嵃閿欒 + HDLUtils.WriteLine ("Failed to get gateway info"); + + } + return isSuccess; + } catch { + //return ""; + return isSuccess; + } } -- Gitblit v1.8.0