WJC
2019-11-13 a4d525d08da7b6fb985b0069c539c11b06306a9b
ZigbeeApp/Shared/Phone/Device/Category/Category.cs
@@ -5,6 +5,7 @@
using Shared.R;
using ZigBee.Device;
using Shared.Phone.Device.CommonForm;
using Shared.Phone.Device.AC;
namespace Shared.Phone.Device.Category
{
@@ -166,17 +167,14 @@
                                    {
                                        var light = deviceUI.CommonDevice as ToggleLight;
                                        light.DeviceStatusReport = common.DeviceStatusReport;
                                        //记录、更新状态
                                        if (light.DeviceStatusReport.AttriBute == null || light.DeviceStatusReport.AttriBute.Count == 0)
                                        {
                                            continue;
                                        }
                                        light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                        row.SetStatu(light.OnOffStatus == 1);
                                        row.SetStatuText(deviceUI.GetDeviceStatu());
                                        //记录回复时间
                                        light.LastDateTime = DateTime.Now;
                                    }
                                    if (common.DeviceStatusReport.CluterID == 3)
@@ -194,7 +192,6 @@
                                    {
                                        var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
                                        airSwitch.DeviceStatusReport = common.DeviceStatusReport;
                                        //记录、更新状态
                                        if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
                                        {
                                            return;
@@ -203,7 +200,6 @@
                                        var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                        row.SetStatu(airSwitch.OnOffStatus == 1);
                                        row.SetStatuText(deviceUI.GetDeviceStatu());
                                        //记录回复时间
                                        airSwitch.LastDateTime = DateTime.Now;
                                    }
                                    if (common.DeviceStatusReport.CluterID == 3)
@@ -257,72 +253,74 @@
                                        }
                                        var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
                                        ac.DeviceStatusReport = common.DeviceStatusReport;
                                        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 = attriButeList[0].AttriButeData / 100;
                                                ac.currentLocalTemperature = curTemp;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                            case 17:
                                                //此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
                                                ac.currentCoolingSetpoint = attriButeList[0].AttriButeData / 100;
                                                ac.currentCoolingSetpoint = curTemp;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                            case 18:
                                                //此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
                                                ac.currentHeatingSetpoint = attriButeList[0].AttriButeData / 100;
                                                ac.currentHeatingSetpoint = curTemp;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                            case 4096:
                                                ac.currentAutoSetpoint = curTemp;
                                                ac.LastDateTime = DateTime.Now;
                                                break;
                                            case 28:
                                                //此属性描述恒温设备正处于哪种模式
                                                //Off = 0  Auto = 1 Cool = 3 Heat = 4 FanOnly = 7  Dry = 8
                                                ac.currentSystemMode = attriButeList[0].AttriButeData;
                                                ac.LastDateTime = DateTime.Now;
                                                for (int j = 0; j < rowLayout.ChildrenCount; j++)
                                                {
                                                    var tempView = rowLayout.GetChildren(j);
                                                    if (tempView.Tag == null)
                                                    {
                                                        continue;
                                                    }
                                                    if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
                                                    {
                                                        if (ac.currentSystemMode == 0)
                                                        {
                                                            (tempView as Button).IsSelected = false;
                                                        }
                                                        else
                                                        {
                                                            (tempView as Button).IsSelected = true;
                                                        }
                                                    }
                                                }
                                                break;
                                        }
                                        var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                        row.SetStatu(ac.currentSystemMode != 0);
                                        row.SetStatuText(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)
                                        {
                                            return;
                                        }
                                        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;
                                        }
                                        var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                        row.SetStatu(ac.currentSystemMode != 0);
                                        row.SetStatuText(deviceUI.GetDeviceStatu());
                                    }
                                    if (common.DeviceStatusReport.CluterID == 3)
                                    {
                                        var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
                                        ac.IsOnline = 1;
                                        //记录回复时间
                                        ac.LastDateTime = DateTime.Now;
                                        for (int j = 0; j < rowLayout.ChildrenCount; j++)
                                        {
                                            var tempView = rowLayout.GetChildren(j);
                                            if (tempView.Tag == null)
                                            {
                                                continue;
                                            }
                                            if (tempView.Tag.ToString() == deviceStatus_Online)
                                            {
                                                (tempView as Button).IsSelected = ac.IsOnline == 1;
                                            }
                                        }
                                        var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                        row.SetStatu(true);
                                    }
                                    break;
                                case DeviceType.DimmableLight:
