gxc
2019-12-17 bc6d6b77675b8915635aa04ba765ea627ac63cfa
ZigbeeApp/Shared/Phone/UserView/UserHomeView.cs
old mode 100755 new mode 100644
@@ -6,6 +6,7 @@
using Shared.Phone.Device.CommonForm;
using Shared.Phone.UserCenter.DoorLock;
using System.Timers;
using Shared.Phone.Device.DeviceLogic;
namespace Shared.Phone.UserView
{
@@ -121,231 +122,211 @@
                {
                    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;
                            var deviceUI = rowFL.Tag as DeviceUI;
                            if (deviceUI.CommonDevice == null || rowFL.ChildrenCount == 0)
                            if (rowFL.ChildrenCount == 0)
                            {
                                //设备为空或者控件为空
                                continue;
                            }
                            if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
                            {
                                //判断是否为当前设备
                                continue;
                            }
                            var frameLayout = rowFL.GetChildren(0) as FrameLayout;
                            switch (deviceUI.CommonDevice.Type)
                            {
                                case DeviceType.OnOffOutput:
                                    //开关功能
                                    if (common.DeviceStatusReport.CluterID == 6)
                                    {
                                        var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
                                        onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
                                        //记录、更新状态
                                        if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0)
                                        {
                                            continue;
                                        }
                                        onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        (rowFL.GetChildren(0) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1;
                                        (rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                        //记录回复时间
                                        onOffOutputLight.LastDateTime = DateTime.Now;
                                    }
                                    break;
                            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;
                                }
                                case DeviceType.AirSwitch:
                                    //开关功能
                                    if (common.DeviceStatusReport.CluterID == 6)
                                    {
                                        var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
                                        airSwitch.DeviceStatusReport = common.DeviceStatusReport;
                                        for (int j = 0; j < frameLayout.ChildrenCount; j++)
                                        {
                                            var tempView = frameLayout.GetChildren(j);
                                            if (tempView.Tag == null)
                                            {
                                                continue;
                                            }
                                            if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
                                            {
                                                //记录、更新状态
                                                if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
                                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)
                                                {
                                                    return;
                                                    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;
                                                    case 4099:
                                                        var value = Convert.ToString(attList.AttriButeData, 2).PadLeft(16, '0');
                                                        var modeStr = value.Substring(value.Length - 5, 5);
                                                        for (int k = 0; k < modeStr.Length; k++)
                                                        {
                                                            ac.listSupportMode[k] = Convert.ToInt32(modeStr[k]) == 49 ? 1 : 0;
                                                        }
                                                        break;
                                                }
                                                airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
                                                (rowFL.GetChildren(0) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1;
                                                (rowFL.GetChildren(0) 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(0) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
                                            (rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                            }
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                            (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;
                                        if (attriButeList == null || attriButeList.Count == 0)
                                        if (common.DeviceStatusReport.CluterID == 514)
                                        {
                                            continue;
                                        }
                                        var curTemp = (attriButeList[0].AttriButeData / 100 < ACControlBase.Temperature_High || attriButeList[0].AttriButeData / 100 > ACControlBase.Temperature_Low) ? attriButeList[0].AttriButeData / 100 : ACControlBase.Temperature_Default;
                                        switch (attriButeList[0].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 = attriButeList[0].AttriButeData;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                            case 4099:
                                                var value = Convert.ToString(attriButeList[0].AttriButeData, 2).PadLeft(16, '0');
                                                var modeStr = value.Substring(value.Length - 5, 5);
                                                for (int j = 0; j < modeStr.Length; j++)
                                            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)
                                                {
                                                    ac.listSupportMode[j] = Convert.ToInt32(modeStr[j]) == 49 ? 1 : 0;
                                                    case 0:
                                                        ac.currentFanMode = attList.AttriButeData;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                    case 4096:
                                                        ac.currentFanSwingMode = attList.AttriButeData;
                                                        ac.LastDateTime = DateTime.Now;
                                                        break;
                                                }
                                                break;
                                            }
                                            (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                            (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                        }
                                        (rowFL.GetChildren(0) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                        (rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                    }
                                    if (common.DeviceStatusReport.CluterID == 514)
                                    {
                                        var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
                                        var attriButeList = common.DeviceStatusReport.AttriBute;
                                        if (attriButeList == null || attriButeList.Count == 0)
                                        //当CluterID=3,就证明该设备在线,直接标记
                                        if (common.DeviceStatusReport.CluterID == 3)
                                        {
                                            return;
                                            var ac = deviceUI.CommonDevice as AC;
                                            ac.IsOnline = 1;
                                            ac.LastDateTime = DateTime.Now;
                                        }
                                        ac.DeviceStatusReport = common.DeviceStatusReport;
                                        switch (attriButeList[0].AttributeId)
                                        {
                                            case 0:
                                                ac.currentFanMode = attriButeList[0].AttriButeData;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                            case 4096:
                                                ac.currentFanSwingMode = attriButeList[0].AttriButeData;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                        }
                                        (rowFL.GetChildren(0) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
                                        (rowFL.GetChildren(0) 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;
                                        break;
                                case DeviceType.DimmableLight:
                                    //调光灯功能
                                    //开关功能
                                    if (common.DeviceStatusReport.CluterID == 6)
                                    {
                                        var dimmableLight = deviceUI.CommonDevice as DimmableLight;
                                        dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
                                        //记录、更新状态
                                        if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
                                    case DeviceType.DimmableLight:
                                        //调光灯功能
                                        if (common.DeviceStatusReport.CluterID == 6)
                                        {
                                            return;
                                            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;
                                        }
                                        dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        (rowFL.GetChildren(0) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1;
                                        (rowFL.GetChildren(0) 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;
                                        if (attriButeList == null || attriButeList.Count == 0)
                                        //亮度
                                        if (common.DeviceStatusReport.CluterID == 8)
                                        {
                                            continue;
                                            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;
                                            }
                                        }
                                        switch (attriButeList[0].AttributeId)
                                        {
                                            case 0:
                                                //此属性表明当前亮度程度
                                                dimmableLight.Level = attriButeList[0].AttriButeData;
                                                dimmableLight.LastDateTime = DateTime.Now;
                                                (rowFL.GetChildren(0) as FunctionMainView).IsSelected = true;
                                                (rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
                                                break;
                                        }
                                    }
                                    break;
                                        break;
                                }
                            }
                        }
                    }
@@ -425,7 +406,10 @@
                Gravity = Gravity.CenterVertical,
                UnSelectedImagePath = "Item/Floor.png"
            };
            topFrameLayout.AddChidren(floor);
            if (Config.Instance.Home.FloorDics.Count > 0)
            {
                topFrameLayout.AddChidren(floor);
            }
            floorBtn = new Button
            {
@@ -437,7 +421,10 @@
                TextColor = ZigbeeColor.Current.GXCTextColor,
                Text = Config.Instance.Home.GetCurrentFloorName
            };
            topFrameLayout.AddChidren(floorBtn);
            if (Config.Instance.Home.FloorDics.Count > 0)
            {
                topFrameLayout.AddChidren(floorBtn);
            }
            var messageBtn = new Button()
            {
@@ -459,7 +446,8 @@
                TextAlignment = TextAlignment.CenterLeft,
                Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull),
                TextSize = 24,
                TextColor = ZigbeeColor.Current.GXCTextBlackColor
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                IsBold=true
            };
            if (Config.Instance.Home.IsOthreShare)
            {
@@ -475,7 +463,7 @@
                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.OK));
                    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) =>
                    {
@@ -502,7 +490,7 @@
                        Y = Application.GetRealHeight(248),
                        Width = Application.GetMinRealAverage(449),
                        Height = Application.GetMinRealAverage(478),
                        UnSelectedImagePath = "Item/SelectHouse"
                        UnSelectedImagePath = "Item/SelectHouse.png"
                    };
                    closeBGview.AddChidren(bg);
@@ -510,8 +498,8 @@
                    {
                        X = Application.GetRealWidth(35),
                        Y = Application.GetRealHeight(271),
                        Height = Application.GetRealHeight(449),
                        Width = Application.GetRealWidth(440),
                        Height = Application.GetMinRealAverage(449),
                        Width = Application.GetMinRealAverage(440),
                        Radius = CommonPage.BigFormRadius,
                        BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
                    };
@@ -623,23 +611,25 @@
            //消息
            messageBtn.MouseUpEventHandler += (send, e) =>
            {
            };
            #endregion
            if (CanBindGateway() == false)
            {
                var roomPageView = new PageLayout()
                var roomPageView = new HorizontalPages()
                {
                    Y = Application.GetRealHeight(302),
                    Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonPage.XLeft * 2),
                    Height = Application.GetMinRealAverage(roomPageView_Height),
                    Radius = CommonPage.BigFormRadius,
                    Gravity = Gravity.CenterHorizontal,
                    IsShowPoint = false
                    Width = Application.GetRealWidth(CommonPage.AppRealWidth),
                    Height = Application.GetRealHeight(478),
                };
                AddChidren(roomPageView);
                //突出边距
                roomPageView.TCBJ = Application.GetRealWidth(112);
                //两个page之间的间距
                roomPageView.JMBJ = Application.GetRealWidth(69);
                //当前房间
                //Room.CurrentRoom = Room.CurrentRoom == null ? Room.Lists[0] : Room.CurrentRoom;
@@ -647,50 +637,12 @@
                Room.CurrentRoom = rList[0];
                foreach (var room in rList)
                {
                    var roomBackView = new FrameLayout()
                    var roomView = new Device.CommonForm.RoomView(0, 0);
                    roomPageView.AddChidren(roomView);
                    roomView.Init(room);
                    roomView.action += () =>
                    {
                        BackgroundImagePath = room.BackgroundImage
                    };
                    roomPageView.AddChidren(roomBackView);
                    var roomBG = new Button()
                    {
                        UnSelectedImagePath = "Room/HomeBG.png",
                        //UnSelectedImagePath = room.BackgroundImage
                    };
                    roomBackView.AddChidren(roomBG);
                    var roomName = new Button()
                    {
                        X = Application.GetRealWidth(20),
                        Y = Application.GetRealHeight(20),
                        Width = Application.GetRealWidth(500),
                        Height = Application.GetRealHeight(80),
                        Text = room.Name,
                        TextAlignment = TextAlignment.CenterLeft,
                        TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                        TextSize = 18,
                    };
                    roomBackView.AddChidren(roomName);
                    var roomListBtn = new Device.CommonForm.SelectedStatuButton()
                    {
                        X = roomPageView.Width - Application.GetRealWidth(100 + 20),
                        Y = Application.GetRealHeight(20),
                        Width = Application.GetMinRealAverage(100),
                        Height = Application.GetMinRealAverage(100),
                        UnSelectedImagePath = "Item/List.png",
                    };
                    roomBackView.AddChidren(roomListBtn);
                    roomListBtn.MouseUpEventHandler += (send, e) =>
                    {
                        CommonPage.Instance.IsDrawerLockMode = true;
                        var editRoom = new Device.Room.EditRoom();
                        HomePage.Instance.AddChidren(editRoom);
                        HomePage.Instance.PageIndex += 1;
                        editRoom.Show(room);
                        editRoom.action += () =>
                        {
                            Show();
                        };
                        Show();
                    };
                }
@@ -714,7 +666,9 @@
                    TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
                    SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                    TextID = R.MyInternationalizationString.Scence,
                    IsSelected = false
                    IsSelected = true,
                    TextSize=16,
                    IsBold=true
                };
                functionSceneView.AddChidren(sceneBtn);
@@ -728,7 +682,8 @@
                    TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
                    SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                    TextID = R.MyInternationalizationString.Function,
                    IsSelected = false
                    IsSelected = false,
                    TextSize=14
                };
                functionSceneView.AddChidren(functionBtn);
@@ -747,6 +702,10 @@
                {
                    sceneBtn.IsSelected = false;
                    functionBtn.IsSelected = true;
                    sceneBtn.TextSize = 14;
                    sceneBtn.IsBold = false;
                    functionBtn.TextSize = 16;
                    functionBtn.IsBold = true;
                    RefreshBodyView();
                };
                //选择场景分栏
@@ -754,6 +713,10 @@
                {
                    functionBtn.IsSelected = false;
                    sceneBtn.IsSelected = true;
                    sceneBtn.TextSize = 16;
                    sceneBtn.IsBold = true;
                    functionBtn.TextSize = 14;
                    functionBtn.IsBold = false;
                    RefreshBodyView();
                };
@@ -770,7 +733,7 @@
            {
                ShowNoGatewayTip();
            }
        }
        #endregion
@@ -909,7 +872,7 @@
        private void GoToAddGateWay(object sender, MouseEventArgs mouseEventArgs)
        {
            var selectNewGateWayForm = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm { };
            selectNewGateWayForm.AddForm();
            selectNewGateWayForm.AddForm(selectNewGateWayForm);
        }
        #endregion
@@ -935,7 +898,7 @@
            {
                Y = noFunction.Bottom,
                Height = Application.GetRealHeight(200),
                Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}", "\r\n"),
                Text = Language.StringByID(R.MyInternationalizationString.NoFunction_Tip).Replace("{\\r\\n}", "\r\n"),
                TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
                IsMoreLines = true
            };
@@ -980,7 +943,6 @@
                        itemView = new FrameLayout()
                        {
                            Height = Application.GetRealHeight(14 + 348),
                            Tag = device
                        };
                        deviceVerticalScrolViewLayout.AddChidren(itemView);
                    }
@@ -1019,17 +981,18 @@
                            //发送读取状态命令
                            ReadStatus(rollerShade, () =>
                            {
                                rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device.CommonDevice);
                            });
                        }
                        else
                        {
                            if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds)
                            {
                                rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device.CommonDevice);
                            }
                        }
                        var lightView = new FunctionMainView(xx, yy);
                        lightView.Tag = device;
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
@@ -1049,7 +1012,7 @@
                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                (device.CommonDevice as Rollershade).CurtainUpDownStopControl(1);
                                (device.CommonDevice as Rollershade).CurtainUpDownStopControl(0);
                                ((sender as Button).Parent as FunctionMainView).SetStatuText(CommonFormResouce.GetSwitchStatu(true));
                                ((sender as Button).Parent as FunctionMainView).IsSelected = true;
