JLChen
2020-01-12 ac2ee45fadc64fe840bbba6264df3ca4622adb15
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
@@ -228,7 +228,7 @@
                            }
                            if (Control.ControlBytesSendHasReturn (Command.ReadDeviceLoopInfo, common.SubnetID, common.DeviceID, new byte [] { bigClass, minClass, (byte)k }) == null) {
                                j++;
                                //连续两次读取不到数据则跳出该循环
                                //连续两次读取不到数据则跳出该循环,代表设备离线2020-01-11
                                if (j == 2 && k == 2)
                                    break;
                            } else {
@@ -774,9 +774,6 @@
                        GatewaySettingSucceeded ();
                    }
                } catch (Exception ex) {
                    Console.WriteLine (ex.Message);
                    Application.RunOnMainThread (() => {
@@ -840,63 +837,6 @@
            return CheckIsSuccessfulWithBytes (backBytes);
        }
        /// <summary>
        /// 远程配置 Standard MQTT模式
        /// </summary>
        void RemoteSettingWithStandardMQTT ()
        {
            byte [] gatewayBytes = null;
            string [] strServerIP = (MainPage.SeviceIP).Split ('.');
            string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
            MainPage.Loading.Start ("Configuring device...");
            System.Threading.Tasks.Task.Run (() => {
                try {
                    //读取一端口交换机、无线网关的配置信息
                    gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
                    //连接类型配置为5 Standard MQTT模式
                    gatewayBytes [0] = TYPEStandardMQTT;//Standard MQTT
                    Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
                    //1.修改URL
                    //2.修改读取客户端ID,用户名,密码
                    //3.修改AES加密
                    //4.修改主题
                    //1.修改URL
                    if (SetGateWayURL ("https://developer.hdlcontrol.com/api/")) {
                        //2.修改客户端ID,用户名,密码
                        if (SetGateWayClientIDUsernamePassword ("85521566", "Admin", "85521566")) {
                            //3.修改AES加密
                            if (SetGateWayAESEncryption (true, "85521566")) {
                                //4.1修改订阅主题
                                if (SetGateWayTopic ("SubscribeTopic")) {
                                    //4.2修改发布主题
                                    if (SetGateWayTopic ("PublishTopic", true)) {
                                        //5.写配置成功后下一步操作
                                        GatewaySettingSucceeded ();
                                    }
                                }
                            }
                        }
                    }
                } catch (Exception ex) {
                    Console.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 ();
        }
        /// <summary>
        /// 判断是否修复成功 F8 = 成功; F5=失败
        /// </summary>
@@ -919,82 +859,6 @@
                });
                return false;
            }
        }
        /// <summary>
        /// 修改URL
        /// </summary>
        /// <returns></returns>
        bool SetGateWayURL (string urlStr = "", int pointID = 1883)
        {
            byte [] sendBytes = new byte [63];
            byte [] url = CommonPage.MyEncodingGB2312.GetBytes (urlStr);
            Array.Copy (url, 0, sendBytes, 1, 60 < url.Length ? 60 : url.Length);
            sendBytes [0] = GuideSettingGateway.TYPEStandardMQTT;
            sendBytes [61] = Convert.ToByte (pointID / 256);
            sendBytes [62] = Convert.ToByte (pointID % 256);
            var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayURL, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
            return CheckIsSuccessfulWithBytes (backBytes);
        }
        /// <summary>
        /// 修改客户端ID,用户名,密码
        /// </summary>
        /// <returns></returns>
        bool SetGateWayClientIDUsernamePassword (string clientIDStr = "", string usernameStr = "", string passwordStr = "")
        {
            byte [] userInfoBytes = new byte [64];
            byte [] clientID = CommonPage.MyEncodingGB2312.GetBytes (clientIDStr);
            Array.Copy (clientID, 0, userInfoBytes, 0, 32 < clientID.Length ? 32 : clientID.Length);
            byte [] username = CommonPage.MyEncodingGB2312.GetBytes (usernameStr);
            Array.Copy (username, 0, userInfoBytes, 32, 16 < username.Length ? 16 : username.Length);
            byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
            Array.Copy (password, 0, userInfoBytes, 48, 16 < password.Length ? 16 : password.Length);
            var setUserInfoBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayClientIDUsernamePassword, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, userInfoBytes);
            return CheckIsSuccessfulWithBytes (setUserInfoBytes);
        }
        /// <summary>
        /// 修改AES加密
        /// </summary>
        /// <returns></returns>
        bool SetGateWayAESEncryption (bool enable = false, string passwordStr = "")
        {
            byte [] sendBytes = new byte [17];
            sendBytes [0] = enable ? (byte)1 : (byte)0; //0:不使能  1 - 255:使能
            byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
            Array.Copy (password, 0, sendBytes, 1, 16 < password.Length ? 16 : password.Length);
            var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAESEncryption, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
            return CheckIsSuccessfulWithBytes (backBytes);
        }
        /// <summary>
        /// 修改主题
        /// </summary>
        /// <param name="bPublish">是否为发布主题</param>
        /// <param name="bDefault">是否默认</param>
        /// <returns></returns>
        bool SetGateWayTopic (string topicInfoStr = "", bool bPublish = false, bool bDefault = false)
        {
            byte [] sendBytes = new byte [50];
            sendBytes [0] = bPublish ? (byte)2 : (byte)1; //1:订阅  2:发布
            sendBytes [1] = bDefault ? (byte)0 : (byte)1; //1:非默认 0:默认
            byte [] topicInfo = CommonPage.MyEncodingGB2312.GetBytes (topicInfoStr);
            Array.Copy (topicInfo, 0, sendBytes, 2, 48 < topicInfo.Length ? 48 : topicInfo.Length);
            var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayTopic, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
            if (backBytes != null && backBytes.Length >= 2) {
                if (backBytes [0] == sendBytes [0] && backBytes [1] == sendBytes [1]) {
                    return true;
                }
            }
            return CheckIsSuccessfulWithBytes (backBytes);
        }
