From da1a17600b9ca8c8980ba64447688ee0a6718756 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期一, 13 六月 2022 11:56:21 +0800
Subject: [PATCH] Merge branch 'Dev-Branch' into wxr0114

---
 HDL_ON/UI/UI2/FuntionControlView/Music/View/MyListView.cs                  |    2 
 HDL-ON_Android/Properties/AndroidManifest.xml                              |    2 
 HDL-ON_Android/Assets/Language.ini                                         | 1202 +++++++++++
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacControlPage.cs            |  663 ++++++
 HDL-ON_iOS/HDL-ON_iOS.csproj                                               |   27 
 HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs          |   43 
 HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs                  |    2 
 HDL_ON/Common/ApiUtlis.cs                                                  |    5 
 HDL-ON_iOS/Resources/Phone/MusicIcon/order.png                             |    0 
 HDL_ON/DAL/Mqtt/MqttClient.cs                                              |   36 
 HDL_ON/Entity/Function/FloorHeating.cs                                     |   20 
 HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs                       |    2 
 HDL-ON_Android/HDL-ON_Android.csproj                                       |   31 
 HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs                    |   21 
 HDL-ON_iOS/Info.plist                                                      |    4 
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs                     | 1756 ++++++++--------
 HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs                 |  179 +
 HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs                   |   50 
 HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs                 |   87 
 HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs                              |   12 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs                        |    2 
 HDL_ON/DAL/DriverLayer/Control_Udp.cs                                      |    1 
 HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs                         |  109 
 HDL_ON/Entity/Function/Function.cs                                         |  145 +
 HDL-ON_iOS/Resources/Phone/MusicIcon/single_cycle.png                      |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs                            |    1 
 HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs                      |   34 
 HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIconGray.png |    0 
 HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs                        |    6 
 HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs             |   51 
 HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs                    |   59 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMethod.cs                      |    2 
 HDL-ON_Android/Assets/Phone/MusicIcon/single.png                           |    0 
 HDL-ON_iOS/Resources/Language.ini                                          | 1201 +++++++++++
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/SwitchView.cs            |   23 
 HDL-ON_Android/Assets/Phone/MusicIcon/order.png                            |    0 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs             |  162 +
 HDL_ON/DAL/DriverLayer/Packet.cs                                           |    1 
 HDL_ON/DAL/DriverLayer/Control.cs                                          |    6 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs             |   14 
 HDL_ON/UI/UI2/FuntionControlView/Music/A31MusicModel.cs                    |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIcon.png     |    0 
 HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs                     |    3 
 HDL-ON_iOS/Resources/Phone/MusicIcon/single.png                            |    0 
 HDL-ON_Android/Assets/Phone/MusicIcon/single_cycle.png                     |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs             |    2 
 HDL_ON/DAL/Server/NewAPI.cs                                                |    2 
 HDL_ON/Common/R.cs                                                         |   76 
 HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs        |   84 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs                        |    1 
 50 files changed, 4,947 insertions(+), 1,184 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index a48482d..2e71213 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -518,6 +518,17 @@
 530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
 531=Password free unlocking within five minutes
 532=The device is offline and cannot be operated temporarily
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=In Alarm
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=Room Humidity
@@ -727,7 +738,7 @@
 5015=Bluetooth
 5016=Line input
 5017=Revise the name
-5018=Single
+5018=Single loop
 5019=Random play
 5020=List
 5021=Has shifted to
@@ -757,6 +768,9 @@
 5045=General volume
 5046=Adjust volume
 5047="QQ music" has not installed in your cell phone, please proceed in App center.
+5048= Progressive cycle
+5049=Single play
+
  
 6000=normal
 6001=Device status
@@ -1030,6 +1044,13 @@
 7152=Leave or arrive at a place
 7153=Leave
 7154=Arrive
+7155=Distress/Normal
+7156=Distress
+7157=whether to unlock
+7158=is
+
+
+
 
 
 
@@ -1659,8 +1680,18 @@
 530=涓洪槻姝㈠紑鍏抽棬鐨勮瑙︾偣鍑伙紝淇濊瘉瀹跺涵瀹夊叏锛岃杈撳叆鎮ㄧ殑闂ㄩ攣寮�闂ㄥ瘑鐮併��
 531=浜斿垎閽熷唴鍏嶅瘑鐮佸紑閿�
 532=璁惧绂荤嚎涓紝鏆傛椂鏃犳硶鎿嶄綔
-533=璁垮绠$悊
-
+533=24灏忔椂缁熻鍥�
+534=鏁版嵁
+535=闇茬偣娓╁害
+536=娓╁害缁熻鍥�
+537=婀垮害缁熻鍥�
+538=鍗曚綅
+539=鏅鸿兘闈㈡澘
+540=鎶ヨ涓�
+541=鐩戞帶涓�
+542=寰樺緤鎶ヨ
+543=鑾峰彇鏇村
+ 
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
 1002=璐熺瀛�
@@ -1870,7 +1901,7 @@
 5015=钃濈墮
 5016=绾胯矾杈撳叆
 5017=淇敼鍚嶇О
-5018=鍗曟洸鎾斁
+5018=鍗曟洸寰幆鎾斁
 5019=闅忔満鎾斁
 5020=鍒楄〃鎾斁
 5021=宸插垏鎹㈠埌
@@ -1900,6 +1931,8 @@
 5045=鎬婚煶閲�
 5046=璋冭妭闊抽噺
 5047=浣犳墜鏈烘殏鏈畨瑁�"QQ闊充箰"{\r\n}璇峰墠寰�鎵嬫満鍟嗗満瀹夎
+5048=寰簭寰幆
+5049=鍗曟洸鎾斁
  
  
 6000=姝e父
@@ -2154,7 +2187,10 @@
 7152=绂诲紑鎴栧埌杈炬煇鍦�
 7153=绂诲紑
 7154=鍒拌揪
-
+7155=姹傛晳/姝e父
+7156=姹傛晳
+7157=鏄惁寮�閿佹椂
+7158=鏄�
 
 
  
@@ -2782,7 +2818,17 @@
 530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
 531=Password free unlocking within five minutes
 532=The device is offline and cannot be operated temporarily
-
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=袧芯褉屑邪谢褜薪褘泄
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=袙谢邪卸薪芯褋褌褜 胁 袩芯屑械褖械薪懈懈
@@ -3404,3 +3450,1147 @@
 10031=校褋褌褉芯泄褋褌胁芯 薪械 写芯谢卸薪芯 斜褘褌褜 锌褍褋褌褘屑.
 10032=校 锌芯谢褜蟹芯胁邪褌械谢褟 薪械褌 褉邪蟹褉械褕械薪懈褟.
 10033=校褋褌褉芯泄褋褌胁芯 薪械 褋褍褖械褋褌胁褍械褌.
+
+
+
+[Spanish]
+1=Ingresar
+2=N煤mero de tel茅fono
+3=Luz
+4=Correo
+5=Por favor ingrese numero de cuenta 
+6=Contrase帽a
+7=Olvidar
+8=Registrarse
+9=Iniciar sesi贸n
+10=Espere鈥�
+11=Cerrar
+12=C贸digo de verificaci贸n
+13=Contrase帽a de acceso
+14=Registrarse
+15=N煤mero de tel茅fono
+16=Ingrese la contrase帽a
+17=Ingrese la contrase帽a nuevamente
+18=C贸digo de verificaci贸n
+19=N煤mero de tel茅fono incorrecto, ingrese nuevamente
+20=L a contrase帽a y la confirmaci贸n no coinciden. Ingrese la contrase帽a nuevamente
+21=El formato de la contrase帽a no cumple con los requisitos. Ingrese la contrase帽a nuevamente
+22=El usuario ya existe. Puede ingresar directamete
+23=C贸digo de verificaci贸n incorrecto, vuelva a ingresarlo. 
+24=N煤mero de cuenta incorrrecta, por favor ingrese el correo correcto 
+25=Correo
+26=Residencia
+27=Miembro
+28=Desarmar
+29=Armar
+30=Copia de seguridad
+31=Funci贸n auxiliar
+32=A帽adir funciones
+33=Modo noche
+34=Configuraci贸n general
+35=Soporte
+36=Casa
+37=Categor铆a
+38=Inteligente
+39=Individual
+40=Inicio de sesi贸n fallido, n煤mero de cuenta o contrase帽a incorrectos
+41=Error al enviar el codigo de verificaci贸n
+42=Error de red
+43=Error en el registo, int茅ntelo de nuevo
+44=Confirmar reinicio
+45=El numero de cuenta no existe, por favor aseg煤rese de estar registrado
+46=Inicio de sesion inv谩lido, iniciar sesion nuevamente
+47=Centro Personal
+48=Nombre
+49=C贸digo QR
+50=Tel茅fono
+51=Correo
+52=No enlazado
+53=Autorizaci贸n de terceros
+54=Cambiar contrase帽a
+55=Configuraci贸n de desbloqueo
+56=Establecer contrase帽a, gesto, huella digital o identificaci贸n facil para proteger su provacidad
+57=Salir
+58=Habitaci贸n
+59=Equipo
+60=Funci贸n
+61=Brillo
+62=Configuraci贸n
+63=Locaci贸n 
+64=Compartir 
+65=A帽adir acceso directo al escritorio
+66=Cambiar nombre
+67=Cancelar 
+68=Confirmar 
+69=Todo
+70=Cortina
+71=Nombre
+72=Address
+73=Gesti贸n de plantas
+74=Gesti贸n de habitaciones
+75=Migraci贸n de administrador 
+76=Migraci贸n de privilegios 
+77=Priviligio de depuraci贸n
+78=El administrador migra a otro usuario
+79=Toda los datos de la residencia migran al nuevo usuario
+80=Permitir que el personal visite su casa de forma remota
+81=Piso
+82=A帽adir piso
+83=Cambiar nombre de piso
+84=Error al a帽adir, el piso ya existe
+85=Escena 
+86=Borrar 
+87=Inmediata
+88=Eliminar el piso o no? 
+89=A帽adir habitaci贸n 
+90=Cmabiar la informacion de la habitaci贸n 
+91=Informaci贸n de la habitanci贸n 
+92=Nombre
+93=Piso
+94=Gesti贸n funcionamiento
+95=Guardar
+96=Eliminar la habitaci贸n 
+97=Galeria por defecto 
+98=Camara
+99=Seleccionar de la galeria 
+100=No asignado 
+101=Asignado
+102=No asignado 
+103=Eliminar la habitaci贸n o no? 
+104=Tiempo de transici贸n 
+105=Temperatura interna 
+106=AC
+107=Videoportero
+108=Sensor
+109=Monitor de seguridad 
+110=Panel Inteligente
+111=Musica 
+112=Aire fresco 
+113=Ambiental 
+114=Monitoreo de energ铆a 
+115=Electrodom茅sticos
+116=Bloqueo inteligente 
+117=Calefacci贸n 
+118=Abrir 
+119=Refrigeraci贸n 
+120=Calefacci贸n 
+121=Deshumidificar
+122=Auto
+123=Suministro de aire
+124=Alto 
+125=Medio 
+126=Bajo 
+127=Modo
+128=Velocidad del ventilador 
+129=Estas seguro de apagar todas las funciones de la habitaci贸n? 
+130=Abierta
+131=A帽adido a favoritos
+132=Felicitaciones! Registro exitoso 
+133=Inicio de sesion autom谩tico pronto鈥�.
+134=El numero de no esta registrado, por favor registrese e ingrese nuevamente
+135=Por favor, obtener codigo de verificaci贸n 
+136=La contrase帽a ha sido cambiada
+137=La direccion rsidencial no puede estar en blanco 
+138=El nombre de la residencia no puede estar en blanco 
+139=El nombre de la habitaci贸n no puede estar en blanco 
+140=El nombre del piso no puede estar en blanco 
+141=No se pudo revisar, el piso ya existe
+142=El nombre del equipo no puede estar en blanco 
+143=El nombre del usuario no puede estar en blanco 
+144=Nombre de usuario 
+145=Seleccione la p谩gina para bloquear 
+146=Puede seleccionar varias paginas que le gustaria mantener
+147=Error en codigo de verificaci贸n
+148=No protegido 
+149=Cuando empieza 
+150=Armar/Desarmar 
+151=Desbloquear remotamente 
+152=No se necesita contrase帽a/gesto al iniciar el software
+153=Iniciar sesi贸n 5 minutos despues de salir de la p谩gina, se requiere el m茅todo de desbloqueo correspondiente.
+154=Centro de miembros - utiliza para debloquear la funci贸n de seguridad como armar/desarmar
+155=Usado para desbloquear la cerradura inteligente 
+156=Configuraci贸n de desbloqueo
+157=Solo valido para host
+158=Desbloquear con contrase帽a
+159=Desbloquear con gesto 
+160=Desbloquear con huella 
+161=Desbloquear con identificaci贸n facial 
+162=Configuraci贸n de contrase帽a num茅rica
+163=Configuraci贸n exitosa
+164=Configuraci贸n de gestos
+165=Por favor dibuja tu patron de desbloqueo
+166=Requiere al menos una conexi贸n de 4 puntos, dibuje nuevamente 
+167=El patron y la corfirmacion que dibujaste no coincide, dibuje nuevamente
+168=Por favor dibuje su patr贸n nuevamente
+169=Desbloquear con huella o no? 
+170=Desbloquar con identificacion facial o no? 
+171=Verificar la contrase帽a num茅rica 
+172=Verificar el gesto 
+173=Por favor ingrese el gesto original 
+174=Por favor ingrese la contrase帽a num茅rica original 
+175=Verificaci贸n fallida, error en la contrase帽a
+176=Cambiar la contrase帽a num茅rica 
+177=Cambiar el gesto 
+178=Cerrar la configuraci贸n de desbloqueo o no? 
+179=Por favor verifique la huella 
+180=Verificaci贸n fallida, error en el gesto
+181=General 
+182=Dia 
+183=Noche 
+184=Abandonar 
+185=Por favor enlace el piso
+186=Ajuste de la velocidad del ventilador 
+187=Ventilador 
+188=Enchufe 
+189=Nivel 
+190=Chl
+191=Vol
+192=TV
+193=La habitanci贸n existe, error al cambiar 
+194=Medio Ambiente
+195=Contaminaci贸n fuerte
+196=Contaminaci贸n leve 
+197=Bueno
+198=Excelente
+199=Frio helado
+200=Frio
+201=Frio
+202=Confort
+203=Tibio 
+204=Caliente
+205=Extremadamente caliente 
+206=Hasta el estandar 
+207=Contaminaci贸n leve 
+208=Contaminaci贸n media
+209=Contaminaci贸n fuerte
+210=Fresco 
+211=Turbidez
+212=Hipoxia
+213=Hipoxia severa
+214=H煤medo 
+215=H煤medo 
+216=Seco 
+217=Temperatura
+218=Humedad 
+219=Rango 
+220=Nivel 
+221=Valor de color 
+222=PM1.0
+223=PM2.5
+224=Ruido
+225=Fuerza del viento
+226=CO2
+227=TV02
+228=Dia 
+229=Semana
+230=Mes
+231=Otra regi贸n 
+232=Administraci贸n de miembros 
+233=Apodo 
+234=Autoridad Administrativa
+235=Crear una escena
+236=Apodo no puede quedar en blanco 
+237=Editar apodo 
+238=La regi贸n utilizada 
+239=A帽adir miembro 
+240=Por favor ingrese el n煤mero de cuenta del miembro 
+
+241=Escanear codigo QR 
+242=Confirmar la invitaci贸n 
+243=Error en n煤mero de cuenta, por favor chequear 
+244=Agregue correctamente al miembro
+245=Error de datos, por favor intente de nuevo 
+246=Error al a帽adir, el numero de cuenta del miembro no esta registrada
+
+247=No puedes agregarte a ti mismo.
+248=El usuario no existe en esta residencia 
+249=Se ha agregado el n煤mero de cuenta del miembro, por lo que no se puede volver a agregar.
+
+250=Error de operaci贸n 
+251=Error al agregar, autoridad no valida 
+252=Guardado correctamente
+253=Guardando鈥spere un momento. 
+254=Adopo editado 
+255=Eliminar este miembro 
+256=Sin favoritos 
+257=Introduzca el contenido 
+258=Bienvenido al nuevo miembro 
+259=Esta seguro de elimianr este miembro? 
+260=Introduzca la contrase帽a de inicio de sesi贸n 
+261=Cambio de residencia exitoso
+262=Seleccionar todo 
+263=Compartir la selecci贸n funcional 
+264=Confirmar uso compartido 
+265=Compartir en 
+266=Error de uso compartido funcional 
+267=Uso compartido funcional exitoso 
+268=Correo 
+269=Cambiar el enlace 
+270=Eliminar el enlace
+271=Correo 
+272=Cambiar la direcci贸n de correo 
+273=Cambiar el m茅todo de verificaci贸n 
+274=El c贸digo de verificaci贸n ha sido enviado, por favor ingrese
+275=Reenviar 
+276=Verificaci贸n correcta 
+277=Correo 
+278=Por favor ingrese el nuevo correo 
+279=Enlazar correctamente su correo electr贸nico a su cuenta
+280=No vincular su correo electr贸nica a su cuenta 
+281=Eliminar el enlace de correo electr贸nico 
+282=Eliminaci贸n correcta de enlace 
+283=N煤mero de telefono
+284=N煤mero de telefono
+285=N煤mero de telefono
+286=Vincular correctamente su numero de tel茅fono a su cuenta
+287=No puede vincular su numero de tel茅fono a su cuenta 
+288=Cambiar el enlace 
+289=Quitar el enlace 
+290=No se puede obtener el historial 
+291=Sin favoritos 
+292=Acerca de ON+
+293=Miembro
+294=Administrador 
+295=Cambiar la contrase帽a
+296=Antes de cambiar la contrase帽a iniciar sesion
+297=Por favor verifique ID
+298=Verificaci贸n telefonica 
+299=Verificaci贸n de correo electronico 
+300=No se ha enlazado a la direcci贸n de correo electronico, no puede verificar 
+301=No se ha enlazado a un numero telefonico, no se puede verificar  
+302=Proceder al enlace 
+303=Eliminado correctamente el enlace a su numero de telefono 
+304=El codigo de verificaci贸n se ha enviado a: 
+305=Telefono 
+306=Correo 
+307=Recibi贸 nuevos datos, esta seguro de anularlos? 
+308=Automatizaci贸n 
+309=Crear una escena
+310=A帽adir escena 
+311=Configuraci贸n basica 
+312=Nombre
+313=Region 
+314=Completo
+315=Vista completa de la residencia
+316=Sleccionar 
+317=Ya a帽adido
+318=Conmutador 
+319=Velocidad del ventilador 
+320=Modo
+321=Encendido
+322=Apagado
+323=Escena 
+324=Retardo de escena
+325=Configuraci贸n de retardo
+326=Retardo 
+327=Capturar la escena
+328=Escena de pelicula 
+329=General 
+330=Modo autom谩tico 
+331=Potencia calentamiento suelo
+332=Refrigeraci贸n suelo
+333=Potencia de refrigeraci贸n del suelo
+334=Ajustar el porcentaje
+335=Sin retardo
+336=No hay escena disponible. A帽ade uno! 
+337=Editar la escena
+338=El nombre de la escena no puede estar en blanco
+339=El nombre de la escena ya existe, por favor revise 
+340=El nombre de la habitaci贸n ya existe, por favor revise
+341=Eliminar esta escena o no? 
+342=La puerta de enlace esta fuera de linea, falla de conexi贸n remota
+343=Error MAC, error de conexi贸n remota. 
+344=Error de conexi贸n remota. 
+345=Telefono 
+346=Correo 
+347=Ingrese el nuevo numero de telefono ceular 
+348=Ya se ha utilizado el numero de telefono celular 
+349=Ya se ha utilizado la direccion de correo electronico 
+350=La direcci贸n de correo electr贸nico es la misma que la actual, sin necesidad de cambiar.
+351=El n煤mero de tel茅fono es la mismo que la actual, sin necesidad de cambiar.
+352=Asignaci贸n de piso 
+353=Separar 
+354=Cerrar
+355=Acerca de
+356=Numero de version 
+357=Esta funcion no esta disponible! 
+358=Telefono 
+359=Correo 
+360=Escena de panel 
+361=No a帽adido
+362=Seleccionar todo 
+363=No se puede comunicar con el servidor, no se puede editar la informaci贸n del dispositivo
+364=No se puede comunicar con el servidor, no se puede editar la informaci贸n de la habitaci贸n
+365=No se puede comunicar con el servidor, no se puede editar la informaci贸n de la escena
+366=No se puede comunicar con el servidor, no se puede eliminar la escena
+367=No se puede comunicar con el servidor, no se puede eliminar el piso
+368=Bienvenido a disfrutar de ON+ 
+369=A帽adir residencia
+370=Convi茅rtete en miembro de la familia
+371=No se puede utilizar la funcion, por favor verifique su conexi贸n 
+372=No se puede crear una escena, por favro verifique su conexi贸n 
+373=Error al agregar un piso 
+374=Los datos residenciales se han eliminado, APP cambiar谩 autom谩ticamente a otra residencia.
+375=El gateway no esta conectado al servidor, no se puede crear la escena 
+376=No se puede introducir un car谩cter especial
+377=Toda la residencia 
+378=Tiempo de transici贸n 
+379=Velocidad de transicion 
+380=Esta funcion no esta disponible! 
+381=Recargar
+400=Bienvenido a casa
+401=Codigo de barras no v谩lido, intentelo de nuevo 
+402=Int茅ntelo de nuevo
+403=Temperatura de color 
+404=Ajuste r谩pido 
+405=Acogedor 
+406=Reuni贸n 
+407=Lectura
+408=A帽adir
+409=Marca de funci贸n 
+410=No ha agregado ningun dispositov de pataforma en la actualidad 
+411=Otros dispositivos de plataforma son compatibles con proveedores de serviciso externos 
+412=A帽adir
+413=Controlador no activado
+414=Controlador activado
+415=Alguien
+416=Registro
+417=Fuga de agua 
+418=En alarma 
+419=Normal 
+420=Seco caliente
+421=Secado al aire
+422=Desinfectar
+423=Iluminaci贸n
+424=Tiempo
+425=Tiempo seco caliente
+426=Tiempo de secado al aire
+427=Tiempo de desinfecci贸n 
+428=Tiempo Ani贸n
+429=H
+430=Min
+431=Actualmente esta agregando cualquier dispositivos de plataforma a
+432=Otros dispositivos de plataforma son compatibles con proveedores de serviciso externos 
+433=Valvula de agua 
+434=Interruptor de tiempo
+435=Control remoto 
+436=Dispositivos a帽adido 
+437=Lista de dispositivos 
+438=humedad:{0}% aire:viento {1}:{2}
+439=Tiempo real: {0} kw
+440=Siguiente paso
+441=Seleccione todas las 谩reas de estado de captura
+442=Generar escena
+443=Implementaci贸n personalizada
+444=Centro de seguridad
+445=Defensa de la casa
+446=Defensa en casa
+447=Defensa de vacaciones 
+448=Implementaci贸n fija 
+449=*Deshacer defensa no afecta
+450=Defensa contra desastres
+451=Defensa de 24 horas 
+452=Alarma antirrobo
+453=Silenciar alarma
+454=Informaci贸n de implementaci贸n
+455=El nombre no puede estar en blanco 
+456=Lienzo
+457=Consumo de energ铆a 
+458=Fecha
+459=Consumo de energ铆a en tiempo real 
+460=Consumo energ茅tico de este mes 
+461=Exterior/Interior
+462=Aun no has a帽adido ningun dispositivo
+
+463=Introduzca el c贸digo SN del dispositivo
+464=Puede empezar a usar la onda milim茅trica Zhaoguan
+465=Eliminar dispositivo
+466=STB
+467=Proyector
+468=Alguien cay贸
+469=Alguien est谩 en
+
+470=Bajo protecci贸n 
+471=Sensor de onda milim茅trica
+472=Exterior
+473=Columpio 
+474=Oscilaci贸n hacia arriba y hacia abajo 
+475=Gira a izquierda y derecha
+476=A帽adir residencia 
+477=Columpio 
+478=Patr贸n
+479=Velocidad
+480=Sensor ambiental 
+481=Puede empezar a usar el sensor ambiental 
+482=Sensor de gas
+483=Introduzca el c贸digo MAC del dispositivo
+484=Abierto
+485=Comprobar/Modificar
+486=Funci贸n de defensa/Estado de alarma 
+487=Objetivo de alarma despues de la activaci贸n 
+488=Paso de rostro
+489=Aplicar identificaci贸n facil a: 
+490=Control de acceso a la comunidad
+491=Acerda de identificacion facil y privacidad 
+492=Borrar datos 
+493=Resetear identificaci贸n facial 
+494=Establecer identificaci贸n facial 
+495=Configuraci贸n paso de rostro
+496=No hay ningun estado de implementacion de tareas asociado 
+497=Personalizado
+498=Implementaci贸n retrasada
+499=Agregar funci贸n de defensa
+500=Agregar destino de alarma
+501=Alarma de seguridad: se activa en {0}
+502=Borrar la alarma de seguridad?
+503=Exceso de estandar 
+504=Bueno
+505=Excelente
+506=Indentificacion facil ingresada correctamente
+507=Ingreso identificaci贸n facil fallida
+508=Formaldeh铆do
+509=Introduzca el nombre de seguridad
+510=Seleccione el destino de implementaci贸n 
+511=Atenuaci贸n combinada
+512=Mensajes no estan habilitados, vaya a configuraci贸n
+513=Introduzca el codigo de emparejamiento
+514=La informaci贸n de la ubicaci贸n del gateway no est谩 configurada
+515=Agregar seguridad
+516=Withdrawal
+------
+517=Instantaneous value
+518=Cumulative power consumption
+519=Voltage (V)
+520=Electric Current (A)
+521=Power (W)
+522=Refresh
+523=Delay alarm
+524=Bypass
+525=Enable
+526=Cancel account
+527=Homekit support notes
+528=Firmware update
+529=
+530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
+531=Password free unlocking within five minutes
+532=The device is offline and cannot be operated temporarily
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics  
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=En alarma
+541=Monitoring
+542=Wandering alarm
+543=Get more
+
+1000=Humedad de ambiente
+1001=V-chip
+1002=Ani贸n
+1003=Estirilizaci贸n
+1004=Humidificar
+1005=Restablecimiento del elemento de filtro
+1006=Iluminaci贸n
+1007=Autom谩tico
+1008=Manual
+1009=Fuerte
+1010=Dormir
+1011=Tiempo
+1012=Velocidad del viento
+1013=Engranaje 
+1014=Confirme si el elemento filtrante se ha restablecido y opere el equipo de acuerdo con el manual de instrucciones para que la vida 煤til del elemento filtrante se vuelva a cronometrar
+1015=Marcha baja
+1016=Engranaje medio
+1017=Marcha alta
+1018=Configuraci贸n de temportizaci贸n 
+1019=Hora
+1020=Tiempo del elemento de filtro: 
+1021=Filtro de aire
+1022=Velocidad actual del viento 
+1023=Cancelar tiempo 
+1024=Robot de barrido de pisos 
+1025=Succi贸n 
+1026=1掳 Marcha 
+1027=2掳 Marcha 
+1028=3掳 Marcha 
+1029=Carga 
+1030=Voz 
+1031=Silenciar 
+1032=Modo de limpieza
+1033=Gestion de consumibles
+1034=Historia
+1035=Autom谩tico
+1036=Aleatorio
+1037=Muro
+1038=Espiral
+1039=脕rea total limpia
+1040=Tiempo total de limpieza
+1041=Vida 煤til restante del cepillo lateral 
+1042=Vida 煤til residual del cepillo de rodillos 
+1043=Vida 煤til restante de la pantalla de filtro
+1044=Restablecer pincel de bordes
+1045=Restablecer cepillo de rollo
+1046=Restablecer pantalla
+1047=Confirmar para restablecer el pincel de bordes? 
+1048=Confirmar para restablecer el cepillo de rollo? 
+1049=Confirmar para restablecer la pantalla? 
+1050=Agregar dispositivo
+1051=Mini control remoto inteligente
+1052=Agregar control remoto por infrarrojos 
+1053=Presione el bot贸n del control remoto infrarrojo{0} durante 3 segundos y la luz indicadora{0} se enciende en azul r谩pidamente
+1054=Aseg煤rese de que su Bluetooth{0} est茅 activado y se pueda buscar
+1055=Siguiente paso
+1056=Buscando dispositivo鈥�
+1057=No se ha encontrado ning煤n mando a distancia por infrarrojos
+1058=1.Compruebe si el dispositivo est谩{0} encendido normalmente{0}2.Compruebe si la funci贸n Bluetooth{0} est谩 activada normalmente{0}3.Compruebe si el indicador{0} luz parpadea en azul
+1059=Buscar de nuevo
+1060=Conectar WiFi
+1061=En la actualidad, solo es compatible con la red WiFi 2.4G{0} y no admite nombres WiFi{0} con caracteres chinos
+1062=Contrase帽a
+1063=Conectando鈥�
+1064=Haga que el control remoto por infrarrojos{0} lo m谩s cerca posible del enrutador WiFi
+1065=Enlace de red
+1066=Subir a nube
+1067=Conectado con 茅xito 
+1068=1.Compruebe si el dispositivo est谩{0} encendido normalmente{0}2.Active la funci贸n Bluetooth{0}3.Presione el bot贸n durante 10 s y el indicador{0} luz estar谩 encendida
+1069=Error al agregar 
+1070=Agregado con 茅xito
+1071=隆Puedes empezar a usar el control infrarrojo{0}remote!
+1072=Empezar a usar 
+1073=Por favor encender Bluethooth
+1074=Informaci贸n de ubicaci贸n (GBS) no disponible
+1075=Red no disponible
+1076=Seleccione el mando a distancia por infrarrojos
+1077=Aire fresco
+1078=Pantalla de filtro residual 
+1079=Energia 
+1080=Ventilado
+;鍒�
+1081=1掳 Marcha 
+1082=2掳 Marcha 
+1083=3掳 Marcha 
+1084=1掳 Marcha 
+1085=2掳 Marcha 
+1086=3掳 Marcha 
+1087=Desbloquear 
+1088=Temp. Contrase帽a
+1089=Conectado 
+1090=Desconectado 
+1091=Generar 
+1092=Tiempo efectivo 
+1093=Tiempo de caducidad
+1094=Seleccionar hora 
+1095=Seleccionar fecha
+1096=Generar 
+1097=Se ha copiado la contrase帽a actual 
+1098=Borrar contrase帽a?
+1099=El tiempo de caducidad debe ser posterior al tiempo efectivo 
+1100=M茅todo de desbloqueo
+1101=Se sincronizar谩 con el bloqueo real, 驴confirmar para eliminar?
+1102=Borrar 
+1103=Comentar 
+1104=El comentario no puede estar en blanco
+1105=Asignar a: 
+1106=Escena de destino no existe 
+1107=Seleccionar escena
+1108=Desbloquear 
+1109=Siempre encendido
+1110=Configuraci贸n
+1111=Automatizaci贸n 
+1112=Activar el modo "Siempre encendido" 
+1113=Desactivar el modo "Siempre encendido"
+1114=Editar 
+1115=Siempre Encendido estar谩 apagado {0}
+1116=Condici贸n
+1117=Movimiento 
+1118=Siempre encendido
+1119=Bloquear 
+1120=Usuario
+1121=M茅todo de desbloqueo
+1122=Huella digital 
+1123=Tarjeta 
+1124=Clave
+1125=Informaci贸n
+1126=Desbloquear 
+1127=Alarma 
+1128=Sin conexi贸n 
+1129=Para el primer usuario, introduzca la contrase帽a.
+1130=Introduzca la contrase帽a de administrador
+1131=Enlace correcto
+1132=Saltar a la contrase帽a personal para desbloquear 
+1133=Saltar 
+1134=Por favor, dibuja tu patr贸n 
+1135=El bloqueo estar谩 siempre encendido despu茅s de la configuraci贸n, confirme para continuar
+1136=Confirmar 
+1137=Caducar 
+1138=Siempre Encendido caducar谩 despues de {0} horas
+1139=Introduzca el tiempo de caducidad 
+1140=El tiempo de caducidad no debe ser superior a 72 horas
+1141=El tiempo de caducidad no debe ser inferior a 1 hora
+1142=Error al establecer conexi贸n, intentelo de nuevo 
+1143=No se puede verificar el ID de administrador, vuelva a iniciar sesi贸n en la cuenta
+1144=Su residencia est谩 siendo migrada a otro HDL
+1145=Nota: 
+1. Todos sus datos de residencia se migrar谩n a un nuevo usuario. {0} 2. Despu茅s de la migraci贸n, el miembro original ser谩{0}autom谩ticamente desvinculado de esta residencia. {0} 3. La nueva cuenta es una HDL v谩lida. {0} 4. La cuenta del receptor no puede ser la misma{0} que la del lado de la migraci贸n.
+1147=Confirmar 
+1148=Cuenta del receptor de entrada
+1149=Perfil 
+1150=Confirmar migraci贸n de administrador de {0} a {1}
+1151=La cuenta no existe
+1152=No transferir la propiedad a usted mismo
+1153=Terminar
+1154=Transferir al usuario, por favor espere...
+1155={0} se ha convertido en administrador residencial
+1156=Los datos de residencia se eliminar谩n de su cuenta
+1157=No se puede migrar
+1158=Int茅ntelo de nuevo
+1159=Migraci贸n de la autoridad de administraci贸n
+1160=Su autoridad de administraci贸n se est谩 migrando a otros miembros
+1161=1.Sus datos (datos en la nube) de la residencia ser谩n{0}migrabados al nuevo administrador{0}2.Sus datos se intercambiar谩n con el miembro objetivo{0}y su permiso se cambiar谩 al miembro objetivo{0}
+1162=Confirmar
+1163=No hay miembros para elegir
+1164=Confirmar la migraci贸n de la autoridad de administraci贸n de {0} a {1}
+1165=Migrar correctamente
+1166=No se puede migrar
+1167=Migrar correctamente, y sus permisos se convertir谩n en miembros normales
+
+4000=Videoportero
+4001=Registro de llamadas 
+4002=*Los registros en la nube solo se conservan durante 30 d铆as
+4003=Llamada telef贸nica a domicilio
+4004=Contestado
+4005=Desbloqueado
+4006=A帽o
+4007=De
+4008=Llamada
+4009=Desbloqueado
+4010=Perdido
+4011=Rechazado
+4012=隆Los par谩metros de configuraci贸n son anormales!
+4013=C贸digo QR de control de acceso
+4014=Contrase帽a temporal 
+
+
+
+
+
+5000=Musica 
+5001=Grupo 
+5002=Configuracion 
+5003=Informaci贸n general 
+5004=Reproductor multimedia 
+5005=Bluetooth
+5006=Region 
+5007=Lista de canciones
+5008=Mis favoritos
+5009=Mi lista 
+5010=Seleccionar fuente 
+5011=Local
+5012=USB
+5013=Radio en linea
+5014=QQ musica
+5015=Bluetooth
+5016=Entrada de linea 
+5017=Revisar el nombre 
+5018=Individual
+5019=Juego aleatorio
+5020=Lista
+5021=Ha cambiado a: 
+5022=Cancelar 
+5023=Borrar 
+5024=Editar 
+5025=El nombre de la lista es el mismo
+5026=El nombre de la lista esta en blanco 
+5027=Introduzca el nombre de la lista 
+5028=Agregar nueva lista 
+5029=Preguntar 
+5030=Eliminar la carpeta o no? 
+5031=Confirmar 
+5032=El nombre est谩 en blanco 
+5033=A帽adido a la lista de canciones
+5034=Radio
+5035=Seleccionar grupo 
+5036=Play
+5037=Seleccione al menos mas de 2 reproductores multimedia
+5038=No se pueden seleccionar 2 o m谩s de 2 reproductores multimedia principales para convertirse en un grupo
+5039=No ha seleccionado el reproductor multimedia 
+5040=Seleccione esta opci贸n para quitar el reproductor multimedia 
+5041=No se ha seleccionado quitar el reproductor multimedia 
+5042=Configurando 
+5043=Borrando鈥�
+5044=Volumen
+5045=Volumen general
+5046=Ajustar volumen 
+5047="QQ music" no se ha instalado en su tel茅fono celular, proceda en el Centro de aplicaciones.
+
+6000=Normal 
+6001=Estado del dispositivo
+6002=piezas
+6003=Dispositivo de control IR actual
+6004=Se ha a帽adido el mando a distancia 
+6005=AC
+6006=TV 
+6007=Ventilador 
+6008=Decodificador
+6009=DVD
+6010=Proyector 
+6011=Personalizado
+6012=IR Control
+6013=Administraci贸n de dispositivos 
+6014=Agregar mando de distancia
+6015=En linea 
+6016=Sin conexi贸n 
+6017=N煤mero de version
+6018=Introduzca el nombre de mando a distancia 
+6019=Recordatorio: Despu茅s de crear el mando a distancia, se puede encontrar y utilizar en Function-Electrical Category{\r\n}
+6020=Boton recomendado
+6021=Introduzca el nombre del bot贸n 
+6022=Siguiente
+6023=Potencia
+6024=Volumen+
+6025=Volumen-
+6026=Channel+
+6027=Channel-
+6028=Subir 
+6029=Bajar
+6030=Izquierda
+6031=Derecha
+6032=Silenciar
+6034=Confirmar
+6035=Reproducir
+6037=Salir 
+6038=Menu
+6039=Pausar
+6040=Volver
+6041=Detener
+6042=Pagina de inicio
+6043=Avance r谩pido 
+6044=Rebobinar 
+6045=Tiempo 
+6046=Copiar funcion de control remoto
+6047=Apunta al centro del mando a distancia y pulsa el mismo bot贸n
+6048=Mando a distancia inteligente
+6049=Agregar bot贸n 
+6050=*Pulsaci贸n larga para la clasificaci贸n personalizada
+6051=Hecho
+6052=Agregado correctmente 
+6053=Se puede clasificar -funcion-operaci贸n electrica y uso 
+6054=Clasificaci贸n
+6055=Nombre del mando a distancia 
+6056=Regi贸n 
+6057=Continuar agregando
+6058=El茅ctrico
+6059=Error al agregar 
+6060=Reintentar
+6061=Hacer coincidir el mando a distancia
+6062=Haga clic en el bot贸n de abajo
+6063=Confirmar si el dispositivo esta respondiendo
+6064=Error de control 
+6065=Control exitoso 
+6066=Encendido 
+6067=Modo de enfriamiento
+6068=
+6069=Temperatura 26掳
+6070=Eliminar dispositivo
+6071=Modificar nombre
+6072=Confirmar eliminaci贸n 
+6073=Cancelar
+6074=El mando a distancia no puede superar los 10 puntos
+6075=El 谩rea donde pertenece el control remoto: 
+6076=Editar informaci贸n
+6077=Actualizaci贸n de la versi贸n 
+6078=El sistema est谩 en mantenimiento ~ Int茅ntelo de nuevo m谩s tarde ~
+6079=Error al obtener datos
+6080=Esta funcion no se admite temporalmente
+6081=Seleccionar banda IR
+6082=
+6083=Baja velocidad
+6084=Interruptor de velocidad del viento
+6085=Alta velocidad 
+6086=Auto
+6087=Temperatura+
+6088=Temperatura-
+6089=Purificador de aire
+6090=Calentador de agua
+6091=Producto no existe
+6092=El dispositivo no existe
+6093=El dispositivo no esta en linea
+6094=El dispositivo de puerta de enlace no existe
+6095=Mas de 30 botondes de adici贸n 
+6000=Renombrar
+6001=Introduzca el nombre
+6002=Xiaodu
+6003=aispeech
+6004=El sistema est谩 en mantenimiento ~ Int茅ntelo de nuevo m谩s tarde ~
+6005=Desvinculado
+6006=Altavoz inteligente
+6007=Controlar contenido
+6008=Error al cagar datos 
+6009=Error al configurar datos 
+6010="Todav铆a no hay altavoz", "Vaya a la aplicaci贸n de terceros para vincular el altavoz inteligente".
+6011=La modificaci贸n de los comentarios no tiene 茅xito
+6012=Quieres desvincularte? 
+6013=Desvinculaci贸n 
+6014=transferir a app de terceros 
+6015=A帽adir altavoces
+7000=Crear automatizaci贸n
+7001=Etidar automatizaci贸n
+7002=Si
+7003=Cuando cumple las siguientes condiciones al mismo tiempo
+7004=Cundo cumple una de las condiciones siguintes
+7005=Continuar con la ejecuci贸n 
+7006=L asiguiente acci贸n 
+7007=M茅todo de reciclaje 
+7008=Ejecutar una vez
+7009=Todos los d铆as
+7010=Cada semana 
+7011=Cada mes
+7012=Guardar
+7013=Mensaje push
+7014=Enviar notificaci贸n 
+7015=Seleccionar la condici贸n 
+7016=Momento 
+7017=Seleccione la condici贸n de tiempo 
+7018=Hora
+7019=Intervalo de tiempo 
+7020=Hora 
+7021=Minuto 
+7022=Segundo 
+7023=Cancelar 
+7024=Seguro 
+7025=*Debe ejecutar la automatizaci贸n que establezca una vez durante el intervalo de tiempo establecido.
+7026=Hora de inicio
+7027=Hora de finalizaci贸n 
+7028=Funci贸n
+7029=Seleccionar condici贸n funcional
+7030=Toda la regi贸n 
+7031=Toda la funci贸n 
+7032=Encendido
+7033=Apagado
+7034=Conmutador 
+7035=Completo
+7036=Agregar ejecuci贸n 
+7037=Lunes 
+7038=Martes
+7039=Mi茅rcoles
+7040=Jueves
+7041=Viernes
+7042=S谩bado
+7043=Domingo 
+7044=Cumplir con la condici贸n 
+7045=Configuraci贸n 
+7046=Nombre
+7047=Cambiar el nombre
+7048=El nombre de la automatizaci贸n ya existe 
+7049=Eliminar automatizaci贸n o no? 
+7050=Agregar escena
+7051=Retraso
+7052=No se puede guardar, int茅ntelo de nuevo
+7053=No se puede eliminar, int茅ntelo de nuevo
+7054=Pausar
+7055=Brillo
+7056=Porcentaje 
+7057=Modo
+7058=Enfriamiento
+7059=Calefacci贸n 
+7060=Autom谩tico
+7061=Deshumidificar 
+7062=Temperatura 
+7063=Velocidad de ventilador 
+7064=D铆a 
+7065=Noche 
+7066=Abandonar 
+7067=General 
+7068=Tiempo 
+7069=No ha configurado la automatizaci贸n, procesa a configurar 
+7070=Nada est谩 aqu铆 
+7071=No se ha establecido la hora de inicio, por favor configurar 
+7072=La hora de finalizaci贸n no se ha establecido, por favor estableza 
+7073=La hora de inicio y la hora de finalizacion no deben ser las mismas
+7074=La hora de inicio no debe ser mayor a la hora de finalizaci贸n 
+7075=La condicion no debe estar en blanco 
+7076=Target no debe estar en blanco 
+7077=La hora no se ha establecido, por favor establezca 
+7078=L a condici贸n o el objetivo no deben estar en blanco 
+7079=L a puerta de enlace esta fuera de l铆nea 
+7080=Salida/Puesta de sol/Mediod铆a
+7081=Amanecer 
+7082=Puesta de sol 
+7083=Mediod铆a 
+7084=A tiempo 
+7085=Avance 
+7086=Minutos
+7087=Cambio exterior 
+7088=Seleccionar condicion de cambio al aire libre
+7089=Temperatura exterior, humedad, cambio de PM2.5
+7090=Cambio de clima (clima urbano) 
+7091=Cambio en el entorno exterior 
+7092=Temperatura superior a 
+7093=Temperatura inferior
+7094=Humedad superior a 
+7095=Humedad por debajo 
+7096=PM2.5 supeior a
+7097=PM2.5 por debajo 
+7098=D铆a soleado
+7099=Nublado 
+7100=
+7101=*Establezca el valor en este rango (1 ~ 100).
+7102=Sin valor establecido 
+7103=Excelente: 0 ~ 35ug/m3
+7104=Bueno: 36 ~ 75ug/m3
+7105=Contaminaci贸n lum铆nica: 76 ~ 115ug/m3
+7106=Contaminaci贸n moderada: 116 ~ 150ug/m3
+7107=Contaminaci贸n intensa: > 150ug/m3
+7108=Fuga/Sin fuga
+7109=Fuga
+7110=Sin fuga
+7111=Fuga de agua/sin fugas de agua
+7112=Fuga de agua 
+7113=Sin fuga de agua 
+7114=Alguien/Nadie
+7115=Alguien
+7116=Nadie
+7117=Abierto/Cerrado
+7118=Activado
+7119=Cerrar
+7120=Funci贸n anti-desmantelamiento
+7121=En linea 
+7122=Fuera de linea 
+7123=Calidad del aire
+7124=Excelente
+7125=Bueno
+7126=Pobre
+7127=Enviar notificaci贸n 
+7128=Contenido de la notificaci贸n 
+7129=(dentro de los 100 caracteres)
+7130=Selecci贸n de cuenta
+7131=Aplicaci贸n push 
+7132=Automatizaci贸n 
+7133=Ejecutado
+7134=Estado de destino
+7135=Ca铆da
+7136=Temperatura
+7137=Humedad 
+7138=PM2.5
+7139=CO2
+7140=TVOC
+7141=Exceder 
+7142=Grave
+7143=Alto 
+7144=Excelencia 
+7145=Seguridad 
+7146=A帽adir seguridad
+7147=Armado 
+7148=Desarmado
+7149=Manualmente
+7150=Inteligente
+7151=Bueno 
+7152=Dejar o Arrivar a un lugar 
+7153=Salir 
+7154=Llegar 
+9000=Inicio sesi贸n con un nuevo n煤mero de tel茅fono celular 
+9001=Inicie sesi贸n con una nueva direcci贸n de correo el茅ctr贸nico 
+9002=Nuevo numero de celular revisado
+9003=Nuevo numero de celular enlazado
+9004=Nueva direcci贸n de correo electr贸nico revisado
+9005=Nueva direcci贸n de correo electr贸nico enlazado 
+9006=El c贸digo de verificaci贸n puede enviarse m谩s tarde, espere.
+9007=Por favor, espere
+9008=Volver 
+9009=El usuario no desea ser nombrado
+9010=Nueva contrase帽a 
+9011=Introduzca la nueva contrase帽a nuevamente
+9012=De acuerdo 
+9013=Acuerdo de servicio 
+9014=Normativa de protecci贸n de la informaci贸n del usuario
+9015=y
+9016=Lea y acepte el Acuerdo de servicio del usuario y las regulaciones de protecci贸n de la informaci贸n del usuario.
+9017=Esta seguro de cerrar sesi贸n?
+9018=Seleccione pais/regi贸n 
+9019=Actualizar ahora
+9020=Ahora no 
+9021=Pa铆s/regi贸n 
+9022=Informaci贸n del servidor 
+9023=Servidor actual 
+9024=*El servidor hace referencia a la base de datos para la nube, sin necesidad alguna, no se recomienda realizar migraci贸n de datos.
+9025=Si es necesaria la migraci贸n de datos, marque
+9026=Introducci贸n a la funci贸n 
+9027=Quejas 
+9028=Actualizaci贸n de la versi贸n 
+9029=(por favor indique "quejas" en el t铆tulo, luego procesaremos en prioridad.)
+9030=Copia realizada
+9031=No hay nada aqu铆 
+9032=Obtener nueva versi贸n 
+9033=脷ltima versi贸n 
+9034=Que puedo hacer por ti? 
+9035=Problema de funci贸n 
+9036=Problema de escena
+9037=Soporte de aplicaciones 
+9038=(Preguntas frecuentes) 
+9039=Compartir y funci贸n 
+9040=Alertas 
+9041=Informaci贸n del sistema 
+9042=Centro de informaci贸n 
+9043=Tenga en cuenta que su n煤mero de cuenta ha iniciado sesi贸n en otro lugar. Si no lo hace usted mismo, cambie la contrase帽a de inmediato.
+9044=Cargado correctamente
+9045=No se puede cargar 
+9046=Revisado correctamente
+9047=La contrase帽a que ha revisado ha entrado en vigor, vuelva a iniciar sesi贸n.
+9048=Iniciar sesion con la contrase帽a del numero de cuenta 
+9049=Contrase帽a incorrecta para muchas veces, 隆el n煤mero de cuenta est谩 bloqueado!
+9050=Verificar la identificaci贸n facial 
+9051=Error al guardar la identificaci贸n facial del usuario 
+9052=La notificaci贸n push de registro esta disponible 
+9053=La notificaci贸n push de registro es anormal 
+9054=Verificaci贸n numerica de contrase帽a 
+9055=Verificaci贸n de gestos 
+9056=A帽o 
+9057=Sin funci贸n regional 
+9058=Guardar o no?
+9059=No compartir ahora 
+9060=Usos-permiso 
+9061=Encuentra tu contrase帽a haciendo clic en "Olvid茅 mi contrase帽a", o int茅ntalo de nuevo en {0} minuto.
+9062=Comprobar 
+9063=Todav铆a tienes {0} veces.
+9064=Altavoz inteligente
+9065=Gesti贸n de datos 
+9066=Comentarios
+9067=Los comentarios no pueden estar en blanco 
+9068=Desea desvincularse? 
+9069=Aviso de propiedad
+10000=Contrasela no v谩lida, vuelva a iniciar sesi贸n 
+10001=Error al solicitar el servidor, int茅ntelo de nuevo m谩s tarde.
+10002=Mantenimiento del sistema, int茅ntalo de nuevo mas tarde 
+10003=No puede iniciar sesi贸n, agregue la residencia al principio.
+10004=El n煤mero de cuenta ya existe
+10005=Env铆as el c贸digo de verificaci贸n con demasiada frecuencia, int茅ntalo de nuevo m谩s tarde.
+10006=Error de firma 
+10007=Sistema ocupado, intentelo de nuevo mas tarde! 
+10008=Contrasea no v谩lida para iniciar sesi贸n 
+10009=El usuario ha sido deshabilitado 
+10010=Error de contrase帽a original 
+10011=El n煤mero de subcuenta ya existe 
+10012=El npumero de subcuenta no existe 
+10013=No esta permitido agregarse como miembro 
+10014=La residencia actual no pertenece al este n煤mero de cuenta 
+10015=El nombre de la residencia ya existe 
+10016=La residencia no existe 
+10017=Error de solicitud, par谩metro anormal! 
+10018=El n煤mero que enlazaste es duplicado 
+10019=Enlazar el gateway primero 
+10020=El gateway no existe 
+10021=El gateway esta fuera de l铆nea
+10022=El dispositivo est谩 fuera de l铆nea 
+10023=Error de control 
+10024=La escena ya existe 
+10025=La automatizaci贸n ya existe 
+10026=Spk no admite esta funci贸n 
+10027=Spk no admite este valor funcional 
+10028=No tienes permiso 
+10029=El destino del dispositivo est谩 duplicado 
+10030=No tiene permiso para el control remoto 
+10031=El dispositivo no debe estar en blanco 
+10032=El usuario no  tiene permiso 
+10033=El dispositivo no existe
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIcon.png
new file mode 100644
index 0000000..0848837
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIconGray.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIconGray.png
new file mode 100644
index 0000000..74300b8
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/FloorHeating/EconomicIconGray.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/MusicIcon/order.png b/HDL-ON_Android/Assets/Phone/MusicIcon/order.png
new file mode 100644
index 0000000..cfe4317
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/MusicIcon/order.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/MusicIcon/single.png b/HDL-ON_Android/Assets/Phone/MusicIcon/single.png
index 3d49095..e4153c4 100644
--- a/HDL-ON_Android/Assets/Phone/MusicIcon/single.png
+++ b/HDL-ON_Android/Assets/Phone/MusicIcon/single.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/MusicIcon/single_cycle.png b/HDL-ON_Android/Assets/Phone/MusicIcon/single_cycle.png
new file mode 100644
index 0000000..33ee323
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/MusicIcon/single_cycle.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index c5fba5e..3b3f61d 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -181,6 +181,9 @@
     <Reference Include="ScanSdk">
       <HintPath>..\DLL\Scan\ScanSdk.dll</HintPath>
     </Reference>
