wxr
2024-09-14 c00da77d00a479fa5d022346a6d9075f90a5c087
HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
@@ -6,7 +6,25 @@
namespace HDL_ON.UI
{
    public class VerticalScrolViewLayoutJinmao : VerticalScrolViewLayout
    {
        public VerticalScrolViewLayoutJinmao()
        {
#if __IOS__
            try
            {
                //自动偏移取消
                if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
                {
                    (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
                }
            }catch(Exception ex)
            {
                MainPage.Log("error", "金茂iOS 滚动容器偏移值设置异常:" + ex.Message);
            }
#endif
        }
    }
    /// <summary>
   /// 绿建科技系统
@@ -16,8 +34,9 @@
    {
        static AcstParentPage basePage;
        VerticalScrolViewLayout contentView;
        VerticalScrolViewLayoutJinmao contentView;
        string helloText = "上午好";
        #region 天气控件
        Button btnOutdoorTemp;
@@ -41,9 +60,7 @@
        /// </summary>
        Dictionary<string, AcstSubControlView> subViewList;
        Button btnWorkSceneControl;
        Button btnModeControl;
        Button btnPowerControl;
@@ -65,134 +82,7 @@
        public AcstParentPage()
        {
            basePage = this;
            this.function = FunctionList.List.GetAcstParentList()[0];
            this.BackgroundColor = CSS.CSS_Color.BackgroundColor;
            contentView = new VerticalScrolViewLayout() {
                Height = Application.GetRealHeight(667 - 56),
            };
            this.AddChidren(contentView);
            subViewList = new Dictionary<string, AcstSubControlView>();
        }
        /// <summary>
        /// 更新天气信息
        /// </summary>
        public void InitGetWeatherAction()
        {
            MainPage.CityWeatherAction = () =>
            {
                Application.RunOnMainThread(() =>
                {
                    btnOutdoorTemp.Text = MainPage.cityInfo.temperature + "°";
                    btnWeather.Text = MainPage.cityInfo.weather;
                    btnHumidityValues.Text = MainPage.cityInfo.humidity + "%";
                    btnHumidityValues.Width = btnHumidityValues.GetTextWidth() + Application.GetRealWidth(10);
                    btnPm25Values.Text = MainPage.cityInfo.pm25;
                    btnPm25Values.Width = btnPm25Values.GetTextWidth() + Application.GetRealWidth(10);
                });
            };
        }
        /// <summary>
        /// 更新主控数据信息
        /// </summary>
        public static void UpdateAcstParentInfo(Function temp)
        {
            if (basePage == null)
            {
                return;
            }
            Application.RunOnMainThread(() =>
            {
                if (basePage.sensorDiyView_Temp != null)
                    basePage.sensorDiyView_Temp.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_temp.ToString()).state,true);
                if (basePage.sensorDiyView_Humi != null)
                    basePage.sensorDiyView_Humi.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_humidity.ToString()).state, true);
                if (basePage.sensorDiyView_Pm25 != null)
                    basePage.sensorDiyView_Pm25.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.pm25.ToString()).state,false);
                if (basePage.sensorDiyView_Co2 != null)
                    basePage.sensorDiyView_Co2.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.co2.ToString()).state, false);
                if (basePage.sensorDiyView_Tvoc != null)
                    basePage.sensorDiyView_Tvoc.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.tvoc.ToString()).state, false);
                if (basePage.sensorDiyView_EleDay != null)
                    basePage.sensorDiyView_EleDay.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.day_electricity.ToString()).state, false);
                if (basePage.sensorDiyView_EleMonth != null)
                    basePage.sensorDiyView_EleMonth.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.month_electricity.ToString()).state, false);
                if (basePage.sensorDiyView_EleActivePower != null)
                    basePage.sensorDiyView_EleActivePower.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.active_power.ToString()).state, false);
                switch (temp.GetAttrState("mode"))
                {
                    case "cool"://制冷
                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeCoolIcon2.png";
                        basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeCoolIcon2.png";
                        break;
                    case "heat"://制热
                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatIcon2.png";
                        basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHeatIcon2.png";
                        break;
                    case "fan"://通风
                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeFanIcon2.png";
                        basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeFanIcon2.png";
                        break;
                    case "dry"://除湿
                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeDeHumiIcon2.png";
                        basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeDeHumiIcon2.png";
                        break;
                    case "humidity"://加湿
                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHumiIcon2.png";
                        basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHumiIcon2.png";
                        break;
                    case "heat_humidity"://制热加湿
                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatHumiIcon2.png";
                        basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHeatHumiIcon2.png";
                        break;
                }
                switch (temp.GetAttrState("scene"))
                {
                    case "at_home"://在家
                        basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAtHome2.png";
                        basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneAtHome2.png";
                        break;
                    case "leave_home"://离家
                        basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAwayHomeIcon2.png";
                        basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneAwayHomeIcon2.png";
                        break;
                    case "sleep"://睡眠
                        basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneSleepIcon2.png";
                        basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneSleepIcon2.png";
                        break;
                }
                basePage.btnModeControl.IsSelected = basePage.btnWorkSceneControl.IsSelected = basePage.btnPowerControl.IsSelected = temp.GetAttrState("on_off") == "on";
            });
        }
        /// <summary>
        /// 更新子控信息
        /// </summary>
        /// <param name="temp"></param>
        public static void UpdateAcstSubInfo(Function temp)
        {
            if(basePage == null)
            {
                return;
            }
            Application.RunOnMainThread(() => {
                var view = basePage.subViewList[temp.sid];
                if(view!= null)
                {
                    view.btnSubHumidityValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%";
                    view.btnSubTempValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "°";
                    view.btnSubPower.IsSelected = temp.GetAttrState(AcstSub_AttrEnum.on_off.ToString()) == "on";
                }
            });
        }
        public void LoadPage()
        {
            var curTime = DateTime.Now;
            string helloText = "上午好";
            if (Language.CurrentLanguage != "Chinese")
            {
                helloText = "Good morning";
@@ -224,11 +114,171 @@
                {
                    helloText = "Good evening";
                }
                curColor = 0xFF9175F3;
                imageFolder = "purple";
            }
            this.function = FunctionList.List.GetAcstParentList()[0];
            this.BackgroundColor = CSS.CSS_Color.BackgroundColor;
            //this.AddChidren(new Button() { Height = Application.GetRealHeight(50), BackgroundColor = curColor });
            contentView = new VerticalScrolViewLayoutJinmao()
            {
                Height = Application.GetRealHeight(667 - 56),
                VerticalScrollBarEnabled = false,
            };
            basePage.AddChidren(contentView);
            subViewList = new Dictionary<string, AcstSubControlView>();
        }
        /// <summary>
        /// 更新天气信息
        /// </summary>
        public void InitGetWeatherAction()
        {
            MainPage.CityWeatherAction = () =>
            {
                Application.RunOnMainThread(() =>
                {
                    btnOutdoorTemp.Text = MainPage.cityInfo.temperature + "°";
                    btnWeather.Text = MainPage.cityInfo.weather;
                    btnHumidityValues.Text = MainPage.cityInfo.humidity + "%";
                    btnHumidityValues.Width = btnHumidityValues.GetTextWidth() + Application.GetRealWidth(10);
                    btnPm25Values.Text = MainPage.cityInfo.pm25;
                    btnPm25Values.Width = btnPm25Values.GetTextWidth() + Application.GetRealWidth(10);
                });
            };
        }
        /// <summary>
        /// 更新主控数据信息
        /// </summary>
        public static void UpdateAcstParentInfo(Function temp)
        {
            try
            {
                if (basePage == null)
                {
                    return;
                }
                Application.RunOnMainThread(() =>
                {
                    if (basePage.sensorDiyView_Temp != null)
                        basePage.sensorDiyView_Temp.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_temp.ToString()).state, true);
                    if (basePage.sensorDiyView_Humi != null)
                        basePage.sensorDiyView_Humi.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_humidity.ToString()).state, true);
                    if (basePage.sensorDiyView_Pm25 != null)
                        basePage.sensorDiyView_Pm25.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.pm25.ToString()).state, false);
                    if (basePage.sensorDiyView_Co2 != null)
                        basePage.sensorDiyView_Co2.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.co2.ToString()).state, false);
                    if (basePage.sensorDiyView_Tvoc != null)
                        basePage.sensorDiyView_Tvoc.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.tvoc.ToString()).state, false);
                    if (basePage.sensorDiyView_EleDay != null)
                        basePage.sensorDiyView_EleDay.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.day_electricity.ToString()).state, false);
                    if (basePage.sensorDiyView_EleMonth != null)
                        basePage.sensorDiyView_EleMonth.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.month_electricity.ToString()).state, false);
                    if (basePage.sensorDiyView_EleActivePower != null)
                        basePage.sensorDiyView_EleActivePower.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.active_power.ToString()).state, false);
                    switch (temp.GetAttrState("mode"))
                    {
                        case "cool"://制冷
                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeCoolIcon2.png";
                            basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeCoolIcon2.png";
                            break;
                        case "heat"://制热
                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatIcon2.png";
                            basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHeatIcon2.png";
                            break;
                        case "fan"://通风
                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeFanIcon2.png";
                            basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeFanIcon2.png";
                            break;
                        case "dry"://除湿
                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeDeHumiIcon2.png";
                            basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeDeHumiIcon2.png";
                            break;
                        case "humidity"://加湿
                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHumiIcon2.png";
                            basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHumiIcon2.png";
                            break;
                        case "heat_humidity"://制热加湿
                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatHumiIcon2.png";
                            basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHeatHumiIcon2.png";
                            break;
                    }
                    switch (temp.GetAttrState("scene"))
                    {
                        case "at_home"://在家
                            basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAtHome2.png";
                            basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneAtHome2.png";
                            break;
                        case "leave_home"://离家
                            basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAwayHomeIcon2.png";
                            basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneAwayHomeIcon2.png";
                            break;
                        case "sleep"://睡眠
                            basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneSleepIcon2.png";
                            basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneSleepIcon2.png";
                            break;
                    }
                    basePage.btnModeControl.IsSelected = basePage.btnWorkSceneControl.IsSelected = basePage.btnPowerControl.IsSelected = temp.GetAttrState("on_off") == "on";
                });
            }
            catch (Exception ex)
            {
                MainPage.Log("科技系统更新数据失败:" + ex.Message);
            }
        }
        /// <summary>
        /// 更新子控信息
        /// </summary>
        /// <param name="temp"></param>
        public static void UpdateAcstSubInfo(Function temp)
        {
            try
            {
                if (basePage == null)
                {
                    return;
                }
                Application.RunOnMainThread(() =>
                {
                    try
                    {
                        AcstSubControlView view = null;
                        basePage.subViewList.TryGetValue(temp.sid, out view);
                        if (view != null)
                        {
                            if (temp.spk == SPK.AcstSub)
                            {
                                view.btnSubHumidityValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%";
                                view.btnSubTempValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "°";
                                view.btnSubPower.IsSelected = temp.GetAttrState(AcstSub_AttrEnum.on_off.ToString()) == "on";
                            }
                            else if (temp.spk == SPK.WaterHeaterJinmao)
                            {
                                view.btnSubTempValues.Text = temp.GetAttrState(WaterHeaterJinmao_AttrEnum.temp.ToString()) + "°";
                                view.btnSubPower.IsSelected = temp.GetAttrState(WaterHeaterJinmao_AttrEnum.on_off.ToString()) == "on";
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MainPage.Log($"科技系统更新异常1:{ex.Message}");
                    }
                });
            }
            catch (Exception ex)
            {
                MainPage.Log($"科技系统更新异常123:{ex.Message}");
            }
        }
        public void LoadPage()
        {
            #region 头部信息区域
            FrameLayout topView = new FrameLayout()
            {
@@ -257,7 +307,8 @@
            Button btnBackClick = new Button();
            backView.AddChidren(btnBackClick);
            btnBackClick.MouseUpEventHandler = (sender, e) => {
            btnBackClick.MouseUpEventHandler = (sender, e) =>
            {
                this.RemoveFromParent();
            };
@@ -416,7 +467,7 @@
            {
                var infoView = new FrameLayout()
                {
                    Y = topView.Bottom,
                    //Y = topView.Bottom,
                    Height = Application.GetRealHeight(104),
                    BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                };
@@ -450,7 +501,7 @@
                    {
                        tempValues = tempValues.Remove(tempValues.IndexOf('.'), tempValues.Length - tempValues.IndexOf('.'));
                    }
                    sensorDiyView_Temp = new SensorDiyView(sensorListView, curColor, tempValues, "°", Language.StringByID(StringId.Temp));
                    sensorDiyView_Temp = new SensorDiyView(sensorListView, curColor, tempValues, "°", "", Language.StringByID(StringId.Temp));
                }
                if (humiObj != null)
                {
@@ -459,19 +510,19 @@
                    {
                        humiValues = humiValues.Remove(humiValues.IndexOf('.'), humiValues.Length - humiValues.IndexOf('.'));
                    }
                    sensorDiyView_Humi = new SensorDiyView(sensorListView, curColor, humiValues , "%", Language.StringByID(StringId.Humidity));
                    sensorDiyView_Humi = new SensorDiyView(sensorListView, curColor, humiValues, "%", "", Language.StringByID(StringId.Humidity));
                }
                if (pm25Obj != null)
                {
                    sensorDiyView_Pm25 = new SensorDiyView(sensorListView, curColor, pm25Obj.state == "" ? "--" : pm25Obj.state, "", "PM2.5");
                    sensorDiyView_Pm25 = new SensorDiyView(sensorListView, curColor, pm25Obj.state == "" ? "--" : pm25Obj.state, "", "", "PM2.5");
                }
                if (co2Obj != null)
                {
                    sensorDiyView_Co2 = new SensorDiyView(sensorListView, curColor, co2Obj.state == "" ? "--" : co2Obj.state, "", "CO2");
                    sensorDiyView_Co2 = new SensorDiyView(sensorListView, curColor, co2Obj.state == "" ? "--" : co2Obj.state, "", "", "CO2");
                }
                if (tvocObj != null)
                {
                    sensorDiyView_Tvoc = new SensorDiyView(sensorListView, curColor, tvocObj.state == "" ? "--" : tvocObj.state, "", "TVOC");
                    sensorDiyView_Tvoc = new SensorDiyView(sensorListView, curColor, tvocObj.state == "" ? "--" : tvocObj.state, "", "", "TVOC");
                }
                #endregion
@@ -493,7 +544,7 @@
                    {
                        text = "Power";
                    }
                    sensorDiyView_EleActivePower = new SensorDiyView(energyListView, curColor, totalObj.state == "" ? "--" : totalObj.state, "KW", text, 100);
                    sensorDiyView_EleActivePower = new SensorDiyView(energyListView, curColor, totalObj.state == "" ? "--" : totalObj.state, "", "KW", text, 100);
                }
                if (dayObj != null)
                {
@@ -502,7 +553,7 @@
                    {
                        text = "Power of today";
                    }
                    sensorDiyView_EleDay = new SensorDiyView(energyListView, curColor, dayObj.state == "" ? "--" : dayObj.state, "KWh", text, 100);
                    sensorDiyView_EleDay = new SensorDiyView(energyListView, curColor, dayObj.state == "" ? "--" : dayObj.state, "", "KWh", text, 100);
                }
                if (monthObj != null)
                {
@@ -511,7 +562,7 @@
                    {
                        text = "Power of month";
                    }
                    sensorDiyView_EleMonth = new SensorDiyView(energyListView, curColor, monthObj.state == "" ? "--" : monthObj.state, "KWh", text, 100);
                    sensorDiyView_EleMonth = new SensorDiyView(energyListView, curColor, monthObj.state == "" ? "--" : monthObj.state, "", "KWh", text, 100);
                }
@@ -547,7 +598,7 @@
            var subTitleView = new FrameLayout()
            {
                Height = Application.GetRealHeight(54-11),
                Height = Application.GetRealHeight(54 - 11),
            };
            contentView.AddChidren(subTitleView);
@@ -563,7 +614,8 @@
            };
            subTitleView.AddChidren(btnCollection);
            //收藏
            btnCollection.MouseUpEventHandler = (sender, e) => {
            btnCollection.MouseUpEventHandler = (sender, e) =>
            {
                function.collect = !function.collect;
                btnCollection.IsSelected = function.collect;
@@ -576,7 +628,7 @@
            var btnTitleText2 = new Button()
            {
                X = btnCollection.Right,
                Text = "我的家庭",
                TextID = StringId.MyHome,
                TextSize = 16,
                TextColor = 0xFF242424,
                TextAlignment = TextAlignment.CenterLeft,
@@ -584,10 +636,6 @@
                Height = Application.GetRealHeight(54),
            };
            subTitleView.AddChidren(btnTitleText2);
            if(Language.CurrentLanguage != "Chinese")
            {
                btnTitleText2.Text = "My Home";
            }
            int subFunctionCount = 0;
@@ -603,7 +651,12 @@
            {
                try
                {
                    foreach (var sub in FunctionList.List.GetAcstSubList())
#if DEBUG
                    System.Threading.Thread.Sleep(200);
#endif
                    var showList = FunctionList.List.GetAcstSubList();
                    showList.AddRange(FunctionList.List.GetWaterHeaterJinmaoList());
                    foreach (var sub in showList)
                    {
                        if (subViewList.ContainsKey(sub.sid))
                        {
@@ -617,6 +670,7 @@
                                subFunctionListView = new HorizontalScrolViewLayout()
                                {
                                    Height = Application.GetRealHeight(93),
                                    ScrollEnabled = false,
                                };
                                contentView.AddChidren(subFunctionListView);
                                subFunctionListView.AddChidren(new Button { Width = Application.GetRealWidth(9) });
@@ -624,31 +678,37 @@
                            AcstSubControlView subFunctionView = new AcstSubControlView(sub, subFunctionListView, imageFolder);
                            subViewList.Add(sub.sid, subFunctionView);
                            new System.Threading.Thread(() =>
                            if (basePage != null)
                            {
                                Control.Ins.SendReadCommand(sub);
                            })
                            { IsBackground = true }.Start();
                        subFunctionCount++;
                                new System.Threading.Thread(() =>
                                {
                                    Control.Ins.SendReadCommand(sub);
                                })
                                { IsBackground = true }.Start();
                            }
                            subFunctionCount++;
                        });
                        System.Threading.Thread.Sleep(10);
                    }
                }
                catch { }
                finally{
                finally
                {
                }
            }).Start();
            #endregion
            #region 底部控制栏
            var bottomView = new FrameLayout()
            {
                Y = Application.GetRealHeight(667 - 56),
                Height = Application.GetRealHeight(56),
                Y = Application.GetRealHeight(667 - 66),
                Height = Application.GetRealHeight(66+16),
                BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealHeight(16),
                BorderColor = 0x00FFFFFF,
                BorderWidth = 0,
            };
            this.AddChidren(bottomView);
@@ -674,11 +734,13 @@
                var dialogView = new FrameLayout();
                dialog.AddChidren(dialogView);
                dialogView.MouseUpEventHandler = (sender, e) => {
                dialogView.MouseUpEventHandler = (sender, e) =>
                {
                    dialog.Close();
                };
                var dialogContentView = new VerticalScrolViewLayout() {
                var dialogContentView = new VerticalScrolViewLayout()
                {
                    X = Application.GetRealWidth(34),
                    Y = Application.GetRealHeight(291),
                    Width = Application.GetRealWidth(148),
@@ -687,7 +749,8 @@
                };
                dialogView.AddChidren(dialogContentView);
                var titleView = new FrameLayout() {
                var titleView = new FrameLayout()
                {
                    X = Application.GetRealWidth(2),
                    Y = Application.GetRealHeight(3),
                    Width = Application.GetRealWidth(144),
@@ -964,15 +1027,12 @@
            btnWorkSceneControl.MouseUpEventHandler = (sender2, e2) =>
            {
                //if (function.trait_on_off.state == "off")
                //{
                //    return;
                //}
                Dialog dialog = new Dialog();
                var dialogView = new FrameLayout();
                dialog.AddChidren(dialogView);
                dialogView.MouseUpEventHandler = (sender, e) => {
                dialogView.MouseUpEventHandler = (sender, e) =>
                {
                    dialog.Close();
                };
@@ -1152,7 +1212,7 @@
        public string Tag;
        public string unitString;
        public SensorDiyView(HorizontalScrolViewLayout view,uint color,string value,string unitStr,string text,int setWidth = 60)
        public SensorDiyView(HorizontalScrolViewLayout view, uint color, string value, string unitStr, string unitStr2, string text, int setWidth = 60)
        {
            unitString = unitStr;
            if (string.IsNullOrEmpty(value))
@@ -1177,7 +1237,7 @@
                TextAlignment = TextAlignment.Center,
                TextColor = color,
                TextSize = 20,
                Text = value,
                Text = value + unitString,
            };
            contentView.AddChidren(btnValue);
@@ -1188,25 +1248,25 @@
                TextAlignment = TextAlignment.Center,
                TextColor = 0xFF949AA5,
                TextSize = 12,
                Text = text ,
                Text = text,
            };
            contentView.AddChidren(btnText);
            if(!string.IsNullOrEmpty(unitString))
            if (!string.IsNullOrEmpty(unitStr2))
            {
                btnText.Text += "(" + unitString + ")";
                btnText.Text += "(" + unitStr2 + ")";
            }
        }
        public void UpdateValue(string value,bool isInt)
        public void UpdateValue(string value, bool isInt)
        {
            if (value.Contains(".") && isInt)
            {
                value = value.Remove(value.IndexOf('.'), value.Length - value.IndexOf('.'));
            }
            btnValue.Text = value;
            btnValue.Text = value + unitString;
        }
    }
@@ -1220,7 +1280,7 @@
        public Button btnSubPower;
        public string Tag;
        public AcstSubControlView(Function sub, HorizontalScrolViewLayout subFunctionListView,string imageFolder)
        public AcstSubControlView(Function sub, HorizontalScrolViewLayout subFunctionListView, string imageFolder)
        {
            Tag = sub.sid;
@@ -1236,6 +1296,7 @@
            {
                X = Application.GetRealWidth(18 + 7),
                Y = Application.GetRealHeight(11),
                Width = Application.GetRealWidth(120),
                Height = Application.GetRealHeight(40),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = 0xFF1b3053,
@@ -1262,33 +1323,9 @@
                Width = Application.GetRealWidth(35),
                TextColor = 0xFF1b3035,
                TextSize = 10,
                Text = sub.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "°C",
                TextAlignment = TextAlignment.CenterLeft,
            };
            subFunctionView.AddChidren(btnSubTempValues);
            Button btnSubHumidityIcon = new Button()
            {
                X = btnSubTempValues.Right + Application.GetRealWidth(5),
                Y = Application.GetRealHeight(47 + 11),
                Width = Application.GetMinRealAverage(11),
                Height = Application.GetMinRealAverage(11),
                UnSelectedImagePath = "FunctionIcon/CAC/HvacCacHumidityIcon.png",
            };
            subFunctionView.AddChidren(btnSubHumidityIcon);
            btnSubHumidityValues = new TextButton()
            {
                X = btnSubHumidityIcon.Right,
                Y = Application.GetRealHeight(45 + 11),
                Height = Application.GetRealHeight(14),
                Width = Application.GetRealWidth(35),
                TextColor = 0xFF1b3053,
                TextSize = 10,
                Text = sub.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%",
                TextAlignment = TextAlignment.CenterLeft,
            };
            subFunctionView.AddChidren(btnSubHumidityValues);
            btnSubPower = new Button()
            {
@@ -1301,7 +1338,8 @@
                TextAlignment = TextAlignment.Center,
            };
            subFunctionView.AddChidren(btnSubPower);
            btnSubPower.MouseUpEventHandler = (sender, e) => {
            btnSubPower.MouseUpEventHandler = (sender, e) =>
            {
                btnSubPower.IsSelected = !btnSubPower.IsSelected;
                string onoff = btnSubPower.IsSelected ? "on" : "off";
                Dictionary<string, string> d = new Dictionary<string, string>();
@@ -1309,21 +1347,71 @@
                Control.Ins.SendWriteCommand(sub, d);
            };
            EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                var page = new AcstSubPage(sub,imageFolder);
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage(()=> {
                    btnRoomInfo.Text = sub.name;
                });
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            if (sub.spk == SPK.AcstSub)
            {
                btnSubTempValues.Text = sub.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "°C";
                Button btnSubHumidityIcon = new Button()
                {
                    X = btnSubTempValues.Right + Application.GetRealWidth(5),
                    Y = Application.GetRealHeight(47 + 11),
                    Width = Application.GetMinRealAverage(11),
                    Height = Application.GetMinRealAverage(11),
                    UnSelectedImagePath = "FunctionIcon/CAC/HvacCacHumidityIcon.png",
                };
                subFunctionView.AddChidren(btnSubHumidityIcon);
            btnRoomInfo.MouseUpEventHandler = eventHandler;
            btnSubHumidityIcon.MouseUpEventHandler = eventHandler;
            btnSubHumidityValues.MouseUpEventHandler = eventHandler;
            btnSubTempIcon.MouseUpEventHandler = eventHandler;
            btnSubTempValues.MouseUpEventHandler = eventHandler;
            subFunctionView.MouseUpEventHandler = eventHandler;
                btnSubHumidityValues = new TextButton()
                {
                    X = btnSubHumidityIcon.Right,
                    Y = Application.GetRealHeight(45 + 11),
                    Height = Application.GetRealHeight(14),
                    Width = Application.GetRealWidth(35),
                    TextColor = 0xFF1b3053,
                    TextSize = 10,
                    Text = sub.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%",
                    TextAlignment = TextAlignment.CenterLeft,
                };
                subFunctionView.AddChidren(btnSubHumidityValues);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    var page = new AcstSubPage(sub, imageFolder);
                    MainPage.BasePageView.AddChidren(page);
                    page.LoadPage(() =>
                    {
                        btnRoomInfo.Text = sub.name;
                    });
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                btnRoomInfo.MouseUpEventHandler = eventHandler;
                btnSubTempIcon.MouseUpEventHandler = eventHandler;
                btnSubTempValues.MouseUpEventHandler = eventHandler;
                subFunctionView.MouseUpEventHandler = eventHandler;
                btnSubHumidityIcon.MouseUpEventHandler = eventHandler;
                btnSubHumidityValues.MouseUpEventHandler = eventHandler;
            }
            else if (sub.spk == SPK.WaterHeaterJinmao)
            {
                btnSubTempValues.Width = Application.GetRealWidth(45);
                btnSubTempValues.Text = sub.GetAttrState(WaterHeaterJinmao_AttrEnum.temp.ToString()) + "°C";
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    var page = new WaterHeaterJinmaoPage(sub);
                    MainPage.BasePageView.AddChidren(page);
                    page.LoadPage(() =>
                    {
                        btnRoomInfo.Text = sub.name;
                    });
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                btnRoomInfo.MouseUpEventHandler = eventHandler;
                btnSubTempIcon.MouseUpEventHandler = eventHandler;
                btnSubTempValues.MouseUpEventHandler = eventHandler;
                subFunctionView.MouseUpEventHandler = eventHandler;
            }
        }
    }
@@ -1336,7 +1424,7 @@
        public Button btnText;
        public IconButton(string iconPath,string iconPath2,string text,uint color,bool isSelect)
        public IconButton(string iconPath, string iconPath2, string text, uint color, bool isSelect)
        {
            view = this;
            view.Width = Application.GetRealWidth(144);
@@ -1367,19 +1455,22 @@
            };
            view.AddChidren(btnText);
        }
        public void Click(Action action)
        {
            view.MouseUpEventHandler = (sender, e) => {
            view.MouseUpEventHandler = (sender, e) =>
            {
                action();
            };
            btnText.MouseUpEventHandler = (sender, e) => {
            btnText.MouseUpEventHandler = (sender, e) =>
            {
                action();
            };
            btnIcon.MouseUpEventHandler = (sender, e) => {
            btnIcon.MouseUpEventHandler = (sender, e) =>
            {
                action();
            };
        }