@@ -1043,10 +907,9 @@
            IO.FileUtils.SaveEquipmentMessage (gatewayDeicve);
            var gatewayMAC = gatewayDeicve.MAC.Replace (".", "");
            var oldMac = "";
            if (UserConfig.Instance.CheckHomeGateways () && !string.IsNullOrEmpty (UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId)) {
                //修改MAC接口
            //2020-01-11
            if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) {
                //当前住宅存在Mac 修改MAC接口
                oldMac = UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId;
                if(oldMac == gatewayMAC) {//和绑定mac一致,不用修改
                    AddMacToUserConfig (gatewayMAC);
@@ -1070,6 +933,7 @@
                //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.Id, MAC = gatewayMAC, IsReBind = true });
                var respone = MainPage.RequestHttps (API.UpdateMac, requestJson, urlHead);
                if (respone.StateCode.ToUpper () != "SUCCESS") {
                    GetNowHomeGatewayAfterBindMacFailed ();//2020-01-11
                    Application.RunOnMainThread (() => {
                        new Alert ("", "Failed to update Mac address, gateway binding failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
@@ -1100,6 +964,7 @@
                //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.Id, MAC = gatewayMAC, IsReBind = true });
                var respone = MainPage.RequestHttps (API.BindGatewayToHome, requestJson, urlHead);
                if (respone.StateCode.ToUpper () != "SUCCESS" && respone.StateCode != "BindGatewaysExists") {
                    GetNowHomeGatewayAfterBindMacFailed ();//2020-01-11
                    Application.RunOnMainThread (() => {
                        new Alert ("", "Failed to bind Mac address, gateway binding failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
@@ -1163,6 +1028,38 @@
        }
        /// <summary>
        /// 绑定失败之后,查询刷新一次当前住宅 网关列表
        /// 2020-01-11
        /// </summary>
        void GetNowHomeGatewayAfterBindMacFailed ()
        {
            var requestObj3 = new GetSingleHomeGatewayPaggerObj ();
            requestObj3.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
            requestObj3.ReqDto.HomeId = UserConfig.Instance.CurrentRegion.Id;
            requestObj3.ReqDto.PageSetting.Page = 1;
            requestObj3.ReqDto.PageSetting.PageSize = 10;
            string urlHead = MainPage.RequestHttpsHost;
            if (requestObj3.IsOtherAccountCtrl) {
                urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
                requestObj3.ReqDto.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
            }
            var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
            var revertObj3 = MainPage.RequestHttps (API.GetSingleHomeGatewayPagger, requestJson3, urlHead);
            if (revertObj3.StateCode.ToUpper () == "SUCCESS") {
                var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetGatewayResult> (revertObj3.ResponseData.ToString ());
                //2020-01-11
                UserConfig.Instance.SetNowHomeGateways (infoResult.PageData);
            }
        }
        ///// <summary>
        ///// 查询当前住宅 网关列表
        ///// </summary>
@@ -1222,27 +1119,163 @@
        /// <summary>
        ///
        /// </summary>
        /// <param name="stateCodeStr"></param>
        void ShowGetAllBindGatewarysPaggerErrorInfo (string stateCodeStr)
        {
            string mes = "";
            //2020-01-06 待补充
            if (stateCodeStr == ErrorCode.NetworkError) {
                mes = ErrorCode.NetworkError;
            } else {
                mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr;
        ///// <summary>
        /////
        ///// </summary>
        ///// <param name="stateCodeStr"></param>
        //void ShowGetAllBindGatewarysPaggerErrorInfo (string stateCodeStr)
        //{
        //    string mes = "";
        //    //2020-01-06 待补充
        //    if (stateCodeStr == ErrorCode.NetworkError) {
        //        mes = ErrorCode.NetworkError;
        //    } else {
        //        mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr;
            }
            if (!string.IsNullOrEmpty (mes)) {
                Application.RunOnMainThread (() => {
                    new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
            }
        //    }
        //    if (!string.IsNullOrEmpty (mes)) {
        //        Application.RunOnMainThread (() => {
        //            new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //        });
        //    }
        }
        //}
        //*****************StandardMQTT 配置方式 目前用不上*****************
        ///// <summary>
        ///// 远程配置 Standard MQTT模式
        ///// </summary>
        //void RemoteSettingWithStandardMQTT ()
        //{
        //    byte [] gatewayBytes = null;
        //    string [] strServerIP = (MainPage.SeviceIP).Split ('.');
        //    string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
        //    MainPage.Loading.Start ("Configuring device...");
        //    System.Threading.Tasks.Task.Run (() => {
        //        try {
        //            //读取一端口交换机、无线网关的配置信息
        //            gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
        //            //连接类型配置为5 Standard MQTT模式
        //            gatewayBytes [0] = TYPEStandardMQTT;//Standard MQTT
        //            Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
        //            //1.修改URL
        //            //2.修改读取客户端ID,用户名,密码
        //            //3.修改AES加密
        //            //4.修改主题
        //            //1.修改URL
        //            if (SetGateWayURL ("https://developer.hdlcontrol.com/api/")) {
        //                //2.修改客户端ID,用户名,密码
        //                if (SetGateWayClientIDUsernamePassword ("85521566", "Admin", "85521566")) {
        //                    //3.修改AES加密
        //                    if (SetGateWayAESEncryption (true, "85521566")) {
        //                        //4.1修改订阅主题
        //                        if (SetGateWayTopic ("SubscribeTopic")) {
        //                            //4.2修改发布主题
        //                            if (SetGateWayTopic ("PublishTopic", true)) {
        //                                //5.写配置成功后下一步操作
        //                                GatewaySettingSucceeded ();
        //                            }
        //                        }
        //                    }
        //                }
        //            }
        //        } catch (Exception ex) {
        //            Console.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 ();
        //}
        ///// <summary>
        ///// 修改URL
        ///// </summary>
        ///// <returns></returns>
        //bool SetGateWayURL (string urlStr = "", int pointID = 1883)
        //{
        //    byte [] sendBytes = new byte [63];
        //    byte [] url = CommonPage.MyEncodingGB2312.GetBytes (urlStr);
        //    Array.Copy (url, 0, sendBytes, 1, 60 < url.Length ? 60 : url.Length);
        //    sendBytes [0] = GuideSettingGateway.TYPEStandardMQTT;
        //    sendBytes [61] = Convert.ToByte (pointID / 256);
        //    sendBytes [62] = Convert.ToByte (pointID % 256);
        //    var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayURL, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
        //    return CheckIsSuccessfulWithBytes (backBytes);
        //}
        ///// <summary>
        ///// 修改客户端ID,用户名,密码
        ///// </summary>
        ///// <returns></returns>
        //bool SetGateWayClientIDUsernamePassword (string clientIDStr = "", string usernameStr = "", string passwordStr = "")
        //{
        //    byte [] userInfoBytes = new byte [64];
        //    byte [] clientID = CommonPage.MyEncodingGB2312.GetBytes (clientIDStr);
        //    Array.Copy (clientID, 0, userInfoBytes, 0, 32 < clientID.Length ? 32 : clientID.Length);
        //    byte [] username = CommonPage.MyEncodingGB2312.GetBytes (usernameStr);
        //    Array.Copy (username, 0, userInfoBytes, 32, 16 < username.Length ? 16 : username.Length);
        //    byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
        //    Array.Copy (password, 0, userInfoBytes, 48, 16 < password.Length ? 16 : password.Length);
        //    var setUserInfoBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayClientIDUsernamePassword, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, userInfoBytes);
        //    return CheckIsSuccessfulWithBytes (setUserInfoBytes);
        //}
        ///// <summary>
        ///// 修改AES加密
        ///// </summary>
        ///// <returns></returns>
        //bool SetGateWayAESEncryption (bool enable = false, string passwordStr = "")
        //{
        //    byte [] sendBytes = new byte [17];
        //    sendBytes [0] = enable ? (byte)1 : (byte)0; //0:不使能  1 - 255:使能
        //    byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
        //    Array.Copy (password, 0, sendBytes, 1, 16 < password.Length ? 16 : password.Length);
        //    var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAESEncryption, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
        //    return CheckIsSuccessfulWithBytes (backBytes);
        //}
        ///// <summary>
        ///// 修改主题
        ///// </summary>
        ///// <param name="bPublish">是否为发布主题</param>
        ///// <param name="bDefault">是否默认</param>
        ///// <returns></returns>
        //bool SetGateWayTopic (string topicInfoStr = "", bool bPublish = false, bool bDefault = false)
        //{
        //    byte [] sendBytes = new byte [50];
        //    sendBytes [0] = bPublish ? (byte)2 : (byte)1; //1:订阅  2:发布
        //    sendBytes [1] = bDefault ? (byte)0 : (byte)1; //1:非默认 0:默认
        //    byte [] topicInfo = CommonPage.MyEncodingGB2312.GetBytes (topicInfoStr);
        //    Array.Copy (topicInfo, 0, sendBytes, 2, 48 < topicInfo.Length ? 48 : topicInfo.Length);
        //    var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayTopic, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
        //    if (backBytes != null && backBytes.Length >= 2) {
        //        if (backBytes [0] == sendBytes [0] && backBytes [1] == sendBytes [1]) {
        //            return true;
        //        }
        //    }
        //    return CheckIsSuccessfulWithBytes (backBytes);
        //}
    }
}