+    <Reference Include="Shared.Droid.HDLLinphone">
+      <HintPath>..\DLL\Linphone\Android\Shared.Droid.HDLLinphone.dll</HintPath>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="MainActivity.cs" />
@@ -224,6 +227,26 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\EnvironmentalScience\HistoryOpionBg3.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\EnvironmentalScience\HistoryOpionBg4.png" />
     <AndroidAsset Include="Assets\Phone\Collection\FunctionOfflineBg.png" />
+    <AndroidAsset Include="Assets\Phone\Public\MsgIcon\CallIcon.png" />
+    <AndroidAsset Include="Assets\Phone\Public\MsgIcon\AnswerIcon.png" />
+    <AndroidAsset Include="Assets\Phone\Public\MsgIcon\HangUpIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\CAC\DataIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\CAC\JinMaoIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\hvaccac.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\hvaccac_blue.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\hvaccac_white.png" />
+    <AndroidAsset Include="Assets\Phone\Public\dialogBg2.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\sensorhelp.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_blue.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_white.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelHelpAlarmBgIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelHelpNormalBgIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\screenpanel.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelEnviBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\FloorHeating\EconomicIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\FloorHeating\EconomicIconGray.png" />
+    <AndroidAsset Include="Assets\Phone\MusicIcon\order.png" />
+    <AndroidAsset Include="Assets\Phone\MusicIcon\single_cycle.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
@@ -1430,12 +1453,8 @@
   <ItemGroup>
     <Folder Include="libs\arm64-v8a\" />
     <Folder Include="Zxing\" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\HDLLinphoneSDK_AndroidNew\Shared.Droid.HDLLinphone\Shared.Droid.HDLLinphone\Shared.Droid.HDLLinphone.csproj">
-      <Project>{703D29ED-674F-44A8-8AAD-863035899D4B}</Project>
-      <Name>Shared.Droid.HDLLinphone</Name>
-    </ProjectReference>
+    <Folder Include="Assets\Phone\FunctionIcon\CAC\" />
+    <Folder Include="Assets\Phone\FunctionIcon\Panel\" />
   </ItemGroup>
   <Import Project="..\HDL_ON\HDL_ON.projitems" Label="Shared" Condition="Exists('..\HDL_ON\HDL_ON.projitems')" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index eabdc56..3bcb874 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.6" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202205241">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.6" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202206082">
 	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
 	<!--鍙嬬洘-->
 	<!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 8dc594d..c72dc16 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -105,14 +105,11 @@
         <Reference Include="Shared.IOS.LCVideoOnSDK">
           <HintPath>..\DLL\LC\IOS\Shared.IOS.LCVideoOnSDK.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.HDLSceneSiri">
-          <HintPath>..\DLL\IOS\Shared.IOS.HDLSceneSiri.dll</HintPath>
-        </Reference>
         <Reference Include="Shared.IOS.HDLLinphoneSDK">
           <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.HDLFVSDK">
-          <HintPath>..\DLL\IOS\Shared.IOS.HDLFVSDK.dll</HintPath>
+        <Reference Include="Shared.IOS.HDLSceneSiri">
+          <HintPath>..\DLL\IOS\Shared.IOS.HDLSceneSiri.dll</HintPath>
         </Reference>
     </ItemGroup>
     <ItemGroup>
@@ -488,6 +485,8 @@
         <Folder Include="Resources\Phone\PersonalCenter\FacePassage\" />
         <Folder Include="Resources\Phone\FunctionIcon\Electrical\AirSwitch\" />
         <Folder Include="Base.lproj\" />
+        <Folder Include="Resources\Phone\FunctionIcon\CAC\" />
+        <Folder Include="Resources\Phone\FunctionIcon\Panel\" />
     </ItemGroup>
     <ItemGroup>
         <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -1389,6 +1388,24 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\EnvironmentalScience\HistoryOpionBg3.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\EnvironmentalScience\HistoryOpionBg4.png" />
       <BundleResource Include="Resources\Phone\Collection\FunctionOfflineBg.png" />
+      <BundleResource Include="Resources\Phone\Public\MsgIcon\CallIcon.png" />
+      <BundleResource Include="Resources\Phone\Public\MsgIcon\AnswerIcon.png" />
+      <BundleResource Include="Resources\Phone\Public\MsgIcon\HangUpIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\CAC\DataIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\CAC\JinMaoIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\hvaccac.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\hvaccac_blue.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\hvaccac_white.png" />
+      <BundleResource Include="Resources\Phone\Public\dialogBg2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\sensorhelp.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_blue.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_white.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelHelpAlarmBgIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelHelpNormalBgIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\screenpanel.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelEnviBg.png" />
+      <BundleResource Include="Resources\Phone\MusicIcon\order.png" />
+      <BundleResource Include="Resources\Phone\MusicIcon\single_cycle.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index bdc5402..1b4e185 100644
--- a/HDL-ON_iOS/Info.plist
+++ b/HDL-ON_iOS/Info.plist
@@ -100,9 +100,9 @@
 	<key>UIStatusBarStyle</key>
 	<string>UIStatusBarStyleLightContent</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.5.502205201</string>
+	<string>1.5.502205241</string>
 	<key>CFBundleVersion</key>
-	<string>1.5.505201</string>
+	<string>1.5.505241</string>
 	<key>NSLocationWhenInUseUsageDescription</key>
 	<string>Use geographic location to provide services such as weather</string>
 	<key>NSAppleMusicUsageDescription</key>
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 73f20e4..aa18fb0 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -518,6 +518,17 @@
 530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
 531=Password free unlocking within five minutes
 532=The device is offline and cannot be operated temporarily
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=In Alarm
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=Room Humidity
@@ -727,7 +738,7 @@
 5015=Bluetooth
 5016=Line input
 5017=Revise the name
-5018=Single
+5018=Single loop 
 5019=Random play
 5020=List
 5021=Has shifted to
@@ -757,6 +768,8 @@
 5045=General volume
 5046=Adjust volume
 5047="QQ music" has not installed in your cell phone, please proceed in App center.
+5048= Progressive cycle
+5049=Single play
  
 6000=normal
 6001=Device status
@@ -1030,6 +1043,12 @@
 7152=Leave or arrive at a place
 7153=Leave
 7154=Arrive
+7155=Distress/Normal
+7156=Distress
+7157=whether to unlock
+7158=is
+
+
 
 
 
@@ -1659,9 +1678,18 @@
 530=涓洪槻姝㈠紑鍏抽棬鐨勮瑙︾偣鍑伙紝淇濊瘉瀹跺涵瀹夊叏锛岃杈撳叆鎮ㄧ殑闂ㄩ攣寮�闂ㄥ瘑鐮併��
 531=浜斿垎閽熷唴鍏嶅瘑鐮佸紑閿�
 532=璁惧绂荤嚎涓紝鏆傛椂鏃犳硶鎿嶄綔
-533=璁垮绠$悊
-
-
+533=24灏忔椂缁熻鍥�
+534=鏁版嵁
+535=闇茬偣娓╁害
+536=娓╁害缁熻鍥�
+537=婀垮害缁熻鍥�
+538=鍗曚綅
+539=鏅鸿兘闈㈡澘
+540=鎶ヨ涓�
+541=鐩戞帶涓�
+542=寰樺緤鎶ヨ
+543=鑾峰彇鏇村
+ 
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
 1002=璐熺瀛�
@@ -1871,7 +1899,7 @@
 5015=钃濈墮
 5016=绾胯矾杈撳叆
 5017=淇敼鍚嶇О
-5018=鍗曟洸鎾斁
+5018=鍗曟洸寰幆鎾斁
 5019=闅忔満鎾斁
 5020=鍒楄〃鎾斁
 5021=宸插垏鎹㈠埌
@@ -1901,6 +1929,8 @@
 5045=鎬婚煶閲�
 5046=璋冭妭闊抽噺
 5047=浣犳墜鏈烘殏鏈畨瑁�"QQ闊充箰"{\r\n}璇峰墠寰�鎵嬫満鍟嗗満瀹夎
+5048=寰簭寰幆
+5049=鍗曟洸寰幆
  
  
 6000=姝e父
@@ -2155,7 +2185,10 @@
 7152=绂诲紑鎴栧埌杈炬煇鍦�
 7153=绂诲紑
 7154=鍒拌揪
-
+7155=姹傛晳/姝e父
+7156=姹傛晳
+7157=鏄惁寮�閿佹椂
+7158=鏄�
 
 
  
@@ -2783,7 +2816,17 @@
 530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
 531=Password free unlocking within five minutes
 532=The device is offline and cannot be operated temporarily
-
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=袧芯褉屑邪谢褜薪褘泄
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=袙谢邪卸薪芯褋褌褜 胁 袩芯屑械褖械薪懈懈
@@ -3405,3 +3448,1147 @@
 10031=校褋褌褉芯泄褋褌胁芯 薪械 写芯谢卸薪芯 斜褘褌褜 锌褍褋褌褘屑.
 10032=校 锌芯谢褜蟹芯胁邪褌械谢褟 薪械褌 褉邪蟹褉械褕械薪懈褟.
 10033=校褋褌褉芯泄褋褌胁芯 薪械 褋褍褖械褋褌胁褍械褌.