@@ -1075,7 +1038,7 @@
                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
                                (device.CommonDevice as Rollershade).CurtainUpDownStopControl(0);
                                (device.CommonDevice as Rollershade).CurtainUpDownStopControl(1);
                                ((sender as Button).Parent as FunctionMainView).SetStatuText(CommonFormResouce.GetSwitchStatu(false));
                                ((sender as Button).Parent as FunctionMainView).IsSelected = false;
@@ -1124,22 +1087,21 @@
                            //发送读取状态命令
                            ReadStatus(light, () =>
                            {
                                light.ReadOnOffStatus();
                                light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                            });
                        }
                        else
                        {
                            if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
                            {
                                light.ReadOnOffStatus();
                                light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                            }
                        }
                        var lightView = new FunctionMainView(xx, yy);
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.Tag = device;
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                        lightView.SetStatuText(device.GetDeviceStatu());
                        lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
@@ -1259,8 +1221,7 @@
                            //发送读取状态命令
                            ReadStatus(airSwitch, () =>
                            {
                                airSwitch.ReadOnOffStatus();
                                airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                            });
                        }
                        else
@@ -1268,14 +1229,14 @@
                            //防止短时间内多次读取设备状态
                            if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                            {
                                airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                airSwitch.ReadOnOffStatus();
                                ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
                            }
                        }
                        var lightView = new FunctionMainView(xx, yy);
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.Tag = device;
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                        lightView.SetStatuText(device.GetDeviceStatu());
                        lightView.SetDeviceName(airSwitch.DeviceEpointName);
