CrabtreeOn,印度客户定制APP,迁移2.0平台版本
JLChen
2021-01-20 4c993fcb71b92f8e9837ca8f50f3b5e8f9c59cfe
2021-01-20 1.更新。2.增加写域名配置操作。
7个文件已修改
569 ■■■■ 已修改文件
Crabtree/.vs/SmartHome/xs/UserPrefs.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs 260 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/SmartHome/HDL/Operation/Control.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/SmartHome/HDL/Operation/MyEnum.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Crabtree/.vs/SmartHome/xs/UserPrefs.xml
@@ -1,27 +1,23 @@
<Properties StartupConfiguration="{1D83BF28-BA88-4152-BA41-D7EFE90A5437}|Default">
  <MonoDevelop.Ide.ItemProperties.ON.Droid PreferredExecutionTarget="Android.Android_Accelerated_Oreo" />
  <MonoDevelop.Ide.Workbench ActiveDocument="SmartHome/HDL/Common/HttpUtil/HttpUtil.cs">
    <Files>
      <File FileName="SmartHome/HDL/Common/HDLLinkUtlis.cs" Line="56" Column="20" />
      <File FileName="SmartHome/HDL/Common/HttpUtil/HttpUtil.cs" Line="521" Column="46" />
    </Files>
  <MonoDevelop.Ide.Workbench>
    <Pads>
      <Pad Id="ProjectPad">
        <State name="__root__">
          <Node name="SmartHome" expanded="True">
          <Node name="SmartHome" expanded="True" selected="True">
            <Node name="ON.Droid" expanded="True" />
            <Node name="ON.Ios" expanded="True" />
            <Node name="Shared" expanded="True">
              <Node name="HDL" expanded="True">
                <Node name="Common" expanded="True">
                  <Node name="HttpUtil" expanded="True">
                    <Node name="HttpUtil.cs" selected="True" />
                  </Node>
                <Node name="Common" expanded="True" />
                <Node name="Operation" expanded="True">
                  <Node name="Device" expanded="True" />
                </Node>
              </Node>
              <Node name="UI" expanded="True">
                <Node name="SimpleControl" expanded="True">
                  <Node name="Phone" expanded="True" />
                  <Node name="Phone" expanded="True">
                    <Node name="Guide" expanded="True" />
                  </Node>
                </Node>
              </Node>
            </Node>