+
+
+
+[Spanish]
+1=Ingresar
+2=N煤mero de tel茅fono
+3=Luz
+4=Correo
+5=Por favor ingrese numero de cuenta 
+6=Contrase帽a
+7=Olvidar
+8=Registrarse
+9=Iniciar sesi贸n
+10=Espere鈥�
+11=Cerrar
+12=C贸digo de verificaci贸n
+13=Contrase帽a de acceso
+14=Registrarse
+15=N煤mero de tel茅fono
+16=Ingrese la contrase帽a
+17=Ingrese la contrase帽a nuevamente
+18=C贸digo de verificaci贸n
+19=N煤mero de tel茅fono incorrecto, ingrese nuevamente
+20=L a contrase帽a y la confirmaci贸n no coinciden. Ingrese la contrase帽a nuevamente
+21=El formato de la contrase帽a no cumple con los requisitos. Ingrese la contrase帽a nuevamente
+22=El usuario ya existe. Puede ingresar directamete
+23=C贸digo de verificaci贸n incorrecto, vuelva a ingresarlo. 
+24=N煤mero de cuenta incorrrecta, por favor ingrese el correo correcto 
+25=Correo
+26=Residencia
+27=Miembro
+28=Desarmar
+29=Armar
+30=Copia de seguridad
+31=Funci贸n auxiliar
+32=A帽adir funciones
+33=Modo noche
+34=Configuraci贸n general
+35=Soporte
+36=Casa
+37=Categor铆a
+38=Inteligente
+39=Individual
+40=Inicio de sesi贸n fallido, n煤mero de cuenta o contrase帽a incorrectos
+41=Error al enviar el codigo de verificaci贸n
+42=Error de red
+43=Error en el registo, int茅ntelo de nuevo
+44=Confirmar reinicio
+45=El numero de cuenta no existe, por favor aseg煤rese de estar registrado
+46=Inicio de sesion inv谩lido, iniciar sesion nuevamente
+47=Centro Personal
+48=Nombre
+49=C贸digo QR
+50=Tel茅fono
+51=Correo
+52=No enlazado
+53=Autorizaci贸n de terceros
+54=Cambiar contrase帽a
+55=Configuraci贸n de desbloqueo
+56=Establecer contrase帽a, gesto, huella digital o identificaci贸n facil para proteger su provacidad
+57=Salir
+58=Habitaci贸n
+59=Equipo
+60=Funci贸n
+61=Brillo
+62=Configuraci贸n
+63=Locaci贸n 
+64=Compartir 
+65=A帽adir acceso directo al escritorio
+66=Cambiar nombre
+67=Cancelar 
+68=Confirmar 
+69=Todo
+70=Cortina
+71=Nombre
+72=Address
+73=Gesti贸n de plantas
+74=Gesti贸n de habitaciones
+75=Migraci贸n de administrador 
+76=Migraci贸n de privilegios 
+77=Priviligio de depuraci贸n
+78=El administrador migra a otro usuario
+79=Toda los datos de la residencia migran al nuevo usuario
+80=Permitir que el personal visite su casa de forma remota
+81=Piso
+82=A帽adir piso
+83=Cambiar nombre de piso
+84=Error al a帽adir, el piso ya existe
+85=Escena 
+86=Borrar 
+87=Inmediata
+88=Eliminar el piso o no? 
+89=A帽adir habitaci贸n 
+90=Cmabiar la informacion de la habitaci贸n 
+91=Informaci贸n de la habitanci贸n 
+92=Nombre
+93=Piso
+94=Gesti贸n funcionamiento
+95=Guardar
+96=Eliminar la habitaci贸n 
+97=Galeria por defecto 
+98=Camara
+99=Seleccionar de la galeria 
+100=No asignado 
+101=Asignado
+102=No asignado 
+103=Eliminar la habitaci贸n o no? 
+104=Tiempo de transici贸n 
+105=Temperatura interna 
+106=AC
+107=Videoportero
+108=Sensor
+109=Monitor de seguridad 
+110=Panel Inteligente
+111=Musica 
+112=Aire fresco 
+113=Ambiental 
+114=Monitoreo de energ铆a 
+115=Electrodom茅sticos
+116=Bloqueo inteligente 
+117=Calefacci贸n 
+118=Abrir 
+119=Refrigeraci贸n 
+120=Calefacci贸n 
+121=Deshumidificar
+122=Auto
+123=Suministro de aire
+124=Alto 
+125=Medio 
+126=Bajo 
+127=Modo
+128=Velocidad del ventilador 
+129=Estas seguro de apagar todas las funciones de la habitaci贸n? 
+130=Abierta
+131=A帽adido a favoritos
+132=Felicitaciones! Registro exitoso 
+133=Inicio de sesion autom谩tico pronto鈥�.
+134=El numero de no esta registrado, por favor registrese e ingrese nuevamente
+135=Por favor, obtener codigo de verificaci贸n 
+136=La contrase帽a ha sido cambiada
+137=La direccion rsidencial no puede estar en blanco 
+138=El nombre de la residencia no puede estar en blanco 
+139=El nombre de la habitaci贸n no puede estar en blanco 
+140=El nombre del piso no puede estar en blanco 
+141=No se pudo revisar, el piso ya existe
+142=El nombre del equipo no puede estar en blanco 
+143=El nombre del usuario no puede estar en blanco 
+144=Nombre de usuario 
+145=Seleccione la p谩gina para bloquear 
+146=Puede seleccionar varias paginas que le gustaria mantener
+147=Error en codigo de verificaci贸n
+148=No protegido 
+149=Cuando empieza 
+150=Armar/Desarmar 
+151=Desbloquear remotamente 
+152=No se necesita contrase帽a/gesto al iniciar el software
+153=Iniciar sesi贸n 5 minutos despues de salir de la p谩gina, se requiere el m茅todo de desbloqueo correspondiente.
+154=Centro de miembros - utiliza para debloquear la funci贸n de seguridad como armar/desarmar
+155=Usado para desbloquear la cerradura inteligente 
+156=Configuraci贸n de desbloqueo
+157=Solo valido para host
+158=Desbloquear con contrase帽a
+159=Desbloquear con gesto 
+160=Desbloquear con huella 
+161=Desbloquear con identificaci贸n facial 
+162=Configuraci贸n de contrase帽a num茅rica
+163=Configuraci贸n exitosa
+164=Configuraci贸n de gestos
+165=Por favor dibuja tu patron de desbloqueo
+166=Requiere al menos una conexi贸n de 4 puntos, dibuje nuevamente 
+167=El patron y la corfirmacion que dibujaste no coincide, dibuje nuevamente
+168=Por favor dibuje su patr贸n nuevamente
+169=Desbloquear con huella o no? 
+170=Desbloquar con identificacion facial o no? 
+171=Verificar la contrase帽a num茅rica 
+172=Verificar el gesto 
+173=Por favor ingrese el gesto original 
+174=Por favor ingrese la contrase帽a num茅rica original 
+175=Verificaci贸n fallida, error en la contrase帽a
+176=Cambiar la contrase帽a num茅rica 
+177=Cambiar el gesto 
+178=Cerrar la configuraci贸n de desbloqueo o no? 
+179=Por favor verifique la huella 
+180=Verificaci贸n fallida, error en el gesto
+181=General 
+182=Dia 
+183=Noche 
+184=Abandonar 
+185=Por favor enlace el piso
+186=Ajuste de la velocidad del ventilador 
+187=Ventilador 
+188=Enchufe 
+189=Nivel 
+190=Chl
+191=Vol
+192=TV
+193=La habitanci贸n existe, error al cambiar 
+194=Medio Ambiente
+195=Contaminaci贸n fuerte
+196=Contaminaci贸n leve 
+197=Bueno
+198=Excelente
+199=Frio helado
+200=Frio
+201=Frio
+202=Confort
+203=Tibio 
+204=Caliente
+205=Extremadamente caliente 
+206=Hasta el estandar 
+207=Contaminaci贸n leve 
+208=Contaminaci贸n media
+209=Contaminaci贸n fuerte
+210=Fresco 
+211=Turbidez
+212=Hipoxia
+213=Hipoxia severa
+214=H煤medo 
+215=H煤medo 
+216=Seco 
+217=Temperatura
+218=Humedad 
+219=Rango 
+220=Nivel 
+221=Valor de color 
+222=PM1.0
+223=PM2.5
+224=Ruido
+225=Fuerza del viento
+226=CO2
+227=TV02
+228=Dia 
+229=Semana
+230=Mes
+231=Otra regi贸n 
+232=Administraci贸n de miembros 
+233=Apodo 
+234=Autoridad Administrativa
+235=Crear una escena
+236=Apodo no puede quedar en blanco 
+237=Editar apodo 
+238=La regi贸n utilizada 
+239=A帽adir miembro 
+240=Por favor ingrese el n煤mero de cuenta del miembro 
+
+241=Escanear codigo QR 
+242=Confirmar la invitaci贸n 
+243=Error en n煤mero de cuenta, por favor chequear 
+244=Agregue correctamente al miembro
+245=Error de datos, por favor intente de nuevo 
+246=Error al a帽adir, el numero de cuenta del miembro no esta registrada
+
+247=No puedes agregarte a ti mismo.
+248=El usuario no existe en esta residencia 
+249=Se ha agregado el n煤mero de cuenta del miembro, por lo que no se puede volver a agregar.
+
+250=Error de operaci贸n 
+251=Error al agregar, autoridad no valida 
+252=Guardado correctamente
+253=Guardando鈥spere un momento. 
+254=Adopo editado 
+255=Eliminar este miembro 
+256=Sin favoritos 
+257=Introduzca el contenido 
+258=Bienvenido al nuevo miembro 
+259=Esta seguro de elimianr este miembro? 
+260=Introduzca la contrase帽a de inicio de sesi贸n 
+261=Cambio de residencia exitoso
+262=Seleccionar todo 
+263=Compartir la selecci贸n funcional 
+264=Confirmar uso compartido 
+265=Compartir en 
+266=Error de uso compartido funcional 
+267=Uso compartido funcional exitoso 
+268=Correo 
+269=Cambiar el enlace 
+270=Eliminar el enlace
+271=Correo 
+272=Cambiar la direcci贸n de correo 
+273=Cambiar el m茅todo de verificaci贸n 
+274=El c贸digo de verificaci贸n ha sido enviado, por favor ingrese
+275=Reenviar 
+276=Verificaci贸n correcta 
+277=Correo 
+278=Por favor ingrese el nuevo correo 
+279=Enlazar correctamente su correo electr贸nico a su cuenta
+280=No vincular su correo electr贸nica a su cuenta 
+281=Eliminar el enlace de correo electr贸nico 
+282=Eliminaci贸n correcta de enlace 
+283=N煤mero de telefono
+284=N煤mero de telefono
+285=N煤mero de telefono
+286=Vincular correctamente su numero de tel茅fono a su cuenta
+287=No puede vincular su numero de tel茅fono a su cuenta 
+288=Cambiar el enlace 
+289=Quitar el enlace 
+290=No se puede obtener el historial 
+291=Sin favoritos 
+292=Acerca de ON+
+293=Miembro
+294=Administrador 
+295=Cambiar la contrase帽a
+296=Antes de cambiar la contrase帽a iniciar sesion
+297=Por favor verifique ID
+298=Verificaci贸n telefonica 
+299=Verificaci贸n de correo electronico 
+300=No se ha enlazado a la direcci贸n de correo electronico, no puede verificar 
+301=No se ha enlazado a un numero telefonico, no se puede verificar  
+302=Proceder al enlace 
+303=Eliminado correctamente el enlace a su numero de telefono 
+304=El codigo de verificaci贸n se ha enviado a: 
+305=Telefono 
+306=Correo 
+307=Recibi贸 nuevos datos, esta seguro de anularlos? 
+308=Automatizaci贸n 
+309=Crear una escena
+310=A帽adir escena 
+311=Configuraci贸n basica 
+312=Nombre
+313=Region 
+314=Completo
+315=Vista completa de la residencia
+316=Sleccionar 
+317=Ya a帽adido
+318=Conmutador 
+319=Velocidad del ventilador 
+320=Modo
+321=Encendido
+322=Apagado
+323=Escena 
+324=Retardo de escena
+325=Configuraci贸n de retardo
+326=Retardo 
+327=Capturar la escena
+328=Escena de pelicula 
+329=General 
+330=Modo autom谩tico 
+331=Potencia calentamiento suelo
+332=Refrigeraci贸n suelo
+333=Potencia de refrigeraci贸n del suelo
+334=Ajustar el porcentaje
+335=Sin retardo
+336=No hay escena disponible. A帽ade uno! 
+337=Editar la escena
+338=El nombre de la escena no puede estar en blanco
+339=El nombre de la escena ya existe, por favor revise 
+340=El nombre de la habitaci贸n ya existe, por favor revise
+341=Eliminar esta escena o no? 
+342=La puerta de enlace esta fuera de linea, falla de conexi贸n remota
+343=Error MAC, error de conexi贸n remota. 
+344=Error de conexi贸n remota. 
+345=Telefono 
+346=Correo 
+347=Ingrese el nuevo numero de telefono ceular 
+348=Ya se ha utilizado el numero de telefono celular 
+349=Ya se ha utilizado la direccion de correo electronico 
+350=La direcci贸n de correo electr贸nico es la misma que la actual, sin necesidad de cambiar.
+351=El n煤mero de tel茅fono es la mismo que la actual, sin necesidad de cambiar.
+352=Asignaci贸n de piso 
+353=Separar 
+354=Cerrar
+355=Acerca de
+356=Numero de version 
+357=Esta funcion no esta disponible! 
+358=Telefono 
+359=Correo 
+360=Escena de panel 
+361=No a帽adido
+362=Seleccionar todo 
+363=No se puede comunicar con el servidor, no se puede editar la informaci贸n del dispositivo
+364=No se puede comunicar con el servidor, no se puede editar la informaci贸n de la habitaci贸n
+365=No se puede comunicar con el servidor, no se puede editar la informaci贸n de la escena
+366=No se puede comunicar con el servidor, no se puede eliminar la escena
+367=No se puede comunicar con el servidor, no se puede eliminar el piso
+368=Bienvenido a disfrutar de ON+ 
+369=A帽adir residencia
+370=Convi茅rtete en miembro de la familia
+371=No se puede utilizar la funcion, por favor verifique su conexi贸n 
+372=No se puede crear una escena, por favro verifique su conexi贸n 
+373=Error al agregar un piso 
+374=Los datos residenciales se han eliminado, APP cambiar谩 autom谩ticamente a otra residencia.
+375=El gateway no esta conectado al servidor, no se puede crear la escena 
+376=No se puede introducir un car谩cter especial
+377=Toda la residencia 
+378=Tiempo de transici贸n 
+379=Velocidad de transicion 
+380=Esta funcion no esta disponible! 
+381=Recargar
+400=Bienvenido a casa
+401=Codigo de barras no v谩lido, intentelo de nuevo 
+402=Int茅ntelo de nuevo
+403=Temperatura de color 
+404=Ajuste r谩pido 
+405=Acogedor 
+406=Reuni贸n 
+407=Lectura
+408=A帽adir
+409=Marca de funci贸n 
+410=No ha agregado ningun dispositov de pataforma en la actualidad 
+411=Otros dispositivos de plataforma son compatibles con proveedores de serviciso externos 
+412=A帽adir
+413=Controlador no activado
+414=Controlador activado
+415=Alguien
+416=Registro
+417=Fuga de agua 
+418=En alarma 
+419=Normal 
+420=Seco caliente
+421=Secado al aire
+422=Desinfectar
+423=Iluminaci贸n
+424=Tiempo
+425=Tiempo seco caliente
+426=Tiempo de secado al aire
+427=Tiempo de desinfecci贸n 
+428=Tiempo Ani贸n
+429=H
+430=Min
+431=Actualmente esta agregando cualquier dispositivos de plataforma a
+432=Otros dispositivos de plataforma son compatibles con proveedores de serviciso externos 
+433=Valvula de agua 
+434=Interruptor de tiempo
+435=Control remoto 
+436=Dispositivos a帽adido 
+437=Lista de dispositivos 
+438=humedad:{0}% aire:viento {1}:{2}
+439=Tiempo real: {0} kw
+440=Siguiente paso
+441=Seleccione todas las 谩reas de estado de captura
+442=Generar escena
+443=Implementaci贸n personalizada
+444=Centro de seguridad
+445=Defensa de la casa
+446=Defensa en casa
+447=Defensa de vacaciones 
+448=Implementaci贸n fija 
+449=*Deshacer defensa no afecta
+450=Defensa contra desastres
+451=Defensa de 24 horas 
+452=Alarma antirrobo
+453=Silenciar alarma
+454=Informaci贸n de implementaci贸n
+455=El nombre no puede estar en blanco 
+456=Lienzo
+457=Consumo de energ铆a 
+458=Fecha
+459=Consumo de energ铆a en tiempo real 
+460=Consumo energ茅tico de este mes 
+461=Exterior/Interior
+462=Aun no has a帽adido ningun dispositivo
+
+463=Introduzca el c贸digo SN del dispositivo
+464=Puede empezar a usar la onda milim茅trica Zhaoguan
+465=Eliminar dispositivo
+466=STB
+467=Proyector
+468=Alguien cay贸
+469=Alguien est谩 en
+
+470=Bajo protecci贸n 
+471=Sensor de onda milim茅trica
+472=Exterior
+473=Columpio 
+474=Oscilaci贸n hacia arriba y hacia abajo 
+475=Gira a izquierda y derecha
+476=A帽adir residencia 
+477=Columpio 
+478=Patr贸n
+479=Velocidad
+480=Sensor ambiental 
+481=Puede empezar a usar el sensor ambiental 
+482=Sensor de gas
+483=Introduzca el c贸digo MAC del dispositivo
+484=Abierto
+485=Comprobar/Modificar
+486=Funci贸n de defensa/Estado de alarma 
+487=Objetivo de alarma despues de la activaci贸n 
+488=Paso de rostro
+489=Aplicar identificaci贸n facil a: 
+490=Control de acceso a la comunidad
+491=Acerda de identificacion facil y privacidad 
+492=Borrar datos 
+493=Resetear identificaci贸n facial 
+494=Establecer identificaci贸n facial 
+495=Configuraci贸n paso de rostro
+496=No hay ningun estado de implementacion de tareas asociado 
+497=Personalizado
+498=Implementaci贸n retrasada
+499=Agregar funci贸n de defensa
+500=Agregar destino de alarma
+501=Alarma de seguridad: se activa en {0}
+502=Borrar la alarma de seguridad?
+503=Exceso de estandar 
+504=Bueno
+505=Excelente
+506=Indentificacion facil ingresada correctamente
+507=Ingreso identificaci贸n facil fallida
+508=Formaldeh铆do
+509=Introduzca el nombre de seguridad
+510=Seleccione el destino de implementaci贸n 
+511=Atenuaci贸n combinada
+512=Mensajes no estan habilitados, vaya a configuraci贸n
+513=Introduzca el codigo de emparejamiento
+514=La informaci贸n de la ubicaci贸n del gateway no est谩 configurada
+515=Agregar seguridad
+516=Withdrawal
+------
+517=Instantaneous value
+518=Cumulative power consumption
+519=Voltage (V)
+520=Electric Current (A)
+521=Power (W)
+522=Refresh
+523=Delay alarm
+524=Bypass
+525=Enable
+526=Cancel account
+527=Homekit support notes
+528=Firmware update
+529=
+530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
+531=Password free unlocking within five minutes
+532=The device is offline and cannot be operated temporarily
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics  
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=En alarma
+541=Monitoring
+542=Wandering alarm
+543=Get more
+
+1000=Humedad de ambiente
+1001=V-chip
+1002=Ani贸n
+1003=Estirilizaci贸n
+1004=Humidificar
+1005=Restablecimiento del elemento de filtro
+1006=Iluminaci贸n
+1007=Autom谩tico
+1008=Manual
+1009=Fuerte
+1010=Dormir
+1011=Tiempo
+1012=Velocidad del viento
+1013=Engranaje 
+1014=Confirme si el elemento filtrante se ha restablecido y opere el equipo de acuerdo con el manual de instrucciones para que la vida 煤til del elemento filtrante se vuelva a cronometrar
+1015=Marcha baja
+1016=Engranaje medio
+1017=Marcha alta
+1018=Configuraci贸n de temportizaci贸n 
+1019=Hora
+1020=Tiempo del elemento de filtro: 
+1021=Filtro de aire
+1022=Velocidad actual del viento 
+1023=Cancelar tiempo 
+1024=Robot de barrido de pisos 
+1025=Succi贸n 
+1026=1掳 Marcha 
+1027=2掳 Marcha 
+1028=3掳 Marcha 
+1029=Carga 
+1030=Voz 
+1031=Silenciar 
+1032=Modo de limpieza
+1033=Gestion de consumibles
+1034=Historia
+1035=Autom谩tico
+1036=Aleatorio
+1037=Muro
+1038=Espiral
+1039=脕rea total limpia
+1040=Tiempo total de limpieza
+1041=Vida 煤til restante del cepillo lateral 
+1042=Vida 煤til residual del cepillo de rodillos 
+1043=Vida 煤til restante de la pantalla de filtro
+1044=Restablecer pincel de bordes
+1045=Restablecer cepillo de rollo
+1046=Restablecer pantalla
+1047=Confirmar para restablecer el pincel de bordes? 
+1048=Confirmar para restablecer el cepillo de rollo? 
+1049=Confirmar para restablecer la pantalla? 
+1050=Agregar dispositivo
+1051=Mini control remoto inteligente
+1052=Agregar control remoto por infrarrojos 
+1053=Presione el bot贸n del control remoto infrarrojo{0} durante 3 segundos y la luz indicadora{0} se enciende en azul r谩pidamente
+1054=Aseg煤rese de que su Bluetooth{0} est茅 activado y se pueda buscar
+1055=Siguiente paso
+1056=Buscando dispositivo鈥�
+1057=No se ha encontrado ning煤n mando a distancia por infrarrojos
+1058=1.Compruebe si el dispositivo est谩{0} encendido normalmente{0}2.Compruebe si la funci贸n Bluetooth{0} est谩 activada normalmente{0}3.Compruebe si el indicador{0} luz parpadea en azul
+1059=Buscar de nuevo
+1060=Conectar WiFi
+1061=En la actualidad, solo es compatible con la red WiFi 2.4G{0} y no admite nombres WiFi{0} con caracteres chinos
+1062=Contrase帽a
+1063=Conectando鈥�
+1064=Haga que el control remoto por infrarrojos{0} lo m谩s cerca posible del enrutador WiFi
+1065=Enlace de red
+1066=Subir a nube
+1067=Conectado con 茅xito 
+1068=1.Compruebe si el dispositivo est谩{0} encendido normalmente{0}2.Active la funci贸n Bluetooth{0}3.Presione el bot贸n durante 10 s y el indicador{0} luz estar谩 encendida
+1069=Error al agregar 
+1070=Agregado con 茅xito
+1071=隆Puedes empezar a usar el control infrarrojo{0}remote!
+1072=Empezar a usar 
+1073=Por favor encender Bluethooth
+1074=Informaci贸n de ubicaci贸n (GBS) no disponible
+1075=Red no disponible
+1076=Seleccione el mando a distancia por infrarrojos
+1077=Aire fresco
+1078=Pantalla de filtro residual 
+1079=Energia 
+1080=Ventilado
+;鍒�
+1081=1掳 Marcha 
+1082=2掳 Marcha 
+1083=3掳 Marcha 
+1084=1掳 Marcha 
+1085=2掳 Marcha 
+1086=3掳 Marcha 
+1087=Desbloquear 
+1088=Temp. Contrase帽a
+1089=Conectado 
+1090=Desconectado 
+1091=Generar 
+1092=Tiempo efectivo 
+1093=Tiempo de caducidad
+1094=Seleccionar hora 
+1095=Seleccionar fecha
+1096=Generar 
+1097=Se ha copiado la contrase帽a actual 
+1098=Borrar contrase帽a?
+1099=El tiempo de caducidad debe ser posterior al tiempo efectivo 
+1100=M茅todo de desbloqueo
+1101=Se sincronizar谩 con el bloqueo real, 驴confirmar para eliminar?
+1102=Borrar 
+1103=Comentar 
+1104=El comentario no puede estar en blanco
+1105=Asignar a: 
+1106=Escena de destino no existe 
+1107=Seleccionar escena
+1108=Desbloquear 
+1109=Siempre encendido
+1110=Configuraci贸n
+1111=Automatizaci贸n 
+1112=Activar el modo "Siempre encendido" 
+1113=Desactivar el modo "Siempre encendido"
+1114=Editar 
+1115=Siempre Encendido estar谩 apagado {0}
+1116=Condici贸n
+1117=Movimiento 
+1118=Siempre encendido
+1119=Bloquear 
+1120=Usuario
+1121=M茅todo de desbloqueo
+1122=Huella digital 
+1123=Tarjeta 
+1124=Clave
+1125=Informaci贸n
+1126=Desbloquear 
+1127=Alarma 
+1128=Sin conexi贸n 
+1129=Para el primer usuario, introduzca la contrase帽a.
+1130=Introduzca la contrase帽a de administrador
+1131=Enlace correcto
+1132=Saltar a la contrase帽a personal para desbloquear 
+1133=Saltar 
+1134=Por favor, dibuja tu patr贸n 
+1135=El bloqueo estar谩 siempre encendido despu茅s de la configuraci贸n, confirme para continuar
+1136=Confirmar 
+1137=Caducar 
+1138=Siempre Encendido caducar谩 despues de {0} horas
+1139=Introduzca el tiempo de caducidad 
+1140=El tiempo de caducidad no debe ser superior a 72 horas
+1141=El tiempo de caducidad no debe ser inferior a 1 hora
+1142=Error al establecer conexi贸n, intentelo de nuevo 
+1143=No se puede verificar el ID de administrador, vuelva a iniciar sesi贸n en la cuenta
+1144=Su residencia est谩 siendo migrada a otro HDL
+1145=Nota: 
+1. Todos sus datos de residencia se migrar谩n a un nuevo usuario. {0} 2. Despu茅s de la migraci贸n, el miembro original ser谩{0}autom谩ticamente desvinculado de esta residencia. {0} 3. La nueva cuenta es una HDL v谩lida. {0} 4. La cuenta del receptor no puede ser la misma{0} que la del lado de la migraci贸n.
+1147=Confirmar 
+1148=Cuenta del receptor de entrada
+1149=Perfil 
+1150=Confirmar migraci贸n de administrador de {0} a {1}
+1151=La cuenta no existe
+1152=No transferir la propiedad a usted mismo
+1153=Terminar
+1154=Transferir al usuario, por favor espere...
+1155={0} se ha convertido en administrador residencial
+1156=Los datos de residencia se eliminar谩n de su cuenta
+1157=No se puede migrar
+1158=Int茅ntelo de nuevo
+1159=Migraci贸n de la autoridad de administraci贸n
+1160=Su autoridad de administraci贸n se est谩 migrando a otros miembros
+1161=1.Sus datos (datos en la nube) de la residencia ser谩n{0}migrabados al nuevo administrador{0}2.Sus datos se intercambiar谩n con el miembro objetivo{0}y su permiso se cambiar谩 al miembro objetivo{0}
+1162=Confirmar
+1163=No hay miembros para elegir
+1164=Confirmar la migraci贸n de la autoridad de administraci贸n de {0} a {1}
+1165=Migrar correctamente
+1166=No se puede migrar
+1167=Migrar correctamente, y sus permisos se convertir谩n en miembros normales
+
+4000=Videoportero
+4001=Registro de llamadas 
+4002=*Los registros en la nube solo se conservan durante 30 d铆as
+4003=Llamada telef贸nica a domicilio
+4004=Contestado
+4005=Desbloqueado
+4006=A帽o
+4007=De
+4008=Llamada
+4009=Desbloqueado
+4010=Perdido
+4011=Rechazado
+4012=隆Los par谩metros de configuraci贸n son anormales!
+4013=C贸digo QR de control de acceso
+4014=Contrase帽a temporal 
+
+
+
+
+
+5000=Musica 
+5001=Grupo 
+5002=Configuracion 
+5003=Informaci贸n general 
+5004=Reproductor multimedia 
+5005=Bluetooth
+5006=Region 
+5007=Lista de canciones
+5008=Mis favoritos
+5009=Mi lista 
+5010=Seleccionar fuente 
+5011=Local
+5012=USB
+5013=Radio en linea
+5014=QQ musica
+5015=Bluetooth
+5016=Entrada de linea 
+5017=Revisar el nombre 
+5018=Individual
+5019=Juego aleatorio
+5020=Lista
+5021=Ha cambiado a: 
+5022=Cancelar 
+5023=Borrar 
+5024=Editar 
+5025=El nombre de la lista es el mismo
+5026=El nombre de la lista esta en blanco 
+5027=Introduzca el nombre de la lista 
+5028=Agregar nueva lista 
+5029=Preguntar 
+5030=Eliminar la carpeta o no? 
+5031=Confirmar 
+5032=El nombre est谩 en blanco 
+5033=A帽adido a la lista de canciones
+5034=Radio
+5035=Seleccionar grupo 
+5036=Play
+5037=Seleccione al menos mas de 2 reproductores multimedia
+5038=No se pueden seleccionar 2 o m谩s de 2 reproductores multimedia principales para convertirse en un grupo
+5039=No ha seleccionado el reproductor multimedia 
+5040=Seleccione esta opci贸n para quitar el reproductor multimedia 
+5041=No se ha seleccionado quitar el reproductor multimedia 
+5042=Configurando 
+5043=Borrando鈥�
+5044=Volumen
+5045=Volumen general
+5046=Ajustar volumen 
+5047="QQ music" no se ha instalado en su tel茅fono celular, proceda en el Centro de aplicaciones.
+
+6000=Normal 
+6001=Estado del dispositivo
+6002=piezas
+6003=Dispositivo de control IR actual
+6004=Se ha a帽adido el mando a distancia 
+6005=AC
+6006=TV 
+6007=Ventilador 
+6008=Decodificador
+6009=DVD
+6010=Proyector 
+6011=Personalizado
+6012=IR Control
+6013=Administraci贸n de dispositivos 
+6014=Agregar mando de distancia
+6015=En linea 
+6016=Sin conexi贸n 
+6017=N煤mero de version
+6018=Introduzca el nombre de mando a distancia 
+6019=Recordatorio: Despu茅s de crear el mando a distancia, se puede encontrar y utilizar en Function-Electrical Category{\r\n}
+6020=Boton recomendado
+6021=Introduzca el nombre del bot贸n 
+6022=Siguiente
+6023=Potencia
+6024=Volumen+
+6025=Volumen-
+6026=Channel+
+6027=Channel-
+6028=Subir 
+6029=Bajar
+6030=Izquierda
+6031=Derecha
+6032=Silenciar
+6034=Confirmar
+6035=Reproducir
+6037=Salir 
+6038=Menu
+6039=Pausar
+6040=Volver
+6041=Detener
+6042=Pagina de inicio
+6043=Avance r谩pido 
+6044=Rebobinar 
+6045=Tiempo 
+6046=Copiar funcion de control remoto
+6047=Apunta al centro del mando a distancia y pulsa el mismo bot贸n
+6048=Mando a distancia inteligente
+6049=Agregar bot贸n 
+6050=*Pulsaci贸n larga para la clasificaci贸n personalizada
+6051=Hecho
+6052=Agregado correctmente 
+6053=Se puede clasificar -funcion-operaci贸n electrica y uso 
+6054=Clasificaci贸n
+6055=Nombre del mando a distancia 
+6056=Regi贸n 
+6057=Continuar agregando
+6058=El茅ctrico
+6059=Error al agregar 
+6060=Reintentar
+6061=Hacer coincidir el mando a distancia
+6062=Haga clic en el bot贸n de abajo
+6063=Confirmar si el dispositivo esta respondiendo
+6064=Error de control 
+6065=Control exitoso 
+6066=Encendido 
+6067=Modo de enfriamiento
+6068=
+6069=Temperatura 26掳
+6070=Eliminar dispositivo
+6071=Modificar nombre
+6072=Confirmar eliminaci贸n 
+6073=Cancelar
+6074=El mando a distancia no puede superar los 10 puntos
+6075=El 谩rea donde pertenece el control remoto: 
+6076=Editar informaci贸n
+6077=Actualizaci贸n de la versi贸n 
+6078=El sistema est谩 en mantenimiento ~ Int茅ntelo de nuevo m谩s tarde ~
+6079=Error al obtener datos
+6080=Esta funcion no se admite temporalmente
+6081=Seleccionar banda IR
+6082=
+6083=Baja velocidad
+6084=Interruptor de velocidad del viento
+6085=Alta velocidad 
+6086=Auto
+6087=Temperatura+
+6088=Temperatura-
+6089=Purificador de aire
+6090=Calentador de agua
+6091=Producto no existe
+6092=El dispositivo no existe
+6093=El dispositivo no esta en linea
+6094=El dispositivo de puerta de enlace no existe
+6095=Mas de 30 botondes de adici贸n 
+6000=Renombrar
+6001=Introduzca el nombre
+6002=Xiaodu
+6003=aispeech
+6004=El sistema est谩 en mantenimiento ~ Int茅ntelo de nuevo m谩s tarde ~
+6005=Desvinculado
+6006=Altavoz inteligente
+6007=Controlar contenido
+6008=Error al cagar datos 
+6009=Error al configurar datos 
+6010="Todav铆a no hay altavoz", "Vaya a la aplicaci贸n de terceros para vincular el altavoz inteligente".
+6011=La modificaci贸n de los comentarios no tiene 茅xito
+6012=Quieres desvincularte? 
+6013=Desvinculaci贸n 
+6014=transferir a app de terceros 
+6015=A帽adir altavoces
+7000=Crear automatizaci贸n
+7001=Etidar automatizaci贸n
+7002=Si
+7003=Cuando cumple las siguientes condiciones al mismo tiempo
+7004=Cundo cumple una de las condiciones siguintes
+7005=Continuar con la ejecuci贸n 
+7006=L asiguiente acci贸n 
+7007=M茅todo de reciclaje 
+7008=Ejecutar una vez
+7009=Todos los d铆as
+7010=Cada semana 
+7011=Cada mes
+7012=Guardar
+7013=Mensaje push
+7014=Enviar notificaci贸n 
+7015=Seleccionar la condici贸n 
+7016=Momento 
+7017=Seleccione la condici贸n de tiempo 
+7018=Hora
+7019=Intervalo de tiempo 
+7020=Hora 
+7021=Minuto 
+7022=Segundo 
+7023=Cancelar 
+7024=Seguro 
+7025=*Debe ejecutar la automatizaci贸n que establezca una vez durante el intervalo de tiempo establecido.
+7026=Hora de inicio
+7027=Hora de finalizaci贸n 
+7028=Funci贸n
+7029=Seleccionar condici贸n funcional
+7030=Toda la regi贸n 
+7031=Toda la funci贸n 
+7032=Encendido
+7033=Apagado
+7034=Conmutador 
+7035=Completo
+7036=Agregar ejecuci贸n 
+7037=Lunes 
+7038=Martes
+7039=Mi茅rcoles
+7040=Jueves
+7041=Viernes
+7042=S谩bado
+7043=Domingo 
+7044=Cumplir con la condici贸n 
+7045=Configuraci贸n 
+7046=Nombre
+7047=Cambiar el nombre
+7048=El nombre de la automatizaci贸n ya existe 
+7049=Eliminar automatizaci贸n o no? 
+7050=Agregar escena
+7051=Retraso
+7052=No se puede guardar, int茅ntelo de nuevo
+7053=No se puede eliminar, int茅ntelo de nuevo
+7054=Pausar
+7055=Brillo
+7056=Porcentaje 
+7057=Modo
+7058=Enfriamiento
+7059=Calefacci贸n 
+7060=Autom谩tico
+7061=Deshumidificar 
+7062=Temperatura 
+7063=Velocidad de ventilador 
+7064=D铆a 
+7065=Noche 
+7066=Abandonar 
+7067=General 
+7068=Tiempo 
+7069=No ha configurado la automatizaci贸n, procesa a configurar 
+7070=Nada est谩 aqu铆 
+7071=No se ha establecido la hora de inicio, por favor configurar 
+7072=La hora de finalizaci贸n no se ha establecido, por favor estableza 
+7073=La hora de inicio y la hora de finalizacion no deben ser las mismas
+7074=La hora de inicio no debe ser mayor a la hora de finalizaci贸n 
+7075=La condicion no debe estar en blanco 
+7076=Target no debe estar en blanco 
+7077=La hora no se ha establecido, por favor establezca 
+7078=L a condici贸n o el objetivo no deben estar en blanco 
+7079=L a puerta de enlace esta fuera de l铆nea 
+7080=Salida/Puesta de sol/Mediod铆a
+7081=Amanecer 
+7082=Puesta de sol 
+7083=Mediod铆a 
+7084=A tiempo 
+7085=Avance 
+7086=Minutos
+7087=Cambio exterior 
+7088=Seleccionar condicion de cambio al aire libre
+7089=Temperatura exterior, humedad, cambio de PM2.5
+7090=Cambio de clima (clima urbano) 
+7091=Cambio en el entorno exterior 
+7092=Temperatura superior a 
+7093=Temperatura inferior
+7094=Humedad superior a 
+7095=Humedad por debajo 
+7096=PM2.5 supeior a
+7097=PM2.5 por debajo 
+7098=D铆a soleado
+7099=Nublado 
+7100=
+7101=*Establezca el valor en este rango (1 ~ 100).
+7102=Sin valor establecido 
+7103=Excelente: 0 ~ 35ug/m3
+7104=Bueno: 36 ~ 75ug/m3
+7105=Contaminaci贸n lum铆nica: 76 ~ 115ug/m3
+7106=Contaminaci贸n moderada: 116 ~ 150ug/m3
+7107=Contaminaci贸n intensa: > 150ug/m3
+7108=Fuga/Sin fuga
+7109=Fuga
+7110=Sin fuga
+7111=Fuga de agua/sin fugas de agua
+7112=Fuga de agua 
+7113=Sin fuga de agua 
+7114=Alguien/Nadie
+7115=Alguien
+7116=Nadie
+7117=Abierto/Cerrado
+7118=Activado
+7119=Cerrar
+7120=Funci贸n anti-desmantelamiento
+7121=En linea 
+7122=Fuera de linea 
+7123=Calidad del aire
+7124=Excelente
+7125=Bueno
+7126=Pobre
+7127=Enviar notificaci贸n 
+7128=Contenido de la notificaci贸n 
+7129=(dentro de los 100 caracteres)
+7130=Selecci贸n de cuenta
+7131=Aplicaci贸n push 
+7132=Automatizaci贸n 
+7133=Ejecutado
+7134=Estado de destino
+7135=Ca铆da
+7136=Temperatura
+7137=Humedad 
+7138=PM2.5
+7139=CO2
+7140=TVOC
+7141=Exceder 
+7142=Grave
+7143=Alto 
+7144=Excelencia 
+7145=Seguridad 
+7146=A帽adir seguridad
+7147=Armado 
+7148=Desarmado
+7149=Manualmente
+7150=Inteligente
+7151=Bueno 
+7152=Dejar o Arrivar a un lugar 
+7153=Salir 
+7154=Llegar 
+9000=Inicio sesi贸n con un nuevo n煤mero de tel茅fono celular 
+9001=Inicie sesi贸n con una nueva direcci贸n de correo el茅ctr贸nico 
+9002=Nuevo numero de celular revisado
+9003=Nuevo numero de celular enlazado
+9004=Nueva direcci贸n de correo electr贸nico revisado
+9005=Nueva direcci贸n de correo electr贸nico enlazado 
+9006=El c贸digo de verificaci贸n puede enviarse m谩s tarde, espere.
+9007=Por favor, espere
+9008=Volver 
+9009=El usuario no desea ser nombrado
+9010=Nueva contrase帽a 
+9011=Introduzca la nueva contrase帽a nuevamente
+9012=De acuerdo 
+9013=Acuerdo de servicio 
+9014=Normativa de protecci贸n de la informaci贸n del usuario
+9015=y
+9016=Lea y acepte el Acuerdo de servicio del usuario y las regulaciones de protecci贸n de la informaci贸n del usuario.
+9017=Esta seguro de cerrar sesi贸n?
+9018=Seleccione pais/regi贸n 
+9019=Actualizar ahora
+9020=Ahora no 
+9021=Pa铆s/regi贸n 
+9022=Informaci贸n del servidor 
+9023=Servidor actual 
+9024=*El servidor hace referencia a la base de datos para la nube, sin necesidad alguna, no se recomienda realizar migraci贸n de datos.
+9025=Si es necesaria la migraci贸n de datos, marque
+9026=Introducci贸n a la funci贸n 
+9027=Quejas 
+9028=Actualizaci贸n de la versi贸n 
+9029=(por favor indique "quejas" en el t铆tulo, luego procesaremos en prioridad.)
+9030=Copia realizada
+9031=No hay nada aqu铆 
+9032=Obtener nueva versi贸n 
+9033=脷ltima versi贸n 
+9034=Que puedo hacer por ti? 
+9035=Problema de funci贸n 
+9036=Problema de escena
+9037=Soporte de aplicaciones 
+9038=(Preguntas frecuentes) 
+9039=Compartir y funci贸n 
+9040=Alertas 
+9041=Informaci贸n del sistema 
+9042=Centro de informaci贸n 
+9043=Tenga en cuenta que su n煤mero de cuenta ha iniciado sesi贸n en otro lugar. Si no lo hace usted mismo, cambie la contrase帽a de inmediato.
+9044=Cargado correctamente
+9045=No se puede cargar 
+9046=Revisado correctamente
+9047=La contrase帽a que ha revisado ha entrado en vigor, vuelva a iniciar sesi贸n.
+9048=Iniciar sesion con la contrase帽a del numero de cuenta 
+9049=Contrase帽a incorrecta para muchas veces, 隆el n煤mero de cuenta est谩 bloqueado!
+9050=Verificar la identificaci贸n facial 
+9051=Error al guardar la identificaci贸n facial del usuario 
+9052=La notificaci贸n push de registro esta disponible 
+9053=La notificaci贸n push de registro es anormal 
+9054=Verificaci贸n numerica de contrase帽a 
+9055=Verificaci贸n de gestos 
+9056=A帽o 
+9057=Sin funci贸n regional 
+9058=Guardar o no?
+9059=No compartir ahora 
+9060=Usos-permiso 
+9061=Encuentra tu contrase帽a haciendo clic en "Olvid茅 mi contrase帽a", o int茅ntalo de nuevo en {0} minuto.
+9062=Comprobar 
+9063=Todav铆a tienes {0} veces.
+9064=Altavoz inteligente
+9065=Gesti贸n de datos 
+9066=Comentarios
+9067=Los comentarios no pueden estar en blanco 
+9068=Desea desvincularse? 
+9069=Aviso de propiedad
+10000=Contrasela no v谩lida, vuelva a iniciar sesi贸n 
+10001=Error al solicitar el servidor, int茅ntelo de nuevo m谩s tarde.
+10002=Mantenimiento del sistema, int茅ntalo de nuevo mas tarde 
+10003=No puede iniciar sesi贸n, agregue la residencia al principio.
+10004=El n煤mero de cuenta ya existe
+10005=Env铆as el c贸digo de verificaci贸n con demasiada frecuencia, int茅ntalo de nuevo m谩s tarde.
+10006=Error de firma 
+10007=Sistema ocupado, intentelo de nuevo mas tarde! 
+10008=Contrasea no v谩lida para iniciar sesi贸n 
+10009=El usuario ha sido deshabilitado 
+10010=Error de contrase帽a original 
+10011=El n煤mero de subcuenta ya existe 
+10012=El npumero de subcuenta no existe 
+10013=No esta permitido agregarse como miembro 
+10014=La residencia actual no pertenece al este n煤mero de cuenta 
+10015=El nombre de la residencia ya existe 
+10016=La residencia no existe 
+10017=Error de solicitud, par谩metro anormal! 
+10018=El n煤mero que enlazaste es duplicado 
+10019=Enlazar el gateway primero 
+10020=El gateway no existe 
+10021=El gateway esta fuera de l铆nea
+10022=El dispositivo est谩 fuera de l铆nea 
+10023=Error de control 
+10024=La escena ya existe 
+10025=La automatizaci贸n ya existe 
+10026=Spk no admite esta funci贸n 
+10027=Spk no admite este valor funcional 
+10028=No tienes permiso 
+10029=El destino del dispositivo est谩 duplicado 
+10030=No tiene permiso para el control remoto 
+10031=El dispositivo no debe estar en blanco 
+10032=El usuario no  tiene permiso 
+10033=El dispositivo no existe
diff --git a/HDL-ON_iOS/Resources/Phone/MusicIcon/order.png b/HDL-ON_iOS/Resources/Phone/MusicIcon/order.png
new file mode 100644
index 0000000..cfe4317
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/MusicIcon/order.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/MusicIcon/single.png b/HDL-ON_iOS/Resources/Phone/MusicIcon/single.png
index 3d49095..e4153c4 100644
--- a/HDL-ON_iOS/Resources/Phone/MusicIcon/single.png
+++ b/HDL-ON_iOS/Resources/Phone/MusicIcon/single.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/MusicIcon/single_cycle.png b/HDL-ON_iOS/Resources/Phone/MusicIcon/single_cycle.png
new file mode 100644
index 0000000..33ee323
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/MusicIcon/single_cycle.png
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index 181c03b..544f3d8 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -159,7 +159,8 @@
                         endTime = DateTime.Now.AddSeconds(5);
 
                         MainPage.Log($"璇诲彇璁惧淇℃伅鎴愬姛");
