wjc
2022-06-30 0b5b6ec781a8cb3400ad34693792bad07e97a00c
Merge remote-tracking branch 'origin/release0123' into wjc
5个文件已添加
40个文件已修改
1370 ■■■■ 已修改文件
HDL-ON_Android/Assets/Language.ini 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIconGray.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Public/ThumbImage2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/SplashActivity.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Info.plist 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Public/ThumbImage2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control_Udp.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Packet.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Mqtt/MqttClient.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/DB_ResidenceData.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/FloorHeating.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Scene.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Sensor.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/MainPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/FaceManagement/FacePassagePage.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs 543 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPage.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/Server/HttpUtil.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini
@@ -40,7 +40,7 @@
39=Individual
40=Log-in failed, incorrect account number or password
41=Fail to send the verification code
42=Network error
42=Disconnected from gateway
43=Fail to sign up, please try again.
44=Confirm resetting
45=The account number does not exist, please make sure it is registered.
@@ -529,6 +529,7 @@
541=Monitoring
542=Wandering alarm
543=Get more
544=Angle
1000=Room Humidity
@@ -1209,7 +1210,7 @@
39=个人
40=登录失败,账号或密码错误。
41=验证码发送失败。
42=网络异常
42=与网关断开了连接
43=注册失败,请重试。
44=确认重置
45=账号不存在,请确认账号是否注册。
@@ -1694,6 +1695,7 @@
541=监控中
542=徘徊报警
543=获取更多
544=角度
 
1000=室内湿度
1001=童锁
@@ -2350,7 +2352,7 @@
39=Индивидуальный
40=Неуспешная авторизация, неверна учетная запись или пароль
41=Не удалось отправить проверочный код
42=Ошибка сети
42=Disconnected from gateway
43=Не удалось зарегистрироваться
44=Подтвердите сброс
45=Учетная запись не существует, проверьте что она зарегистрирована
@@ -2834,6 +2836,7 @@
541=Monitoring
542=Wandering alarm
543=Get more
544=Angle
1000=Влажность в Помещении
@@ -3500,7 +3503,7 @@
39=Individual
40=Inicio de sesión fallido, número de cuenta o contraseña incorrectos
41=Error al enviar el codigo de verificación
42=Error de red
42=Disconnected from gateway
43=Error en el registo, inténtelo de nuevo
44=Confirmar reinicio
45=El numero de cuenta no existe, por favor asegúrese de estar registrado
@@ -3990,6 +3993,7 @@
541=Monitoring
542=Wandering alarm
543=Get more
544=Angle
1000=Humedad de ambiente
1001=V-chip
HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIconGray.png
HDL-ON_Android/Assets/Phone/Public/ThumbImage2.png
HDL-ON_Android/HDL-ON_Android.csproj
@@ -243,8 +243,11 @@
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelHelpNormalBgIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\screenpanel.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelEnviBg.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\FloorHeating\EconomicIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\FloorHeating\EconomicIconGray.png" />
    <AndroidAsset Include="Assets\Phone\MusicIcon\order.png" />
    <AndroidAsset Include="Assets\Phone\MusicIcon\single_cycle.png" />
    <AndroidAsset Include="Assets\Phone\Public\ThumbImage2.png" />
  </ItemGroup>
  <ItemGroup>
    <AndroidResource Include="Resources\values\colors.xml" />
HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.6" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202205241">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.9" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202206291">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
    <!--友盟-->
    <!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
@@ -88,7 +88,7 @@
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <!-- 极光推送结束 -->
    <application android:allowBackup="true" android:debuggable="false" android:icon="@drawable/Icon" android:networkSecurityConfig="@xml/network_security_config" android:largeHeap="true" android:label="On Pro">
    <application android:allowBackup="true" android:debuggable="false" android:icon="@drawable/Icon" android:requestLegacyExternalStorage="true" android:networkSecurityConfig="@xml/network_security_config" android:largeHeap="true" android:label="On Pro">
        <!--/扫描二维码activity-->
        <!--<activity
            android:name="com.journeyapps.barcodescanner.CaptureActivity"
HDL-ON_Android/SplashActivity.cs
@@ -46,6 +46,8 @@
        {
            base.OnCreate(savedInstanceState);
            //Intent i = new Intent(this, typeof(BaseActivity));//Intent intent=new Intent( 起始组件对象 , 目标 Service.class);
            //StartActivityForResult(i, 1);
            //OverridePendingTransition(0, 0);
@@ -107,6 +109,9 @@
            BaseActivity.KeepScreenON = false;
            //隐藏虚拟按键
            BaseActivity.IsHideVirualButtons = true;
            //实现安卓返回按键
            BaseActivity.BackKeyAction = () =>
            {
@@ -138,6 +143,7 @@
                Language.CurrentLanguage = "Chinese";
                Locale locale1 = Locale.Default;
                var localeList = Resources.Configuration.Locale;
                Console.WriteLine("999999999999999999999999999999999999999999999"+ localeList.Language);
                if (localeList.Language == "zh")
                {
                    Language.CurrentLanguage = "Chinese";
@@ -145,6 +151,10 @@
                else if(localeList.Language == "es")
                {
                    Language.CurrentLanguage = "Spanish";
                }
                else if (localeList.Language == "ru")
                {
                    Language.CurrentLanguage = "russian";
                }
                else
                {
@@ -175,6 +185,26 @@
            };
            BaseActivity.RefreshUIAction = (activity) =>
            {
                Language.CurrentLanguage = "Chinese";
                Locale locale1 = Locale.Default;
                var localeList = Resources.Configuration.Locale;
                Console.WriteLine("999999999999999999999999999999999999999999999" + localeList.Language);
                if (localeList.Language == "zh")
                {
                    Language.CurrentLanguage = "Chinese";
                }
                else if (localeList.Language == "es")
                {
                    Language.CurrentLanguage = "Spanish";
                }
                else if (localeList.Language == "ru")
                {
                    Language.CurrentLanguage = "russian";
                }
                else
                {
                    Language.CurrentLanguage = "English";
                }
                MainPage.Show();
                checkSomeInfo();
            };
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -1406,6 +1406,7 @@
      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelEnviBg.png" />
      <BundleResource Include="Resources\Phone\MusicIcon\order.png" />
      <BundleResource Include="Resources\Phone\MusicIcon\single_cycle.png" />
      <BundleResource Include="Resources\Phone\Public\ThumbImage2.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
HDL-ON_iOS/Info.plist
@@ -100,9 +100,9 @@
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleLightContent</string>
    <key>CFBundleShortVersionString</key>
    <string>1.5.502205201</string>
    <string>1.5.502206271</string>
    <key>CFBundleVersion</key>
    <string>1.5.505201</string>
    <string>1.5.506271</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Use geographic location to provide services such as weather</string>
    <key>NSAppleMusicUsageDescription</key>
HDL-ON_iOS/Resources/Language.ini
@@ -40,7 +40,7 @@
39=Individual
40=Log-in failed, incorrect account number or password
41=Fail to send the verification code
42=Network error
42=Disconnected from gateway
43=Fail to sign up, please try again.
44=Confirm resetting
45=The account number does not exist, please make sure it is registered.
@@ -529,6 +529,7 @@
541=Monitoring
542=Wandering alarm
543=Get more
544=Angle
1000=Room Humidity
@@ -738,7 +739,7 @@
5015=Bluetooth
5016=Line input
5017=Revise the name
5018=Single loop
5018=Single loop
5019=Random play
5020=List
5021=Has shifted to
@@ -770,6 +771,7 @@
5047="QQ music" has not installed in your cell phone, please proceed in App center.
5048= Progressive cycle
5049=Single play
 
6000=normal
6001=Device status
@@ -1054,6 +1056,7 @@
    
9000=Please sign in with new cell phone number.
9001=Please sign in with new email address.
@@ -1206,7 +1209,7 @@
39=个人
40=登录失败,账号或密码错误。
41=验证码发送失败。
42=网络异常
42=与网关断开了连接
43=注册失败,请重试。
44=确认重置
45=账号不存在,请确认账号是否注册。
@@ -1691,6 +1694,7 @@
541=监控中
542=徘徊报警
543=获取更多
544=角度
 
1000=室内湿度
1001=童锁
@@ -1932,7 +1936,7 @@
5046=调节音量
5047=你手机暂未安装"QQ音乐"{\r\n}请前往手机商场安装
5048=循序循环
5049=单曲循环
5049=单曲播放
 
 
6000=正常
@@ -2347,7 +2351,7 @@
39=Индивидуальный
40=Неуспешная авторизация, неверна учетная запись или пароль
41=Не удалось отправить проверочный код
42=Ошибка сети
42=Disconnected from gateway
43=Не удалось зарегистрироваться
44=Подтвердите сброс
45=Учетная запись не существует, проверьте что она зарегистрирована
@@ -2831,6 +2835,7 @@
541=Monitoring
542=Wandering alarm
543=Get more
544=Angle
1000=Влажность в Помещении
@@ -3497,7 +3502,7 @@
39=Individual
40=Inicio de sesión fallido, número de cuenta o contraseña incorrectos
41=Error al enviar el codigo de verificación
42=Error de red
42=Disconnected from gateway
43=Error en el registo, inténtelo de nuevo
44=Confirmar reinicio
45=El numero de cuenta no existe, por favor asegúrese de estar registrado
@@ -3987,6 +3992,7 @@
541=Monitoring
542=Wandering alarm
543=Get more
544=Angle
1000=Humedad de ambiente
1001=V-chip
HDL-ON_iOS/Resources/Phone/Public/ThumbImage2.png
HDL_ON/Common/R.cs
@@ -4,7 +4,10 @@
{
    public static class StringId
    {
        /// <summary>
        /// 角度
        /// </summary>
        public const int Angle = 544;
        /// <summary>
        /// 获取更多
        /// </summary>
HDL_ON/DAL/DriverLayer/Control.cs
@@ -280,7 +280,8 @@
                        }
                        if (DB_ResidenceData.Instance.GatewayType == 0)
                        {
                            new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) });
                            new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255,
                                new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) });
                        }
                        else if (DB_ResidenceData.Instance.GatewayType == 1)
                        {
@@ -1051,9 +1052,6 @@
                                }
                            }
                        }
                        var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
                        if (localFunction == null)