@@ -1367,15 +1328,7 @@
                            //发送读取状态命令
                            ReadStatus(ac, () =>
                            {
                                ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ac.ReadLocalTemperature();
                                ac.ReadCoolingSetpoint();
                                ac.ReadHeatingSetpoint();
                                ac.ReadAutoSetpoint();
                                ac.ReadFanMode();
                                ac.ReadSystemMode();
                                ac.ReadSystemFansSwingMode();
                                ac.ReadModeSupport();
                                ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
                            });
                        }
                        else
@@ -1383,20 +1336,13 @@
                            //防止短时间内多次读取设备状态
                            if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                            {
                                ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                ac.ReadLocalTemperature();
                                ac.ReadCoolingSetpoint();
                                ac.ReadHeatingSetpoint();
                                ac.ReadAutoSetpoint();
                                ac.ReadFanMode();
                                ac.ReadSystemMode();
                                ac.ReadSystemFansSwingMode();
                                ac.ReadModeSupport();
                                ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
                            }
                        }
                        var lightView = new FunctionMainView(xx, yy);
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.Tag = device;
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                        lightView.SetStatuText(device.GetDeviceStatu());
                        lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
@@ -1486,8 +1432,7 @@
                            //发送读取状态命令
                            ReadStatus(dimmableLight, () =>
                            {
                                dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                dimmableLight.ReadOnOffStatus();
                                ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device.CommonDevice);
                            });
                        }
                        else