-                        var deviceList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
+                        MainPage.Log($"sid鍒楄〃鑾峰彇===="+ deviceResult.Data.ToString());
+                        var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                         if (deviceList == null)
                         {
                             deviceList = new DevcieApiPack();
@@ -171,7 +172,7 @@
                                 var deviceResult2 = Ins.HttpRequest.GetDeviceList("30", Convert.ToInt32(deviceList.pageNo) + 1 + "");
                                 if (deviceResult2.Code == StateCode.SUCCESS)
                                 {
-                                    var deviceList2 = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
+                                    var deviceList2 = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                                     deviceList.pageNo = deviceList2.pageNo;
                                     deviceList.list.AddRange(deviceList2.list);
                                 }
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index b290247..7e86ec4 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,10 +4,52 @@
 {
     public static class StringId
     {
+
         /// <summary>
-        /// 璁垮绠$悊
+        /// 鑾峰彇鏇村
         /// </summary>
-        public const int VisitorManage = 533;
+        public const int GetMore = 543;
+        /// <summary>
+        /// 寰樺緤鎶ヨ
+        /// </summary>
+        public const int WanderingAlarm = 542;
+        /// <summary>
+        /// 鐩戞帶涓�
+        /// </summary>
+        public const int Monitoring = 541;
+        /// <summary>
+        /// 鎶ヨ涓�
+        /// </summary>
+        public const int InAlarming = 540;
+        /// <summary>
+        /// 鏅鸿兘闈㈡澘
+        /// </summary>
+        public const int SmartPanel = 539;
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        public const int Uint = 538;
+        /// <summary>
+        /// 婀垮害缁熻鍥�
+        /// </summary>
+        public const int HumidityStatistics = 537;
+
+        /// <summary>
+        /// 娓╁害缁熻鍥�
+        /// </summary>
+        public const int TemperatureStatistics = 536;
+        /// <summary>
+        /// 闇茬偣娓╁害
+        /// </summary>
+        public const int DewPointTemp = 535;
+        /// <summary>
+        /// 鏁版嵁
+        /// </summary>
+        public const int Data = 534;
+        /// <summary>
+        /// 24灏忔椂缁熻鍥�
+        /// </summary>
+        public const int StatisticalChart24Hour = 533;
         /// <summary>
         /// 璁惧绂荤嚎涓紝鏆傛椂鏃犳硶鎿嶄綔
         /// </summary>
@@ -1590,9 +1632,9 @@
         /// </summary>
         public const int modifyName = 5017;
         /// <summary>
-        /// 鍗曟洸鎾斁
+        /// 鍗曟洸寰幆鎾斁
         /// </summary>
-        public const int singleMode = 5018;
+        public const int singleCycleMode = 5018;
         /// <summary>
         /// 闅忔満鎾斁
         /// </summary>
@@ -1709,6 +1751,16 @@
         /// 浣犳墜鏈烘殏鏈畨瑁�"QQ闊充箰"{\r\n}璇峰墠寰�鎵嬫満鍟嗗満瀹夎
         /// </summary>
         public const int qqMsuicTip = 5047;
+        /// <summary>
+        /// 寰簭寰幆
+        /// </summary>
+        public const int orderMode =5048;
+        /// <summary>
+        /// 鍗曟洸鎾斁
+        /// </summary>
+        public const int single =5049;
+
+
 
         /// <summary>
         /// 姝e父
@@ -2707,6 +2759,22 @@
         /// 鍒拌揪
         /// </summary>
         public const int daoda = 7154;
+        /// <summary>
+        /// 姹傛晳/姝e父
+        /// </summary>
+        public const int qiujiuandzhengchang = 7155;
+        /// <summary>
+        /// 姹傛晳
+        /// </summary>
+        public const int qiujiu = 7156;
+        /// <summary>
+        /// 鏄惁寮�閿佹椂
+        /// </summary>
+        public const int shifoukaisuoshi = 7157;
+        /// <summary>
+        /// 鏄�
+        /// </summary>
+        public const int shi = 7158;
 
 
 
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 8045608..333d101 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -280,7 +280,8 @@
                         }
                         if (DB_ResidenceData.Instance.GatewayType == 0)
                         {
-                            new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) });
+                            new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255,
+                                new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) });
                         }
                         else if (DB_ResidenceData.Instance.GatewayType == 1)
                         {
@@ -1049,9 +1050,6 @@
                                 }
                             }
                         }
-
-
-
 
                         var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
                         if (localFunction == null)
diff --git a/HDL_ON/DAL/DriverLayer/Control_Udp.cs b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
index 6991ad8..e6eba3b 100644
--- a/HDL_ON/DAL/DriverLayer/Control_Udp.cs
+++ b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
@@ -162,7 +162,6 @@
 
         /// <summary>
         /// 鎺у埗bus鍦烘櫙
-        /// todo
         /// </summary>
         public void ControlBusScenes(Scene scene)
         {
diff --git a/HDL_ON/DAL/DriverLayer/Packet.cs b/HDL_ON/DAL/DriverLayer/Packet.cs
index 3e07ff2..19e93d7 100644
--- a/HDL_ON/DAL/DriverLayer/Packet.cs
+++ b/HDL_ON/DAL/DriverLayer/Packet.cs
@@ -111,7 +111,6 @@
 
         /// <summary>
         /// 鏁版嵁鍖呭鐞�
-        /// ps:鐢眂ommonpage杞Щ杩囨潵锛岃繕闇�瑕佽浆绉诲悎閫傜殑浣嶇疆绠$悊
         /// </summary>
         /// <param name="subnetID"></param>
         /// <param name="deviceID"></param>
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 883d94a..f5abbf2 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -357,20 +357,20 @@
                                 {
                                     try
                                     {
-                                        var mMes = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
-                                        Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(mMes);
-                                        var pairSid = pairs.GetValue("sid").ToString();
-                                        var pairOnline = pairs.GetValue("online");
-                                        if (!string.IsNullOrEmpty(pairSid.ToString()))
-                                        {
-                                            var function_online = FunctionList.List.Functions.Find((obj) => obj.sid == pairSid);
-                                            if (function_online != null){
-                                                function_online.online = (bool)pairOnline;
-                                                HomePage.LoadEvent_RefreshDevcieOnline(function_online);
-                                                FunctionPage.UpdataOnline(function_online);
-                                                RoomPage.UpdataOnline(function_online);
-                                            }
-                                        }
+                                        //var mMes = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+                                        //Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(mMes);
+                                        //var pairSid = pairs.GetValue("sid").ToString();
+                                        //var pairOnline = pairs.GetValue("online");
+                                        //if (!string.IsNullOrEmpty(pairSid.ToString()))
+                                        //{
+                                        //    var function_online = FunctionList.List.Functions.Find((obj) => obj.sid == pairSid);
+                                        //    if (function_online != null){
+                                        //        function_online.online = (bool)pairOnline;
+                                        //        HomePage.LoadEvent_RefreshDevcieOnline(function_online);
+                                        //        FunctionPage.UpdataOnline(function_online);
+                                        //        RoomPage.UpdataOnline(function_online);
+                                        //    }
+                                        //}
 
                                     }
                                     catch(Exception ex)
@@ -483,7 +483,8 @@
                                     {
                                         try
                                         {
-                                            var securityBytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
+                                            var securityBytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload,
+                                                DB_ResidenceData.Instance.HomeGateway.aesKey);
                                             var securityString = Encoding.UTF8.GetString(securityBytes);
                                             var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(securityString);
                                             MainPage.Log($"瀹夐槻鐘舵�佸彉鍖栵細{securityString}");
@@ -511,12 +512,14 @@
                                 }
                                 #endregion
                                 //A缃戝叧璁惧鐘舵��-鍖呭惈娑傞甫璁惧
+                                //Tag 缃戠粶鐘舵�佽В鏋�
                                 else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/property/send")
                                 {
                                     var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey);
                                     var revString = Encoding.UTF8.GetString(bytes);
                                     MainPage.Log($"mqtt 鐘舵�佹洿鏂�:{revString}");
                                     Control.Ins.UpdataFunctionStatus(revString, null, true);
+                                    //Control.Ins.MsgInfoList.Add($"mqtt 鐘舵�佹洿鏂�:{revString}");
                                     //Control.Ins.MsgInfoList.Add(revString + "\r\n");
                                 }
                                 //涓�绔彛鏁版嵁瑙f瀽
@@ -529,7 +532,8 @@
 
                                     if (!string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.aesKey))
                                     {
-                                        packet.Bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
+                                        packet.Bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload,
+                                            DB_ResidenceData.Instance.HomeGateway.aesKey);
                                     }
                                     else
                                     {
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index 973e323..f4ccb6b 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -602,7 +602,7 @@
         /// <summary>
         /// 绾㈠瀹濅笅鐨勯仴鎺у櫒鍒楄〃
         /// </summary>
-        public const string API_POST_Ir_List = ":/home-wisdom/app/device/ir/list";
+        public const string API_POST_Ir_List = "/home-wisdom/app/device/ir/list";
         /// <summary>
         /// 閬ユ帶鍣ㄧ孩澶栫爜瀛︿範
         /// </summary>
diff --git a/HDL_ON/Entity/Function/FloorHeating.cs b/HDL_ON/Entity/Function/FloorHeating.cs
index 30ef6c0..1eb0352 100644
--- a/HDL_ON/Entity/Function/FloorHeating.cs
+++ b/HDL_ON/Entity/Function/FloorHeating.cs
@@ -150,6 +150,26 @@
         /// </summary>
         public byte timeFlag = 0;
 
+        public string GetWrokModeIconPath(string value, bool lighting = true)
+        {
+            var imagePath = "FunctionIcon/AC/HeatingIcon.png";
+
+            switch (value)
+            {
+                case "heat":
+                    imagePath = lighting ? "FunctionIcon/AC/HeatingIcon.png" : "FunctionIcon/AC/HeatingIconGray.png";
+                    break;
+                case "cool":
+                    imagePath = lighting ? "FunctionIcon/AC/CoolIcon.png" : "FunctionIcon/AC/CoolIconGray.png";
+                    break;
+                case "economic":
+                    imagePath = lighting ? "FunctionIcon/FloorHeating/EconomicIcon.png" : "FunctionIcon/FloorHeating/EconomicIconGray.png";
+                    break;
+            }
+
+            return imagePath;
+        }
+
         /// <summary>
         /// 鑾峰彇妯″紡鐨刬con璺緞
         /// <param name="lightingIcon">鑾峰彇鐨勫浘鏍囩被鍨嬶紝榛樿鏄偣浜�</param>
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index b64d1e6..9e45062 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -88,7 +88,7 @@
         {
             var attrs = new List<string>();
 
-            foreach(var attr in  attributes)
+            foreach (var attr in attributes)
             {
                 attrs.Add(attr.key);
             }
@@ -111,12 +111,34 @@
         /// <returns></returns>
         public string GetAttrState(string key)
         {
+            //涓�绾ф煡璇eyValue鍊�
             var attrState = attributes.Find((s) => s.key == key.ToString());
-            if (attrState == null || string.IsNullOrEmpty(attrState.state))
+            if (attrState == null)
             {
                 return "0";
             }
+            if (string.IsNullOrEmpty(attrState.state))
+            {
+                //浜岀骇鏌ヨkeyValue鍊�
+                return GetOriginalState(key);
+            }
             return attrState.state;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍒濆鐘舵��
+        /// 榛樿鍊硷細0
+        /// </summary>
+        /// <param name="key">璇泙瀹氫箟鐨勫睘鎬у��</param>
+        /// <returns></returns>
+        public string GetOriginalState(string key)
+        {
+            var originalState = status.Find((s) => s.key == key.ToString());
+            if (originalState == null || string.IsNullOrEmpty(originalState.value))
+            {
+                return "0";
+            }
+            return originalState.value;
         }
         /// <summary>
         /// 璁剧疆灞炴�х姸鎬�
@@ -327,6 +349,26 @@
         public List<string> roomIds = new List<string>();
 
         /// <summary>
+        /// 瀛樺偍灞炴�ч厤缃�
+        /// 鐜浼犳劅鍣ㄧ殑绛夌骇
+        /// </summary>
+        public List<AttrKeyConfig> attrKeyConfigs = new List<AttrKeyConfig>();
+
+        public List<AttrKeyConfig> GetAttrKeyConfigs(string key)
+        {
+            if (attrKeyConfigs.Count == 0)
+            {
+                switch (key)
+                {
+                    case "pm2.5":
+                        //
+                        break;
+                }
+            }
+            return attrKeyConfigs;
+        }
+
+        /// <summary>
         /// bus鍗忚鏁版嵁鏍煎紡
         /// 浣跨敤A鍗忚鎺у埗鏃讹紝鏀瑰睘鎬т负绌�
         /// </summary>
@@ -339,6 +381,11 @@
         /// 鏄惁鍦ㄧ嚎
         /// </summary>
         public bool online = true;
+
+        /// <summary>
+        /// 鐜闈㈡澘 缁戝畾鐨� 璁惧鐩爣sid鍒楄〃
+        /// </summary>
+        public List<string> targetSids = new List<string>();
         /// <summary>
         /// 浜戠鏁版嵁鍒涘缓鐨勬椂闂�
         /// </summary>
@@ -381,7 +428,7 @@
                         _trait_on_off.curValue = "off";
                     }
                 }
-                if(_trait_on_off.curValue.ToString() != "on"&& _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
+                if (_trait_on_off.curValue.ToString() != "on" && _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
                 {
                     _trait_on_off.curValue = "off";
                 }
@@ -448,7 +495,7 @@
                         collect = !collect;
                         IMessageCommon.Current.ShowErrorInfoAlter(result);
                     });
-                }else
+                } else
                 {
                     Application.RunOnMainThread(() =>
                     {
@@ -473,7 +520,7 @@
                 }
                 else
                 {
-                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId,roomId);
+                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId, roomId);
                 }
                 //鎻愮ず閿欒
                 if (result != StateCode.SUCCESS)
@@ -516,9 +563,9 @@
                 {
                     roomNameList += ",";
                 }
-                roomNameList += findRoom.floorName +"-"+ findRoom.roomName;
+                roomNameList += findRoom.floorName + "-" + findRoom.roomName;
             }
-            if (roomNameList == "" )
+            if (roomNameList == "")
             {
                 roomNameList = Language.StringByID(StringId.WholeZone);
             }
@@ -631,14 +678,14 @@
                     case FunctionAttributeKey.Percent:
                     case FunctionAttributeKey.CCT:
                     case FunctionAttributeKey.RGB:
-                    //case FunctionAttributeKey.FadeTime:
+                        //case FunctionAttributeKey.FadeTime:
                         if (attr.curValue.ToString() == "{}")
                         {
                             if (attr.key == FunctionAttributeKey.OnOff)
                             {
                                 attr.curValue = "off";
                             }
-                            else if (attr.key == FunctionAttributeKey.Mode )
+                            else if (attr.key == FunctionAttributeKey.Mode)
                             {
                                 if (DB_ResidenceData.Instance.GatewayType == 0)
                                 {
@@ -656,7 +703,7 @@
                                     }
                                 }
                             }
-                            else 
+                            else
                             {
                                 attr.curValue = "0";
                             }
@@ -709,7 +756,7 @@
             return sendDataObj;
         }
 
-        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId,string extStr)
+        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId, string extStr)
         {
             var sendDataObj = new AlinkDoorlockObj();
             sendDataObj.id = Control.Ins.msg_id.ToString();
@@ -1140,7 +1187,7 @@
                 try
                 {
                     return Convert.ToByte(loopId, 16);
-                }catch
+                } catch
                 {
                     return 0;
                 }
@@ -1244,11 +1291,15 @@
         /// <summary>
         /// 锛堢孩澶栫┖璋冿級
         /// </summary>
-        public const string AcIr= "ir.ac";
+        public const string AcIr = "ir.ac";
         /// <summary>
         /// 绌鸿皟
         /// </summary>
         public const string HvacAC = "hvac.ac";
+        /// <summary>
+        /// 姣涚粏绠$┖璋�
+        /// </summary>
+        public const string HvacCac = "hvac.cac";
 
         /// <summary>
         /// 绌鸿皟spk鍒楄〃
@@ -1260,6 +1311,7 @@
             spkList.Add(AcStandard);
             spkList.Add(HvacAC);
             spkList.Add(AcIr);
+            spkList.Add(HvacCac);
             return spkList;
         }
         #endregion
@@ -1415,6 +1467,10 @@
         public const string SenesorMegahealth = "sensor.megahealth";
         public const string SenesorMegahealth2 = "sensor.megahealth.zg";
         /// <summary>
+        /// 绱ф�ュ懠鍙�
+        /// </summary>
+        public const string SensorHelp = "sensor.help";
+        /// <summary>
         /// 瀹夐槻浼犳劅鍣╯pk鍒楄〃
         /// </summary>
         /// <returns></returns>
@@ -1437,6 +1493,19 @@
             return spkList;
         }
         #endregion
+
+        public const string PanelEnvironment = "screen.panel";
+        /// <summary>
+        /// 闈㈡澘spk鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public static List<string> PanelSpkList()
+        {
+            var spkList = new List<string>();
+            spkList.Add(SensorHelp);
+            spkList.Add(PanelEnvironment);
+            return spkList;
+        }
 
         #region 鐜浼犳劅鍣�
         /// <summary>
@@ -1797,9 +1866,49 @@
     //}
 
 
-public class VersionInfo
-{
-    public string module = "";
-    public string version = "";
-}
+    public class VersionInfo
+    {
+        public string module = "";
+        public string version = "";
+    }
+
+    /// <summary>
+    /// 鍔熻兘灞炴�х浉鍏抽厤缃俊鎭�
+    /// 鐜浼犳劅鍣ㄧ瓑绾т娇鐢�
+    /// </summary>
+    public class AttrKeyConfig
+    {
+        public string key = string.Empty;
+        /// <summary>
+        /// 閰嶇疆绫诲瀷
+        /// interval 鍖洪棿
+        /// 鐩墠鍙敮鎸侊細interval
+        /// </summary>
+        public string type = string.Empty;
+
+        public string unit = string.Empty;
+
+        public List<AttrKeyInfo> configs = new List<AttrKeyInfo>();
+
+    }
+
+    public class AttrKeyInfo
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string start = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string end = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string color = string.Empty;
+        /// <summary>
+        /// 鎻忚堪
+        /// </summary>
+        public string desc = string.Empty;
+    }
 }
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
index ac47acd..49d250c 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -159,32 +159,32 @@
                 };
                 dimmerControlBar.OnProgressChangedEvent = (sender, e) => {
                     dimmerControlBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1;
-                    //light.brightness = e;
-                    //light.trait_on_off.curValue = e > 0 ? "on" : "off";
+                    function.SetAttrState(FunctionAttributeKey.Brightness, e);
+                    function.trait_on_off.curValue = e > 0 ? "on" : "off";
 
-                    //if (e == 0 || e == 100)
-                    //{
-                    //    //Control.Send(CommandType_A.write, light);
-                    //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                    //    d.Add("brightness", light.brightness.ToString());
-                    //    Control.Ins.SendWriteCommand(light, d);
-                    //}
-                    //else
-                    //{
-                    //    var tm = (DateTime.Now - light.refreshTime).TotalMilliseconds;
-                    //    Console.WriteLine("skip time "+tm);
-                    //    if (300 < tm)
-                    //    {
-                    //        light.refreshTime = DateTime.Now;
-                    //        new System.Threading.Thread(() =>
-                    //        {
-                    //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                    //            d.Add("brightness", light.brightness.ToString());
-                    //            Control.Ins.SendWriteCommand(light, d);
-                    //        })
-                    //        { IsBackground = true }.Start();
-                    //    }
-                    //}
+                    if (e == 0 || e == 100)
+                    {
+                        //Control.Send(CommandType_A.write, light);
+                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                        d.Add("brightness", e.ToString());
+                        Control.Ins.SendWriteCommand(function, d);
+                    }
+                    else
+                    {
+                        var tm = (DateTime.Now - function.refreshTime).TotalMilliseconds;
+                        Console.WriteLine("skip time " + tm);
+                        if (500 < tm)
+                        {
+                            function.refreshTime = DateTime.Now;
+                            new System.Threading.Thread(() =>
+                            {
+                                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                                d.Add("brightness", e.ToString());
+                                Control.Ins.SendWriteCommand(function, d);
+                            })
+                            { IsBackground = true }.Start();
+                        }
+                    }
                 };
             }
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs
index 49990a0..2072723 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs
@@ -9,7 +9,6 @@
         {
             Tag = "Logic";
         }
-       
         public void Show()
         {
             LogicView.TopView topView = new LogicView.TopView();
@@ -62,28 +61,30 @@
             likiadaodaView.frameLayout.Y = shiwaiView.frameLayout.Bottom;
             likiadaodaView.btnText.TextID = StringId.likiadaoda;
             likiadaodaView.btnIcon.UnSelectedImagePath = "LogicIcon/location.png";
-            int count = 0;//杈撳叆绫诲瀷涓暟
-            if (MainView.IsGatewayType)
-            {
-                count = 4;
-                viewLayout.AddChidren(likiadaodaView.FLayoutView());
-            }
+            int count = 3;//杈撳叆绫诲瀷涓暟
+            //2022骞�05鏈�24鏃�15:08:22 闅愯棌鎺夊湴鐞嗗洿鏍�
+            //if (MainView.IsGatewayType)
+            //{
+            //    count = 4;
+            //    viewLayout.AddChidren(likiadaodaView.FLayoutView());
+            //}
             ////鍔熻兘
             ///浜у搧缁忕悊鍚涚剷瑕佹眰锛岃澶囧姛鑳界Щ鍒拌繖閲屻��<2022-3-7>
-            new FunTpye(LogicMethod.condition_if).FunTypeView(viewLayout, likiadaodaView.frameLayout.Bottom, count);
+            new FunTpye(LogicMethod.condition_if).FunTypeView(viewLayout, shiwaiView.frameLayout.Bottom, count);
 
             #endregion
 
             #region  鎵�鏈夌偣鍑讳簨浠�
             //鏃堕棿
             timeView.btnClick.MouseUpEventHandler += (sen, e) =>
-      {
+             {
+
           TimeTpye timeTpye = new TimeTpye();
           MainPage.BasePageView.AddChidren(timeTpye);
           timeTpye.Show();
           MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
 
-      };
+             };
             
             //鍦烘櫙鐐瑰嚮浜嬩欢
             sceneView.btnClick.MouseUpEventHandler += (sen, e) =>
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index f8370df..16e2186 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -360,6 +360,7 @@
                 //tvoc
                 case SPK.SensorTVOC:
                     {
+                        
                         ///tvoc
                         LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
                         tvocView.btnText.TextID = StringId.tvoc;
@@ -386,6 +387,23 @@
                             PmCo2TvocAction(this, device, "hcho", StringId.Formaldehyde, index, edit);
 
                         };
+                    }
+                    break;
+                //闂ㄩ攣
+                case SPK.DoorLock:
+                    {
+
+                        LogicView.FunTypeView view = new LogicView.FunTypeView();
+                        view.btnText.TextID = StringId.shifoukaisuoshi;
+                        fLayout.AddChidren(view.FLayoutView());
+                        view.btnClick.MouseUpEventHandler += (sender, e) =>
+                        {
+                            DeviceView(device, view.btnState, StringId.shi, StringId.offLogic,1);
+                        };
+                        if (edit)
+                        {
+                            GetEditState(device, index, view.btnState, null, null, null);
+                        }
                     }
                     break;
             }
@@ -465,12 +483,13 @@
         /// <param name="button">閫変腑鐘舵�佹樉绀烘枃鏈珺tn鎺т欢</param>
         /// <param name="btnText1">灞炴�х姸鎬佸�兼枃鏈�1</param>
         /// <param name="btnText2">灞炴�х姸鎬佸�兼枃鏈�2</param>
-        private void DeviceView(Entity.Function device, Button button, int btnText1, int btnText2)
+        /// <param name="viewCount">view鏁伴噺</param>
+        private void DeviceView(Entity.Function device, Button button, int btnText1, int btnText2,int viewCount=2)
         {
             FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence };
             this.AddChidren(frame);
             LogicView.SwitchView switchView = new LogicView.SwitchView();
-            switchView.FLayoutView(frame, btnText1, btnText2, button.Text, (intValue) =>
+            switchView.FLayoutView(frame, btnText1, btnText2, button.Text, viewCount,(intValue) =>
             {
                 //璁惧灞炴�у�硷紝浜戦泙涓婂畾涔夊ソ鐨�;
                 string keyVlaue = "on_off";
@@ -522,6 +541,11 @@
                             }
                         }
                         break;
+                    case SPK.DoorLock:
+                        {
+                            keyVlaue = "door_status";
+                        }
+                        break;
 
                 }
                 switch (intValue)
@@ -565,6 +589,7 @@
                             }
                         }
                         break;
+                    case StringId.shi:
                     case StringId.kaiqi:
                         {
                             value = "open";
@@ -589,6 +614,8 @@
                         {
                             value = "fall";
                         }; break;
+                   
+
                 }
                 //鏄剧ず鏂囨湰
                 button.TextID = intValue;
@@ -665,7 +692,7 @@
         /// <param name="stateValue">缂栬緫涔嬪墠鐨勭姸鎬佸��,榛樿涓�""</param>
         public void PmCo2TvocAction(FrameLayout frame, Entity.Function device, string key, int title, int index, bool edit, string stateValue = "")
         {
-            if (edit)
+            if (edit) 
             {
                 ///
                 this.function = device;
@@ -679,12 +706,14 @@
                 }
             }
             PublicInterface view = new PublicInterface();
-            var listStr = view.GetViewList(key);
-            view.SingleSelectionShow(frame, listStr, Language.StringByID(title), view.GetString(key, stateValue)
+            //var listStr = view.GetViewList(key);
+            var listStr = view.GetSensorLevelList(device);//2022骞�05鏈�25鏃�10:01:33 浜у搧缁忕悊鍚涚厡瑕佹眰鏀规垚鍔ㄦ��
+            view.SingleSelectionShow(frame, listStr, Language.StringByID(title), view.GetSensorLevelText(device, stateValue,true)
                , (text) =>
                {
                   
-                   var value = view.GetValue(key, text);
+                   //var value = view.GetValue(key, text);
+                   var values = view.GetSensorLevelText(device,text,false);
                    selectedState = device.spk + "_" + key;
                    switch (device.spk)
                    {
@@ -702,7 +731,7 @@
                            }
                            break;
                    }
-                   AddDictionary(key, value, "integer", "in");
+                   AddDictionary(key, values, "integer", "in");
                    Save(device, index, edit);
                });
         }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs
index 4cf6765..6a3bd4e 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs
@@ -9,13 +9,13 @@
     {
         public FunTpye(string str)
         {
-            if_type = str;
+            if_Type = str;
         }
         /// <summary>
         /// 琛ㄧず鏄�(鏉′欢/鐩爣)
         /// </summary>
-        private string if_type;
-
+        private string if_Type;
+        Loading loading = new Loading();
         /// <summary>
         /// 璁惧鍔熻兘ui
         /// </summary>
@@ -23,6 +23,7 @@
         /// <param name="bottm"></param>
         /// <param name="funCount">鏀寔鍔熻兘绫诲瀷涓暟<琛ㄧず涓婇潰鎵�鍗犻珮搴�></param>
         public void FunTypeView(FrameLayout viewLayout,int bottm,int funCount) {
+            viewLayout.AddChidren(loading);
             LogicView.FunAllAreaView funAllAreaView = new LogicView.FunAllAreaView();
             funAllAreaView.frameLayout.Y = bottm + Application.GetRealHeight(8);
             viewLayout.AddChidren(funAllAreaView.FLayoutView());
@@ -120,9 +121,9 @@
                         ///鍒囨崲鎴块棿榛樿:鍏ㄩ儴鍔熻兘
                         UserInfo.Current.logicselectedFunction = Language.StringByID(StringId.allFun);
                         ///鑾峰彇鏄剧ず璁惧鍒楄〃
-                        var list = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(areaView.btnClick.Tag as Entity.Room, if_type);
+                        var list = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(areaView.btnClick.Tag as Entity.Room, if_Type);
 
-                        DeviceListView(vv, list);
+                        this.LoadingDeviceListView(vv, list);
                     };
                     if (roomList.Count - 1 == i)
                     {
@@ -138,7 +139,7 @@
             {
 
                 //鑾峰彇鏈�缁堟樉绀哄垪琛�
-                var functionList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(UserInfo.Current.logicselectedRoom, if_type);
+                var functionList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(UserInfo.Current.logicselectedRoom, if_Type);
                 //鑾峰彇璁惧鍒楄〃鐨勭被鍨嬶紙渚嬪锛氱伅鍏夌被锛岀獥甯樼被銆傘�傘�傦級
                 var deviceTypeList = LogicMethod.CurrLogicMethod.GetDeviceTypeList(functionList);
                 if (deviceTypeList.Count == 0)
@@ -218,13 +219,14 @@
                     areaView.btnClick.MouseUpEventHandler += (sender, e2) =>
                     {
                         fLayout.RemoveFromParent();
-                        funAllAreaView.btnText2.Text = areaView.btnClick.Tag.ToString();
-                        UserInfo.Current.logicselectedFunction = areaView.btnClick.Tag.ToString();
-                        ///鑾峰彇鍗曚釜绫诲瀷锛堜緥濡傦細鐏厜绫汇�傘�傦級璁惧FunctionType鍒楄〃<绠�绉�:spk鍒楄〃>
-                        var typeFunctionList2 = LogicMethod.CurrLogicMethod.GetDeviceTypeFunctionList(UserInfo.Current.logicselectedFunction);
-                        ///鑾峰彇鍗曚釜鐏厜绫诲瀷锛堜緥濡傦細鐏厜1,鐏厜2銆傘�傦級璁惧鍒楄〃
+                        string clickText = areaView.btnClick.Tag.ToString(); 
+                        funAllAreaView.btnText2.Text = clickText;
+                        UserInfo.Current.logicselectedFunction = clickText;
+                        ///鑾峰彇璁惧鍗曚釜澶х被spk鍒楄〃锛堜緥濡�:鐏厜绫�,绌鸿皟绫�...锛�
+                        var typeFunctionList2 = LogicMethod.CurrLogicMethod.GetDeviceTypeFunctionList(clickText);
+                        ///鑾峰彇璁惧鍗曚釜灏忕被鍒楄〃锛堜緥濡傦細鐏厜1,鐏厜2...锛�
                         var lists2 = LogicMethod.CurrLogicMethod.GetShowDeviceList(typeFunctionList2, functionList);
-                        DeviceListView(vv, lists2);
+                       this.LoadingDeviceListView(vv, lists2);
 
                     };
                     if (deviceTypeList.Count - 1 == i)
@@ -237,58 +239,67 @@
             funAllAreaView.btnText2.MouseUpEventHandler += funClick;
             funAllAreaView.btnIcon2.MouseUpEventHandler += funClick;
             ///鑾峰彇鎴块棿鏀寔鐨勮澶囧垪琛�
-            var deviceList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(UserInfo.Current.logicselectedRoom, if_type);
-            ///鑾峰彇鍗曚釜绫诲瀷锛堜緥濡�:鐏厜绫汇�傘�傦級璁惧FunctionType鍒楄〃<绠�绉�:spk鍒楄〃>
+            var deviceList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(UserInfo.Current.logicselectedRoom, if_Type);
+            ///鑾峰彇璁惧鍗曚釜澶х被spk鍒楄〃锛堜緥濡�:鐏厜绫�,绌鸿皟绫�...锛�
             var typeFunctionList = LogicMethod.CurrLogicMethod.GetDeviceTypeFunctionList(UserInfo.Current.logicselectedFunction);
-            ///鑾峰彇鍗曚釜鐏厜绫诲瀷锛堜緥濡傦細鐏厜1,鐏厜2銆傘�傦級璁惧鍒楄〃
+            ///鑾峰彇璁惧鍗曚釜灏忕被鍒楄〃锛堜緥濡傦細鐏厜1,鐏厜2...锛�
             var lists = LogicMethod.CurrLogicMethod.GetShowDeviceList(typeFunctionList, deviceList);
             ///鎴块棿鍚嶇О
             funAllAreaView.btnText1.Text = UserInfo.Current.logicselectedRoom.roomName;
-            ///鍔熻兘绫诲瀷鍚嶇О<鐏厜绫汇�傘�傘�傘�傘��>
+            ///璁惧澶х被鍚嶇О<鐏厜绫汇�傘�傘�傘�傘��>
             funAllAreaView.btnText2.Text = UserInfo.Current.logicselectedFunction;
-            DeviceListView(vv, lists);
+            this.LoadingDeviceListView(vv, lists);
+
         }
-
-
         /// <summary>
         /// 鏄剧ず璁惧鐨刅iew
         /// </summary>
         /// <param name="verticalScrolView">涓婁笅婊戝姩</param>
         /// <param name="deviceList"></param>
-        public void DeviceListView(VerticalScrolViewLayout verticalScrolView, List<HDL_ON.Entity.Function> deviceList)
+        private void LoadingDeviceListView(VerticalScrolViewLayout verticalScrolView, List<HDL_ON.Entity.Function> deviceList)
         {
-
-            verticalScrolView.RemoveAll();
-            foreach (var dev in deviceList)
+            loading.Start();
+            System.Threading.Tasks.Task.Run(() =>
             {
-                LogicView.SelectTypeView funView = new LogicView.SelectTypeView();
-                funView.btnText.Visible = false;
-                funView.btnDeviceName.Visible = true;
-                funView.btnRoomName.Visible = true;
-                funView.btnLine.X = Application.GetRealWidth(16);
-                funView.btnLine.Width = Application.GetRealWidth(343);
-                verticalScrolView.AddChidren(funView.FLayoutView());
-                funView.btnIcon.UnSelectedImagePath = LogicMethod.CurrLogicMethod.GetIconPath(dev.spk);
-                funView.btnDeviceName.Text = dev.name;
-                funView.btnRoomName.Text = dev.GetRoomListName();
-                funView.btnClick.MouseUpEventHandler += (sen, e) => {
-                    if (if_type == LogicMethod.condition_if)
+                Application.RunOnMainThread(() =>
+                {
+                    loading.Hide();
+                    verticalScrolView.RemoveAll();
+                    foreach (var dev in deviceList)
                     {
-                        ConditionDeviceFunList conditionDeviceFunList = new ConditionDeviceFunList();
-                        MainPage.BasePageView.AddChidren(conditionDeviceFunList);
-                        conditionDeviceFunList.Show(dev, 0, false);
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    }
-                    else
-                    {
-                        TargetDeviceFunList targetDeviceFunList = new TargetDeviceFunList();
-                        MainPage.BasePageView.AddChidren(targetDeviceFunList);
-                        targetDeviceFunList.Show(dev, 0, false);
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    }
+                        LogicView.SelectTypeView funView = new LogicView.SelectTypeView();
+                        funView.btnText.Visible = false;
+                        funView.btnDeviceName.Visible = true;
+                        funView.btnRoomName.Visible = true;
+                        funView.btnLine.X = Application.GetRealWidth(16);
+                        funView.btnLine.Width = Application.GetRealWidth(343);
+                        verticalScrolView.AddChidren(funView.FLayoutView());
+                        funView.btnIcon.UnSelectedImagePath = LogicMethod.CurrLogicMethod.GetIconPath(dev.spk);
+                        funView.btnDeviceName.Text = dev.name;
+                        funView.btnRoomName.Text = dev.GetRoomListName();
+                        funView.btnClick.MouseUpEventHandler += (sen, e) =>
+                        {
+                            if (if_Type == LogicMethod.condition_if)
+                            {
+                                ConditionDeviceFunList conditionDeviceFunList = new ConditionDeviceFunList();
+                                MainPage.BasePageView.AddChidren(conditionDeviceFunList);
+                                conditionDeviceFunList.Show(dev, 0, false);
+                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                            }
+                            else
+                            {
+                                TargetDeviceFunList targetDeviceFunList = new TargetDeviceFunList();
+                                MainPage.BasePageView.AddChidren(targetDeviceFunList);
+                                targetDeviceFunList.Show(dev, 0, false);
+                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                            }
 
-                };
-            }
+                        };
+                    }
+                   
+                });
+
+            });
         }
     }
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index b9c6f17..7fa0b4b 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -403,31 +403,31 @@
                                     }
                                     break;
                                 case SPK.SensorCO2:
-                                    {
-                                        string str = new InpOrOutLogicMethod { }.GetText(dicList, "co2");
-                                        inputView.btnState.Text = str;
-
-                                    }
-                                    break;
                                 case SPK.SensorPm25:
-                                    {
-                                        string str = new InpOrOutLogicMethod { }.GetText(dicList, "pm25");
-                                        inputView.btnState.Text = str;
-
-                                    }
-                                    break;
                                 case SPK.SensorTVOC:
-                                    {
-                                        string str = new InpOrOutLogicMethod { }.GetText(dicList, "tvoc");
-                                        inputView.btnState.Text = str;
-
-                                    }
-                                    break;
                                 case SPK.SensorHcho:
                                     {
-                                        string str = new InpOrOutLogicMethod { }.GetText(dicList, "hcho");
+                                        string strvalue = ""; 
+                                        foreach (var dic in dicList)
+                                        {
+                                            strvalue = dic["value"];
+                                            break;
+                                        }
+                                        string str = new PublicInterface().GetSensorLevelText(device, strvalue, true);
                                         inputView.btnState.Text = str;
+                                    }
+                                    break;
+                                case SPK.DoorLock:
+                                    {
+                                        foreach (var dic in dicList)
+                                        {
+                                            string value = dic["value"];
+                                            if (value == "open")
+                                            {
+                                                inputView.btnState.Text = Language.StringByID(StringId.kaiqi);
+                                            }
 
+                                        }
                                     }
                                     break;
                             }
@@ -1886,6 +1886,19 @@
                         }
                     }
                     break;
+                case SPK.DoorLock:
+                    {
+                        foreach (var dic in dicList)
+                        {
+                            string value = dic["value"];
+                            if (value == "open")
+                            {
+                                button1.Text = Language.StringByID(StringId.shi);
+                            }
+                           
+                        }
+                    }
+                    break;
             }
         }
         /// <summary>
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
index bd6a462..c988fc3 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -6,494 +6,510 @@
 namespace HDL_ON.UI.UI2.Intelligence.Automation
 {
 
-  public class LogicMethod
-  {
-    /// <summary>
-    /// 瀹氫箟涓�涓潤鎬佸璞�
-    /// </summary>
-    private static LogicMethod logicMethod = null;
-    /// <summary>
-    /// 鑾峰彇闈欐�佸璞�
-    /// </summary>
-    public static LogicMethod CurrLogicMethod
+    public class LogicMethod
     {
-      get
-      {
-        if (logicMethod == null)
+        /// <summary>
+        /// 瀹氫箟涓�涓潤鎬佸璞�
+        /// </summary>
+        private static LogicMethod logicMethod = null;
+        /// <summary>
+        /// 鑾峰彇闈欐�佸璞�
+        /// </summary>
+        public static LogicMethod CurrLogicMethod
         {
-          return new LogicMethod();
+            get
+            {
+                if (logicMethod == null)
+                {
+                    return new LogicMethod();
+                }
+                return logicMethod;
+            }
+
         }
-        return logicMethod;
-      }
 
-    }
+        /// <summary>
+        /// 琛ㄧず鏄潯浠�
+        /// </summary>
+        public const string condition_if = "鏉′欢";
+        /// <summary>
+        /// 琛ㄧず鏄洰鏍�
+        /// </summary>
+        public const string target_if = "鐩爣";
+        /// <summary>
+        /// 绉婚櫎鎵�鏈�"Logic"鐣岄潰
+        /// </summary>
+        public void RemoveAllView()
+        {
+            MainPage.BasePageView.RemoveViewByTag("Logic");
+        }
 
-    /// <summary>
-    /// 琛ㄧず鏄潯浠�
-    /// </summary>
-    public const string condition_if = "鏉′欢";
-    /// <summary>
-    /// 琛ㄧず鏄洰鏍�
-    /// </summary>
-    public const string target_if = "鐩爣";
-    /// <summary>
-    /// 绉婚櫎鎵�鏈�"Logic"鐣岄潰
-    /// </summary>
-    public void RemoveAllView()
-    {
-      MainPage.BasePageView.RemoveViewByTag("Logic");
-    }
+        /// <summary> Converts an array of bytes into a formatted string of hex digits (ex: E4 CA B2)</summary>
+        /// <param name="data"> The array of bytes to be translated into a string of hex digits. </param>
+        /// <returns> Returns a well formatted string of hex digits with spacing. </returns>
+        public string byteArrayToHexString(byte[] data)
+        {
+            System.Text.StringBuilder sb = new System.Text.StringBuilder();
+            foreach (byte b in data)
+            {
+                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
+            }
 
-    /// <summary> Converts an array of bytes into a formatted string of hex digits (ex: E4 CA B2)</summary>
-    /// <param name="data"> The array of bytes to be translated into a string of hex digits. </param>
-    /// <returns> Returns a well formatted string of hex digits with spacing. </returns>
-    public string byteArrayToHexString(byte[] data)
-    {
-      System.Text.StringBuilder sb = new System.Text.StringBuilder();
-      foreach (byte b in data)
-      {
-        sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
-      }
+            return sb.ToString().ToUpper();
+        }
 
-      return sb.ToString().ToUpper();
-    }
-
-    /**
-* int杞琤yte[]
-* 璇ユ柟娉曞皢涓�涓猧nt绫诲瀷鐨勬暟鎹浆鎹负byte[]褰㈠紡锛屽洜涓篿nt涓�32bit锛岃�宐yte涓�8bit鎵�浠ュ湪杩涜绫诲瀷杞崲鏃讹紝鐭ヤ細鑾峰彇浣�8浣嶏紝
-* 涓㈠純楂�24浣嶃�傞�氳繃浣嶇Щ鐨勬柟寮忥紝灏�32bit鐨勬暟鎹浆鎹㈡垚4涓�8bit鐨勬暟鎹�傛敞鎰� &0xff锛屽湪杩欏綋涓紝&0xff绠�鍗曠悊瑙d负涓�鎶婂壀鍒�锛�
-* 灏嗘兂瑕佽幏鍙栫殑8浣嶆暟鎹埅鍙栧嚭鏉ャ��
-* @param i 涓�涓猧nt鏁板瓧
-* @return byte[]
+        /**
+    * int杞琤yte[]
+    * 璇ユ柟娉曞皢涓�涓猧nt绫诲瀷鐨勬暟鎹浆鎹负byte[]褰㈠紡锛屽洜涓篿nt涓�32bit锛岃�宐yte涓�8bit鎵�浠ュ湪杩涜绫诲瀷杞崲鏃讹紝鐭ヤ細鑾峰彇浣�8浣嶏紝
+    * 涓㈠純楂�24浣嶃�傞�氳繃浣嶇Щ鐨勬柟寮忥紝灏�32bit鐨勬暟鎹浆鎹㈡垚4涓�8bit鐨勬暟鎹�傛敞鎰� &0xff锛屽湪杩欏綋涓紝&0xff绠�鍗曠悊瑙d负涓�鎶婂壀鍒�锛�
+    * 灏嗘兂瑕佽幏鍙栫殑8浣嶆暟鎹埅鍙栧嚭鏉ャ��
+    * @param i 涓�涓猧nt鏁板瓧
+    * @return byte[]
 */
-    public byte[] int2ByteArray(int i)
-    {
-      byte[] result = new byte[4];
-      result[0] = (byte)((i >> 24) & 0xFF);
-      result[1] = (byte)((i >> 16) & 0xFF);
-      result[2] = (byte)((i >> 8) & 0xFF);
-      result[3] = (byte)(i & 0xFF);
-      return result;
-    }
-    /// <summary>
-    /// 鑾峰彇鏃堕棿鎴�
-    /// </summary>
-    /// <returns></returns>
-    public int getTimeStamp()
-    {
-      TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
-      return (int)ts.TotalSeconds;
-    }
-    /// <summary>
-    /// 鐢熸垚閫昏緫sid鏂规硶
-    /// </summary>
-    public string NewSid()
-    {
-      string logicId = "";
-      try
-      {
-        string sOidBeginsWith = "000101";//鍘傚晢 + 閫氳鏂瑰紡
-        DateTime dt = DateTime.Now;
-        DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
-        long m = (long)((dt - startTime).TotalMilliseconds / 10);
-        string sTimeSpan = byteArrayToHexString(int2ByteArray(getTimeStamp()));
-
-
-
-        logicId = sOidBeginsWith + sTimeSpan;
-
-        logicId += "15";
-        logicId += "1501";
-        //1501 鐗╂ā鍨嬩负閫昏緫锛� 0001 琛ㄧず 1 鍙烽�昏緫鍔熻兘
-        int maxId = 1;
-
-
-        for (int i = 0; i < Logic.LogicList.Count; i++)
+        public byte[] int2ByteArray(int i)
         {
-          string s = Logic.LogicList[i].sid.Substring(20, 4);
-          int iThisSceneId = Convert.ToInt16(s, 16);
-          if (iThisSceneId > maxId)
-            maxId = iThisSceneId;
+            byte[] result = new byte[4];
+            result[0] = (byte)((i >> 24) & 0xFF);
+            result[1] = (byte)((i >> 16) & 0xFF);
+            result[2] = (byte)((i >> 8) & 0xFF);
+            result[3] = (byte)(i & 0xFF);
+            return result;
+        }
+        /// <summary>
+        /// 鑾峰彇鏃堕棿鎴�
+        /// </summary>
+        /// <returns></returns>
+        public int getTimeStamp()
+        {
+            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+            return (int)ts.TotalSeconds;
+        }
+        /// <summary>
+        /// 鐢熸垚閫昏緫sid鏂规硶
+        /// </summary>
+        public string NewSid()
+        {
+            string logicId = "";
+            try
+            {
+                string sOidBeginsWith = "000101";//鍘傚晢 + 閫氳鏂瑰紡
+                DateTime dt = DateTime.Now;
+                DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
+                long m = (long)((dt - startTime).TotalMilliseconds / 10);
+                string sTimeSpan = byteArrayToHexString(int2ByteArray(getTimeStamp()));
+
+
+
+                logicId = sOidBeginsWith + sTimeSpan;
+
+                logicId += "15";
+                logicId += "1501";
+                //1501 鐗╂ā鍨嬩负閫昏緫锛� 0001 琛ㄧず 1 鍙烽�昏緫鍔熻兘
+                int maxId = 1;
+
+
+                for (int i = 0; i < Logic.LogicList.Count; i++)
+                {
+                    string s = Logic.LogicList[i].sid.Substring(20, 4);
+                    int iThisSceneId = Convert.ToInt16(s, 16);
+                    if (iThisSceneId > maxId)
+                        maxId = iThisSceneId;
+                }
+
+                logicId += (maxId + 1).ToString("X4");//閫昏緫鍙� 涓や釜byte 
+                logicId += "0000";
+            }
+            catch
+            {
+                return logicId;
+            }
+            return logicId;
+        }
+        /// <summary>
+        /// 灏佽Dictionary瀵硅薄
+        /// </summary>
+        /// <param name="dic">Dictionary绫�</param>
+        /// <param name="key">鍋�</param>
+        /// <param name="value">鍊�</param>
+        public void dictionary(Dictionary<string, string> dic, string key, string value)
+        {
+            if (dic.ContainsKey(key)) //鍒ゆ柇鏄惁瀛樺湪閿��
+            {
+                //閿瓨鍦ㄧЩ闄�
+                dic.Remove(key);
+            }
+            //娣诲姞閿��
+            dic.Add(key, value);
+        }
+        /// <summary>
+        /// 鑾峰彇缃戝叧鎴块棿鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<HDL_ON.Entity.Room> GetGatewayRoomList()
+        {
+            return HDL_ON.Entity.SpatialInfo.CurrentSpatial.RoomList;
+        }
+        /// <summary>
+        /// 鑾峰彇缃戝叧鎴块棿鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<HDL_ON.Entity.Room> GetGatewayRoomList(string name)
+        {
+            List<Entity.Room> roomList = new List<Entity.Room>();
+            Entity.Room room1 = new Entity.Room();
+            room1.roomName = name;//鑷畾涔夐粯璁や竴涓埧闂村悕涓�:6688
+            room1.roomId = "6688";//鑷畾涔夐粯璁d鐢ㄨ瘑鍒鎴块棿
+            roomList.Add(room1);//榛樿娣诲姞鍒版埧闂村垪琛ㄩ噷
+            var roomLists = GetGatewayRoomList();
+            for (int i = 0; i < roomLists.Count; i++)
+            {
+                var room = roomLists[i];
+                var devlist = GetRoomDevice(room);
+                if (devlist.Count == 0)
+                {
+                    //杩囨护鎺夋病鏈夎澶囩殑鎴块棿;
+                    continue;
+                }
+                roomList.Add(room);
+            }
+            return roomList;
+        }
+        /// <summary>
+        /// 鑾峰彇缃戝叧璁惧鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<HDL_ON.Entity.Function> GetGatewayDeviceList()
+        {
+            return Entity.FunctionList.List.GetDeviceFunctionList();
+        }
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<HDL_ON.Entity.Scene> GetSceneList()
+        {
+            return HDL_ON.Entity.FunctionList.List.scenes;
         }
 
-        logicId += (maxId + 1).ToString("X4");//閫昏緫鍙� 涓や釜byte 
-        logicId += "0000";
-      }
-      catch
-      {
-        return logicId;
-      }
-      return logicId;
-    }
-    /// <summary>
-    /// 灏佽Dictionary瀵硅薄
-    /// </summary>
-    /// <param name="dic">Dictionary绫�</param>
-    /// <param name="key">鍋�</param>
-    /// <param name="value">鍊�</param>
-    public void dictionary(Dictionary<string, string> dic, string key, string value)
-    {
-      if (dic.ContainsKey(key)) //鍒ゆ柇鏄惁瀛樺湪閿��
-      {
-        //閿瓨鍦ㄧЩ闄�
-        dic.Remove(key);
-      }
-      //娣诲姞閿��
-      dic.Add(key, value);
-    }
-    /// <summary>
-    /// 鑾峰彇缃戝叧鎴块棿鍒楄〃
-    /// </summary>
-    /// <returns></returns>
-    public List<HDL_ON.Entity.Room> GetGatewayRoomList()
-    {
-      return HDL_ON.Entity.SpatialInfo.CurrentSpatial.RoomList;
-    }
-    /// <summary>
-    /// 鑾峰彇缃戝叧鎴块棿鍒楄〃
-    /// </summary>
-    /// <returns></returns>
-    public List<HDL_ON.Entity.Room> GetGatewayRoomList(string name)
-    {
-      List<Entity.Room> roomList = new List<Entity.Room>();
-      Entity.Room room1 = new Entity.Room();
-      room1.roomName = name;//鑷畾涔夐粯璁や竴涓埧闂村悕涓�:6688
-      room1.roomId = "6688";//鑷畾涔夐粯璁d鐢ㄨ瘑鍒鎴块棿
-      roomList.Add(room1);//榛樿娣诲姞鍒版埧闂村垪琛ㄩ噷
-      var roomLists = GetGatewayRoomList();
-      for (int i = 0; i < roomLists.Count; i++)
-      {
-        var room = roomLists[i];
-        var devlist = GetRoomDevice(room);
-        if (devlist.Count == 0)
+        /// <summary>
+        /// 鑾峰彇瀹夐槻鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<HDL_ON.Entity.SecurityAlarm> GetSecurityList()
         {
-          //杩囨护鎺夋病鏈夎澶囩殑鎴块棿;
-          continue;
+            return FunctionList.List.securities;
         }
-        roomList.Add(room);
-      }
-      return roomList;
-    }
-    /// <summary>
-    /// 鑾峰彇缃戝叧璁惧鍒楄〃
-    /// </summary>
-    /// <returns></returns>
-    public List<HDL_ON.Entity.Function> GetGatewayDeviceList()
-    {
-      return Entity.FunctionList.List.GetDeviceFunctionList();
-    }
-    /// <summary>
-    /// 鑾峰彇鍦烘櫙鍒楄〃
-    /// </summary>
-    /// <returns></returns>
-    public List<HDL_ON.Entity.Scene> GetSceneList()
-    {
-      return HDL_ON.Entity.FunctionList.List.scenes;
-    }
-
-    /// <summary>
-    /// 鑾峰彇瀹夐槻鍒楄〃
-    /// </summary>
-    /// <returns></returns>
-    public List<HDL_ON.Entity.SecurityAlarm> GetSecurityList()
-    {
-      return FunctionList.List.securities;
-    }
-    /// <summary>
-    /// 鑾峰彇鎴块棿鐨勮澶囧垪琛�
-    /// </summary>
-    /// <param name="room">褰撳墠鎴块棿</param>
-    /// <returns></returns>
-    public List<HDL_ON.Entity.Function> GetRoomDevice(HDL_ON.Entity.Room room)
-    {
-      List<HDL_ON.Entity.Function> deviceLists = new List<Entity.Function>();
-      List<HDL_ON.Entity.Function> lists = GetGatewayDeviceList();
-      if (room.roomId == "6688")
-      {
-        //榛樿涓�涓埧闂村悕锛�6688
-        //鏄剧ず缃戝叧鍏ㄩ儴璁惧
-        deviceLists = lists;
-      }
-      else
-      {
-        for (int i = 0; i < lists.Count; i++)
+        /// <summary>
+        /// 鑾峰彇鎴块棿鐨勮澶囧垪琛�
+        /// </summary>
+        /// <param name="room">褰撳墠鎴块棿</param>
+        /// <returns></returns>
+        public List<HDL_ON.Entity.Function> GetRoomDevice(HDL_ON.Entity.Room room)
         {
-          var dev = lists[i];
-          if (dev.roomIds.Find((id) => id == room.roomId) != null)
-          {
-            //娣诲姞灞炰簬杩欎釜鎴块棿鐨勮澶�;
-            deviceLists.Add(dev);
-          }
+            List<HDL_ON.Entity.Function> deviceLists = new List<Entity.Function>();
+            List<HDL_ON.Entity.Function> lists = GetGatewayDeviceList();
+            if (room.roomId == "6688")
+            {
+                //榛樿涓�涓埧闂村悕锛�6688
+                //鏄剧ず缃戝叧鍏ㄩ儴璁惧
+                deviceLists = lists;
+            }
+            else
+            {
+                for (int i = 0; i < lists.Count; i++)
+                {
+                    var dev = lists[i];
+                    if (dev.roomIds.Find((id) => id == room.roomId) != null)
+                    {
+                        //娣诲姞灞炰簬杩欎釜鎴块棿鐨勮澶�;
+                        deviceLists.Add(dev);
+                    }
+
+                }
+            }
+            return deviceLists;
+        }
+        /// <summary>
+        /// 鑾峰彇璁惧锛堝姛鑳斤級瀵硅薄
+        /// </summary>
+        /// <param name="sid">璁惧鍞竴鏍囪瘑</param>
+        /// <returns></returns>
+        public HDL_ON.Entity.Function GetDevice(string sid)
+        {
+            HDL_ON.Entity.Function device = new Entity.Function() { name = "Unknown" };
+            List<HDL_ON.Entity.Function> deviceLists = GetGatewayDeviceList();
+            for (int i = 0; i < deviceLists.Count; i++)
+            {
+                var dev = deviceLists[i];
+                if (dev.sid == sid)
+                {
+                    device = dev;
+                    break;
+                }
+            }
+            return device;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙瀵硅薄
+        /// </summary>
+        /// <param name="sid">鍦烘櫙鍞竴鏍囪瘑</param>
+        /// <returns></returns>
+        public HDL_ON.Entity.Scene GetSecne(string sid)
+        {
+            HDL_ON.Entity.Scene scene = new Entity.Scene() { name = "Unknown" };
+            List<HDL_ON.Entity.Scene> sceneLists = GetSceneList();
+            for (int i = 0; i < sceneLists.Count; i++)
+            {
+                var sce = sceneLists[i];
+                if (sce.sid == sid)
+                {
+                    scene = sce;
+                    break;
+                }
+            }
+            return scene;
+        }
+        /// <summary>
+        /// 鑾峰彇瀹夐槻瀵硅薄
+        /// </summary>
+        /// <param name="sid">瀹夐槻鍞竴鏍囪瘑</param>
+        /// <returns></returns>
+        public HDL_ON.Entity.SecurityAlarm GetSecurity(string sid)
+        {
+            HDL_ON.Entity.SecurityAlarm security = new Entity.SecurityAlarm() { name = "Unknown" };
+            List<HDL_ON.Entity.SecurityAlarm> SecurityLists = GetSecurityList();
+            for (int i = 0; i < SecurityLists.Count; i++)
+            {
+                var sce = SecurityLists[i];
+                if (sce.sid == sid)
+                {
+                    security = sce;
+                    break;
+                }
+            }
+            return security;
+        }
+        /// <summary>
+        /// 鑾峰彇鎴块棿鍚�(鍗虫槸=鍖哄煙鍚嶇О)
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        /// <returns></returns>
+        public string GetGetRoomName(HDL_ON.Entity.Function device)
+        {
+            string roomName = "";
+            List<HDL_ON.Entity.Room> roomLists = GetGatewayRoomList();
+            for (int i = 0; i < device.roomIds.Count; i++)
+            {
+                var dev = device.roomIds[i];
+                var room = roomLists.Find((c) => c.roomId == dev);
+                if (room != null)
+                {
+                    roomName += room.floorName + "." + room.roomName + ",";
+                }
+            }
+
+            return roomName.TrimEnd(',');
+        }
+        #region   鍔ㄤ竴鏀瑰洓
+        /// <summary>
+        /// 鑾峰彇璁惧绫诲瀷鍥炬爣
+        /// </summary>
+        /// <param name="functionType">璁惧绫诲瀷</param>
+        /// <returns></returns>
+        public string GetIconPath(string functionType)
+        {
+            string strPath = "";
+            switch (functionType)
+            {
+
+                case SPK.AirSwitch:
+                    {
+                        strPath = "FunctionIcon/Icon/electricalbreaker.png";
+                    }
+                    break;
+                case SPK.PanelSocket:
+                case SPK.ElectricSocket:
+                    {
+                        strPath = "FunctionIcon/Icon/electricalsocket.png";
+                    }
+                    break;
+                case SPK.LightSwitch:
+                case SPK.LightRGB:
+                case SPK.LightRGBW:
+                case SPK.LightCCT:
+                case SPK.LightDimming:
+                    {
+                        strPath = "LogicIcon/lightloguc.png";
+                    }
+                    break;
+                case SPK.CurtainSwitch:
+                case SPK.CurtainRoller:
+                case SPK.CurtainTrietex:
+                    {
+                        strPath = "LogicIcon/curtainlogic.png";
+                    }
+                    break;
+                case SPK.AcStandard:
+                case SPK.HvacAC:
+                    {
+                        strPath = "LogicIcon/airconditionerlogic.png";
+                    }
+                    break;
+                case SPK.HvacCac:
+                    strPath = "FunctionIcon/Icon/hvaccac.png";
+                    break;
+                case SPK.FloorHeatStandard:
+                case SPK.HvacFloorHeat:
+                    {
+                        strPath = "LogicIcon/heatlogic.png";
+                    }
+                    break;
+                case SPK.AirFreshStandard:
+                case SPK.HvacAirFresh:
+                    {
+                        strPath = "LogicIcon/heatlogic.png";
+                    }
+                    break;
+                case SPK.SensorSmoke:
+                case SPK.SensorWater:
+                case SPK.SensorGas:
+                case SPK.SensorDryContact:
+                case SPK.SensorDryContact2:
+                case SPK.SensorShanLan:
+                case SPK.SensorDuiShe:
+                case SPK.SensorPir:
+                case SPK.SensorDoorWindow:
+                case SPK.SensorUtrasonic:
+                case SPK.SenesorMegahealth:
+                case SPK.SenesorMegahealth2:
+                case SPK.SensorEnvironment:
+                case SPK.SensorEnvironment2:
+                case SPK.SensorEnvironment3:
+                case SPK.SensorTemperature:
+                case SPK.SensorHumidity:
+                case SPK.SensorCO2:
+                case SPK.SensorPm25:
+                case SPK.SensorTVOC:
+                case SPK.SensorHcho:
+                case SPK.SensorHelp:
+                    {
+                        strPath = "LogicIcon/sensor.png";
+                    }
+                    break;
+                case SPK.DoorLock:
+                    {
+                        strPath = "FunctionIcon/DoorLock/DoorLock.png";
+                    }
+                    break;
+
+            }
+            return strPath;
+        }
+        /// <summary>
+        /// 璁惧绫诲瀷鐨勫垪琛�(鐏厜绫伙紝绐楀笜绫汇�傘�傘��)
+        /// </summary>
+        /// <param name="deviceList">璁惧鍒楄〃</param>
+        /// <returns></returns>
+        public List<string> GetDeviceTypeList(List<HDL_ON.Entity.Function> deviceList)
+        {
+            List<string> deviceStrTypeList = new List<string>();
+            deviceStrTypeList.Clear();
+            ///鐏厜绫�
+            var lightjosn = deviceList.Find((device) =>
+            device.spk == SPK.LightSwitch
+            || device.spk == SPK.LightDimming
+            || device.spk == SPK.LightCCT
+            || device.spk == SPK.LightRGB
+            || device.spk == SPK.LightRGBW
+            );
+            if (lightjosn != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.Lights));
+            }
+
+            ///绐楀笜绫�
+            var curtainjosn = deviceList.Find((device) =>
+            device.spk == SPK.CurtainSwitch
+            || device.spk == SPK.CurtainTrietex
+            || device.spk == SPK.CurtainRoller);
+            if (curtainjosn != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.Curtain));
+            }
+            ///绌鸿皟绫�
+            var ac = deviceList.Find((device) => device.spk == SPK.AcStandard || device.spk == SPK.HvacAC);
+            if (ac != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.AC));
+            }
+            ///鍦版殩绫�
+            var floorHeating = deviceList.Find((device) => device.spk == SPK.FloorHeatStandard || device.spk == SPK.HvacFloorHeat);
+            if (floorHeating != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.FloorHeating));
+            }
+            ///鏂伴绫�
+            var airFresh = deviceList.Find((device) => device.spk == SPK.AirFreshStandard || device.spk == SPK.HvacAirFresh);
+            if (airFresh != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.AirFresh));
+            }
+            ///浼犳劅鍣ㄧ被
+            var sensor = deviceList.Find((device) =>
+            device.spk == SPK.SensorWater
+            || device.spk == SPK.SensorGas
+            || device.spk == SPK.SensorSmoke
+            || device.spk == SPK.SensorDryContact || device.spk == SPK.SensorDryContact2
+            || device.spk == SPK.SensorShanLan
+            || device.spk == SPK.SensorDuiShe
+            || device.spk == SPK.SensorPir
+            || device.spk == SPK.SensorDoorWindow
+            || device.spk == SPK.SensorUtrasonic
+            || device.spk == SPK.SenesorMegahealth
+            || device.spk == SPK.SenesorMegahealth2
+            || device.spk == SPK.SensorEnvironment
+             || device.spk == SPK.SensorEnvironment2
+              || device.spk == SPK.SensorEnvironment3
+                || device.spk == SPK.SensorTemperature
+                  || device.spk == SPK.SensorHumidity
+                    || device.spk == SPK.SensorCO2
+                      || device.spk == SPK.SensorPm25
+                        || device.spk == SPK.SensorTVOC
+                          || device.spk == SPK.SensorHcho
+                          || device.spk == SPK.SensorHelp
+            );
+            if (sensor != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.Sensor));
+            }
+            ///瀹剁數绫�
+            var electric = deviceList.Find((device) =>
+            device.spk == SPK.AirSwitch
+            || device.spk == SPK.PanelSocket
+            || device.spk == SPK.ElectricSocket
+            );
+            if (electric != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.Electric));
+            }
+            ///闂ㄩ攣绫�
+            var doorlock = deviceList.Find((device) => device.spk == SPK.DoorLock);
+            if (doorlock != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.DoorLock));
+            }
+            return deviceStrTypeList;
 
         }
