HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2020-03-06 a5b3c4bae726ef6770d4bfcbf2f4b50a37ed4a15
ZigbeeApp/Shared/Phone/UserView/UserHomeView.cs
@@ -11,21 +11,13 @@
namespace Shared.Phone.UserView
{
    /// <summary>
    /// 主页
    /// </summary>
    public class UserHomeView : FrameLayout, ZigBee.Common.IStatus
    public class UserHomeView : EditorCommonForm
    {
        #region ◆ 变量____________________________
        /// <summary>
        /// 设备是否在线标识--Online
        /// </summary>
        private readonly string deviceStatus_Online = "Online";
        /// <summary>
        /// 设备状态开关标识--Switch
        /// </summary>
        private readonly string deviceStatus_OnOffStatus = "Switch";
        #region ■ 变量声明___________________________
        /// <summary>
        /// 功能ScrolViewLayout
        /// </summary>
@@ -34,19 +26,10 @@
        /// 功能和场景bodyView
        /// </summary>
        private FrameLayout functionSceneBodyView;
        /// <summary>
        /// The height of the room page view. -- 550
        /// </summary>
        private static readonly int roomPageView_Height = 550;
        /// <summary>
        /// 功能卡片高度 --250
        /// </summary>
        private static readonly int deviceFL_Height = 250;
        /// <summary>
        /// 功能按键
        /// </summary>
        private Button functionBtn;
        private NormalViewControl btnFunction;
        /// <summary>
        /// 读取设备状态的线程列表
@@ -70,517 +53,109 @@
        /// </summary>
        private bool sendedControlCommand = false;
        /// <summary>
        /// 延时 300毫秒
        /// </summary>
        private readonly int sleepSpan = 300;
        private FrameLayout itemView = new FrameLayout();
        /// <summary>
        /// floorBtn
        /// btnFloor
        /// </summary>
        private Button floorBtn;
        /// <summary>
        /// timeDic
        /// </summary>
        private Dictionary<string, Timer> timerDic = new Dictionary<string, Timer> { };
        private NormalViewControl btnFloor;
        /// <summary>
        /// sceneScrolView
        /// </summary>
        private VerticalScrolViewLayout sceneScrolView ;
        #endregion
        #region ◆ 接口____________________________
        #region ■ 初始化_____________________________
        /// <summary>
        /// 该接口将弃用 !!!!!!
        /// 改用DeviceInfoChange()
        /// 界面显示
        /// </summary>
        /// <returns>The changed.</returns>
        /// <param name="common">Common.</param>
        public void Changed(CommonDevice common)
        public void ShowForm()
        {
        }
        /// <summary>
        /// 设备状态更新接口
        /// <para>type:如果为 DeviceInComingRespon:设备新上报</para>
        /// <para>type:如果为 IASInfoReport:RemoveDeviceRespon</para>
        /// <para>type:如果为 DeviceStatusReport:设备上报</para>
        /// <para>type:如果为 IASInfoReport:IAS安防信息上报</para>
        /// <para>type:如果为 OnlineStatusChange: 设备在线状态更新</para>
        /// </summary>
        /// <param name="common">Common.</param>
        /// <param name="typeTag">Type tag.</param>
        public void DeviceInfoChange(CommonDevice common, string typeTag)
        {
            //设备上报状态中 当CluterID=3,就证明该设备在线,直接标记
            if (typeTag == "DeviceStatusReport")
            {
                Application.RunOnMainThread(() =>
                {
                    try
                    {
                        if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0)
                        {
                            return;
                        }
                        for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
                        {
                            var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
                            if (rowFL.ChildrenCount == 0)
                            {
                                //设备为空或者控件为空
                                continue;
                            }
                            for (int j = 0; j < rowFL.ChildrenCount; j++)
                            {
                                var deviceUI = (rowFL.GetChildren(j) as FunctionMainView).Tag as DeviceUI;
                                if (deviceUI == null || deviceUI.CommonDevice == null)
                                {
                                    //设备为空或者控件为空
                                    continue;
                                }
                                if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
                                {
                                    //判断是否为当前设备
                                    continue;
                                }
                                switch (deviceUI.CommonDevice.Type)
                                {
                                    case DeviceType.OnOffOutput:
                                        //开关功能
                                        if (common.DeviceStatusReport.CluterID == 6)
                                        {
                                            var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
                                            onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
                                            onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                            onOffOutputLight.LastDateTime = DateTime.Now;
                                        }
                                        break;
                                    case DeviceType.AirSwitch:
                                        //开关功能
                                        if (common.DeviceStatusReport.CluterID == 6)
                                        {
                                            var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
                                            airSwitch.DeviceStatusReport = common.DeviceStatusReport;
                                            airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                            airSwitch.LastDateTime = DateTime.Now;
                                        }
                                        //当CluterID=3,就证明该设备在线,直接标记
                                        if (common.DeviceStatusReport.CluterID == 3)
                                        {
                                            deviceUI.CommonDevice.IsOnline = 1;
                                            deviceUI.CommonDevice.LastDateTime = DateTime.Now;
                                        }
                                        break;
                                    case DeviceType.WindowCoveringDevice:
                                        if (common.DeviceStatusReport.CluterID == 258)
                                        {
                                            if (common.DeviceStatusReport.AttriBute[0].AttributeId == 0)
                                            {
                                                //窗帘类型
                                                var rollerShade = deviceUI.CommonDevice as Rollershade;
                                                rollerShade.DeviceStatusReport = common.DeviceStatusReport;
                                                rollerShade.WcdType = common.DeviceStatusReport.AttriBute[0].AttriButeData;
                                                rollerShade.LastDateTime = DateTime.Now;
                                                (rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
                                                (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                            }
                                            if (common.DeviceStatusReport.AttriBute[0].AttributeId == 8)
                                            {
                                                //窗帘百分比
                                                var rollerShade = deviceUI.CommonDevice as Rollershade;
                                                rollerShade.DeviceStatusReport = common.DeviceStatusReport;
                                                rollerShade.WcdCurrentPositionLiftPercentage = common.DeviceStatusReport.AttriBute[0].AttriButeData;
                                                rollerShade.LastDateTime = DateTime.Now;
                                                (rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
                                                (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                            }
                                        }
                                        if (common.DeviceStatusReport.CluterID == 3)
                                        {
                                            deviceUI.CommonDevice.IsOnline = 1;
                                            deviceUI.CommonDevice.LastDateTime = DateTime.Now;
                                        }
                                        break;
                                    case DeviceType.Thermostat:
                                        //AC功能
                                        if (common.DeviceStatusReport.CluterID == 513)
                                        {
                                            var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
                                            ac.DeviceStatusReport = common.DeviceStatusReport;
                                            var attriButeList = ac.DeviceStatusReport.AttriBute;
                                            foreach (var attList in attriButeList)
                                            {
                                                var curTemp = (attList.AttriButeData / 100 < ACControlBase.Temperature_High && attList.AttriButeData / 100 > ACControlBase.Temperature_Low) ? attList.AttriButeData / 100 : ACControlBase.Temperature_Default;
                                                switch (attList.AttributeId)
                                                {
                                                    case 0:
                                                        //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
                                                        ac.currentLocalTemperature = curTemp;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                    case 17:
                                                        //此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
                                                        ac.currentCoolingSetpoint = curTemp;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                    case 18:
                                                        //此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
                                                        ac.currentHeatingSetpoint = curTemp;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                    case 4096:
                                                        //此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。
                                                        ac.currentAutoSetpoint = curTemp;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                    case 28:
                                                        //此属性描述恒温设备正处于哪种模式
                                                        ac.currentSystemMode = attList.AttriButeData;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                }
                                            }
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                        }
                                        if (common.DeviceStatusReport.CluterID == 514)
                                        {
                                            var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
                                            var attriButeList = common.DeviceStatusReport.AttriBute;
                                            ac.DeviceStatusReport = common.DeviceStatusReport;
                                            foreach (var attList in attriButeList)
                                            {
                                                switch (attList.AttributeId)
                                                {
                                                    case 0:
                                                        ac.currentFanMode = attList.AttriButeData;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                    case 4096:
                                                        ac.currentFanSwingMode = attList.AttriButeData;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                }
                                            }
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                        }
                                        //当CluterID=3,就证明该设备在线,直接标记
                                        if (common.DeviceStatusReport.CluterID == 3)
                                        {
                                            var ac = deviceUI.CommonDevice as AC;
                                            ac.IsOnline = 1;
                                            ac.LastDateTime = DateTime.Now;
                                        }
                                        break;
                                    case DeviceType.DimmableLight:
                                        //调光灯功能
                                        if (common.DeviceStatusReport.CluterID == 6)
                                        {
                                            var dimmableLight = deviceUI.CommonDevice as DimmableLight;
                                            dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
                                            dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                            dimmableLight.LastDateTime = DateTime.Now;
                                        }
                                        //亮度
                                        if (common.DeviceStatusReport.CluterID == 8)
                                        {
                                            var dimmableLight = deviceUI.CommonDevice as DimmableLight;
                                            dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
                                            var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
                                            switch (attriButeList[0].AttributeId)
                                            {
                                                case 0:
                                                    //此属性表明当前亮度程度
                                                    dimmableLight.Level = attriButeList[0].AttriButeData;
                                                    dimmableLight.LastDateTime = DateTime.Now;
                                                    //(rowFL.GetChildren(j) as FunctionMainView).IsSelected = true;
                                                    (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                                    break;
                                            }
                                        }
                                        break;
                                    case DeviceType.TemperatureSensor:
                                        //温度
                                        if (common.DeviceStatusReport.CluterID == 1026)
                                        {
                                            var tempera = deviceUI.CommonDevice as TemperatureSensor;
                                            foreach (var data in common.DeviceStatusReport.AttriBute)
                                            {
                                                if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                                                {
                                                    if (data.AttriButeData == 0)
                                                    {
                                                        tempera.Temperatrue = 0;
                                                    }
                                                    else if (data.AttriButeData > 32767)
                                                    {
                                                        //负数(特殊处理)
                                                        string strValue = (data.AttriButeData - 65536).ToString();
                                                        //小数点需要一位
                                                        strValue = strValue.Substring(0, strValue.Length - 1);
                                                        tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                                    }
                                                    else
                                                    {
                                                        //小数点需要一位
                                                        string strValue = data.AttriButeData.ToString();
                                                        strValue = strValue.Substring(0, strValue.Length - 1);
                                                        tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                                    }
                                                    tempera.LastDateTime = DateTime.Now;
                                                    (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                                }
                                            }
                                        }
                                        //湿度
                                        if (common.DeviceStatusReport.CluterID == 1029)
                                        {
                                            var tempera = deviceUI.CommonDevice as TemperatureSensor;
                                            foreach (var data in common.DeviceStatusReport.AttriBute)
                                            {
                                                if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                                                {
                                                    if (data.AttriButeData == 0)
                                                    {
                                                        tempera.Humidity = 0;
                                                    }
                                                    else
                                                    {
                                                        //小数点需要一位(湿度没有负数)
                                                        string strValue = data.AttriButeData.ToString();
                                                        strValue = strValue.Substring(0, strValue.Length - 1);
                                                        tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                                    }
                                                    tempera.LastDateTime = DateTime.Now;
                                                    (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                                }
                                            }
                                        }
                                        break;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine($"Error:{ex.Message}");
                    }
                });
            }
            else if (typeTag == "IASInfoReport")
            {
                Application.RunOnMainThread(() =>
                {
                    try
                    {
                        for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
                        {
                            var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
                            if (rowFL.ChildrenCount == 0)
                            {
                                //设备为空或者控件为空
                                continue;
                            }
                            for (int j = 0; j < rowFL.ChildrenCount; j++)
                            {
                                var deviceUI = (rowFL.GetChildren(j) as FunctionMainView).Tag as DeviceUI;
                                if (deviceUI == null || deviceUI.CommonDevice == null)
                                {
                                    //设备为空或者控件为空
                                    continue;
                                }
                                if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
                                {
                                    //判断是否为当前设备
                                    continue;
                                }
                                switch (deviceUI.CommonDevice.Type)
                                {
                                    case DeviceType.IASZone:
                                        //ias
                                        var ias = common as IASZone;
                                        var iAS = deviceUI.CommonDevice as ZigBee.Device.IASZone;
                                        iAS.iASInfo = ias.iASInfo;
                                        (rowFL.GetChildren(j) as FunctionMainView).IsSelected = iAS.iASInfo?.Alarm1 == 1;
                                        (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                        iAS.LastDateTime = DateTime.Now;
                                        break;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine($"Error:{ex.Message}");
                    }
                });
            }
        }
        /// <summary>
        /// Changeds the IL ogic status.
        /// </summary>
        /// <param name="logic">Logic.</param>
        public void ChangedILogicStatus(ZigBee.Device.Logic logic)
        {
            //throw new NotImplementedException();
        }
        /// <summary>
        /// Changeds the IS cene status.
        /// </summary>
        /// <param name="scene">Scene.</param>
        public void ChangedISceneStatus(Scene scene)
        {
            //throw new NotImplementedException();
        }
        #endregion
        #region ◆ 初始化__________________________
        /// <summary>
        /// Removes from parent.
        /// </summary>
        public override void RemoveFromParent()
        {
            RemoveStatuList();
            base.RemoveFromParent();
        }
        private void RemoveStatuList()
        {
            ZbGateway.StatusList.Remove(this);
            RemoveAllUpdateControlDeviceStatuAction();
        }
        /// <summary>
        /// 主页 --我的家
        /// </summary>
        public UserHomeView()
        {
            ZbGateway.StatusList.Add(this);
            BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
        }
        /// <summary>
        /// 显示界面
        /// </summary>
        public void Show()
        {
            this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            //清除全部
            this.RemoveAll();
            //初始化头部控件
            this.InitTopFrameLayoutControl();
            //初始化中间控件
            this.InitMidFrameLayoutControl();
            //添加设备状态上报事件
            this.AddDeviceReportEvent();
        }
            #region topview
            var topFrameLayout = new FrameLayout()
        /// <summary>
        /// 初始化头部控件
        /// </summary>
        private void InitTopFrameLayoutControl()
            {
                Y = Application.GetRealHeight(60),
                Height = Application.GetRealHeight(127),
                BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
            };
            AddChidren(topFrameLayout);
            //头部容器
            base.topFrameLayout = new FrameLayout();
            topFrameLayout.Y = Application.GetRealHeight(60);
            topFrameLayout.Height = Application.GetRealHeight(127);
            topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            this.AddChidren(topFrameLayout);
            var floor = new Button
            {
                X = Application.GetRealWidth(CommonFormResouce.X_Left),
                Width = Application.GetMinRealAverage(69),
                Height = Application.GetMinRealAverage(69),
                Gravity = Gravity.CenterVertical,
                UnSelectedImagePath = "Item/Floor.png"
            };
            //拥有楼层
            if (Config.Instance.Home.FloorDics.Count > 0)
            {
                topFrameLayout.AddChidren(floor);
            }
            floorBtn = new Button
                //楼层图标
                var btnFloorIcon = new IconViewControl(69);
                btnFloorIcon.X = ControlCommonResourse.XXLeft;
                btnFloorIcon.Gravity = Gravity.CenterVertical;
                btnFloorIcon.UnSelectedImagePath = "Item/Floor.png";
                topFrameLayout.AddChidren(btnFloorIcon);
                btnFloorIcon.ButtonClickEvent += (sender, e) =>
            {
                X = floor.Right,
                Width = Application.GetRealWidth(500),
                Height = Application.GetRealHeight(100),
                Gravity = Gravity.CenterVertical,
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = ZigbeeColor.Current.GXCTextColor,
                Text = Config.Instance.Home.GetCurrentFloorName,
                IsBold = true,
                TextSize = 14
                    //显示选择楼层的界面
                    this.ShowSelectFloorForm();
            };
            if (Config.Instance.Home.FloorDics.Count > 0)
                //楼层名
                this.btnFloor = new NormalViewControl(500, 100, true);
                btnFloor.X = btnFloorIcon.Right;
                btnFloor.Gravity = Gravity.CenterVertical;
                btnFloor.TextColor = ZigbeeColor.Current.GXCTextColor;
                btnFloor.Text = Config.Instance.Home.GetCurrentFloorName;
                btnFloor.IsBold = true;
                topFrameLayout.AddChidren(btnFloor);
                btnFloor.ButtonClickEvent += (sender, e) =>
            {
                topFrameLayout.AddChidren(floorBtn);
            }
            if(UserCenterResourse.Option.SafetyShortcut)
            {
                var safetyBtn = new SafetyShortcutControl();
                safetyBtn.X = Application.GetRealWidth(860);
                safetyBtn.Gravity = Gravity.CenterVertical;
                topFrameLayout.AddChidren(safetyBtn);
            }
            var messageBtn = new MessageManagementControl();
            messageBtn.X = Application.GetRealWidth(953);
            messageBtn.Gravity = Gravity.CenterVertical;
            messageBtn.UnSelectedImagePath = "Item/Message.png";
            messageBtn.SelectedImagePath = "Item/MessageSelected.png";
            topFrameLayout.AddChidren(messageBtn);
            var residecneName = new Button()
            {
                X = Application.GetRealWidth(CommonFormResouce.X_Left),
                Y = Application.GetRealHeight(161),
                Width = Application.GetRealWidth(700),
                Height = Application.GetRealHeight(95),
                TextAlignment = TextAlignment.CenterLeft,
                Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull),
                TextSize = 24,
                TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
                IsBold=true
                    //显示选择楼层的界面
                    this.ShowSelectFloorForm();
            };
            if (Config.Instance.Home.IsOthreShare)
            {
                residecneName.Text = $"{Config.Instance.Home.Name}";
            }
            AddChidren(residecneName);
            //安防快捷方式
            if (UserCenterResourse.ResidenceOption.SafetyShortcut)
            {
                var btnSafety = new SafetyShortcutControl();
                btnSafety.X = Application.GetRealWidth(860);
                btnSafety.Gravity = Gravity.CenterVertical;
                topFrameLayout.AddChidren(btnSafety);
            }
            //消息图标
            var btnMessage = new MessageManagementControl();
            btnMessage.X = Application.GetRealWidth(953);
            btnMessage.Gravity = Gravity.CenterVertical;
            btnMessage.UnSelectedImagePath = "Item/Message.png";
            btnMessage.SelectedImagePath = "Item/MessageSelected.png";
            topFrameLayout.AddChidren(btnMessage);
            floor.MouseUpEventHandler += SelectFloor;
            floorBtn.MouseUpEventHandler += SelectFloor;
            //住宅名字
            var btnHouseName = new NormalViewControl(700, 95, true);
            btnHouseName.X = ControlCommonResourse.XXLeft;
            btnHouseName.Y = Application.GetRealHeight(161);
            btnHouseName.TextSize = 24;
            btnHouseName.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
            btnHouseName.IsBold = true;
            btnHouseName.Text = Config.Instance.Home.Name;
            this.AddChidren(btnHouseName);
            //切换住宅
            residecneName.MouseLongEventHandler += (send, e) =>
            btnHouseName.MouseLongEventHandler += (sender, e) =>
            {
                var tempHomeBtn = send as Button;
                if (Config.Instance.HomeFilePathList.Count == 0)
                {
                    var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst), Language.StringByID(R.MyInternationalizationString.Close), Language.StringByID(R.MyInternationalizationString.Confrim));
                    alert.Show();
                    alert.ResultEventHandler += (senderHouse, eHouse) =>
                    {
                        if (eHouse)
                        {
                            return;
                        }
                    };
                    //当前住宅为空,请先建立住宅
                    this.ShowMassage(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst));
                }
                else
                {
@@ -592,27 +167,33 @@
                    };
                }
            };
        }
            #endregion
            if (CanBindGateway() == false)
        /// <summary>
        /// 初始化中间控件
        /// </summary>
        private void InitMidFrameLayoutControl()
            {
                var roomPageView = new HorizontalPages()
            //检测是否绑定有网关
            if (this.CheckHadBindGateway() == false)
                {
                    Y = Application.GetRealHeight(302),
                    Width = Application.GetRealWidth(CommonPage.AppRealWidth),
                    Height = Application.GetRealHeight(478),
                };
                AddChidren(roomPageView);
                //显示没有绑定过网关的界面
                this.ShowNoGatewayTip();
            }
            else
            {
                var roomPageView = new HorizontalPages();
                roomPageView.Y = Application.GetRealHeight(302);
                roomPageView.Width = Application.GetRealWidth(CommonPage.AppRealWidth);
                roomPageView.Height = Application.GetRealHeight(478);
                this.AddChidren(roomPageView);
                //突出边距
                roomPageView.TCBJ = Application.GetRealWidth(181);
                //两个page之间的间距
                roomPageView.JMBJ = Application.GetRealWidth(0);
                //当前房间
                var rList = Room.CurrentRoom.GetRoomsByCurrentFloorIdAppendLoveRoom();
                Room.CurrentRoom = Room.CurrentRoom ?? rList[0];
                var rList = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom();
                foreach (var room in rList)
                {
                    var roomView = new Device.CommonForm.RoomView(0, 0);
@@ -621,93 +202,16 @@
                    roomView.HideName(true);
                    roomView.action += () =>
                    {
                        Show();
                        this.ShowForm();
                    };
                }
                var curIndex = rList.FindIndex((obj) => obj.Id == Room.CurrentRoom.Id);
                //设置房间的初始选择
                var curIndex = rList.FindIndex((obj) => obj.Id == HdlRoomLogic.Current.CurrentRoom.Id);
                roomPageView.PageIndex = curIndex;
                if (roomPageView.GetChildren(roomPageView.PageIndex) != null)
                {
                    (roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false);
                }
                var functionSceneView = new FrameLayout()
                {
                    Y = Application.GetRealHeight(861),
                    Width = Application.GetRealWidth(832),
                    Height = Application.GetRealHeight(167),
                    Gravity = Gravity.CenterHorizontal,
                    BackgroundImagePath = "Item/SceneFunctionBG.png"
                };
                AddChidren(functionSceneView);
                //场景
                var sceneBtn = new Button()
                {
                    X = Application.GetRealWidth(30),
                    Y = Application.GetRealHeight(12),
                    Width = Application.GetRealWidth(350),
                    Height = Application.GetRealHeight(100),
                    TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
                    SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                    TextID = R.MyInternationalizationString.Scence,
                    IsSelected = true,
                    TextSize=16,
                    IsBold=true
                };
                functionSceneView.AddChidren(sceneBtn);
                //场景
                functionBtn = new Button()
                {
                    X = Application.GetRealWidth(430),
                    Y = Application.GetRealHeight(12),
                    Width = Application.GetRealWidth(360),
                    Height = Application.GetRealHeight(100),
                    TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
                    SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                    TextID = R.MyInternationalizationString.Function,
                    IsSelected = false,
                    TextSize=14
                };
                functionSceneView.AddChidren(functionBtn);
                //功能和场景bodyView
                functionSceneBodyView = new FrameLayout()
                {
                    Y = functionSceneView.Bottom,
                    Height = Application.GetRealHeight(750),
                    Gravity = Gravity.CenterHorizontal,
                    BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
                };
                AddChidren(functionSceneBodyView);
                //选择功能分栏
                functionBtn.MouseUpEventHandler += (sender, e) =>
                {
                    sceneBtn.IsSelected = false;
                    functionBtn.IsSelected = true;
                    sceneBtn.TextSize = 14;
                    sceneBtn.IsBold = false;
                    functionBtn.TextSize = 16;
                    functionBtn.IsBold = true;
                    RefreshBodyView();
                };
                //选择场景分栏
                sceneBtn.MouseUpEventHandler += (sender, e) =>
                {
                    functionBtn.IsSelected = false;
                    sceneBtn.IsSelected = true;
                    sceneBtn.TextSize = 16;
                    sceneBtn.IsBold = true;
                    functionBtn.TextSize = 14;
                    functionBtn.IsBold = false;
                    RefreshBodyView();
                };
                RefreshBodyView();
                roomPageView.PageChange += (sender, e) =>
                {
                    if(roomPageView.GetChildren(roomPageView.PageIndex - 1) !=null)
@@ -723,85 +227,80 @@
                        (roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false);
                    }
                    //切换当前房间
                    Room.CurrentRoom = rList[roomPageView.PageIndex];
                    RefreshBodyView();
                    HdlRoomLogic.Current.CurrentRoom = rList[roomPageView.PageIndex];
                    //刷新设备桌布控件
                    this.RefreshBodyView();
                };
            }
            else
            {
                ShowNoGatewayTip();
            }
        }
                //功能和场景的背景图
                var functionSceneView = new FrameLayout();
                functionSceneView.Y = Application.GetRealHeight(861);
                functionSceneView.Width = Application.GetRealWidth(832);
                functionSceneView.Height = Application.GetRealHeight(167);
                functionSceneView.Gravity = Gravity.CenterHorizontal;
                functionSceneView.BackgroundImagePath = "Item/SceneFunctionBG.png";
                this.AddChidren(functionSceneView);
        #endregion
                //场景
                var btnScene = new NormalViewControl(350, 100, true);
                btnScene.X = Application.GetRealWidth(30);
                btnScene.Y = Application.GetRealHeight(12);
                btnScene.TextColor = ZigbeeColor.Current.GXCTextGrayColor3;
                btnScene.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor;
                btnScene.TextID = R.MyInternationalizationString.Scence;
                btnScene.IsSelected = true;
                btnScene.TextSize = 16;
                btnScene.IsBold = true;
                btnScene.TextAlignment = TextAlignment.Center;
                functionSceneView.AddChidren(btnScene);
        #region ◆ 刷新____________________________
        /// <summary>
        /// RefreshBodyView
        /// </summary>
        public void RefreshBodyView()
        {
            functionSceneBodyView.RemoveAll();
            if (functionBtn.IsSelected)
            {
                ShowFunction();
            }
            else
            {
                ShowScene();
            }
        }
                //功能
                btnFunction = new NormalViewControl(360, 100, true);
                btnFunction.X = Application.GetRealWidth(430);
                btnFunction.Y = Application.GetRealHeight(12);
                btnFunction.TextColor = ZigbeeColor.Current.GXCTextGrayColor3;
                btnFunction.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor;
                btnFunction.TextID = R.MyInternationalizationString.Function;
                btnFunction.IsSelected = false;
                btnFunction.TextAlignment = TextAlignment.Center;
                functionSceneView.AddChidren(btnFunction);
        /// <summary>
        /// SelectFloor
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="mouseEventArgs"></param>
        public void SelectFloor(object sender, MouseEventArgs mouseEventArgs)
                //功能和场景bodyView
                functionSceneBodyView = new FrameLayout()
        {
            var floorFL = new Phone.Device.Category.SelectFloor();
            AddChidren(floorFL);
            floorFL.Init(35, 153);
            floorFL.changeFloor = true;
            floorFL.FloorAction = (floorId) =>
            {
                floorBtn.Text = Config.Instance.Home.GetFloorNameById(floorId);
                Common.Room.CurrentRoom = Common.Room.CurrentRoom?.GetLoveRoom();
                Show();
                    Y = functionSceneView.Bottom,
                    Height = Application.GetRealHeight(750),
                    Gravity = Gravity.CenterHorizontal,
                    BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
            };
        }
                this.AddChidren(functionSceneBodyView);
        #endregion
        #region ◆ 检测是否绑定了网关________________
        /// <summary>
        /// 当没有绑定网关时,是否有权限添加网关
        /// </summary>
        /// <returns><c>true</c>, if bing gateway was caned, <c>false</c> otherwise.</returns>
        private bool CanBindGateway()
                //选择功能分栏
                btnFunction.ButtonClickEvent += (sender, e) =>
        {
            if (HadBindGateway() == false && (UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 2))
                    btnScene.IsSelected = false;
                    btnFunction.IsSelected = true;
                    btnScene.TextSize = 14;
                    btnScene.IsBold = false;
                    btnFunction.TextSize = 16;
                    btnFunction.IsBold = true;
                    //刷新设备桌布控件
                    this.RefreshBodyView();
                };
                //选择场景分栏
                btnScene.ButtonClickEvent += (sender, e) =>
            {
                return true;
                    btnFunction.IsSelected = false;
                    btnScene.IsSelected = true;
                    btnScene.TextSize = 16;
                    btnScene.IsBold = true;
                    btnFunction.TextSize = 14;
                    btnFunction.IsBold = false;
                    this.RefreshBodyView();
                };
                //刷新设备桌布控件
                this.RefreshBodyView();
            }
            return false;
        }
        /// <summary>
        /// 是否绑定了网关
        /// </summary>
        /// <returns><c>true</c>, if bind gateway was haded, <c>false</c> otherwise.</returns>
        private bool HadBindGateway()
        {
            var gatewayList = UserCenter.HdlGatewayLogic.Current.GetAllLocalGateway();
            if (gatewayList.Count == 0)
            {
                return false;
            }
            return true;
        }
        /// <summary>
@@ -809,75 +308,55 @@
        /// </summary>
        private void ShowNoGatewayTip()
        {
            var bg = new Button
            {
                Y = Application.GetRealHeight(302),
                Width = Application.GetMinRealAverage(717),
                Height = Application.GetMinRealAverage(478),
                Gravity = Gravity.CenterHorizontal,
                UnSelectedImagePath = "Item/NoBindGW.png"
            };
            AddChidren(bg);
            var bg = new PicViewControl(717, 478);
            bg.Y = Application.GetRealHeight(302);
            bg.Gravity = Gravity.CenterHorizontal;
            bg.UnSelectedImagePath = "Item/NoBindGW.png";
            this.AddChidren(bg);
            var tip = new Button
            {
                Y = Application.GetRealHeight(815),
                Width = Application.GetMinRealAverage(717),
                Height = Application.GetMinRealAverage(58),
                Gravity = Gravity.CenterHorizontal,
                TextID = R.MyInternationalizationString.NewAccountNeedBingGW,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor
            };
            AddChidren(tip);
            var tip = new NormalViewControl(Application.GetMinRealAverage(717), Application.GetMinRealAverage(58), false);
            tip.Y = Application.GetRealHeight(815);
            tip.Gravity = Gravity.CenterHorizontal;
            tip.TextID = R.MyInternationalizationString.NewAccountNeedBingGW;
            tip.TextColor = ZigbeeColor.Current.GXCTextGrayColor;
            tip.TextAlignment = TextAlignment.Center;
            this.AddChidren(tip);
            var addBG = new Button
            {
                Y = Application.GetRealHeight(1048),
                Height = Application.GetMinRealAverage(366),
                Width = Application.GetMinRealAverage(971),
                UnSelectedImagePath = "Item/VirtualFrame.png",
                Gravity = Gravity.CenterHorizontal
            };
            AddChidren(addBG);
            var addBG = new PicViewControl(971, 366);
            addBG.Y = Application.GetRealHeight(1048);
            addBG.UnSelectedImagePath = "Item/VirtualFrame.png";
            addBG.Gravity = Gravity.CenterHorizontal;
            this.AddChidren(addBG);
            var addGatewayBtn = new Button()
            var addGatewayBtn = new IconViewControl(89);
            addGatewayBtn.Y = Application.GetRealHeight(1143);
            addGatewayBtn.UnSelectedImagePath = "Item/Add_GW.png";
            addGatewayBtn.Gravity = Gravity.CenterHorizontal;
            this.AddChidren(addGatewayBtn);
            addGatewayBtn.ButtonClickEvent += (sender, e) =>
            {
                Y = Application.GetRealHeight(1143),
                Height = Application.GetMinRealAverage(89),
                Width = Application.GetMinRealAverage(89),
                UnSelectedImagePath = "Item/Add_GW.png",
                Gravity = Gravity.CenterHorizontal
                var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm();
                form.AddForm();
            };
            AddChidren(addGatewayBtn);
            addGatewayBtn.MouseUpEventHandler += GoToAddGateWay;
            var addTip = new Button
            {
                Y = Application.GetRealHeight(1256),
                Width = Application.GetMinRealAverage(717),
                Height = Application.GetMinRealAverage(58),
                Gravity = Gravity.CenterHorizontal,
                TextID = R.MyInternationalizationString.AddSmartGW,
                TextColor = ZigbeeColor.Current.GXCTextBlackColor
            };
            var addTip = new PicViewControl(717, 58);
            addTip.Y = Application.GetRealHeight(1256);
            addTip.Gravity = Gravity.CenterHorizontal;
            addTip.TextID = R.MyInternationalizationString.AddSmartGW;
            addTip.TextColor = ZigbeeColor.Current.GXCTextBlackColor;
            addTip.TextAlignment = TextAlignment.Center;
            AddChidren(addTip);
            addTip.MouseUpEventHandler += GoToAddGateWay;
        }
        /// <summary>
        /// 前往添加网关界面
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
        private void GoToAddGateWay(object sender, MouseEventArgs mouseEventArgs)
            addTip.ButtonClickEvent += (sender, e) =>
        {
            var selectNewGateWayForm = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm { };
            selectNewGateWayForm.AddForm();
                var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm();
                form.AddForm();
            };
        }
        #endregion
        #region ◆ 功能_____________________________
        #region ■ 功能分支___________________________
        /// <summary>
        /// 显示没有功能
@@ -912,24 +391,20 @@
        private void ShowFunction()
        {
            functionSceneBodyView.RemoveAll();
            //选择功能--直接从房间的devicelist中获取
            var deviceList = Room.CurrentRoom.DeviceUIList;
            if (deviceList == null)
            {
                return;
            }
            if (deviceList.Count == 0)
            //当前房间的设备数
            if (HdlRoomLogic.Current.CurrentRoom.ListDevice.Count == 0)
            {
                ShowNoFunctionTip();
            }
            else
            {
                var dList = new List<DeviceUI> { };
                foreach(var device in deviceList)
                var dList = new List<CommonDevice>();
                foreach (var mainkeys in HdlRoomLogic.Current.CurrentRoom.ListDevice)
                {
                    var info = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device.CommonDevice);
                    if (info.BeloneType == DeviceBeloneType.A干接点 || info.BeloneType == DeviceBeloneType.A中继器)
                    var device = LocalDevice.Current.GetDevice(mainkeys);
                    if (device == null
                        || device.Type == DeviceType.OnOffSwitch//干接点
                        || device.Type == DeviceType.Repeater)//中继器
                    {
                        continue;
                    }
@@ -941,8 +416,6 @@
                for (int i = 0; i < dList.Count; i++)
                {
                    var device = dList[i];
                    //new System.Threading.Thread(() =>
                    //{
                    Application.RunOnMainThread(() =>
                        {
                            try
@@ -964,24 +437,27 @@
                                {
                                    if ((sender as Button).IsSelected)
                                    {
                                        Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(device.FileName);
                                    //删除我的喜爱
                                    HdlRoomLogic.Current.DeleteLoveDevice(device);
                                        (sender as Button).IsSelected = false;
                                    }
                                    else
                                    {
                                        Common.Room.CurrentRoom.GetLoveRoom().AddDevice(device.FileName);
                                    //添加我的喜爱
                                    HdlRoomLogic.Current.AddLoveDevice(device);
                                        (sender as Button).IsSelected = true;
                                    }
                                    if (Room.CurrentRoom.IsLove)
                                if (HdlRoomLogic.Current.CurrentRoom.IsLove)
                                    {
                                        RefreshBodyView();
                                    //刷新设备桌布控件
                                    this.RefreshBodyView();
                                    }
                                };
                                if (device.CommonDevice.Type == DeviceType.WindowCoveringDevice)
                            if (device.Type == DeviceType.WindowCoveringDevice)
                                {
                                    //窗帘 卷帘
                                    var rollerShade = (ZigBee.Device.Rollershade)device.CommonDevice;
                                var rollerShade = (ZigBee.Device.Rollershade)device;
                                    if (rollerShade.Gateway != null)
                                    {
                                        new System.Threading.Thread(() =>
@@ -991,25 +467,25 @@
                                            {
                                                ReadStatus(rollerShade, () =>
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device);
                                                });
                                            }
                                            else
                                            {
                                                if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds)
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device);
                                                }
                                            }
                                        })
                                        { IsBackground = true }.Start();
                                        var functionView = new FunctionMainView(xx, yy);
                                        functionView.Tag = device;
                                    functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                        itemView.AddChidren(functionView);
                                        functionView.Init();
                                        functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                        functionView.SetStatuText(device.GetDeviceStatu());
                                    functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                        functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(rollerShade));
                                        functionView.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
                                        functionView.SetCollect(true);
@@ -1019,18 +495,18 @@
                                            (sender as Button).IsSelected = !(sender as Button).IsSelected;
                                            if ((sender as Button).IsSelected)
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                (device.CommonDevice as Rollershade).CurtainUpDownStopControl(0);
                                            (device as Rollershade).CurtainUpDownStopControl(0);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Open));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = true;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1039,24 +515,24 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
                                            else
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                (device.CommonDevice as Rollershade).CurtainUpDownStopControl(1);
                                            (device as Rollershade).CurtainUpDownStopControl(1);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = false;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1065,7 +541,7 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
@@ -1078,7 +554,8 @@
                                            UserView.HomePage.Instance.AddChidren(rollerShadeControl);
                                            UserView.HomePage.Instance.PageIndex += 1;
                                            UserView.HomePage.Instance.ScrollEnabled = false;
                                            rollerShadeControl.Show(device, Room.CurrentRoom);
                                        rollerShadeControl.IsDrawerLockMode = true;
                                        rollerShadeControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
                                            rollerShadeControl.action += (curDev, curRoom) =>
                                            {
                                                ReFreshEditDeviceAction(device, curRoom, functionView);
@@ -1088,10 +565,10 @@
                                        functionView.CollectButton.MouseUpEventHandler += collectionEvent;
                                    }
                                }
                                else if (device.CommonDevice.Type == DeviceType.OnOffOutput)
                            else if (device.Type == DeviceType.OnOffOutput)
                                {
                                    //开关灯
                                    var light = device.CommonDevice as ToggleLight;
                                var light = device as ToggleLight;
                                    if (light.Gateway != null)
                                    {
                                        new System.Threading.Thread(() =>
@@ -1101,14 +578,14 @@
                                            {
                                                ReadStatus(light, () =>
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
                                                });
                                            }
                                            else
                                            {
                                                if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
                                                }
                                            }
                                        })
