JLChen
2021-08-06 47675876dbc24ea2fa54a1f4090f1a998ed2e5cf
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读设备Mac
                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个byte
        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;
                        }
                    }
                }