-      }
-      return deviceLists;
-    }
-    /// <summary>
-    /// 鑾峰彇璁惧锛堝姛鑳斤級瀵硅薄
-    /// </summary>
-    /// <param name="sid">璁惧鍞竴鏍囪瘑</param>
-    /// <returns></returns>
-    public HDL_ON.Entity.Function GetDevice(string sid)
-    {
-      HDL_ON.Entity.Function device = new Entity.Function() { name = "Unknown" };
-      List<HDL_ON.Entity.Function> deviceLists = GetGatewayDeviceList();
-      for (int i = 0; i < deviceLists.Count; i++)
-      {
-        var dev = deviceLists[i];
-        if (dev.sid == sid)
+        /// <summary>
+        /// 璁惧绫诲瀷FunctionType鍒楄〃
+        /// </summary>
+        /// <param name="deviceType">璁惧绫诲瀷(鐏厜绫伙紝绐楀笜绫汇��)</param>
+        /// <returns></returns>
+        public List<string> GetDeviceTypeFunctionList(string deviceType)
         {
-          device = dev;
-          break;
-        }
-      }
-      return device;
-    }
-
-    /// <summary>
-    /// 鑾峰彇鍦烘櫙瀵硅薄
-    /// </summary>
-    /// <param name="sid">鍦烘櫙鍞竴鏍囪瘑</param>
-    /// <returns></returns>
-    public HDL_ON.Entity.Scene GetSecne(string sid)
-    {
-      HDL_ON.Entity.Scene scene = new Entity.Scene() { name = "Unknown" };
-      List<HDL_ON.Entity.Scene> sceneLists = GetSceneList();
-      for (int i = 0; i < sceneLists.Count; i++)
-      {
-        var sce = sceneLists[i];
-        if (sce.sid == sid)
-        {
-          scene = sce;
-          break;
-        }
-      }
-      return scene;
-    }
-    /// <summary>
-    /// 鑾峰彇瀹夐槻瀵硅薄
-    /// </summary>
-    /// <param name="sid">瀹夐槻鍞竴鏍囪瘑</param>
-    /// <returns></returns>
-    public HDL_ON.Entity.SecurityAlarm GetSecurity(string sid)
-    {
-      HDL_ON.Entity.SecurityAlarm security = new Entity.SecurityAlarm() { name = "Unknown" };
-      List<HDL_ON.Entity.SecurityAlarm> SecurityLists = GetSecurityList();
-      for (int i = 0; i < SecurityLists.Count; i++)
-      {
-        var sce = SecurityLists[i];
-        if (sce.sid == sid)
-        {
-          security = sce;
-          break;
-        }
-      }
-      return security;
-    }
-    /// <summary>
-    /// 鑾峰彇鎴块棿鍚�(鍗虫槸=鍖哄煙鍚嶇О)
-    /// </summary>
-    /// <param name="device">璁惧</param>
-    /// <returns></returns>
-    public string GetGetRoomName(HDL_ON.Entity.Function device)
-    {
-      string roomName = "";
-      List<HDL_ON.Entity.Room> roomLists = GetGatewayRoomList();
-      for (int i = 0; i < device.roomIds.Count; i++)
-      {
-        var dev = device.roomIds[i];
-        var room = roomLists.Find((c) => c.roomId == dev);
-        if (room != null)
-        {
-          roomName += room.floorName + "." + room.roomName + ",";
-        }
-      }
-
-      return roomName.TrimEnd(',');
-    }
-    #region   鍔ㄤ竴鏀瑰洓
-    /// <summary>
-    /// 鑾峰彇璁惧绫诲瀷鍥炬爣
-    /// </summary>
-    /// <param name="functionType">璁惧绫诲瀷</param>
-    /// <returns></returns>
-    public string GetIconPath(string functionType)
-    {
-      string strPath = "";
-      switch (functionType)
-      {
-
-        case SPK.AirSwitch:
-          {
-            strPath = "FunctionIcon/Icon/electricalbreaker.png";
-          }
-          break;
-        case SPK.PanelSocket:
-        case SPK.ElectricSocket:
-          {
-            strPath = "FunctionIcon/Icon/electricalsocket.png";
-          }
-          break;
-        case SPK.LightSwitch:
-        case SPK.LightRGB:
-        case SPK.LightRGBW:
-        case SPK.LightCCT:
-        case SPK.LightDimming:
-          {
-            strPath = "LogicIcon/lightloguc.png";
-          }
-          break;
-        case SPK.CurtainSwitch:
-        case SPK.CurtainRoller:
-        case SPK.CurtainTrietex:
-          {
-            strPath = "LogicIcon/curtainlogic.png";
-          }
-          break;
-        case SPK.AcStandard:
-        case SPK.HvacAC:
-          {
-            strPath = "LogicIcon/airconditionerlogic.png";
-          }
-          break;
-        case SPK.FloorHeatStandard:
-        case SPK.HvacFloorHeat:
-          {
-            strPath = "LogicIcon/heatlogic.png";
-          }
-          break;
-        case SPK.AirFreshStandard:
-        case SPK.HvacAirFresh:
-          {
-            strPath = "LogicIcon/heatlogic.png";
-          }
-          break;
-        case SPK.SensorSmoke:
-        case SPK.SensorWater:
-        case SPK.SensorGas:
-        case SPK.SensorDryContact:
-        case SPK.SensorDryContact2:
-        case SPK.SensorShanLan:
-        case SPK.SensorDuiShe:
-        case SPK.SensorPir:
-        case SPK.SensorDoorWindow:
-        case SPK.SensorUtrasonic:
-        case SPK.SenesorMegahealth:
-        case SPK.SenesorMegahealth2:
-        case SPK.SensorEnvironment:
-        case SPK.SensorEnvironment2:
-        case SPK.SensorEnvironment3:
-        case SPK.SensorTemperature:
-        case SPK.SensorHumidity:
-        case SPK.SensorCO2:
-        case SPK.SensorPm25:
-        case SPK.SensorTVOC:
-        case SPK.SensorHcho:
-          {
-            strPath = "LogicIcon/sensor.png";
-          }
-          break;
-
-      }
-      return strPath;
-    }
-    /// <summary>
-    /// 璁惧绫诲瀷鐨勫垪琛�(鐏厜绫伙紝绐楀笜绫汇�傘�傘��)
-    /// </summary>
-    /// <param name="deviceList">璁惧鍒楄〃</param>
-    /// <returns></returns>
-    public List<string> GetDeviceTypeList(List<HDL_ON.Entity.Function> deviceList)
-    {
-      List<string> deviceStrTypeList = new List<string>();
-      deviceStrTypeList.Clear();
-      ///鐏厜绫�
-      var lightjosn = deviceList.Find((device) =>
-      device.spk == SPK.LightSwitch
-      || device.spk == SPK.LightDimming
-      || device.spk == SPK.LightCCT
-      || device.spk == SPK.LightRGB
-      || device.spk == SPK.LightRGBW
-      );
-      if (lightjosn != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.Lights));
-      }
-
-      ///绐楀笜绫�
-      var curtainjosn = deviceList.Find((device) =>
-      device.spk == SPK.CurtainSwitch
-      || device.spk == SPK.CurtainTrietex
-      || device.spk == SPK.CurtainRoller);
-      if (curtainjosn != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.Curtain));
-      }
-      ///绌鸿皟绫�
-      var ac = deviceList.Find((device) => device.spk == SPK.AcStandard || device.spk == SPK.HvacAC);
-      if (ac != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.AC));
-      }
-      ///鍦版殩绫�
-      var floorHeating = deviceList.Find((device) => device.spk == SPK.FloorHeatStandard || device.spk == SPK.HvacFloorHeat);
-      if (floorHeating != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.FloorHeating));
-      }
-      ///鏂伴绫�
-      var airFresh = deviceList.Find((device) => device.spk == SPK.AirFreshStandard || device.spk == SPK.HvacAirFresh);
-      if (airFresh != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.AirFresh));
-      }
-      ///浼犳劅鍣ㄧ被
-      var sensor = deviceList.Find((device) =>
-      device.spk == SPK.SensorWater
-      || device.spk == SPK.SensorGas
-      || device.spk == SPK.SensorSmoke
-      || device.spk == SPK.SensorDryContact || device.spk == SPK.SensorDryContact2
-      || device.spk == SPK.SensorShanLan
-      || device.spk == SPK.SensorDuiShe
-      || device.spk == SPK.SensorPir
-      || device.spk == SPK.SensorDoorWindow
-      || device.spk == SPK.SensorUtrasonic
-      || device.spk == SPK.SenesorMegahealth
-      || device.spk == SPK.SenesorMegahealth2
-      || device.spk == SPK.SensorEnvironment
-       || device.spk == SPK.SensorEnvironment2
-        || device.spk == SPK.SensorEnvironment3
-          || device.spk == SPK.SensorTemperature
-            || device.spk == SPK.SensorHumidity
-              || device.spk == SPK.SensorCO2
-                || device.spk == SPK.SensorPm25
-                  || device.spk == SPK.SensorTVOC
-                    || device.spk == SPK.SensorHcho
-      );
-      if (sensor != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.Sensor));
-      }
-      ///瀹剁數绫�
-      var electric = deviceList.Find((device) =>
-      device.spk == SPK.AirSwitch
-      || device.spk == SPK.PanelSocket
-      || device.spk == SPK.ElectricSocket
-      );
-      if (electric != null)
-      {
-        deviceStrTypeList.Add(Language.StringByID(StringId.Electric));
-      }
-      return deviceStrTypeList;
-
-    }
-    /// <summary>
-    /// 璁惧绫诲瀷FunctionType鍒楄〃
-    /// </summary>
-    /// <param name="deviceType">璁惧绫诲瀷(鐏厜绫伙紝绐楀笜绫汇��)</param>
-    /// <returns></returns>
-    public List<string> GetDeviceTypeFunctionList(string deviceType)
-    {
-      List<string> functionTypeList = new List<string>();
+            List<string> functionTypeList = new List<string>();
             ///鐏厜绫�
             if (deviceType == Language.StringByID(StringId.Lights))
             {
@@ -518,6 +534,7 @@
             {
                 functionTypeList.Add(SPK.AcStandard);
                 functionTypeList.Add(SPK.HvacAC);
+                functionTypeList.Add(SPK.HvacCac);
             }
             ///鍦版殩绫�
             else if (deviceType == Language.StringByID(StringId.FloorHeating))
@@ -552,6 +569,7 @@
                 functionTypeList.Add(SPK.SensorPm25);
                 functionTypeList.Add(SPK.SensorTVOC);
                 functionTypeList.Add(SPK.SensorHcho);
+                functionTypeList.Add(SPK.SensorHelp);
 
 
             }
@@ -562,7 +580,13 @@
                 functionTypeList.Add(SPK.PanelSocket);
                 functionTypeList.Add(SPK.ElectricSocket);
             }
-            else {
+            ///闂ㄩ攣绫�
+            else if (deviceType == Language.StringByID(StringId.DoorLock))
+            {
+                functionTypeList.Add(SPK.DoorLock); 
+            }
+            else
+            {
                 functionTypeList.Add(SPK.LightSwitch);
                 functionTypeList.Add(SPK.LightDimming);
                 functionTypeList.Add(SPK.LightRGB);
@@ -604,410 +628,414 @@
                 functionTypeList.Add(SPK.AirSwitch);
                 functionTypeList.Add(SPK.PanelSocket);
                 functionTypeList.Add(SPK.ElectricSocket);
-
-
+                functionTypeList.Add(SPK.HvacCac);
+                functionTypeList.Add(SPK.SensorHelp);
+                functionTypeList.Add(SPK.DoorLock);
             }
 
 
-      return functionTypeList;
+            return functionTypeList;
 
-    }
-    /// <summary>
-    /// 鏉′欢/鐩爣鏀寔璁惧
-    /// </summary>
-    /// <returns></returns>
-    public List<string> GetSupportEquipment(string if_type)
-    {
-      List<string> deviceTypeList = new List<string>();
-      switch (if_type)
-      {
-        case condition_if:
-          {
-            deviceTypeList.Add(SPK.LightSwitch);
-            deviceTypeList.Add(SPK.LightRGB);
-            deviceTypeList.Add(SPK.LightRGBW);
-            deviceTypeList.Add(SPK.LightDimming);
-            deviceTypeList.Add(SPK.LightCCT);
-            deviceTypeList.Add(SPK.CurtainSwitch);
-            deviceTypeList.Add(SPK.CurtainRoller);
-            deviceTypeList.Add(SPK.CurtainTrietex);
-            deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);
-            deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
-            deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
-            deviceTypeList.Add(SPK.SensorSmoke);
-            deviceTypeList.Add(SPK.SensorWater);
-            deviceTypeList.Add(SPK.SensorGas);
-            deviceTypeList.Add(SPK.SensorDryContact); deviceTypeList.Add(SPK.SensorDryContact2);
-            deviceTypeList.Add(SPK.SensorShanLan);
-            deviceTypeList.Add(SPK.SensorDuiShe);
-            deviceTypeList.Add(SPK.SensorPir);
-            deviceTypeList.Add(SPK.SensorDoorWindow);
-            deviceTypeList.Add(SPK.SensorUtrasonic);
-            deviceTypeList.Add(SPK.SenesorMegahealth);
-            deviceTypeList.Add(SPK.SenesorMegahealth2);
-            deviceTypeList.Add(SPK.SensorEnvironment);
-            deviceTypeList.Add(SPK.SensorEnvironment2);
-            deviceTypeList.Add(SPK.SensorEnvironment3);
-            deviceTypeList.Add(SPK.SensorTemperature);
-            deviceTypeList.Add(SPK.SensorHumidity);
-            deviceTypeList.Add(SPK.SensorCO2);
-            deviceTypeList.Add(SPK.SensorPm25);
-            deviceTypeList.Add(SPK.SensorTVOC);
-            deviceTypeList.Add(SPK.SensorHcho);
-            deviceTypeList.Add(SPK.AirSwitch);
-            deviceTypeList.Add(SPK.PanelSocket);
-            deviceTypeList.Add(SPK.ElectricSocket);
-
-          }
-          break;
-        case target_if:
-          {
-            deviceTypeList.Add(SPK.LightSwitch);
-            deviceTypeList.Add(SPK.LightRGB);
-            deviceTypeList.Add(SPK.LightRGBW);
-            deviceTypeList.Add(SPK.LightDimming);
-            deviceTypeList.Add(SPK.LightCCT);
-            deviceTypeList.Add(SPK.CurtainSwitch);
-            deviceTypeList.Add(SPK.CurtainRoller);
-            deviceTypeList.Add(SPK.CurtainTrietex);
-            deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);
-            deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
-            deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
-            deviceTypeList.Add(SPK.AirSwitch);
-            deviceTypeList.Add(SPK.PanelSocket);
-            deviceTypeList.Add(SPK.ElectricSocket);
-          }
-          break;
-      }
-      return deviceTypeList;
-    }
-    #endregion
-    /// <summary>
-    /// 鏄剧ず鐨勮澶囧垪琛�
-    /// </summary>
-    /// <param name="functionType">婧愭暟鎹垪琛�1</param>
-    /// <param name="deviceList">婧愭暟鎹垪琛�2</param>
-    /// <returns></returns>
-    public List<Entity.Function> GetShowDeviceList(List<string> functionType, List<HDL_ON.Entity.Function> deviceList)
-    {
-      List<HDL_ON.Entity.Function> devList = new List<Entity.Function>();
-      for (int i = 0; i < deviceList.Count; i++)
-      {
-        var dev = deviceList[i];
-        //杩囨护鎺変笉闇�瑕佹樉绀虹殑璁惧
-        if (functionType.Contains(dev.spk))
-        {
-          devList.Add(dev);
         }
-
-      }
-
-      return devList;
-    }
-    /// <summary>
-    /// 杩斿洖鏈�缁堟敮鎸佹樉绀哄嚭鏉ョ殑璁惧鍒楄〃
-    /// </summary>
-    /// <param name="room">褰撳墠鎴块棿</param>
-    /// <param name="str">鍒ゆ柇绗︼紙琛ㄧず=杈撳叆璁惧鍜岃緭鍑鸿澶囷級</param>
-    /// <returns></returns>
-    public List<Entity.Function> GetFunctionDeviceList(Entity.Room room, string str)
-    {
-      List<string> functionTypeList = GetSupportEquipment(str);
-      //杩斿洖鎴块棿璁惧鍒楄〃
-      var roomDeviceList = GetRoomDevice(room);
-      //杩斿洖鏈�缁堟敮鎸佹樉绀哄嚭鏉ョ殑璁惧鍒楄〃
-      var list = GetShowDeviceList(functionTypeList, roomDeviceList);
-      return list;
-    }
-    /// <summary>
-    /// 缃戝叧ID(鑾峰彇鍢変箰缃戝叧ID)
-    /// </summary>
-    public string GatewayId
-    {
-      get
-      {
-        if (Entity.DB_ResidenceData.Instance.HomeGateway == null)
+        /// <summary>
+        /// 鏉′欢/鐩爣鏀寔璁惧
+        /// </summary>
+        /// <returns></returns>
+        public List<string> GetSupportEquipment(string if_type)
         {
-          return DriverLayer.Control.Ins.GatewayId;
-        }
-        return Entity.DB_ResidenceData.Instance.HomeGateway.gatewayId;
-      }
-    }
-    /// <summary>
-    /// 浣忓畢ID
-    /// </summary>
-    public string HomeId
-    {
-      get
-      {
-        return Entity.DB_ResidenceData.Instance.CurrentRegion.id;
-      }
-    }
-    /// <summary>
-    /// 鏄惁涓哄叾浠栦富鐢ㄦ埛鍒嗕韩杩囨潵鐨勪綇瀹�
-    /// </summary>
-    public bool IsOthreShare
-    {
-      get
-      {
-        return Entity.DB_ResidenceData.Instance.CurrentRegion.isOtherShare;
-      }
-    }
-
-    #region 楂樺痉鍧愭爣杞琖GS84鍧愭爣
-    /// <summary>
-    /// 楂樺痉鍧愭爣杞琖GS84鍧愭爣
-    /// </summary>
-    /// <param name="in_lng"></param>
-    /// <param name="in_lat"></param>
-    /// <param name="out_lng"></param>
-    /// <param name="out_lat"></param>
-    public void GCJ02_to_WGS84(double in_lng, double in_lat, out double out_lng, out double out_lat)
-    {
-      if (OutOfChina(in_lat, in_lng))
-      {
-        out_lng = in_lng;
-        out_lat = in_lat;
-        return;
-      }
-
-      CalculateDev(in_lng, in_lat, out out_lng, out out_lat);
-      out_lng = in_lng - out_lng;
-      out_lat = in_lat - out_lat;
-    }
-    #endregion
-
-    #region WGS84鍧愭爣杞珮寰峰潗鏍�
-    /// <summary>
-    /// WGS84鍧愭爣杞珮寰峰潗鏍�
-    /// </summary>
-    /// <param name="in_lng">缁忓害</param>
-    /// <param name="in_lat">绾害</param>
-    /// <param name="out_lng"></param>
-    /// <param name="out_lat"></param>
-    public void WGS84_to_GCJ02(double in_lng, double in_lat, out double out_lng, out double out_lat)
-    {
-      if (OutOfChina(in_lat, in_lng))
-      {
-        out_lng = in_lng;
-        out_lat = in_lat;
-        return;
-      }
-
-      CalculateDev(in_lng, in_lat, out out_lng, out out_lat);
-      out_lng = in_lng + out_lng;
-      out_lat = in_lat + out_lat;
-    }
-    #endregion
-
-    /// <summary>
-    /// 鍧愭爣鏄惁鍦ㄤ腑鍥藉鍐�
-    /// </summary>
-    /// <param name="lat"></param>
-    /// <param name="lng"></param>
-    /// <returns></returns>
-    public bool OutOfChina(double lat, double lng)
-    {
-      if (lng < 72.004 || lng > 137.8347)
-        return true;
-      if (lat < 0.8293 || lat > 55.8271)
-        return true;
-      return false;
-    }
-    /// <summary>
-    /// 璁$畻鍋忓樊
-    /// </summary>
-    /// <param name="in_lng"></param>
-    /// <param name="in_lat"></param>
-    /// <param name="dLng"></param>
-    /// <param name="dLat"></param>
-    private void CalculateDev(double in_lng, double in_lat, out double dLng, out double dLat)
-    {
-      dLat = TransformLat(in_lng - 105.0, in_lat - 35.0);
-      dLng = TransformLng(in_lng - 105.0, in_lat - 35.0);
-
-      double radLat = in_lat / 180.0 * pi;
-      double magic = Math.Sin(radLat);
-      magic = 1 - ee * magic * magic;
-      double sqrtMagic = Math.Sqrt(magic);
-      dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
-      dLng = (dLng * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi);
-    }
-
-    private double TransformLat(double x, double y)
-    {
-      double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x));
-      ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
-      ret += (20.0 * Math.Sin(y * pi) + 40.0 * Math.Sin(y / 3.0 * pi)) * 2.0 / 3.0;
-      ret += (160.0 * Math.Sin(y / 12.0 * pi) + 320 * Math.Sin(y * pi / 30.0)) * 2.0 / 3.0;
-      return ret;
-    }
-    private double TransformLng(double x, double y)
-    {
-      double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x));
-      ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
-      ret += (20.0 * Math.Sin(x * pi) + 40.0 * Math.Sin(x / 3.0 * pi)) * 2.0 / 3.0;
-      ret += (150.0 * Math.Sin(x / 12.0 * pi) + 300.0 * Math.Sin(x / 30.0 * pi)) * 2.0 / 3.0;
-      return ret;
-    }
-    // 妞悆鍙傛暟-鍦嗗懆鐜�
-    private const double pi = 3.14159265358979324;
-
-    // (鍖椾含54)妞悆闀垮崐杞达紝鍗槦妞悆鍧愭爣鎶曞奖鍒板钩闈㈠湴鍥惧潗鏍囩郴鐨勬姇褰卞洜瀛�
-    private const double a = 6378245.0;
-    /*
-        * Krasovsky 1940 (鍖椾含54)妞悆闀垮崐杞寸涓�鍋忓績鐜囧钩鏂�
-        * 璁$畻鏂瑰紡锛�
-        * 闀垮崐杞达細
-        * a = 6378245.0
-        * 鎵佺巼锛�
-        * 1/f = 298.3锛堝彉閲忕浉鍏宠绠椾负锛�(a-b)/a锛�
-        * 鐭崐杞达細
-        * b = 6356863.0188 (鍙橀噺鐩稿叧璁$畻鏂规硶涓猴細b = a * (1 - f))
-        * 绗竴鍋忓績鐜囧钩鏂�:
-        * e2 = (a^2 - b^2) / a^2;
-    */
-    private const double ee = 0.00669342162296594323;
-
-    /// <summary>
-    /// APP涓婃姤GPS缁忕含搴�
-    /// </summary>
-    /// <param name="lon">APP GPS缁忓害</param>
-    /// <param name="lat">APP GPS绾害</param>
-    public void AppLatAndLonEvent(double lon, double lat)
-    {
-      Console.WriteLine($"GPS缁忓害===={lon}  \nGPS绾害===={lat}");
-      //Application.LocationAction += (lon, lat) =>
-      //{
-      //  Console.WriteLine($"GPS缁忓害===={lon}");
-      //  Console.WriteLine($"GPS绾害===={lat}");
-      //  ////GPS鍧愭爣杞垚楂樺痉鍧愭爣
-      //  //double out_lng, out_lat;
-      //  //this.WGS84_to_GCJ02(lon, lat, out out_lng, out out_lat);
-      //  //涓婃姤缁忕含搴�
-      //  this.AutomatedGeofenceStatusReporting(lon, lat);
-      //};
-      //涓婃姤缁忕含搴�<gps 涓婃姤鏉′欢澶т簬30绉掍笖绉诲姩璺濈澶т簬100绫筹紝涓婃姤缁忕含搴�>
-      this.AutomatedGeofenceStatusReporting(lon, lat);
-    }
-
-    /// <summary>
-    /// 鑷姩鍖栧湴鐞嗗洿鏍忕姸鎬佷笂鎶ヤ簯绔�
-    /// </summary>
-    /// <param name="out_lng">APP GPS缁忓害</param>
-    /// <param name="out_lat">APP GPS绾害</param>
-    private void AutomatedGeofenceStatusReporting(double out_lng, double out_lat)
-    {
-      if (IsOthreShare)
-      {
-        //涓嶆槸涓昏处鍙风洿鎺ヨ繑鍥�
-        return;
-      }
-      List<LogicData> logicDataList = new List<LogicData>();
-      logicDataList.Clear();
-      System.Threading.Tasks.Task.Run(() =>
-      {
-        try
-        {
-          //鑾峰彇閫昏緫ID鍒楄〃锛岀洰鍓嶉拡瀵规墍鏈�<澶囨敞:濡傛灉鍙拡瀵瑰綋鍓嶆墜鏈虹殑璇濓紝鍙互鐩存帴鎷跨紦瀛樻暟鎹嚜鍔ㄥ寲鍒楄〃閬嶅巻>
-          var idStr = Send.GetLogicIdList();
-          if (idStr.Code == "0" && idStr.Data != null && idStr.Data.ToString() != "")
-          {
-            var date = Newtonsoft.Json.JsonConvert.SerializeObject(idStr.Data);
-            logicDataList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LogicData>>(date);
-          }
-          ///鏈夎嚜鍔ㄥ垪琛ㄦ墠澶勭悊
-          if (logicDataList.Count > 0)
-          {
-            ///閬嶅巻鎵�鏈夊垪琛�
-            for (int i = 0; i < logicDataList.Count; i++)
+            List<string> deviceTypeList = new List<string>();
+            switch (if_type)
             {
-              var logicDate = logicDataList[i];
-              ///鑷姩鍖栨病鏈夐厤缃湴鐞嗗洿鏍忎笉澶勭悊
-              if (string.IsNullOrEmpty(logicDate.geo_fence.latitude) || string.IsNullOrEmpty(logicDate.geo_fence.longitude))
-              {
-                //缁忕含搴︿负绌�,璁や负鑷姩鍖栨病鏈夐厤缃湴鐞嗗洿鏍忥紝涓嶅鐞�;
-                continue;
-              }
-              //鑷姩鍖栭厤缃緭鍏ユ潯浠剁含搴�
-              double lat = Convert.ToDouble(logicDate.geo_fence.latitude.Replace(",", "."));
-              //鑷姩鍖栭厤缃緭鍏ユ潯浠剁粡搴�
-              double lon = Convert.ToDouble(logicDate.geo_fence.longitude.Replace(",", "."));
-              //鑷姩鍖栭厤缃緭鍏ユ潯浠�<鍦扮悊鍥存爮鍗婂緞><鍗曚綅锛屽叕閲屻�佸崈绫�.绫�>
-              int radius = int.Parse(logicDate.geo_fence.radius);
-              //璁$畻2涓粡绾害涔嬮棿鐨勮窛绂�
-              int r = Infrastructure.Service.Helper.CalculatedDistance.Distance(out_lat, out_lng, lat, lon);
-              //瀹氫箟涓�涓眬閮ㄥ彉閲�
-              string direction = string.Empty;
-              //涓ょ偣璺濈灏忎簬閰嶇疆璺濈<鏃㈣嚜鍔ㄥ寲閰嶇疆杈撳叆鏉′欢鍦扮悊鍥存爮鍗婂緞>,璇存槑杩涘叆鍖哄煙
-              if (r < radius)
-              {
-                //鍒拌揪鏌愬湴
-                direction = "arrive";
-              }
-              else
-              {
-                //绂诲紑
-                direction = "leave";
-              }
-              ///閬嶅巻缂撳瓨鍒楄〃<涓嶄负绌鸿鏄庢暟鎹凡缁忔帹閫佽繃锛屼笉鍐嶆帹閫�>
-              var isPush = pushList.Find((o) => o.homeId == HomeId && o.userId == UserInfo.Current.ID && o.userLogicId == logicDate.userLogicId && o.arriveOnLeave == direction);
-              if (isPush == null)
-              {
-                //鎺ㄩ�佺粰浜戠鏄惁鎴愬姛
-                bool push = Send.GeoFenceStateReport(logicDate.userLogicId, logicDate.sid, direction);
-                if (push)
+                case condition_if:
+                    {
+                        deviceTypeList.Add(SPK.LightSwitch);
+                        deviceTypeList.Add(SPK.LightRGB);
+                        deviceTypeList.Add(SPK.LightRGBW);
+                        deviceTypeList.Add(SPK.LightDimming);
+                        deviceTypeList.Add(SPK.LightCCT);
+                        deviceTypeList.Add(SPK.CurtainSwitch);
+                        deviceTypeList.Add(SPK.CurtainRoller);
+                        deviceTypeList.Add(SPK.CurtainTrietex);
+                        deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);
+                        deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
+                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
+                        deviceTypeList.Add(SPK.SensorSmoke);
+                        deviceTypeList.Add(SPK.SensorWater);
+                        deviceTypeList.Add(SPK.SensorGas);
+                        deviceTypeList.Add(SPK.SensorDryContact); deviceTypeList.Add(SPK.SensorDryContact2);
+                        deviceTypeList.Add(SPK.SensorShanLan);
+                        deviceTypeList.Add(SPK.SensorDuiShe);
+                        deviceTypeList.Add(SPK.SensorPir);
+                        deviceTypeList.Add(SPK.SensorDoorWindow);
+                        deviceTypeList.Add(SPK.SensorUtrasonic);
+                        deviceTypeList.Add(SPK.SenesorMegahealth);
+                        deviceTypeList.Add(SPK.SenesorMegahealth2);
+                        deviceTypeList.Add(SPK.SensorEnvironment);
+                        deviceTypeList.Add(SPK.SensorEnvironment2);
+                        deviceTypeList.Add(SPK.SensorEnvironment3);
+                        deviceTypeList.Add(SPK.SensorTemperature);
+                        deviceTypeList.Add(SPK.SensorHumidity);
+                        deviceTypeList.Add(SPK.SensorCO2);
+                        deviceTypeList.Add(SPK.SensorPm25);
+                        deviceTypeList.Add(SPK.SensorTVOC);
+                        deviceTypeList.Add(SPK.SensorHcho);
+                        deviceTypeList.Add(SPK.AirSwitch);
+                        deviceTypeList.Add(SPK.PanelSocket);
+                        deviceTypeList.Add(SPK.ElectricSocket);
+                        deviceTypeList.Add(SPK.HvacCac);
+                        deviceTypeList.Add(SPK.SensorHelp);
+                        deviceTypeList.Add(SPK.DoorLock);
+
+                    }
+                    break;
+                case target_if:
+                    {
+                        deviceTypeList.Add(SPK.LightSwitch);
+                        deviceTypeList.Add(SPK.LightRGB);
+                        deviceTypeList.Add(SPK.LightRGBW);
+                        deviceTypeList.Add(SPK.LightDimming);
+                        deviceTypeList.Add(SPK.LightCCT);
+                        deviceTypeList.Add(SPK.CurtainSwitch);
+                        deviceTypeList.Add(SPK.CurtainRoller);
+                        deviceTypeList.Add(SPK.CurtainTrietex);
+                        deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);
+                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
+                        deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
+                        deviceTypeList.Add(SPK.AirSwitch);
+                        deviceTypeList.Add(SPK.PanelSocket);
+                        deviceTypeList.Add(SPK.ElectricSocket);
+                    }
+                    break;
+            }
+            return deviceTypeList;
+        }
+        #endregion
+        /// <summary>
+        /// 鏄剧ず鐨勮澶囧垪琛�
+        /// </summary>
+        /// <param name="functionType">婧愭暟鎹垪琛�1</param>
+        /// <param name="deviceList">婧愭暟鎹垪琛�2</param>
+        /// <returns></returns>
+        public List<Entity.Function> GetShowDeviceList(List<string> functionType, List<HDL_ON.Entity.Function> deviceList)
+        {
+            List<HDL_ON.Entity.Function> devList = new List<Entity.Function>();
+            for (int i = 0; i < deviceList.Count; i++)
+            {
+                var dev = deviceList[i];
+                //杩囨护鎺変笉闇�瑕佹樉绀虹殑璁惧
+                if (functionType.Contains(dev.spk))
                 {
-                  ///娣诲姞鍒版帹閫佸垪琛�
-                  pushList.Add(new Push
-                  {
-                    homeId = HomeId,
-                    userId = UserInfo.Current.ID,
-                    userLogicId = logicDate.userLogicId,
-                    sid = logicDate.sid,
-                    arriveOnLeave = direction,
-                  });
+                    devList.Add(dev);
                 }
-              }
+
             }
 
-          }
+            return devList;
         }
-        catch { }
-      });
+        /// <summary>
+        /// 杩斿洖鏈�缁堟敮鎸佹樉绀哄嚭鏉ョ殑璁惧鍒楄〃
+        /// </summary>
+        /// <param name="room">褰撳墠鎴块棿</param>
+        /// <param name="str">鍒ゆ柇绗︼紙琛ㄧず=杈撳叆璁惧鍜岃緭鍑鸿澶囷級</param>
+        /// <returns></returns>
+        public List<Entity.Function> GetFunctionDeviceList(Entity.Room room, string str)
+        {
+            List<string> functionTypeList = GetSupportEquipment(str);
+            //杩斿洖鎴块棿璁惧鍒楄〃
+            var roomDeviceList = GetRoomDevice(room);
+            //杩斿洖鏈�缁堟敮鎸佹樉绀哄嚭鏉ョ殑璁惧鍒楄〃
+            var list = GetShowDeviceList(functionTypeList, roomDeviceList);
+            return list;
+        }
+        /// <summary>
+        /// 缃戝叧ID(鑾峰彇鍢変箰缃戝叧ID)
+        /// </summary>
+        public string GatewayId
+        {
+            get
+            {
+                if (Entity.DB_ResidenceData.Instance.HomeGateway == null)
+                {
+                    return DriverLayer.Control.Ins.GatewayId;
+                }
+                return Entity.DB_ResidenceData.Instance.HomeGateway.gatewayId;
+            }
+        }
+        /// <summary>
+        /// 浣忓畢ID
+        /// </summary>
+        public string HomeId
+        {
+            get
+            {
+                return Entity.DB_ResidenceData.Instance.CurrentRegion.id;
+            }
+        }
+        /// <summary>
+        /// 鏄惁涓哄叾浠栦富鐢ㄦ埛鍒嗕韩杩囨潵鐨勪綇瀹�
+        /// </summary>
+        public bool IsOthreShare
+        {
+            get
+            {
+                return Entity.DB_ResidenceData.Instance.CurrentRegion.isOtherShare;
+            }
+        }
+
+        #region 楂樺痉鍧愭爣杞琖GS84鍧愭爣
+        /// <summary>
+        /// 楂樺痉鍧愭爣杞琖GS84鍧愭爣
+        /// </summary>
+        /// <param name="in_lng"></param>
+        /// <param name="in_lat"></param>
+        /// <param name="out_lng"></param>
+        /// <param name="out_lat"></param>
+        public void GCJ02_to_WGS84(double in_lng, double in_lat, out double out_lng, out double out_lat)
+        {
+            if (OutOfChina(in_lat, in_lng))
+            {
+                out_lng = in_lng;
+                out_lat = in_lat;
+                return;
+            }
+
+            CalculateDev(in_lng, in_lat, out out_lng, out out_lat);
+            out_lng = in_lng - out_lng;
+            out_lat = in_lat - out_lat;
+        }
+        #endregion
+
+        #region WGS84鍧愭爣杞珮寰峰潗鏍�
+        /// <summary>
+        /// WGS84鍧愭爣杞珮寰峰潗鏍�
+        /// </summary>
+        /// <param name="in_lng">缁忓害</param>
+        /// <param name="in_lat">绾害</param>
+        /// <param name="out_lng"></param>
+        /// <param name="out_lat"></param>
+        public void WGS84_to_GCJ02(double in_lng, double in_lat, out double out_lng, out double out_lat)
+        {
+            if (OutOfChina(in_lat, in_lng))
+            {
+                out_lng = in_lng;
+                out_lat = in_lat;
+                return;
+            }
+
+            CalculateDev(in_lng, in_lat, out out_lng, out out_lat);
+            out_lng = in_lng + out_lng;
+            out_lat = in_lat + out_lat;
+        }
+        #endregion
+
+        /// <summary>
+        /// 鍧愭爣鏄惁鍦ㄤ腑鍥藉鍐�
+        /// </summary>
+        /// <param name="lat"></param>
+        /// <param name="lng"></param>
+        /// <returns></returns>
+        public bool OutOfChina(double lat, double lng)
+        {
+            if (lng < 72.004 || lng > 137.8347)
+                return true;
+            if (lat < 0.8293 || lat > 55.8271)
+                return true;
+            return false;
+        }
+        /// <summary>
+        /// 璁$畻鍋忓樊
+        /// </summary>
+        /// <param name="in_lng"></param>
+        /// <param name="in_lat"></param>
+        /// <param name="dLng"></param>
+        /// <param name="dLat"></param>
+        private void CalculateDev(double in_lng, double in_lat, out double dLng, out double dLat)
+        {
+            dLat = TransformLat(in_lng - 105.0, in_lat - 35.0);
+            dLng = TransformLng(in_lng - 105.0, in_lat - 35.0);
+
+            double radLat = in_lat / 180.0 * pi;
+            double magic = Math.Sin(radLat);
+            magic = 1 - ee * magic * magic;
+            double sqrtMagic = Math.Sqrt(magic);
+            dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
+            dLng = (dLng * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi);
+        }
+
+        private double TransformLat(double x, double y)
+        {
+            double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x));
+            ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
+            ret += (20.0 * Math.Sin(y * pi) + 40.0 * Math.Sin(y / 3.0 * pi)) * 2.0 / 3.0;
+            ret += (160.0 * Math.Sin(y / 12.0 * pi) + 320 * Math.Sin(y * pi / 30.0)) * 2.0 / 3.0;
+            return ret;
+        }
+        private double TransformLng(double x, double y)
+        {
+            double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x));
+            ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
+            ret += (20.0 * Math.Sin(x * pi) + 40.0 * Math.Sin(x / 3.0 * pi)) * 2.0 / 3.0;
+            ret += (150.0 * Math.Sin(x / 12.0 * pi) + 300.0 * Math.Sin(x / 30.0 * pi)) * 2.0 / 3.0;
+            return ret;
+        }
+        // 妞悆鍙傛暟-鍦嗗懆鐜�
+        private const double pi = 3.14159265358979324;
+
+        // (鍖椾含54)妞悆闀垮崐杞达紝鍗槦妞悆鍧愭爣鎶曞奖鍒板钩闈㈠湴鍥惧潗鏍囩郴鐨勬姇褰卞洜瀛�
+        private const double a = 6378245.0;
+        /*
+            * Krasovsky 1940 (鍖椾含54)妞悆闀垮崐杞寸涓�鍋忓績鐜囧钩鏂�
+            * 璁$畻鏂瑰紡锛�
+            * 闀垮崐杞达細
+            * a = 6378245.0
+            * 鎵佺巼锛�
+            * 1/f = 298.3锛堝彉閲忕浉鍏宠绠椾负锛�(a-b)/a锛�
+            * 鐭崐杞达細
+            * b = 6356863.0188 (鍙橀噺鐩稿叧璁$畻鏂规硶涓猴細b = a * (1 - f))
+            * 绗竴鍋忓績鐜囧钩鏂�:
+            * e2 = (a^2 - b^2) / a^2;
+        */
+        private const double ee = 0.00669342162296594323;
+
+        /// <summary>
+        /// APP涓婃姤GPS缁忕含搴�
+        /// </summary>
+        /// <param name="lon">APP GPS缁忓害</param>
+        /// <param name="lat">APP GPS绾害</param>
+        public void AppLatAndLonEvent(double lon, double lat)
+        {
+            Console.WriteLine($"GPS缁忓害===={lon}  \nGPS绾害===={lat}");
+            //Application.LocationAction += (lon, lat) =>
+            //{
+            //  Console.WriteLine($"GPS缁忓害===={lon}");
+            //  Console.WriteLine($"GPS绾害===={lat}");
+            //  ////GPS鍧愭爣杞垚楂樺痉鍧愭爣
+            //  //double out_lng, out_lat;
+            //  //this.WGS84_to_GCJ02(lon, lat, out out_lng, out out_lat);
+            //  //涓婃姤缁忕含搴�
+            //  this.AutomatedGeofenceStatusReporting(lon, lat);
+            //};
+            //涓婃姤缁忕含搴�<gps 涓婃姤鏉′欢澶т簬30绉掍笖绉诲姩璺濈澶т簬100绫筹紝涓婃姤缁忕含搴�>
+            this.AutomatedGeofenceStatusReporting(lon, lat);
+        }
+
+        /// <summary>
+        /// 鑷姩鍖栧湴鐞嗗洿鏍忕姸鎬佷笂鎶ヤ簯绔�
+        /// </summary>
+        /// <param name="out_lng">APP GPS缁忓害</param>
+        /// <param name="out_lat">APP GPS绾害</param>
+        private void AutomatedGeofenceStatusReporting(double out_lng, double out_lat)
+        {
+            if (IsOthreShare)
+            {
+                //涓嶆槸涓昏处鍙风洿鎺ヨ繑鍥�
+                return;
+            }
+            List<LogicData> logicDataList = new List<LogicData>();
+            logicDataList.Clear();
+            System.Threading.Tasks.Task.Run(() =>
+            {
+                try
+                {
+              //鑾峰彇閫昏緫ID鍒楄〃锛岀洰鍓嶉拡瀵规墍鏈�<澶囨敞:濡傛灉鍙拡瀵瑰綋鍓嶆墜鏈虹殑璇濓紝鍙互鐩存帴鎷跨紦瀛樻暟鎹嚜鍔ㄥ寲鍒楄〃閬嶅巻>
+              var idStr = Send.GetLogicIdList();
+                    if (idStr.Code == "0" && idStr.Data != null && idStr.Data.ToString() != "")
+                    {
+                        var date = Newtonsoft.Json.JsonConvert.SerializeObject(idStr.Data);
+                        logicDataList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LogicData>>(date);
+                    }
+              ///鏈夎嚜鍔ㄥ垪琛ㄦ墠澶勭悊
+              if (logicDataList.Count > 0)
+                    {
+                  ///閬嶅巻鎵�鏈夊垪琛�
+                  for (int i = 0; i < logicDataList.Count; i++)
+                        {
+                            var logicDate = logicDataList[i];
+                      ///鑷姩鍖栨病鏈夐厤缃湴鐞嗗洿鏍忎笉澶勭悊
+                      if (string.IsNullOrEmpty(logicDate.geo_fence.latitude) || string.IsNullOrEmpty(logicDate.geo_fence.longitude))
+                            {
+                          //缁忕含搴︿负绌�,璁や负鑷姩鍖栨病鏈夐厤缃湴鐞嗗洿鏍忥紝涓嶅鐞�;
+                          continue;
+                            }
+                      //鑷姩鍖栭厤缃緭鍏ユ潯浠剁含搴�
+                      double lat = Convert.ToDouble(logicDate.geo_fence.latitude.Replace(",", "."));
+                      //鑷姩鍖栭厤缃緭鍏ユ潯浠剁粡搴�
+                      double lon = Convert.ToDouble(logicDate.geo_fence.longitude.Replace(",", "."));
+                      //鑷姩鍖栭厤缃緭鍏ユ潯浠�<鍦扮悊鍥存爮鍗婂緞><鍗曚綅锛屽叕閲屻�佸崈绫�.绫�>
+                      int radius = int.Parse(logicDate.geo_fence.radius);
+                      //璁$畻2涓粡绾害涔嬮棿鐨勮窛绂�
+                      int r = Infrastructure.Service.Helper.CalculatedDistance.Distance(out_lat, out_lng, lat, lon);
+                      //瀹氫箟涓�涓眬閮ㄥ彉閲�
+                      string direction = string.Empty;
+                      //涓ょ偣璺濈灏忎簬閰嶇疆璺濈<鏃㈣嚜鍔ㄥ寲閰嶇疆杈撳叆鏉′欢鍦扮悊鍥存爮鍗婂緞>,璇存槑杩涘叆鍖哄煙
+                      if (r < radius)
+                            {
+                          //鍒拌揪鏌愬湴
+                          direction = "arrive";
+                            }
+                            else
+                            {
+                          //绂诲紑
+                          direction = "leave";
+                            }
+                      ///閬嶅巻缂撳瓨鍒楄〃<涓嶄负绌鸿鏄庢暟鎹凡缁忔帹閫佽繃锛屼笉鍐嶆帹閫�>
+                      var isPush = pushList.Find((o) => o.homeId == HomeId && o.userId == UserInfo.Current.ID && o.userLogicId == logicDate.userLogicId && o.arriveOnLeave == direction);
+                            if (isPush == null)
+                            {
+                          //鎺ㄩ�佺粰浜戠鏄惁鎴愬姛
+                          bool push = Send.GeoFenceStateReport(logicDate.userLogicId, logicDate.sid, direction);
+                                if (push)
+                                {
+                              ///娣诲姞鍒版帹閫佸垪琛�
+                              pushList.Add(new Push
+                                    {
+                                        homeId = HomeId,
+                                        userId = UserInfo.Current.ID,
+                                        userLogicId = logicDate.userLogicId,
+                                        sid = logicDate.sid,
+                                        arriveOnLeave = direction,
+                                    });
+                                }
+                            }
+                        }
+
+                    }
+                }
+                catch { }
+            });
+        }
+        /// <summary>
+        /// 鎺ㄩ�佸垪琛�<杩欓噷鏁版嵁宸茬粡鎺ㄩ�佽繃>
+        /// </summary>
+        private static List<Push> pushList = new List<Push>();
+
     }