@@ -1117,14 +594,14 @@
                                        var functionView = new FunctionMainView(xx, yy);
                                        itemView.AddChidren(functionView);
                                        functionView.Init();
                                        functionView.Tag = device;
                                    functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                        functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                        functionView.SetStatuText(device.GetDeviceStatu());
                                        functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                    functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                    functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                        functionView.IsSelected = light.OnOffStatus == 1;
                                        functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                    functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                        if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                                    if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                                        {
                                            functionView.CollectButton.IsSelected = false;
                                        }
@@ -1138,18 +615,18 @@
                                            (sender as Button).IsSelected = !(sender as Button).IsSelected;
                                            if ((sender as Button).IsSelected)
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                light.SwitchControl(1);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = true;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1158,24 +635,24 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
                                            else
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                light.SwitchControl(0);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = false;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1184,7 +661,7 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
@@ -1197,7 +674,8 @@
                                            var lightControl = new Phone.Device.Light.OnOffControl();
                                            UserView.HomePage.Instance.AddChidren(lightControl);
                                            UserView.HomePage.Instance.PageIndex += 1;
                                            lightControl.Show(device, Room.CurrentRoom);
                                        lightControl.IsDrawerLockMode = true;
                                        lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
                                            lightControl.action += (curDev, curRoom) =>
                                            {
                                                ReFreshEditDeviceAction(device, curRoom, functionView);
@@ -1207,10 +685,10 @@
                                        functionView.CollectButton.MouseUpEventHandler += collectionEvent;
                                    }
                                }
                                else if (device.CommonDevice.Type == DeviceType.AirSwitch)
                            else if (device.Type == DeviceType.AirSwitch)
                                {
                                    //空气开关
                                    var airSwitch = device.CommonDevice as AirSwitch;
                                var airSwitch = device as AirSwitch;
                                    if (airSwitch.Gateway != null)
                                    {
                                        new System.Threading.Thread(() =>
@@ -1220,14 +698,14 @@
                                            {
                                                ReadStatus(airSwitch, () =>
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
                                                });
                                            }
                                            else
                                            {
                                                if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
                                                }
                                            }
                                        })
