wxr
2021-06-06 d7e25d6a5960b3495cd4d8a67545410e03ca7962
Merge branch 'wxr4' into temp-wxr
30个文件已添加
35个文件已修改
5 文件已重命名
1510 ■■■■ 已修改文件
.vs/HDL_APP_Project/xs/UserPrefs.xml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/ArmSensor/SomeoneFellBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/ArmSensor/SomeoneInBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/ArmSensor/UnderProtectionBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconDown.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconLeft.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconOk.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconRight.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconUp.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/irtvxm.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PersonalCenter/AddDevice/SenesorMegahealthBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Public/Scan.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Info.plist 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmSensor/SomeoneFellBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmSensor/SomeoneInBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmSensor/UnderProtectionBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconDown.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconLeft.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconOk.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconRight.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconUp.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/irtvxm.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/AddDevice/SenesorMegahealthBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Public/Scan.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control.cs 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Scene.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/FunctionList.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/OperationSuccessPromptPage.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/Widget/EmptyTipView.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection1Page.cs 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection2Page.cs 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection3Page.cs 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection4Page.cs 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddThirdPartyDeviceMenuListPage.cs 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/AddSenesorMegahealthDirection1Page.cs 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/SenesorMegahealthManagerPage.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Matching.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorPirPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/IrFanPage.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Energy/EnergyMainPage.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,28 +1,48 @@
<Properties StartupConfiguration="{09712674-2A38-407B-B1E2-560B2C352F9A}|Default">
<Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default">
  <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS automaticSigning="False" PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.6242be7109c740c6cb8999a8904b6e0ea8d45192" />
  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/DAL/Server/NewAPI.cs">
  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/DAL/DriverLayer/Control.cs">
    <Files>
      <File FileName="HDL_ON/UI/UI2/2-Classification/RoomPage.cs" Line="72" Column="11" />
      <File FileName="HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs" Line="9" Column="45" />
      <File FileName="HDL_ON/UI/UI2/FuntionControlView/Energy/EnergyMainPage.cs" Line="692" Column="21" />
      <File FileName="HDL_ON/DAL/Mqtt/MqttClient.cs" Line="693" Column="36" />
      <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs" Line="363" Column="55" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" Line="531" Column="80" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs" Line="265" Column="45" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/BrandListPage.cs" Line="157" Column="50" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs" Line="127" Column="74" />
      <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="203" Column="52" />
      <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePage.cs" Line="1" Column="1" />
      <File FileName="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs" Line="179" Column="46" />
      <File FileName="HDL_ON/Entity/ResponseEntity/CityInfo.cs" Line="34" Column="16" />
      <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" Line="1841" Column="90" />
      <File FileName="HDL_ON/DAL/Server/NewAPI.cs" Line="324" Column="23" />
      <File FileName="HDL_ON/Common/R.cs" Line="9" Column="19" />
      <File FileName="HDL-ON_iOS/Resources/Language.ini" />
      <File FileName="HDL-ON_Android/Assets/Language.ini" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs" />
      <File FileName="HDL_ON/UI/MainPage.cs" />
      <File FileName="HDL-ON_iOS/Info.plist" />
      <File FileName="HDL_ON/DAL/Server/HttpUtil.cs" />
      <File FileName="HDL_ON/UI/UI0-Stan/Form/Base/EditorCommonForm.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/SenesorMegahealthManagerPage.cs" />
      <File FileName="HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs" />
      <File FileName="HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs" />
      <File FileName="HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs" />
      <File FileName="HDL_ON/UI/UI2/FuntionControlView/ArmSensor/ArmSensorHistroyPaging.cs" />
      <File FileName="HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs" />
      <File FileName="HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs" />
      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="675" Column="34" />
      <File FileName="HDL_ON/DAL/Server/NewApiRes.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs" />
      <File FileName="HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs" />
      <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" />
      <File FileName="HDL_ON/DAL/Server/NewAPI.cs" />
      <File FileName="HDL_ON/DAL/Mqtt/MqttClient.cs" Line="424" Column="69" />
    </Files>
    <Pads>
      <Pad Id="ProjectPad">
        <State name="__root__">
          <Node name="HDL_APP_Project" expanded="True">
            <Node name="HDL-ON_Android" selected="True" />
            <Node name="HDL_ON" expanded="True">
              <Node name="DAL" expanded="True">
                <Node name="DriverLayer" expanded="True">
                  <Node name="Control.cs" selected="True" />
                </Node>
                <Node name="Mqtt" expanded="True" />
                <Node name="Server" expanded="True" />
              </Node>
              <Node name="Entity" expanded="True">
                <Node name="Function" expanded="True" />
              </Node>
              <Node name="UI" expanded="True" />
            </Node>
          </Node>
        </State>
      </Pad>
@@ -34,13 +54,17 @@
    <String>Shared.Droid.TouchID/Shared.Droid.TouchID.csproj</String>
    <String>Shared.IOS/Shared.IOS.csproj</String>
  </DisabledProjects>
  <MonoDevelop.Ide.Workspace ActiveConfiguration="Release|iPhone" />
  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhone" />
  <MonoDevelop.Ide.ItemProperties.HDL-ON__Android PreferredExecutionTarget="Android.SelectDevice" />
  <MonoDevelop.Ide.DebuggingService.Breakpoints>
    <BreakpointStore>
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs" line="34" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs" line="313" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Server/HttpServerRequest.cs" relfile="HDL_ON/DAL/Server/HttpServerRequest.cs" line="1841" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/BindingResidence/BindingResidencePage.cs" relfile="HDL_ON/UI/BindingResidence/BindingResidencePage.cs" line="121" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Server/HttpServerRequest.cs" relfile="HDL_ON/DAL/Server/HttpServerRequest.cs" line="1857" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/AddSenesorMegahealthDirection1Page.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/AddSenesorMegahealthDirection1Page.cs" line="119" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Mqtt/MqttClient.cs" relfile="HDL_ON/DAL/Mqtt/MqttClient.cs" line="678" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/DriverLayer/Control.cs" relfile="HDL_ON/DAL/DriverLayer/Control.cs" line="673" column="1" />
    </BreakpointStore>
  </MonoDevelop.Ide.DebuggingService.Breakpoints>
  <MultiItemStartupConfigurations />