HDL_ON/DAL/DriverLayer/Control_Udp.cs
@@ -162,7 +162,6 @@
        /// <summary>
        /// 控制bus场景
        /// todo
        /// </summary>
        public void ControlBusScenes(Scene scene)
        {
HDL_ON/DAL/DriverLayer/Packet.cs
@@ -111,7 +111,6 @@
        /// <summary>
        /// 数据包处理
        /// ps:由commonpage转移过来,还需要转移合适的位置管理
        /// </summary>
        /// <param name="subnetID"></param>
        /// <param name="deviceID"></param>
HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -483,7 +483,8 @@
                                    {
                                        try
                                        {
                                            var securityBytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
                                            var securityBytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload,
                                                DB_ResidenceData.Instance.HomeGateway.aesKey);
                                            var securityString = Encoding.UTF8.GetString(securityBytes);
                                            var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(securityString);
                                            MainPage.Log($"安防状态变化:{securityString}");
@@ -519,7 +520,6 @@
                                    MainPage.Log($"mqtt 状态更新:{revString}");
                                    Control.Ins.UpdataFunctionStatus(revString, null, true);
                                    //Control.Ins.MsgInfoList.Add($"mqtt 状态更新:{revString}");
                                    //Control.Ins.MsgInfoList.Add(revString + "\r\n");
                                }
                                //一端口数据解析
@@ -532,7 +532,8 @@
                                    if (!string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.aesKey))
                                    {
                                        packet.Bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
                                        packet.Bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload,
                                            DB_ResidenceData.Instance.HomeGateway.aesKey);
                                    }
                                    else
                                    {
HDL_ON/DAL/Server/NewAPI.cs
@@ -587,7 +587,7 @@
        /// <summary>
        /// 红外宝下的遥控器列表
        /// </summary>
        public const string API_POST_Ir_List = ":/home-wisdom/app/device/ir/list";
        public const string API_POST_Ir_List = "/home-wisdom/app/device/ir/list";
        /// <summary>
        /// 遥控器红外码学习
        /// </summary>
HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -457,6 +457,8 @@
            mHDLCallVideoInfo.DeviceSipAccount = mESVideoInfo.deviceSipAccount;
            InitCallInfo(mHDLCallVideoInfo);
            if (isHdlLinphone)
            {
                //当前呼叫来电的住宅和之前注册登录的住宅一致的情况下
@@ -539,7 +541,8 @@
            var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneIntercomActivity));
            if (mHDLCallVideoInfo != null)
            {
                intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.DeviceName);
                //intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.DeviceName);
                intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.CallId);
            }
            Shared.Application.Activity.StartActivity(intent);
#endif
HDL_ON/Entity/DB_ResidenceData.cs
@@ -453,6 +453,10 @@
        #endregion
        /// <summary>
        /// 场景筛选时,选择的房间
        /// </summary>
        public string sceneChooseRoomId = "";
        /// <summary>
HDL_ON/Entity/Function/FloorHeating.cs
@@ -150,6 +150,26 @@
        /// </summary>
        public byte timeFlag = 0;
        public string GetWrokModeIconPath(string value, bool lighting = true)
        {
            var imagePath = "FunctionIcon/AC/HeatingIcon.png";
            switch (value)
            {
                case "heat":
                    imagePath = lighting ? "FunctionIcon/AC/HeatingIcon.png" : "FunctionIcon/AC/HeatingIconGray.png";
                    break;
                case "cool":
                    imagePath = lighting ? "FunctionIcon/AC/CoolIcon.png" : "FunctionIcon/AC/CoolIconGray.png";
                    break;
                case "economic":
                    imagePath = lighting ? "FunctionIcon/FloorHeating/EconomicIcon.png" : "FunctionIcon/FloorHeating/EconomicIconGray.png";
                    break;
            }
            return imagePath;
        }
        /// <summary>
        /// 获取模式的icon路径
        /// <param name="lightingIcon">获取的图标类型,默认是点亮</param>
HDL_ON/Entity/Function/Function.cs
@@ -361,7 +361,7 @@
                switch (key)
                {
                    case "pm2.5":
                        //
                        break;
                }
            }