@@ -1236,30 +714,30 @@
                                        var functionView = new FunctionMainView(xx, yy);
                                        itemView.AddChidren(functionView);
                                        functionView.Init();
                                        functionView.Tag = device;
                                    functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                        functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                        functionView.SetStatuText(device.GetDeviceStatu());
                                    functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                        functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(airSwitch));
                                        functionView.IsSelected = airSwitch.OnOffStatus == 1;
                                        functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom( device.FileName));
                                    functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                        functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
                                        {
                                            (sender as Button).IsSelected = !(sender as Button).IsSelected;
                                            if ((sender as Button).IsSelected)
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                airSwitch.SwitchControl(1);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = true;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1268,24 +746,24 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
                                            else
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                airSwitch.SwitchControl(0);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = false;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1294,7 +772,7 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
@@ -1306,7 +784,8 @@
                                            var lightControl = new Phone.Device.Light.AirSwitchControl();
                                            UserView.HomePage.Instance.AddChidren(lightControl);
                                            UserView.HomePage.Instance.PageIndex += 1;
                                            lightControl.Show(device, Room.CurrentRoom);
                                        lightControl.IsDrawerLockMode = true;
                                        lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
                                            lightControl.action += (curDev, curRoom) =>
                                            {
                                                ReFreshEditDeviceAction(device, curRoom, functionView);
@@ -1317,10 +796,10 @@
                                        functionView.CollectButton.MouseUpEventHandler += collectionEvent;
                                    }
                                }
                                else if (device.CommonDevice.Type == DeviceType.Thermostat)
                            else if (device.Type == DeviceType.Thermostat)
                                {
                                    //恒温器-AC-空调
                                    var ac = device.CommonDevice as AC;
                                var ac = device as AC;
                                    if (ac.Gateway != null)
                                    {
                                        new System.Threading.Thread(() =>
@@ -1330,14 +809,14 @@
                                            {
                                                ReadStatus(ac, () =>
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendACStatuComand(device);
                                                });
                                            }
                                            else
                                            {
                                                if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendACStatuComand(device);
                                                }
                                            }
                                        })