HDL-ON_Android/Assets/Language.ini
@@ -188,8 +188,8 @@
187=Fan
188=Socket
189=Level
190=Channel
191=Volume
190=Chl
191=Vol
192=TV
193=The room has existed, fail to change.
194=Environment
@@ -446,6 +446,18 @@
459=Real time energy consumption
460=Energy consumption of this month
461=Outdoor/Indoor
462=You haven't added any devices yet
'
463=Please input the SN code of the device
464=Can start using Zhaoguan millimeter wave
465=Delete device
466=STB
467=Projector
468=Someone fell
469=Someone's in
'
470=Under protection
471=Millimeter wave sensor
1000=Room Humidity
1001=V-chip
@@ -536,6 +548,30 @@
1085=2nd Gear
1086=3rd Gear
4000=Video intercom
4001=Call record
4002=*Cloud photos are only kept for 30 days
4003=Door phone call
4004=Answered
4005=Unlocked
4006=year
4007=From
4008=Call
4009=Unlocked
4010=Missed
4011=Rejected
4012=The configuration parameters are abnormal!
4013=Access Control QR Code
4014=Temporary password
5000=Music
5001=Group
5002=Setting
@@ -584,7 +620,147 @@
5045=General volume
5046=Adjust volume
5047="QQ music" has not installed in your cell phone, please proceed in App center.
6000=normal
6001=Device status
6002=pcs
6003=Current IR control device
6004=Remote controller has been added
6005=AC
6006=TV
6007=Fan
6008=Set-top box
6009=DVD
6010=Projector
6011=Custom
6012=IR control
6013=Device Management
6014=Add remote controller
6015=Online
6016=Offline
6017=Version number
6018=Please enter the name of the remote controller
6019=Reminder: After the remote controller is created, it can be found and used in Function-Electrical Category{\r\n}
6020=Recommended button
6021=Please enter the button name
6022=Next
6023=Power
6024=Volume+
6025=Volume-
6026=channel+
6027=Channel-
6028=up
6029=down
6030=Left
6031=right
6032=Mute
6034=Confirm
6035=Play
6037=Exit
6038=Menu
6039=Pause
6040=Back
6041=Stop
6042=Homepage
6043=Fast forward
6044=Rewind
6045=Timing
6046=Copy remote control function
6047=Aim at the center of the remote controller and press the same button
6048=Smart remote controller
6049=Add button
6050=*Long press for custom sorting
6051=Done
6052=Added successfully
6053=Can be classified-function-electrical operation and use
6054=Classification
6055=Remote controller name
6056=Region
6057=Continue to add
6058=Electrical
6059=Failed to add
6060=Retry
6061=Match the remote control
6062=Please click the button below
6063=Confirm whether the device is responding
6064=Control failed
6065=Control success
6066=Power on
6067=Mode cooling
6068=Wind speed stroke
6069=Temperature 26℃
6070=Delete device
6071=Modify name
6072=Confirm deletion
6073=Cancel
6074=The remote controller cannot exceed 10 pcs
6075=The area where the remote control belongs:
6076=Edit information
6077=Version upgrade
6078=System is under maintenance~Please try again later~
6079=Failed to get data
6080=This function is temporarily not supported
6081=Select IR brand
6082=Shaking
6083=Low speed
6084=Medium speed
6085=High speed
6086=Auto
6087=Temperature+
6088=Temperature-
6089=Air purifier
6090=Water heater
6091=Product that does not exist
6092=The device does not exist
6093=The device is not online
6094=The gateway device does not exist
7108=Leak/No Leak
7109=Leak
7110=No leak
7111=Water leaking/no water leaking
7112=Water leaking
7113=No water leaking
7114=Someone/Nobody
7115=Someone
7116=Nobody
7117=Open/Close
7118=On
7119=Close
7120=Anti-dismantling function
7121=Online
7122=Not online
7123=Air quality
7124=Excellent
7125=Good
7126=Poor
7127=Send notification
7128=Notification content
7129=(within 100 characters)
7130=Account selection
7131=App push
7132=Automation
7133=Executed
6000=Rename
6001=Please enter a name
6002=Xiaodu
6003=aispeech
6004="Unbind requires a third-party APP for operation", "transfer to a third-party APP"
6005=Unbind
6006=Smart speaker
6007=Control content
6008=Failed to upload data
6009=Failed to configure data
6010="There is no speaker yet,", "Please go to the third-party APP to bind the smart speaker."
6011=Modification of remarks is unsuccessful!
6012=Do you want to unbind?
6013=Unbinding...
6014=transfer to third-party APP
6015=Add speakers
    
7000=Create automation
7001=Edit automation
@@ -1248,6 +1424,17 @@
459=实时能耗
460=本月能耗
461=室外/室内
462=您当前还未添加任何设备
463=请输入设备机上的sn码
464=可以开始使用兆观毫米波了
465=删除设备
466=机顶盒
467=投影仪
468=有人跌倒
469=有人进入
470=防护中
471=毫米波传感器
1000=室内湿度
1001=童锁
HDL-ON_Android/Assets/Phone/FunctionIcon/ArmSensor/SomeoneFellBgIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/ArmSensor/SomeoneInBgIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/ArmSensor/UnderProtectionBgIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconDown.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconLeft.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconOk.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconRight.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/TV/TVOkIconUp.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_blue.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_white.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/irtvxm.png
HDL-ON_Android/Assets/Phone/PersonalCenter/AddDevice/SenesorMegahealthBg.png
HDL-ON_Android/Assets/Phone/Public/Scan.png
HDL-ON_Android/HDL-ON_Android.csproj
@@ -33,7 +33,7 @@
    <DefineConstants>DEBUG;TRACE;__Android__</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
    <EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
    <MandroidI18n>cjk</MandroidI18n>
    <AndroidDexTool>d8</AndroidDexTool>
    <AndroidEnableSGenConcurrent>false</AndroidEnableSGenConcurrent>
@@ -1143,6 +1143,19 @@
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\irstb_white.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Energy\EnergyDrodUpIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\sensormegahealth.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\TV\TVOkIconDown.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\TV\TVOkIconLeft.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\TV\TVOkIconRight.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\TV\TVOkIconUp.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\TV\TVOkIconOk.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\irtvxm.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\irtvxm_blue.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\irtvxm_white.png" />
    <AndroidAsset Include="Assets\Phone\PersonalCenter\AddDevice\SenesorMegahealthBg.png" />
    <AndroidAsset Include="Assets\Phone\Public\Scan.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\SomeoneFellBgIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\SomeoneInBgIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\UnderProtectionBgIcon.png" />
  </ItemGroup>
  <ItemGroup>
    <AndroidNativeLibrary Include="libs\armeabi-v7a\libelianjni.so" />
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:versionCode="202105252" android:versionName="1.2.202105252" package="com.hdl.onpro">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202105255" android:versionName="1.2.202105255" package="com.hdl.onpro">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
    <!--  可视对讲权限-->
    <uses-permission android:name="android.permission.CAMERA" />
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -55,7 +55,7 @@
        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
        <MtouchEnableSGenConc>false</MtouchEnableSGenConc>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignProvision>On+Dev-20210519-1</CodesignProvision>
<CodesignProvision>On+Dev-20210604-1</CodesignProvision>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
        <DebugType>none</DebugType>
@@ -1246,6 +1246,19 @@
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\irstb.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Energy\EnergyDrodUpIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\sensormegahealth.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\TV\TVOkIconDown.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\TV\TVOkIconLeft.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\TV\TVOkIconRight.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\TV\TVOkIconUp.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\TV\TVOkIconOk.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\irtvxm.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\irtvxm_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\irtvxm_white.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\AddDevice\SenesorMegahealthBg.png" />
      <BundleResource Include="Resources\Phone\Public\Scan.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\SomeoneFellBgIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\SomeoneInBgIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\UnderProtectionBgIcon.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
HDL-ON_iOS/Info.plist
@@ -104,9 +104,9 @@
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleLightContent</string>
    <key>CFBundleShortVersionString</key>
    <string>1.2.202105252</string>
    <string>1.2.202105255</string>
    <key>CFBundleVersion</key>
    <string>1.2.05252</string>
    <string>1.2.05255</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Use geographic location to provide services such as weather</string>
    <key>NSAppleMusicUsageDescription</key>