@@ -1196,14 +1196,19 @@
        public string loopId;
    }
    /// <summary>
    /// Tag 功能SPK
    /// </summary>
    public static class SPK
    {
        /// <summary>
        /// 门锁
        /// </summary>
        public const string DoorLock = "security.door";
        /// <summary>
        /// 门锁spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> GetDoorLockSPKList()
        {
            var list = new List<string>();
@@ -1267,6 +1272,10 @@
        /// (卷帘)
        /// </summary>
        public const string CurtainRoller = "curtain.roller";
        /// <summary>
        /// 梦幻帘
        /// </summary>
        public const string CurtainDream = "curtain.dream";
        /// <summary>
        /// 窗帘spk列表
@@ -1279,6 +1288,7 @@
            spkList.Add(CurtainSwitch);
            spkList.Add(CurtainShades);
            spkList.Add(CurtainTrietex);
            spkList.Add(CurtainDream);
            return spkList;
        }
        #endregion
HDL_ON/Entity/Function/Scene.cs
@@ -540,6 +540,10 @@
        public int min = 0;
        /// <summary>
        /// 属性的值列表
        /// </summary>
        public List<string> valueList = new List<string>();
        /// <summary>
        /// 属性名称显示文本
        /// 中英文显示
        /// </summary>
@@ -581,6 +585,9 @@
                case FunctionAttributeKey.FadeTime:
                    text = Language.StringByID(StringId.FadeSpeed);
                    break;
                case "angle":
                    text = Language.StringByID(StringId.Angle);
                    break;
            }
            return text;
        }
HDL_ON/Entity/Function/Sensor.cs
@@ -161,7 +161,7 @@
                {
                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
                    {
                        if (string.IsNullOrEmpty(attrKey.unit))
                        if (!string.IsNullOrEmpty(attrKey.unit))
                            return attrKey.unit;
                    }
                }
HDL_ON/HDL_ON.projitems
@@ -499,6 +499,7 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ContentView\FhContentView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ContentView\AcContentView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Video\WanderingAlarmPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Curtain\CurtainDreamPage.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
    /// <summary>
    /// 版本号
    /// </summary>
    public static string VersionString = "1.5.6";
    public static string VersionString = "1.5.9";
    ///// <summary>
    ///// 客户端类型
    ///// </summary>
@@ -105,7 +105,7 @@
    /// </summary>
    public static List<string> SceneSupportFunctionList = new List<string> {
            SPK.LightCCT,SPK.LightDimming,SPK.LightSwitch,SPK.LightRGB,
            SPK.CurtainRoller,SPK.CurtainSwitch,SPK.CurtainTrietex,
            SPK.CurtainRoller,SPK.CurtainSwitch,SPK.CurtainTrietex,SPK.CurtainDream,
            SPK.AcIr,SPK.AcStandard,SPK.HvacAC,
            SPK.FloorHeatStandard,SPK.HvacFloorHeat,
            SPK.AirFreshStandard,SPK.HvacAirFresh,
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -62,6 +62,12 @@
                        rollingShutterView.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        break;
                    case SPK.CurtainDream:
                        var curtainDreamView = new CurtainDreamPage(function);
                        MainPage.BasePageView.AddChidren(curtainDreamView);
                        curtainDreamView.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        break;
                    case SPK.FloorHeatStandard:
                    case SPK.HvacFloorHeat:
                        var fhView = new FloorHeatingPage(function);
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -566,6 +566,17 @@
#if DEBUG
            FunctionList.List.Functions.Add(new Function
            {
                name = "测试梦幻窗帘",
                spk = SPK.CurtainDream,
                sid = "1234577",
                attributes = new List<FunctionAttributes> {
                    new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
                    new FunctionAttributes(){ key = "percent",curValue= "100",state = "100" },
                    new FunctionAttributes(){ key = "angle",curValue= "0",state = "0" },
                }
            });
            //FunctionList.List.Functions.Add(new Function
            //{
@@ -627,28 +638,28 @@
            //    },
            //});
            FunctionList.List.Functions.Add(new Function()
            {
                spk = SPK.SensorPm25,
                name = "测试Pm2.5",
                attributes = new List<FunctionAttributes>()
                {
                    new FunctionAttributes(){ key = "pm25",curValue= "70",state = "70" },
                },
                attrKeyConfigs = new List<AttrKeyConfig>()
                {
                    new AttrKeyConfig (){
                        key = "pm2.5",
                        type = "interval" ,
                        unit = "ug/m²",
                        configs = new List<AttrKeyInfo>(){
                           new AttrKeyInfo(){ start = "0",end = "75",color = "0xFFADE764", desc = "良好"},
                           new AttrKeyInfo(){ start = "76",end = "150",color = "0xFFFFD154",desc = "轻/中度污染"},
                           new AttrKeyInfo(){ start = "151",end = "500",color = "0xFFFF9D54",desc = "重度/严重污染"},
                        }
                    }
                },
            });
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.SensorPm25,
            //    name = "测试Pm2.5",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "pm25",curValue= "70",state = "70" },
            //    },
            //    attrKeyConfigs = new List<AttrKeyConfig>()
            //    {
            //        new AttrKeyConfig (){
            //            key = "pm2.5",
            //            type = "interval" ,
            //            unit = "ug/m²",
            //            configs = new List<AttrKeyInfo>(){
            //               new AttrKeyInfo(){ start = "0",end = "75",color = "0xFFADE764", desc = "良好"},
            //               new AttrKeyInfo(){ start = "76",end = "150",color = "0xFFFFD154",desc = "轻/中度污染"},
            //               new AttrKeyInfo(){ start = "151",end = "500",color = "0xFFFF9D54",desc = "重度/严重污染"},
            //            }
            //        }
            //    },
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
@@ -1151,10 +1162,8 @@
                };
                view.AddChidren(btnIcon);
                btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                Button btnName;
                btnName = new Button()
@@ -1226,6 +1235,7 @@
                LoadEvent_FunctionCollection(btnCollection, function);
                if (//SPK.CurtainSpkList().Contains(function.spk))
                    function.spk == SPK.CurtainRoller || function.spk == SPK.CurtainShades ||
                    function.spk == SPK.CurtainDream ||
                    function.spk == SPK.CurtainSwitch || function.spk == SPK.CurtainTrietex )
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Curtain/CurtainIcon.png";
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -159,32 +159,32 @@
                };
                dimmerControlBar.OnProgressChangedEvent = (sender, e) => {
                    dimmerControlBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1;
                    //light.brightness = e;
                    //light.trait_on_off.curValue = e > 0 ? "on" : "off";
                    function.SetAttrState(FunctionAttributeKey.Brightness, e);
                    function.trait_on_off.curValue = e > 0 ? "on" : "off";
                    //if (e == 0 || e == 100)
                    //{
                    //    //Control.Send(CommandType_A.write, light);
                    //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    //    d.Add("brightness", light.brightness.ToString());
                    //    Control.Ins.SendWriteCommand(light, d);
                    //}
                    //else
                    //{
                    //    var tm = (DateTime.Now - light.refreshTime).TotalMilliseconds;
                    //    Console.WriteLine("skip time "+tm);
                    //    if (300 < tm)
                    //    {
                    //        light.refreshTime = DateTime.Now;
                    //        new System.Threading.Thread(() =>
                    //        {
                    //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    //            d.Add("brightness", light.brightness.ToString());
                    //            Control.Ins.SendWriteCommand(light, d);
                    //        })
                    //        { IsBackground = true }.Start();
                    //    }
                    //}
                    if (e == 0 || e == 100)
                    {
                        //Control.Send(CommandType_A.write, light);
                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                        d.Add("brightness", e.ToString());
                        Control.Ins.SendWriteCommand(function, d);
                    }
                    else
                    {
                        var tm = (DateTime.Now - function.refreshTime).TotalMilliseconds;
                        Console.WriteLine("skip time " + tm);
                        if (500 < tm)
                        {
                            function.refreshTime = DateTime.Now;
                            new System.Threading.Thread(() =>
                            {
                                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                                d.Add("brightness", e.ToString());
                                Control.Ins.SendWriteCommand(function, d);
                            })
                            { IsBackground = true }.Start();
                        }
                    }
                };
            }
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -631,7 +631,6 @@
                functionTypeList.Add(SPK.HvacCac);
                functionTypeList.Add(SPK.SensorHelp);
                functionTypeList.Add(SPK.DoorLock);
            }
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -98,6 +98,7 @@
        public void LoadPage(Action backRefresh)
        {
             //DB_ResidenceData.Instance.sceneChooseRoomId
            new TopViewDiv(bodyView, Language.StringByID(StringId.EditScene)).LoadTopView(backRefresh);
            initPage();
        }
