基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码

目录

前言

1.下载官方协议包

2.解压

3.自定义主题

4.重写解码方法

5.以下是我解析后接收到的数据



前言

最近这段时间,一直在用开源的Jetlinks物联网平台在学习,偶尔有一次机会接触到物联网设备对接,在协议对接的时候,遇到了各种各样的问题,最近遇到协议包解析的问题,所以想总结一下。

1.下载官方协议包

官方协议包下载地址:JetLinks物联网基础平台/jetlinks-official-protocol

2.解压

解压到指定目录,并且用IDEA打开。

3.自定义主题

3.1 找到TopicMessageCodec,自定义主题,如下图所示

3.2 自定义主题相关代码

java 复制代码
 jingkongtopicdata("xxx/xxx/*/**",
            ReportPropertyMessage.class,
            route -> route
                    .upstream(true)
                    .downstream(false)
                    .group("属性上报")
                    .description("上报xxx数据")
                    .example("{\"properties\":{\"属性ID\":\"属性值\"}}")),

3.3 改完之后需要添加到路由

找到JetLinksProtocolSupportProvider类,按照下面的方式添加路由即可

4.重写解码方法

找到 JetLinksMqttDeviceMessageCodec类,添加以下代码,按照自己的方式进行数据解析,这样就能拿到自己想要的mqtt数据了。

java 复制代码
   /**
     * 
     * @param context
     * @return
     */
    @Nonnull
    @Override
    public Flux<DeviceMessage> decode(@Nonnull MessageDecodeContext context) {

        MqttMessage message = (MqttMessage) context.getMessage();
        ReportPropertyMessage deviceMessage = new ReportPropertyMessage();
        String topic =  message.getTopic();
        if (topic.contains("Login")){
            String replyTopic = topic.replace("Post","PostRsp");
        }
        String topics[] = topic.split("/");
        deviceMessage.setDeviceId(topics[2]);
        deviceMessage.setMessageId(String.valueOf(System.currentTimeMillis()));
        byte[] payload = message.payloadAsBytes();
        String encoding ="UTF-8";
        String msg =null;
        Map<String,Object>jingkongTmp  = null;
        try {
            msg = new String(payload,encoding);
            Map<String, Object> map = new HashMap<>();
            if (null!=msg&& !msg.equals("")){
                map.putAll(JSON.parseObject(msg, new TypeReference<Map<String, Object>>(){}));
            }
           
            JSONObject jsonObject =  JSONObject.parseObject(msg);
            JSONArray jsonArray  = jsonObject.getJSONArray("data");
            int len = jsonArray.size();
            if (len == 5){
                
                jingkongTmp = new HashMap<>();
                Map mapString = JSONObject.parseObject(msg,Map.class);
                jingkongTmp.put("dataReport1",mapString);
              
                deviceMessage.setProperties(jingkongTmp);
                System.out.println("json =="+ JSONObject.toJSONString(deviceMessage));
            }else {
                jingkongTmp = new HashMap<>();
                Map mapString = JSONObject.parseObject(msg,Map.class);
                jingkongTmp.put("dataReport2",mapString);
            
                deviceMessage.setProperties(jingkongTmp);
                System.out.println("json =="+ JSONObject.toJSONString(deviceMessage));
            }
        }catch (Exception e){
            e.getMessage();
        }
       
        return Flux.just(deviceMessage);
    }

5.以下是我解析后接收到的数据

相关推荐
漠月瑾-西安2 小时前
6G:从“外挂式”安全到“数字社会操作系统”的内生革命,与它的终极悖论
物联网·量子计算·零信任·内生安全·网络架构·人工智能ai·6g安全
大河qu3 小时前
HCIP-IoT/H52-111 真题详解(章节C),接入技术和网络设计 /Part4
物联网·zigbee·nb-iot·hcip-iot·lwpa·物联网接入技术
DolphinDB智臾科技3 小时前
DolphinDB:技术赋能钢铁业,国产时序数据库领路数智化落地
数据库·物联网·时序数据库·dolphindb
北京耐用通信3 小时前
耐达讯自动化CC-Link IE转Profinet网关:破解协议壁垒,赋能电机智控升级
人工智能·科技·物联网·网络协议·自动化·信息与通信
物联通信量讯说4 小时前
企业级物联网连接服务商怎么选?和物联网卡代理的核心区别
物联网·通信·物联网卡·企业级物联网连接服务商
三佛科技-134163842125 小时前
HN15N10DA_TO-252封装100V 15A 增强MOSFET场效应管详细分析(HN15N10DA在小家电的应用)
嵌入式硬件·物联网·智能家居·pcb工艺
远翔调光芯片^138287988726 小时前
FP7125停产替代选型指南:FP7135参数详解及应用适配全攻略
科技·物联网·智能家居·能源
武汉知识图谱科技7 小时前
超越预测性维护:基于知识超图与根因推理的能源电力“免疫系统”构建
人工智能·物联网·langchain·能源·知识图谱·embedding
taxunjishu8 小时前
汇川PLC与RS422设备跨协议通讯方案——新能源锂电制造行业应用案例
物联网·自动化
北京耐用通信8 小时前
RFID通信不“卡壳”:耐达讯自动化CC-Link IE转DeviceNet网关的协议转换黑科技
人工智能·科技·物联网·自动化·信息与通信