@@ -1346,30 +825,30 @@
                                        var functionView = new FunctionMainView(xx, yy);
                                        itemView.AddChidren(functionView);
                                        functionView.Init();
                                        functionView.Tag = device;
                                    functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                        functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                        functionView.SetStatuText(device.GetDeviceStatu());
                                        functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                    functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                    functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                        functionView.IsSelected = ac.currentSystemMode != 0;
                                        functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                    functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                        functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
                                        {
                                            (sender as Button).IsSelected = !(sender as Button).IsSelected;
                                            if ((sender as Button).IsSelected)
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                ac.Open();
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = true;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1378,24 +857,24 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
                                            else
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                ac.Close();
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = false;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1404,7 +883,7 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
@@ -1416,7 +895,8 @@
                                            var lightControl = new Phone.Device.AC.ACControl();
                                            UserView.HomePage.Instance.AddChidren(lightControl);
                                            UserView.HomePage.Instance.PageIndex += 1;
                                            lightControl.Show(device, Room.CurrentRoom);
                                        lightControl.IsDrawerLockMode = true;
                                        lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
                                            lightControl.action += (curDev, curRoom) =>
                                            {
                                                ReFreshEditDeviceAction(device, curRoom, functionView);
@@ -1426,10 +906,10 @@
                                        functionView.CollectButton.MouseUpEventHandler += collectionEvent;
                                    }
                                }
                                else if (device.CommonDevice.Type == DeviceType.DimmableLight)
                            else if (device.Type == DeviceType.DimmableLight)
                                {
                                    //调光灯
                                    var dimmableLight = device.CommonDevice as DimmableLight;
                                var dimmableLight = device as DimmableLight;
                                    if (dimmableLight.Gateway != null)
                                    {
                                        new System.Threading.Thread(() =>
@@ -1440,7 +920,7 @@
                                                //发送读取状态命令
                                                ReadStatus(dimmableLight, () =>
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device);
                                                });
                                            }
                                            else
