From 4c993fcb71b92f8e9837ca8f50f3b5e8f9c59cfe Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期三, 20 一月 2021 19:47:04 +0800 Subject: [PATCH] 2021-01-20 1.更新。2.增加写域名配置操作。 --- Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs | 269 +++++++++++++++++++++++++++++++---------------------- 1 files changed, 156 insertions(+), 113 deletions(-) diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs index 2f278d8..156c47f 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs @@ -157,7 +157,7 @@ RemoteSettingWithHDLMQTT (); } else { Utlis.WriteLine ("Assign OnePortWirelessFR"); - RemoteSettingWithOldDevice (); + //RemoteSettingWithOldDevice (); //RemoteSettingWithMQTT (); } } @@ -602,134 +602,134 @@ - /// <summary> - /// 杩滅▼閰嶇疆 - /// </summary> - void RemoteSettingWithOldDevice () - { - byte [] gatewayBytes = null; - byte [] serverIPBytes = null; + ///// <summary> + ///// 杩滅▼閰嶇疆 + ///// </summary> + //void RemoteSettingWithOldDevice () + //{ + // byte [] gatewayBytes = null; + // byte [] serverIPBytes = null; - string [] strServerIP = (MainPage.SeviceIP).Split ('.'); - string [] strServerIP1 = (MainPage.SeviceIP).Split ('.'); - MainPage.Loading.Start ("Configuring device..."); - System.Threading.Tasks.Task.Run (() => { - try { + // string [] strServerIP = (MainPage.SeviceIP).Split ('.'); + // string [] strServerIP1 = (MainPage.SeviceIP).Split ('.'); + // MainPage.Loading.Start ("Configuring device..."); + // System.Threading.Tasks.Task.Run (() => { + // try { - //var currentRegionIdBytes = new byte [] { - // (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256 / 256), - // (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256), - // (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256), - // (byte)(UserConfig.Instance.CurrentRegion.RegionID % 256), - //}; + // //var currentRegionIdBytes = new byte [] { + // // (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256 / 256), + // // (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256), + // // (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256), + // // (byte)(UserConfig.Instance.CurrentRegion.RegionID % 256), + // //}; - //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID); + // //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID); - byte [] RegionIDBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ()); - var currentRegionIdBytes = new byte [4]; - Array.Copy (RegionIDBytes, 0, currentRegionIdBytes, 0, 4 < RegionIDBytes.Length ? 4 : RegionIDBytes.Length); + // byte [] RegionIDBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ()); + // var currentRegionIdBytes = new byte [4]; + // Array.Copy (RegionIDBytes, 0, currentRegionIdBytes, 0, 4 < RegionIDBytes.Length ? 4 : RegionIDBytes.Length); - gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { }); - serverIPBytes = Control.ControlBytesSendHasReturn (Command.ReadGatewayServerIP, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { }); + // gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { }); + // serverIPBytes = Control.ControlBytesSendHasReturn (Command.ReadGatewayServerIP, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { }); - gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName; - gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName; - gatewayDeicve.Remote_UserName = "Admin"; - gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.ID; - byte [] ggn = new byte [20]; - byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName); - gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1); - Array.Copy (b1, 0, ggn, 0, 20 < b1.Length ? 20 : b1.Length); + // gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName; + // gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName; + // gatewayDeicve.Remote_UserName = "Admin"; + // gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.ID; + // byte [] ggn = new byte [20]; + // byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName); + // gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1); + // Array.Copy (b1, 0, ggn, 0, 20 < b1.Length ? 20 : b1.Length); - byte [] gpn = new byte [20]; - byte [] b2 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_ProjectName); - Array.Copy (b2, 0, gpn, 0, 20 < b2.Length ? 20 : b2.Length); + // byte [] gpn = new byte [20]; + // byte [] b2 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_ProjectName); + // Array.Copy (b2, 0, gpn, 0, 20 < b2.Length ? 20 : b2.Length); - byte [] gun = new byte [8]; - byte [] b3 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_UserName); - Array.Copy (b3, 0, gun, 0, 8 < b3.Length ? 8 : b3.Length); + // byte [] gun = new byte [8]; + // byte [] b3 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_UserName); + // Array.Copy (b3, 0, gun, 0, 8 < b3.Length ? 8 : b3.Length); - byte [] gpw = new byte [8]; - byte [] b4 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_Password); - Array.Copy (b4, 0, gpw, 0, 8 < b4.Length ? 8 : b4.Length); + // byte [] gpw = new byte [8]; + // byte [] b4 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_Password); + // Array.Copy (b4, 0, gpw, 0, 8 < b4.Length ? 8 : b4.Length); - byte [] macAddress = Control.ControlBytesSendHasReturn (Command.ReadDeviceMac, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { }); + // byte [] macAddress = Control.ControlBytesSendHasReturn (Command.ReadDeviceMac, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { }); - gatewayBytes [0] = 2;//杩滅▼鏍囩ず - Array.Copy (ggn, 0, gatewayBytes, 1, 20 < ggn.Length ? 20 : ggn.Length); - Array.Copy (gpn, 0, gatewayBytes, 21, 20 < gpn.Length ? 20 : gpn.Length); - Array.Copy (gun, 0, gatewayBytes, 41, 8 < gun.Length ? 8 : gun.Length); - Array.Copy (gpw, 0, gatewayBytes, 49, 8 < gpw.Length ? 8 : gpw.Length); + // gatewayBytes [0] = 2;//杩滅▼鏍囩ず + // Array.Copy (ggn, 0, gatewayBytes, 1, 20 < ggn.Length ? 20 : ggn.Length); + // Array.Copy (gpn, 0, gatewayBytes, 21, 20 < gpn.Length ? 20 : gpn.Length); + // Array.Copy (gun, 0, gatewayBytes, 41, 8 < gun.Length ? 8 : gun.Length); + // Array.Copy (gpw, 0, gatewayBytes, 49, 8 < gpw.Length ? 8 : gpw.Length); - Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes); + // Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes); - serverIPBytes [0] = Convert.ToByte (strServerIP [0]); - serverIPBytes [1] = Convert.ToByte (strServerIP [1]); - serverIPBytes [2] = Convert.ToByte (strServerIP [2]); - serverIPBytes [3] = Convert.ToByte (strServerIP [3]); - int point1 = 9999; + // serverIPBytes [0] = Convert.ToByte (strServerIP [0]); + // serverIPBytes [1] = Convert.ToByte (strServerIP [1]); + // serverIPBytes [2] = Convert.ToByte (strServerIP [2]); + // serverIPBytes [3] = Convert.ToByte (strServerIP [3]); + // int point1 = 9999; - serverIPBytes [4] = Convert.ToByte (point1 / 256); - serverIPBytes [5] = Convert.ToByte (point1 % 256); + // serverIPBytes [4] = Convert.ToByte (point1 / 256); + // serverIPBytes [5] = Convert.ToByte (point1 % 256); - serverIPBytes [6] = Convert.ToByte (strServerIP1 [0]); - serverIPBytes [7] = Convert.ToByte (strServerIP1 [1]); - serverIPBytes [8] = Convert.ToByte (strServerIP1 [2]); - serverIPBytes [9] = Convert.ToByte (strServerIP1 [3]); - int point2 = 9999; + // serverIPBytes [6] = Convert.ToByte (strServerIP1 [0]); + // serverIPBytes [7] = Convert.ToByte (strServerIP1 [1]); + // serverIPBytes [8] = Convert.ToByte (strServerIP1 [2]); + // serverIPBytes [9] = Convert.ToByte (strServerIP1 [3]); + // int point2 = 9999; - serverIPBytes [10] = Convert.ToByte (point2 / 256); - serverIPBytes [11] = Convert.ToByte (point2 % 256); + // serverIPBytes [10] = Convert.ToByte (point2 / 256); + // serverIPBytes [11] = Convert.ToByte (point2 % 256); - //杩滅▼ip鍦板潃鐨勮缃� - var mobytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInternetInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, serverIPBytes); - if (mobytes == null) { - Application.RunOnMainThread (() => { - new Alert ("", ErrorCode.GatewayNoResponse, - Language.StringByID (R.MyInternationalizationString.Close)).Show (); - }); - } else if (mobytes [0] == 0xF5) { - Application.RunOnMainThread (() => { - new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), - Language.StringByID (R.MyInternationalizationString.Close)).Show (); - }); - } else { - if (gatewayDeicve.Type == DeviceType.OnePortWirelessFR) { - var bindReginIdStatus = Control.ControlBytesSendHasReturn (Command.Write_APP_Data_STORE_1D5E_CMD, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, currentRegionIdBytes); - if (bindReginIdStatus == null) { - Application.RunOnMainThread (() => { - new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show (); - }); - return; - } else if (bindReginIdStatus [0] != 0xF8) { - //new Alert ("", "缃戝叧缁戝畾浣忓畢澶辫触锛�", Language.StringByID (R.MyInternationalizationString.Close)).Show (); - Application.RunOnMainThread (() => { - new Alert ("", "Gateway failed to bind residence!", Language.StringByID (R.MyInternationalizationString.Close)).Show (); - }); - return; - } - } - GotoHomePage (); - } - } catch (Exception ex) { - Utlis.WriteLine (ex.Message); - Application.RunOnMainThread (() => { - new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show (); - }); - bool canRemove = false; - } finally { - Application.RunOnMainThread (() => { - MainPage.Loading.Hide (); - //this.RemoveAll (); - }); - } - }); - //Room.InitAllRoom (); - } + // //杩滅▼ip鍦板潃鐨勮缃� + // var mobytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInternetInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, serverIPBytes); + // if (mobytes == null) { + // Application.RunOnMainThread (() => { + // new Alert ("", ErrorCode.GatewayNoResponse, + // Language.StringByID (R.MyInternationalizationString.Close)).Show (); + // }); + // } else if (mobytes [0] == 0xF5) { + // Application.RunOnMainThread (() => { + // new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), + // Language.StringByID (R.MyInternationalizationString.Close)).Show (); + // }); + // } else { + // if (gatewayDeicve.Type == DeviceType.OnePortWirelessFR) { + // var bindReginIdStatus = Control.ControlBytesSendHasReturn (Command.Write_APP_Data_STORE_1D5E_CMD, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, currentRegionIdBytes); + // if (bindReginIdStatus == null) { + // Application.RunOnMainThread (() => { + // new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show (); + // }); + // return; + // } else if (bindReginIdStatus [0] != 0xF8) { + // //new Alert ("", "缃戝叧缁戝畾浣忓畢澶辫触锛�", Language.StringByID (R.MyInternationalizationString.Close)).Show (); + // Application.RunOnMainThread (() => { + // new Alert ("", "Gateway failed to bind residence!", Language.StringByID (R.MyInternationalizationString.Close)).Show (); + // }); + // return; + // } + // } + // GotoHomePage (); + // } + // } catch (Exception ex) { + // Utlis.WriteLine (ex.Message); + // Application.RunOnMainThread (() => { + // new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show (); + // }); + // bool canRemove = false; + // } finally { + // Application.RunOnMainThread (() => { + // MainPage.Loading.Hide (); + // //this.RemoveAll (); + // }); + // } + // }); + // //Room.InitAllRoom (); + //} @@ -757,8 +757,11 @@ if (SetGateWayModelInfo()) { //2.淇敼绠$悊淇℃伅 if (SetGateWayAdminInfo ()) { - //3.鍐欓厤缃垚鍔熷悗涓嬩竴姝ユ搷浣� - GatewaySettingSucceeded (); + //3.鍐橫qtt杩滅▼鍩熷悕鍦板潃 + if (SetGateWayMqttUrlAddress ()) { + //4.鍐欓厤缃垚鍔熷悗涓嬩竴姝ユ搷浣� + GatewaySettingSucceeded (); + } } } @@ -846,10 +849,9 @@ /// <returns></returns> bool SetGateWayAdminInfo () { - byte [] name = CommonPage.MyEncodingGB2312.GetBytes (MainPage.LoginUser.AccountString); - //byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID); + //byte [] name = CommonPage.MyEncodingGB2312.GetBytes (MainPage.LoginUser.AccountString); + byte [] name = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.HomeGateway.gatewayId);//甯愬彿鍚嶆敼鎴恎atewayId byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ()); - //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID); byte [] adminBytes = new byte [73]; adminBytes [36] = 1;//浣忓畢鏍囧織浣� Array.Copy (name, 0, adminBytes, 0, 36 < name.Length ? 36 : name.Length); @@ -861,6 +863,47 @@ } /// <summary> + /// + /// </summary> + /// <param name="bytes"></param> + /// <returns></returns> + private byte GetCheckSum (byte [] bytes) + { + //byte checksum = 0x00; + //foreach (byte bt in bytes) { + // checksum ^= bt; + //} + + int iSum = 0; + for (int i = 0; i < bytes.Length; i++) { + iSum += bytes [i]; + } + return (byte)(0xff & (0x100 - iSum)); + } + + /// <summary> + /// 淇敼Mqtt鍩熷悕鍦板潃 + /// </summary> + /// <returns></returns> + bool SetGateWayMqttUrlAddress () + { + byte [] utlBytes = new byte [65]; + var url = new Uri (UserConfig.Instance.CurrentRegion.regionUrl); + var host = ""; + if (url != null) { + host = url.Host; + } + byte [] hostBytes = CommonPage.MyEncodingGB2312.GetBytes (host); + Array.Copy (hostBytes, 0, utlBytes, 0, 64 < hostBytes.Length ? 64 : hostBytes.Length); + var sum = GetCheckSum (hostBytes); + utlBytes [64] = sum;//鏍¢獙浣� + byte [] backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayMqttURLAddress, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, utlBytes); + + return CheckIsSuccessfulWithBytes (backBytes, "Failed to modify gateway remote address!"); + } + + + /// <summary> /// 鍒ゆ柇鏄惁淇鎴愬姛 F8 = 鎴愬姛锛� F5=澶辫触 /// </summary> /// <param name="backBytes"></param> -- Gitblit v1.8.0