-    /// <summary>
-    /// 鎺ㄩ�佸垪琛�<杩欓噷鏁版嵁宸茬粡鎺ㄩ�佽繃>
-    /// </summary>
-    private static List<Push> pushList = new List<Push>();
+    public class Push
+    {
+        /// <summary>
+        /// 浜戠鍞竴id
+        /// </summary>
+        public string userLogicId = "";
+        /// <summary>
+        /// 缃戝叧id
+        /// </summary>
+        public string gatewayId = "";
+        /// <summary>
+        /// 閫昏緫鍞竴鏍囪瘑
+        /// </summary>
+        public string sid = "";
+        /// <summary>
+        /// 浣忓畢id
+        /// </summary>
+        public string homeId = "";
+        /// <summary>
+        /// 鍒拌揪鏌愬湴 绂诲紑
+        /// </summary>
+        public string arriveOnLeave = "";
+        /// <summary>
+        /// 聽鐢ㄦ埛id
+        /// </summary>
+        public string userId = "";
 
-  }
-  public class Push
-  {
-    /// <summary>
-    /// 浜戠鍞竴id
-    /// </summary>
-    public string userLogicId = "";
-    /// <summary>
-    /// 缃戝叧id
-    /// </summary>
-    public string gatewayId = "";
-    /// <summary>
-    /// 閫昏緫鍞竴鏍囪瘑
-    /// </summary>
-    public string sid = "";
-    /// <summary>
-    /// 浣忓畢id
-    /// </summary>
-    public string homeId = "";
-    /// <summary>
-    /// 鍒拌揪鏌愬湴 绂诲紑
-    /// </summary>
-    public string arriveOnLeave = "";
-    /// <summary>
-    /// 聽鐢ㄦ埛id
-    /// </summary>
-    public string userId = "";
-
-  }
+    }
 }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/SwitchView.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/SwitchView.cs
index 0b9a0d1..290a07f 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/SwitchView.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/SwitchView.cs
@@ -97,7 +97,7 @@
         /// View鐨勬柟娉�
         /// </summary>
         ///  <param name="frame">鐖舵帶浠�</param>
-        /// <param name="i">鏄剧ず閫夋嫨View鏁伴噺</param>
+        /// <param name="i">琛ㄧずView鏁伴噺</param>
         ///<param name="stateVuale">涔嬪墠鐨勭姸鎬佸��</param>
         /// <param name="action">杩斿洖鍥炶皟</param>
         /// <returns></returns>
@@ -166,23 +166,30 @@
         /// View鐨勬柟娉�
         /// </summary>
         ///  <param name="frame">鐖舵帶浠�</param>
-        /// <param name="text1">鐖舵帶浠�</param>
-        /// <param name="text2">鏄剧ず閫夋嫨View鏁伴噺</param>
+        /// <param name="text1">绗竴涓娉�</param>
+        /// <param name="text2">绗簩涓娉�</param>
         ///<param name="stateVuale">涔嬪墠鐨勭姸鎬佸��</param>
+        /// <param name="i">琛ㄧずView鏁伴噺</param>
         /// <param name="action">杩斿洖鍥炶皟</param>
         /// <returns></returns>
-        public void FLayoutView(FrameLayout frame, int text1, int text2, string stateVuale, Action<int> action,bool tag=true)
+        public void FLayoutView(FrameLayout frame, int text1, int text2, string stateVuale, int i, Action<int> action,bool tag=true)
         {
-            int i = 2;
             frameLayout.Y = Application.GetRealHeight(603 - (44 * i));
             frameLayout.Height = Application.GetRealHeight(44 * i);
             frame.AddChidren(frameLayout);
             frame.AddChidren(btnCancel);
             btnOn.TextID = text1;
             btnOff.TextID = text2;
-            frameLayout.AddChidren(btnOn);
-            frameLayout.AddChidren(btnLine);
-            frameLayout.AddChidren(btnOff);
+            if (i == 1)
+            {
+                frameLayout.AddChidren(btnOn);
+            }
+            else if (i == 2)
+            {
+                frameLayout.AddChidren(btnOn);
+                frameLayout.AddChidren(btnLine);
+                frameLayout.AddChidren(btnOff);
+            }
             //鍙栨秷鐐瑰嚮浜嬩欢
             btnCancel.MouseUpEventHandler += (sender1, e1) =>
             {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs
index d23adfd..ee921ce 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/PublicInterface.cs
@@ -748,6 +748,93 @@
             return list;
         }
         /// <summary>
+        /// 鍔ㄦ�佽幏鍙栦紶鎰熷櫒绛夌骇鍒楄〃
+        /// </summary>
+        /// <param name="device">鍔熻兘(sid)</param>
+        /// <returns></returns>
+        public List<string> GetSensorLevelList(Entity.Function device)
+        {
+            List<string> list = new List<string>();
+            var dic = GetSensorLevelDic(device);
+            foreach (var d in dic) {
+                list.Add(d.Key);
+            }
+            return list;
+        }
+        /// <summary>
+        /// 鎸囧畾鑾峰彇绛夌骇鎷兼帴鐨勫瓧绗︿覆
+        /// </summary>
+        /// <param name="device">鍔熻兘(sid)</param>
+        /// <param name="s">鍒濆鍊�</param>
+        /// <param name="isTextBoolean">琛ㄧずtrue(杩斿洖key);false(杩斿洖values)</param>
+        /// <returns></returns>isTextBoolean
+        public string GetSensorLevelText(Entity.Function device, string s, bool isTextBoolean)
+        {
+            if (device == null || device.attrKeyConfigs == null)
+            {
+                return "";
+            }
+            var dic = GetSensorLevelDic(device);
+            if (isTextBoolean)
+            {
+                foreach (var d in dic)
+                {
+                    if (d.Value==s)
+                    {
+                        //濡傛灉values鍊煎瓨鍦紝杩斿洖key鍊�
+                        return d.Key.ToString();
+                    }
+                }
+                
+            }
+            else
+            {
+                foreach (var d in dic)
+                {
+                    if (d.Key==s)
+                    {
+                        //濡傛灉key鍊煎瓨鍦紝杩斿洖values鍊�
+                        return d.Value.ToString();
+                    }
+                }
+            }
+            return "";
+        }
+        /// <summary>
+        /// 鍔ㄦ�佽幏鍙栦紶鎰熷櫒绛夌骇瀛楀吀
+        /// </summary>
+        /// <param name="device">鍔熻兘(sid)</param>
+        /// <returns></returns>
+        public Dictionary<string,string> GetSensorLevelDic(Entity.Function device)
+        {
+            Dictionary<string, string> dic = new Dictionary<string, string>();
+            if (device == null || device.attrKeyConfigs == null)
+            {
+                return dic;
+            }
+            string strKey = "";
+            string strKeyValues = "";   
+            for (int i = 0; i < device.attrKeyConfigs.Count; i++)
+            {
+                var attrKeyConfig = device.attrKeyConfigs[i];
+                foreach (var attrKeyInfo in attrKeyConfig.configs)
+                {
+                    //鍔ㄦ�佹嫾鎺ュ瓧绗︿覆
+                    strKey = attrKeyInfo.desc + ":" + attrKeyInfo.start + "~" + attrKeyInfo.end + attrKeyConfig.unit;
+                    strKeyValues = "(" + attrKeyInfo.start + "," + attrKeyInfo.end + "]";
+                    if (!dic.ContainsKey(strKey))
+                    {
+                        //娌℃湁鍐嶆坊鍔�
+                        dic.Add(strKey, strKeyValues);
+                    }
+                   
+                }
+
+            }
+            return dic;
+        }
+
+        /// <summary>
         /// 妯″紡/椋庨�熶簰鐩歌浆鎹㈠�肩殑鏂规硶
         /// </summary>
         /// <param name="text">鏂囨湰</param>
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
index 8cae2d3..f429ada 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
@@ -173,6 +173,7 @@
         logicIfon.Add("noticeConfig", noticeConfigJObject);
         logicIfon.Add("pushConfigs", pushConfigsArray);
         logicjArray.Add(logicIfon);
+       //string str = logicIfon.ToString();
         var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
         responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Add, 5);
         //濡傛灉鏄痶oken杩囨湡鍒欏埛鏂皌oken
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
index 9866147..181c370 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
@@ -142,7 +142,7 @@
                         ///寮�鍏崇偣鍑讳簨浠�
                         curtainSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
                         {
-                            SwitchViewMethod(device, curtainSwitchView.btnState, 3);
+                            SwitchViewMethod(device, curtainSwitchView.btnState, 2);
                         };
                         if (edit)
                         {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
index 5d1ec08..ab3db01 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -98,7 +98,7 @@
 
         public void LoadPage(Action backRefresh)
         {
-            DB_ResidenceData.Instance.SupportFacePass
+             //DB_ResidenceData.Instance.sceneChooseRoomId
             new TopViewDiv(bodyView, Language.StringByID(StringId.EditScene)).LoadTopView(backRefresh);
             initPage();
         }
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMethod.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMethod.cs
index 4d7538c..4e1a37e 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMethod.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMethod.cs
@@ -574,6 +574,8 @@
                                 str = Language.StringByID(StringId.shebeibucunzai);
                             }
                             break;
+                            
+                        case "124006":
                         case "14006":
                             {
                                 str = Language.StringByID(StringId.shebeibuzaixian);
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
index 6f4b31f..4575ac6 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
@@ -291,6 +291,7 @@
         /// <returns></returns>
         public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 20)
         {
+            MainPage.Log("璇锋眰鏁版嵁=="+o.ToString());
             var requestJson = HttpUtil.GetSignRequestJson(o);
             return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
index cd5aefc..ca02d57 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
@@ -118,7 +118,15 @@
         /// </summary>
         private void InitFrameWhiteContent1()
         {
+            //鑾峰彇娓╁害鍊�
             temp = (int)Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+            if (temp <= 0)
+            {
+                //榛樿鍊兼敼鎴�16,2022骞�06鏈�10鏃�10:03:19 鎴愮敨瑕佹眰鐨�
+                temp = 16;
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+            }
+           
             arcBar = new DiyArcSeekBar()
             {
                 Gravity = Gravity.CenterHorizontal,
@@ -147,7 +155,7 @@
             arcBar.IsOffline = device.GetAttrState(FunctionAttributeKey.OnOff) == "off";
             arcBar.MinValue = device.GetAttribute(FunctionAttributeKey.SetTemp).min;
             arcBar.MaxValue = device.GetAttribute(FunctionAttributeKey.SetTemp).max;
-            arcBar.Progress = (int)Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+            arcBar.Progress = temp;
 
             btnTemp = new Button()
             {
@@ -158,7 +166,7 @@
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = 50,
                 IsBold = true,
-                Text = Convert.ToDouble( device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")).ToString(),
+                Text = Convert.ToDouble(temp).ToString(),
                 TextAlignment = TextAlignment.Center,
             };
             FrameWhiteCentet1.AddChidren(btnTemp);
@@ -1049,7 +1057,7 @@
                     btnSwing.UnSelectedImagePath = acFunction.GetSwingIconPath(device.GetAttrState(FunctionAttributeKey.Swing), false);
                     btnWindSpeed.UnSelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed), false);
                     temp = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")));
-
+                   
 
                     arcBar.Progress = temp;
                     btnTemp.Text = temp.ToString() ;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacControlPage.cs
new file mode 100644
index 0000000..0aa3098
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacControlPage.cs
@@ -0,0 +1,663 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DriverLayer;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class CacControlPage : DeviceFunctionCardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+        /// <summary>
+        /// 绌鸿皟娓╁害鎺у埗鎺т欢
+        /// </summary>
+        DiyArcSeekBar arcBar;
+        /// <summary>
+        /// 鍑忓彿鎸夐挳
+        /// </summary>
+        Button btnMinus;
+        /// <summary>
+        /// 鍔犲彿鎸夐挳
+        /// </summary>
+        Button btnPlus;
+        /// <summary>
+        /// 娓╁害鎸夐挳
+        /// </summary>
+        Button btnTemp;
+        Button btnTempUint;
+        /// <summary>
+        /// 瀹ゅ唴娓╁害鎸夐挳
+        /// </summary>
+        Button btnIndoorTemp;
+        /// <summary>
+        /// 妯″紡鎸夐挳
+        /// </summary>
+        Button btnMode;
+        /// <summary>
+        /// 椋庨�熸寜閽�
+        /// </summary>
+        Button btnWindSpeed;
+        /// <summary>
+        /// 寮�鍏虫寜閽�
+        /// </summary>
+        Button btnSwitch;
+
+        AC acFunction = new AC();
+
+        /// <summary>
+        /// 鎺у埗鏃堕棿
+        /// </summary>
+        DateTime controlTime = DateTime.MinValue.AddDays(10);
+        /// <summary>
+        /// 鎺у埗娓╁害
+        /// </summary>
+        int temp = 16;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+
+            var sk = device.GetAttribute(FunctionAttributeKey.SetTemp);
+            if (sk != null)
+            {
+                if (sk.min == 0)
+                {
+                    sk.min = 16;
+                }
+                if (sk.max == 0)
+                {
+                    sk.max = 32;
+                }
+            }
+
+            base.ShowColltionButton = false;
+            base.SetTitleText(Language.StringByID(StringId.Electric));
+
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(this.device);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                while (true)
+                {
+                    if (controlTime == DateTime.MinValue)
+                    {
+
+                    }
+                    else if (controlTime.AddSeconds(2) < DateTime.Now)
+                    {
+                        Control.Ins.SendReadCommand(device);
+                        controlTime = DateTime.MinValue;
+                    }
+                    System.Threading.Thread.Sleep(1000);
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            Button btnJinmaoIcon = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(94),
+                Width = Application.GetRealWidth(164),
+                Height = Application.GetRealHeight(43),
+                UnSelectedImagePath = "FunctionIcon/CAC/JinMaoIcon.png"
+            };
+            FrameWhiteCentet1.AddChidren(btnJinmaoIcon);
+
+
+            temp = (int)Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+            if (temp <= 0)
+            {
+                //榛樿鍊兼敼鎴�16,2022骞�06鏈�10鏃�10:03:19 鎴愮敨瑕佹眰鐨�
+                temp = 16;
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+            }
+            arcBar = new DiyArcSeekBar()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                OpenAngle = 160,
+                ThumbImageHeight = Application.GetRealWidth(50),
+                ProgressBarColor = CSS_Color.MainColor,
+                OfflineProgressBarColor = CSS_Color.PromptingColor2,
+                ArcColor = CSS_Color.BackgroundColor,
+#if __IOS__
+                Y = Application.GetRealHeight(120 + 25),
+                Width = Application.GetRealWidth(260 - 40),
+                Height = Application.GetRealWidth(260 - 40),
+                SeekBarPadding = Application.GetRealWidth(8),
+#else
+                Y = Application.GetRealHeight(120 + 40),
+                Width = Application.GetRealWidth(260 - 40),
+                Height = Application.GetRealWidth(260 - 40),
+                SeekBarPadding = Application.GetRealWidth(7),
+#endif
+
+            };
+            FrameWhiteCentet1.AddChidren(arcBar);
+
+
+            arcBar.ThumbImagePath = device.GetAttrState(FunctionAttributeKey.OnOff) == "on" ? "FunctionIcon/AC/DiyThumbIconOn.png" : "FunctionIcon/AC/DiyThumbIcon.png";
+            arcBar.IsOffline = device.GetAttrState(FunctionAttributeKey.OnOff) == "off";
+            arcBar.MinValue = device.GetAttribute(FunctionAttributeKey.SetTemp).min;
+            arcBar.MaxValue = device.GetAttribute(FunctionAttributeKey.SetTemp).max;
+            arcBar.Progress =temp;
+
+            btnTemp = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(206),
+                Width = Application.GetRealWidth(71),
+                Height = Application.GetRealWidth(60),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 50,
+                IsBold = true,
+                Text = Convert.ToDouble(temp).ToString(),
+                TextAlignment = TextAlignment.Center,
+            };
+            FrameWhiteCentet1.AddChidren(btnTemp);
+
+            btnTempUint = new Button()
+            {
+                X = btnTemp.Right,
+                Y = btnTemp.Y,
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealHeight(30),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+                IsBold = true,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = "掳C",
+            };
+            FrameWhiteCentet1.AddChidren(btnTempUint);
+
+            btnIndoorTemp = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnTemp.Bottom,
+                Width = Application.GetRealWidth(120),
+                Height = Application.GetRealHeight(20),
+                Text = Language.StringByID(StringId.IndoorTemp) + "20掳C/" + Language.StringByID(StringId.Humidity) +"45%",
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            FrameWhiteCentet1.AddChidren(btnIndoorTemp);
+
+            btnMinus = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Y = Application.GetRealHeight(263),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/MinusSignIcon.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnMinus);
+
+            btnPlus = new Button()
+            {
+                X = Application.GetRealWidth(275),
+                Y = Application.GetRealHeight(263),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/PlusSignIcon.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnPlus);
+
+            btnMode = new Button()
+            {
+                X = Application.GetRealWidth(60),
+                Y = Application.GetRealHeight(334),
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealWidth(30),
+                UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode),true),
+            };
+            FrameWhiteCentet1.AddChidren(btnMode);
+
+            Button btnModeText = new Button()
+            {
+                X = Application.GetRealWidth(30),
+                Y = btnMode.Bottom,
+                Width = Application.GetRealWidth(90),
+                Height = Application.GetRealHeight(20),
+                TextAlignment = TextAlignment.Center,
+                TextSize = 12,
+                TextColor = CSS_Color.TextualColor,
+                TextID = StringId.Mode
+            };
+            FrameWhiteCentet1.AddChidren(btnModeText);
+
+            btnWindSpeed = new Button()
+            {
+                X = Application.GetRealWidth(238),
+                Y = Application.GetRealHeight(333),
+                Width = Application.GetRealWidth(38),
+                Height = Application.GetRealWidth(38),
+                UnSelectedImagePath = "FunctionIcon/CAC/DataIcon.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnWindSpeed);
+
+            Button btnDataText = new Button()
+            {
+                X = Application.GetRealWidth(212),
+                Y = btnWindSpeed.Bottom,
+                Width = Application.GetRealWidth(90),
+                Height = Application.GetRealHeight(20),
+                TextAlignment = TextAlignment.Center,
+                TextSize = 12,
+                TextColor = CSS_Color.TextualColor,
+                TextID = StringId.Data
+            };
+            FrameWhiteCentet1.AddChidren(btnDataText);
+
+            btnSwitch = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(466),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/PowerClose.png",
+                SelectedImagePath = "Public/PowerOpen.png",
+                IsSelected = device.GetAttrState(FunctionAttributeKey.OnOff) == "on"
+            };
+            FrameWhiteCentet1.AddChidren(btnSwitch);
+
+            LoadEvent_TempChange();
+            LoadEvent_AcStatesChange();
+
+        }
+
+        /// <summary>
+        /// 鍔犺浇淇敼妯″紡鍖哄煙
+        /// </summary>
+        void LoadDiv_ChangeModeView()
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout dialogView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(dialogView);
+
+            FrameLayout modeChangeView;
+            modeChangeView = new FrameLayout()
+            {
+                X = Application.GetRealWidth(30),
+                Y = Application.GetRealHeight(128 + 135),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(152),
+                BackgroundImagePath = "Public/dialogBg2.png",
+            };
+            dialogView.AddChidren(modeChangeView);
+
+            Button btnTitle;
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(8 + 16),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(44),
+                TextID = StringId.ChooseMode,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+            };
+            modeChangeView.AddChidren(btnTitle);
+
+            Button btnLine = new Button()
+            {
+                X = btnTitle.X,
+                Y = btnTitle.Bottom,
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            modeChangeView.AddChidren(btnLine);
+
+            var modeList = device.GetAttribute(FunctionAttributeKey.Mode).value;
+            foreach (var m in modeList)
+            {
+                Button btnModeIcon = new Button()
+                {
+                    X = btnTitle.X,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
+                    Width = Application.GetRealWidth(24),
+                    Height = Application.GetRealWidth(24),
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                };
+                modeChangeView.AddChidren(btnModeIcon);
+
+                Button btnModeText = new Button()
+                {
+                    X = Application.GetRealWidth(12) + btnModeIcon.Right,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
+                    Height = Application.GetRealHeight(44),
+                    Width = Application.GetRealWidth(90),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                modeChangeView.AddChidren(btnModeText);
+
+                btnModeIcon.UnSelectedImagePath = acFunction.GetModeIconPath(m, false);
+                btnModeIcon.SelectedImagePath = acFunction.GetModeIconPath(m);
+                btnModeText.Text = acFunction.GetModeAttrText(m);
+
+                if (modeList.IndexOf(m) < modeList.Count - 1)
+                {
+                    modeChangeView.AddChidren(new Button()
+                    {
+                        X = btnTitle.X,
+                        Y = btnModeText.Bottom,
+                        Width = Application.GetRealWidth(112),
+                        Height = Application.GetRealHeight(1),
+                        BackgroundColor = CSS_Color.BackgroundColor,
+                    });
+                }
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+                EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
+                {
+                    //if (!device.online)
+                    //{
+                    //    new Tip()
+                    //    {
+                    //        CloseTime = 1,
+                    //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    //        Direction = AMPopTipDirection.None,
+                    //    }.Show(MainPage.BaseView);
+                    //}
+                    btnModeIcon.IsSelected = btnModeText.IsSelected = true;
+                    device.SetAttrState(FunctionAttributeKey.Mode, m);
+                    btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(m);
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Mode, m);
+                    Control.Ins.SendWriteCommand(device, d);
+                    dialog.Close();
+                    if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                    {
+                        arcBar.IsClickable = false;
+                        arcBar.IsOffline = true;
+                    }
+                    else
+                    {
+                        arcBar.IsOffline = false;
+                        arcBar.IsClickable = true;
+                    }
+                };
+                btnModeIcon.MouseUpEventHandler = eventHandler1;
+                btnModeText.MouseUpEventHandler = eventHandler1;
+                dialogView.MouseUpEventHandler = eventHandler;
+
+            }
+
+            dialogView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+            dialog.Show();
+        }
+
+
+        #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 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 娓╁害鏀瑰彉妯″紡
+        /// </summary>
+        void LoadEvent_TempChange()
+        {
+            btnMinus.MouseUpEventHandler = (sender, e) =>
+            {
+                //if (!device.online)
+                //{
+                //    new Tip()
+                //    {
+                //        CloseTime = 1,
+                //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                //        Direction = AMPopTipDirection.None,
+                //    }.Show(MainPage.BaseView);
+                //}
+                if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                {
+                    return;
+                }
+
+                if (temp <= device.GetAttribute(FunctionAttributeKey.SetTemp).min)
+                {
+                    return;
+                }
+                --temp;
+                Console.WriteLine($"temp == {temp}");
+                controlTime = DateTime.Now;
+                arcBar.Progress = temp;
+                btnTemp.Text = temp.ToString();
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+            btnPlus.MouseUpEventHandler = (sender, e) =>
+            {
+                //if (!device.online)
+                //{
+                //    new Tip()
+                //    {
+                //        CloseTime = 1,
+                //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                //        Direction = AMPopTipDirection.None,
+                //    }.Show(MainPage.BaseView);
+                //}
+                if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                {
+                    return;
+                }
+                if (temp >= device.GetAttribute(FunctionAttributeKey.SetTemp).max)
+                {
+                    return;
+                }
+                ++temp;
+                controlTime = DateTime.Now;
+                arcBar.Progress = temp;
+                btnTemp.Text = temp.ToString();
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+            //if (device.online)
+            {
+                arcBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
+                    temp = arcBar.Progress;
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    btnTemp.Text = arcBar.Progress.ToString();
+                    controlTime = DateTime.Now;
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                arcBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, e.ToString());
+                    btnTemp.Text = e.ToString();
+                };
+                //arcBar.MouseDownEventHandler = (sender, e) => {
+                //    Console.WriteLine("ddd");
+                //    MainPage.BasePageView.ScrollEnabled =false;
+                //};
+                //arcBar.MouseUpEventHandler = (sender, e) => {
+                //    Console.WriteLine("ddd2");
+                //    MainPage.BasePageView.ScrollEnabled = true;
+                //};
+            }
+        }
+
+        /// <summary>
+        /// 鎺у埗妯″紡浜嬩欢
+        /// </summary>
+        void LoadEvent_AcStatesChange()
+        {
+            btnMode.MouseUpEventHandler = (sender, e) =>
+            {
+                if (device.trait_on_off.curValue.ToString() == "off")
+                {
+                    return;
+                }
+                LoadDiv_ChangeModeView();
+            };
+            btnWindSpeed.MouseUpEventHandler = (sender, e) =>
+            {
+                var page = new CacHistoryChoosePage(device);
+                MainPage.BasePageView.AddChidren(page);
+                page.InitView();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+            btnSwitch.MouseUpEventHandler = (sender, e) =>
+            {
+                //if (!device.online)
+                //{
+                //    new Tip()
+                //    {
+                //        CloseTime = 1,
+                //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                //        Direction = AMPopTipDirection.None,
+                //    }.Show(MainPage.BaseView);
+                //}
+                btnSwitch.IsSelected = !btnSwitch.IsSelected;
+                device.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
+                if (device.trait_on_off.curValue.ToString() == "on")
+                {
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png";
+                    btnSwitch.IsSelected = true;
+                    arcBar.IsOffline = false;
+                }
+                else
+                {
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
+                    btnSwitch.IsBold = false;
+                    arcBar.IsOffline = true;
+                }
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.OnOff, device.trait_on_off.curValue.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                //app鑷繁鎺у埗鐨勪笉鐢ㄦ洿鏂帮紝浼氶�犳垚璺冲姩
+                if (controlTime.AddSeconds(2) > DateTime.Now)
+                {
+                    return;
+                }
+                else
+                {
+                    btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp).Replace(",", "."))) + "掳C"
+                                        + Language.StringByID(StringId.Humidity) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState("room_humidity").Replace(", ", "."))) + "%";
+                    btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode));
+                    temp = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")));
+                  
+
+                    arcBar.Progress = temp;
+                    btnTemp.Text = temp.ToString();
+
+                    if (device.trait_on_off.curValue.ToString() == "on")
+                    {
+                        arcBar.IsOffline = false;
+                        btnSwitch.IsSelected = true;
+                        arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png";
+                        if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                        {
+                            arcBar.IsClickable = false;
+                        }
+                        else
+                        {
+                            arcBar.IsClickable = true;
+                        }
+                    }
+                    else
+                    {
+                        arcBar.IsOffline = true;
+                        btnSwitch.IsSelected = false;
+                        arcBar.IsClickable = false;
+                        arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
+                    }
+
+                    if (device.GetAttrState(FunctionAttributeKey.Mode) == "dry")
+                    {
+                        arcBar.IsOffline = true;
+                        arcBar.IsClickable = false;
+
+                    }
+                }
+
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+        /// </summary>
+        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
+        {
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
index f2de9ff..ec6fda3 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
@@ -36,6 +36,11 @@
         /// </summary>
         Button btnMode;
         /// <summary>
+        /// 宸ヤ綔妯″紡鎸夐挳
+        /// </summary>
+        Button btnWrokMode;
+
+        /// <summary>
         /// 寮�鍏虫寜閽�
         /// </summary>
         Button btnSwitch;
@@ -172,6 +177,25 @@
             };
             FrameWhiteCentet1.AddChidren(btnPlus);
 