HDL-ON_iOS/Resources/Language.ini
@@ -188,8 +188,8 @@
187=Fan
188=Socket
189=Level
190=Channel
191=Volume
190=Chl
191=Vol
192=TV
193=The room has existed, fail to change.
194=Environment
@@ -446,6 +446,18 @@
459=Real time energy consumption
460=Energy consumption of this month
461=Outdoor/Indoor
462=You haven't added any devices yet
'
463=Please input the SN code of the device
464=Can start using Zhaoguan millimeter wave
465=Delete device
466=STB
467=Projector
468=Someone fell
469=Someone's in
'
470=Under protection
471=Millimeter wave sensor
1000=Room Humidity
1001=V-chip
@@ -536,6 +548,30 @@
1085=2nd Gear
1086=3rd Gear
4000=Video intercom
4001=Call record
4002=*Cloud photos are only kept for 30 days
4003=Door phone call
4004=Answered
4005=Unlocked
4006=year
4007=From
4008=Call
4009=Unlocked
4010=Missed
4011=Rejected
4012=The configuration parameters are abnormal!
4013=Access Control QR Code
4014=Temporary password
5000=Music
5001=Group
5002=Setting
@@ -584,7 +620,147 @@
5045=General volume
5046=Adjust volume
5047="QQ music" has not installed in your cell phone, please proceed in App center.
6000=normal
6001=Device status
6002=pcs
6003=Current IR control device
6004=Remote controller has been added
6005=AC
6006=TV
6007=Fan
6008=Set-top box
6009=DVD
6010=Projector
6011=Custom
6012=IR control
6013=Device Management
6014=Add remote controller
6015=Online
6016=Offline
6017=Version number
6018=Please enter the name of the remote controller
6019=Reminder: After the remote controller is created, it can be found and used in Function-Electrical Category{\r\n}
6020=Recommended button
6021=Please enter the button name
6022=Next
6023=Power
6024=Volume+
6025=Volume-
6026=channel+
6027=Channel-
6028=up
6029=down
6030=Left
6031=right
6032=Mute
6034=Confirm
6035=Play
6037=Exit
6038=Menu
6039=Pause
6040=Back
6041=Stop
6042=Homepage
6043=Fast forward
6044=Rewind
6045=Timing
6046=Copy remote control function
6047=Aim at the center of the remote controller and press the same button
6048=Smart remote controller
6049=Add button
6050=*Long press for custom sorting
6051=Done
6052=Added successfully
6053=Can be classified-function-electrical operation and use
6054=Classification
6055=Remote controller name
6056=Region
6057=Continue to add
6058=Electrical
6059=Failed to add
6060=Retry
6061=Match the remote control
6062=Please click the button below
6063=Confirm whether the device is responding
6064=Control failed
6065=Control success
6066=Power on
6067=Mode cooling
6068=Wind speed stroke
6069=Temperature 26℃
6070=Delete device
6071=Modify name
6072=Confirm deletion
6073=Cancel
6074=The remote controller cannot exceed 10 pcs
6075=The area where the remote control belongs:
6076=Edit information
6077=Version upgrade
6078=System is under maintenance~Please try again later~
6079=Failed to get data
6080=This function is temporarily not supported
6081=Select IR brand
6082=Shaking
6083=Low speed
6084=Medium speed
6085=High speed
6086=Auto
6087=Temperature+
6088=Temperature-
6089=Air purifier
6090=Water heater
6091=Product that does not exist
6092=The device does not exist
6093=The device is not online
6094=The gateway device does not exist
7108=Leak/No Leak
7109=Leak
7110=No leak
7111=Water leaking/no water leaking
7112=Water leaking
7113=No water leaking
7114=Someone/Nobody
7115=Someone
7116=Nobody
7117=Open/Close
7118=On
7119=Close
7120=Anti-dismantling function
7121=Online
7122=Not online
7123=Air quality
7124=Excellent
7125=Good
7126=Poor
7127=Send notification
7128=Notification content
7129=(within 100 characters)
7130=Account selection
7131=App push
7132=Automation
7133=Executed
6000=Rename
6001=Please enter a name
6002=Xiaodu
6003=aispeech
6004="Unbind requires a third-party APP for operation", "transfer to a third-party APP"
6005=Unbind
6006=Smart speaker
6007=Control content
6008=Failed to upload data
6009=Failed to configure data
6010="There is no speaker yet,", "Please go to the third-party APP to bind the smart speaker."
6011=Modification of remarks is unsuccessful!
6012=Do you want to unbind?
6013=Unbinding...
6014=transfer to third-party APP
6015=Add speakers
    
7000=Create automation
7001=Edit automation
@@ -1248,6 +1424,17 @@
459=实时能耗
460=本月能耗
461=室外/室内
462=您当前还未添加任何设备
463=请输入设备机上的sn码
464=可以开始使用兆观毫米波了
465=删除设备
466=机顶盒
467=投影仪
468=有人跌倒
469=有人进入
470=防护中
471=毫米波传感器
1000=室内湿度
1001=童锁
HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmSensor/SomeoneFellBgIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmSensor/SomeoneInBgIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmSensor/UnderProtectionBgIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconDown.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconLeft.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconOk.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconRight.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/TV/TVOkIconUp.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_blue.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/irtvxm_white.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/irtvxm.png
HDL-ON_iOS/Resources/Phone/PersonalCenter/AddDevice/SenesorMegahealthBg.png
HDL-ON_iOS/Resources/Phone/Public/Scan.png
HDL_ON/Common/R.cs
@@ -4,6 +4,47 @@
{
    public static class StringId
    {
        /// <summary>
        /// 毫米波传感器
        /// </summary>
        public const int SenesorMillimeterWave = 471;
        /// <summary>
        /// 防护中
        /// </summary>
        public const int UnderProtection=470;
        /// <summary>
        /// 有人进入
        /// </summary>
        public const int SomeoneIn = 469;
        /// <summary>
        /// 有人跌倒
        /// </summary>
        public const int SomeoneFell = 468;
        /// <summary>
        /// 投影仪
        /// </summary>
        public const int PJT = 467;
        /// <summary>
        /// 机顶盒
        /// </summary>
        public const int STB = 466;
        /// <summary>
        /// 删除设备
        /// </summary>
        public const int DeleteDevice = 465;
        /// <summary>
        /// 可以开始使用河东毫米波了
        /// </summary>
        public const int CanStartUsingZhaoguanMillimeterWave = 464;
        /// <summary>
        /// 请输入sn码
        /// </summary>
        public const int PlsEntrySNCode = 463;
        /// <summary>
        /// 您当前还未添加任何设备
        /// </summary>
        public const int NotAddedAnyDevices = 462;
        /// <summary>
        /// 室内室外
        /// </summary>
HDL_ON/DAL/DriverLayer/Control.cs
@@ -477,47 +477,55 @@
        /// 发送读取命令
        /// 自动判断是否为A协议设备
        /// </summary>
        public void SendReadCommand(Function function)
        public void SendReadCommand(Function function ,bool forceRemote = false)
        {
            function.refreshTime = DateTime.Now;
            if (Ins.GatewayOnline_Local)
            if (forceRemote)
            {
                if (DB_ResidenceData.Instance.GatewayType == 0)
                var pm = new DAL.Server.HttpServerRequest();
                var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId });
            }
            else
            {
                if (Ins.GatewayOnline_Local)
                {
                    try
                    if (DB_ResidenceData.Instance.GatewayType == 0)
                    {
                        new Control_Udp().ReadBusData(function);
                        try
                        {
                            new Control_Udp().ReadBusData(function);
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"发送数据异常: {ex.Message}");
                        }
                    }
                    catch (Exception ex)
                    else
                    {
                        MainPage.Log($"发送数据异常: {ex.Message}");
                        var readKey = new Dictionary<string, string>();
                        readKey.Add("sid", function.sid);
                        var readDataObj = new AlinkReadFunctionStatusObj()
                        {
                            id = Ins.msg_id.ToString(),
                            objects = new List<Dictionary<string, string>>()
                        {
                            readKey
                        },
                            time_stamp = Utlis.GetTimestamp()
                        };
                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
                        var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                        MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}");
                        new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
                    }
                }
                else
                {
                    var readKey = new Dictionary<string, string>();
                    readKey.Add("sid", function.sid);
                    var readDataObj = new AlinkReadFunctionStatusObj()
                    {
                        id = Ins.msg_id.ToString(),
                        objects = new List<Dictionary<string, string>>()
                        {
                            readKey
                        },
                        time_stamp = Utlis.GetTimestamp()
                    };
                    var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
                    var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                    MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}");
                    new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
                    var pm = new DAL.Server.HttpServerRequest();
                    var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId });
                }
            }
            else
            {
                var pm = new DAL.Server.HttpServerRequest();
                var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId });
            }
        }
