NB物联网之天翼物联(6)——移动电信NB的区别与兼容开发

简介: NB物联网之天翼物联(6)——移动电信NB的区别与兼容开发

前言


电信是最早开通NB业务的运营商,两年前我们公司就已经着手NB表具的开发工作,当时联通和移动的NB业务还没有开展,自然没有考虑兼容的问题,现在下定决心重新做一套肯定是要做一套兼容的程序!那么,收发机制完全不同的移动NB和电信NB怎样才能实现兼容呢?


找到不同点:


移动是直接向平台发送16进制字符串,平台将其自动转为16进制码流向表具发送16进制码流,如下图所示


image.png

电信是通过profile文件向平台发送配置文件中的json,再由编解码插件转为16进制码流,再发向表具,如下图所示


image.png


那我们只需要将他们不同的地方做成一样的就可以完成兼容了!即应用应该向平台发送16进制码流就可以了!!应用发送16进制码流,就不需要编解码插件了,但是它又必须存在,所以我们需要插件做“没有意义”的转换!!


实现准备


profile中的service有两个列表,一个是属性列表:AcceptService,一个是命令列表:CommandService

属性列表用来接收编解码插件中decode方法解码出来的属性

命令列表用来传入编解码插件中encode方法需要传入的属性

我们在定义profile的时候要把他们尽量分开


发送命令


CommandService 中只编辑命令列表,因为我们要做到兼容,就是不管下发什么命令,我都只发送一个16进制码流,只是根据不同的命令下发的码流不同而已,所以我们只定义一个send命令,命令中只需定义一个value属性用来存放我们要发送的码流!

与之对应的是编解码插件中的encode方法,而encode方法传入一个ObjectNode(json)返回一个byte数组,我们在encode中要做的就是将json中的value字符串拿出来转换成byte数组

   public byte[] encode(ObjectNode input) throws Exception {
    String hexString = input.get("paras").get("value").asText();
    List<String> list = new ArrayList<String>();
    for (int i = 0; i < hexString.length() - 1; i += 2) {
      list.add(hexString.substring(i, i + 2));
    }
    byte[] byteArray = new byte[list.size()];
    for (int i = 0; i < list.size(); i++) {
      int dec_num = (int) Long.parseLong(list.get(i), 16);
      byteArray[i] = (byte) dec_num;
    }
    return byteArray;
  }

接收上传数据


AcceptService 中只编辑属性列表,同样我们的编解码插件只是起一个类型转换的作用,只需在该服务下定义一个value属性,用来接收从编解码插件中返回的字符串

与之对应的是编解码插件中的decode方法,decode方法传入一个byte数组返回一个ObjectNode(json),我们在decode中要做的就是将byte数组转换成字符串放入AcceptService的value属性中

   public ObjectNode decode(byte[] binaryData) throws Exception {
    StringBuffer result = new StringBuffer();
    System.err.println( binaryData.length);
    for (int i = 0; i < binaryData.length; i++) {
      String hex = String.format("%02x", Byte.toUnsignedInt(binaryData[i]));
      result.append(hex);
    }
        //组装body体,只能为ObjectNode对象
    ObjectMapper mapper = new ObjectMapper();
    ObjectNode root = mapper.createObjectNode();
    ArrayNode arrynode = mapper.createArrayNode();
    ObjectNode batteryNode = mapper.createObjectNode();
    batteryNode.put("serviceId", "AcceptService");
    ObjectNode batteryData = mapper.createObjectNode();
    batteryData.put("value", result.toString());
    batteryNode.put("serviceData", batteryData);
    arrynode.add(batteryNode);
    root.put("msgType", "deviceReq");
    root.put("data", arrynode);
    return root;
  }

测试


如下图所示新增一个虚拟设备

image.png

选中CommandService服务下的send命令,在value中填入16进制字符串:

image.png

如上图所示,我们完成了发送什么,设备端就接收到什么,测试接收服务在上图“请输入十六进制码流”的窗体没输入设备上传的数据,在应用模拟器中就能够看到接受到的内容!!


总结


如上我们就实现了电信NB和移动NB的兼容,即他们都是应用根据不同的业务场景,编辑不同的16进制字符串,然后向平台发送一个16进制字符串,然后平台通过转换向产品发送一个16进制码流;接收数据都是接收16进制字符串然后解析字符串得到想要的数据!

两种机制各有好处,作为一个中立的开发者来说:论开发效率,移动的模式甩电信10条街 - - ||


相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
26天前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
20天前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
29 1
|
26天前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
1月前
|
传感器 数据采集 监控
数据采集器和物联网网关的区别
数据采集器主要用于从各种数据源收集数据。这些数据源可以是传感器(如温度传感器、压力传感器等)、仪表(如电表、水表等)或者其他具有数据输出功能的设备。物联网网关是连接感知层(包含各种传感器和数据采集设备)和网络层(如互联网、局域网等)的关键设备。
58 4
|
2月前
|
运维 安全 物联网
物联网:NB卡在使用过程中存在的一些限制和需要特别注意的操作事项
物联网NB卡(通常指的是窄带物联网(NarrowBand Internet of Things, NB-IoT)卡)是专为物联网设备设计的无线通信模块,主要用于连接物联网设备与移动网络,实现远程数据交换和控制。然而,在使用物联网NB卡时,确实存在一些限制和操作上的考虑因素。以下是一些主要的限制和操作注意事项:
|
2月前
|
物联网
物联网:NB卡是否支持2/3/4G网络
在讨论“NB卡是否支持2/3/4G网络”的问题时,我们首先需要明确“NB卡”指的是什么。在通信领域中,“NB卡”通常指的是支持NB-IoT(Narrowband Internet of Things,窄带物联网)技术的SIM卡或模块。NB-IoT是一种专为物联网设计的窄带无线通信技术,它基于现有的蜂窝网络进行构建,但专注于低功耗广域网(LPWAN)应用。
|
2月前
|
传感器 监控 安全
物联网:NB卡的应用场景
物联网NB-IoT(窄带物联网)卡作为一种低功耗、广覆盖、大连接的物联网通信技术,广泛应用于各种需要远程监控、数据传输和智能管理的场景中。以下是一些NB-IoT卡的具体应用场景及其操作概述:
|
2月前
|
网络协议 物联网 数据安全/隐私保护
物联网卡:什么是NB卡
对于物联网NB卡的操作,我们可以从多个方面进行详细阐述,包括其基本概念、选购注意事项、配置过程以及使用注意事项等。以下是对物联网NB卡操作的全面指导:
|
3月前
|
物联网
物联网:“定向卡”与“通用卡”的区别
在讨论“定向卡”与“通用卡”的区别时,我们首先要明确这两种卡通常是在不同背景下被提及的,比如在营销、金融服务、会员卡系统等领域。不过,为了提供一个通用的、跨领域的理解,我们可以从以下几个维度来探讨它们的区别:
|
3月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。

热门文章

最新文章

相关产品

  • 物联网平台
  • 下一篇
    DataWorks