From 47675876dbc24ea2fa54a1f4090f1a998ed2e5cf Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期五, 06 八月 2021 16:18:11 +0800
Subject: [PATCH] 2021-08-06 1.配合海克传感器,调整处理模拟量传感器状态

---
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java |  115 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 98 insertions(+), 17 deletions(-)

diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java
index 8582c35..0888dc8 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java
@@ -181,6 +181,9 @@
             case Configuration.ReadRemark://2021-01-05 000E鎼滅储澶囨敞澶勭悊
                 handleReadRemarkBackData(getDatas);
                 break;
+            case Configuration.READ_MAC_COMMAND://2021-01-07 F003璇昏澶嘙ac
+                handleReadMacBackData(getDatas);
+                break;
 //          鎺у埗璁惧
             case Configuration.LIGHT_CTRL_BACK_COMMAND:
             case Configuration.CURTAIN_CTRL_BACK_COMMAND:
@@ -233,8 +236,13 @@
             case Configuration.LIGHT_STATE_BACK_COMMAND:
             case Configuration.CURTAIN_STATE_BACK_COMMAND:
             case Configuration.AIR_STATE_BACK_COMMAND:
-            case Configuration.SENSOR_STATE_BACK_COMMAND:
                 handleStateData(getDatas);
+                break;
+            case Configuration.SENSOR_STATE_BACK_COMMAND:
+                handleSensorAnalogStateData(getDatas, true);
+                break;
+            case Configuration.SENSOR_BROADCAST_COMMAND://浼犳劅鍣ㄦā鎷熼噺骞挎挱
+                handleSensorAnalogStateData(getDatas, false);
                 break;
             //鑾峰彇鏂伴璁惧鐘舵�� 20190709鏂板
             case Configuration.FRESH_AIR_STATE_BACK_COMMAND:
@@ -400,6 +408,7 @@
     /**
      * ReadRemark
      * 鎼滅储璁惧000E 鍥炲澶勭悊
+     *
      * @param getDatas
      */
     public static void handleReadRemarkBackData(UdpDataBean getDatas) {
@@ -412,6 +421,26 @@
                 addBytes,
                 getDatas.port, getDatas.ipAddress);
     }
+
+    /**
+     * READ MAC
+     * 璇诲彇MAC 鍥炲澶勭悊
+     *
+     * @param getDatas
+     */
+    public static void handleReadMacBackData(UdpDataBean getDatas) {
+        //Mac鍦板潃8涓猙yte
+        byte[] addBytes = new byte[8];
+        addBytes[0] = (byte) 200;
+        //鎶婄湡瀹炵殑MAC璧嬪�肩粰addBytes
+//        System.arraycopy(remarkByte, 0, addBytes, 0, Math.min(remarkByte.length, 20));
+        HDLCommand.cusSendCommand(Configuration.READ_MAC_BACK_COMMAND,
+                getDatas.sourceSubnetID,
+                getDatas.sourceDeviceID,
+                addBytes,
+                getDatas.port, getDatas.ipAddress);
+    }
+
 
     /**
      * 澶勭悊RCU鎼滅储鏁版嵁
@@ -2054,15 +2083,35 @@
 //                                    aa += (getDatas.addBytes[i] & 0xff) + ",";
 //                                }
 //                                HDLLog.info( aa);
-                                float curState;
-                                if (getDatas.addBytes.length >= 28) {
-                                    curState = DataConverseUtil.byte2Float(Arrays.copyOfRange(getDatas.addBytes, 24, 27));
 
+                                //浣跨敤骞茶妭鐐规寚浠ょ殑浼犳劅鍣�
+                                if (DeviceParser.getIfDryContactSensor(infos.get(appPos).getLittleType())) {
+                                    //骞茶妭鐐逛紶鎰熷櫒锛岃鐗规畩澶勭悊淇敼鍥炶矾鍙�
+                                    int curState;
+                                    if (getDatas.addBytes.length >= 26) {
+                                        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).setCurState(curState);
+                                    devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState((int) curState);
                                 } else {
-                                    curState = (float) (getDatas.addBytes[getDatas.addBytes.length - 1] & 0xff);
+                                    //鏍囧噯妯℃嫙閲忎紶鎰熷櫒
+                                    float curState;
+                                    if (getDatas.addBytes.length >= 28) {
+                                        curState = DataConverseUtil.byte2Float(Arrays.copyOfRange(getDatas.addBytes, 24, 27));
+
+                                    } else {
+                                        curState = (float) (getDatas.addBytes[getDatas.addBytes.length - 1] & 0xff);
+                                    }
+                                    devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(curState);
+                                    devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState((int) curState);
                                 }
-                                devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(curState);
-                                devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState((int) curState);
+
+
                                 break;
                             case Configuration.FRESH_AIR_BIG_TYPE://20190711鏂板
                                 switch (infos.get(appPos).getLittleType()) {
@@ -2248,8 +2297,40 @@
                             }
 
                             break;
-                        case Configuration.SENSOR_BIG_TYPE:
-                            isGetDeviceStateSuccess = true;
+
+                        default:
+                            HDLLog.info("handle state 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                            break;
+                    }
+
+                }
+                break outter;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊鍚勭浼犳劅鍣ㄦā鎷熼噺鐘舵�佹暟鎹�
+     * 2021-08-05
+     *
+     * @param getDatas
+     */
+    private static void handleSensorAnalogStateData(UdpDataBean getDatas, boolean isState) {
+        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 (devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType() == Configuration.SENSOR_BIG_TYPE) {
+                        //澶х被鏄�5 鍖归厤灏忕被浠ュ強鍥炶矾鍙�
+                        if (getDatas.addBytes[0] == Configuration.SENSOR_BIG_TYPE
+                                && getDatas.addBytes[1] == devicesDataList.get(i).getAppliancesInfoList().get(j).getLittleType()
+                                && getDatas.addBytes[2] == devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum()) {
+
+                            if (isState) {
+                                isGetDeviceStateSuccess = true;
+                            }
                             AppliancesInfo sensorInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
                             float value = DataConverseUtil.byte2Float(Arrays.copyOfRange(getDatas.addBytes, 5, 8));
                             devicesDataList.get(i).getAppliancesInfoList().get(j).setCurState(value);
@@ -2257,8 +2338,8 @@
 
                             sensorInfo.setCurState(value);
 
-
                             String unite = "";
+                            boolean ifNeedPost = true;
                             switch (sensorInfo.getDeviceType()) {
                                 case HDLApConfig.TYPE_SENSOR_DRY_CONTACT:
                                     unite = "";
@@ -2398,18 +2479,18 @@
                                     unite = "W";
                                     break;
                                 default:
+                                    ifNeedPost = false;
                                     unite = "鏈煡鍗曚綅";
                                     break;
                             }
 
+                            if (ifNeedPost) {
+                                HDLLog.info("鍙戦�佷紶鎰熷櫒閫氱煡鏇存柊");
+                                EventBus.getDefault().post(new SensorStateBackInfo(sensorInfo, true, unite));
+                            }
 
-//                            EventBus.getDefault().post(new DeviceStateEvent(sensorInfo, true));
-                            HDLLog.info("鍙戦�佷紶鎰熷櫒閫氱煡鏇存柊");
-                            EventBus.getDefault().post(new SensorStateBackInfo(sensorInfo, true, unite));
-                            break;
-                        default:
-                            HDLLog.info("handle state 娌℃湁鎵惧埌鍖归厤绫诲瀷");
-                            break;
+                            break outter;
+                        }
                     }
 
                 }

--
Gitblit v1.8.0