@@ -661,15 +669,6 @@
        /// <param name="updateBytes"></param>
        public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false)
        {
            if (Ins.GatewayOnline_Local && isCloudData)//本地链接,除了涂鸦设备数据之外的云端数据不处理
            {
                if (FunctionList.List.GetDeviceFunctionList(SPK.BrandType.Tuya).Count == 0)
                {
                    //MainPage.Log($"A协议更新状态:本地链接,除了涂鸦设备数据之外的云端数据不处理...");
                    return;
                }
            }
            var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString);
            if (temp != null)
            {
@@ -679,6 +678,22 @@
                {
                    try
                    {
                        if (Ins.GatewayOnline_Local && isCloudData)//本地链接,除了涂鸦设备数据之外的云端数据不处理
                        {
                            if (FunctionList.List.OtherBrandFunction.Count != 0)
                            {
                                if (FunctionList.List.OtherBrandFunction.Find((obj) => obj.sid == updateTemp.sid) == null)
                                {
                                    //MainPage.Log($"A协议更新状态:本地链接,除了涂鸦设备数据之外的云端数据不处理...");
                                    return;
                                }
                            }
                        }
                        var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
                        if (localFunction == null)
                        {
@@ -837,7 +852,9 @@
                            case SPK.SensorWater:
                            case SPK.ClothesHanger:
                            case SPK.AcIr:
                            case SPK.SenesorMegahealth:
                                //设备状态推送
                                //状态更新
                                Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
                                break;
                        }
HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1290,6 +1290,9 @@
                            MainPage.cityInfo.pm25 = jt.GetValue("Air_Quality").ToString();
                            MainPage.cityInfo.windLevel = jt.GetValue("WindLevel").ToString();
                            MainPage.cityInfo.weather = jt.GetValue("Weather").ToString();
                            MainPage.cityInfo.lowestTemperature = jt.GetValue("lowestTemperature").ToString();
                            MainPage.cityInfo.highestTemperature = jt.GetValue("highestTemperature").ToString();
                            break;
                        }
                        catch (Exception ex)
@@ -1817,7 +1820,10 @@
            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
            d.Add("productPlatform", productPlatform);
            d.Add("productBrand", productBrand);
            d.Add("networkConfig", true);
            if (productBrand != "MegaHealth")
            {
                d.Add("networkConfig", true);
            }
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetDevcieList, requestJson);
@@ -1836,10 +1842,28 @@
            d.Add("productBrand", productBrand);
            d.Add("networkConfig", true);
            
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Get3tyBrandDevcieList, requestJson);
        }
        /// <summary>
        /// 注册第三方设备
        /// </summary>
        /// <param name="productPlatform"></param>
        /// <param name="productBrand"></param>
        /// <returns></returns>
        public ResponsePackNew IndependentRegister3TyDevcie(string spk,string extDevId)
        {
            Dictionary<string, object> d = new Dictionary<string, object>();
            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
            d.Add("spk", spk);
            d.Add("extDevId", extDevId);
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_IndependentRegister3TyDevcie, requestJson);
        }
        /// <summary>
        /// 获取设备详情
HDL_ON/DAL/Server/NewAPI.cs
@@ -328,6 +328,10 @@
        /// </summary>
        public const string Api_Post_Get3tyBrandDevcieList = "/home-wisdom/app/product/list";
        /// <summary>
        /// 注册第三方设备
        /// </summary>
        public const string Api_Post_IndependentRegister3TyDevcie = "/home-wisdom/app/device/independentRegister";
        /// <summary>
        /// 获取设备详情
        /// </summary>
        public const string Api_Post_GetDevcieInfoList = "/home-wisdom/app/device/info";
HDL_ON/Entity/Function/Function.cs
@@ -777,6 +777,10 @@
        /// </summary>
        public const string Status = "status";
        /// <summary>
        /// 毫米波传感器,动作状态
        /// </summary>
        public const string ActionStatus = "action_state";
        /// <summary>
        /// 电量状态
        /// </summary>
        public const string BatteryState = "battery_state";
@@ -941,6 +945,8 @@
    public static class SPK
    {
        #region 灯光
        /// <summary>
@@ -1240,6 +1246,10 @@
        /// </summary>
        public const string TvIr = "ir.tv";
        /// <summary>
        /// 红外、小米电视
        /// </summary>
        public const string TvXmIr = "ir.tvxm";
        /// <summary>
        /// 家电、风扇
        /// </summary>
        public const string ElectricFan = "electrical.fan";
@@ -1306,6 +1316,7 @@
            spkList.Add(ElectricSocket);
            spkList.Add(ElectricTV);
            spkList.Add(TvIr);
            spkList.Add(TvXmIr);
            spkList.Add(ElectricFan);
            spkList.Add(ClothesHanger);
            spkList.Add(IrLearn);
@@ -1340,7 +1351,21 @@
        }
        #endregion
        #region 第三方spk列表
        /// <summary>
        /// 获取所有第三方品牌功能的spk
        /// </summary>
        /// <returns></returns>
        public static List<string> GetAll3tySPK()
        {
            var spkList = new List<string>();
            spkList.Add(ElectricTuyaAirCleaner);
            spkList.Add(ElectricTuyaFan);
            spkList.Add(ElectricTuyaWaterValve);
            spkList.Add(ElectricTuyaWeepRobot);
            spkList.Add(SenesorMegahealth);
            return spkList;
        }
        /// <summary>
        /// 获取第三方设备spk
        /// </summary>
@@ -1351,16 +1376,19 @@
            switch (brandType)
            {
                case BrandType.All3tyBrand:
                case BrandType.Tuya:
                    list.Add(ElectricTuyaAirCleaner);
                    list.Add(ElectricTuyaFan);
                    list.Add(ElectricTuyaWaterValve);
                    list.Add(ElectricTuyaWeepRobot);
                    break;
                case BrandType.All3tyBrand:
                    list.Add(SenesorMegahealth);//兆观
                    break;
            }
            return list;
        }
        #endregion
        /// <summary>
@@ -1371,6 +1399,10 @@
            All = 0,
            Hdl = 1,
            Tuya = 2,
            /// <summary>
            /// 兆观
            /// </summary>
            Megahealth = 3,
            All3tyBrand = 999,
HDL_ON/Entity/Function/Scene.cs
@@ -352,7 +352,14 @@
            {
                return Language.StringByID(StringId.NoDelay);
            }
            string text = (delayInt / 60)+Language.StringByID(StringId.m)+(delayInt % 60)+Language.StringByID(StringId.s);
            string text = "";
            if (delayInt > 60)
            {
                text = (delayInt / 60) + Language.StringByID(StringId.m) + (delayInt % 60) + Language.StringByID(StringId.s);
            }else
            {
                text = delayInt + Language.StringByID(StringId.s);
            }
            return text;
            switch (delay)
            {
HDL_ON/Entity/FunctionList.cs
@@ -143,6 +143,25 @@
        /// </summary>
        public UI.UI2.FuntionControlView.Video.VideoClouds videoIntercom;
        List<Function> _OtherBrandFunction;
        /// <summary>
        /// 第三方品牌功能
        /// </summary>
        public List<Function> OtherBrandFunction
        {
            get
            {
                if(_OtherBrandFunction == null)
                {
                    _OtherBrandFunction = new List<Function>();
                    var spkList = SPK.GetAll3tySPK();
                    _OtherBrandFunction = Functions.FindAll((obj) => spkList.Contains(obj.spk));
                }
                return _OtherBrandFunction;
            }
        }
        /// <summary>
        /// 场景列表
        /// </summary>
@@ -271,6 +290,9 @@
            return Functions;
        }
        /// <summary>
        /// 清空设备功能列表
        /// </summary>