@@ -1448,7 +928,7 @@
                                                //防止短时间内多次读取设备状态
                                                if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                                                {
                                                    ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device.CommonDevice);
                                                ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device);
                                                }
                                            }
                                        })
@@ -1457,14 +937,14 @@
                                        var functionView = new FunctionMainView(xx, yy);
                                        itemView.AddChidren(functionView);
                                        functionView.Init();
                                        functionView.Tag = device;
                                    functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                        functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                        functionView.SetStatuText(device.GetDeviceStatu());
                                        functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                    functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                    functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                        functionView.IsSelected = dimmableLight.OnOffStatus == 1;
                                        functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                    functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                        if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                                    if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                                        {
                                            functionView.CollectButton.IsSelected = false;
                                        }
@@ -1478,18 +958,18 @@
                                            (sender as Button).IsSelected = !(sender as Button).IsSelected;
                                            if ((sender as Button).IsSelected)
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                dimmableLight.SwitchControl(1);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = true;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1498,24 +978,24 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
                                            else
                                            {
                                                zbGateway = device.CommonDevice.Gateway;
                                            zbGateway = device.Gateway;
                                                sendedControlCommand = false;
                                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                            AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
                                                dimmableLight.SwitchControl(0);
                                                ((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
                                            ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                                ((sender as Button).Parent as FunctionMainView).IsSelected = false;
                                                //控制延时回调
                                                DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
                                            HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
                                                {
                                                    if (Parent == null)
                                                    {
@@ -1524,7 +1004,7 @@
                                                    RemoveUpdateControlDeviceStatuAction(zbGateway);
                                                    if (sendedControlCommand == false)
                                                    {
                                                        DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
                                                    }
                                                });
                                            }
@@ -1536,7 +1016,8 @@
                                            var dimmableLightControl = new Phone.Device.Light.DimmableLightControl();
                                            UserView.HomePage.Instance.AddChidren(dimmableLightControl);
                                            UserView.HomePage.Instance.PageIndex += 1;
                                            dimmableLightControl.Show(device, Room.CurrentRoom);
                                        dimmableLightControl.IsDrawerLockMode = true;
                                        dimmableLightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
                                            dimmableLightControl.action += (curDev, curRoom) =>
                                            {
                                                ReFreshEditDeviceAction(device, curRoom, functionView);
@@ -1545,22 +1026,22 @@
                                        functionView.CollectButton.MouseUpEventHandler += collectionEvent;
                                    }
                                }
                                else if (device.CommonDevice.Type == DeviceType.IASZone)
                            else if (device.Type == DeviceType.IASZone)
                                {
                                    //各类传感器
                                    var ias = device.CommonDevice as IASZone;
                                var ias = device as IASZone;
                                    var lightView = new FunctionMainView(xx, yy);
                                    itemView.AddChidren(lightView);
                                    lightView.Init();
                                    lightView.Tag = device;
                                lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                    lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                    lightView.SetStatuText(device.GetDeviceStatu());
                                    lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                    lightView.IsSelected = ias.iASInfo?.Alarm1 == 1;
                                    lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                    lightView.CanControl(false);
                                    if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                                if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                                    {
                                        lightView.CollectButton.IsSelected = false;
                                    }
@@ -1570,9 +1051,9 @@
                                    }
                                    lightView.CollectButton.MouseUpEventHandler += collectionEvent;
                                }
                                else if (device.CommonDevice.Type == DeviceType.TemperatureSensor)
                            else if (device.Type == DeviceType.TemperatureSensor)
                                {
                                    var tempera = device.CommonDevice as TemperatureSensor;
                                var tempera = device as TemperatureSensor;
                                    if (tempera.Gateway != null)
                                    {
@@ -1585,11 +1066,11 @@
                                                {
                                                    if (tempera.SensorDiv == 1)
                                                    {
                                                        ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device.CommonDevice);
                                                    ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device);
                                                    }
                                                    else if (tempera.SensorDiv == 2)
                                                    {
                                                        ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device.CommonDevice);
                                                    ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device);
                                                    }
                                                });
                                            }