@@ -481,6 +482,13 @@
                    scene.functions.Remove(scenefunction);
                    continue;
                }
                //将spk实体里面的min max值放入场景功能实体里,要不然数据会丢失 2022-06-21 16:06:45
                foreach (var tt in scenefunction.status) {
                    tt.min = scenefunction.localFunction.GetAttribute(tt.key).min;
                    tt.max = scenefunction.localFunction.GetAttribute(tt.key).max;
                    tt.valueList = scenefunction.localFunction.GetAttribute(tt.key).value;
                }
                i++;
                var row = new RowLayout()
                {
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
@@ -156,9 +156,39 @@
                {
                    unallocatedList.Add(function);
                }
            }
            if (string.IsNullOrEmpty(DB_ResidenceData.Instance.sceneChooseRoomId))
            {
                LoadFunctionListRow(null);
            }
            else
            {
                var selectedRoom = Room.CurrentSpatial.RoomList.Find((obj) => obj.uid == DB_ResidenceData.Instance.sceneChooseRoomId);
                if (selectedRoom == null)
                {
                    LoadFunctionListRow(null);
                }
                else
                {
                    var listAllFun = new List<Function>();
                    var listFun = new List<Function>();
                    listAllFun.AddRange(unallocatedList);
                    listAllFun.AddRange(allocatedList);
                    btnFloor.Text = selectedRoom.floorRoomName;
                    foreach (var funtion in listAllFun)
                    {
                        if (funtion.roomIds.Contains(selectedRoom.roomId))
                        {
                            listFun.Add(funtion);
                        }
                    }
                    LoadFunctionListRow(listFun);
                }
            }
            LoadFunctionListRow(null);
            LoadEventList();
        }
@@ -278,6 +308,7 @@
                form.ShowDeviceFunctionView(btnFloor, listAllFun, (selectId, listFun) =>
                {
                    nowSelectId = selectId;
                    DB_ResidenceData.Instance.sceneChooseRoomId = selectId;
                    //重新刷新设备列表
                    this.LoadFunctionListRow(listFun);
                }, nowSelectId);
HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
@@ -70,6 +70,9 @@
                    case FunctionAttributeKey.RGB:
                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.RGB));
                        break;
                    case "angle"://角度
                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == "angle"));
                        break;
                }
            }
@@ -353,6 +356,10 @@
                    case FunctionAttributeKey.FadeTime:
                        break;
                    case "angle":
                        //呈现的弹窗
                        break;
                    case "cct":
                        LoadEditDialog_CCT(sceneStatus, btnFunctionText);
                        break;
HDL_ON/UI/UI2/4-PersonalCenter/FaceManagement/FacePassagePage.cs
@@ -573,7 +573,9 @@
                })
                { IsBackground = true }.Start();
            }
            catch { }
            catch (Exception ex) {
                MainPage.Log(ex.Message);
            }
        }
HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
@@ -36,6 +36,11 @@
        /// </summary>
        Button btnMode;
        /// <summary>
        /// 工作模式按钮
        /// </summary>
        Button btnWrokMode;
        /// <summary>
        /// 开关按钮
        /// </summary>
        Button btnSwitch;
@@ -172,6 +177,25 @@
            };
            FrameWhiteCentet1.AddChidren(btnPlus);
            if (device.GetAttribute("mode_work") != null)
            {
                btnWrokMode = new Button()
                {
                    X = Application.GetRealWidth(60),
                    Y = Application.GetRealHeight(334),
                    Width = Application.GetRealWidth(30),
                    Height = Application.GetRealWidth(30),
                    UnSelectedImagePath = fhTemp.GetWrokModeIconPath(device.GetAttrState("mode_work")),
                };
                FrameWhiteCentet1.AddChidren(btnWrokMode);
                if (device.GetAttribute("mode_work").value.Count > 1)
                {
                    btnMode.MouseUpEventHandler = (sender, e) =>
                    {
                        LoadDiv_ChangeModeView();
                    };
                }
            }
            if (device.GetAttribute(FunctionAttributeKey.Mode) != null)
            {
                btnMode = new Button()
@@ -208,6 +232,135 @@
            LoadEvent_AcStatesChange();
        }
        /// <summary>
        /// 加载修改模式区域
        /// </summary>
        void LoadDiv_ChangeWorkModeView()
        {
            Dialog dialog = new Dialog();
            FrameLayout dialogView = new FrameLayout()
            {
                BackgroundColor = CSS_Color.DialogTransparentColor1,
            };
            dialog.AddChidren(dialogView);
            FrameLayout modeChangeView;
            modeChangeView = new FrameLayout()
            {
                X = Application.GetRealWidth(30),
                Y = Application.GetRealHeight(128),
                Width = Application.GetRealWidth(160),
                Height = Application.GetRealHeight(287),
                BackgroundImagePath = "FunctionIcon/AC/DivBg1.png",
            };
            dialogView.AddChidren(modeChangeView);
            Button btnTitle;
            btnTitle = new Button()
            {
                X = Application.GetRealWidth(8 + 16),
                Y = Application.GetRealHeight(8),
                Width = Application.GetRealWidth(112),
                Height = Application.GetRealHeight(44),
                TextID = StringId.ChooseMode,
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
            };
            modeChangeView.AddChidren(btnTitle);
            Button btnLine = new Button()
            {
                X = btnTitle.X,
                Y = btnTitle.Bottom,
                Width = Application.GetRealWidth(112),
                Height = Application.GetRealHeight(1),
                BackgroundColor = CSS_Color.BackgroundColor,
            };
            modeChangeView.AddChidren(btnLine);
            var modeList = device.GetAttribute(FunctionAttributeKey.WorkMode).value;
            foreach (var m in modeList)
            {
                Button btnModeIcon = new Button()
                {
                    X = btnTitle.X,
                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
                    Width = Application.GetRealWidth(24),
                    Height = Application.GetRealWidth(24),
                    IsSelected = device.GetAttrState(FunctionAttributeKey.WorkMode) == m,
                };
                modeChangeView.AddChidren(btnModeIcon);
                Button btnModeText = new Button()
                {
                    X = Application.GetRealWidth(12) + btnModeIcon.Right,
                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
                    Height = Application.GetRealHeight(44),
                    Width = Application.GetRealWidth(90),
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    SelectedTextColor = CSS_Color.MainColor,
                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
                    TextSize = CSS_FontSize.TextFontSize,
                };
                modeChangeView.AddChidren(btnModeText);
                btnModeIcon.UnSelectedImagePath = fhTemp.GetModeIconPath(m, false);
                btnModeIcon.SelectedImagePath = fhTemp.GetModeIconPath(m);
                btnModeText.Text = fhTemp.GetModeAttrText(m);
                if (modeList.IndexOf(m) < modeList.Count - 1)
                {
                    modeChangeView.AddChidren(new Button()
                    {
                        X = btnTitle.X,
                        Y = btnModeText.Bottom,
                        Width = Application.GetRealWidth(112),
                        Height = Application.GetRealHeight(1),
                        BackgroundColor = CSS_Color.BackgroundColor,
                    });
                }
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    dialog.Close();
                };
                EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
                {
                    //if (!device.online)
                    //{
                    //    new Tip()
                    //    {
                    //        CloseTime = 1,
                    //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
                    //        Direction = AMPopTipDirection.None,
                    //    }.Show(MainPage.BaseView);
                    //}
                    btnModeIcon.IsSelected = btnModeText.IsSelected = true;
                    device.SetAttrState(FunctionAttributeKey.WorkMode, m);
                    btnMode.UnSelectedImagePath = fhTemp.GetWrokModeIconPath(m);
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    btnMode.UnSelectedImagePath = btnModeIcon.UnSelectedImagePath;
                    d.Add(FunctionAttributeKey.WorkMode, m);
                    Control.Ins.SendWriteCommand(device, d);
                    dialog.Close();
                };
                btnModeIcon.MouseUpEventHandler = eventHandler1;
                btnModeText.MouseUpEventHandler = eventHandler1;
                dialogView.MouseUpEventHandler = eventHandler;
            }
            dialogView.MouseUpEventHandler = (sender, e) => {
                dialog.Close();
            };
            dialog.Show();
        }
        /// <summary>
        /// 加载修改模式区域
