zouyu
2025-11-24 fbc2429987b5d9a645349fabeb2960948d07fef4
伸长率、电阻数采对接新Iot平台数据
已修改8个文件
303 ■■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/constant/DCResistanceMqttConstants.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/constant/ElongationMqttConstants.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-druid.yml 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-ztns.yml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/constant/DCResistanceMqttConstants.java
@@ -1,7 +1,7 @@
package com.ruoyi.device.constant;
/**
 * 直流电阻mqtt数据属性【dataStream】的标识常量
 * 直流电阻设备mqtt响应报文的标识常量
 */
public class DCResistanceMqttConstants {
@@ -40,4 +40,26 @@
     */
    public final static String  NSDQCS_DQCS_WD = "NSDQCS.DQCS.WD";
    /**
     * 设备id
     */
    public final static String  deviceId = "deviceId";
    /**
     * 设备配置文件ID
     */
    public final static String  deviceProfileId = "deviceProfileId";
    /**
     * 设备名称
     */
    public final static String  deviceName = "deviceName";
    /**
     * 设备类型
     */
    public final static String  deviceType = "deviceType";
}
cnas-device/src/main/java/com/ruoyi/device/constant/ElongationMqttConstants.java
@@ -1,15 +1,48 @@
package com.ruoyi.device.constant;
/**
 * 伸长率mqtt属性【dataStream】的标识常量
 * 伸长率设备mqtt响应报文的标识常量
 */
public class ElongationMqttConstants {
    public final static String  NSTSSC_TSSC_SCL = "NSTSSC.TSSC.SCL";
    public final static String  NSTSSC1_TSSC_SCL = "NSTSSC1.TSSC.SCL";
    /**
     * 伸长率
     */
    public final static String  NSTSSC_TSSC_SCL = "NSTSSC.TSSC.SCL";
    /**
     * 拉伸速度设定
     */
    public final static String  NSTSSC_TSSC_LSSDSD = "NSTSSC.TSSC.LSSDSD";
    /**
     * 位移
     */
    public final static String  NSTSSC_TSSC_WY = "NSTSSC.TSSC.WY";
    /**
     * 标距设定
     */
    public final static String  NSTSSC_TSSC_BJSD = "NSTSSC.TSSC.BJSD";
    /**
     * 设备id
     */
    public final static String  deviceId = "deviceId";
    /**
     * 设备配置文件ID
     */
    public final static String  deviceProfileId = "deviceProfileId";
    /**
     * 设备名称
     */
    public final static String  deviceName = "deviceName";
    /**
     * 设备类型
     */
    public final static String  deviceType = "deviceType";
}
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java
@@ -70,22 +70,38 @@
        try {
            String parse = new String(message.getPayload());
            switch (topic){
                case "/ztt/v3/2455220/publish":
                    //耐丝:直流电阻数据解析NS-ER02001
                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse,"NS-ER02001");
                case "/aiot/a4b27900-c6b7-11f0-8b13-c14e8310d70b"://成品试验室-伸长率
                    mqCallback.collectBridgeService.elongationDataAnalysis(parse);
                    break;
//                case "/aiot/8fac9fa0-c517-11f0-954c-255ce11213f1":
//                    //耐丝:直流电阻数据解析NS-ER02002
//                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse,"NS-ER02002");
//                    break;
                case "/ztt/v3/2455221/publish":
                    //耐丝:伸长率数据解析NS-FM05003
                    mqCallback.collectBridgeService.elongationDataAnalysis(parse,"NS-FM05003");
//                    break;
//                case "/aiot/38568140-c697-11f0-8b13-c14e8310d70b":
//                    //耐丝:伸长率数据解析NS-FM05002
//                    mqCallback.collectBridgeService.elongationDataAnalysis(parse,"NS-FM05002");
                case "/aiot/4e40cdb0-c6b7-11f0-8b13-c14e8310d70b"://成品试验室-电阻
                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse);
                    break;
                case "/aiot/5447dad0-c6b9-11f0-8b13-c14e8310d70b"://过程试验室-伸长率
                    mqCallback.collectBridgeService.elongationDataAnalysis(parse);
                    break;
                case "/aiot/51eaff10-c6b9-11f0-8b13-c14e8310d70b"://过程试验室-电阻
                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse);
                    break;