@@ -1599,11 +1080,11 @@
                                                {
                                                    if (tempera.SensorDiv == 1)
                                                    {
                                                        ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device.CommonDevice);
                                                    ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device);
                                                    }
                                                    else if (tempera.SensorDiv == 2)
                                                    {
                                                        ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device.CommonDevice);
                                                    ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device);
                                                    }
                                                }
                                            }
@@ -1613,14 +1094,14 @@
                                        var lightView = new FunctionMainView(xx, yy);
                                        itemView.AddChidren(lightView);
                                        lightView.Init();
                                        lightView.Tag = device;
                                    lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                        lightView.SetStatuText(device.GetDeviceStatu());
                                        lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                    lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                    lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                        lightView.IsSelected = false;
                                        lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                    lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                        lightView.CanControl(false);
                                        if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                                    if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                                        {
                                            lightView.CollectButton.IsSelected = false;
                                        }
@@ -1631,22 +1112,22 @@
                                        lightView.CollectButton.MouseUpEventHandler += collectionEvent;
                                    }
                                }
                                else if (device.CommonDevice.Type == DeviceType.DoorLock)
                            else if (device.Type == DeviceType.DoorLock)
                                {
                                    //门锁
                                    var dimmableLight = device.CommonDevice as DoorLock;
                                var dimmableLight = device as DoorLock;
                                    var lightView = new FunctionMainView(xx, yy);
                                    itemView.AddChidren(lightView);
                                    lightView.Init();
                                    lightView.Tag = device;
                                lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                    lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                    lightView.SetStatuText(device.GetDeviceStatu());
                                    lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                    lightView.IsSelected = false;
                                    lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                    lightView.CanControl(false);
                                    if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                                if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                                    {
                                        lightView.CollectButton.IsSelected = false;
                                    }
@@ -1658,7 +1139,7 @@
                                    lightView.CardBG.MouseUpEventHandler += (sender, e) =>
                                    {
                                        CommonPage.Instance.IsDrawerLockMode = true;
                                        var userDoorLockPage = new UserDoorLockPage(Room.CurrentRoom, device);
                                    var userDoorLockPage = new UserDoorLockPage(HdlRoomLogic.Current.CurrentRoom, device);
                                        HomePage.Instance.AddChidren(userDoorLockPage);
                                        HomePage.Instance.PageIndex += 1;
                                        userDoorLockPage.Show();
@@ -1670,15 +1151,14 @@
                                    var lightView = new FunctionMainView(xx, yy);
                                    itemView.AddChidren(lightView);
                                    lightView.Init();
                                    lightView.Tag = device;
                                lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
                                    lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                                    lightView.SetStatuText(device.GetDeviceStatu());
                                    lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                                lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
                                lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                                    lightView.CanControl(false);
                                    //lightView.IsSelected = device.CommonDevice.IsOnline == 1;
                                    lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                                lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                                    if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                                if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                                    {
                                        lightView.CollectButton.IsSelected = false;
                                    }
@@ -1706,37 +1186,35 @@
        /// <param name="device"></param>
        /// <param name="curRoom"></param>
        /// <param name="functionView"></param>
        private void ReFreshEditDeviceAction(DeviceUI device, Common.Room curRoom, FunctionMainView functionView)
        private void ReFreshEditDeviceAction(CommonDevice device, Common.Room curRoom, FunctionMainView functionView)
        {
            if (Common.Room.CurrentRoom.IsLove)
            if (HdlRoomLogic.Current.CurrentRoom.IsLove)
            {
                functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                if (Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
                functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
                {
                    ShowFunction();
                }
            }
            else
            {
                if (curRoom.Id != Common.Room.CurrentRoom.Id)
                if (curRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id)
                {
                    Common.Room.CurrentRoom.DeleteDevice(device.FileName);
                    ShowFunction();
                }
                else
                {
                    functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                    functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
                    functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
                    functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
                    functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
                }
            }
        }
        #endregion
        #region ◆ 场景_____________________________
        #region ■ 场景分支___________________________
        /// <summary>
        /// 显示没场景
@@ -1771,7 +1249,7 @@
        {
            functionSceneBodyView.RemoveAll();
            //选择场景
            var sceneList = Room.CurrentRoom.SceneUIList;
            var sceneList = HdlSceneLogic.Current.GetRoomSceneList(HdlRoomLogic.Current.CurrentRoom);
            if (sceneList == null)
            {
                return;
@@ -1799,7 +1277,7 @@
                        itemView = new FrameLayout()
                        {
                            Height = Application.GetRealHeight(14 + 348),
                            Tag = scene
                            Tag = scene.Id
                        };
                        sceneScrolView.AddChidren(itemView);
                    }
@@ -1874,7 +1352,27 @@
        #endregion
        #region ◆ 切换住宅_________________________
        #region ■ 刷新_______________________________
        /// <summary>
        /// 刷新设备桌布控件
        /// </summary>
        public void RefreshBodyView()
        {
            functionSceneBodyView.RemoveAll();
            if (btnFunction.IsSelected)
            {
                ShowFunction();
            }
            else
            {
                ShowScene();
            }
        }
        #endregion
        #region ■ 切换住宅___________________________
        /// <summary>
        /// 切换住宅
        /// </summary>
@@ -1892,12 +1390,12 @@
                     Config.Instance.Save();
                     //刷新个人中心的内存及线程
                     await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
                     Room.InitAllRoom();
                    //初始化全部房间
                    HdlRoomLogic.Current.InitAllRoom();
                     Application.RunOnMainThread(() =>
                     {
                         Show();
                        ShowForm();
                         CommonPage.Loading.Hide();
                     });
                 })
@@ -1916,7 +1414,7 @@
        #endregion
        #region ◆ 进行设备状态读取__________________
        #region ■ 进行设备状态读取___________________
        /// <summary>
        /// 判断是否可以进行设备状态读取。在回调中读取
@@ -1965,7 +1463,7 @@
        #endregion
        #region ◆ 控制状态_________________________
        #region ■ 控制状态___________________________
        /// <summary>
        /// 显示设备控制状态
@@ -1985,7 +1483,7 @@
            }
            //标记已经发送控制命令到网关
            sendedControlCommand = true;
            //DeviceUI.ShowStatuTip(R.MyInternationalizationString.Success);
            //HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.Success);
        }
        /// <summary>
