为了账号安全,请及时绑定邮箱和手机立即绑定

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 千万不要忘记改!如果忘记改上传的时候它是不会提醒你滴!~
但是编解码编出来的东西乱七八糟!!!
如果按照正常的路数我们应该按照华为给定的结构去编写代码,如下:
https://img1.sycdn.imooc.com//5e201b6a000174b004430427.jpg
即命令编码在 CmdProcess.java 类中编写,命令解码在 ReportProcess 类中编写,但是只有电信的NB平台是华为做的,如果和其他厂家兼容该怎样去做呢?欲知后事如何,且听下回分解!


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消