From 071a8328823a2861f93ce556a4da3e4119cab1a3 Mon Sep 17 00:00:00 2001
From: panlili2024 <14743743+panlili2024@user.noreply.gitee.com>
Date: 星期四, 19 九月 2024 16:24:28 +0800
Subject: [PATCH] 完成金茂定制功能

---
 HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLDeviceManager.java | 1154 +++++++++++++++++++++++++-------------------------------
 1 files changed, 515 insertions(+), 639 deletions(-)

diff --git a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLDeviceManager.java b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLDeviceManager.java
index 89e0cdd..6f5f7a6 100644
--- a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLDeviceManager.java
+++ b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLDeviceManager.java
@@ -8,10 +8,17 @@
 import com.google.gson.Gson;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.ttl.Config.Configuration;
 import com.hdl.sdk.ttl.Config.MCUConstants;
+import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig;
+import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirCtrlBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirHVACBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirTechSysBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.Parser.AirCtrlParser;
+import com.hdl.sdk.ttl.HDLAppliances.HDLAudio.HDLAudio;
 import com.hdl.sdk.ttl.HDLAppliances.HDLCommonSwitch.CommonSwitchBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLCurtain.CurtainCtrlBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLCurtain.Parser.CurtainCtrlParser;
 import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineFristBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineWaringBackInfo;
@@ -19,16 +26,33 @@
 import com.hdl.sdk.ttl.HDLAppliances.HDLFreshAir.FreshAirJinMaoBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLGeothermal.GeothermalBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLLight.ColourLightCtrlBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLLight.LightCtrlBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLLogic.LogicCtrlBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLLogic.LogicMode;
+import com.hdl.sdk.ttl.HDLAppliances.HDLLogic.SceneCtrlBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLSecurity.SecurityBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLSensor.DryContactSensorBackEvent;
 import com.hdl.sdk.ttl.HDLAppliances.HDLSensor.SensorStateBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLWarning.WarningType;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.DevicesData;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.ListRemarks;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.ListSceneRemarks;
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.MCUConfigurationBean;
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.MCUDataBean;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.RcuCurtain;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.RcuLight;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.ScenesData;
+import com.hdl.sdk.ttl.HDLDeviceManger.Bean.UdpDataBean;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirHVACFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirTechSysFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.ColourLightFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CommonSwitchCtrlBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CommonSwitchStateBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CurtainDeviceStateEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CurtainFeedBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DiscoverNewDevicesEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DoorMachineFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DoorMachineFeedFristBackEvent;
@@ -36,39 +60,19 @@
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.FreshAirFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.FreshAirJinMaoFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.GeothermalFeedBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.LightFeedBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.LogicFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.MCUFeedBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.SceneFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.SecurityAlarmFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.SecurityArmingFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.UpdateRemarkFeedBackEvent;
-import com.hdl.sdk.ttl.HDLDeviceManger.Parser.DeviceParser;
-import com.hdl.sdk.ttl.Config.Configuration;
-import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig;
-import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirCtrlBackInfo;
-import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.Parser.AirCtrlParser;
-import com.hdl.sdk.ttl.HDLAppliances.HDLAudio.HDLAudio;
-import com.hdl.sdk.ttl.HDLAppliances.HDLCurtain.CurtainCtrlBackInfo;
-import com.hdl.sdk.ttl.HDLAppliances.HDLCurtain.Parser.CurtainCtrlParser;
-import com.hdl.sdk.ttl.HDLAppliances.HDLLight.LightCtrlBackInfo;
-import com.hdl.sdk.ttl.HDLAppliances.HDLLogic.LogicCtrlBackInfo;
-import com.hdl.sdk.ttl.HDLAppliances.HDLLogic.LogicMode;
-import com.hdl.sdk.ttl.HDLAppliances.HDLWarning.WarningType;
-import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo;
-import com.hdl.sdk.ttl.HDLDeviceManger.Bean.DevicesData;
-import com.hdl.sdk.ttl.HDLDeviceManger.Bean.ListRemarks;
-import com.hdl.sdk.ttl.HDLDeviceManger.Bean.RcuCurtain;
-import com.hdl.sdk.ttl.HDLDeviceManger.Bean.RcuLight;
-import com.hdl.sdk.ttl.HDLDeviceManger.Bean.UdpDataBean;
-import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirFeedBackEvent;
-import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CurtainFeedBackEvent;
-import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
-import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.LightFeedBackEvent;
-import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.LogicFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.WarningInfoEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.Parser.DeviceParser;
 import com.hdl.sdk.ttl.Utils.HDLUtlis.HDLStringUtils;
 import com.hdl.sdk.ttl.Utils.HDLUtlis.HDLUtlis;
 import com.hdl.sdk.ttl.Utils.LogUtils.HDLLog;
 import com.hdl.sdk.ttl.Utils.SPUtils.SPUtils;
-//import com.hdl.sdk.ttl.Utils.TransformUtils.DataConverseUtils;
 
 import org.greenrobot.eventbus.EventBus;
 
@@ -93,22 +97,19 @@
 
 public class HDLDeviceManager {
     public static List<String> rcuIpList = new ArrayList<>();//缁熻Rcu ip鍦板潃鍒楄〃
-    public static List<DevicesData> devicesDataList = new ArrayList<>();//缁熻鎼滅储鍒楄〃
-    public static List<DevicesData> realDevicesDataList = new ArrayList<>();//缁熻鎼滅储鍒楄〃
+    public static List<DevicesData> devicesDataList = new ArrayList<>();//缁熻璁惧鎼滅储鍒楄〃
+    public static List<DevicesData> realDevicesDataList = new ArrayList<>();//缁熻璁惧鎼滅储鍒楄〃
+    public static int totalDeviceSize = 0;
+    public static List<ScenesData> scenesDataList = new ArrayList<>();//缁熻鍦烘櫙鎼滅储鍒楄〃
     private static Context viewContext;
     public static List<ListRemarks> listRemarks = new ArrayList<>();
+    public static List<ListSceneRemarks> listSceneRemarks = new ArrayList<>();
     public static List<RcuLight> rcuLightList = new ArrayList<>();
     public static List<RcuCurtain> rcuCurtainList = new ArrayList<>();
     public static boolean isLogicCtrl = false;
     public static ConcurrentHashMap<String, Boolean> ctrlSuccessStateHashMap = new ConcurrentHashMap<>();//2019-8-2
 
-
-//    public static byte[] air1Info = null;
-//    public static byte[] air2Info = null;
-//    public static byte[] air3Info = null;
-//    public static byte[] air4Info = null;
-
-    public static boolean isGetDeviceStateSuccess = false; //鍒ゆ柇鑾峰彇璁惧鐘舵�佹槸鍚︽帶鍒舵垚鍔�
+    public static boolean isGetDeviceStateSuccess = false; //鍒ゆ柇鑾峰彇璁惧鐘舵�佹槸鍚﹁鍙栨垚鍔�
     public static boolean isUpdateRemarkSuccess = false; //鍒ゆ柇淇敼璁惧鍚嶆槸鍚︽垚鍔�
     public static boolean isMCUCtrlSuccess = false; //鍒ゆ柇鏄惁涓嶮CU閫氫俊鎴愬姛
 
@@ -116,9 +117,12 @@
 //    public static boolean isLightCtrlSuccess = false; //鍒ゆ柇鐏厜鏄惁鎺у埗鎴愬姛
 //    public static boolean isCurtainCtrlSuccess = false; //鍒ゆ柇绐楀笜鏄惁鎺у埗鎴愬姛
 //    public static boolean isACCtrlSuccess = false; //鍒ゆ柇绌鸿皟鏄惁鎺у埗鎴愬姛
-//    public static boolean isSceneCtrlSuccess = false; //鍒ゆ柇鍦烘櫙鏄惁鎺у埗鎴愬姛
+
 //    public static boolean isSecurityCtrlSuccess = false; //鍒ゆ柇瀹夐槻妯″潡鏄惁閫氫俊鎴愬姛
 
+    public static boolean isGetBusLightState = false;
+    public static boolean isGetSceneRemarkSuccess = false; //鍒ゆ柇鑾峰彇鍦烘櫙璇︽儏鎴愬姛
+    public static boolean isSceneCtrlSuccess = false; //鍒ゆ柇鍦烘櫙鏄惁鎺у埗鎴愬姛
 
     /**
      * 鍒濆鍖� SDK HDLDeviceManager鍒濆鍖�
@@ -140,6 +144,14 @@
         }
     }
 
+    public static boolean getIsGetBusLightState() {
+        return isGetBusLightState;
+    }
+
+    public static void setIsGetBusLightState(boolean isGetBusLightState) {
+        HDLDeviceManager.isGetBusLightState = isGetBusLightState;
+    }
+
     /**
      * 閲婃斁鍏抽棴涓插彛
      */
@@ -154,25 +166,26 @@
      * @param commandType 鍛戒护绫诲瀷
      */
     public static void handle(UdpDataBean getDatas, int commandType) {
-        Log.e("panlili", "commandType=" + Integer.toHexString(commandType)+" desDeviceID=" + getDatas.desDeviceID + " sourceDeviceID=" + getDatas.sourceDeviceID);
+//        Log.e("panlili", "commandType=" + Integer.toHexString(commandType) + " sourceSubnetID=" + getDatas.sourceSubnetID + " sourceDeviceID=" + getDatas.sourceDeviceID);
         switch (commandType) {
-            case Configuration.DEVICES_SEARCH_BACK_COMMAND:
-                if (HandleSearch.isGetRcuIp) {
-//                    handleRcuIp(getDatas);
+            case Configuration.SEARCH_GATEWAY_BACK_COMMAND:
+                break;
+            case Configuration.DEVICES_SEARCH_FROM_GATEWAY_BACK_COMMAND://璇诲彇缃戝叧宸查厤缃姛鑳�
+                handleSearchData(getDatas);
+                break;
+            case Configuration.DEVICES_READ_FROM_GATEWAY_BACK_COMMAND://渚濇璇诲彇璁惧淇℃伅
+                if (isLogicCtrl) {
+                    isLogicCtrl = false;
+                    handleLogicAir(getDatas);
                 } else {
-                    boolean isExit = false;
-                    for (DevicesData value : realDevicesDataList) {
-                        if (value.getSourceDeviceID() == getDatas.sourceDeviceID
-                                && value.getSourceSubnetID() == getDatas.sourceSubnetID) {
-                            HDLLog.I("Device is Exit  " + value.getRemark());
-                            isExit = true;
-                            break;
-                        }
-                    }
-                    if (!isExit) {
-                        handleSearchData(getDatas);
-                    }
+                    handleRemarkCurStateData(getDatas);
                 }
+                break;
+            case Configuration.SCENE_SEARCH_FROM_GATEWAY_BACK_COMMAND:
+                handleSearchSceneData(getDatas);
+                break;
+            case Configuration.SCENE_READ_FROM_GATEWAY_BACK_COMMAND:
+                handleSceneCurStateData(getDatas);
                 break;
             /***2020-07-20 鏂板鏂伴璁惧**/
             case Configuration.FRESH_AIR_STATE_BACK_COMMAND:
@@ -219,8 +232,11 @@
             case Configuration.LIGHT_CTRL_BACK_COMMAND:
             case Configuration.CURTAIN_CTRL_BACK_COMMAND:
             case Configuration.AIR_CTRL_BACK_COMMAND:
-            case Configuration.LOGIC_CTRL_BACK_COMMAND:
                 handleCtrlData(getDatas);
+                break;
+            case Configuration.LOGIC_CTRL_BACK_COMMAND:
+                handleLogicCtrlData(getDatas);//閫昏緫妯″潡鎺у埗
+                handleSceneCtrlData(getDatas);//鍦烘櫙鎺у埗
                 break;
             case Configuration.LIGHT_RGB_CTRL_BACK_COMMAND:
                 handleColourLightStateData(getDatas);
@@ -233,15 +249,6 @@
             case Configuration.SECURITY_ALARM_CTRL_BACK_COMMAND://鎶ヨ璁剧疆鍙嶉
                 handleSecurityCtrlData(getDatas);
                 break;
-//          鑾峰彇璁惧澶囨敞
-            case Configuration.DEVICES_READ_BACK_COMMAND:
-                if (isLogicCtrl) {
-                    isLogicCtrl = false;
-                    handleLogicAir(getDatas);
-                } else {
-                    handleRemarkCurStateData(getDatas);
-                }
-                break;
 //          鑾峰彇璁惧鐘舵��
             case Configuration.AIR_STATE_BACK_COMMAND:
                 handleAirStateData(getDatas);
@@ -249,6 +256,7 @@
             case Configuration.SENSOR_STATE_BACK_COMMAND:
             case Configuration.SENSOR_BROADCAST_STATE_BACK_COMMAND:
                 handleSensorBroadcastStateData(getDatas);
+                handleKNXTechSysStateData(getDatas);
                 break;
             case Configuration.DRY_CONTACT_STATE_BACK_COMMAND:
             case Configuration.DRY_CONTACT_BROADCAST_STATE_COMMAND:
@@ -271,7 +279,6 @@
                 break;
             case Configuration.AIR_HVAC_STATE_BACK_COMMAND:
 //                handleRcuAirCastData(getDatas);
-                HDLLog.I("鍙戦�佺涓�娆″灞呮悳绱�");
                 handleHVACStateData(getDatas);//2019-06-27
                 handleTechSysStateData(getDatas);//2023-08-21
                 break;
@@ -302,8 +309,10 @@
             case Configuration.MANUAL_ADD_DEVICE_COMMAND:
                 boolean isExit = false;
                 for (DevicesData value : realDevicesDataList) {
-                    if (value.getSourceDeviceID() == getDatas.sourceDeviceID
-                            && value.getSourceSubnetID() == getDatas.sourceSubnetID) {
+                    if (value.getSourceSubnetID() == getDatas.sourceSubnetID
+                            && value.getSourceDeviceID() == getDatas.sourceDeviceID
+                            && value.getDeviceSubnetID() == (getDatas.addBytes[6] & 0xFF)
+                            && value.getDeviceDeviceID() == (getDatas.addBytes[7] & 0xFF)) {
                         isExit = true;
                         break;
                     }
@@ -379,25 +388,38 @@
         devicesData.setSourceSubnetID(getDatas.sourceSubnetID);
         devicesData.setSourceDeviceID(getDatas.sourceDeviceID);
         devicesData.setAddByte(getDatas.addBytes);
-        byte[] remarkByte;
-        if (getDatas.addBytes.length >= 22) {
-            remarkByte = new byte[20];
-            System.arraycopy(getDatas.addBytes, 2, remarkByte, 0, remarkByte.length);
-        } else {
-            remarkByte = new byte[getDatas.addBytes.length - 2];
-            System.arraycopy(getDatas.addBytes, 2, remarkByte, 0, getDatas.addBytes.length - 2);
-        }
 
+        int size = (getDatas.addBytes[2] & 0xFF) * 256 + (getDatas.addBytes[3] & 0xFF);
+        int index = (getDatas.addBytes[4] & 0xFF) * 256 + (getDatas.addBytes[5] & 0xFF);
+        devicesData.setDeviceSize(size);
+        totalDeviceSize = size;
+        devicesData.setDeviceIndex(index);
+
+        byte[] remarkByte = new byte[getDatas.addBytes.length];
         String remarkStr = HDLStringUtils.byte2String(remarkByte);
-        HDLLog.I("remarkStr锛�" + remarkStr);
         devicesData.setRemark(remarkStr);
+
         boolean isExitData = DeviceParser.parse(getDatas.addBytes, devicesData, remarkStr);
 
-        realDevicesDataList.add(devicesData);//璁板綍鎵�鏈夌殑鎺ユ敹鍒拌澶囷紝鍖呮嫭SDK涓嶆敮鎸佺殑璁惧绉嶇被銆備綔鐢細浣滀负鍙戦�佺浜屾鎼滅储鍛戒护鏃剁敤鍒�
+        boolean isExist = false;
+        for (DevicesData value : realDevicesDataList) {
+            if (value.getSourceSubnetID() == getDatas.sourceSubnetID
+                    && value.getSourceDeviceID() == getDatas.sourceDeviceID
+                    && value.getDeviceSubnetID() == (getDatas.addBytes[6] & 0xFF)
+                    && value.getDeviceDeviceID() == (getDatas.addBytes[7] & 0xFF)) {
+                HDLLog.I("Device is isExist  " + value.getRemark());
+                isExist = true;
+                break;
+            }
+        }
+        if (!isExist) {
+            realDevicesDataList.add(devicesData);//璁板綍鎵�鏈夌殑鎺ユ敹鍒拌澶囷紝鍖呮嫭SDK涓嶆敮鎸佺殑璁惧绉嶇被銆備綔鐢細浣滀负鍙戦�佺浜屾鎼滅储鍛戒护鏃剁敤鍒�
+            HDLLog.I("---totalDeviceSize=" + totalDeviceSize + " realDevicesDataList=" + realDevicesDataList.size());
+        }
 
         /********************杈呭姪璋冭瘯鎵撳嵃*******************/
         String addData = "";
-        for (int i = 22, len = getDatas.addBytes.length; i < len; i++) {
+        for (int i = 0, len = getDatas.addBytes.length; i < len; i++) {
             addData += " arr" + i + " = " + (getDatas.addBytes[i] & 0xFF) + ",";
         }
         HDLLog.I("鎵�鏈夎澶囧垪琛� 绗� " + realDevicesDataList.size() + " 涓ā鍧� "
@@ -411,12 +433,12 @@
 
 
 //       鍒ゆ柇鏄惁绗﹀悎瑕佹眰鐨勫ぇ绫诲皬绫�
-        if (isExitData) {
+        if (!isExist && isExitData) {
             devicesDataList.add(devicesData);//璁板綍鎵�鏈夌殑鎺ユ敹鍒拌澶囷紝涓嶅寘鎷琒DK涓嶆敮鎸佺殑璁惧绉嶇被
             /**2019-07-03 鍙戠幇鏂拌澶囷紝杩欓噷鍙互鍙戦�侀�氱煡浜嬩欢锛屽苟浼犻�掓柊鐨勮澶囨暟鎹�*/
             EventBus.getDefault().post(new DiscoverNewDevicesEvent(devicesData));
 
-//            杩囨护鎺夎儗鏅煶涔愶紝鑳屾櫙闊充箰娌℃湁澶囨敞杩斿洖
+            //杩囨护鎺夎儗鏅煶涔愶紝鑳屾櫙闊充箰娌℃湁澶囨敞杩斿洖
             if (devicesDataList.get(devicesDataList.size() - 1).getAppliancesInfoList().get(0).getBigType() != Configuration.AUDIO_BIG_TYPE) {
                 for (int i = 0, len = devicesDataList.get(devicesDataList.size() - 1).getAppliancesInfoList().size(); i < len; i++) {
                     ListRemarks listRemarksTemp = new ListRemarks();
@@ -425,8 +447,6 @@
                     listRemarks.add(listRemarksTemp);
                 }
             }
-
-//            HDLCommand.HDLgetDevRemarks(devicesDataList.get(devicesDataList.size()-1).getAppliancesInfoList());
 
             /********************杈呭姪璋冭瘯鎵撳嵃*******************/
             String deviceName = "";
@@ -447,6 +467,33 @@
     }
 
     /**
+     * 澶勭悊鎼滅储鍦烘櫙鏁版嵁
+     *
+     * @param getDatas
+     */
+    private static void handleSearchSceneData(UdpDataBean getDatas) {
+        int size = getDatas.addBytes[0] * 256 + getDatas.addBytes[1];
+
+        /********************杈呭姪璋冭瘯鎵撳嵃*******************/
+        for (int i = 0, len = size; i < len; i++) {
+            ScenesData scenesData = new ScenesData();
+            scenesData.setSourceSubnetID(getDatas.sourceSubnetID);
+            scenesData.setSourceDeviceID(getDatas.sourceDeviceID);
+            scenesData.setAddByte(getDatas.addBytes);
+            scenesData.setIndex(i + 1);
+            scenesDataList.add(scenesData);
+            HDLLog.I("鎵�鏈夊満鏅垪琛� 绗� " + scenesDataList.size() + " 涓ā鍧� "
+                    + " \n婧愬瓙缃戝彿 = " + (getDatas.sourceSubnetID)
+                    + " \n婧愯澶囧彿 = " + (getDatas.sourceDeviceID)
+                    + " \n鍦烘櫙绱㈠紩 = " + scenesData.getIndex()
+            );
+        }
+
+        /********************杈呭姪璋冭瘯鎵撳嵃*******************/
+
+    }
+
+    /**
      * 澶勭悊鐏厜杩斿洖
      * 2020-1-18
      * 淇娣峰悎璋冨厜娣峰悎寮�鍏� 绫绘ā鍧楅棶棰�
@@ -456,8 +503,8 @@
     private static void handleLightCtrlData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -519,8 +566,8 @@
     private static void handleColourLightCtrlData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -554,13 +601,15 @@
         switch (getDatas.command) {
             case Configuration.LIGHT_CTRL_BACK_COMMAND:
                 handleLightCtrlData(getDatas);
-
+                if (!HDLDeviceManager.isGetBusLightState) {
+                    isGetDeviceStateSuccess = true;
+                }
                 break;
             case Configuration.CURTAIN_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
                     ) {
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                         inner:
@@ -584,12 +633,13 @@
                             curtainCtrlBackInfo.setRemarks(curtainInfo.getRemarks());
                             curtainCtrlBackInfo.setParentRemarks(curtainInfo.getParentRemarks());
                             curtainCtrlBackInfo.setAppliancesInfo(curtainInfo);
-//                            isCurtainCtrlSuccess = true;
                             setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+
                             if (curtainInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_GLYSTRO
-                                    || curtainInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_ROLLER) {
+                                    || curtainInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_ROLLER
+                                    || curtainInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_SHANGRILA) {
                                 if ((getDatas.addBytes[0] & 0xFF) >= 17) {
-                                    int curState = getDatas.addBytes[1] & 0xFF;
+                                    int curState = getDatas.addBytes[1] & 0xFF;//V1.0鐧惧垎姣�
                                     if (curState == 1) {
                                         //杩欎釜鍒ゆ柇寰堝偦锛岀獥甯樺叧鍒扮櫨鍒嗘瘮涓�0锛屼細璺冲埌1杩斿洖鍥炴潵锛屽彧鑳藉己鍒舵敼涓�0
                                         curState = 0;
@@ -598,16 +648,23 @@
                                         curState = 100;
                                     }
                                     curtainCtrlBackInfo.setState(curState);
+
                                     devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(curState);
-                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(curState);
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
                                     curtainCtrlBackInfo.setNum((getDatas.addBytes[0] & 0xFF) - 16);
                                     EventBus.getDefault().post(new CurtainFeedBackEvent(curtainCtrlBackInfo, true));
+                                } else {
+                                    if (getDatas.addBytes.length >= 3) {
+                                        curtainCtrlBackInfo = new CurtainCtrlBackInfo(devicesDataList.get(i).getAppliancesInfoList().get(j));
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                                        curtainCtrlBackInfo.setNum(getDatas.addBytes[0] & 0xFF);
+                                        EventBus.getDefault().post(new CurtainFeedBackEvent(curtainCtrlBackInfo, true));
+                                    }
                                 }
-                            }
-                            if (curtainInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {
+                            } else if (curtainInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {
                                 if ((getDatas.addBytes[0] & 0xFF) < 17) {
                                     int state = getDatas.addBytes[1] & 0xFF;
-                                    switch (getDatas.addBytes[1] & 0xFF) {//杩欓噷涔熷簲璇ユ敼鎴�0锛�1锛�2
+                                    switch (state) {//杩欓噷涔熷簲璇ユ敼鎴�0锛�1锛�2
                                         case 0:
                                             state = CurtainCtrlParser.curtainPause;
                                             break;
@@ -624,15 +681,11 @@
                                     curtainCtrlBackInfo.setState(state);
                                     curtainCtrlBackInfo.setNum(getDatas.addBytes[0] & 0xFF);
                                     devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(state);
-                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(state);
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
                                     EventBus.getDefault().post(new CurtainFeedBackEvent(curtainCtrlBackInfo, true));
                                 }
                             }
-
-
                             break outter;
-
-
                         }
                     }
                 }
@@ -641,8 +694,8 @@
             case Configuration.AIR_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
                     ) {
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                         for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -745,39 +798,82 @@
                     }
                 }
                 break;
+        }
+    }
+
+    /**
+     * 澶勭悊閫昏緫 鎺у埗鍥炶皟
+     * 2024-1-19
+     *
+     * @param getDatas
+     */
+    private static void handleLogicCtrlData(UdpDataBean getDatas) {
+        switch (getDatas.command) {
             case Configuration.LOGIC_CTRL_BACK_COMMAND:
                 outter:
-                for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
-                    ) {
-                        List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
-                        for (int j = 0, len2 = infos.size(); j < len2; j++) {
-                            if ((infos.get(j).getBigType() == Configuration.LOGIC_BIG_TYPE
-                                    || infos.get(j).getBigType() == Configuration.GLOBAL_LOGIC_BIG_TYPE)
-                                    && infos.get(j).getLogicMode().getAreaNum() == (getDatas.addBytes[0] & 0xFF)
-                                    && infos.get(j).getLogicMode().getAreaSceneNum() == (getDatas.addBytes[1] & 0xFF)
-                            ) {
-                                AppliancesInfo sceneInfo = infos.get(j);
-                                LogicMode logicMode = new LogicMode();
-                                logicMode.setAreaNum(getDatas.addBytes[0] & 0xFF);
-                                logicMode.setAreaSceneNum(getDatas.addBytes[1] & 0xFF);
-                                sceneInfo.setLogicMode(logicMode);
+                if (devicesDataList != null && devicesDataList.size() != 0) {
+                    for (int i = 0, len = devicesDataList.size(); i < len; i++) {
+                        if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                                && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID) {
+                            List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                            for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                                if ((infos.get(j).getBigType() == Configuration.LOGIC_BIG_TYPE
+                                        || infos.get(j).getBigType() == Configuration.GLOBAL_LOGIC_BIG_TYPE)
+                                        && infos.get(j).getLogicMode().getAreaNum() == (getDatas.addBytes[0] & 0xFF)
+                                        && infos.get(j).getLogicMode().getAreaSceneNum() == (getDatas.addBytes[1] & 0xFF)) {
+                                    AppliancesInfo sceneInfo = infos.get(j);
+                                    LogicMode logicMode = new LogicMode();
+                                    logicMode.setAreaNum(getDatas.addBytes[0] & 0xFF);
+                                    logicMode.setAreaSceneNum(getDatas.addBytes[1] & 0xFF);
+                                    sceneInfo.setLogicMode(logicMode);
 
-                                LogicCtrlBackInfo logicCtrlBackInfo = new LogicCtrlBackInfo();
-                                logicCtrlBackInfo.setAppliancesInfo(sceneInfo);
-                                logicCtrlBackInfo.setAreaNum(getDatas.addBytes[0] & 0xFF);
-                                logicCtrlBackInfo.setSceneNum(getDatas.addBytes[1] & 0xFF);
+                                    LogicCtrlBackInfo logicCtrlBackInfo = new LogicCtrlBackInfo();
+                                    logicCtrlBackInfo.setAppliancesInfo(sceneInfo);
+                                    logicCtrlBackInfo.setAreaNum(getDatas.addBytes[0] & 0xFF);
+                                    logicCtrlBackInfo.setSceneNum(getDatas.addBytes[1] & 0xFF);
 //                                isSceneCtrlSuccess = true;
-                                setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
-                                EventBus.getDefault().post(new LogicFeedBackEvent(logicCtrlBackInfo, true));
+                                    setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                                    EventBus.getDefault().post(new LogicFeedBackEvent(logicCtrlBackInfo, true));
 
-                                break outter;
+                                    break outter;
+                                }
                             }
                         }
                     }
                 }
+                break;
+        }
+    }
 
+    /**
+     * 澶勭悊鍦烘櫙 鎺у埗鍥炶皟
+     * 2024-1-19
+     *
+     * @param getDatas
+     */
+    private static void handleSceneCtrlData(UdpDataBean getDatas) {
+        switch (getDatas.command) {
+            case Configuration.LOGIC_CTRL_BACK_COMMAND:
+                outter:
+                if (scenesDataList != null && scenesDataList.size() != 0) {
+                    for (int i = 0, len = scenesDataList.size(); i < len; i++) {
+                        if (scenesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
+                                && scenesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                                && scenesDataList.get(i).getAreaCodeID() == (getDatas.addBytes[0] & 0xFF)
+                                && scenesDataList.get(i).getSceneID() == (getDatas.addBytes[1] & 0xFF)) {
+
+                            SceneCtrlBackInfo sceneCtrlBackInfo = new SceneCtrlBackInfo();
+                            sceneCtrlBackInfo.setAreaCodeID(getDatas.addBytes[0] & 0xFF);
+                            sceneCtrlBackInfo.setSceneID(getDatas.addBytes[1] & 0xFF);
+                            sceneCtrlBackInfo.setLoopNum(getDatas.addBytes[2] & 0xFF);
+
+                            setSceneCtrlSuccess(true);
+                            EventBus.getDefault().post(new SceneFeedBackEvent(sceneCtrlBackInfo, true));
+
+                            break outter;
+                        }
+                    }
+                }
                 break;
         }
     }
@@ -794,8 +890,8 @@
             case Configuration.SECURITY_ARMING_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
                     ) {
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                         for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -825,8 +921,8 @@
             case Configuration.SECURITY_ALARM_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
                     ) {
 
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
@@ -873,8 +969,8 @@
             case Configuration.AIR_HVAC_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
                     ) {
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                         for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -912,13 +1008,14 @@
             case Configuration.AIR_HVAC_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID) {
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID) {
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                         for (int j = 0, len2 = infos.size(); j < len2; j++) {
                             if (getDatas.addBytes.length > 0) {
                                 if (infos.get(j).getBigType() == Configuration.AIR_BIG_TYPE
-                                        && infos.get(j).getDeviceType() == HDLApConfig.TYPE_AC_TECHSYS
+                                        && (infos.get(j).getDeviceType() == HDLApConfig.TYPE_AC_TECHSYS
+                                        || infos.get(j).getDeviceType() == HDLApConfig.TYPE_AC_KNXTECHSYS)
                                         && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
 
                                     devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
@@ -964,8 +1061,8 @@
     private static void handleLogicAir(UdpDataBean getDatas) {
         AppliancesInfo newInfo1 = null;
         for (int devPos = 0, len = devicesDataList.size(); devPos < len; devPos++) {
-            if (devicesDataList.get(devPos).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(devPos).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(devPos).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(devPos).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(devPos).getAppliancesInfoList();
                 for (int appPos = 0, len2 = infos.size(); appPos < len2; appPos++) {
@@ -1102,151 +1199,45 @@
         outter:
         for (int devPos = 0, len = devicesDataList.size(); devPos < len; devPos++) {
             if (devicesDataList.get(devPos).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(devPos).getSourceDeviceID() == getDatas.sourceDeviceID
-            ) {
+                    && devicesDataList.get(devPos).getSourceDeviceID() == getDatas.sourceDeviceID) {
                 List<AppliancesInfo> infos = devicesDataList.get(devPos).getAppliancesInfoList();
                 for (int appPos = 0, len2 = infos.size(); appPos < len2; appPos++) {
-                    if ((infos.get(appPos).getBigType()) == (getDatas.addBytes[0] & 0xFF)
-                            && ((infos.get(appPos).getLittleType()) == (getDatas.addBytes[1] & 0xFF))
+                    if ((infos.get(appPos).getDeviceSubnetID()) == (getDatas.addBytes[0] & 0xFF)
+                            && (infos.get(appPos).getDeviceDeviceID()) == (getDatas.addBytes[1] & 0xFF)
                             && ((infos.get(appPos).getChannelNum()) == (getDatas.addBytes[2] & 0xFF))
-                    ) {
+                            && (infos.get(appPos).getBigType()) == (getDatas.addBytes[3] & 0xFF)
+                            && ((infos.get(appPos).getLittleType()) == (getDatas.addBytes[4] & 0xFF))) {
 
-                        //2019-8-20
+                        //2023-11-30
                         byte[] remarkByte;
-                        if (getDatas.addBytes.length >= 23) {
+                        if (getDatas.addBytes.length >= 26) {
                             remarkByte = new byte[20];
-                            System.arraycopy(getDatas.addBytes, 3, remarkByte, 0, remarkByte.length);
+                            System.arraycopy(getDatas.addBytes, 6, remarkByte, 0, remarkByte.length);
                         } else {
                             remarkByte = new byte[getDatas.addBytes.length - 3];
-                            System.arraycopy(getDatas.addBytes, 3, remarkByte, 0, getDatas.addBytes.length - 3);
+                            System.arraycopy(getDatas.addBytes, 6, remarkByte, 0, getDatas.addBytes.length - 3);
                         }
 
                         String remarkStr = HDLStringUtils.byte2String(remarkByte);
-                        HDLLog.I("remarkStr鍥炶矾锛�" + remarkStr);
+                        HDLLog.I("remarkStr鑾峰彇鐨勫娉ㄥ悕涓猴細" + remarkStr);
+                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setChannelNum(getDatas.addBytes[5] & 0xFF);
                         devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setRemarks(remarkStr);
 
-                        switch (infos.get(appPos).getBigType()) {
-                            case Configuration.LOGIC_BIG_TYPE:
-                            case Configuration.GLOBAL_LOGIC_BIG_TYPE:
-                                LogicMode logicMode = new LogicMode();
-                                logicMode.setAreaNum(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                logicMode.setAreaSceneNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
+                        String key = "K" + devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).getBigType()
+                                + "-" + devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).getLittleType()
+                                + "-" + devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).getDeviceSubnetID()
+                                + "-" + devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).getDeviceDeviceID()
+                                + "-" + devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).getChannelNum();
+                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setDeviceKey(key);
 
-                                devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setLogicMode(logicMode);
-
-                                break;
-                            case Configuration.LIGTH_BIG_TYPE:
-                                switch (infos.get(appPos).getLittleType()) {
-                                    case 0:
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        break;
-                                    case 1:
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        break;
-                                    case 9:
-                                        RcuLight rcuLight = new RcuLight();
-                                        rcuLight.setPhysicsChanelNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        rcuLight.setCurState(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                        rcuLight.setLittleType(9);
-                                        rcuLightList.add(rcuLight);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setPhysicsChannelNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                        break;
-                                    case 10:
-                                        RcuLight rcu2Light = new RcuLight();
-                                        rcu2Light.setPhysicsChanelNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        rcu2Light.setCurState(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                        rcu2Light.setLittleType(10);
-                                        rcuLightList.add(rcu2Light);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setPhysicsChannelNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(getDatas.addBytes[getDatas.addBytes.length - 2] & 0xFF);
-                                        break;
-
-                                }
-                                break;
-                            case Configuration.CURTAIN_BIG_TYPE:
-                                int curtainState;
-                                switch (infos.get(appPos).getLittleType()) {
-                                    case 0:
-                                        curtainState = getDatas.addBytes[25] & 0xFF;
-                                        if (curtainState == 1) {
-                                            curtainState = 0;
-                                        } else if (curtainState == 99) {
-                                            curtainState = 100;
-                                        }
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(curtainState);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(curtainState);
-                                        break;
-                                    case 1:
-                                        curtainState = getDatas.addBytes[23] & 0xFF;
-                                        if (curtainState == 1) {
-                                            curtainState = 0;
-                                        } else if (curtainState == 99) {
-                                            curtainState = 100;
-                                        }
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(curtainState);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(curtainState);
-                                        break;
-                                    case 2:
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        break;
-                                }
-                                break;
-
-                            case Configuration.AIR_BIG_TYPE:
-                                switch (infos.get(appPos).getLittleType()) {
-                                    case 0:
-                                        byte[] hvacBytes = new byte[getDatas.addBytes.length - 23];
-                                        for (int i = 23; i < getDatas.addBytes.length; i++) {
-                                            hvacBytes[i - 23] = getDatas.addBytes[i];
-                                        }
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setArrCurState(hvacBytes);
-                                        break;
-                                    case 3:
-                                        byte[] newBytes = new byte[getDatas.addBytes.length - 24 + 1];
-                                        for (int i = 24; i < getDatas.addBytes.length; i++) {
-                                            newBytes[i - 24] = getDatas.addBytes[i];
-                                        }
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setArrCurState(newBytes);
-                                        break;
-                                }
-                                break;
-                            case Configuration.SENSOR_BIG_TYPE:
-                                int curState;
-                                if (getDatas.addBytes.length >= 26) {//2023-11-14 鐗规畩澶勭悊锛屼慨鏀瑰洖璺彿涓虹墿鐞嗗洖璺紙鍥犱负ZigBee杞琤us杞崲鍣ㄧ敤鐨勯兘鏄墿鐞嗗洖璺紝灏嗛�昏緫鍥炶矾璁句负鐗╃悊鍥炶矾澶勭悊锛�
-                                    curState = (int) (getDatas.addBytes[24] & 0xff);
-                                } else {
-                                    curState = (int) (getDatas.addBytes[getDatas.addBytes.length - 1] & 0xff);
-                                }
-                                devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setChannelNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(curState);
-                                devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState((int) curState);
-                                break;
-                            case Configuration.DOOR_MACHINE_BIG_TYPE:
-                                switch (infos.get(appPos).getLittleType()) {
-                                    case 4:
-                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setChannelNum(getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF);
-                                        break;
-                                }
-                               break;
-                            default:
-                                HDLLog.I("鏈壘鍒版绫诲瀷璁惧锛�" + infos.get(appPos).getBigType());
-                                break;
-                        }
                         listRemarksOutter:
                         for (int lRPos = 0, len3 = listRemarks.size(); lRPos < len3; lRPos++) {
-                            //鎵惧埌E44B瀵瑰簲鐨勮澶囧洖璺紝鍒ゆ柇鏄惁宸茬粡鎷垮埌浜嗘暟鎹��
-                            if (listRemarks.get(lRPos).getAppliancesInfo().getDeviceSubnetID() == getDatas.sourceSubnetID
-                                    && listRemarks.get(lRPos).getAppliancesInfo().getDeviceDeviceID() == getDatas.sourceDeviceID
-                                    && listRemarks.get(lRPos).getAppliancesInfo().getBigType() == (getDatas.addBytes[0] & 0xFF)
-                                    && listRemarks.get(lRPos).getAppliancesInfo().getLittleType() == (getDatas.addBytes[1] & 0xFF)
+                            //鎵惧埌F44B瀵瑰簲鐨勮澶囧洖璺紝鍒ゆ柇鏄惁宸茬粡鎷垮埌浜嗘暟鎹��
+                            if (listRemarks.get(lRPos).getAppliancesInfo().getDeviceSubnetID() == (getDatas.addBytes[0] & 0xFF)
+                                    && listRemarks.get(lRPos).getAppliancesInfo().getDeviceDeviceID() == (getDatas.addBytes[1] & 0xFF)
                                     && listRemarks.get(lRPos).getAppliancesInfo().getChannelNum() == (getDatas.addBytes[2] & 0xFF)
-                            ) {
+                                    && listRemarks.get(lRPos).getAppliancesInfo().getBigType() == (getDatas.addBytes[3] & 0xFF)
+                                    && listRemarks.get(lRPos).getAppliancesInfo().getLittleType() == (getDatas.addBytes[4] & 0xFF)) {
 
 
                                 //鑻ユ病鎷垮埌鏁版嵁锛屽垯鎷挎暟鎹紱鑻ュ凡缁忔嬁鍒版暟鎹紝闇�瑕佸垽鏂璴istRemarks鍏ㄩ儴鏉$洰鏄惁鎷垮埌澶囨敞銆�
@@ -1289,6 +1280,70 @@
     }
 
     /**
+     * 澶勭悊鎵�鏈夊満鏅鎯呮暟鎹�佽缃綋鍓嶅満鏅姸鎬�
+     *
+     * @param getDatas
+     */
+    private static void handleSceneCurStateData(UdpDataBean getDatas) {
+        outter:
+        for (int devPos = 0, len = scenesDataList.size(); devPos < len; devPos++) {
+            if (scenesDataList.get(devPos).getSourceSubnetID() == getDatas.sourceSubnetID
+                    && scenesDataList.get(devPos).getSourceDeviceID() == getDatas.sourceDeviceID
+                    && scenesDataList.get(devPos).getIndex() == (getDatas.addBytes[0] * 256 + getDatas.addBytes[1])) {
+                //2024-01-18
+                byte[] remarkByte;
+                String remarkStr = "";
+                if (getDatas.addBytes.length >= 36) {
+                    remarkByte = new byte[32];
+                    System.arraycopy(getDatas.addBytes, 4, remarkByte, 0, remarkByte.length);
+                    remarkStr = HDLStringUtils.byte2String(remarkByte);
+                }
+
+                HDLLog.I("remarkStr鑾峰彇鐨勫満鏅娉ㄥ悕涓猴細" + remarkStr);
+                scenesDataList.get(devPos).setAreaCodeID(getDatas.addBytes[2] & 0xFF);
+                scenesDataList.get(devPos).setSceneID(getDatas.addBytes[3] & 0xFF);
+                scenesDataList.get(devPos).setRemark(remarkStr);
+
+                listRemarksOutter:
+                for (int lRPos = 0, len3 = scenesDataList.size(); lRPos < len3; lRPos++) {
+                    //鎵惧埌F44B瀵瑰簲鐨勮澶囧洖璺紝鍒ゆ柇鏄惁宸茬粡鎷垮埌浜嗘暟鎹��
+                    if (scenesDataList.get(lRPos).getAreaCodeID() == (getDatas.addBytes[2] & 0xFF)
+                            && scenesDataList.get(lRPos).getSceneID() == (getDatas.addBytes[3] & 0xFF)) {
+
+                        //鑻ユ病鎷垮埌鏁版嵁锛屽垯鎷挎暟鎹紱鑻ュ凡缁忔嬁鍒版暟鎹紝闇�瑕佸垽鏂璴istRemarks鍏ㄩ儴鏉$洰鏄惁鎷垮埌澶囨敞銆�
+                        if (scenesDataList.get(lRPos).isCallBack()) {
+                            for (int lR2Pos = 0, len4 = scenesDataList.size(); lR2Pos < len4; lR2Pos++) {
+                                if (scenesDataList.get(lR2Pos).isCallBack()) {
+                                    if (lR2Pos == (len4 - 1)) {
+                                        HDLLog.I("鏀跺埌澶囨敞鍛戒护锛屽凡瀛樺湪姝ゅ満鏅娉紝杩囨护");
+                                        break listRemarksOutter;
+                                    }
+                                } else {
+                                    HDLLog.I("涓嶅瓨鍦ㄧ殑鍦烘櫙澶囨敞锛屽啀娆℃悳绱㈠娉ㄣ�傚尯鍙凤細" + scenesDataList.get(lRPos).getAreaCodeID()
+                                            + ",鍦烘櫙鍙凤細" + scenesDataList.get(lRPos).getSceneID());
+                                    HandleSearch.getSceneDetails();
+                                    break listRemarksOutter;
+                                }
+                            }
+                        } else {
+                            HDLLog.I("杩斿洖澶囨敞鍦烘櫙锛氬尯鍙凤細" + scenesDataList.get(lRPos).getAreaCodeID()
+                                    + ",鍦烘櫙鍙凤細" + scenesDataList.get(lRPos).getSceneID());
+                            scenesDataList.get(lRPos).setCallBack(true);
+                            HandleSearch.getSceneDetails();
+                            break listRemarksOutter;
+                        }
+
+                    }
+                }
+
+                break outter;
+
+            }
+        }
+    }
+
+
+    /**
      * 澶勭悊淇敼璁惧澶囨敞鍚庣殑鍥炶皟
      *
      * @param getDatas
@@ -1309,8 +1364,8 @@
     private static void handleStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1323,7 +1378,6 @@
                             devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState((int) value);
 
                             sensorInfo.setCurState(value);
-
 
                             String unite = "";
                             switch (sensorInfo.getDeviceType()) {
@@ -1351,6 +1405,7 @@
                                     unite = "";
                                     break;
                                 case HDLApConfig.TYPE_SENSOR_PM_2_POINT_5:
+                                case HDLApConfig.TYPE_SENSOR_PM_10:
                                     switch (getDatas.addBytes[4] & 0xff) {
                                         case 0:
                                             unite = "mg/m3";
@@ -1478,8 +1533,6 @@
                                     unite = "鏈煡鍗曚綅";
                                     break;
                             }
-
-
 //                            EventBus.getDefault().post(new DeviceStateEvent(sensorInfo, true));
                             HDLLog.I("鍙戦�佷紶鎰熷櫒閫氱煡鏇存柊");
                             EventBus.getDefault().post(new SensorStateBackInfo(sensorInfo, true, unite));
@@ -1496,16 +1549,16 @@
     }
 
     /**
-     * 澶勭悊浼犳劅鍣� 骞挎挱鏁版嵁
-     * 2019-11-4 鏂颁慨鏀�
+     * 澶勭悊浼犳劅鍣� 鐘舵�佽鍙栥�佸箍鎾暟鎹�
+     * 2024-2-2 鏂版敮鎸�
      *
      * @param getDatas
      */
     private static void handleSensorBroadcastStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1514,7 +1567,14 @@
                             && infos.get(j).getChannelNum() == (getDatas.addBytes[2] & 0xFF)) {//2019-07-29
                         isGetDeviceStateSuccess = true;
                         AppliancesInfo sensorInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
-                        float value = HDLUtlis.byte2Float(Arrays.copyOfRange(getDatas.addBytes, 5, 8));
+                        float value = 0;
+                        if ((getDatas.addBytes[3] & 0xFF) == 1 || (getDatas.addBytes[3] & 0xFF) == 2) {//鏁村瀷
+                            value = HDLUtlis.getInt(Arrays.copyOfRange(getDatas.addBytes, 5, 9));
+                        } else if ((getDatas.addBytes[3] & 0xFF) == 3) {//娴偣鍨�
+                            value = HDLUtlis.byteToFloat(getDatas.addBytes[5], getDatas.addBytes[6], getDatas.addBytes[7], getDatas.addBytes[8]);
+                        }
+
+                        Log.d("panlili", "HDLDeviceManager.java:handleSensorBroadcastStateData----->value= " + value);
                         devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(value);
                         devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState((int) value);
 
@@ -1546,6 +1606,7 @@
                                 unite = "";
                                 break;
                             case HDLApConfig.TYPE_SENSOR_PM_2_POINT_5:
+                            case HDLApConfig.TYPE_SENSOR_PM_10:
                                 switch (getDatas.addBytes[4] & 0xff) {
                                     case 0:
                                         unite = "mg/m3";
@@ -1690,6 +1751,51 @@
     }
 
     /**
+     * 澶勭悊KNX绉戞妧甯屾 鐘舵�佽鍙栥�佸箍鎾暟鎹�
+     * 2024-5-28 鏂版敮鎸�
+     *
+     * @param getDatas
+     */
+    private static void handleKNXTechSysStateData(UdpDataBean getDatas) {
+        outter:
+        for (int i = 0, len = devicesDataList.size(); i < len; i++) {
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.AIR_BIG_TYPE
+                            && infos.get(j).getLittleType() == 101
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[2] & 0xFF)) {
+
+                        AppliancesInfo info = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        info.setGetDeviceStateSuccess(true);
+                        float value = 0;
+                        //00014 2024骞�5鏈�29鏃�9:44:03:806:  14 64 C8 11 F7 35 3A FF FF 05 03 01 03 00 00 00 00 36 53 81
+                        if ((getDatas.addBytes[3] & 0xFF) == 1 || (getDatas.addBytes[3] & 0xFF) == 2) {//鏁村瀷
+                            value = HDLUtlis.getInt(Arrays.copyOfRange(getDatas.addBytes, 5, 9));
+                        } else if ((getDatas.addBytes[3] & 0xFF) == 3) {//娴偣鍨�
+//                            value = HDLUtlis.byteToFloat(getDatas.addBytes[8], getDatas.addBytes[7], getDatas.addBytes[6], getDatas.addBytes[5]);
+                            value = HDLUtlis.getInt(Arrays.copyOfRange(getDatas.addBytes, 5, 9));
+                        }
+                        Log.d("panlili", "HDLDeviceManager.java:handleKNXTechSysStateData----->value= " + value);
+
+                        AirTechSysBackInfo mAirTechSysBackInfo = new AirTechSysBackInfo(info);
+                        mAirTechSysBackInfo.setIndoorHumidity(value + "");//璁剧疆婀垮害
+
+                        EventBus.getDefault().post(new AirTechSysFeedBackEvent(mAirTechSysBackInfo, true));
+                        HDLLog.I("鍙戦�佺鎶�绯荤粺婀垮害閫氱煡鏇存柊");
+
+                        break outter;
+                    } else {
+                        HDLLog.I("handle state 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
      * panlili
      * 澶勭悊闂ㄩ攣鐘舵�佸拰鎶ヨ 骞挎挱鏁版嵁
      *
@@ -1698,8 +1804,8 @@
     private static void handleDoorMachineBroadcastStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1799,8 +1905,8 @@
     private static void handleLightStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1828,8 +1934,8 @@
     private static void handleColourLightStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1859,8 +1965,8 @@
     private static void handleCurtainBroadcastStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1909,8 +2015,8 @@
     private static void handleCurtainStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -1918,7 +2024,6 @@
                         int state = 0;
                         if (infos.get(j).getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE//绐楀笜妯″潡
                                 && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-07-17
-
                             switch (getDatas.addBytes[1] & 0xFF) {//杩欓噷涔熷簲璇ユ敼鎴�0锛�1锛�2
                                 case 0:
                                     state = CurtainCtrlParser.curtainPause;
@@ -1941,38 +2046,59 @@
                             EventBus.getDefault().post(new DeviceStateEvent(curtainInfo, true));
 
                             break outter;
-                        } else if (infos.get(j).getDeviceType() == HDLApConfig.TYPE_CURTAIN_GLYSTRO || infos.get(j).getDeviceType() == HDLApConfig.TYPE_CURTAIN_ROLLER) {
-                            if ((getDatas.addBytes[0] & 0xFF) >= 17
-                                    && ((getDatas.addBytes[0] & 0xFF) - 16) == infos.get(j).getChannelNum()) {//绐楀笜鍙峰ぇ浜庣瓑浜�17 鍑� 16 = 褰撳墠绐楀笜鍥炶矾鍙�
-                                state = getDatas.addBytes[1] & 0xFF;
-                                if (state == 1) {
-                                    state = 0;//杩欎釜鍒ゆ柇鏄皢鐧惧垎姣斾负1锛屽己鍒舵敼涓�0.
+                        } else if (infos.get(j).getDeviceType() == HDLApConfig.TYPE_CURTAIN_GLYSTRO || infos.get(j).getDeviceType() == HDLApConfig.TYPE_CURTAIN_ROLLER
+                                || infos.get(j).getDeviceType() == HDLApConfig.TYPE_CURTAIN_SHANGRILA) {
+
+                            if (getDatas.addBytes.length >= 3) {//鏂板崗璁嫇灞曞瓧娈�
+                                if ((getDatas.addBytes[0] & 0xFF) >= 17
+                                        && ((getDatas.addBytes[0] & 0xFF) - 16) == infos.get(j).getChannelNum()) {//绐楀笜鍙峰ぇ浜庣瓑浜�17 鍑� 16 = 褰撳墠绐楀笜鍥炶矾鍙�
+                                    state = getDatas.addBytes[1] & 0xFF;
+                                    if (state == 1) {
+                                        state = 0;//杩欎釜鍒ゆ柇鏄皢鐧惧垎姣斾负1锛屽己鍒舵敼涓�0.
+                                    }
+                                    if (state == 99) {
+                                        state = 100;//杩欎釜鍒ゆ柇鏄皢鐧惧垎姣斾负99锛屽己鍒舵敼涓�100.
+                                    }
+                                    isGetDeviceStateSuccess = true;
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(state);
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+
+                                    AppliancesInfo curtainInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+
+                                    CurtainCtrlBackInfo curtainCtrlBackInfo = new CurtainCtrlBackInfo();
+                                    curtainCtrlBackInfo.setRemarks(curtainInfo.getRemarks());
+                                    curtainCtrlBackInfo.setParentRemarks(curtainInfo.getParentRemarks());
+                                    curtainCtrlBackInfo.setAppliancesInfo(curtainInfo);
+                                    curtainInfo.setCurState(state);
+
+                                    curtainCtrlBackInfo.setState(state);
+
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(state);
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                                    curtainCtrlBackInfo.setNum((getDatas.addBytes[0] & 0xFF) - 16);
+
+                                    EventBus.getDefault().post(new CurtainDeviceStateEvent(curtainCtrlBackInfo, true));
+                                    break outter;
+                                } else {
+                                    if ((getDatas.addBytes[0] & 0xFF) == infos.get(j).getChannelNum()) {
+                                        isGetDeviceStateSuccess = true;
+
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes);
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                                        AppliancesInfo appliancesInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                                        CurtainCtrlBackInfo info = new CurtainCtrlBackInfo(appliancesInfo);
+                                        EventBus.getDefault().post(new CurtainDeviceStateEvent(info, true));
+                                    }
                                 }
-                                if (state == 99) {
-                                    state = 100;//杩欎釜鍒ゆ柇鏄皢鐧惧垎姣斾负99锛屽己鍒舵敼涓�100.
-                                }
-                                isGetDeviceStateSuccess = true;
-                                devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[1] & 0xFF);
-                                devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(getDatas.addBytes[1] & 0xFF);
-                                AppliancesInfo curtainInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
-                                curtainInfo.setCurState(state);
-                                EventBus.getDefault().post(new DeviceStateEvent(curtainInfo, true));
-                                break outter;
-                            } else {
-                                if ((getDatas.addBytes[0] & 0xFF) == infos.get(j).getChannelNum()) {
-                                    switch (getDatas.addBytes[1] & 0xFF) {//杩欓噷涔熷簲璇ユ敼鎴�0锛�1锛�2
-                                        case 0:
-                                            state = CurtainCtrlParser.curtainPause;
-                                            break;
-                                        case 1:
-                                            state = CurtainCtrlParser.curtainOn;
-                                            break;
-                                        case 2:
-                                            state = CurtainCtrlParser.curtainOff;
-                                            break;
-                                        default:
-                                            state = 0;
-                                            break;
+                            } else {//鍏煎鏃у崗璁�
+                                if ((getDatas.addBytes[0] & 0xFF) >= 17
+                                        && ((getDatas.addBytes[0] & 0xFF) - 16) == infos.get(j).getChannelNum()) {//绐楀笜鍙峰ぇ浜庣瓑浜�17 鍑� 16 = 褰撳墠绐楀笜鍥炶矾鍙�
+                                    state = getDatas.addBytes[1] & 0xFF;
+                                    if (state == 1) {
+                                        state = 0;//杩欎釜鍒ゆ柇鏄皢鐧惧垎姣斾负1锛屽己鍒舵敼涓�0.
+                                    }
+                                    if (state == 99) {
+                                        state = 100;//杩欎釜鍒ゆ柇鏄皢鐧惧垎姣斾负99锛屽己鍒舵敼涓�100.
                                     }
                                     isGetDeviceStateSuccess = true;
                                     devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[1] & 0xFF);
@@ -1981,12 +2107,34 @@
                                     curtainInfo.setCurState(state);
                                     EventBus.getDefault().post(new DeviceStateEvent(curtainInfo, true));
                                     break outter;
+                                } else {
+                                    if ((getDatas.addBytes[0] & 0xFF) == infos.get(j).getChannelNum()) {
+                                        switch (getDatas.addBytes[1] & 0xFF) {//杩欓噷涔熷簲璇ユ敼鎴�0锛�1锛�2
+                                            case 0:
+                                                state = CurtainCtrlParser.curtainPause;
+                                                break;
+                                            case 1:
+                                                state = CurtainCtrlParser.curtainOn;
+                                                break;
+                                            case 2:
+                                                state = CurtainCtrlParser.curtainOff;
+                                                break;
+                                            default:
+                                                state = 0;
+                                                break;
+                                        }
+                                        isGetDeviceStateSuccess = true;
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[1] & 0xFF);
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(getDatas.addBytes[1] & 0xFF);
+                                        AppliancesInfo curtainInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                                        curtainInfo.setCurState(state);
+                                        EventBus.getDefault().post(new DeviceStateEvent(curtainInfo, true));
+                                        break outter;
+                                    }
                                 }
-
                             }
 
                         }
-
 
                     } else {
                         HDLLog.I("handleCurtainStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
@@ -2006,8 +2154,8 @@
     private static void handleAirStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2059,8 +2207,8 @@
     private static void handleLOGICStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2101,8 +2249,8 @@
     private static void handleSecurityStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2136,8 +2284,8 @@
     private static void handleHVACStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2167,13 +2315,14 @@
     private static void handleTechSysStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
                     if (infos.get(j).getBigType() == Configuration.AIR_BIG_TYPE
-                            && infos.get(j).getDeviceType() == HDLApConfig.TYPE_AC_TECHSYS
+                            && (infos.get(j).getDeviceType() == HDLApConfig.TYPE_AC_TECHSYS
+                            || infos.get(j).getDeviceType() == HDLApConfig.TYPE_AC_KNXTECHSYS)
                             && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-8-6
 
                         isGetDeviceStateSuccess = true;
@@ -2199,13 +2348,13 @@
     private static void handleDryContactBroadcastStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
                     if (infos.get(j).getBigType() == Configuration.SENSOR_BIG_TYPE
-                            && infos.get(j).getChannelNum() == ((getDatas.addBytes[1] & 0xFF) - 1)) {//2019-07-29
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[1] & 0xFF)) {
                         if (getDatas.addBytes.length >= 3) {
                             isGetDeviceStateSuccess = true;
                             int state = getDatas.addBytes[2] & 0xFF;
@@ -2235,8 +2384,8 @@
     private static void handleCommonSwitchCtrlData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID) {
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID) {
 
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2272,8 +2421,8 @@
     private static void handleCommonSwitchStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID) {
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID) {
 
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2303,286 +2452,6 @@
         }
     }
 
-//    /**
-//     * 璇诲彇HVAC鐘舵�佸弽棣�
-//     *
-//     * @param getDatas
-//     */
-//    private static void handleHVACStateData(UdpDataBean getDatas) {
-//        int count = getDatas.addBytes.length / 11;
-//
-//        for (int airIndex = 0; airIndex < count; airIndex++) {
-//            outter:
-//            for (int indexI = 0, len = devicesDataList.size(); indexI < len; indexI++) {
-//                if (devicesDataList.get(indexI).getSourceSubnetID() == getDatas.sourceSubnetID
-//                        && devicesDataList.get(indexI).getSourceDeviceID() == getDatas.sourceDeviceID
-//                ) {
-//                    List<AppliancesInfo> infos = devicesDataList.get(indexI).getAppliancesInfoList();
-//                    for (int indexJ = 0, len2 = infos.size(); indexJ < len2; indexJ++) {
-//                        if (infos.get(indexJ).getBigType() == Configuration.AIR_BIG_TYPE
-//                                && infos.get(indexJ).getDeviceType() != HDLApConfig.TYPE_AC_PANEL
-//                                && infos.get(indexJ).getChannelNum() == (getDatas.addBytes[airIndex * 11] & 0xFF)) {
-//                            AppliancesInfo appliancesInfo = devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ);
-//
-//                            switch (getDatas.addBytes[airIndex * 11] & 0xff) {
-//                                case 1:
-//                                    handleAirCastData(getDatas, air1Info, airIndex, appliancesInfo);
-//                                    air1Info[0] = getDatas.addBytes[1 + 0 * 11];
-//                                    air1Info[1] = (byte) ((getDatas.addBytes[3 + 0 * 11] & 0xf0) >> 4);
-//                                    switch (air1Info[0] & 0xff) {
-//                                        case 0:
-//                                            air1Info[2] = getDatas.addBytes[2 + 0 * 11];
-//                                            break;
-//                                        case 1:
-//                                            air1Info[2] = getDatas.addBytes[6 + 0 * 11];
-//                                            break;
-//                                        case 3:
-//                                            air1Info[2] = getDatas.addBytes[8 + 0 * 11];
-//                                            break;
-//                                        case 4:
-//                                            air1Info[2] = getDatas.addBytes[9 + 0 * 11];
-//                                            break;
-//
-//                                    }
-//
-//                                    air1Info[3] = (byte) (getDatas.addBytes[3 + 0 * 11] & 0x0f);
-//                                    air1Info[4] = getDatas.addBytes[5 + 0 * 11];
-//                                    air1Info[5] = getDatas.addBytes[10 + 0 * 11];
-////                                        HDLLog.info( "209a air1Info = " + air1Info[0] + " " + air1Info[1] + " " + air1Info[2] + " " + air1Info[3] + " " + air1Info[4] + " " + air1Info[5]);
-////                                        String arrString = "209a 闄勫姞鏁版嵁锛�";
-////                                        for (int i = 0; i < getDatas.addBytes.length; i++) {
-////                                            arrString += (getDatas.addBytes[i] & 0xff) + ",";
-////                                        }
-////                                        HDLLog.info( arrString);
-//                                    devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(air1Info);
-//                                    break;
-//                                case 2:
-//                                    handleAirCastData(getDatas, air2Info, airIndex, appliancesInfo);
-//                                    air2Info[0] = getDatas.addBytes[1 + 1 * 11];
-//                                    air2Info[1] = (byte) ((getDatas.addBytes[3 + 1 * 11] & 0xf0) >> 4);
-//                                    switch (air2Info[0] & 0xff) {
-//                                        case 0:
-//                                            air2Info[2] = getDatas.addBytes[2 + 1 * 11];
-//                                            break;
-//                                        case 1:
-//                                            air2Info[2] = getDatas.addBytes[6 + 1 * 11];
-//                                            break;
-//                                        case 3:
-//                                            air2Info[2] = getDatas.addBytes[8 + 1 * 11];
-//                                            break;
-//                                        case 4:
-//                                            air2Info[2] = getDatas.addBytes[9 + 1 * 11];
-//                                            break;
-//
-//                                    }
-//                                    air2Info[3] = (byte) (getDatas.addBytes[3 + 1 * 11] & 0x0f);
-//                                    air2Info[4] = getDatas.addBytes[5 + 1 * 11];
-//                                    air2Info[5] = getDatas.addBytes[10 + 1 * 11];
-//                                    devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(air2Info);
-//                                    break;
-//                                case 3:
-//                                    handleAirCastData(getDatas, air3Info, airIndex, appliancesInfo);
-//                                    air3Info[0] = getDatas.addBytes[1 + 2 * 11];
-//                                    air3Info[1] = (byte) ((getDatas.addBytes[3 + 2 * 11] & 0xf0) >> 4);
-//                                    switch (air3Info[0] & 0xff) {
-//                                        case 0:
-//                                            air3Info[2] = getDatas.addBytes[2 + 2 * 11];
-//                                            break;
-//                                        case 1:
-//                                            air3Info[2] = getDatas.addBytes[6 + 2 * 11];
-//                                            break;
-//                                        case 3:
-//                                            air3Info[2] = getDatas.addBytes[8 + 2 * 11];
-//                                            break;
-//                                        case 4:
-//                                            air3Info[2] = getDatas.addBytes[9 + 2 * 11];
-//                                            break;
-//                                    }
-//                                    air3Info[3] = (byte) (getDatas.addBytes[3 + 2 * 11] & 0x0f);
-//                                    air3Info[4] = getDatas.addBytes[5 + 2 * 11];
-//                                    air3Info[5] = getDatas.addBytes[10 + 2 * 11];
-//                                    devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(air3Info);
-//                                    break;
-//                                case 4:
-//                                    handleAirCastData(getDatas, air4Info, airIndex, appliancesInfo);
-//                                    air4Info[0] = getDatas.addBytes[1 + 3 * 11];
-//                                    air4Info[1] = (byte) ((getDatas.addBytes[3 + 3 * 11] & 0xf0) >> 4);
-//                                    switch (air4Info[0] & 0xff) {
-//                                        case 0:
-//                                            air4Info[2] = getDatas.addBytes[2 + 3 * 11];
-//                                            break;
-//                                        case 1:
-//                                            air4Info[2] = getDatas.addBytes[6 + 3 * 11];
-//                                            break;
-//                                        case 3:
-//                                            air4Info[2] = getDatas.addBytes[8 + 3 * 11];
-//                                            break;
-//                                        case 4:
-//                                            air4Info[2] = getDatas.addBytes[9 + 3 * 11];
-//                                            break;
-//                                    }
-//                                    air4Info[3] = (byte) (getDatas.addBytes[3 + 3 * 11] & 0x0f);
-//                                    air4Info[4] = getDatas.addBytes[5 + 3 * 11];
-//                                    air4Info[5] = getDatas.addBytes[10 + 3 * 11];
-//                                    devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(air4Info);
-//                                    break;
-//
-//                            }
-//                        }
-//
-//                    }
-//                }
-//            }
-//
-//
-//        }
-//
-//
-//    }
-//
-//
-//    /**
-//     * 澶勭悊瀹跺眳绌鸿皟骞挎挱娑堟伅
-//     *
-//     * @param getDatas
-//     * @param airInfo
-//     * @param airIndex
-//     * @param oldInfo
-//     */
-//    private static void handleAirCastData(UdpDataBean getDatas, final byte[] airInfo, int airIndex, final AppliancesInfo oldInfo) {
-//        if (airInfo[0] != getDatas.addBytes[1 + airIndex * 11]) {
-//
-////            EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//            new Timer().schedule(new TimerTask() {
-//                @Override
-//                public void run() {
-//                    final AppliancesInfo newInfo = oldInfo;
-//                    newInfo.setArrCurState(new byte[]{AirCtrlParser.airSwich, airInfo[0]});
-////                    HDLLog.info( "0x209A in 绌鸿皟寮�鍏虫敼鍙�" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                            + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-//                    EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                }
-//            }, 500);
-//        }
-//
-////        HDLLog.info( "airIndex = " + airIndex + "  209a 妯″紡鍊� = " + ((getDatas.addBytes[3 + airIndex * 11] & 0xf0) >> 4) + " 鎴� = " + ((getDatas.addBytes[7 + airIndex * 11] & 0xf0) >> 4));
-//        if (airInfo[1] != (byte) ((getDatas.addBytes[3 + airIndex * 11] & 0xf0) >> 4)) {
-//            new Timer().schedule(new TimerTask() {
-//                @Override
-//                public void run() {
-//                    final AppliancesInfo newInfo = oldInfo;
-//                    newInfo.setArrCurState(new byte[]{AirCtrlParser.airMode, airInfo[1]});
-////                    HDLLog.info( "0x209A in 绌鸿皟妯″紡鏀瑰彉" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                            + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-//                    EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                }
-//            }, 1000);
-//        }
-//
-//
-//        switch (airInfo[1] & 0xff) {
-//            case 0:
-//                if (airInfo[2] != getDatas.addBytes[2 + airIndex * 11]) {
-//                    new Timer().schedule(new TimerTask() {
-//                        @Override
-//                        public void run() {
-//                            final AppliancesInfo newInfo = oldInfo;
-//                            newInfo.setArrCurState(new byte[]{AirCtrlParser.refTem, airInfo[2]});
-////                            HDLLog.info( "0x209A in 绌鸿皟娓╁害鏀瑰彉" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                                    + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-//                            EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                        }
-//                    }, 1500);
-//                }
-//
-//                break;
-//            case 1:
-//                if (airInfo[2] != getDatas.addBytes[6 + airIndex * 11]) {
-////                    airInfo[2] = getDatas.addBytes[6 + airIndex * 11];
-//
-////                    EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                    new Timer().schedule(new TimerTask() {
-//                        @Override
-//                        public void run() {
-//                            final AppliancesInfo newInfo = oldInfo;
-//                            newInfo.setArrCurState(new byte[]{AirCtrlParser.heatTem, airInfo[2]});
-////                            HDLLog.info( "0x209A in 绌鸿皟娓╁害鏀瑰彉" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                                    + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-//                            EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                        }
-//                    }, 1500);
-//                }
-//
-//                break;
-//            case 3:
-//                if (airInfo[2] != getDatas.addBytes[8 + airIndex * 11]) {
-////                    airInfo[2] = getDatas.addBytes[8 + airIndex * 11];
-//
-////                    EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                    new Timer().schedule(new TimerTask() {
-//                        @Override
-//                        public void run() {
-//                            final AppliancesInfo newInfo = oldInfo;
-//                            newInfo.setArrCurState(new byte[]{AirCtrlParser.autoTem, airInfo[2]});
-////                            HDLLog.info( "0x209A in 绌鸿皟娓╁害鏀瑰彉" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                                    + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-//                            EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                        }
-//                    }, 1500);
-//                }
-//
-//                break;
-//            case 4:
-//                if (airInfo[2] != getDatas.addBytes[9 + airIndex * 11]) {
-////                    airInfo[2] = getDatas.addBytes[9 + airIndex * 11];
-//
-////                    EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                    new Timer().schedule(new TimerTask() {
-//                        @Override
-//                        public void run() {
-//                            final AppliancesInfo newInfo = oldInfo;
-//                            newInfo.setArrCurState(new byte[]{AirCtrlParser.dehumTem, airInfo[2]});
-////                            HDLLog.info( "0x209A in 绌鸿皟娓╁害鏀瑰彉" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                                    + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-//                            EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                        }
-//                    }, 1500);
-//                }
-//
-//                break;
-//        }
-//
-////        HDLLog.info( "airInfo[3] = " + (airInfo[3] & 0xff) + " 绗�3浣� 浣�4浣嶉閫� = "+(getDatas.addBytes[3 + airIndex * 11] & 0x0f));
-////        HDLLog.info( "airInfo[3] = " + (airInfo[3] & 0xff) + " 绗�7浣� 浣�4浣嶉閫� = "+(getDatas.addBytes[7 + airIndex * 11] & 0x0f));
-//        if (airInfo[3] != (byte) (getDatas.addBytes[3 + airIndex * 11] & 0x0f)) {
-////            airInfo[3] = (byte) (getDatas.addBytes[3 + airIndex * 11] & 0x0f);
-//
-////            EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//
-//            new Timer().schedule(new TimerTask() {
-//                @Override
-//                public void run() {
-//
-//                    final AppliancesInfo newInfo = oldInfo;
-//                    newInfo.setArrCurState(new byte[]{AirCtrlParser.airSpeed, airInfo[3]});
-////                    HDLLog.info( "绌鸿皟椋庨�熸敼鍙�" + " appliancesInfo subid = " + newInfo.getDeviceSubnetID()
-////                            + " devID = " + newInfo.getDeviceDeviceID() + " 鍥炶矾鍙凤細" + newInfo.getChannelNum() + " devType" + newInfo.getDeviceType());
-////                    HDLLog.info( "鍙戦�佺┖璋冩敼鍙橀閫焏ata = " + Arrays.toString(newInfo.getArrCurState()));
-//                    EventBus.getDefault().post(new DeviceStateEvent(newInfo, true));
-//                }
-//            }, 2000);
-//        }
-//
-//        //瀹ゆ俯銆佹憜椋庢病鏈夎繑鍥炪�備笅涓増鏈渶瑕佽�冭檻
-//        if (airInfo[4] != getDatas.addBytes[5 + airIndex * 11]) {
-////            airInfo[4] = getDatas.addBytes[5 + airIndex * 11];
-//        }
-//
-//        if (airInfo[5] != getDatas.addBytes[10 + airIndex * 11]) {
-////            airInfo[5] = getDatas.addBytes[10 + airIndex * 11];
-//        }
-//    }
-
     /**
      * 姝ゆ柟娉曞熀鏈病鐢ㄥ埌锛岄�昏緫妯″潡鐨勬帶鍒朵俊鎭凡缁忓湪handleCtrlData涓鐞嗚繃浜�
      * <p>
@@ -2592,8 +2461,8 @@
      */
     private static void handleLogicData(UdpDataBean getDatas) {
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
 
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
@@ -2652,8 +2521,8 @@
     private static void handleAudioData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2790,7 +2659,6 @@
      */
     public static void setDeviceCtrlSuccessStateWithInfo(AppliancesInfo info, Boolean success) {
 //        if(info.getDeviceKey() == null) return;
-
         ctrlSuccessStateHashMap.put(info.getDeviceKey(), success);
     }
 
@@ -2806,6 +2674,14 @@
         Boolean success = ctrlSuccessStateHashMap.get(info.getDeviceKey());
         if (success == null) success = false;
         return success;
+    }
+
+    public static boolean isSceneCtrlSuccess() {
+        return isSceneCtrlSuccess;
+    }
+
+    public static void setSceneCtrlSuccess(boolean isSceneCtrlSuccess) {
+        HDLDeviceManager.isSceneCtrlSuccess = isSceneCtrlSuccess;
     }
 
     /**
@@ -2887,8 +2763,8 @@
             boolean bCanAdd = false;
             outter:
             for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                if (devicesDataList.get(i).getSourceSubnetID() == mSubnetID
-                        && devicesDataList.get(i).getSourceDeviceID() == mDeviceID
+                if (devicesDataList.get(i).getDeviceSubnetID() == mSubnetID
+                        && devicesDataList.get(i).getDeviceDeviceID() == mDeviceID
                 ) {
                     bExistSubnetID = true;
                     DevicesData mDevicesData = devicesDataList.get(i);
@@ -2960,8 +2836,8 @@
     private static void handleFreshAirStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -2991,8 +2867,8 @@
     private static void handleFreshAirCtrlBackData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -3024,8 +2900,8 @@
     private static void handleFreshAirJINMAOStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -3055,8 +2931,8 @@
     private static void handleFreshAirJINMAOCtrlBackData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -3088,8 +2964,8 @@
     private static void handleGeothermalStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -3131,8 +3007,8 @@
             case Configuration.GEOTHERMAL_MODULE_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-                    if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                            && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+                    if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                            && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
                     ) {
 
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
@@ -3179,14 +3055,14 @@
     private static void handleDoorMachineStateData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
                     if (infos.get(j).getBigType() == Configuration.DOOR_MACHINE_BIG_TYPE
                             && infos.get(j).getDeviceType() == HDLApConfig.TYPE_DOOR_MACHINE
-                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-07-17
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
 
                         isGetDeviceStateSuccess = true;
                         devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
@@ -3210,8 +3086,8 @@
     private static void handleDoorMachineCtrlFristBackData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
@@ -3241,8 +3117,8 @@
     private static void handleDoorMachineCtrlBackData(UdpDataBean getDatas) {
         outter:
         for (int i = 0, len = devicesDataList.size(); i < len; i++) {
-            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
-                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            if (devicesDataList.get(i).getDeviceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getDeviceDeviceID() == getDatas.sourceDeviceID
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {

--
Gitblit v1.8.0