@@ -525,6 +678,15 @@
                    arcBar.IsClickable = false;
                    arcBar.IsOffline = true;
                }
                if(btnWrokMode!=null){
                    var dd = device.GetAttrState("mode_work");
                    if (dd != "0")
                    {
                        btnWrokMode.UnSelectedImagePath = fhTemp.GetWrokModeIconPath(dd);
                    }
                }
            });
        }
HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using HDL_ON.Common;
using HDL_ON.DAL.Server;
using Shared;
namespace HDL_ON.UI
@@ -79,7 +81,37 @@
                function.roomIds.Remove(room.roomId);
                //room.RemoveRoomFunction(function);
            }
            function.UpdataRoomIds();
            //function.UpdataRoomIds();
            new System.Threading.Thread(() =>
            {
                try
                {
                    var pack = ApiUtlis.Ins.HttpRequest.UpdataDevcieBindRoomInfo(function);
                    //直接保存本地,
                    function.SaveFunctionFile();
                    if (pack.Code == StateCode.SUCCESS)
                    {
                        if (UI.RoomPage.bodyView != null)
                        {
                            Application.RunOnMainThread(() =>
                            {
                                UI.RoomPage.bodyView.ReLoadPage();
                            });
                        }
                    }
                    else
                    {
                        IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
                    }
                }
                catch (Exception ex){
                    MainPage.Log("房间绑定设备异常" + ex.Message);
                }
            })
            { IsBackground = true }.Start();
            if (function.roomIds.Count == Entity.SpatialInfo.CurrentSpatial.RoomList.Count)
            {
                btnChooseAll.IsSelected = true;
HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs
New file
@@ -0,0 +1,543 @@
using System;
using HDL_ON.Entity;
using Shared;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using HDL_ON.DriverLayer;
namespace HDL_ON.UI
{
    public class CurtainDreamPage : FrameLayout
    {
        #region 控件集合
        static CurtainDreamPage bodyView;
        /// <summary>
        /// 功能名称按钮
        /// </summary>
        Button btnFunctionName;
        /// <summary>
        /// 房间楼层信息按钮
        /// </summary>
        Button btnFromFoorAndRoom;
        /// <summary>
        /// 收藏按钮
        /// </summary>
        Button btnCollection;
        /// <summary>
        /// 窗帘动态控件
        /// </summary>
        CurtainSeekBarOn curtainSeekBar;
        /// <summary>
        /// 进度值
        /// </summary>
        Button btnProgress;
        /// <summary>
        /// 窗帘关闭按钮
        /// </summary>
        Button btnCurtainClose;
        /// <summary>
        /// 窗帘停止按钮
        /// </summary>
        Button btnCurtainStop;
        /// <summary>
        /// 窗帘打开按钮
        /// </summary>
        Button btnCurtainOpen;
        #endregion
        #region 区域变量
        Entity.Curtain curtainTemp = new Entity.Curtain();
        Function function;
        Button btnCollection_Out;
        Button btnFunctionName_Out;
        Button btnFromFloor_Out;
        /// <summary>
        /// 刷新显示信息
        /// </summary>
        Action actionRefresh;
        #endregion
        /// <summary>
        /// 正在控制
        /// </summary>
        bool onControl = false;
        public CurtainDreamPage(Function func)
        {
            bodyView = this;
            function = func;
        }
        public void LoadPage(Button btnCollectionIcon, Button btnFunctionNameOut, Button btnFromFloorOut)
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            btnCollection_Out = btnCollectionIcon;
            btnFunctionName_Out = btnFunctionNameOut;
            btnFromFloor_Out = btnFromFloorOut;
            FrameLayout controlView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(88),
                Width = Application.GetRealWidth(327),
                Height = Application.GetRealHeight(526),
                BackgroundImagePath = "Public/Fragmentbg.png",
            };
            bodyView.AddChidren(controlView);
            btnFunctionName = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(14),
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(37),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel,
                Text = function.name,
            };
            controlView.AddChidren(btnFunctionName);
            btnFromFoorAndRoom = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = btnFunctionName.Bottom,
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(21),
                TextColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = function.GetRoomListName()
            };
            controlView.AddChidren(btnFromFoorAndRoom);
            btnCollection = new Button()
            {
                X = Application.GetRealWidth(273),
                Y = Application.GetRealHeight(14),
                Width = Application.GetMinRealAverage(40),
                Height = Application.GetMinRealAverage(40),
                SelectedImagePath = "Collection/CollectionIcon.png",
                UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                IsSelected = function.collect
            };
            controlView.AddChidren(btnCollection);
            //2020-12-16 如果是成员隐藏收藏功能
            //if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
            //{
            //    controlView.AddChidren(btnCollection);
            //}
            btnProgress = new Button()
            {
                Y = Application.GetRealHeight(80),
                Height = Application.GetRealHeight(50),
                TextSize = CSS_FontSize.TextFontSize,
                TextColor = CSS_Color.PromptingColor1,
                Text = curtainTemp.GetPercent(function).ToString() + "%",
            };
            controlView.AddChidren(btnProgress);
            curtainSeekBar = new CurtainSeekBarOn()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(130),
                Width = Application.GetRealWidth(250),
                Height = Application.GetRealWidth(177),
                Progress = curtainTemp.GetPercent(function),
                ProgressTextColor = 0x00000000,
                //IsInvertedProgress = true,
            };
            controlView.AddChidren(curtainSeekBar);
            int angleValut = Convert.ToInt32(function.GetAttrState("angle"));
            var angleView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(300),//414,设计数据
                Width = Application.GetRealWidth(250),
                Height = Application.GetRealWidth(30),
                BackgroundColor = 0x00ff0000
            };
            controlView.AddChidren(angleView);
            List<Button> buttons = new List<Button>();
            for (int i = 0; i < 18; i++)
            {
                var btn = new Button()
                {
                    X = Application.GetRealWidth(12 * i + 4),
                    Y = Application.GetRealHeight(5),
                    Width = Application.GetRealWidth(4),
                    Height = Application.GetRealHeight(20),
                    BackgroundColor = 0xFFDFE1E6,
                };
                btn.SetRotation(angleValut);
                angleView.AddChidren(btn);
                buttons.Add(btn);
            };
            var btnAngle = new Button()
            {
                TextAlignment = TextAlignment.CenterRight,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextColor = CSS_Color.PromptingColor1,
                Text = function.GetAttrState("angle") + "°"
            };
            angleView.AddChidren(btnAngle);
            var angleBar = new DiyImageSeekBar()
            {
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(30),
                SeekBarViewHeight = Application.GetRealHeight(0),
                ThumbImagePath = "Public/ThumbImage2.png",
                ThumbImageHeight = Application.GetRealHeight(20),
                ProgressBarColor = 0x00000000,
                ProgressTextColor = 0x00000000,
                ProgressTextSize = 0,
                MaxValue = 180,
                Progress = 90,
                ProgressChangeDelayTime = 0
            };
            angleView.AddChidren(angleBar);
            angleBar.OnProgressChangedEvent = (sender, e) =>
            {
                float angle = (e - 90);
                btnAngle.Text = angle + "°";
                foreach (var btn in buttons)
                {
                    btn.SetRotation(angle); Console.WriteLine(angle);
                }
                //if (100 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                //{
                //    function.refreshTime = DateTime.Now;
                //    foreach (var btn in buttons)
                //    {
                //        new System.Threading.Thread(() =>
                //    {
                //        Application.RunOnMainThread(() =>
                //        {
                //            btn.SetRotation(angle); Console.WriteLine(angle);
                //        });
                //    });
                //    }
                //}
            };
            angleBar.OnStopTrackingTouchEvent = (sende, e) =>
            {
                function.refreshTime = DateTime.Now;
                new System.Threading.Thread(() =>
                {
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    dic.Add("angle", e.ToString());
                    Control.Ins.SendWriteCommand(function, dic);
                })
                { IsBackground = true }.Start();
            };
            btnCurtainClose = new Button()
            {
                X = Application.GetRealWidth(84),
                Y = Application.GetRealHeight(466),
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/Curtain/CurtainCloseIcon.png",
                SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseOnIcon.png",
            };
            controlView.AddChidren(btnCurtainClose);
            btnCurtainStop = new Button()
            {
                X = Application.GetRealWidth(148),
                Y = Application.GetRealHeight(466),
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/Curtain/CurtainStopIcon.png",
                SelectedImagePath = "FunctionIcon/Curtain/CurtainStopOnIcon.png",
            };
            controlView.AddChidren(btnCurtainStop);
            btnCurtainOpen = new Button()
            {
                X = Application.GetRealWidth(212),
                Y = Application.GetRealHeight(466),
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/Curtain/CurtainOpenIcon.png",
                SelectedImagePath = "FunctionIcon/Curtain/CurtainOpenOnIcon.png",
            };
            controlView.AddChidren(btnCurtainOpen);
            LoadEventList();
            new TopViewDiv(bodyView, Language.StringByID(StringId.Curtain)).LoadTopView_FunctionTop(function, actionRefresh);
            new System.Threading.Thread(() =>
            {
                Control.Ins.SendReadCommand(function);
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 更新窗帘
        /// </summary>
        /// <param name="updateTemp"></param>
        public static void UpdataState(Function updateTemp)
        {
            Application.RunOnMainThread((Action)(() =>
            {
                if (bodyView == null)
                    return;
                if (bodyView.onControl)
                    return;
                if (updateTemp.spk == bodyView.function.spk && updateTemp.sid == bodyView.function.sid)
                {
                try
                    {
                        if (!bodyView.onCurtainAnimation)
                        {
                            bodyView.CurtainAnimation(Convert.ToInt32(updateTemp.GetAttrState(FunctionAttributeKey.Percent)));
                        }
                    }
                    catch { }
                }
            }));
        }
        /// <summary>
        /// 正在执行窗帘动画
        /// </summary>
        bool onCurtainAnimation = false;
        /// <summary>
        /// 窗帘动画
        /// </summary>
        /// <param name="progress"></param>
        void CurtainAnimation(int progress)
        {
            onCurtainAnimation = true;
            //运行方向 打开(加进度):关闭(减进度)
            bool runningDirection = progress > curtainSeekBar.Progress;
            int curBarProgress = curtainSeekBar.Progress;
            btnProgress.Text = progress + "%";
            new System.Threading.Thread(() =>
            {
                try
                {
                    while (progress != curBarProgress && onCurtainAnimation)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            if (runningDirection)
                            {
                                if (curtainSeekBar.Progress + 5 > progress)
                                {
                                    curtainSeekBar.Progress = progress;
                                }
                                else
                                {
                                    curtainSeekBar.Progress = curtainSeekBar.Progress + 5;
                                }
                            }
                            else
                            {
                                if (curtainSeekBar.Progress - 5 < progress)
                                {
                                    curtainSeekBar.Progress = progress;
                                }
                                else
                                {
                                    curtainSeekBar.Progress = curtainSeekBar.Progress - 5;
                                }
                            }
                            curBarProgress = curtainSeekBar.Progress;
                        });
                        System.Threading.Thread.Sleep(100);
                    }
                }
                catch { }
                finally
                {
                    new System.Threading.Thread(() =>
                    {
                        System.Threading.Thread.Sleep(3000);
                        onCurtainAnimation = false;
                    })
                    { IsBackground = true, Priority = System.Threading.ThreadPriority.Lowest }.Start();
                }
            }).Start();
        }
        /// <summary>
        /// 加载事件列表
        /// </summary>
        void LoadEventList()
        {
            LoadEvent_ControlEvent();
            LoadCollectionEvent();
            //回退刷新信息事件
            actionRefresh = () =>
            {
                btnFunctionName.Text = btnFunctionName_Out.Text = function.name;
                btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = function.GetRoomListName();
            //function.SaveFunctionData(true);
        };
        }
        /// <summary>
        /// 收藏功能按钮事件
        /// </summary>
        void LoadCollectionEvent()
        {
            btnCollection.MouseUpEventHandler += (sender, e) =>
            {
                btnCollection.IsSelected = function.collect = btnCollection_Out.IsSelected = !btnCollection.IsSelected;
                function.CollectFunction();
            };
        }
        /// <summary>
        /// 加载窗帘控制事件
        /// </summary>
        void LoadEvent_ControlEvent()
        {
            btnCurtainClose.MouseUpEventHandler = (sender, e) =>
            {
            //if (!function.online)
            //{
            //    new Tip()
            //    {
            //        CloseTime = 1,
            //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
            //        Direction = AMPopTipDirection.None,
            //    }.Show(MainPage.BaseView);
            //    return;
            //}
            new System.Threading.Thread(() =>
            {
                System.Threading.Thread.Sleep(2000);
                Application.RunOnMainThread(() =>
                {
                    btnCurtainClose.IsSelected = false;
                });
            })
                { IsBackground = true }.Start();
                function.trait_on_off.curValue = "off";
                function.SetAttrState(FunctionAttributeKey.Percent, 0);
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
                DriverLayer.Control.Ins.SendWriteCommand(function, d);
                CurtainAnimation(0);
            };
            btnCurtainStop.MouseUpEventHandler = (sender, e) =>
            {
            //if (!function.online)
            //{
            //    new Tip()
            //    {
            //        CloseTime = 1,
            //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
            //        Direction = AMPopTipDirection.None,
            //    }.Show(MainPage.BaseView);
            //    return;
            //}
            onCurtainAnimation = false;
                new System.Threading.Thread(() =>
                {
                    System.Threading.Thread.Sleep(2000);
                    Application.RunOnMainThread(() =>
                    {
                        btnCurtainStop.IsSelected = false;
                    });
                })
                { IsBackground = true }.Start();
                function.trait_on_off.curValue = "stop";
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
                DriverLayer.Control.Ins.SendWriteCommand(function, d);
            };
            btnCurtainOpen.MouseUpEventHandler = (sender, e) =>
            {
            //if (!function.online)
            //{
            //    new Tip()
            //    {
            //        CloseTime = 1,
            //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
            //        Direction = AMPopTipDirection.None,
            //    }.Show(MainPage.BaseView);
            //    return;
            //}
            new System.Threading.Thread(() =>
            {
                System.Threading.Thread.Sleep(2000);
                Application.RunOnMainThread(() =>
                {
                    btnCurtainOpen.IsSelected = false;
                });
            })
                { IsBackground = true }.Start();
                function.trait_on_off.curValue = "on";
                function.SetAttrState(FunctionAttributeKey.Percent, 100);
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
                DriverLayer.Control.Ins.SendWriteCommand(function, d);
                CurtainAnimation(100);
            };
            //if (function.online)
            {
                btnCurtainStop.MouseDownEventHandler = (sender, e) =>
                {
                    btnCurtainStop.IsSelected = true;
                    btnCurtainClose.IsSelected = false;
                    btnCurtainOpen.IsSelected = false;
                };
                btnCurtainOpen.MouseDownEventHandler = (sender, e) =>
                {
                    btnCurtainOpen.IsSelected = true;
                    btnCurtainClose.IsSelected = false;
                    btnCurtainStop.IsSelected = false;
                };
                btnCurtainClose.MouseDownEventHandler = (sender, e) =>
                {
                    btnCurtainClose.IsSelected = true;
                    btnCurtainOpen.IsSelected = false;
                    btnCurtainStop.IsSelected = false;
                };
                curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
                {
                    btnProgress.Text = curtainSeekBar.Progress + "%";
                };
                curtainSeekBar.OnStopTrackingTouchEvent = (sender, e) =>
                {
                    btnProgress.Text = curtainSeekBar.Progress + "%";
                //controlBar.Progress = curtainSeekBar.Progress;
                new System.Threading.Thread(() =>
                {
                    function.SetAttrState(FunctionAttributeKey.Percent, e);
                    function.refreshTime = DateTime.Now;
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Percent, e.ToString());
                    DriverLayer.Control.Ins.SendWriteCommand(function, d);
                })
                    { IsBackground = true }.Start();
                };
            }
        }
    }
}
HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
@@ -84,6 +84,15 @@
        public FloorHeatingPage(Function func)
        {
            bodyView = this;
            var tempAttr = func.GetAttribute(FunctionAttributeKey.SetTemp);
            if (tempAttr != null)
            {
                if(tempAttr.min == 0 && tempAttr.max == 0)
                {
                    tempAttr.min = 16;
                    tempAttr.max = 30;
                }
            }
            function = func;
        }
HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPage.cs
@@ -349,6 +349,27 @@
            {
                DriverLayer.Control.Ins.SendReadCommand(function);
            })
            { IsBackground = true }.Start();
            new System.Threading.Thread(() => {
                while (true)
                {
                    System.Threading.Thread.Sleep(1000);
                    if (curDimmerStatus)
                    {
                        continue;
                    }
                    if (onDimmerBar)
                    {
                        continue;
                    }
                    else
                    {
                        DriverLayer.Control.Ins.SendReadCommand(function);
                        curDimmerStatus = true;
                    }
                }
            })
            { IsBackground = true }.Start();
        }
HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
@@ -27,8 +27,11 @@
                            {
                                bodyView.dimmerBar.Progress = Convert.ToInt32(updataTemp.GetAttrState(FunctionAttributeKey.Brightness));
                            }
                            bodyView.btnBrightnessText.Text = updataTemp.GetAttrState(FunctionAttributeKey.Brightness) + "%";
                            bodyView.btnBrightnessText.Y = ((100 - Convert.ToInt32(updataTemp.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(222 - 16) / 100) + Application.GetRealWidth(80);
                            if (updataTemp.GetAttrState(FunctionAttributeKey.Brightness) != "0")
                            {
                                bodyView.btnBrightnessText.Text = updataTemp.GetAttrState(FunctionAttributeKey.Brightness) + "%";
                                bodyView.btnBrightnessText.Y = ((100 - Convert.ToInt32(updataTemp.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(222 - 16) / 100) + Application.GetRealWidth(80);
                            }
                        }
                        else
                        {
@@ -134,6 +137,7 @@
            };
        }
        bool curDimmerStatus = false;
        /// <summary>
        /// 灯光调光事件
        /// </summary>
@@ -151,7 +155,8 @@
                //    }.Show(MainPage.BaseView);
                //    return;
                //}
                onDimmerBar = false;
                //onDimmerBar = false;
                    curDimmerStatus = false;
                function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString());
@@ -170,45 +175,41 @@
            {
                dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
                {
                    onDimmerBar = true;
                    curDimmerStatus = onDimmerBar = true;
                };
                dimmerBar.OnProgressChangedEvent = (sender, e) =>
                {
                    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                //function.fadeTime = 0;
                //if (!btnSwitch.IsSelected)
                //{
                //    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                //}
                //btnSwitch.IsSelected = e > 0 ? true : false;
                //function.brightness = e;
                //function.trait_on_off.curValue = e > 0 ? "on" : "off";
                    //dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                if (!btnSwitch.IsSelected)
                    {
                        dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                    }
                    btnSwitch.IsSelected = e > 0 ? true : false;
                    function.trait_on_off.curValue = e > 0 ? "on" : "off";
                //if (e == 0 || e == 100)
                //{
                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
                //    Control.Ins.SendWriteCommand(function, d);
                //}
                //else
                //{
                //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                //    {
                //        function.refreshTime = DateTime.Now;
                //        new System.Threading.Thread(() =>
                //        {
                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
                //            Control.Ins.SendWriteCommand(function, d);
                //        })
                //        { IsBackground = true }.Start();
                //    }
                //}
                    if (e == 0 || e == 100)
                    {
                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                        d.Add(FunctionAttributeKey.Brightness, e.ToString());
                        Control.Ins.SendWriteCommand(function, d);
                    }
                    else
                    {
                        if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                        {
                            function.refreshTime = DateTime.Now;
                            new System.Threading.Thread(() =>
                            {
                                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                                d.Add(FunctionAttributeKey.Brightness, e.ToString());
                                Control.Ins.SendWriteCommand(function, d);
                            })
                            { IsBackground = true }.Start();
                        }
                    }
                //btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16 - 16) / 100) + Application.GetRealWidth(40);
                //btnBrightnessText.Text = function.brightness + "%";
                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100) + Application.GetRealWidth(80);
                    btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100) + Application.GetRealWidth(80);
                    btnBrightnessText.Text = dimmerBar.Progress + "%";
                };
HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs
@@ -262,9 +262,36 @@
                DriverLayer.Control.Ins.SendReadCommand(function);
            })
            { IsBackground = true }.Start();
            new System.Threading.Thread(() => {
                while (true)
                {
                    System.Threading.Thread.Sleep(2000);
                    if (curDimmerStatus)
                    {
                        continue;
                    }
                    if (onDimmerBar)
                    {
                        onDimmerBar = false;
                        continue;
                    }
                    else
                    {
                        DriverLayer.Control.Ins.SendReadCommand(function);
                        curDimmerStatus = true;
                    }
                }
            })
            { IsBackground = true }.Start();
        }
    }
}
HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
@@ -21,13 +21,13 @@
                    if (updataTemp.spk == bodyView.function.spk && updataTemp.sid == bodyView.function.sid)
                    {
                        bodyView.btnBrightnessText.Text = updataTemp.GetAttrState(FunctionAttributeKey.Brightness) + "%";
                        bodyView.btnBrightnessText.Y = ((100 - Convert.ToInt32( updataTemp.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
                        if (updataTemp.trait_on_off.curValue.ToString() == "on")
                        {
                            bodyView.dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                            if (!bodyView.onDimmerBar)
                            {
                                bodyView.dimmerBar.Progress = Convert.ToInt32(updataTemp.GetAttrState(FunctionAttributeKey.Brightness));
                                bodyView.btnBrightnessText.Y = ((100 - Convert.ToInt32(updataTemp.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
                            }
                        }
                        else
@@ -83,6 +83,8 @@
            };
        }
        bool curDimmerStatus = false;
        /// <summary>
        /// 灯光调光事件
        /// </summary>
@@ -92,19 +94,20 @@
            {
                dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
                {
                    onDimmerBar = true;
                    curDimmerStatus = onDimmerBar = true;
                    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                };
                dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
                {
                    onDimmerBar = false;
                    curDimmerStatus = false;
                    function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString());
                    if(dimmerBar.Progress > 0)
                    {
                        d.Add(FunctionAttributeKey.OnOff, "on");
                    }
                    //if(dimmerBar.Progress > 0)
                    //{
                    //    d.Add(FunctionAttributeKey.OnOff, "on");
                    //}
                    Control.Ins.SendWriteCommand(function, d);
                    btnBrightnessText.Text = dimmerBar.Progress + "%";
                };
@@ -112,36 +115,35 @@
                dimmerBar.OnProgressChangedEvent = (sender, e) =>
                {
                   
                //function.fadeTime = 0;
                //if (!btnSwitch.IsSelected)
                //{
                //    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                //}
                //btnSwitch.IsSelected = e > 0 ? true : false;
                //function.brightness = e;
                //function.trait_on_off.curValue = e > 0 ? "on" : "off";
                //if (e == 0 || e == 100)
                //{
                //    //Control.Send(CommandType_A.write, this.function);
                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
                //    Control.Ins.SendWriteCommand(function, d);
                //}
                //else
                //{
                //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                //    {
                //        function.refreshTime = DateTime.Now;
                //        new System.Threading.Thread(() =>
                //        {
                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
                //            Control.Ins.SendWriteCommand(function, d);
                //        })
                //        { IsBackground = true }.Start();
                //    }
                //}
                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
                    if (!btnSwitch.IsSelected)
                    {
                        dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                    }
                    btnSwitch.IsSelected = e > 0 ? true : false;
                    function.SetAttrState(FunctionAttributeKey.Brightness, e);
                    function.trait_on_off.curValue = e > 0 ? "on" : "off";
                    if (e == 0 || e == 100)
                    {
                        //Control.Send(CommandType_A.write, this.function);
                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                        d.Add(FunctionAttributeKey.Brightness, e.ToString());
                        Control.Ins.SendWriteCommand(function, d);
                    }
                    else
                    {
                        if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                        {
                            function.refreshTime = DateTime.Now;
                            new System.Threading.Thread(() =>
                            {
                                System.Collections.Generic.Dictionary<string, string> dic = new System.Collections.Generic.Dictionary<string, string>();
                                dic.Add(FunctionAttributeKey.Brightness, e.ToString());
                                Control.Ins.SendWriteCommand(function, dic);
                            })
                            { IsBackground = true }.Start();
                        }
                    }
                    btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
                    btnBrightnessText.Text = dimmerBar.Progress + "%";
                };
            }
HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
@@ -349,6 +349,30 @@
                DriverLayer.Control.Ins.SendReadCommand(function);
            })
            { IsBackground = true }.Start();
            new System.Threading.Thread(() => {
                while (true)
                {
                    System.Threading.Thread.Sleep(1000);
                    if (curDimmerStatus)
                    {
                        continue;
                    }
                    if (onDimmerBar)
                    {
                        continue;
                    }
                    else
                    {
                        DriverLayer.Control.Ins.SendReadCommand(function);
                        curDimmerStatus = true;
                    }
                }
            })
            { IsBackground = true }.Start();
        }
    }
}
HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
@@ -207,6 +207,7 @@
            };
        }
        bool curDimmerStatus = false;
        /// <summary>
        /// 灯光调光事件
        /// </summary>