HDL_ON/HDL_ON.projitems
@@ -359,11 +359,6 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlCloudReceiveLogic.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlWifiLogic.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\ProgressRowBar.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\AddMiniRemoteControlDirection3Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\AddMiniRemoteControlDirection1Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\AddMiniRemoteControlDirection2Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\AddMiniRemoteControlDirection4Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\AddThirdPartyDeviceMenuListPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\Matching.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\PirNameView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\BrandListPage.cs" />
@@ -409,6 +404,15 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Electrical\PjtPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Electrical\StbPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\PirMethod.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\SenesorMegahealth\AddSenesorMegahealthDirection1Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\MiniRemoteControl\AddMiniRemoteControlDirection1Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\MiniRemoteControl\AddMiniRemoteControlDirection2Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\MiniRemoteControl\AddMiniRemoteControlDirection3Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\MiniRemoteControl\AddMiniRemoteControlDirection4Page.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\MiniRemoteControl\AddThirdPartyDeviceMenuListPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\SenesorMegahealth\SenesorMegahealthManagerPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SenesorMegahealthPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Electrical\IrFanPage.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)DAL\" />
@@ -454,5 +458,7 @@
    <Folder Include="$(MSBuildThisFileDirectory)DAL\ThirdPartySdk\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SmartSpeaker\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\SenesorMegahealth\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\MiniRemoteControl\" />
  </ItemGroup>
</Project>
HDL_ON/UI/UI0-Public/OperationSuccessPromptPage.cs
@@ -11,6 +11,12 @@
    {
        Dialog dialog;
        FrameLayout bodyView;
        /// <summary>
        /// 回掉函数
        /// </summary>
        public Action rebackAction = null;
        public OperationResultDisPalyPage()
        {
            dialog = this;
@@ -24,7 +30,8 @@
        /// <param name="title">页面标题</param>
        /// <param name="tipTitle">提示标题</param>
        /// <param name="tipMsg">提示信息</param>
        public void LoadPage(bool result,string title,string tipTitle,string tipMsg)
        /// <param name="confirmText">按钮文本</param>
        public void LoadPage(bool result,string title,string tipTitle,string tipMsg,string confirmText = "")
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            dialog.AddChidren(bodyView);
@@ -77,8 +84,14 @@
                TextSize = CSS_FontSize.SubheadingFontSize,
            };
            bodyView.AddChidren(btnConfirm);
            if(confirmText != "")
            {
                btnConfirm.Text = confirmText;
            }
            btnConfirm.MouseUpEventHandler = (sender, e) => {
                this.Close();
                rebackAction?.Invoke();
            };
        }
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -76,6 +76,7 @@
                        break;
                    case SPK.ElectricTV:
                    case SPK.TvIr:
                    case SPK.TvXmIr:
                        var tvView = new TVPage(function);
                        MainPage.BasePageView.AddChidren(tvView);
                        tvView.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
@@ -142,6 +143,11 @@
                        doorwindowPage.ShowColltionButton = false;
                        doorwindowPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                    case SPK.SenesorMegahealth:
                        var smPage = new SenesorMegahealthPage();
                        smPage.ShowColltionButton = false;
                        smPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                    case SPK.ClothesHanger:
                        var clothesHangerpage = new ClothesHangerPage();
                        clothesHangerpage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