//                case "/ztt/v3/2455220/publish":
//                    //耐丝:直流电阻数据解析NS-ER02001
//                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse,"NS-ER02001");
//                    break;
////                case "/aiot/8fac9fa0-c517-11f0-954c-255ce11213f1":
////                    //耐丝:直流电阻数据解析NS-ER02002
////                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse,"NS-ER02002");
////                    break;
//                case "/ztt/v3/2455221/publish":
//                    //耐丝:伸长率数据解析NS-FM05003
//                    mqCallback.collectBridgeService.elongationDataAnalysis(parse,"NS-FM05003");
////                    break;
////                case "/aiot/38568140-c697-11f0-8b13-c14e8310d70b":
////                    //耐丝:伸长率数据解析NS-FM05002
////                    mqCallback.collectBridgeService.elongationDataAnalysis(parse,"NS-FM05002");
//                    break;
            }
        } catch (Exception e) {
            e.printStackTrace();
cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java
@@ -18,8 +18,8 @@
     */
    void addBridgeValue(JSONObject jsonObject);
    void dcResistanceDataAnalysis(String jsonStr,String deviceCode);
    void dcResistanceDataAnalysis(String jsonStr);
    void elongationDataAnalysis(String jsonStr,String deviceCode);
    void elongationDataAnalysis(String jsonStr);
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -113,16 +113,16 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void dcResistanceDataAnalysis(String jsonStr,String deviceCode) {
    public void dcResistanceDataAnalysis(String jsonStr) {
        Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType());
        if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){
            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
        if(CollectionUtil.isNotEmpty(dataMap)){
            //过滤出包含实际电阻值的对象
            String entrustCode = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_SN);
            BigDecimal zxdzzValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_ZXDZZ));
            BigDecimal fxdzzValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_FXDZZ));
            String entrustCode = getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_SN);
            String deviceCode = getValueByDataStream(dataMap,DCResistanceMqttConstants.deviceName);
            BigDecimal zxdzzValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_ZXDZZ));
            BigDecimal fxdzzValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_FXDZZ));
//            BigDecimal testLength = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_CD));
            Double tempValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_WD)).setScale(2, RoundingMode.HALF_UP).doubleValue();
            Double tempValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_WD)).setScale(2, RoundingMode.HALF_UP).doubleValue();
            //计算平均电阻值
            BigDecimal value = zxdzzValue.abs().add(fxdzzValue.abs()).divide(BigDecimal.valueOf(2L), RoundingMode.HALF_UP);
            Long count = collectBridgeMapper.selectCount(Wrappers.<CollectBridge>lambdaQuery().eq(CollectBridge::getEntrustCode, entrustCode));
