继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

不吃带叶的
关注TA
已关注
手记 5
粉丝 3
获赞 0

前言

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

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP