From 566ddb2ea03e2514de50f2ca861a2674f6e840ac Mon Sep 17 00:00:00 2001
From: 562935844@qq.com
Date: 星期一, 27 十一月 2023 13:32:27 +0800
Subject: [PATCH] 新增科技系统、门锁、新风和地暖支持

---
 HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLDeviceManager.java | 1126 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 618 insertions(+), 508 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 b2ab1a2..89e0cdd 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
@@ -3,23 +3,39 @@
 import android.content.Context;
 import android.content.Intent;
 import android.text.TextUtils;
+import android.util.Log;
 
 import com.google.gson.Gson;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.reflect.TypeToken;
 import com.hdl.sdk.ttl.Config.MCUConstants;
 import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirHVACBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirTechSysBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLCommonSwitch.CommonSwitchBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineFristBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineWaringBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLFreshAir.FreshAirBackInfo;
+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.HDLSecurity.SecurityBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLSensor.DryContactSensorBackEvent;
 import com.hdl.sdk.ttl.HDLAppliances.HDLSensor.SensorStateBackInfo;
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.MCUConfigurationBean;
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.MCUDataBean;
 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.DiscoverNewDevicesEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DoorMachineFeedBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DoorMachineFeedFristBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.EventCode;
+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.MCUFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.SecurityAlarmFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.SecurityArmingFeedBackEvent;
@@ -138,6 +154,7 @@
      * @param commandType 鍛戒护绫诲瀷
      */
     public static void handle(UdpDataBean getDatas, int commandType) {
+        Log.e("panlili", "commandType=" + Integer.toHexString(commandType)+" desDeviceID=" + getDatas.desDeviceID + " sourceDeviceID=" + getDatas.sourceDeviceID);
         switch (commandType) {
             case Configuration.DEVICES_SEARCH_BACK_COMMAND:
                 if (HandleSearch.isGetRcuIp) {
@@ -157,6 +174,40 @@
                     }
                 }
                 break;
+            /***2020-07-20 鏂板鏂伴璁惧**/
+            case Configuration.FRESH_AIR_STATE_BACK_COMMAND:
+                handleFreshAirStateData(getDatas);
+                break;
+            case Configuration.FRESH_AIR_CTRL_BACK_COMMAND:
+                handleFreshAirCtrlBackData(getDatas);
+                break;
+            /***2020-07-20 閲戣寕鏂伴璁惧**/
+            case Configuration.FRESH_AIR_JINMAO_STATE_BACK_COMMAND:
+                handleFreshAirJINMAOStateData(getDatas);
+                break;
+            case Configuration.FRESH_AIR_JINMAO_CTRL_BACK_COMMAND:
+                handleFreshAirJINMAOCtrlBackData(getDatas);
+                break;
+            /***2020-07-20 鍦扮儹妯″潡**/
+            case Configuration.GEOTHERMAL_MODULE_STATE_BACK_COMMAND:
+                handleGeothermalStateData(getDatas);
+                break;
+            case Configuration.GEOTHERMAL_MODULE_CTRL_BACK_COMMAND:
+                handleGeothermalCtrlData(getDatas);
+                break;
+            /***2023-08-22 闂ㄩ攣妯″潡**/
+            case Configuration.DOOR_MACHINE_MODULE_STATE_BACK_COMMAND:
+                handleDoorMachineStateData(getDatas);
+                break;
+            case Configuration.DOOR_MACHINE_MODULE_CTRL_FRIST_BACK_COMMAND:
+                handleDoorMachineCtrlFristBackData(getDatas);
+                break;
+            case Configuration.DOOR_MACHINE_MODULE_CTRL_BACK_COMMAND:
+                handleDoorMachineCtrlBackData(getDatas);
+                break;
+            case Configuration.DOOR_MACHINE_BROADCAST_STATE_BACK_COMMAND:
+                handleDoorMachineBroadcastStateData(getDatas);
+                break;
             /***2020-04-01 鏂板閫氱敤寮�鍏�**/
             case Configuration.COMMON_SWITCH_CTRL_BACK_COMMAND:
                 handleCommonSwitchCtrlData(getDatas);
@@ -171,8 +222,12 @@
             case Configuration.LOGIC_CTRL_BACK_COMMAND:
                 handleCtrlData(getDatas);
                 break;
+            case Configuration.LIGHT_RGB_CTRL_BACK_COMMAND:
+                handleColourLightStateData(getDatas);
+                break;
             case Configuration.AIR_HVAC_CTRL_BACK_COMMAND:
                 handleHVACCtrlData(getDatas);
+                handleTechSysCtrlData(getDatas);//2023-08-21
                 break;
             case Configuration.SECURITY_ARMING_CTRL_BACK_COMMAND://20190729鏂板
             case Configuration.SECURITY_ALARM_CTRL_BACK_COMMAND://鎶ヨ璁剧疆鍙嶉
@@ -192,8 +247,6 @@
                 handleAirStateData(getDatas);
                 break;
             case Configuration.SENSOR_STATE_BACK_COMMAND:
-                handleSensorBroadcastStateData(getDatas);
-                break;
             case Configuration.SENSOR_BROADCAST_STATE_BACK_COMMAND:
                 handleSensorBroadcastStateData(getDatas);
                 break;
@@ -201,11 +254,15 @@
             case Configuration.DRY_CONTACT_BROADCAST_STATE_COMMAND:
                 handleDryContactBroadcastStateData(getDatas);
                 break;
-
             case Configuration.LIGHT_STATE_BACK_COMMAND:
                 handleLightStateData(getDatas);
+                break;
+            case Configuration.LIGHT_RGB_STATE_BACK_COMMAND:
+                handleColourLightStateData(getDatas);//2023-08-22
+                break;
             case Configuration.CURTAIN_STATE_BACK_COMMAND:
                 handleCurtainStateData(getDatas);
+                break;
             case Configuration.CURTAIN_STATE_BROADCAST_BACK_COMMAND:
                 handleCurtainBroadcastStateData(getDatas);
                 break;
@@ -214,7 +271,9 @@
                 break;
             case Configuration.AIR_HVAC_STATE_BACK_COMMAND:
 //                handleRcuAirCastData(getDatas);
+                HDLLog.I("鍙戦�佺涓�娆″灞呮悳绱�");
                 handleHVACStateData(getDatas);//2019-06-27
+                handleTechSysStateData(getDatas);//2023-08-21
                 break;
             case Configuration.LOGIC_STATE_BACK_COMMAND:
 //                handleRcuAirCastData(getDatas);
@@ -451,6 +510,40 @@
 
     }
 
+    /**
+     * 澶勭悊CCT OR RGB鐏厜杩斿洖
+     * 2023-8-22
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
+                        AppliancesInfo lightInfo = infos.get(j);
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[2] & 0xFF);
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(getDatas.addBytes[2] & 0xFF);
+                        LightCtrlBackInfo info = new LightCtrlBackInfo();
+                        info.setParentRemarks(lightInfo.getParentRemarks());
+                        info.setAppliancesInfo(lightInfo);
+                        info.setRemarks(lightInfo.getRemarks());
+                        info.setChannelNum(getDatas.addBytes[0] & 0xFF);
+                        info.setBrightness(getDatas.addBytes[1] & 0xFF);
+                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                        EventBus.getDefault().post(new LightFeedBackEvent(info, true));
+                        break outter;
+                    }
+
+                }
+            }
+        }
+    }
+
 
     /**
      * 澶勭悊璁惧鎺у埗鏁版嵁
@@ -464,62 +557,6 @@
 
                 break;
             case Configuration.CURTAIN_CTRL_BACK_COMMAND:
-//                if (TextUtils.isEmpty(HandleSearch.rcuIp)){
-//
-//                }else{
-//                    AppliancesInfo curtainInfo = new AppliancesInfo();
-//                    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.CURTAIN_BIG_TYPE
-//                                        && infos.get(j).getChannelNum() == (getDatas.addBytes[1] & 0xFF)) {
-//                                    for (int k = 0; k < rcuCurtainList.size(); k++) {
-//                                        if (devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum() == rcuCurtainList.get(k).getChanelNum()
-//                                                && devicesDataList.get(i).getAppliancesInfoList().get(j).getLittleType() == rcuCurtainList.get(k).getLittleType()
-//                                                ) {
-//                                            int state;
-//                                            switch (getDatas.addBytes[2] & 0xFF) {
-//                                                case 0:
-//                                                    state = CurtainCtrlParser.curtainPause;
-//                                                    break;
-//                                                case 1:
-//                                                    state = CurtainCtrlParser.curtainOn;
-//                                                    break;
-//                                                case 2:
-//                                                    state = CurtainCtrlParser.curtainOff;
-//                                                    break;
-//                                                default:
-//                                                    state = 0;
-//                                                    break;
-//                                            }
-//                                            rcuCurtainList.get(k).setCurState(state);
-//                                            devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[2] & 0xFF);
-////                                        HDLLog.I("鎺у埗 rcuCurtainList鍥炶矾鍙凤細"+rcuCurtainList.get(k).getChanelNum()
-////                                        + " state = "+rcuCurtainList.get(k).getCurState()
-////                                        );
-//                                        }
-//                                    }
-//
-//                                    curtainInfo = infos.get(j);
-//                                }
-//
-//                            }
-//                        }
-//                    }
-//                    CurtainCtrlBackInfo curtainCtrlBackInfo = new CurtainCtrlBackInfo();
-//                    curtainCtrlBackInfo.setRemarks(curtainInfo.getRemarks());
-//                    curtainCtrlBackInfo.setParentRemarks(curtainInfo.getParentRemarks());
-//                    curtainCtrlBackInfo.setAppliancesInfo(curtainInfo);
-//                    curtainCtrlBackInfo.setNum(getDatas.addBytes[1] & 0xFF);
-//                    curtainCtrlBackInfo.setState(getDatas.addBytes[2] & 0xFF);
-//                    isCurtainCtrlSuccess = true;
-//                    EventBus.getDefault().post(new CurtainFeedBackEvent(curtainCtrlBackInfo, true));
-//                }
-
-
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
                     if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
@@ -707,193 +744,7 @@
                         }
                     }
                 }
-
-
                 break;
-//            case Configuration.AIR_HVAC_CTRL_BACK_COMMAND:    //2019-8-6 灞忚斀
-//                outter:
-//                for (int devIndex = 0, len = devicesDataList.size(); devIndex < len; devIndex++) {
-//                    if (devicesDataList.get(devIndex).getSourceSubnetID() == getDatas.sourceSubnetID
-//                            && devicesDataList.get(devIndex).getSourceDeviceID() == getDatas.sourceDeviceID
-//                    ) {
-//                        List<AppliancesInfo> infos = devicesDataList.get(devIndex).getAppliancesInfoList();
-//                        for (int appIndex = 0, len2 = infos.size(); appIndex < len2; appIndex++) {
-//                            if ((infos.get(appIndex).getDeviceType() == HDLApConfig.TYPE_AC_HVAC
-//                                    || infos.get(appIndex).getDeviceType() == HDLApConfig.TYPE_AC_COOLMASTER
-//                                    || infos.get(appIndex).getDeviceType() == HDLApConfig.TYPE_AC_INFRARED)
-//                                    && infos.get(appIndex).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
-////                                String airbytes = "193b 闄勫姞鏁版嵁锛�";
-////                                for (int i = 0; i < getDatas.addBytes.length; i++) {
-////                                    airbytes += (getDatas.addBytes[i] & 0xff) + ",";
-////                                }
-////                                HDLLog.I( airbytes);
-//                                AppliancesInfo airInfo = infos.get(appIndex);
-//                                int indexI = devIndex;
-//                                int indexJ = appIndex;
-//
-//                                final byte[] oldAirInfo;
-////                                HDLLog.I("KKKKKKDD"+(getDatas.addBytes[0] & 0xFF));
-//                                switch (getDatas.addBytes[0] & 0xFF) {
-//                                    case 1:
-//                                        oldAirInfo = air1Info;
-//                                        break;
-//                                    case 2:
-//                                        oldAirInfo = air2Info;
-//                                        break;
-//                                    case 3:
-//                                        oldAirInfo = air3Info;
-//                                        break;
-//                                    case 4:
-//                                        oldAirInfo = air4Info;
-//                                        break;
-//                                    default:
-//                                        oldAirInfo = new byte[1];
-//                                        break;
-//                                }
-//                                byte[] newAirInfo = getDatas.addBytes;
-//                                byte[] curAirInfo = new byte[]{0};
-//                                boolean isModeChange = false;
-//                                if (oldAirInfo == null || oldAirInfo.length == 0) {
-//                                    return;
-//                                }
-//                                for (int oldAirInedx = 0; oldAirInedx < oldAirInfo.length; oldAirInedx++) {
-//                                    if (oldAirInedx == 0) {
-//                                        setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                        if (oldAirInfo[0] != newAirInfo[8]) {//2019-8-2 鍘绘帀鐩稿悓寮�鍏崇姸鎬佸垽鏂�,瑙e喅寮�鐘舵�佷笅,璋冪敤寮�鍛戒护鐘舵�佷笅,涓嶅仠閲嶅彂闂
-//                                            oldAirInfo[0] = newAirInfo[8];
-//                                            curAirInfo = new byte[]{AirCtrlParser.airSwich, newAirInfo[8]};
-//                                            if (curAirInfo.length > 1) {
-//                                                devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(oldAirInfo);
-//                                                airInfo.setArrCurState(oldAirInfo);
-//                                                AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
-//                                                airCtrlBackInfo.setAppliancesInfo(airInfo);
-//                                                airCtrlBackInfo.setCurState(curAirInfo);
-////                                                isACCtrlSuccess = true;
-////                                                setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                                EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, true));
-//
-//                                            }
-//
-//                                        }
-//                                    } else if (oldAirInedx == 1) {
-////                        int mode = ((newAirInfo[4] & 0xf0) >> 4);
-//                                        int mode = newAirInfo[9] & 0xff;
-//                                        setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                        if (oldAirInfo[1] != (byte) mode) {
-//                                            isModeChange = true;
-//                                            oldAirInfo[1] = (byte) mode;
-//                                            curAirInfo = new byte[]{AirCtrlParser.airMode, (byte) mode};
-//                                            devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(oldAirInfo);
-//                                            airInfo.setArrCurState(oldAirInfo);
-//                                            AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
-//                                            airCtrlBackInfo.setAppliancesInfo(airInfo);
-//                                            airCtrlBackInfo.setCurState(curAirInfo);
-////                                            isACCtrlSuccess = true;
-////                                            setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                            EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, true));
-//
-//                                        }
-//                                    } else if (oldAirInedx == 2) {
-//                                        int mode = newAirInfo[9] & 0xff;
-//                                        byte newAirTem = newAirInfo[11];
-//                                        setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//
-//                                        if (oldAirInfo[2] != newAirTem) {
-//                                            oldAirInfo[2] = newAirTem;
-//                                            switch (mode) {
-//                                                case 0:
-//                                                    curAirInfo = new byte[]{AirCtrlParser.refTem, newAirTem};
-//                                                    break;
-//                                                case 1:
-//                                                    curAirInfo = new byte[]{AirCtrlParser.heatTem, newAirTem};
-//                                                    break;
-//                                                case 3:
-//                                                    curAirInfo = new byte[]{AirCtrlParser.autoTem, newAirTem};
-//                                                    break;
-//                                                case 4:
-//                                                    curAirInfo = new byte[]{AirCtrlParser.dehumTem, newAirTem};
-//                                                    break;
-//                                            }
-//                                            if (curAirInfo.length > 1) {
-//                                                devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(oldAirInfo);
-//                                                airInfo.setArrCurState(oldAirInfo);
-//                                                AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
-//                                                airCtrlBackInfo.setAppliancesInfo(airInfo);
-//                                                airCtrlBackInfo.setCurState(curAirInfo);
-////                                                isACCtrlSuccess = true;
-////                                                setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                                EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, true));
-//
-//                                            }
-//                                        }
-//                                    } else if (oldAirInedx == 3) {
-////                        int speed = (newAirInfo[4] & 0x0f);//鑾峰彇浣�4浣�
-//                                        int speed = newAirInfo[10];
-//                                        setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                        if (oldAirInfo[3] != (byte) speed) {
-//                                            oldAirInfo[3] = (byte) speed;
-//                                            curAirInfo = new byte[]{AirCtrlParser.airSpeed, (byte) speed};
-//                                            devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(oldAirInfo);
-//                                            airInfo.setArrCurState(oldAirInfo);
-//                                            AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
-//                                            airCtrlBackInfo.setAppliancesInfo(airInfo);
-//                                            airCtrlBackInfo.setCurState(curAirInfo);
-////                                            isACCtrlSuccess = true;
-////                                            setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-//                                            EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, true));
-//
-//                                        }
-//                                    }
-//                                }
-//
-//                                switch (getDatas.addBytes[0] & 0xFF) {
-//                                    case 1:
-//                                        air1Info = oldAirInfo;
-//                                        break;
-//                                    case 2:
-//                                        air2Info = oldAirInfo;
-//                                        break;
-//                                    case 3:
-//                                        air3Info = oldAirInfo;
-//                                        break;
-//                                    case 4:
-//                                        air4Info = oldAirInfo;
-//                                        break;
-//                                }
-//
-//
-////                                if (curAirInfo.length > 1) {
-//////                    if (isModeChange) {
-//////                        isACCtrlSuccess = true;
-//////                        getAirInfo(hvacInfo);
-//////                    } else {f
-//////                        airInfo.setArrCurState(oldAirInfo);
-//////                        AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
-//////                        airCtrlBackInfo.setAppliancesInfo(airInfo);
-//////                        airCtrlBackInfo.setCurState(curAirInfo);
-//////                        isACCtrlSuccess = true;
-//////                        EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, true));
-//////                    }
-////
-////                                    devicesDataList.get(indexI).getAppliancesInfoList().get(indexJ).setArrCurState(oldAirInfo);
-////                                    airInfo.setArrCurState(oldAirInfo);
-////                                    AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
-////                                    airCtrlBackInfo.setAppliancesInfo(airInfo);
-////                                    airCtrlBackInfo.setCurState(curAirInfo);
-//////                                    isACCtrlSuccess = true;
-////                                    setDeviceCtrlSuccessStateWithInfo(infos.get(appIndex), true);
-////                                    EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, true));
-////
-////                                }
-//
-//
-//                                break outter;
-//                            }
-//                        }
-//                    }
-//                }
-//
-//                break;
             case Configuration.LOGIC_CTRL_BACK_COMMAND:
                 outter:
                 for (int i = 0, len = devicesDataList.size(); i < len; i++) {
@@ -1038,8 +889,6 @@
                                     setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
                                     EventBus.getDefault().post(new AirHVACFeedBackEvent(info, true));
                                     break outter;
-                                } else {
-                                    HDLLog.E("鎺у埗HVAC鐘舵�佸弽棣堟暟鎹紓甯�");
                                 }
                                 break outter;
                             }
@@ -1049,6 +898,43 @@
                 break;
         }
 
+    }
+
+
+    /**
+     * 澶勭悊绉戞妧绯荤粺 鎺у埗鍥炶皟
+     * 2023-8-21
+     *
+     * @param getDatas
+     */
+    private static void handleTechSysCtrlData(UdpDataBean getDatas) {
+        switch (getDatas.command) {
+            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) {
+                        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).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
+
+                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                                    AppliancesInfo mTechSysAirInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                                    AirTechSysBackInfo info = new AirTechSysBackInfo(mTechSysAirInfo);
+                                    setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                                    EventBus.getDefault().post(new AirTechSysFeedBackEvent(info, true));
+                                    break outter;
+                                }
+                            }
+                        }
+                        break outter;
+                    }
+                }
+                break;
+        }
     }
 
 
@@ -1237,19 +1123,6 @@
 
                         String remarkStr = HDLStringUtils.byte2String(remarkByte);
                         HDLLog.I("remarkStr鍥炶矾锛�" + remarkStr);
-
-//                        byte[] remark = new byte[20];
-//                        //纭欢鐨勫瓧鑺傛祦鍗忚鎻愪緵鏈夎锛屾敹鍒版煇纭欢鎻愪緵澶囨敞涓嶈冻20闀垮害锛岃В鍐宠繖闂鐨勬潈瀹滀箣璁�
-//                        int length;
-//                        if (getDatas.addBytes.length < 20) {
-//                            length = getDatas.addBytes.length;
-//                        } else {
-//                            length = remark.length;
-//                        }
-//                        System.arraycopy(getDatas.addBytes, 3, remark, 0, length);
-
-//                        String remarkStr = HDLStringUtils.byte2String(remark);
-//                        HDLLog.I("remarkStr鍥炶矾锛�" + remarkStr);
                         devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setRemarks(remarkStr);
 
                         switch (infos.get(appPos).getBigType()) {
@@ -1319,30 +1192,9 @@
                                         devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState(curtainState);
                                         break;
                                     case 2:
-//                                        if (!TextUtils.isEmpty(HandleSearch.rcuIp)) {
-//                                            RcuCurtain rcuCurtain = new RcuCurtain();
-//                                            rcuCurtain.setChanelNum(getDatas.addBytes[2] & 0xFF);
-//                                            rcuCurtain.setLittleType(2);
-//                                            int state = -1;
-//                                            switch (getDatas.addBytes[getDatas.addBytes.length - 1] & 0xFF) {
-//                                                case 0:
-//                                                    state = CurtainCtrlParser.curtainPause;
-//                                                    break;
-//                                                case 1:
-//                                                    state = CurtainCtrlParser.curtainOn;
-//                                                    break;
-//                                                case 2:
-//                                                    state = CurtainCtrlParser.curtainOff;
-//                                                    break;
-//                                            }
-//                                            rcuCurtain.setCurState(state);
-//                                            rcuCurtainList.add(rcuCurtain);
-//                                        }
-
                                         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;
 
@@ -1354,29 +1206,6 @@
                                             hvacBytes[i - 23] = getDatas.addBytes[i];
                                         }
                                         devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setArrCurState(hvacBytes);
-//                                        switch (devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).getChannelNum()) {
-//                                            case 1:
-//                                                if (air1Info == null) {
-//                                                    air1Info = hvacBytes;
-//                                                }
-//                                                break;
-//                                            case 2:
-//                                                if (air2Info == null) {
-//                                                    air2Info = hvacBytes;
-//                                                }
-//                                                break;
-//                                            case 3:
-//                                                if (air3Info == null) {
-//                                                    air3Info = hvacBytes;
-//                                                }
-//                                                break;
-//                                            case 4:
-//                                                if (air4Info == null) {
-//                                                    air4Info = hvacBytes;
-//                                                }
-//                                                break;
-//
-//                                        }
                                         break;
                                     case 3:
                                         byte[] newBytes = new byte[getDatas.addBytes.length - 24 + 1];
@@ -1387,24 +1216,24 @@
                                         break;
                                 }
                                 break;
-                            case Configuration.SENSOR_BIG_TYPE://2019-07-03 灞忚斀
-//                                String aa = "浼犳劅鍣ㄥ娉細";
-//                                for (int i = 0; i < getDatas.addBytes.length; i++) {
-//                                    aa += (getDatas.addBytes[i] & 0xff) + ",";
-//                                }
-//                                HDLLog.I( aa);
-
+                            case Configuration.SENSOR_BIG_TYPE:
                                 int curState;
-                                if (getDatas.addBytes.length >= 26) {//2019-11-7 鐗规畩澶勭悊锛屼慨鏀瑰洖璺彿
+                                if (getDatas.addBytes.length >= 26) {//2023-11-14 鐗规畩澶勭悊锛屼慨鏀瑰洖璺彿涓虹墿鐞嗗洖璺紙鍥犱负ZigBee杞琤us杞崲鍣ㄧ敤鐨勯兘鏄墿鐞嗗洖璺紝灏嗛�昏緫鍥炶矾璁句负鐗╃悊鍥炶矾澶勭悊锛�
                                     curState = (int) (getDatas.addBytes[24] & 0xff);
-                                    devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setChannelNum(getDatas.addBytes[25] & 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;
@@ -1860,198 +1689,105 @@
 
     }
 
-//    /**
-//     * 澶勭悊浼犳劅鍣� 骞挎挱鏁版嵁
-//     *
-//     * @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
-//            ) {
-//                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
-//                for (int j = 0, len2 = infos.size(); j < len2; j++) {
-//                    switch (devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType()) {
-//                        case Configuration.SENSOR_BIG_TYPE://2019-07-03 灞忚斀
-//                            isGetDeviceStateSuccess = true;
-//                            AppliancesInfo sensorInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
-//                            float value = HDLUtlis.byte2Float(Arrays.copyOfRange(getDatas.addBytes, 5, 8));
-//                            devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(value);
-//                            devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState((int) value);
-//
-//                            sensorInfo.setCurState(value);
-//
-//
-//                            String unite = "";
-//                            switch (sensorInfo.getDeviceType()) {
-//                                case HDLApConfig.TYPE_SENSOR_DRY_CONTACT:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_MOVEMENT_DETECTOR:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_TEMP:
-//                                    if ((getDatas.addBytes[4] & 0xff) == 0) {
-//                                        unite = "掳C";
-//                                    } else {
-//                                        unite = "掳F";
-//                                    }
-//
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_HUMIDITY:
-//                                    unite = "%";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_ILLUMINACE:
-//                                    unite = "LUX";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_VOC:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_PM_2_POINT_5:
-//                                    switch (getDatas.addBytes[4] & 0xff) {
-//                                        case 0:
-//                                            unite = "mg/m3";
-//                                            break;
-//                                        case 1:
-//                                            unite = "ppm";
-//                                            break;
-//                                        case 2:
-//                                            unite = "渭m";
-//                                            break;
-//                                        default:
-//                                            unite = "";
-//                                            break;
-//                                    }
-//
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_C02:
-//                                    switch (getDatas.addBytes[4] & 0xff) {
-//                                        case 0:
-//                                            unite = "mg/m3";
-//                                            break;
-//                                        case 1:
-//                                            unite = "ppm";
-//                                            break;
-//                                        default:
-//                                            unite = "";
-//                                            break;
-//                                    }
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_LPG:
-//                                    unite = "ppm";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_CO_H2:
-//                                    unite = "ppm";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_CH4:
-//                                    unite = "ppm";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_SMOG:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_WIND_SPEED:
-//                                    unite = "m/s";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_WIND_PRESSURE:
-//                                    unite = "Pa";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_LIQUID_FLOW:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_LIQUID_PRESSURE:
-//                                    unite = "Pa";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_LIQUID_DEPTH:
-//                                    unite = "mm";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_RAIN_FALL:
-//                                    switch (getDatas.addBytes[4] & 0xff) {
-//                                        case 0:
-//                                            unite = "鏃犻洦";
-//                                            break;
-//                                        case 1:
-//                                            unite = "灏忛洦";
-//                                            break;
-//                                        case 2:
-//                                            unite = "澶ч洦";
-//                                            break;
-//                                        default:
-//                                            unite = "";
-//                                            break;
-//                                    }
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_WEIGHT:
-//                                    unite = "KG";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_HEIGHT_LENGTH:
-//                                    unite = "mm";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_OBJECT_SPEED:
-//                                    unite = "m/s";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_SHAKE:
-//                                    unite = "mm";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_VOLTAGE:
-//                                    switch (getDatas.addBytes[4] & 0xff) {
-//                                        case 0:
-//                                            unite = "V";
-//                                            break;
-//                                        case 1:
-//                                            unite = "渭V";
-//                                            break;
-//                                        default:
-//                                            unite = "";
-//                                            break;
-//                                    }
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_ELECTRICITY:
-//                                    switch (getDatas.addBytes[4] & 0xff) {
-//                                        case 0:
-//                                            unite = "A";
-//                                            break;
-//                                        case 1:
-//                                            unite = "渭A";
-//                                            break;
-//                                        default:
-//                                            unite = "";
-//                                            break;
-//                                    }
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_POWER:
-//                                    unite = "W";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_FLOODING:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_DOOR_MAGNET:
-//                                    unite = "";
-//                                    break;
-//                                case HDLApConfig.TYPE_SENSOR_EMERGENCY_BUTTON:
-//                                    unite = "";
-//                                    break;
-//                                default:
-//                                    unite = "鏈煡鍗曚綅";
-//                                    break;
-//                            }
-//
-//
-////                            EventBus.getDefault().post(new DeviceStateEvent(sensorInfo, true));
-//                            HDLLog.I("鍙戦�佷紶鎰熷櫒閫氱煡鏇存柊");
-//                            EventBus.getDefault().post(new SensorStateBackInfo(sensorInfo, true, unite));
-//                            break;
-//                        default:
-//                            HDLLog.I("handle state 娌℃湁鎵惧埌鍖归厤绫诲瀷");
-//                            break;
-//                    }
-//
-//                }
-//                break outter;
-//            }
-//        }
-//    }
+    /**
+     * panlili
+     * 澶勭悊闂ㄩ攣鐘舵�佸拰鎶ヨ 骞挎挱鏁版嵁
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                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) {
+                        String type = "";
+                        /*寮�閿�:
+                        0x*1锛氭寚绾瑰紑閿�
+                        0x*2锛氬瘑鐮佸紑閿�
+                        0x*3锛氭劅搴斿崱寮�閿�
+                        0x*4锛氭満姊伴挜鍖欏紑閿�
+                        0x*5锛氳繙绋嬫巿鏉冨紑閿�
+                        0x*6锛氫复鏃跺瘑鐮佸紑閿�
+                        0x*7-0x*f锛氾紙棰勭暀锛�
+
+                        鎶ヨ:
+                        0x1*锛氬瘑鐮侀獙璇侀敊璇姤璀︼紙瀵嗙爜杩炵画3娆℃閿欒锛�
+                        0x2*锛氶棬鏈攣濂芥姤璀︼紙闂ㄩ攣鏈叧濂斤紝 褰撻棬閿佸ソ鏃朵笂鎶ヨВ闄ゆ姤璀︼級
+                        0x3*锛氬姭鎸佹姤璀︼紙杈撳叆闃插姭鎸佸瘑鐮佹垨鑰呴槻鍔寔鎸囩汗寮�閿佹椂鎶ヨ锛�
+                        0x4*锛氶槻鎾姤璀︼紙闂ㄩ攣琚挰寮�鏃舵姤璀︼級
+                        0x5*锛氱數閲忎笉瓒虫姤璀︼紙鐢甸噺涓嶈冻鏃舵姤璀︼級
+                        0x6*锛氭寚绾归獙璇侀敊璇姤璀︼紙寮�闂ㄩ獙璇佽緭鍏ユ寚绾硅繛缁敊璇鏁拌揪鍒伴棬閿佽瀹�3娆℃椂鎶ヨ锛�
+                        0x7*锛氬崱鐗囬獙璇侀敊璇姤璀︼紙寮�闂ㄩ獙璇佽緭鍏ュ崱鐗囪繛缁敊璇鏁拌揪鍒伴棬閿佽瀹�3娆℃姤璀︼級
+                        0x8*锛氶棬閿佹仮澶嶅嚭鍘傝缃�
+                        0x9*-0xf*锛氾紙棰勭暀锛�*/
+                        switch (getDatas.addBytes[2] & 0xFF) {
+                            case 1:
+                                type = "鎸囩汗寮�閿�";
+                                break;
+                            case 2:
+                                type = "瀵嗙爜寮�閿�";
+                                break;
+                            case 3:
+                                type = "鎰熷簲鍗″紑閿�";
+                                break;
+                            case 4:
+                                type = "鏈烘閽ュ寵寮�閿�";
+                                break;
+                            case 5:
+                                type = "杩滅▼鎺堟潈寮�閿�";
+                                break;
+                            case 6:
+                                type = "涓存椂瀵嗙爜寮�閿�";
+                                break;
+                            case 10:
+                                type = "瀵嗙爜楠岃瘉閿欒鎶ヨ";
+                                break;
+                            case 20:
+                                type = "闂ㄦ湭閿佸ソ鎶ヨ";
+                                break;
+                            case 30:
+                                type = "鍔寔鎶ヨ";
+                                break;
+                            case 40:
+                                type = "闃叉挰鎶ヨ";
+                                break;
+                            case 50:
+                                type = "鐢甸噺涓嶈冻鎶ヨ";
+                                break;
+                            case 60:
+                                type = "鎸囩汗楠岃瘉閿欒鎶ヨ";
+                                break;
+                            case 70:
+                                type = "鍗$墖楠岃瘉閿欒鎶ヨ";
+                                break;
+                            case 80:
+                                type = "闂ㄩ攣鎭㈠鍑哄巶璁剧疆";
+                                break;
+                            default:
+                                break;
+                        }
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[j] & 0xFF);
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(getDatas.addBytes[j] & 0xFF);
+
+                        AppliancesInfo doorMachineInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        int state = getDatas.addBytes[2] & 0xFF;
+                        doorMachineInfo.setCurState(state);
+
+                        HDLLog.I("鍙戦�侀棬閿佺姸鎬佸拰鎶ヨ閫氱煡");
+                        EventBus.getDefault().post(new DoorMachineWaringBackInfo(doorMachineInfo, true, type));
+                    } else {
+                        HDLLog.I("handleDoorMachineBroadcastStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
 
 
     /**
@@ -2068,7 +1804,7 @@
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
-                    if (infos.get(j).getBigType() == Configuration.LIGTH_BIG_TYPE) { //2019-07-26鍥犱负鏌ョ伅鍏夌姸鎬佹槸鏌ヨ鎵�浠ュ洖璺紝鎵�浠ヨ鎶婃墍鏈夊洖璺伅鍏夌姸鎬侀兘鎺ㄩ�佷竴娆�
+                    if (infos.get(j).getBigType() == Configuration.LIGTH_BIG_TYPE && (infos.get(j).getDeviceType() != HDLApConfig.TYPE_LIGHT_CCT && infos.get(j).getDeviceType() != HDLApConfig.TYPE_LIGHT_RGB && infos.get(j).getDeviceType() != HDLApConfig.TYPE_LIGHT_DALI && infos.get(j).getDeviceType() != HDLApConfig.TYPE_LIGHT_DMX)) { //2019-07-26鍥犱负鏌ョ伅鍏夌姸鎬佹槸鏌ヨ鎵�浠ュ洖璺紝鎵�浠ヨ鎶婃墍鏈夊洖璺伅鍏夌姸鎬侀兘鎺ㄩ�佷竴娆�
                         isGetDeviceStateSuccess = true;
                         devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(getDatas.addBytes[j + 1] & 0xFF);
                         devicesDataList.get(i).getAppliancesInfoList().get(j).setIntCurState(getDatas.addBytes[j + 1] & 0xFF);
@@ -2076,6 +1812,37 @@
 //                        HDLLog.I("HDLlightState" + devicesDataList.get(i).getAppliancesInfoList().get(j).toString());
                     } else {
                         HDLLog.I("handleLightStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊CCT OR RGB鐏厜妯″潡鍥炶皟
+     * 20230822鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.LIGTH_BIG_TYPE && (infos.get(j).getDeviceType() == HDLApConfig.TYPE_LIGHT_CCT || infos.get(j).getDeviceType() == HDLApConfig.TYPE_LIGHT_RGB || infos.get(j).getDeviceType() == HDLApConfig.TYPE_LIGHT_DALI || infos.get(j).getDeviceType() == HDLApConfig.TYPE_LIGHT_DMX)) {
+                        isGetDeviceStateSuccess = true;
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        AppliancesInfo appliancesInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        ColourLightCtrlBackInfo colourLightCtrlBackInfo = new ColourLightCtrlBackInfo(appliancesInfo);
+                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                        EventBus.getDefault().post(new ColourLightFeedBackEvent(colourLightCtrlBackInfo, true));
+
+                    } else {
+                        HDLLog.I("handleColourLightStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
                     }
                 }
                 break outter;
@@ -2393,6 +2160,37 @@
 
 
     /**
+     * 璇诲彇绉戞妧绯荤粺鐘舵�佸弽棣�
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                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).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-8-6
+
+                        isGetDeviceStateSuccess = true;
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
+                        break outter;
+                    } else {
+                        HDLLog.I("handleTechSysStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+
+    /**
      * 骞叉帴鐐瑰箍鎾姸鎬佸弽棣堝弽棣�
      * 20191105鏂板
      *
@@ -2407,7 +2205,7 @@
                 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)) {//2019-07-29
+                            && infos.get(j).getChannelNum() == ((getDatas.addBytes[1] & 0xFF) - 1)) {//2019-07-29
                         if (getDatas.addBytes.length >= 3) {
                             isGetDeviceStateSuccess = true;
                             int state = getDatas.addBytes[2] & 0xFF;
@@ -3153,4 +2951,316 @@
     }
 
 
+    /**
+     * 澶勭悊鏂伴璁惧鐘舵�佹暟鎹�
+     * 2020-07-20 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.FRESH_AIR_BIG_TYPE
+                            && infos.get(j).getDeviceType() == HDLApConfig.TYPE_FRESH_AIR
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-07-17
+
+                        isGetDeviceStateSuccess = true;
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
+                        break outter;
+                    } else {
+                        HDLLog.I("handleFreshAirStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊鏂伴鎺у埗鎴愬姛鐘舵�佹暟鎹�
+     * 2020-07-20 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.FRESH_AIR_BIG_TYPE
+                            && infos.get(j).getDeviceType() == HDLApConfig.TYPE_FRESH_AIR
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
+
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        AppliancesInfo mFreshAirInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        FreshAirBackInfo info = new FreshAirBackInfo(mFreshAirInfo);
+//                                isFreshAirCtrlSuccess = true;
+                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                        EventBus.getDefault().post(new FreshAirFeedBackEvent(info, true));
+                        break outter;
+                    }
+
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 澶勭悊閲戣寕鏂伴璁惧鐘舵�佹暟鎹�
+     * 2020-07-20 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.FRESH_AIR_BIG_TYPE
+                            && infos.get(j).getDeviceType() == HDLApConfig.TYPE_FRESH_AIR_JINMAO
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-07-17
+
+                        isGetDeviceStateSuccess = true;
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
+                        break outter;
+                    } else {
+                        HDLLog.I("handleFreshAirStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊閲戣寕鏂伴鎺у埗鎴愬姛鐘舵�佹暟鎹�
+     * 2020-07-20 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.FRESH_AIR_BIG_TYPE
+                            && infos.get(j).getDeviceType() == HDLApConfig.TYPE_FRESH_AIR_JINMAO
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
+
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        AppliancesInfo mFreshAirInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        FreshAirJinMaoBackInfo info = new FreshAirJinMaoBackInfo(mFreshAirInfo);
+                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                        EventBus.getDefault().post(new FreshAirJinMaoFeedBackEvent(info, true));
+                        break outter;
+                    }
+
+                }
+            }
+        }
+
+
+    }
+
+    /**
+     * 澶勭悊鍦扮儹璁惧鐘舵�佹暟鎹�
+     * 2020-07-20 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    if (infos.get(j).getBigType() == Configuration.GEOTHERMAL_BIG_TYPE
+                            && (infos.get(j).getDeviceType() == HDLApConfig.TYPE_GEOTHERMAL_MODULE || infos.get(j).getDeviceType() == HDLApConfig.TYPE_GEOTHERMAL_JINMAO)
+                            && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {//2019-07-17
+                        if (getDatas.addBytes.length >= 10) {
+                            byte[] getBytes = devicesDataList.get(i).getAppliancesInfoList().get(j).getArrCurState();
+                            if (getBytes == null || getBytes.length < 10) {
+                                getBytes = new byte[10];
+                            }
+                            System.arraycopy(getDatas.addBytes, 0, getBytes, 0, 10);//20190710鏌ヨ鍦扮儹鐘舵�佸弽棣堬紝鍙彇鍓�10浣嶆暟鎹�
+                            devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getBytes);
+                            isGetDeviceStateSuccess = true;
+                            EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
+                        } else {
+                            HDLLog.E("鍦扮儹鐘舵�佸弽棣堟暟鎹紓甯�");
+                        }
+
+                        break outter;
+                    } else {
+                        HDLLog.I("handleFreshAirStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊鍦扮儹璁惧鎺у埗鏁版嵁
+     * 2020-07-20
+     *
+     * @param getDatas
+     */
+    private static void handleGeothermalCtrlData(UdpDataBean getDatas) {
+        switch (getDatas.command) {
+            //2019-07-09 鍦扮儹妯″潡
+            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
+                    ) {
+
+                        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.GEOTHERMAL_BIG_TYPE
+                                        && (infos.get(j).getDeviceType() == HDLApConfig.TYPE_GEOTHERMAL_MODULE || infos.get(j).getDeviceType() == HDLApConfig.TYPE_GEOTHERMAL_JINMAO)
+                                        && infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
+                                    if (getDatas.addBytes.length >= 8) {
+                                        byte[] getBytes = devicesDataList.get(i).getAppliancesInfoList().get(j).getArrCurState();
+                                        if (getBytes == null || getBytes.length < 10) {
+                                            getBytes = new byte[10];
+                                        }
+                                        System.arraycopy(getDatas.addBytes, 0, getBytes, 0, 8);//鎺у埗鍦扮儹鐘舵�佸弽棣堬紝鍙彇鍓�8浣嶆暟鎹�
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getBytes);
+                                        AppliancesInfo mInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+
+                                        GeothermalBackInfo info = new GeothermalBackInfo(mInfo, true);
+//                                        isGeothermalCtrlSuccess = true;
+                                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                                        EventBus.getDefault().post(new GeothermalFeedBackEvent(info, EventCode.SUCCESS));
+                                    } else {
+
+                                        HDLLog.E("鎺у埗鍦扮儹鐘舵�佸弽棣堟暟鎹紓甯�");
+                                    }
+                                    break outter;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                break;
+        }
+    }
+
+
+    /**
+     * 澶勭悊闂ㄩ攣璁惧鐘舵�佹暟鎹�
+     * 2023-08-22 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                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
+
+                        isGetDeviceStateSuccess = true;
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
+                        break outter;
+                    } else {
+                        HDLLog.I("handleDoorMachineStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                    }
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊闂ㄩ攣杩滅▼寮�閿佽繛鎺ユ帶鍒舵垚鍔熺姸鎬佹暟鎹�
+     * 2023-08-22 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                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)) {
+
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        AppliancesInfo mDoorMachineInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        DoorMachineFristBackInfo info = new DoorMachineFristBackInfo(mDoorMachineInfo);
+                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                        EventBus.getDefault().post(new DoorMachineFeedFristBackEvent(info, true));
+                        break outter;
+                    }
+
+                }
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊闂ㄩ攣杩滅▼寮�閿佹帶鍒舵垚鍔熺姸鎬佹暟鎹�
+     * 2023-08-22 鏂板
+     *
+     * @param getDatas
+     */
+    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
+            ) {
+                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)) {
+
+                        devicesDataList.get(i).getAppliancesInfoList().get(j).setArrCurState(getDatas.addBytes);
+                        AppliancesInfo appliancesInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+                        DoorMachineBackInfo doorMachineBackInfo = new DoorMachineBackInfo(appliancesInfo);
+                        setDeviceCtrlSuccessStateWithInfo(infos.get(j), true);
+                        EventBus.getDefault().post(new DoorMachineFeedBackEvent(doorMachineBackInfo, true));
+                        break outter;
+                    }
+
+                }
+            }
+        }
+    }
+
 }

--
Gitblit v1.8.0