@@ -2036,5 +1534,385 @@
        }
        #endregion
        #region ■ 设备状态上报_______________________
        /// <summary>
        /// 添加设备状态上报事件
        /// </summary>
        private void AddDeviceReportEvent()
        {
            //设备属性上报
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceStatus", ReceiveComandDiv.A设备属性上报, (report) =>
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    if (report.DeviceStatusReport.AttriBute == null || report.DeviceStatusReport.AttriBute.Count == 0)
                    {
                        return;
                    }
                    for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
                    {
                        var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
                        if (rowFL.ChildrenCount == 0)
                        {
                            //设备为空或者控件为空
                            continue;
                        }
                        for (int j = 0; j < rowFL.ChildrenCount; j++)
                        {
                            var deviceUI = LocalDevice.Current.GetDevice((rowFL.GetChildren(j) as FunctionMainView).Tag.ToString());
                            if (deviceUI == null)
                            {
                                //设备为空或者控件为空
                                continue;
                            }
                            if (report.DeviceAddr != deviceUI.DeviceAddr || report.DeviceEpoint != deviceUI.DeviceEpoint)
                            {
                                //判断是否为当前设备
                                continue;
                            }
                            switch (deviceUI.Type)
                            {
                                case DeviceType.OnOffOutput:
                                    //开关功能
                                    if (report.DeviceStatusReport.CluterID == 6)
                                    {
                                        var onOffOutputLight = deviceUI as ZigBee.Device.ToggleLight;
                                        onOffOutputLight.DeviceStatusReport = report.DeviceStatusReport;
                                        onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        (rowFL.GetChildren(j) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1;
                                        (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                        onOffOutputLight.LastDateTime = DateTime.Now;
                                    }
                                    break;
                                case DeviceType.AirSwitch:
                                    //开关功能
                                    if (report.DeviceStatusReport.CluterID == 6)
                                    {
                                        var airSwitch = deviceUI as ZigBee.Device.AirSwitch;
                                        airSwitch.DeviceStatusReport = report.DeviceStatusReport;
                                        airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        (rowFL.GetChildren(j) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1;
                                        (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                        airSwitch.LastDateTime = DateTime.Now;
                                    }
                                    //当CluterID=3,就证明该设备在线,直接标记
                                    if (report.DeviceStatusReport.CluterID == 3)
                                    {
                                        deviceUI.IsOnline = 1;
                                        deviceUI.LastDateTime = DateTime.Now;
                                    }
                                    break;
                                case DeviceType.WindowCoveringDevice:
                                    if (report.DeviceStatusReport.CluterID == 258)
                                    {
                                        if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0)
                                        {
                                            //窗帘类型
                                            var rollerShade = deviceUI as Rollershade;
                                            rollerShade.DeviceStatusReport = report.DeviceStatusReport;
                                            rollerShade.WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData;
                                            rollerShade.LastDateTime = DateTime.Now;
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                        }
                                        if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8)
                                        {
                                            //窗帘百分比
                                            var rollerShade = deviceUI as Rollershade;
                                            rollerShade.DeviceStatusReport = report.DeviceStatusReport;
                                            rollerShade.WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData;
                                            rollerShade.LastDateTime = DateTime.Now;
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                        }
                                    }
                                    if (report.DeviceStatusReport.CluterID == 3)
                                    {
                                        deviceUI.IsOnline = 1;
                                        deviceUI.LastDateTime = DateTime.Now;
                                    }
                                    break;
                                case DeviceType.Thermostat:
                                    //AC功能
                                    if (report.DeviceStatusReport.CluterID == 513)
                                    {
                                        var ac = deviceUI as ZigBee.Device.AC;
                                        ac.DeviceStatusReport = report.DeviceStatusReport;
                                        var attriButeList = ac.DeviceStatusReport.AttriBute;
                                        foreach (var attList in attriButeList)
                                        {
                                            var curTemp = attList.AttriButeData / 100;
                                            switch (attList.AttributeId)
                                            {
                                                case 0:
                                                    //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
                                                    ac.currentLocalTemperature = curTemp;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                                case 17:
                                                    //此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
                                                    ac.currentCoolingSetpoint = curTemp;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                                case 18:
                                                    //此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
                                                    ac.currentHeatingSetpoint = curTemp;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                                case 4096:
                                                    //此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。
                                                    ac.currentAutoSetpoint = curTemp;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                                case 28:
                                                    //此属性描述恒温设备正处于哪种模式
                                                    ac.currentSystemMode = attList.AttriButeData;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                            }
                                        }
                                        (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                        (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                    }
                                    if (report.DeviceStatusReport.CluterID == 514)
                                    {
                                        var ac = deviceUI as ZigBee.Device.AC;
                                        var attriButeList = report.DeviceStatusReport.AttriBute;
                                        ac.DeviceStatusReport = report.DeviceStatusReport;
                                        foreach (var attList in attriButeList)
                                        {
                                            switch (attList.AttributeId)
                                            {
                                                case 0:
                                                    ac.currentFanMode = attList.AttriButeData;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                                case 4096:
                                                    ac.currentFanSwingMode = attList.AttriButeData;
                                                    ac.LastDateTime = DateTime.Now;
                                                    break;
                                            }
                                        }
                                        (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                        (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                    }
                                    //当CluterID=3,就证明该设备在线,直接标记
                                    if (report.DeviceStatusReport.CluterID == 3)
                                    {
                                        deviceUI.IsOnline = 1;
                                        deviceUI.LastDateTime = DateTime.Now;
                                    }
                                    break;
                                case DeviceType.DimmableLight:
                                    //调光灯功能
                                    if (report.DeviceStatusReport.CluterID == 6)
                                    {
                                        var dimmableLight = deviceUI as DimmableLight;
                                        dimmableLight.DeviceStatusReport = report.DeviceStatusReport;
                                        dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        (rowFL.GetChildren(j) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1;
                                        (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                        dimmableLight.LastDateTime = DateTime.Now;
                                    }
                                    //亮度
                                    if (report.DeviceStatusReport.CluterID == 8)
                                    {
                                        var dimmableLight = deviceUI as DimmableLight;
                                        dimmableLight.DeviceStatusReport = report.DeviceStatusReport;
                                        var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
                                        switch (attriButeList[0].AttributeId)
                                        {
                                            case 0:
                                                //此属性表明当前亮度程度
                                                dimmableLight.Level = attriButeList[0].AttriButeData;
                                                dimmableLight.LastDateTime = DateTime.Now;
                                                //(rowFL.GetChildren(j) as FunctionMainView).IsSelected = true;
                                                (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                                break;
                                        }
                                    }
                                    break;
                                case DeviceType.TemperatureSensor:
                                    //温度
                                    if (report.DeviceStatusReport.CluterID == 1026)
                                    {
                                        var tempera = deviceUI as TemperatureSensor;
                                        foreach (var data in report.DeviceStatusReport.AttriBute)
                                        {
                                            if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                                            {
                                                if (data.AttriButeData == 0)
                                                {
                                                    tempera.Temperatrue = 0;
                                                }
                                                else if (data.AttriButeData > 32767)
                                                {
                                                    //负数(特殊处理)
                                                    string strValue = (data.AttriButeData - 65536).ToString();
                                                    //小数点需要一位
                                                    strValue = strValue.Substring(0, strValue.Length - 1);
                                                    tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                                }
                                                else
                                                {
                                                    //小数点需要一位
                                                    string strValue = data.AttriButeData.ToString();
                                                    strValue = strValue.Substring(0, strValue.Length - 1);
                                                    tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                                }
                                                tempera.LastDateTime = DateTime.Now;
                                                (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                            }
                                        }
                                    }
                                    //湿度
                                    if (report.DeviceStatusReport.CluterID == 1029)
                                    {
                                        var tempera = deviceUI as TemperatureSensor;
                                        foreach (var data in report.DeviceStatusReport.AttriBute)
                                        {
                                            if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                                            {
                                                if (data.AttriButeData == 0)
                                                {
                                                    tempera.Humidity = 0;
                                                }
                                                else
                                                {
                                                    //小数点需要一位(湿度没有负数)
                                                    string strValue = data.AttriButeData.ToString();
                                                    strValue = strValue.Substring(0, strValue.Length - 1);
                                                    tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                                }
                                                tempera.LastDateTime = DateTime.Now;
                                                (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                            }
                                        }
                                    }
                                    break;
                            }
                        }
                    }
                }, ShowErrorMode.NO);
            });
            //传感器上报
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewSensor", ReceiveComandDiv.A传感器上报, (report) =>
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
                    {
                        var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
                        if (rowFL.ChildrenCount == 0)
                        {
                            //设备为空或者控件为空
                            continue;
                        }
                        for (int j = 0; j < rowFL.ChildrenCount; j++)
                        {
                            var deviceUI = LocalDevice.Current.GetDevice((rowFL.GetChildren(j) as FunctionMainView).Tag.ToString());
                            if (deviceUI == null)
                            {
                                //设备为空或者控件为空
                                continue;
                            }
                            if (report.DeviceAddr != deviceUI.DeviceAddr || report.DeviceEpoint != deviceUI.DeviceEpoint)
                            {
                                //判断是否为当前设备
                                continue;
                            }
                            switch (deviceUI.Type)
                            {
                                case DeviceType.IASZone:
                                    //ias
                                    var ias = report as IASZone;
                                    var iAS = deviceUI as ZigBee.Device.IASZone;
                                    iAS.iASInfo = ias.iASInfo;
                                    (rowFL.GetChildren(j) as FunctionMainView).IsSelected = iAS.iASInfo?.Alarm1 == 1;
                                    (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
                                    iAS.LastDateTime = DateTime.Now;
                                    break;
                            }
                        }
                    }
                }, ShowErrorMode.NO);
            });
        }
        #endregion
        #region ■ 切换楼层___________________________
        /// <summary>
        /// 显示选择楼层的界面
        /// </summary>
        private void ShowSelectFloorForm()
        {
            var floorFL = new Device.Category.SelectFloor();
            this.AddChidren(floorFL);
            floorFL.Init(35, 153);
            floorFL.changeFloor = true;
            floorFL.FloorAction = (floorId) =>
            {
                this.btnFloor.Text = Config.Instance.Home.GetFloorNameById(floorId);
                HdlRoomLogic.Current.CurrentRoom = HdlRoomLogic.Current.GetLoveRoom();
                this.ShowForm();
            };
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceStatus");
            HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewSensor");
            base.CloseFormBefore();
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 检测是否绑定有网关
        /// </summary>
        private bool CheckHadBindGateway()
        {
            //获取本地已经绑定的网关
            var gatewayList = HdlGatewayLogic.Current.GetAllLocalGateway();
            if (gatewayList.Count == 0)
            {
                return false;
            }
            //主人或者管理员才行
            if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
            {
                return true;
            }
            return false;
        }
        #endregion
    }
}