@@ -225,12 +226,7 @@
                //    }.Show(MainPage.BaseView);
                //    return;
                //}
                new System.Threading.Thread(() =>
                {
                    System.Threading.Thread.Sleep(200);
                    onDimmerBar = false;
                })
                { IsBackground = true }.Start();
                curDimmerStatus = false;
                function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString());
@@ -241,44 +237,42 @@
            {
                dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
                {
                    onDimmerBar = true;
                    curDimmerStatus = onDimmerBar = true;
                };
                dimmerBar.OnProgressChangedEvent = (sender, e) =>
                {
                    //function.fadeTime = 0;
                    //if (!btnSwitch.IsSelected)
                    //{
                    //    dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1;
                    //}
                    //btnSwitch.IsSelected = e > 0 ? true : false;
                    //function.brightness = e;
                    //function.trait_on_off.curValue = e > 0 ? "on" : "off";
                    if (!btnSwitch.IsSelected)
                    {
                        dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1;
                    }
                    btnSwitch.IsSelected = e > 0 ? true : false;
                    function.trait_on_off.curValue = e > 0 ? "on" : "off";
                    //if (e == 0 || e == 100)
                    //{
                    //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
                    //    Control.Ins.SendWriteCommand(function, d);
                    //}
                    //else
                    //{
                    //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                    //    {
                    //        function.refreshTime = DateTime.Now;
                    //        new System.Threading.Thread(() =>
                    //        {
                    //            //Control.Send(CommandType_A.write, function);
                    //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
                    //            Control.Ins.SendWriteCommand(function, d);
                    //        })
                    //        { IsBackground = true }.Start();
                    //    }
                    //    else
                    //    {
                    //        MainPage.Log("skip dimmer control!!");
                    //    }
                    //}
                    if (e == 0 || e == 100)
                    {
                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                        d.Add(FunctionAttributeKey.Brightness, e.ToString());
                        Control.Ins.SendWriteCommand(function, d);
                    }
                    else
                    {
                        if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                        {
                            function.refreshTime = DateTime.Now;
                            new System.Threading.Thread(() =>
                            {
                                //Control.Send(CommandType_A.write, function);
                                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                                d.Add(FunctionAttributeKey.Brightness, e.ToString());
                                Control.Ins.SendWriteCommand(function, d);
                            })
                            { IsBackground = true }.Start();
                        }
                        else
                        {
                            MainPage.Log("skip dimmer control!!");
                        }
                    }
                };
            }
        }
HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using HDL_ON.Entity;
using Shared;
@@ -76,7 +77,7 @@
                new System.Threading.Thread(() =>
                {
                    function.trait_on_off.curValue = btnSwitchIcon.IsSelected ? "on" : "off";
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("on_off", function.trait_on_off.curValue.ToString());
                    DriverLayer.Control.Ins.SendWriteCommand(function, d);
                })
SiriIntents/Server/HttpUtil.cs
@@ -16,8 +16,8 @@
        /// 固定域名,正式环境
        /// 公共域名就近解析
        /// </summary>
        //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
        public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
        public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
        //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
        /// <summary>
        /// RegionMark
        /// </summary>