@@ -1495,14 +1440,14 @@
                            //防止短时间内多次读取设备状态
                            if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                            {
                                dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                dimmableLight.ReadOnOffStatus();
                                ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device.CommonDevice);
                            }
                        }
                        var lightView = new FunctionMainView(xx, yy);
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.Tag = device;
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                        lightView.SetStatuText(device.GetDeviceStatu());
                        lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
@@ -1597,24 +1542,11 @@
                        {
                            continue;
                        }
                        if (dimmableLight.Gateway.IsVirtual)
                        {
                            ReadStatus(dimmableLight, () =>
                            {
                                dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                            });
                        }
                        else
                        {
                            if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                            {
                                dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                            }
                        }
                        var lightView = new FunctionMainView(xx, yy);
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.Tag = device;
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                        lightView.SetStatuText(device.GetDeviceStatu());
                        lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
@@ -1646,6 +1578,7 @@
                        var lightView = new FunctionMainView(xx, yy);
                        itemView.AddChidren(lightView);
                        lightView.Init();
                        lightView.Tag = device;
                        lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
                        lightView.SetStatuText(device.GetDeviceStatu());
                        lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
@@ -1691,7 +1624,7 @@
            {
                Y = noScene.Bottom,
                Height = Application.GetRealHeight(200),
                Text = Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}", "\r\n"),
                Text = Language.StringByID(R.MyInternationalizationString.NoScene_Tip).Replace("{\\r\\n}", "\r\n"),
                TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
                IsMoreLines = true
            };
