栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

NB物联网之天翼物联(5)——编写编解码插件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NB物联网之天翼物联(5)——编写编解码插件

前言

之前的两篇将编解码插件的外围配置都已经交代明白,本篇将为大家讲解编解码插件的组成以及如何编写编解码插件!

ProtocolAdapterImpl 中的 encode And decode

在上一篇结尾,我们注意到一个细节,就是我们在配置文件中配置了一个路径,这个路径是一个java文件的路径,这时候我们就要注意了!这个文件一定不一般!!
这个文件就是ProtocolAdapterImpl.java,没错,事实证明这个文件就是我们的程序被调用的入口,而这个文件中有两个方法!打眼看过去我们就应该知道他们分别是干啥用的了~

encode

encode编码方法嘛!我们什么时候需要编码,按照我们前面讲的数据流向图,当命令从应用流向设备的时候是需要从profile类型的json串转成16进制码流的,说以encode是编码方法!

decode

decode解码方法,当16进制码流从设备流向应用时应该先通过这里,将编码解码为profile中提前定义的json字符串!

具体结构

翠花~ 上码

package com.Huawei.NBIoTDevice.WaterMeter;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.fasterxml.jackson.databind.node.ObjectNode;import com.huawei.m2m.cig.tup.modules.protocol_adapter.IProtocolAdapter;public class ProtocolAdapterImpl implements IProtocolAdapter {
    private static final Logger logger = LoggerFactory.getLogger(ProtocolAdapterImpl.class);
    // 厂商名称
    private static final String MANU_FACTURERID = "Huawei";
    // 设备型号
    private static final String MODEL = "NBIoTDevice";
    @Override
    public String getManufacturerId() {
        return MANU_FACTURERID;
    }
    @Override
    public String getModel() {
        return MODEL;
    }
    public byte[] encode(ObjectNode input) throws Exception {
        logger.info("dynamic lrbtest " + input.toString());
        try {
            CmdProcess cmdProcess = new CmdProcess(input);
            byte[] byteNode = cmdProcess.toByte();
            return byteNode;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public ObjectNode decode(byte[] binaryData) throws Exception {
        try {
            ReportProcess lightProcess = new ReportProcess(binaryData);
            ObjectNode objectNode = lightProcess.toJsonNode();
            logger.info("dynamic lrbtest " + objectNode.toString());
            return objectNode;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }}

看到这里我们应该是可以在decode和encode方法中任意发挥了!
但是 !!!

请注意

还有一个坑!

    // 厂商名称
    private static final String MANU_FACTURERID = "Huawei";
    // 设备型号
    private static final String MODEL = "NBIoTDevice";

MANU_FACTURERID 和 MODEL 千万不要忘记改!如果忘记改上传的时候它是不会提醒你滴!~
但是编解码编出来的东西乱七八糟!!!
如果按照正常的路数我们应该按照华为给定的结构去编写代码,如下:

即命令编码在 CmdProcess.java 类中编写,命令解码在 ReportProcess 类中编写,但是只有电信的NB平台是华为做的,如果和其他厂家兼容该怎样去做呢?欲知后事如何,且听下回分解!


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/238715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号