@@ -140,45 +140,37 @@
    }
    @Override
    public void elongationDataAnalysis(String jsonStr,String deviceCode) {
    public void elongationDataAnalysis(String jsonStr) {
        Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType());
        if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){
            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
        if(CollectionUtil.isNotEmpty(dataMap)){
            // 伸长率:处理 NSTSSC.TSSC.SCL 数据
            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0,deviceCode);
        }else{
            processMultipleValueDataStream(dataMap, ElongationMqttConstants.NSTSSC1_TSSC_SCL,3,10.0,deviceCode);
            processMultipleValueDataStream(dataMap, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0);
        }
    }
    /**
     * 获取mqtt消息体中对应标识的值
     * @param dataList 数据列表
     * @param dataMap 数据列表
     * @param dataStream 数据流标识
     */
    private String getValueByDataStream(List<DeviceMqttVO> dataList, String dataStream) {
        DeviceMqttVO deviceMqttVO = dataList.stream()
                .filter(f -> StringUtils.equals(f.getDataStream(), dataStream))
                .findFirst()
                .orElse(null);
        if(Objects.nonNull(deviceMqttVO)){
            List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints();
            return CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():"";
    private String getValueByDataStream(Map<String,Object> dataMap, String dataStream) {
        try{
            return dataMap.get(dataStream).toString();
        }catch (Exception e){
            return "";
        }
        return "";
    }
    /**
     * 处理需要保存多个值的数据流,并保存到 Redis
     * @param dataList 数据列表
     * @param dataMap 数据列表
     * @param dataStream 数据流标识
     * @param maxSize 保存的最大个数
     * @param minVal 存储数据的最小值,低于该值则跳过;-1代表不限制
     * @param deviceCode 设备编号
     */
    private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize,Double minVal,String deviceCode){
    private void processMultipleValueDataStream(Map<String,Object> dataMap, String dataStream,int maxSize,Double minVal){
        // 筛选出当前数据流对应的数据
        Double value = Double.parseDouble(getValueByDataStream(dataList, dataStream));
        Double value = Double.parseDouble(getValueByDataStream(dataMap, dataStream));
        //如果最小值不为空且不为-1,获取到的值小于最小值则跳过不做处理
        if(Objects.nonNull(minVal)&&minVal!=-1&&value<minVal){
            return;
@@ -192,6 +184,7 @@
                RedisUtil.delZSetRange(dataStream,0,0);
            }
        }
        String deviceCode = getValueByDataStream(dataMap,ElongationMqttConstants.deviceName);
        RedisUtil.addZSet(dataStream+"."+deviceCode,System.currentTimeMillis(),value);
    }
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -307,23 +307,24 @@
                String refery = DataAcquisition.getRefer(v.get(config).getRefery());
                if (refery.equals(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)){
                    // 查询对应委托编号的数据
//                    Object value = RedisUtil.get(refery);
                    String[] splits = entrustCode.split("-");
                    String newEntrustCode = splits.length>1 ?splits[1]:"";
                    CollectBridge collectBridge = collectBridgeMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
                            .eq(CollectBridge::getEntrustCode,newEntrustCode)
                            .eq(CollectBridge::getDeviceCode,device.getManagementNumber())
                            .and(i->
                                    i.eq(CollectBridge::getEntrustCode,newEntrustCode)
                                    .or()
                                    .eq(CollectBridge::getEntrustCode,lotBatchNo)
                                    .eq(CollectBridge::getEntrustCode,lotBatchNo))
                            .last("limit 1"));
                    if(Objects.isNull(collectBridge)){
                        throw new ErrorException("直流电阻数采异常:没有找到委托编号为【"+entrustCode+"】的数据");
                        throw new ErrorException("设备"+device.getManagementNumber()+"数采异常:没有找到SN号为【"+entrustCode+"或"+lotBatchNo+"】的数据");
                    }
                    list.add(0,1);//测试长度,默认1
                    list.add(1,Objects.isNull(collectBridge.getCollectTemperature())?0.0:collectBridge.getCollectTemperature());
                    list.add(2,collectBridge.getCollectValue());//实际电阻值
                }else {
                    // 从 Redis 中获取列表数据
                    Set<Object> objectList = RedisUtil.getZSetRange(refery, 0, -1,"DESC");
                    Set<Object> objectList = RedisUtil.getZSetRange(refery+"."+device.getManagementNumber(), 0, -1,"DESC");
                    list.addAll(objectList);
                }
                numberOfDataEntries.getAndIncrement();
ruoyi-admin-ztns/src/main/resources/application-druid.yml
@@ -168,26 +168,6 @@
# 备注 18083密码:zttZTT123!@
mqtt:
  - url: tcp://mqtt-ztt.zttiot.com:1883 # 服务器ip
    username: 2455220 # MQTT-服务端-用户名,后期会修改为用户登录名
    password: 108300 # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns01a # clientId
    subscribe: /ztt/v3/2455220/publish # 订阅主题
    client: false # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt-ztt.zttiot.com:1883 # 服务器ip
    username: 2455221 # MQTT-服务端-用户名,后期会修改为用户登录名
    password: 108295 # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns02b # clientId
    subscribe: /ztt/v3/2455221/publish # 订阅主题
    client: false # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