@@ -38,8 +34,8 @@
    <String>IosService/IosService.csproj</String>
    <String>DroidService/DroidService.csproj</String>
  </DisabledProjects>
  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhone" />
  <MonoDevelop.Ide.ItemProperties.ON.Ios PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.00008030-00014C392121802E" />
  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhoneSimulator" />
  <MonoDevelop.Ide.ItemProperties.ON.Ios PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget.08FD445C-3EE8-4ED2-BF28-B42ADD0DA92C" />
  <MonoDevelop.Ide.DebuggingService.Breakpoints>
    <BreakpointStore />
  </MonoDevelop.Ide.DebuggingService.Breakpoints>
Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs
@@ -27,6 +27,9 @@
//        }
//        #endregion
//        /// <summary>
//        /// 将在线设备转换成sid + 属性列表
//        /// </summary>
@@ -51,13 +54,13 @@
//                }
//                if (onlineDevice.bytSimpleParam != null && onlineDevice.bytSimpleParam.Length > 0) {
//                    for (int intI = 0; intI < onlineDevice.bytSimpleParam.Length / 3; intI++) {
//                        Byte BigType = onlineDevice.bytSimpleParam [0 + intI * 3];
//                        Byte SmallType = onlineDevice.bytSimpleParam [1 + intI * 3];
//                        byte BigType = onlineDevice.bytSimpleParam [0 + intI * 3];
//                        byte SmallType = onlineDevice.bytSimpleParam [1 + intI * 3];
//                        int Count = onlineDevice.bytSimpleParam [2 + intI * 3];
//                        if (Count > 0) {
//                            for (int j = 1; j <= Count; j++) {
//                                Sid tmpSid = new Sid ();
//                                tmpSid.sid = HDLSysPF.FormingNewSid (onlineDevice.DeviceType, sOid, j, false, BigType, SmallType);
//                                tmpSid.sid = HDLSysPF.FormingNewSid (onlineDevice.Type, sOid, j, false, BigType, SmallType);
//                                tmpSid.oid = sOid;
//                                try {
@@ -181,50 +184,116 @@
//        /// </summary>
//        /// <param name="iDeviceType"></param>
//        /// <returns></returns>
//        public string FormingNewOid (int iDeviceType)
//        public string FormingNewOid (DeviceType deviceType)
//        {
//            string sOid = "";
//            try {
//                //1.生成 厂商 + 通讯方式
//                string sOidBeginsWith = "000101";//厂商 + 通讯方式
//                long sTimeSp = HDLSysPF.ConvertDateTimeLong ();
//                //2.生成产品时间戳
//                long sTimeSp = ConvertDateTimeLong (); //以2020年1月1日算出的时间戳0.1s为单位
//                string sTimeSpan = "";
//                GateWay.ConvertIntToByteArray (sTimeSp, ref sTimeSpan);
//                ConvertIntToByteArray (sTimeSp, ref sTimeSpan);
//                if (sTimeSpan.Length != 8) return sOid;
//                HDLUDP.TimeBetwnNext (10);
//                sOid = sOidBeginsWith + sTimeSpan;
//                if (iDeviceType == 00
//                    || DimmerDeviceTypeList.HDLDimmerDeviceTypeList.Contains (iDeviceType)
//                 || DMXDeviceTypeList.HDLDMXDeviceTypeList.Contains (iDeviceType))//调光器 20200730类
//                {
//                    sOid += "01";
//                } else if (RelayDeviceTypeList.HDLRelayDeviceTypeList.Contains (iDeviceType))//继电器类
//                  {
//                    sOid += "02";
//                } else if (CurtainDeviceType.HDLCurtainModuleDeviceType.Contains (iDeviceType))//遮阳类(窗帘)
//                  {
//                    sOid += "03";
//                } else if (HVACModuleDeviceTypeList.HDLHVACModuleDeviceTypeLists.Contains (iDeviceType) || FloorheatingDeviceTypeList.HDLFloorHeatingDeviceType.Contains (iDeviceType))//恒温器(空调)
//                  {
//                    sOid += "12";
//                } else if (AudioDeviceTypeList.AudioBoxDeviceTypeList.Contains (iDeviceType)) {
//                    sOid += "10";
//                } else if (Eightin1DeviceTypeList.HDL8in1DeviceType.Contains (iDeviceType)
//                      || Sevenin1DeviceTypeList.HDL7in1DeviceType.Contains (iDeviceType)
//                      || Twelvein1DeviceTypeList.HDL12in1DeviceType.Contains (iDeviceType))//传感器类
//                  {
//                    sOid += "04";
//                } else {
//                    sOid += "07"; //网关产品
//                }
//                //延迟10ms
//                //3.生成产品类别
//                var productType = GetProductType (deviceType);
//                sOid = sOidBeginsWith + sTimeSpan + productType;
//                return sOid;
//            } catch {
//                return sOid;
//            }
//        }
//        /// <summary>
//        /// 获取产品类别
//        //产品类别 1byte
//        //编号   描述
//        //01    调光器
//        //02    继电器
//        //03    干接点模块
//        //04    传感器
//        //05    面板
//        //06    RCU
//        //07    网关
//        //08    红外发射
//        //09    Android屏
//        //10    场景
//        //11    音乐播放器
//        //12    232/485转换器
//        //21    自动化
//        //22    安防防区
//        //14    窗帘模块
//        //15    HVAC
//        //16    地热模块
//        /// </summary>
//        /// <param name="deviceType"></param>
//        /// <returns></returns>
//        public string GetProductType (DeviceType deviceType)
//        {
//            string productType = "";
//            switch (deviceType) {
//            case DeviceType.LightDimming:
//                productType = "01";//01    调光器
//                break;
//            case DeviceType.LightSwitch:
//                productType = "02";//02 继电器类
//                break;
//            case DeviceType.CurtainModel:
//            case DeviceType.CurtainRoller:
//            case DeviceType.CurtainTrietex:
//                productType = "03";//03    遮阳类(窗帘)
//                break;
//            case DeviceType.SensorWindSpeed:
//                productType = "04";//04    传感器)
//                break;
//            case DeviceType.OnePortWirelessFR:
//            case DeviceType.OnePortBus:
//            case DeviceType.RCU:
//            case DeviceType.SuperWireless:
//            case DeviceType.OnePortMqttFR:
//                productType = "07";//07    网关类
//                break;
//            case DeviceType.ACPanel:
//            case DeviceType.ACDevice:
//            case DeviceType.ACInfrared:
//            case DeviceType.ACCoolmaster:
//            case DeviceType.CustomAC:
//            case DeviceType.HVAC:
//            case DeviceType.FoolHeat:
//            case DeviceType.FoolHeatPanel:
//                productType = "12";//12 恒温器(空调、地热)
//                break;
//            }
//            return productType;
//        }
//        /// <summary>
//        /// 获取生成物理模型参数
//        /// </summary>
//        /// <param name="deviceType"></param>
//        /// <returns></returns>
//        public string GetPhysicalModelType (DeviceType deviceType)
//        {
//            string productType = "";
//            switch (deviceType) {
//            case DeviceType.LightDimming:
//                productType = "0101";
//                break;
//            }
//            return productType;
//        }
//        /// <summary>
//        /// 生成功能设备Sid
@@ -300,6 +369,33 @@
//            }
//        }
//        private long LastTime = 0;
//        /// <summary>
//        /// DateTime时间格式转换为13位带毫秒的Unix时间戳
//        /// </summary>
//        /// <param name="time"> DateTime时间格式</param>
//        /// <returns>Unix时间戳格式</returns>
//        public long ConvertDateTimeLong ()
//        {
//            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime (new System.DateTime (2020, 1, 1));
//            long l = (long)(Math.Round ((DateTime.Now - startTime).TotalSeconds, 1) * 10);
//            if (l <= LastTime) l = LastTime + 1;
//            LastTime = l;
//            return l;
//        }
//        public bool ConvertIntToByteArray (long m, ref string strTmp)
//        {
//            strTmp = "00000000";
//            byte [] arry = new byte [4];
//            arry [0] = (byte)(m & 0xFF);
//            arry [1] = (byte)((m & 0xFF00) >> 8);
//            arry [2] = (byte)((m & 0xFF0000) >> 16);
//            arry [3] = (byte)((m & 0xFF000000) >> 24);
//            strTmp = arry [0].ToString ("X2") + arry [1].ToString ("X2") + arry [2].ToString ("X2") + arry [3].ToString ("X2");
//            return true;
//        }
//    }
@@ -349,7 +445,7 @@
//    {
//        public string sid { get; set; }
//        public string name { get; set; }
//        public string[] uids { get; set; }
//        public string [] uids { get; set; }
//        public string spk { get; set; }
//        public string oid { get; set; }  //设备模块地址
@@ -370,3 +466,97 @@
//    }
//}
////sid组成部分:
////sid
////来源    厂商代码    通讯方式    产品时间戳    产品类别    物模型类    通道号    大小类别
////1byte    1byte    1byte    4byte    1byte    2byte    2byte    2byte
////oid组成部分:
////来源    厂商代码    通讯方式    产品时间戳    产品类别
////1byte    1 byte    1 byte    4 byte    1byte
////其中各部分代码列表:
////来源    1byte    编号    描述
////        00    默认原生态系统数据
////        01    网关或者其他A设备
////        02    调试软件
////        03    APP应用程序
////        04    第三方网关或者平台
////厂商代码    1byte    编号    描述
////        01    HDL
////        02
////通讯方式    1byte    编号    描述
////        01    HDL Bus
////        02    Zigbee
////        03    KNX
////        04    Z-Wave
////产品时间戳    4bytes    以2020年1月1日算出的时间戳0.1s为单位
////产品类别    1byte    编号    描述
////        01    调光器
////        02    继电器
////        03    干接点模块
////        04    传感器
////        05    面板
////        06    RCU
////        07    网关
////        08    红外发射
////        09    Android屏
////        10    场景
////        11    音乐播放器
////        12    232/485转换器
////        21    自动化
////        22    安防防区
////        14    窗帘模块
////        15    HVAC
////        16    地热模块
////物模型类型    2bytes    编号    描述
////        01    开关类    01    开关
////                02    插座
////                03
////        02    照明    01    开关
////                02    调光
////                03    色温(CCT)
////                04    RGB
////        03    遮阳    01    窗帘控制器
////                02    百叶窗
////                03    开合帘
////                04    卷帘
////                05     推窗器
////                06     投影幕
////        04    面板    01    按键面板
////        05    传感器    01    移动探测
////                02    温度传感器
////                03    湿度传感器
////                04    照度传感器
////                05    TVOC
////                06    PM2.5
////                07    CO2
////                08    毫米波传感器
////                09
////                10
////                11    烟雾传感器
////                25    干接点
////        07    恒温器    01    空调
////                02    风扇
////                03    毛细空调
////        08    地热    01    地热模块
////        09    背景音乐    01    音乐播放器
////                02    Sonos
////        10    场景    01    场景
////                02    电影场景
////        19    新风    01    新风
////13    能源    01    电表
////                02    水表
////                03    燃气
////        16    电器    01    风扇
////                02    TV
////        20    安防    01    安防
////        21    自动化    01    自动化
////大类别    1bytes    (预留)
////小类别    1byte    (预留)
Crabtree/SmartHome/HDL/Operation/Control.cs
@@ -167,6 +167,7 @@
                case Command.SetGateWayAdminInfoACK:
                case Command.ReadGateWayLocalEncryptionACK:
                case Command.SetReadGateWayLocalEncryptionACK:
                case Command.SetGateWayMqttURLAddressACK:
                //************************************
                case Command.ReadGateWayModelInfoACK:
                case Command.ReadGatewayServerIPACK:
@@ -523,6 +524,7 @@
            case Command.SetGateWayAdminInfo:
            case Command.SetGateWayLocalEncryption:
            case Command.ReadGateWayLocalEncryption:
            case Command.SetGateWayMqttURLAddress:
            //************************************
            case Command.ReadGateWayModelInfo:
            case Command.ReadGatewayServerIP:
Crabtree/SmartHome/HDL/Operation/MyEnum.cs
@@ -1913,6 +1913,14 @@
        SetGateWayLocalEncryption = 0x303E,
        SetReadGateWayLocalEncryptionACK = 0x303F,
        /// <summary>
        /// 修改网关远程连接域名地址
        /// </summary>
        SetGateWayMqttURLAddress = 0x3046,
        SetGateWayMqttURLAddressACK = 0x3047,
        /// <summary>
        /// 0xF003
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
@@ -4,6 +4,9 @@
namespace Shared.SimpleControl.Phone
{
    /// <summary>
    /// 搜索和写加密网关、绑定网关的页面
    /// </summary>
    public class GuideAddGateway : FrameLayout
    {
        static GuideAddGateway inView;
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
@@ -3,6 +3,9 @@
namespace Shared.SimpleControl.Phone
{
    /// <summary>
    /// 住宅列表页面
    /// </summary>
    public class GuideAddResidence : FrameLayout
    {
        public bool IsHideBack = false;
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.写Mqtt远程域名地址
                            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);//帐号名改成gatewayId
            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>