.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,15 +1,20 @@ <Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default"> <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget." /> <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Pie.cs"> <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget.94B44E9C-E1BC-4BF7-812E-FC71E9B623B2" /> <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/Entity/Function/Function.cs"> <Files> <File FileName="HDL_ON/DAL/Server/HttpUtil.cs" Line="6" Column="19" /> <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs" /> <File FileName="HDL_ON/UI/MainPage.cs" /> <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs" /> <File FileName="HDL_ON/UI/UI0-Public/PublicAssmebly.cs" /> <File FileName="HDL_ON/DAL/Server/IMessageCommon.cs" /> <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption.cs" /> <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Pie.cs" Line="34" Column="1" /> <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Pie.cs" Line="26" Column="29" /> <File FileName="HDL_ON/Entity/Enumerative/MyEnum.cs" Line="47" Column="23" /> <File FileName="HDL_ON/DAL/DriverLayer/Control_Udp.cs" Line="633" Column="51" /> <File FileName="HDL_ON/DAL/DriverLayer/Packet.cs" Line="641" Column="59" /> <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="197" Column="18" /> <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="382" Column="59" /> <File FileName="HDL_ON/Entity/Function/Function.cs" Line="1052" Column="47" /> </Files> <Pads> <Pad Id="ProjectPad"> @@ -23,21 +28,24 @@ </Node> <Node name="Entity" expanded="True"> <Node name="Device" expanded="True" /> <Node name="Function" expanded="True" /> <Node name="Enumerative" expanded="True" /> <Node name="Function" expanded="True"> <Node name="Function.cs" selected="True" /> </Node> <Node name="ResponseEntity" expanded="True" /> </Node> <Node name="UI" expanded="True"> <Node name="CSS" expanded="True" /> <Node name="UI0-Public" expanded="True" /> <Node name="UI1-Login" expanded="True" /> <Node name="UI2" expanded="True"> <Node name="1-HomePage" expanded="True" /> <Node name="2-Classification" expanded="True" /> <Node name="4-PersonalCenter" expanded="True"> <Node name="AddDevice" expanded="True" /> </Node> <Node name="FuntionControlView" expanded="True"> <Node name="1ContorlPage" expanded="True" /> <Node name="EnvironmentalScience" expanded="True"> <Node name="EchartsOption_Pie.cs" selected="True" /> </Node> <Node name="EnvironmentalScience" expanded="True" /> </Node> </Node> </Node> @@ -72,7 +80,6 @@ <String>Shared.IOS/Shared.IOS.csproj</String> </DisabledProjects> <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" /> <MonoDevelop.Ide.ItemProperties.HDL-ON__Android PreferredExecutionTarget="Android.SelectDevice" /> <MonoDevelop.Ide.DebuggingService.Breakpoints> <BreakpointStore /> </MonoDevelop.Ide.DebuggingService.Breakpoints> DLL/.DS_StoreBinary files differ
HDL_ON/Common/ApiUtlis.cs
@@ -172,28 +172,6 @@ continue; } var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId); //if (newFunction == null)//如果云端最新数据没有该条数据,则本地需要删掉该数据记录 //{ // FunctionList.List.DeleteFunction(localFunction); //} //else //{ // MainPage.Log($"deviceType:{localFunction.spk} local:{localFunction.modifyTime} server:{newFunction.modifyTime}"); // i++; // //if (localFunction.modifyTime != newFunction.modifyTime) // //{ // // //可优化 // // localFunction.name = newFunction.name; // // localFunction.collect = newFunction.collect; // // localFunction.modifyTime = newFunction.modifyTime; // // localFunction.roomIds = newFunction.roomIds; // // localFunction.bus = newFunction.bus; // // localFunction.SaveFunctionFile(); // //} // localFunction = newFunction; // localFunction.SaveFunctionFile(); // deviceList.list.Remove(newFunction);//操作完的数据清理掉,剩下的就是新增的功能 //} if (delFile == localFunction.savePath) { @@ -202,10 +180,7 @@ } delFile = localFunction.savePath; FunctionList.List.DeleteFunction(localFunction); } } //处理剩下的新增功能 foreach (var newFunction in deviceList.list) @@ -369,5 +344,24 @@ }) { IsBackground = true }.Start(); } /// <summary> /// 获取功能信息 /// </summary> public void GetFunctionInfo(string functionId) { var deviceResult = Ins.HttpRequest.GetDeviceInfo(functionId); if (deviceResult.Code == StateCode.SUCCESS) { MainPage.Log($"读取设备信息成功"); var packList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString()); foreach(var function in packList.list) { function.SaveFunctionFile(); FunctionList.List.IniFunctionList(function.savePath,true); } } } } } HDL_ON/DAL/DriverLayer/Control_Udp.cs
@@ -630,6 +630,9 @@ break; } break; case FunctionCategory.AirFresh: break; } #region 发送命令立即更新UI //HomePage.UpdataFunctionStates(function); @@ -890,6 +893,10 @@ case Command.SetACMode: case Command.ReadFloorHeat: case Command.SetFloorHeat: case Command.FreshAirRead: case Command.FreshAirControl: case Command.FreshAirRead_JinMao: case Command.FreshAirControl_JinMao: this.sendFlag += string.Format("{0}", target.AddData[0]); break; case Command.SetLogicLoopColor: HDL_ON/DAL/DriverLayer/Packet.cs
@@ -315,7 +315,7 @@ if (function.GetBusId() == subnetID + "_" + deviceID + "_" + receiveBytes[0]) { function.SetAttrState(FunctionAttributeKey.TempType, receiveBytes[1].ToString()); function.SetAttrState(FunctionAttributeKey.IndoorTemp, receiveBytes[2].ToString()); function.SetAttrState(FunctionAttributeKey.RoomTemp, receiveBytes[2].ToString()); function.trait_on_off.curValue = receiveBytes[8] == 1 ? "on" : "off"; acFunction.SetMode(receiveBytes[9],function); acFunction.SetFan(receiveBytes[10],function); @@ -446,7 +446,7 @@ { indoorTemp = receiveBytes[9]; } function.SetAttrState(FunctionAttributeKey.IndoorTemp, indoorTemp); function.SetAttrState(FunctionAttributeKey.RoomTemp, indoorTemp); function.lastState += " " + function.GetAttrState(FunctionAttributeKey.Mode) + new FloorHeating().GetTempUnitString(function); RoomPage.UpdataStates(function); @@ -621,7 +621,7 @@ { if (ac.GetBusId() == subnetID + "_" + deviceID + "_" + receiveBytes[0]) { ac.SetAttrState(FunctionAttributeKey.IndoorTemp, receiveBytes[1].ToString()); ac.SetAttrState(FunctionAttributeKey.RoomTemp, receiveBytes[1].ToString()); FunctionPage.UpdataStates(ac); } } @@ -636,6 +636,45 @@ Control.Ins.IsSearchLocalGatewaySuccessful = true; Control.Ins.GatewayOnline_Local = true; DAL.Mqtt.MqttClient.DisConnectRemote();//断开mqtt } break; case Command.FreshAirControlACK_JinMao: case Command.FreshAirReadACK_JinMao: var airFresh = FunctionList.List.GetAirFreshList().Find((obj) => obj.GetBusId() == subnetID + "_" + deviceID + "_" + receiveBytes[0]); if (airFresh != null) { /// 3 开关 0-关机,1-开机 /// 4 运行模式 1-通风,2-加湿 humidification/fan /// 5 节能舒适选择 1-舒适,2-节能 true/false /// 6 风速档位 0-自动,1-1档,2-2档,3-3档 level_1/level_2/level_3/auto /// 7 湿度设定 % /// 8 室内温度值 ℃ /// 9 室内湿度值 ℃ /// 10 过滤网剩余 % /// 11 过滤网使用超时 1 超时 0 无 true/false airFresh.SetAttrState(FunctionAttributeKey.OnOff, receiveBytes[2] == 0 ? "off" : "on"); airFresh.SetAttrState(FunctionAttributeKey.Mode, receiveBytes[3] == 1 ? "humidification" : "fan"); airFresh.SetAttrState(FunctionAttributeKey.Energy, receiveBytes[4] == 1 ? "true" : "false"); switch (receiveBytes[5]) { case 0: airFresh.SetAttrState(FunctionAttributeKey.FanSpeed, "auto"); break; case 1: airFresh.SetAttrState(FunctionAttributeKey.FanSpeed, "level_1"); break; case 2: airFresh.SetAttrState(FunctionAttributeKey.FanSpeed, "level_2"); break; case 3: airFresh.SetAttrState(FunctionAttributeKey.FanSpeed, "level_3"); break; } airFresh.SetAttrState(FunctionAttributeKey.Humidity, receiveBytes[6].ToString()); airFresh.SetAttrState(FunctionAttributeKey.IndoorTemp, receiveBytes[7].ToString()); airFresh.SetAttrState(FunctionAttributeKey.IndoorHumidity, receiveBytes[8].ToString()); airFresh.SetAttrState(FunctionAttributeKey.FilterRemain, receiveBytes[9].ToString()); airFresh.SetAttrState(FunctionAttributeKey.FilterTimeout, receiveBytes[10] == 1 ? "true" : "false"); } break; } @@ -672,6 +711,10 @@ switch (command) { case Command.SetSingleLightACK: case Command.FreshAirReadACK: case Command.FreshAirControlACK: case Command.FreshAirReadACK_JinMao: case Command.FreshAirControlACK_JinMao: receiveFlag += string.Format("{0}", usefulBytes[0]); break; case Command.SetLogicLoopColorACK: HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1816,7 +1816,19 @@ return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Get3tyBrandDevcieList, requestJson); } /// <summary> /// 获取设备详情 /// </summary> /// <returns></returns> public ResponsePackNew GetDeviceInfo(string functionId) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID); d.Add("deviceIds", new List<string>() { functionId }); var requestJson = HttpUtil.GetSignRequestJson(d); return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetDevcieInfoList, requestJson); } /// <summary> /// 获取设备详情列表 HDL_ON/Entity/Enumerative/Command.cs
@@ -14,6 +14,75 @@ ReadAnalog = 0xE50A, ReadAnalogACK = 0xE50B, #region 新风协议 //新风协议控制 //附加数据: 新风通道号(1 - 200) + 开关(0,1) + 风速(0 关,1低,2中,3高) + 模式(0手动,1 自动,2 智能,3 定时) FreshAirControl = 0x144A, //返回:新风通道号(1 - 200) + 开关(0,1) + 风速(0 关,1低,2中,3高) + 模式(0手动,1 自动,2 智能,3 定时)+模拟量(2byte==16bit)+ //室内温度(4byte) + 室外温度(4byte) + 室内湿度(4byte)+ PM2.5(4byte) + TVOC(4byte) + CO2(4byte) FreshAirControlACK = 0x144B, //2.新风协议读状态 //附加数据: 新风通道号(1 - 200) FreshAirRead = 0x144C, //返回:新风通道号(1 - 200) + 开关(0,1) + 风速(0 关,1低,2中,3高) + 模式(0手动,1 自动,2 智能,3 定时) +模拟量(2byte==16bit)+ //室内温度(4byte) + 室外温度(4byte) + 室内湿度(4byte)+ PM2.5(4byte) + TVOC(4byte) + CO2(4byte) FreshAirReadACK = 0x144D, #endregion #region 金茂府 昆明 温州 新风协议 /// <summary> /// 附加数据长度:1 /// 新风编号 1~200 /// </summary> FreshAirRead_JinMao = 0x1446, /// <summary> /// 附加数据长度:30 /// 1 新风编号 1~200 /// 2 类型 第三方类型 0:金茂新风 /// 3 开关 0-关机,1-开机 /// 4 运行模式 1-通风,2-加湿 /// 5 节能舒适选择 1-舒适,2-节能 /// 6 风速档位 0-自动,1-1档,2-2档,3-3档 /// 7 湿度设定 % /// 8 室内温度值 ℃ /// 9 室内湿度值 ℃ /// 10 过滤网剩余 % /// 11 过滤网使用超时 1 超时 0 无 /// </summary> FreshAirReadACK_JinMao = 0x1447, /// <summary> /// 附加数据长度:4 /// 1 新风编号 1~200 /// 2 类型 第三方类型 0:金茂新风 /// 3 开关 0-关机,1-开机 /// 4 运行模式 1-通风,2-加湿 /// 5 节能舒适选择 1-舒适,2-节能 /// 6 风速档位 0-自动,1-1档,2-2档,3-3档 /// 7 湿度设定 % /// 8 室内温度值 ℃ /// 9 室内湿度值 ℃ /// 10 过滤网剩余 % /// 11 过滤网使用超时 1 超时 0 无 /// </summary> FreshAirControl_JinMao = 0x1448, /// <summary> /// 附加数据长度:30 /// 1 新风编号 1~200 /// 2 类型 第三方类型 0:金茂新风 /// 3 开关 0-关机,1-开机 /// 4 运行模式 1-通风,2-加湿 /// 5 节能舒适选择 1-舒适,2-节能 /// 6 风速档位 0-自动,1-1档,2-2档,3-3档 /// 7 湿度设定 % /// 8 室内温度值 ℃ /// 9 室内湿度值 ℃ /// 10 过滤网剩余 % /// 11 过滤网使用超时 /// </summary> FreshAirControlACK_JinMao = 0x1449, #endregion #region 绿建温控器协议 /// <summary> /// 读取温控器主机指令 @@ -1222,24 +1291,6 @@ LogicstateControl = 0xE014, LogicstateControlACK = 0xE015, #region 新风协议 //新风协议控制 //附加数据: 新风通道号(1 - 200) + 开关(0,1) + 风速(0 关,1低,2中,3高) + 模式(0手动,1 自动,2 智能,3 定时) FreshAirControl = 0x144A, //返回:新风通道号(1 - 200) + 开关(0,1) + 风速(0 关,1低,2中,3高) + 模式(0手动,1 自动,2 智能,3 定时)+模拟量(2byte==16bit)+ //室内温度(4byte) + 室外温度(4byte) + 室内湿度(4byte)+ PM2.5(4byte) + TVOC(4byte) + CO2(4byte) FreshAirControlACK = 0x144B, //2.新风协议读状态 //附加数据: 新风通道号(1 - 200) FreshAirRead = 0x144C, //返回:新风通道号(1 - 200) + 开关(0,1) + 风速(0 关,1低,2中,3高) + 模式(0手动,1 自动,2 智能,3 定时) +模拟量(2byte==16bit)+ //室内温度(4byte) + 室外温度(4byte) + 室内湿度(4byte)+ PM2.5(4byte) + TVOC(4byte) + CO2(4byte) FreshAirReadACK = 0x144D, #endregion /// <summary> /// 布防设置 HDL_ON/Entity/Function/Function.cs
@@ -768,7 +768,7 @@ /// <summary> /// 室内温度 /// </summary> public const string IndoorTemp = "room_temp"; public const string RoomTemp = "room_temp"; /// <summary> /// value /// </summary> @@ -838,7 +838,7 @@ /// </summary> public const string AnionTimeLeft = "anion_time_surplus"; /// <summary> /// 打开登记(风扇) /// 打开等级(风扇) /// </summary> public const string OpenLevel = "openLevel"; /// <summary> @@ -846,6 +846,30 @@ /// </summary> public const string Key = "key"; /// <summary> /// 节能 /// </summary> public const string Energy = "energy"; /// <summary> /// 湿度 /// </summary> public const string Humidity = "humidity"; /// <summary> /// 室内温度 /// </summary> public const string IndoorTemp = "indoor_temp"; /// <summary> /// 室内湿度 /// </summary> public const string IndoorHumidity = "indoor_humidity"; /// <summary> /// 过滤网剩余量 /// </summary> public const string FilterRemain = "filter_remain"; /// <summary> /// 过滤网是否超时警告 /// </summary> public const string FilterTimeout = "filter_timeout"; #region tuya /// <summary> @@ -1022,6 +1046,10 @@ /// (新风) /// </summary> public const string AirFreshStandard = "airFresh.standard"; /// <summary> /// 新风 ——金茂定制 /// </summary> public const string AirFreshJinmao = "airFresh.jinmao"; /// <summary> /// 新风spk列表 @@ -1031,6 +1059,7 @@ { var spkList = new List<string>(); spkList.Add(AirFreshStandard); spkList.Add(AirFreshJinmao); return spkList; } #endregion @@ -1181,6 +1210,7 @@ /// 红外遥控器 /// </summary> public const string IrLearn = "ir.learn"; #region 涂鸦 /// <summary> /// 家电、涂鸦空气净化器 HDL_ON/Entity/Function/Scene.cs
@@ -446,7 +446,7 @@ case FunctionAttributeKey.SetTemp: text = Language.StringByID(StringId.Temp); break; case FunctionAttributeKey.IndoorTemp: case FunctionAttributeKey.RoomTemp: text = Language.StringByID(StringId.IndoorTemp); break; case FunctionAttributeKey.Delay: @@ -475,7 +475,7 @@ switch (key) { case FunctionAttributeKey.SetTemp: case FunctionAttributeKey.IndoorTemp: case FunctionAttributeKey.RoomTemp: us = "°C"; break; case FunctionAttributeKey.Percent: @@ -500,7 +500,7 @@ text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF); break; case FunctionAttributeKey.SetTemp: case FunctionAttributeKey.IndoorTemp: case FunctionAttributeKey.RoomTemp: case FunctionAttributeKey.Brightness: case FunctionAttributeKey.Percent: if (value == "") HDL_ON/Entity/FunctionList.cs
@@ -70,6 +70,16 @@ var spkList = SPK.FhSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// <summary> /// 新风列表 /// </summary> /// <returns></returns> public List<Function> GetAirFreshList() { var spkList = SPK.AirFreshSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } #region 家电列表 electricals /// <summary> /// 家电列表 HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -185,20 +185,20 @@ }; bodyView.AddChidren(btnIcon_bg); #if DEBUG #if DEBUG bool b = false; btnIcon.MouseUpEventHandler += (sender, e) => { //return; if (b) { etAccount.Text = "18316672920";//"18316120654";//lcg "18316672920";//hzx;// "13415629083"//cf;//tujie"18316120654"; etAccount.Text = "Sumant.Bhatia@havells.com";//"18316120654";//lcg "18316672920";//hzx;// "13415629083"//cf;//tujie"18316120654"; // "15622703419"lwn;// "18824864143";//"464027401@qq.com"; //"2791308028@qq.com";//13697499568 } else { etAccount.Text = "15971583093";//凉霸"18666455392";//13375012446//13602944661//tzy 18778381374 //15971583093 gs//tzy 274116637@qq.com //15971583093 gs//tzy 274116637@qq.com//Sumant.Bhatia@havells.com 国外服务器测试 } b = !b; etPassword.Text = "123456"; HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
@@ -723,7 +723,7 @@ Application.RunOnMainThread(() => { btnTemp.Text = device.GetAttrState(FunctionAttributeKey.SetTemp); btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.IndoorTemp))) + "°C"; btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp))) + "°C"; btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode)); btnWindSpeed.UnSelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed)); arcBar.Progress = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp))); HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
@@ -458,7 +458,7 @@ Application.RunOnMainThread(() => { btnTemp.Text = device.GetAttrState(FunctionAttributeKey.SetTemp); btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.IndoorTemp))) + "°C"; btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp))) + "°C"; btnMode.UnSelectedImagePath = fhTemp.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode)); arcBar.Progress = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp))); if (device.trait_on_off.curValue.ToString() == "on") HDL_ON/UI/UI2/FuntionControlView/AC/ACPageBLL.cs
@@ -26,7 +26,7 @@ AC temp = new AC(); updataTime = DateTime.Now; bodyView.btnTemp.Text = updateTemp.GetAttrState(FunctionAttributeKey.SetTemp); bodyView.btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState((string)FunctionAttributeKey.IndoorTemp))) + "°C"; bodyView.btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState((string)FunctionAttributeKey.RoomTemp))) + "°C"; bodyView.btnMode.UnSelectedImagePath = temp.GetModeIconPath(updateTemp.GetAttrState(FunctionAttributeKey.Mode)); bodyView.btnWindSpeed.UnSelectedImagePath = temp.GetFanIconPath(updateTemp.GetAttrState(FunctionAttributeKey.FanSpeed)); bodyView.arcBar.Progress = Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState(FunctionAttributeKey.SetTemp))); HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
@@ -20,7 +20,7 @@ return; } bodyView.btnTemp.Text = updateTemp.GetAttrState(FunctionAttributeKey.SetTemp); bodyView.btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState(FunctionAttributeKey.IndoorTemp))) + "°C"; bodyView.btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState(FunctionAttributeKey.RoomTemp))) + "°C"; bodyView.btnMode.UnSelectedImagePath = bodyView.fhTemp.GetModeIconPath(updateTemp.GetAttrState(FunctionAttributeKey.Mode)); bodyView.arcBar.Progress = Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState(FunctionAttributeKey.SetTemp))); if (updateTemp.trait_on_off.curValue.ToString() == "on")