@@ -338,10 +336,8 @@
                                        }
                                        dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
                                        var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                        row.SetStatu(dimmableLight.OnOffStatus == 1);
                                        row.SetStatuText(deviceUI.GetDeviceStatu());
                                        //记录回复时间
                                        dimmableLight.LastDateTime = DateTime.Now;
                                    }
                                    if (common.DeviceStatusReport.CluterID == 3)
@@ -409,8 +405,8 @@
                                case DeviceType.Thermostat:
                                    deviceUI.CommonDevice.LastDateTime = DateTime.Now;
                                    deviceUI.CommonDevice.IsOnline = common.IsOnline;
                                    //var row4 = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                    //row4.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
                                    var row5 = rowLayout.GetChildren(0) as CategoryFunctionRow;
                                    row5.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
                                    break;
                            }
                        }
@@ -442,6 +438,7 @@
        {
            BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            instance = this;
            ZbGateway.StatusList.Add(this);
        }
        /// <summary>
@@ -450,8 +447,6 @@
        /// <param name="selectedBtn">选中那个界面 0--功能 1--场景 2--自动化 </param>
        public void Show(int selectedBtn = 1)
        {
            ZbGateway.StatusList.Add(this);
            RemoveAll();
            #region topview
@@ -882,10 +877,10 @@
                            detailInfo.action = RefreshBodyView;
                        };
                        if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.OnOffOutput)
                        if (deviceUI.CommonDevice.Type == DeviceType.OnOffOutput)
                        {
                            //灯
                            var light = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
                            var light = deviceUI.CommonDevice as ToggleLight;
                            //补上非远程
                            if (light.Gateway == null)
                            {
@@ -1218,11 +1213,13 @@
                                UserView.UserHomeView.ReadStatus(ac, () =>
                                {
                                    ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                    ac.ReadFanMode();
                                    ac.ReadSystemMode();
                                    ac.ReadLocalTemperature();
                                    ac.ReadCoolingSetpoint();
                                    ac.ReadHeatingSetpoint();
                                    ac.ReadAutoSetpoint();
                                    ac.ReadFanMode();
                                    ac.ReadSystemMode();
                                    ac.ReadSystemFansSwingMode();
                                });
                            }
                            else
@@ -1231,11 +1228,13 @@
                                if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                                {
                                    ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
                                    ac.ReadFanMode();
                                    ac.ReadSystemMode();
                                    ac.ReadLocalTemperature();
                                    ac.ReadCoolingSetpoint();
                                    ac.ReadHeatingSetpoint();
                                    ac.ReadAutoSetpoint();
                                    ac.ReadFanMode();
                                    ac.ReadSystemMode();
                                    ac.ReadSystemFansSwingMode();
                                }
                            }
@@ -1262,8 +1261,8 @@
                                zbGateway.ReportAction += UpdateDeviceControllStatu;
                                AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
                                (send2 as CommonForm.SelectedStatuButton).IsSelected = !(send2 as CommonForm.SelectedStatuButton).IsSelected;
                                if ((send2 as CommonForm.SelectedStatuButton).IsSelected)
                                (send2 as Button).IsSelected = !(send2 as Button).IsSelected;
                                if ((send2 as Button).IsSelected)
                                {
                                    ac.Open();
                                }
@@ -1302,6 +1301,16 @@
                            };
                            deviceTypeRowLayout.AddRightView(delBtn);
                            delBtn.MouseUpEventHandler += delEvent;
                            deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
                            {
                                var acControl = new Phone.Device.AC.ACControl();
                                UserView.HomePage.Instance.AddChidren(acControl);
                                UserView.HomePage.Instance.PageIndex += 1;
                                UserView.HomePage.Instance.ScrollEnabled = false;
                                //rollerShadeControl.action = RefreshBodyView;
                                acControl.Show(deviceUI, room);
                            };
                        }
                        else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.WindowCoveringDevice)
                        {
@@ -1653,11 +1662,24 @@
                        Tag = scene
                    };
                    if (!room.IsSharedRoom)
                    if(room.IsSharedRoom)
                    {
                        sceneRowLayout.AddRightView(settingBtn);
                        sceneRowLayout.AddRightView(deleteBtn);
                    }
                    else
                    {
                        if(room.IsLove)
                        {
                            sceneRowLayout.AddRightView(deleteBtn);
                        }
                        else
                        {
                            sceneRowLayout.AddRightView(settingBtn);
                            sceneRowLayout.AddRightView(deleteBtn);
                        }
                    }
                    //调用场景
                    EventHandler<MouseEventArgs> sceneUpHandler = async (sender, e) =>