@@ -195,16 +175,36 @@
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_gc_scl_108303 # clientId,过程试验室伸长率设备
    subscribe: /aiot/38568140-c697-11f0-8b13-c14e8310d70b # 订阅主题
    client: false # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn.com:1883 # 服务器ip
    clientId: ztns_gc_scl_108303_dev # clientId,过程试验室伸长率设备
    subscribe: /aiot/5447dad0-c6b9-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_gc_dz_108301 # clientId
    subscribe: /aiot/8fac9fa0-c517-11f0-954c-255ce11213f1 # 订阅主题
    client: false # 如果开发需要启动测试,需要改为false不然会一直报错
    clientId: ztns_gc_dz_108301_dev # clientId
    subscribe: /aiot/51eaff10-c6b9-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_cp_scl_108295_dev # clientId,成品试验室伸长率设备
    subscribe: /aiot/a4b27900-c6b7-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_cp_dz_108300_dev # clientId,成品试验室电阻
    subscribe: /aiot/4e40cdb0-c6b7-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
ruoyi-admin-ztns/src/main/resources/application-ztns.yml
@@ -169,43 +169,63 @@
# 备注 18083密码:zttZTT123!@
mqtt:
  - url: tcp://mqtt-ztt.zttiot.com:1883 # 服务器ip
    username: 2455220 # MQTT-服务端-用户名,后期会修改为用户登录名
    password: 108300 # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns01 # clientId
    subscribe: /ztt/v3/2455220/publish # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt-ztt.zttiot.com:1883 # 服务器ip
    username: 2455221 # MQTT-服务端-用户名,后期会修改为用户登录名
    password: 108295 # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns02 # clientId
    subscribe: /ztt/v3/2455221/publish # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
#  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
#    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
#    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
#  - url: tcp://mqtt-ztt.zttiot.com:1883 # 服务器ip
#    username: 2455220 # MQTT-服务端-用户名,后期会修改为用户登录名
#    password: 108300 # MQTT-服务端-密码,,后期会修改为用户登录密码
#    timeout: 100 # 超时时间 (单位:秒)
#    keepalive: 60 # 心跳 (单位:秒)
#    qos: 1 # 心跳包级别
#    completion-timeout: 3000 # 连接超时时间(单位:秒)
#    clientId: ztns_gc_scl_108303 # clientId,过程试验室伸长率设备
#    subscribe: /aiot/38568140-c697-11f0-8b13-c14e8310d70b # 订阅主题
#    clientId: ztns01 # clientId
#    subscribe: /ztt/v3/2455220/publish # 订阅主题
#    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
#  - url: tcp://mqtt.ztt.cn.com:1883 # 服务器ip
#    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
#    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
#  - url: tcp://mqtt-ztt.zttiot.com:1883 # 服务器ip
#    username: 2455221 # MQTT-服务端-用户名,后期会修改为用户登录名
#    password: 108295 # MQTT-服务端-密码,,后期会修改为用户登录密码
#    timeout: 100 # 超时时间 (单位:秒)
#    keepalive: 60 # 心跳 (单位:秒)
#    qos: 1 # 心跳包级别
#    completion-timeout: 3000 # 连接超时时间(单位:秒)
#    clientId: ztns_gc_dz_108301 # clientId
#    subscribe: /aiot/8fac9fa0-c517-11f0-954c-255ce11213f1 # 订阅主题
#    clientId: ztns02 # clientId
#    subscribe: /ztt/v3/2455221/publish # 订阅主题
#    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_gc_scl_108303 # clientId,过程试验室伸长率设备
    subscribe: /aiot/5447dad0-c6b9-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_gc_dz_108301 # clientId
    subscribe: /aiot/51eaff10-c6b9-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_cp_scl_108295 # clientId,过程试验室伸长率设备
    subscribe: /aiot/a4b27900-c6b7-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # 服务器ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # 超时时间 (单位:秒)
    keepalive: 60 # 心跳 (单位:秒)
    qos: 1 # 心跳包级别
    completion-timeout: 3000 # 连接超时时间(单位:秒)
    clientId: ztns_cp_dz_108300 # clientId
    subscribe: /aiot/4e40cdb0-c6b7-11f0-8b13-c14e8310d70b # 订阅主题
    client: true # 如果开发需要启动测试,需要改为false不然会一直报错