hxb
2024-02-22 d451118d4be05f180cfe1f99bc5904f74db8cc3f
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLConnectHelper.java
@@ -21,6 +21,8 @@
import com.hdl.sdk.link.gateway.HDLLinkLocalGateway;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -323,21 +325,32 @@
                                    String requestTopic = linkRequest.getCloudTopic();
                                    byte[] encryBytes = null;
                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(mac);
                                    if (gatewayBean != null && getGatewayTypeList().contains(gatewayBean.getGatewayType())) {
                                        //逆变器远程mqtt秘钥不一样
                                    if (gatewayBean != null && getNotGatewayTypeList().contains(gatewayBean.getGatewayType())) {
                                        /**
                                         * 毫米波这边获取数据的时候  已经设置了主从密钥进去了 这边不作处理
                                         */
                                        encryBytes = EncryptUtil.encryBytes(linkRequest.getCloudSendBytes(), gatewayBean.getAesKey());
                                    } else {
                                        encryBytes = EncryptUtil.encryBytes(linkRequest.getCloudSendBytes(), HDLLinkConfig.getInstance().getAesKey());
                                    }
                                    if (MqttRecvClient.getInstance() != null) {
                                        MqttRecvClient.getInstance().send(requestTopic, encryBytes);
                                        if (HDLConnectHelper.isInverterTopic(linkRequest.getCloudTopic())) {
                                            LogUtils.i("远程发送数据:" + linkRequest.getCloudTopic() + "\r\n" + Arrays.toString(byteArrayConvertIntArray(linkRequest.getCloudSendBytes())));
                                        } else {
                                            LogUtils.i("远程发送数据:" + linkRequest.getCloudTopic() + "\r\n" + new String(linkRequest.getCloudSendBytes()));
                                        }
                                    }
                                    LogUtils.i("远程发送数据:" + linkRequest.getCloudTopic() + "\r\n" + new String(linkRequest.getCloudSendBytes()));
                                }
                                //本地TCP
                                else {
                                    linkRequest.setEncrypt(false);// 2024年01月31日16:34:22 默认明文通讯,因为创建电站,绑定逆变器时,需要设置参数给逆变器,这时候还没有秘钥;
                                    if (!linkRequest.getTopic().endsWith("heartbeat")) {//心跳主题数据过多,过滤下
                                        LogUtils.i("本地发送数据:\r\n" + new String(linkRequest.getSendBytes()));
                                        if (HDLConnectHelper.isInverterTopic(linkRequest.getTopic())) {
                                            LogUtils.i("本地发送数据:\r\n" + Arrays.toString(byteArrayConvertIntArray(linkRequest.getSendBytes())));
                                        } else {
                                            LogUtils.i("本地发送数据:\r\n" + new String(linkRequest.getSendBytes()));
                                        }
                                    }
                                    HDLTcpConnect.getTcpSocketBoot(ipAddress).sendMsg(EncryptUtil.getEncryBytes(linkRequest));
                                }
@@ -408,16 +421,49 @@
        }
    }
    /**
     * 支持毫米类型
     *
     * @return 类型列表
     */
    public static List<String> getGatewayTypeList() {
        List<String> typeList = new ArrayList<>();
//    /**
//     * 支持毫米类型
//     *
//     * @return 类型列表
//     */
//    public static List<String> getGatewayTypeList() {
//        List<String> typeList = new ArrayList<>();
////        typeList.add("sensor.mmv_sleep");//睡眠毫米波spk
////        typeList.add("sensor.mmv_pose");//姿态毫米波spk
//        typeList.add("energy.hdl_inverter");//逆变器spk
//        typeList.add("sensor.mmv_sleep");//睡眠毫米波spk
//        typeList.add("sensor.mmv_pose");//姿态毫米波spk
//        typeList.add("sensor.hdl_mmw_pose");//Wi-Fi毫米波ZT版本
//        return typeList;
//    }
//
//    public static List<String> getMillimeterTypeList() {
//        List<String> typeList = new ArrayList<>();
////        typeList.add("AGATEWAY");//网关
//        typeList.add("sensor.mmv_sleep");//睡眠毫米波spk
//        typeList.add("sensor.mmv_pose");//姿态毫米波spk
//        typeList.add("sensor.hdl_mmw_pose");//Wi-Fi毫米波ZT版本
//        return typeList;
//    }
    /**
     * 获取除了网关的其它网络设备,上面写的那两个方法不一致getGatewayTypeList,getMillimeterTypeList,统一了下,以免后期出问题
     * @return
     */
    public static List<String> getNotGatewayTypeList(){
        List<String> typeList = new ArrayList<>();
        typeList.add("energy.hdl_inverter");//逆变器spk
        typeList.add("sensor.mmv_sleep");//睡眠毫米波spk
        typeList.add("sensor.mmv_pose");//姿态毫米波spk
        typeList.add("sensor.hdl_mmw_pose");//Wi-Fi毫米波ZT版本
        return  typeList;
    }
    public static List<String> getNewMillimeterTypeList() {
        List<String> typeList = new ArrayList<>();
        typeList.add("sensor.hdl_mmw_pose");//Wi-Fi毫米波ZT版本
        return typeList;
    }
@@ -433,4 +479,32 @@
            listener = null;
        }
    }
    public static boolean isInverterTopic(String topic) {
        if (TextUtils.isEmpty(topic)) {
            return false;
        }
        return topic.endsWith("custom/native/inverter/down_reply")
                || topic.endsWith("custom/native/inverter/down")
                || topic.endsWith("custom/native/inverter/up");
    }
    /**
     * byte数组转换成int数组(为了打印出无符号的btye数组数据)
     *
     * @param bytes 数组
     * @return
     */
    public static Integer[] byteArrayConvertIntArray(byte[] bytes) {
        if (bytes == null || bytes.length == 0) {
            return new Integer[]{};
        }
        Integer[] arr = new Integer[bytes.length];
        for (int i = 0; i < bytes.length; i++) {
            arr[i] = bytes[i] & 0xff;
        }
        return arr;
    }
}