+            if (device.GetAttribute("mode_work") != null)
+            {
+                btnWrokMode = new Button()
+                {
+                    X = Application.GetRealWidth(60),
+                    Y = Application.GetRealHeight(334),
+                    Width = Application.GetRealWidth(30),
+                    Height = Application.GetRealWidth(30),
+                    UnSelectedImagePath = fhTemp.GetWrokModeIconPath(device.GetAttrState("mode_work")),
+                };
+                FrameWhiteCentet1.AddChidren(btnWrokMode);
+                if (device.GetAttribute("mode_work").value.Count > 1)
+                {
+                    btnMode.MouseUpEventHandler = (sender, e) =>
+                    {
+                        LoadDiv_ChangeModeView();
+                    };
+                }
+            }
             if (device.GetAttribute(FunctionAttributeKey.Mode) != null)
             {
                 btnMode = new Button()
@@ -208,6 +232,135 @@
             LoadEvent_AcStatesChange();
 
         }
+
+
+        /// <summary>
+        /// 鍔犺浇淇敼妯″紡鍖哄煙
+        /// </summary>
+        void LoadDiv_ChangeWorkModeView()
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout dialogView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(dialogView);
+
+            FrameLayout modeChangeView;
+            modeChangeView = new FrameLayout()
+            {
+                X = Application.GetRealWidth(30),
+                Y = Application.GetRealHeight(128),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(287),
+                BackgroundImagePath = "FunctionIcon/AC/DivBg1.png",
+            };
+            dialogView.AddChidren(modeChangeView);
+
+            Button btnTitle;
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(8 + 16),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(44),
+                TextID = StringId.ChooseMode,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+            };
+            modeChangeView.AddChidren(btnTitle);
+
+            Button btnLine = new Button()
+            {
+                X = btnTitle.X,
+                Y = btnTitle.Bottom,
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            modeChangeView.AddChidren(btnLine);
+
+            var modeList = device.GetAttribute(FunctionAttributeKey.WorkMode).value;
+            foreach (var m in modeList)
+            {
+                Button btnModeIcon = new Button()
+                {
+                    X = btnTitle.X,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
+                    Width = Application.GetRealWidth(24),
+                    Height = Application.GetRealWidth(24),
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.WorkMode) == m,
+                };
+                modeChangeView.AddChidren(btnModeIcon);
+
+                Button btnModeText = new Button()
+                {
+                    X = Application.GetRealWidth(12) + btnModeIcon.Right,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
+                    Height = Application.GetRealHeight(44),
+                    Width = Application.GetRealWidth(90),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                modeChangeView.AddChidren(btnModeText);
+
+                btnModeIcon.UnSelectedImagePath = fhTemp.GetModeIconPath(m, false);
+                btnModeIcon.SelectedImagePath = fhTemp.GetModeIconPath(m);
+                btnModeText.Text = fhTemp.GetModeAttrText(m);
+
+                if (modeList.IndexOf(m) < modeList.Count - 1)
+                {
+                    modeChangeView.AddChidren(new Button()
+                    {
+                        X = btnTitle.X,
+                        Y = btnModeText.Bottom,
+                        Width = Application.GetRealWidth(112),
+                        Height = Application.GetRealHeight(1),
+                        BackgroundColor = CSS_Color.BackgroundColor,
+                    });
+                }
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+                EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
+                {
+                    //if (!device.online)
+                    //{
+                    //    new Tip()
+                    //    {
+                    //        CloseTime = 1,
+                    //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    //        Direction = AMPopTipDirection.None,
+                    //    }.Show(MainPage.BaseView);
+                    //}
+                    btnModeIcon.IsSelected = btnModeText.IsSelected = true;
+                    device.SetAttrState(FunctionAttributeKey.WorkMode, m);
+                    btnMode.UnSelectedImagePath = fhTemp.GetWrokModeIconPath(m);
+                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    btnMode.UnSelectedImagePath = btnModeIcon.UnSelectedImagePath;
+                    d.Add(FunctionAttributeKey.WorkMode, m);
+                    Control.Ins.SendWriteCommand(device, d);
+                    dialog.Close();
+                   
+                };
+                btnModeIcon.MouseUpEventHandler = eventHandler1;
+                btnModeText.MouseUpEventHandler = eventHandler1;
+                dialogView.MouseUpEventHandler = eventHandler;
+
+            }
+
+            dialogView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+            dialog.Show();
+        }
+
 
         /// <summary>
         /// 鍔犺浇淇敼妯″紡鍖哄煙
@@ -523,6 +676,15 @@
                     arcBar.IsClickable = false;
                     arcBar.IsOffline = true;
                 }
+
+                if(btnWrokMode!=null){
+                    var dd = device.GetAttrState("mode_work");
+                    if (dd != "0")
+                    {
+                        btnWrokMode.UnSelectedImagePath = fhTemp.GetWrokModeIconPath(dd);
+                    }
+                }
+
             });
         }
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs b/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs
index cf582a2..a7e40b8 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs
@@ -141,7 +141,13 @@
             //{
             //    controlView.AddChidren(btnCollection);
             //}
-
+            //鑾峰彇娓╁害鍊�
+            var tempValue = (int)Convert.ToDouble(function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+            if (tempValue<=0) {
+                //榛樿鍊兼敼鎴�16,2022骞�06鏈�10鏃�10:03:19 鎴愮敨瑕佹眰鐨�
+                tempValue = 16;
+                function.SetAttrState(FunctionAttributeKey.SetTemp, tempValue.ToString());
+            }
             arcBar = new DiyArcSeekBar()
             {
                 Gravity = Gravity.CenterHorizontal,
@@ -155,7 +161,7 @@
                 MaxValue = function.GetAttribute(FunctionAttributeKey.SetTemp).max,
                 //IsClickable = function.trait_on_off.curValue.ToString() == "on",
                 ArcColor = CSS_Color.BackgroundColor,
-                Progress = (int)Convert.ToDouble(function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",",".")),
+                Progress = tempValue,
 #if __IOS__
                 Y = Application.GetRealHeight(120 + 25),
                 Width = Application.GetRealWidth(260 - 40),
@@ -180,7 +186,7 @@
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = 50,
                 IsBold = true,
-                Text = Convert.ToDouble(function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")).ToString(),
+                Text = Convert.ToDouble(tempValue).ToString(),
                 TextAlignment = TextAlignment.Center,
             };
             controlView.AddChidren(btnTemp);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs
index 1e56bf0..23b4816 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ChooseRoomPageBLL.cs
@@ -1,5 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
+using HDL_ON.Common;
+using HDL_ON.DAL.Server;
 using Shared;
 
 namespace HDL_ON.UI
@@ -79,7 +81,37 @@
                 function.roomIds.Remove(room.roomId);
                 //room.RemoveRoomFunction(function);
             }
-            function.UpdataRoomIds();
+            //function.UpdataRoomIds();
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    var pack = ApiUtlis.Ins.HttpRequest.UpdataDevcieBindRoomInfo(function);
+                    //鐩存帴淇濆瓨鏈湴锛�
+                    function.SaveFunctionFile();
+                    if (pack.Code == StateCode.SUCCESS)
+                    {
+                        if (UI.RoomPage.bodyView != null)
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                UI.RoomPage.bodyView.ReLoadPage();
+                            });
+                        }
+                    }
+                    else
+                    {
+                        IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
+                    }
+                }
+                catch (Exception ex){
+                    MainPage.Log("鎴块棿缁戝畾璁惧寮傚父" + ex.Message);
+                }
+            })
+            { IsBackground = true }.Start();
+
+
             if (function.roomIds.Count == Entity.SpatialInfo.CurrentSpatial.RoomList.Count)
             {
                 btnChooseAll.IsSelected = true;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs b/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs
index 7d9146c..6b7887f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs
@@ -170,7 +170,7 @@
             this.picLockControl = new PicViewControl(256, 260);
             picLockControl.Y = Application.GetRealHeight(129);
             picLockControl.Gravity = Gravity.CenterHorizontal;
-            picLockControl.UnSelectedImagePath = "FunctionIcon/DoorLock/LockPictrue1.png";
+            picLockControl.UnSelectedImagePath = "FunctionIcon/DoorLock/LockPictrue1.png"; 
             FrameWhiteCentet1.AddChidren(picLockControl);
             picLockControl.ButtonClickEvent += (sender, e) =>
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
index 5782d56..14d031a 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
@@ -23,7 +23,7 @@
                     bodyView.btnTemp.Text = outinTemp.ToString();
                     bodyView.btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(updateTemp.GetAttrState(FunctionAttributeKey.RoomTemp).Replace(",", "."))) + "掳C";
                     bodyView.btnMode.SelectedImagePath = bodyView.fhTemp.GetModeIconPath(updateTemp.GetAttrState(FunctionAttributeKey.Mode));
-                    bodyView.btnMode.UnSelectedImagePath = bodyView.fhTemp.GetModeIconPath(updateTemp.GetAttrState(FunctionAttributeKey.Mode),false);
+                    bodyView.btnMode.UnSelectedImagePath = bodyView.fhTemp.GetModeIconPath(updateTemp.GetAttrState(FunctionAttributeKey.Mode), false);
                     bodyView.arcBar.Progress = outinTemp;
                     //if (updateTemp.trait_on_off.curValue.ToString() == "on")
                     //{
@@ -73,15 +73,16 @@
                         bodyView.arcBar.IsClickable = false;
                         bodyView.arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
                     }
-                    //鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
-                    if (updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "auto"|| updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "timer")
-                    {
-                        bodyView.btnPlus.Enable = false;
-                        bodyView.btnMinus.Enable = false;
-                        bodyView.arcBar.IsClickable = false;
-                        bodyView.arcBar.IsOffline = true;
-                    }
-
+                    ////鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
+                    //if (updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "auto" || updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "timer")
+                    //{
+                    //    bodyView.btnPlus.Enable = false;
+                    //    bodyView.btnMinus.Enable = false;
+                    //    bodyView.arcBar.IsClickable = false;
+                    //    bodyView.arcBar.IsOffline = true;
+                    //}
+                    //鏇存柊涓嶅悓鐣岄潰鐘舵�� 2022骞�06鏈�09鏃�19:22:55 wjc 淇敼
+                    bodyView.updateStatusPage();
                 });
             }
             catch (Exception ex)
@@ -102,14 +103,17 @@
                 btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = function.GetRoomListName();
                 //function.SaveFunctionData(true);
             };
-            //鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
-            if (function.GetAttrState(FunctionAttributeKey.Mode) == "auto" || function.GetAttrState(FunctionAttributeKey.Mode) == "timer")
-            {
-                btnPlus.Enable = false;
-                btnMinus.Enable = false;
-                arcBar.IsClickable = false;
-                arcBar.IsOffline = true;
-            }
+
+            ////鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
+            //if (function.GetAttrState(FunctionAttributeKey.Mode) == "auto" || function.GetAttrState(FunctionAttributeKey.Mode) == "timer")
+            //{
+            //    btnPlus.Enable = false;
+            //    btnMinus.Enable = false;
+            //    arcBar.IsClickable = false;
+            //    arcBar.IsOffline = true;
+            //}
+            //鍒濆鍖栦笉鍚岀晫闈㈢姸鎬� 2022骞�06鏈�09鏃�19:22:55 wjc 淇敼
+            this.updateStatusPage();
         }
 
         /// <summary>
@@ -141,7 +145,7 @@
             }
             btnMinus.MouseUpEventHandler = (sender, e) =>
             {
-                if(function.trait_on_off.curValue.ToString() == "off")
+                if (function.trait_on_off.curValue.ToString() == "off")
                 {
                     return;
                 }
@@ -166,7 +170,7 @@
                 {
                     return;
                 }
-                var temp =(int) Convert.ToDouble(function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+                var temp = (int)Convert.ToDouble(function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
                 if (temp >= Convert.ToDouble(function.GetAttribute(FunctionAttributeKey.SetTemp).max))
                 {
                     return;
@@ -182,7 +186,7 @@
             };
             arcBar.OnStopTrackingTouchEvent = (sender, e) =>
             {
-                function.SetAttrState(FunctionAttributeKey.SetTemp,arcBar.Progress);
+                function.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress);
                 btnTemp.Text = arcBar.Progress.ToString();
                 System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                 d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
@@ -191,7 +195,7 @@
             arcBar.OnProgressChangedEvent = (sender, e) =>
             {
                 function.SetAttrState(FunctionAttributeKey.SetTemp, e);
-                btnTemp.Text = Convert.ToDouble( function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")).ToString();
+                btnTemp.Text = Convert.ToDouble(function.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")).ToString();
             };
         }
         /// <summary>
@@ -229,7 +233,7 @@
                 System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                 d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
                 Control.Ins.SendWriteCommand(function, d);
-               
+
             };
         }
 
@@ -246,7 +250,7 @@
             EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
             {
                 btn1.IsSelected = btn2.IsSelected = true;
-                function.SetAttrState(FunctionAttributeKey.Mode,curMode);
+                function.SetAttrState(FunctionAttributeKey.Mode, curMode);
                 btnMode.UnSelectedImagePath = btn1.SelectedImagePath;
                 //byte pro = 6;//涓嶅鐞嗘俯搴︽樉绀猴紝绛夊緟鍥炲鏁版嵁鍐嶅鐞�
                 //function.Fh_Mode_Temp.TryGetValue(curMode, out pro);
@@ -260,5 +264,37 @@
             btn2.MouseUpEventHandler = eventHandler1;
             dialogView.MouseUpEventHandler = eventHandler;
         }
+
+        /// <summary>
+        /// 鏇存柊涓嶅悓鐣岄潰鐘舵��
+        /// </summary>
+       private void updateStatusPage() 
+        {
+            btnPlus.Enable = true;
+            btnMinus.Enable = true;
+            arcBar.IsClickable = true;
+            arcBar.IsOffline = false;
+            switch (getModeValue)
+            {
+                case "auto"://鑷姩
+                case "timer"://
+                    btnPlus.Enable = false;
+                    btnMinus.Enable = false;
+                    arcBar.IsClickable = false;
+                    arcBar.IsOffline = true;
+                    break;
+
+            }
+        }
+        /// <summary>
+        /// 鑾峰彇妯″紡value鍊�
+        /// </summary>
+        private string getModeValue
+        {
+            get
+            {
+                return function.GetAttrState(FunctionAttributeKey.Mode);
+            }
+        }
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
index a2706c7..08fdc35 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
@@ -112,36 +112,35 @@
                 dimmerBar.OnProgressChangedEvent = (sender, e) =>
                 {
                    
-                //function.fadeTime = 0;
-                //if (!btnSwitch.IsSelected)
-                //{
-                //    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
-                //}
-                //btnSwitch.IsSelected = e > 0 ? true : false;
-                //function.brightness = e;
-                //function.trait_on_off.curValue = e > 0 ? "on" : "off";
-                //if (e == 0 || e == 100)
-                //{
-                //    //Control.Send(CommandType_A.write, this.function);
-                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
-                //    Control.Ins.SendWriteCommand(function, d);
-                //}
-                //else
-                //{
-                //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
-                //    {
-                //        function.refreshTime = DateTime.Now;
-                //        new System.Threading.Thread(() =>
-                //        {
-                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
-                //            Control.Ins.SendWriteCommand(function, d);
-                //        })
-                //        { IsBackground = true }.Start();
-                //    }
-                //}
-                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
+                    if (!btnSwitch.IsSelected)
+                    {
+                        dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
+                    }
+                    btnSwitch.IsSelected = e > 0 ? true : false;
+                    function.SetAttrState(FunctionAttributeKey.Brightness, e);
+                    function.trait_on_off.curValue = e > 0 ? "on" : "off";
+                    if (e == 0 || e == 100)
+                    {
+                        //Control.Send(CommandType_A.write, this.function);
+                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                        d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                        Control.Ins.SendWriteCommand(function, d);
+                    }
+                    else
+                    {
+                        if (500 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
+                        {
+                            function.refreshTime = DateTime.Now;
+                            new System.Threading.Thread(() =>
+                            {
+                                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                                d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                                Control.Ins.SendWriteCommand(function, d);
+                            })
+                            { IsBackground = true }.Start();
+                        }
+                    }
+                    btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
                     btnBrightnessText.Text = dimmerBar.Progress + "%";
                 };
             }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
index d71f38a..2af8248 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using System.Collections.Generic;
 using HDL_ON.Entity;
 using Shared;
 
@@ -76,7 +77,7 @@
                 new System.Threading.Thread(() =>
                 {
                     function.trait_on_off.curValue = btnSwitchIcon.IsSelected ? "on" : "off";
-                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    Dictionary<string, string> d = new Dictionary<string, string>();
                     d.Add("on_off", function.trait_on_off.curValue.ToString());
                     DriverLayer.Control.Ins.SendWriteCommand(function, d);
                 })
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/A31MusicModel.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/A31MusicModel.cs
index 92009db..40ee2ef 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/A31MusicModel.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/A31MusicModel.cs
@@ -53,7 +53,7 @@
      
         /// <summary>
         /// 涓婁竴娆℃洿鏂扮殑鏃堕棿
-        /// 璁板綍鏁版嵁鍙嶉鐨勬椂闂�(鍥犱负鏈夋椂闂寸綉缁滃樊鏁版嵁涓嶅洖澶嶏紝瀵艰嚧鍒锋柊褰撳墠鎾斁闊充箰鏃堕棿涓嶆纭�)
+        /// 璁板綍鏁版嵁鍙嶉鐨勬椂闂�(鍥犱负鏈夋椂鍊欑綉缁滃樊鏁版嵁涓嶅洖澶嶏紝瀵艰嚧鍒锋柊褰撳墠鎾斁闊充箰鏃堕棿涓嶆纭�)
         /// ((褰撳墠鏃堕棿)DateTime.Now - (璁板綍鏃堕棿)LastDateTimeLastDateTime).TotalSeconds=璇樊鏃堕棿(绉�)
         /// </summary>
         public DateTime LastDateTime;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
index 244082b..71d6531 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
@@ -4,6 +4,7 @@
 using System.Collections.Generic;
 using System.Security;
 using HDL_ON.UI.UI2.FuntionControlView.Music;
+using HDL_ON.Entity;
 
 namespace HDL_ON.UI.Music
 {
@@ -38,8 +39,6 @@
         /// </summary>
         View.PlayView playView = new View.PlayView();
         TopView topView;
-
-
         public void Show()
         {
 
@@ -90,32 +89,63 @@
             ///鍒囨崲鎾斁妯″紡鐐瑰嚮浜嬩欢;
             playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
              {
-                 string modeValueString = string.Empty; 
                  string msg = Language.StringByID(StringId.switchTo);
-                 switch (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.mode))
+                 //鑾峰彇褰撳墠鎾斁妯″紡
+                 string currModeKeyValue = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.mode);
+                 //鑾峰彇闊充箰鎾斁妯″紡鍒楄〃
+                 var attributes = A31MusicModel.Current.functionMusic.GetAttribute(KeyProperty.mode);
+                 if (attributes == null)
+                 {
+                     attributes = new FunctionAttributes();
+                 }
+                 var attributesList = attributes.value;
+                 //鎵惧埌褰撳墠鎾斁妯″紡绱㈠紩鍊�
+                 int currModeIndexe = attributesList.IndexOf(currModeKeyValue);
+                 //璁板綍閫変腑鐨勬挱鏀炬ā寮忕殑绱㈠紩鍊�
+                 int count = 0;
+                 if (currModeIndexe >= attributesList.Count - 1)
+                 {
+                     //閲嶇疆绱㈠紩鍊�
+                     count = 0;
+                 }
+                 else
+                 {
+                     count = currModeIndexe + 1;
+                 }
+                 //閫氳繃绱㈠紩鍊兼壘鍒版ā寮弙alue鍊�
+                 string modeValueString = attributesList[count];
+                 switch (modeValueString)
                  {
                      //list_cycle鍒楄〃寰幆锛宻ingle_cycle鍗曟洸寰幆锛宺andom闅忔満鎾斁;
                      case ValueProperty.list_cycle:
-                         modeValueString=ValueProperty.single_cycle;
-                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
-                         msg += Language.StringByID(StringId.singleMode);
-                         break;
-                     case ValueProperty.single_cycle:
-                         modeValueString =ValueProperty.random;
-                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
-                         msg += Language.StringByID(StringId.randomMode);
-                         break;
-                     case ValueProperty.random:
-                         modeValueString = ValueProperty.list_cycle;
                          playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
                          msg += Language.StringByID(StringId.listMode);
                          break;
+                     case ValueProperty.single_cycle:
+                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single_cycle.png";
+                         msg += Language.StringByID(StringId.singleCycleMode);
+                         break;
+                     case ValueProperty.random:
+                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
+                         msg += Language.StringByID(StringId.randomMode);
+                         break;
+                     case ValueProperty.single:
+                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
+                         msg += Language.StringByID(StringId.single);
+                         break;
+                     case ValueProperty.order:
+                         playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/order.png";
+                         msg += Language.StringByID(StringId.orderMode);
+                         break;
+
                  }
+                 //鍐欏叆缂撳瓨
                  A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.mode, modeValueString);
-                 new PublicAssmebly().TipMsgAutoClose(msg, false,1000);
+                 new PublicAssmebly().TipMsgAutoClose(msg, false, 1000);
                  Dictionary<string, string> dic = new Dictionary<string, string>();
-                 dic.Add(KeyProperty.mode,modeValueString);
-                 SendMethod.mMethod.SendControlCommand(A31MusicModel.Current.functionMusic,dic);
+                 dic.Add(KeyProperty.mode, modeValueString);
+                 //鍙戦�佹帶鍒舵寚浠�
+                 SendMethod.mMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
              };
             ///娣诲姞鍠滅埍鐐瑰嚮浜嬩欢;
             playView.loveBtn.MouseUpEventHandler += (sender, e) =>
@@ -182,7 +212,7 @@
                         }
                     });
                     //缁撴潫鍒锋柊
-                   
+
                 };
                 ///绉婚櫎鐣岄潰
                 EventHandler<MouseEventArgs> removeFromParentView = (sen, e1) =>
@@ -203,16 +233,18 @@
             ///闊抽噺鍥炬爣鐐瑰嚮浜嬩欢
             playView.volIconBtn.MouseUpEventHandler += (sender, e) =>
             {
-               
+
             };
             ///闊抽噺杩涘害鏉$偣鍑讳簨浠�
-            int startVolume =0;//涔嬪墠鐨勯煶閲�
+            int startVolume = 0;//涔嬪墠鐨勯煶閲�
             //int endVolume = 0;//鐜板湪鐨勯煶閲�
             EventHandler<int> progressClick = (sender, e) =>
             {
                 playView.volValueBtn.Text = playView.volSeekBar.Progress + "%";
                 if (startVolume != e)
                 {
+                    ///鏇存柊鏈�鏂板��
+                    A31MusicModel.ProgressDateTime = DateTime.Now;
                     startVolume = e;
                     A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.volume, startVolume);
                     Dictionary<string, string> dic = new Dictionary<string, string>();
@@ -228,7 +260,7 @@
             {
                 playView.prevBtn.IsSelected = true;
 
-                A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.song_step,ValueProperty.down);
+                A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.song_step, ValueProperty.down);
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                 dic.Add(KeyProperty.song_step, ValueProperty.up);
                 SendMethod.mMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
@@ -237,7 +269,7 @@
             playView.prevBtn.MouseUpEventHandler += (sender, e) =>
             {
                 playView.prevBtn.IsSelected = false;
-            }; 
+            };
             ///鏆傚仠/鎾斁鐐瑰嚮浜嬩欢
             playView.playBtn.MouseDownEventHandler += (sender, e) =>
             {
@@ -245,7 +277,8 @@
                 if (playView.playBtn.IsSelected)
                 {
                     playView.playBtn.IsSelected = false;
-                    status = ValueProperty.off; 
+                    status = ValueProperty.off;
+
                 }
                 else
                 {
@@ -261,7 +294,7 @@
             playView.nextBtn.MouseDownEventHandler += (sender, e) =>
             {
                 playView.nextBtn.IsSelected = true;
-                A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.song_step,ValueProperty.down);
+                A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.song_step, ValueProperty.down);
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                 dic.Add(KeyProperty.song_step, ValueProperty.down);
                 SendMethod.mMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
@@ -313,22 +346,29 @@
                             int totalMusicMinute = totalSecond / 60;
                             //绉掗挓
                             int totalMusicSecond = totalSecond % 60;
-
+                            //杞寲姝屾洸鎬绘椂闂存椂闂存牸寮�
                             string totalTime = (totalMusicMinute.ToString().Length < 2 ? "0" + totalMusicMinute.ToString() : totalMusicMinute.ToString()) + ":" + (totalMusicSecond.ToString().Length < 2 ? "0" + totalMusicSecond.ToString() : totalMusicSecond.ToString());
+                            //鏄剧ず鎬绘椂闂�
                             playView.endTimeBtn.Text = totalTime;
-
+                            //鏄剧ず鎾斁鍣ㄥ悕绉�
                             topView.topNameBtn.Text = A31MusicModel.Current.functionMusic.name;
-                            string s = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.mode);
+                            //鏄剧ず鎾斁妯″紡鍥炬爣
                             switch (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.mode))
                             {
                                 case ValueProperty.list_cycle://鍒楄〃寰幆
                                     playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
                                     break;
                                 case ValueProperty.single_cycle://鍗曟洸寰幆
-                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
+                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single_cycle.png";
                                     break;
                                 case ValueProperty.random://闅忔満鎾斁
                                     playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
+                                    break;
+                                case ValueProperty.single:// 鍗曟洸<single>
+                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
+                                    break;
+                                case ValueProperty.order://寰簭寰幆
+                                    playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/order.png";
                                     break;
                             }
 
@@ -363,13 +403,17 @@
                             //        playView.loveBtn.IsSelected = false;
                             //    }
                             //}
+                            //鏄剧ず鎾斁鍣ㄥ尯鍩�
                             playView.regionBtn.Text = A31MusicModel.Current.functionMusic.GetRoomListName();
+                            //鏄剧ず鎾斁鍣ㄦ敹钘忕姸鎬�
                             if (A31MusicModel.Current.functionMusic.collect)
                             {
+                                //鏀惰棌
                                 playView.collectIconBtn.IsSelected = true;
                             }
                             else
                             {
+                                //涓嶆敹钘�
                                 playView.collectIconBtn.IsSelected = false;
                             }
                             //if (A31MusicModel.Current.A31PlayStatus.IsMute)
@@ -388,54 +432,75 @@
                             //        playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%";
                             //    }
                             //}
-
-                            if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds)
+                            //涓轰簡闃叉闊抽噺鏉¤烦鍔�,寤堕暱鏇存柊鏃堕棿(澶氬姞1s)
+                            if (2000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds || A31MusicModel.ProgressDateTime == DateTime.MinValue)
                             {
-                                //闊抽噺杩涘害鏉�;
+                                //鏄剧ず闊抽噺杩涘害鏉″��;
                                 playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.volume));
                                 //鏄剧ず褰撳墠闊抽噺鍊�;
                                 playView.volValueBtn.Text = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.volume) + "%";
                             }
                             //鏇存柊鎾斁鍣ㄩ煶閲忕粰绯荤粺闊抽噺
-                            Volume.MusicVolume = playView.volSeekBar.Progress;
+                            //Volume.MusicVolume = playView.volSeekBar.Progress;
                             //褰撳墠鎾斁闊充箰鏃堕棿
                             //鎸夐亾鐞嗕笉浼氫负绌猴紝GetAttrState("playing_time")鍊煎彲鑳戒负绌猴紝寮哄埗杞崲int.Parse(锛変細鍑虹幇寮傚父锛屼笉杩囦篃鍋氫簡寮傚父澶勭悊浜�
-                            int playSecond = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playing_time))+ (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
-
+                            int playSecond = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playing_time));
+                            //璇嗗埆闊充箰鐘舵�佹槸鍚﹀湪鎾斁鐘舵��
+                            if (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.on_off) == ValueProperty.on)
+                            {
+                                //闊充箰鍦ㄦ挱鏀炬椂锛屽啀璁$畻鎾斁鏃堕棿(鐜板湪鏃堕棿=鍘熸潵鏃堕棿+1绉�)
+                                playSecond += (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
+                                playSecond += 1;//琛ㄧず鍔犱笂绛夊緟鐨勬椂闂�1s
+                                ///姝屾洸璁板綍鏆傛椂鏃堕棿鍐欏叆缂撳瓨锛�
+                                A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.playing_time, playSecond);
+                            }
+                            if (playSecond <= 0)
+                            {
+                                ///鎾斁鏃堕棿涓嶈兘灏忎簬0锛�
+                                playSecond = 0;
+                            }
+                            if (playSecond >= totalSecond)
+                            {
+                                ///鎾斁鏃堕棿涓嶈兘瓒呰繃鎬绘椂闂达紱
+                                playSecond = totalSecond;
+                            }
                             int playMusicMinute = playSecond / 60;
                             //绉掗挓
                             int playMusicSecond = playSecond % 60;
-
+                            //杞寲鎾斁鏃堕棿鏃堕棿鏍煎紡
                             string playTime = (playMusicMinute.ToString().Length < 2 ? "0" + playMusicMinute.ToString() : playMusicMinute.ToString()) + ":" + (playMusicSecond.ToString().Length < 2 ? "0" + playMusicSecond.ToString() : playMusicSecond.ToString());
-
+                            //鏄剧ず鎾斁鏃堕棿                  
+                            playView.startTimeBtn.Text = playTime;
+                            //鏄剧ず鎾斁鐘舵��
                             if (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.on_off) == ValueProperty.on)
                             {
+                                //鎾斁
                                 playView.playBtn.IsSelected = true;
-                                //濡傛灉鍦ㄦ挱鏀撅紝鏃堕棿灏变笉鏂彉鍖�                    
-                                playView.startTimeBtn.Text = playTime;
-                                if (totalSecond == 0)
-                                {
-                                    //姝屾洸杩涘害鏉�
-                                    playView.diyArcSeekBar.Progress = 0;
-                                }
-                                else
-                                {
-                                    //姝屾洸杩涘害鏉�
-                                    playView.diyArcSeekBar.Progress = (int)(playSecond * 100.0 / totalSecond);//+1
-                                }
-
-
                             }
                             else
                             {
+                                //鏆傚仠
                                 playView.playBtn.IsSelected = false;
-                                //鍋滄鎾斁
-                                playView.startTimeBtn.Text =playTime;
+                                ///璁板綍姝屾洸鏆傚仠鏃堕棿锛�<LastDateTime 璁$畻鎾斁鏃堕棿鏈夌敤鍒�>
+                                A31MusicModel.Current.LastDateTime = DateTime.Now;
                             }
+                            //鏄剧ず杩涘害鏉″��
+                            if (totalSecond == 0)
+                            {
+                                //姝屾洸鎾斁杩涘害
+                                playView.diyArcSeekBar.Progress = 0;
+                            }
+                            else
+                            {
+                                //姝屾洸鎾斁杩涘害
+                                playView.diyArcSeekBar.Progress = (int)(playSecond * 100.0 / totalSecond);//+1
+                            }
+                            //鏄剧ず姝屾洸鍚嶇О
                             playView.songNameTextView.Text = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name) == null ? "Unkown" : A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name);
+                            //鏄剧ず姝屾墜鍚嶇О
                             playView.singerBtn.Text = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name) == null ? "Unkown" : A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name);
                             //鏇存柊婧愮殑鐣岄潰
-                           // showSourcePage();
+                            // showSourcePage();
                         }
                         catch (Exception e)
                         {
@@ -535,7 +600,9 @@
         void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout)
         {
             verticalScrolViewLayout.RemoveAll();
+            //鑾峰彇鎾斁鍣ㄥ悕绉�
             var listName = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playlist_name);
+            //鑾峰彇缂撳瓨姝屾洸鍒楄〃
             var musicList = A31MusicModel.Current.GetSongList(listName);
             if (musicList.Count == 0)
             {
@@ -546,6 +613,7 @@
                         A31MusicModel.Current.palyLists.Clear();
                         if (A31MusicModel.Current.palyLists.Count == 0)
                         {
+                            //鑾峰彇姝屾洸鍒楄〃
                             SendMethod.mMethod.GetPalyList(A31MusicModel.Current.functionMusic);
 
                         }
@@ -575,8 +643,5 @@
         {
             UpdateThread.updateCurrMusicThread(frameLayout, middViewLayout, A31MusicModel.Current);
         }
-
-     
-
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
index 0556fea..fb59e14 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
@@ -122,10 +122,10 @@
                 var musicListFunction = FunctionList.List.GetMusicList();
                 for (int i = 0; i < musicListFunction.Count; i++)
                 {
-                    var function = musicListFunction[i];
+                    var function = musicListFunction[i]; 
                     var music = A31MusicModel.A31MusicModelList.Find((obj) =>
-                   (obj.functionMusic.deviceId == function.deviceId && function.spk == "music.standard") || (
-                     obj.functionMusic.deviceId == function.deviceId && function.spk == "av.music")
+                   (obj.functionMusic.deviceId == function.deviceId && function.spk == SPK.MusicStandard) || (
+                     obj.functionMusic.deviceId == function.deviceId && function.spk == SPK.AvMusic)
                     );
                     if (music == null)
                     {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
index fda2963..366b349 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
@@ -44,7 +44,7 @@
         {
             new System.Threading.Thread(() =>
             {
-                DriverLayer.Control.Ins.SendWriteCommand(function, dic);
+                DriverLayer.Control.Ins.SendWriteCommand(function, dic,false,0);
             })
             { IsBackground = true }.Start();
         }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/View/MyListView.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/View/MyListView.cs
index f6ec20b..fb6a925 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/View/MyListView.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/View/MyListView.cs
@@ -102,7 +102,7 @@
 
                 case ValueProperty.single_cycle:
                     orderIconBtn.UnSelectedImagePath = "MusicIcon/single.png";
-                    orderTxetBtn.Text = Language.StringByID(StringId.singleMode);
+                    orderTxetBtn.Text = Language.StringByID(StringId.singleCycleMode);
 
                     break;
                 case ValueProperty.random:

--
Gitblit v1.8.0