@@ -1720,7 +1653,7 @@
                for (int i = 0; i < sceneList.Count; i++)
                {
                    var scene = sceneList[i];
                    int xx = 43 + i % 2 * (20 + 487);
                    int xx = 33 + i % 2 * (40 + 487);
                    int yy = 14;
                    if (scene == null)
                    {
@@ -1749,63 +1682,59 @@
        /// GetDelayScene
        /// </summary>
        /// <param name="scrolViewLayout"></param>
        private void GetDelayScene(VerticalScrolViewLayout scrolViewLayout)
        private async void GetDelayScene(VerticalScrolViewLayout scrolViewLayout)
        {
            new System.Threading.Thread(async () =>
            {
                var catDelaySceneResponseAllData = await Scene.CatDelaySceneAsync();
                if (catDelaySceneResponseAllData == null)
                {
                    return;
                }
                var catDelaySceneResponseData = catDelaySceneResponseAllData.catDelaySceneResponseData;
                if (catDelaySceneResponseData == null || catDelaySceneResponseData.DelayScenesList.Count == 0)
                {
                    return;
                }
                var delayList = catDelaySceneResponseData.DelayScenesList;
                Application.RunOnMainThread(() =>
            var catDelaySceneResponseAllData = await Scene.CatDelaySceneAsync();
            if (catDelaySceneResponseAllData == null)
            {
                return;
            }
            var catDelaySceneResponseData = catDelaySceneResponseAllData.catDelaySceneResponseData;
            if (catDelaySceneResponseData == null || catDelaySceneResponseData.DelayScenesList.Count == 0)
            {
                return;
            }
            var delayList = catDelaySceneResponseData.DelayScenesList;
            for (int i = 0; scrolViewLayout != null && i < scrolViewLayout.ChildrenCount; i++)
            {
                var iView = scrolViewLayout.GetChildren(i) as FrameLayout;
                for (int j = 0; iView != null && j < iView.ChildrenCount; j++)
                {
                    for (int i = 0; scrolViewLayout != null && i < scrolViewLayout.ChildrenCount; i++)
                    var sceneView = iView.GetChildren(j) as SceneMainView;
                    foreach (var delayScenesListResponseInfo in delayList)
                    {
                        var iView = scrolViewLayout.GetChildren(i) as FrameLayout;
                        for (int j = 0; iView != null && j < iView.ChildrenCount; j++)
                        if (delayScenesListResponseInfo.ScenesId == sceneView.scene.Id)
                        {
                            var sceneView = iView.GetChildren(j) as SceneMainView;
                            foreach (var delayScenesListResponseInfo in delayList)
                            var remainTime = delayScenesListResponseInfo.RemainTime;
                            sceneView.scene.RemainTime = remainTime;
                            if (remainTime > 0)
                            {
                                if (delayScenesListResponseInfo.ScenesId == sceneView.scene.Id)
                                new System.Threading.Thread(() =>
                                {
                                    var times = delayScenesListResponseInfo.RemainTime;
                                    sceneView.scene.RemainTime = times;
                                    new System.Threading.Thread(() =>
                                    while (remainTime-- > 0)
                                    {
                                        while (times > 0)
                                        {
                                            System.Threading.Thread.Sleep(1000);
                                            Application.RunOnMainThread(() =>
                                            {
                                                sceneView.SetTimeText(CommonFormResouce.GetTimeString(times));
                                            });
                                            times -= 1;
                                        }
                                        System.Threading.Thread.Sleep(1000);
                                        Application.RunOnMainThread(() =>
                                        {
                                            sceneView.SetTimeImage();
                                            sceneView.SetTimeText(CommonFormResouce.GetTimeString(remainTime));
                                        });
                                    })
                                    { IsBackground = true }.Start();
                                    break;
                                }
                                    }
                                    Application.RunOnMainThread(() =>
                                    {
                                        sceneView.scene.RemainTime = 0;
                                        sceneView.SetTimeImage();
                                    });
                                })
                                { IsBackground = true }.Start();
                            }
                            break;
                        }
                    }
                });
            })
            { IsBackground = true }.Start();
                }
            }
        }
        #endregion