HDL_ON/UI/UI0-Public/Widget/EmptyTipView.cs
@@ -23,29 +23,33 @@
        /// <summary>
        /// 
        /// </summary>
        public EmptyTipView(string tipMsg ="")
        public EmptyTipView(string tipMsg ="",int btnTipNotY=0)
        {
            if(tipMsg == "")
            {
                tipMsg = Language.StringByID(StringId.ContentIsEmpty);
            }
            int tipHeight = Application.GetRealWidth(180);
            int tipHeight = Application.GetRealWidth(180 + btnTipNotY);
            this.Height = tipHeight + Application.GetRealHeight(17);
            this.Height = tipHeight + Application.GetRealHeight(17 );
            BtnTipNot = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = tipHeight,
                Height = tipHeight,
                Width = Application.GetRealWidth(180),
                Height = Application.GetRealWidth(180),
                UnSelectedImagePath = "TipNot.png",
            };
            this.AddChidren(BtnTipNot);
            if(btnTipNotY!=0)
            {
                BtnTipNot.Y = Application.GetRealHeight(btnTipNotY);
            }
            //空空如也
            Button btnTipNotText = new Button()
            {
                Y = tipHeight,
                Y = tipHeight ,
                Height = Application.GetRealHeight(17),
                Text = tipMsg,
                TextAlignment = TextAlignment.Center,
HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs
@@ -140,8 +140,7 @@
            btnRoomName.Text = device.GetRoomListName();
            btnRoomName.Width = btnRoomName.GetRealWidthByText();
            FrameWhiteCentet1.AddChidren(btnRoomName);
            //成员没有收藏功能
            //if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == false && ShowColltionButton)
            if (ShowColltionButton)
            {
                var btnCollection = new IconViewControl(40);
                btnCollection.X = Application.GetRealWidth(273);
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -946,10 +946,9 @@
                    LoadEvent_ControlCurtain(function, btnCurtainClose, btnCurtainOpen);
                }
                else if (function.spk == SPK.ElectricTV || function.spk == SPK.TvIr
                    ||function.spk == SPK.StbIr || function.spk == SPK.PjtIr)
                else if (function.spk == SPK.ElectricTV || function.spk == SPK.TvIr || function.spk == SPK.TvXmIr
                    || function.spk == SPK.StbIr || function.spk == SPK.PjtIr)
                {
                    //btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                    //btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -27,45 +27,51 @@
        /// </summary>
        public static void LoadEvent_RefreshEnvirIndoorHumi()
        {
            if (bodyView != null)
            Application.RunOnMainThread(() =>
            {
                var humiSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorHumidity);
                double humiTotalValues = 0;
                foreach (var temp in humiSensorList)
                if (bodyView != null)
                {
                    double humiValue = 0;
                    double.TryParse(temp.GetAttrState(FunctionAttributeKey.Value), out humiValue);
                    humiTotalValues += humiValue;
                    var humiSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorHumidity);
                    double humiTotalValues = 0;
                    foreach (var temp in humiSensorList)
                    {
                        double humiValue = 0;
                        double.TryParse(temp.GetAttrState(FunctionAttributeKey.Value), out humiValue);
                        humiTotalValues += humiValue;
                    }
                    if (humiTotalValues > 0)
                    {
                        bodyView.btnIndoorHumiValues.Text = "/" + humiTotalValues + "%";
                    }
                    bodyView.btnIndoorHumiValues.Width = bodyView.btnIndoorHumiValues.GetTextWidth();
                }
                if (humiTotalValues > 0)
                {
                    bodyView.btnIndoorHumiValues.Text = "/" + humiTotalValues + "%";
                }
                bodyView.btnIndoorHumiValues.Width = bodyView.btnIndoorHumiValues.GetTextWidth();
            }
            });
        }
        /// <summary>
        /// 更新室内传感器数据-晚点
        /// </summary>
        public static void LoadEvent_RefreshEnvirIndoorTemp()
        {
            if (bodyView != null)
        {
            Application.RunOnMainThread(() =>
            {
                var tempSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorTemperature);
                double tempTotalValues = 0;
                foreach (var temp in tempSensorList)
                if (bodyView != null)
                {
                    double tempValue = 0;
                    double.TryParse(temp.GetAttrState(FunctionAttributeKey.Value), out tempValue);
                    tempTotalValues += tempValue;
                    var tempSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorTemperature);
                    double tempTotalValues = 0;
                    foreach (var temp in tempSensorList)
                    {
                        double tempValue = 0;
                        double.TryParse(temp.GetAttrState(FunctionAttributeKey.Value), out tempValue);
                        tempTotalValues += tempValue;
                    }
                    if (tempTotalValues > 0)
                    {
                        bodyView.btnIndoorTempValues.Text = "/" + tempTotalValues + "°";
                    }
                    bodyView.btnIndoorTempValues.Width = bodyView.btnIndoorTempValues.GetTextWidth();
                }
                if (tempTotalValues > 0)
                {
                    bodyView.btnIndoorTempValues.Text = "/" + tempTotalValues + "°";
                }
                bodyView.btnIndoorTempValues.Width = bodyView.btnIndoorTempValues.GetTextWidth();
            }
            });
        }
        /// <summary>
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -562,11 +562,12 @@
                {
                    X = Application.GetRealWidth(16),
                    Y = Application.GetRealHeight(14),
                    Width = Application.GetRealWidth(120),
                    Width = Application.GetRealWidth(140),
                    Height = Application.GetRealHeight(24),
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.CenterLeft,
                    IsMoreLines = true,
                };
                functionView.AddChidren(btnName);
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -81,7 +81,7 @@
            {
                btnSwitch.IsSelected = !btnSwitch.IsSelected;
                if(function.spk == SPK.IrLearn || function.spk == SPK.TvIr)
                if(function.spk == SPK.IrLearn || function.spk == SPK.TvIr || function.spk == SPK.TvXmIr)
                {
                    new System.Threading.Thread(() => {
                        System.Threading.Thread.Sleep(2000);
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection1Page.cs
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection2Page.cs
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection3Page.cs
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddMiniRemoteControlDirection4Page.cs
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/MiniRemoteControl/AddThirdPartyDeviceMenuListPage.cs
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/AddSenesorMegahealthDirection1Page.cs
New file
@@ -0,0 +1,165 @@
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using HDL_ON.Stan;
using Shared;
using System;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI
{
    /// <summary>
    /// 添加毫米波步骤1界面
    /// </summary>
    public class AddSenesorMegahealthDirection1Page : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 添加设备完成之后的回调事件
        /// </summary>
        public Action<Function> AddDeviceEvent = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        public void ShowForm(IntegratedBrandDevice device)
        {
            if (Language.CurrentLanguage == "Chinese")
            {
                //设置头部信息
                base.SetTitleText(Language.StringByID(StringId.Add) + device.productName);
            }
            else
            {
                base.SetTitleText(Language.StringByID(StringId.Add) + " " + device.productName);
            }
            //这个界面的背景需要白色
            bodyFrameLayout.BackgroundColor = UI.CSS.CSS_Color.MainBackgroundColor;
            //初始化中部信息
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        private void InitMiddleFrame()
        {
            //图片
            var btnPic = new PicViewControl(132, 132);
            btnPic.Y = Application.GetRealHeight(69);
            btnPic.Gravity = Gravity.CenterHorizontal;
            btnPic.UnSelectedImagePath = "PersonalCenter/AddDevice/SenesorMegahealthBg.png";
            bodyFrameLayout.AddChidren(btnPic);
            //请输入设备机上的sn码
            var textView = new FrameLayout()
            {
                Y = Application.GetRealHeight(309-64),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(44),
            };
            bodyFrameLayout.AddChidren(textView);
            textView.AddChidren(new Button() { Y = Application.GetRealHeight(43), Height = 1, BackgroundColor = CSS.CSS_Color.DividingLineColor });
            EditText editText = new EditText()
            {
                TextAlignment = TextAlignment.Center,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                PlaceholderText = Language.StringByID(StringId.PlsEntrySNCode),
                PlaceholderTextColor = CSS.CSS_Color.PromptingColor1,
                TextSize = CSS.CSS_FontSize.TextFontSize,
            };
            textView.AddChidren(editText);
            Button btnScan = new Button()
            {
                Width = Application.GetRealWidth(32),
                Height = Application.GetRealWidth(32),
                Gravity = Gravity.CenterVertical,
                X = Application.GetRealWidth(275),
                UnSelectedImagePath = "Public/Scan.png"
            };
            textView.AddChidren(btnScan);
            btnScan.MouseUpEventHandler = (sender, e) =>
            {
                Scan.OpenScan((scanString) =>
                {
                    editText.Text = scanString;
                });
            };
            //下一步
            var btnNext = this.AddBottomClickButton(Language.StringByID(StringId.Next));
            btnNext.ButtonClickEvent += (sender, e) =>
            {
                var snCode = editText.Text.Trim();
                if(string.IsNullOrEmpty(snCode))
                {
                    editText.PlaceholderTextColor = CSS.CSS_Color.WarningColor;
                }
                else
                {
                    var waitPage = new Loading();
                    waitPage.Start();
                    new System.Threading.Thread(() => {
                        try
                        {
                            var pm = new HttpServerRequest();
                            var pack = pm.IndependentRegister3TyDevcie(SPK.SenesorMegahealth, snCode);
                            if (pack.Code == StateCode.SUCCESS)
                            {
                                var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<IntegratedBrandDevice>>(pack.Data.ToString());
                                Application.RunOnMainThread(() =>
                                {
                                    waitPage.Hide();
                                    var tipDialog = new OperationResultDisPalyPage();
                                    tipDialog.LoadPage(true, Language.StringByID(StringId.AddSuccess), "", Language.StringByID(StringId.CanStartUsingZhaoguanMillimeterWave), Language.StringByID(StringId.Next));
                                    tipDialog.Show();
                                    this.CloseForm();
                                });
                            }
                            else
                            {
                                IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
                            }
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log("2--::" + ex.Message);
                        }
                        finally
                        {
                            Application.RunOnMainThread(() => { waitPage.Hide(); });
                        }
                    })
                    { IsBackground = true }.Start();
                }
            };
        }
        #endregion
        #region ■ 关闭界面___________________________
        /// <summary>
        /// 关闭界面
        /// </summary>
        public override void CloseFormBefore()
        {
            this.AddDeviceEvent = null;
            base.CloseFormBefore();
        }
        #endregion
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/SenesorMegahealth/SenesorMegahealthManagerPage.cs
New file
@@ -0,0 +1,117 @@
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using HDL_ON.Stan;
using HDL_ON.UI.UI2.PersonalCenter.PirDevice;
using Shared;
using System;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI
{
    /// <summary>
    /// 添加毫米波步骤1界面
    /// </summary>
    public class SenesorMegahealthManagerPage : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 添加设备完成之后的回调事件
        /// </summary>
        public Action DelDeviceEvent = null;
        Function function = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        public void ShowForm(Function device)
        {
            function = device;
            //设置头部信息
            base.SetTitleText(Language.StringByID(StringId.Add) + device.name);
            //这个界面的背景需要白色
            bodyFrameLayout.BackgroundColor = CSS.CSS_Color.BackgroundColor;
            //初始化中部信息
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        private void InitMiddleFrame()
        {
            //图片
            var btnPic = new PicViewControl(132, 132);
            btnPic.Y = Application.GetRealHeight(69);
            btnPic.Gravity = Gravity.CenterHorizontal;
            btnPic.UnSelectedImagePath = "PersonalCenter/AddDevice/SenesorMegahealthBg.png";
            bodyFrameLayout.AddChidren(btnPic);
            var btnTip = new Button()
            {
                Y = Application.GetRealHeight(309 - 44),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(319),
                Height = Application.GetRealHeight(84),
                IsMoreLines = true,
                TextAlignment = TextAlignment.Center,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                TextSize = CSS.CSS_FontSize.SubheadingFontSize,
            };
            bodyFrameLayout.AddChidren(btnTip);
            if (Language.CurrentLanguage == "Chinese")
            {
                btnTip.Text = "该设备已物拟到安防传感器类别可到对应类别查看使用";
            }
            else
            {
                btnTip.Text = "The device is planned to be used in the corresponding category for security sensor.";
            }
            var btnDel = new Button() {
                Y= Application.GetRealHeight(617-64),
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS.CSS_Color.WarningColor,
                TextSize = CSS.CSS_FontSize.SubheadingFontSize,
                TextID = StringId.DeleteDevice,
                BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
            };
            bodyFrameLayout.AddChidren(btnDel);
            btnDel.MouseUpEventHandler = (sender, e) => {
                var pack = PirSend.DeleteDevice(function.deviceId);
                if(pack.Code == StateCode.SUCCESS)
                {
                    DelDeviceEvent?.Invoke();
                    this.CloseForm();
                }else
                {
                    IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
                }
            };
        }
        #endregion
        #region ■ 关闭界面___________________________
        /// <summary>
        /// 关闭界面
        /// </summary>
        public override void CloseFormBefore()
        {
            this.DelDeviceEvent = null;
            base.CloseFormBefore();
        }
        #endregion
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
@@ -49,10 +49,9 @@
            new System.Threading.Thread(() => {
                try
                {
                    var pm = new DAL.Server.HttpServerRequest();
                    //var result = pm.Get3tyBindBrandList
                    var pm = new HttpServerRequest();
                    var pack = pm.Get3TyBrandDeviceList(brand.productPlatform, brand.productBrand);
                    if (pack.Code == DAL.Server.StateCode.SUCCESS)
                    if (pack.Code == StateCode.SUCCESS)
                    {
                        var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<IntegratedBrandDevice>>(pack.Data.ToString());
                        Application.RunOnMainThread(() =>
@@ -147,6 +146,13 @@
                                refreshView.BeginHeaderRefreshing();
                            }; 
                            break;
                        case SPK.SenesorMegahealth:
                            var form1 = new AddSenesorMegahealthDirection1Page();
                            form1.AddForm(device);
                            form1.AddDeviceEvent = (functionObj) => {
                                refreshView.BeginHeaderRefreshing();
                            };
                            break;
                    }
                };
            }
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
@@ -62,9 +62,22 @@
                    if (pack.Code == DAL.Server.StateCode.SUCCESS)
                    {
                        var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<Function3tyBrandObj>(pack.Data.ToString());
                        Application.RunOnMainThread(() =>
                        {
                            LoadRow(revData.list);
                            contentView.RemoveAll();
                            if (revData.list.Count > 0)
                            {
                                LoadRow(revData.list);
                            }
                            else
                            {
                                var tipView = new EmptyTipView(Language.StringByID(StringId.NotAddedAnyDevices),160)
                                {
                                    Gravity = Gravity.CenterHorizontal,
                                };
                                contentView.AddChidren(tipView);
                            }
                        });
                    }
                    else
@@ -86,7 +99,6 @@
        void LoadRow(List<Function> deviceList)
        {
            contentView.RemoveAll();
            bool isFrist = true;
            foreach (var device in deviceList)
            {
@@ -154,6 +166,14 @@
                        case SPK.IrModule:
                            new UI2.PersonalCenter.PirDevice.PirMethod().MainView(this, device,()=> {});
                            break;
                        case SPK.SenesorMegahealth:
                            var smPage = new SenesorMegahealthManagerPage();
                            smPage.AddForm(device);
                            smPage.DelDeviceEvent = () =>
                            {
                                contentView.BeginHeaderRefreshing();
                            };
                            break;
                    }
                };
            }
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Matching.cs
@@ -215,6 +215,22 @@
                {
                    var library = libraryList[index-1];
                    var control = GetControl(spk, testBtn.TextID, library);
                    if (spk == SPK.TvIr)
                    {
                        //备注:伟南要求小米电视换掉spk=ir.tvxm(听说是临时解决方案)
                        var brand = brandList.Find((c) => c.id == library.brandId);
                        if (brand != null)
                        {
                            if (brand.brandName.Contains("小米") || brand.brandName.Contains("Xiaomi"))
                            {
                                //更换spk
                                control.spk = "ir.tvxm";
                            }
                        }
                    }
                    PirMethod method = new PirMethod();
                    //发送库添加遥控器命令
                    method.ThreadAddControl(control, this, (device) =>  
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs
New file
@@ -0,0 +1,183 @@
using Shared;
using HDL_ON.Stan;
using HDL_ON.UI.CSS;
using HDL_ON.Entity;
using System.Collections.Generic;
using System;
namespace HDL_ON.UI
{
    public class SenesorMegahealthPage : DeviceFunctionCardCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 图标
        /// </summary>
        private IconViewControl btnIcon = null;
        /// <summary>
        /// 文本控件
        /// </summary>
        private NormalViewControl btnSuctionView = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 初始化白色区域的内容
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.SetTitleText(Language.StringByID(StringId.SenesorMillimeterWave));
            //添加第二索引页
            this.AddSecondPage();
            //初始化第一个索引页的内容
            this.InitFrameWhiteContent1();
            //初始化第二个索引页的内容
            this.InitFrameWhiteContent2();
            //刷新当前设备的状态缓存
            this.RefreshNowDeviceStatuMemory(this.device);
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                if (device.spk == SPK.SenesorMegahealth)
                {
                    DriverLayer.Control.Ins.SendReadCommand(device, true);
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 初始化第一个索引页的内容
        /// </summary>
        private void InitFrameWhiteContent1()
        {
            btnIcon = new IconViewControl(198)
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealWidth(146),
                UnSelectedImagePath = "FunctionIcon/ArmSensor/UnderProtectionBgIcon.png",
            };
            FrameWhiteCentet1.AddChidren(btnIcon);
            btnSuctionView = new NormalViewControl(300, 84, true)
            {
                Gravity = Gravity.CenterHorizontal,
                Y = btnIcon.Bottom,
                TextAlignment = TextAlignment.Center,
                TextSize = CSS_FontSize.TextFontSize,
                TextColor = CSS_Color.TextualColor,
                SelectedTextColor = CSS_Color.MainColor,
            };
            FrameWhiteCentet1.AddChidren(btnSuctionView);
        }
        /// <summary>
        /// 初始化第二个索引页的内容
        /// </summary>
        private void InitFrameWhiteContent2()
        {
            var paging = new ArmSensorHistroyPaging(device);
            paging.InitFrame(FrameWhiteCentet2);
        }
        #endregion
        #region ■ 设备状态反馈_______________________
        /// <summary>
        /// 设备状态反馈
        /// </summary>
        /// <param name="i_LocalDevice"></param>
        public override void DeviceStatuPush(Function i_LocalDevice)
        {
            //不是同一个东西
            if (this.device.sid != i_LocalDevice.sid) { return; }
            //刷新当前设备的状态缓存
            this.RefreshNowDeviceStatuMemory(i_LocalDevice);
            //刷新界面状态
            this.RefreshFormStatu();
        }
        #endregion
        #region ■ 发送各种命令_______________________
        #endregion
        #region ■ 刷新界面状态_______________________
        /// <summary>
        /// 刷新界面状态
        /// </summary>
        private void RefreshFormStatu()
        {
            Application.RunOnMainThread(() => {
                var temp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.ActionStatus);
                if (temp != null)
                {
                    if (temp.state == "fall")   //跌倒
                    {
                        btnIcon.UnSelectedImagePath = "FunctionIcon/ArmSensor/SomeoneFellBgIcon.png";
                        btnSuctionView.TextID = StringId.SomeoneFell;
                        btnSuctionView.IsSelected = true;
                    }
                    else if (temp.state == "uninhabited")//无人
                    {
                        btnIcon.UnSelectedImagePath = "FunctionIcon/ArmSensor/UnderProtectionBgIcon.png";
                        btnSuctionView.TextID = StringId.UnderProtection;
                        btnSuctionView.IsSelected = false;
                    }
                    else//有人
                    {
                        btnIcon.UnSelectedImagePath = "FunctionIcon/ArmSensor/SomeoneInBgIcon.png";
                        btnSuctionView.TextID = StringId.SomeoneIn;
                        btnSuctionView.IsSelected = true;
                    }
                }
            });
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 刷新当前设备的状态缓存
        /// </summary>
        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
        {
            //foreach (var data in i_LocalDevice.status)
            //{
            //    if (data.key == FunctionAttributeKey.Status)
            //    {
            //        Application.RunOnMainThread(() =>
            //        {
            //            if (data.value.ToLower() == "open")
            //            {
            //                this.btnIcon.IsSelected = true;
            //                this.btnSuctionView.IsSelected = true;
            //                this.btnSuctionView.TextID = StringId.Open;
            //            }
            //            else
            //            {
            //                this.btnIcon.IsSelected = false;
            //                this.btnSuctionView.IsSelected = false;
            //                this.btnSuctionView.TextID = StringId.Close;
            //            }
            //        });
            //    }
            //}
        }
        #endregion
    }
}
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs
@@ -29,7 +29,7 @@
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.SetTitleText(device.name);
            base.SetTitleText(Language.StringByID(StringId.Sensor));
            //添加第二索引页
            this.AddSecondPage();
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorPirPage.cs
@@ -28,7 +28,7 @@
        public override void InitFrameWhiteContent()
        {
            base.ShowColltionButton = false;
            base.SetTitleText(device.name);
            base.SetTitleText(Language.StringByID(StringId.Sensor));
            //添加第二索引页
            this.AddSecondPage();
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs
@@ -27,7 +27,7 @@
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.SetTitleText(device.name);
            base.SetTitleText(Language.StringByID(StringId.Sensor));
            //添加第二索引页
            this.AddSecondPage();
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs
@@ -27,7 +27,7 @@
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.SetTitleText(device.name);
            base.SetTitleText(Language.StringByID(StringId.Sensor));
            //添加第二索引页
            this.AddSecondPage();
HDL_ON/UI/UI2/FuntionControlView/Electrical/IrFanPage.cs
New file
@@ -0,0 +1,10 @@
using System;
namespace HDL_ON.UI.UI2.FuntionControlView.Electrical
{
    public class IrFanPage
    {
        public IrFanPage()
        {
        }
    }
}
HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs
@@ -322,7 +322,7 @@
            #endregion
            new TopViewDiv(bodyView, Language.StringByID(StringId.TV)).LoadTopView_FunctionTop(device, actionRefresh);
            new TopViewDiv(bodyView, Language.StringByID(StringId.PJT)).LoadTopView_FunctionTop(device, actionRefresh);
            DriverLayer.Control.Ins.SendReadCommand(device);
            LoadEventList();
@@ -546,7 +546,7 @@
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("ch+", "");
                    d.Add("zoom+", "");
                    Control.Ins.SendWriteCommand(device, d);
                }
            };
@@ -555,7 +555,7 @@
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("ch-", "");
                    d.Add("zoom-", "");
                    Control.Ins.SendWriteCommand(device, d);
                }
            };
@@ -586,16 +586,6 @@
                    Control.Ins.SendWriteCommand(device, d);
                }
            };
            btnMenu.MouseUpEventHandler = (sender, e) =>
            {
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("menu", "");
                    Control.Ins.SendWriteCommand(device, d);
                }
            };
            btnPower.MouseUpEventHandler = (sender, e) =>
            {
                if (DB_ResidenceData.Instance.GatewayType == 1)
@@ -606,7 +596,34 @@
                }
            };
            btnTopMenuUp.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconUp.png";
            };
            btnTopMenuDown.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconDown.png";
            };
            btnTopMenuLeft.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconLeft.png";
            };
            btnTopMenuRight.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconRight.png";
            };
            btnOk.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconOk.png";
            };
            btnMenu.MouseUpEventHandler = (sender, e) =>
            {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("menu", "");
                    Control.Ins.SendWriteCommand(device, d);
                }
            };
            btnTopMenuUp.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -615,6 +632,7 @@
                }
            };
            btnTopMenuLeft.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -623,6 +641,7 @@
                }
            };
            btnTopMenuRight.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -631,6 +650,7 @@
                }
            };
            btnTopMenuDown.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -639,6 +659,7 @@
                }
            };
            btnOk.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs
@@ -337,7 +337,7 @@
            LoadEventList();
            new TopViewDiv(bodyView, Language.StringByID(StringId.TV)).LoadTopView_FunctionTop(function, actionRefresh);
            new TopViewDiv(bodyView, Language.StringByID(StringId.STB)).LoadTopView_FunctionTop(function, actionRefresh);
            DriverLayer.Control.Ins.SendReadCommand(function);
        }
@@ -558,7 +558,34 @@
                }
            };
            btnTopMenuUp.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconUp.png";
            };
            btnTopMenuDown.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconDown.png";
            };
            btnTopMenuLeft.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconLeft.png";
            };
            btnTopMenuRight.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconRight.png";
            };
            btnOk.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconOk.png";
            };
            btnMenu.MouseUpEventHandler = (sender, e) =>
            {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("menu", "");
                    Control.Ins.SendWriteCommand(function, d);
                }
            };
            btnTopMenuUp.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -567,6 +594,7 @@
                }
            };
            btnTopMenuLeft.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -575,6 +603,7 @@
                }
            };
            btnTopMenuRight.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -583,6 +612,7 @@
                }
            };
            btnTopMenuDown.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -591,6 +621,7 @@
                }
            };
            btnOk.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -598,6 +629,8 @@
                    Control.Ins.SendWriteCommand(function, d);
                }
            };
        }
    }
HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs
@@ -163,7 +163,24 @@
                }
            };
            btnTopMenuUp.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconUp.png";
            };
            btnTopMenuDown.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconDown.png";
            };
            btnTopMenuLeft.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconLeft.png";
            };
            btnTopMenuRight.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconRight.png";
            };
            btnOk.MouseDownEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconOk.png";
            };
            btnTopMenuUp.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -176,6 +193,7 @@
                }
            };
            btnTopMenuLeft.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -188,6 +206,7 @@
                }
            };
            btnTopMenuRight.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -200,6 +219,7 @@
                }
            };
            btnTopMenuDown.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
@@ -212,6 +232,7 @@
                }
            };
            btnOk.MouseUpEventHandler = (sender, e) => {
                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                if (DB_ResidenceData.Instance.GatewayType == 1)
                {
                    Dictionary<string, string> d = new Dictionary<string, string>();
HDL_ON/UI/UI2/FuntionControlView/Energy/EnergyMainPage.cs
@@ -386,13 +386,15 @@
                brokenLine.YvalueText = "";
                foreach (var ene in queryList)
                {
                    brokenLine.YvalueText += ene.GetAttrState("ydata") + ",";
                    brokenLine.YvalueText += ene.GetAttrState("ydata");
                }
                var opString = brokenLine.InitOption();
                Application.RunOnMainThread(() =>
                {
                    myEchartsView.ShowWithOption(brokenLine.InitOption());
                    myEchartsView.ShowWithOption(opString);
                });
                return;
            }
@@ -427,21 +429,17 @@
                                    vs.Add(data.fieldName);
                                }
                                brokenLine.InitXdataText(vs);
                                if (sr.GetAttribute("ydata") == null)
                                {
                                    sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
                                }
                                sr.SetAttrState("ydata", brokenLine.InitYdataText(sr.name, revertData, sr.GetAttrState("color")) + ",");
                            }
                            else
                            if (sr.GetAttribute("ydata") == null)
                            {
                                if (sr.GetAttribute("ydata") == null)
                                {
                                    sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
                                }
                                sr.SetAttrState("ydata", brokenLine.InitYdataText(sr.name, revertData, sr.GetAttrState("color"))+",");
                                sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
                            }
                            sr.SetAttrState("ydata", brokenLine.InitYdataText(sr.name, revertData, sr.GetAttrState("color")) + ",");
                            //if (sr.GetAttribute("ydata") == null)
                            //{
                            //    sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
                            //}
                            //sr.SetAttrState("ydata", brokenLine.InitYdataText(sr.name, revertData, sr.GetAttrState("color")) + ",");
                        }
                    }
                    brokenLine.yTitle = Language.StringByID(StringId.EnergyConsumption) + "(kW)";
HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs
@@ -38,6 +38,7 @@
            newstring = newstring.Replace("{1}", YvalueText);
            newstring = newstring.Replace("{10}", xTitle);
            newstring = newstring.Replace("{20}", yTitle);
            newstring = newstring.Replace(",,",",");
            return newstring;
        }