物联网【无码化】体验NB-loT全流程

无 码化编解码插件开发、一键式插件部署、南向设备模拟器,您可以通过简便的操作就来体验整个NB-IoT全流程。对于大多数NB-IoT开发者来说,如果能在正式开发之前,快速体验NB-IoT的上报数据和命令下发流程,有利于加深对华为NB-IoT解决方案的理解,对于后续的开发、调试工作将是事半功倍的。

按照本帖的操作流程指导,开发者可以基于SoftRadio模拟器,利用已有Demo快速接入华为OceanConnect平台,零代码体验NB-IoT的数据上报和命令下发全流程。

1 准备资源
1.1 平台资源
申请开发者portal资源的方式:
提交MAR合作电子流,通过审批后,会下发开发者portal资源。提交MAR合作电子流请参考:http://developer.huawei.com/ilink/esdk/download/HW_484292

1.2 资料参考
在开发Profile和编解码插件之前,建议您先了解下Profile文档和编写编解码插件的使用过程。
下载并查看如下的开发文档。

  • Profile开发指南:登录OceanConnect资源中心,下载“通用文档”下面的“生态集成开发集成介绍”文档。
  • 编解码开发与升级指南:登录OceanConnect资源中心,下载“开发指南”下面的“公共事业集成指导”,查看文中的“编解码库开发与升级指南”。

2 开发Profile设备的Profile文件是用来描述设备类型和设备服务能力的文件。定义了同一类设备具备的服务能力,属性,命令等。

Step 1 登录开发者Portal,单击“Profile开发>产品”,单击页面右上角的“自定义产品”,转至“产品模板”页面。
−        您可以使用模板定义您的产品,单击产品模板右上角的“立即使用”,这里的参数需要根据您的设备进行定义。

−        您也可单击右上角的“创建全新产品”,直接定义您的产品,这里以创建全新产品为例。

Step 2  根据实际填写“设备类型”、“设备型号”、“厂商ID”、“厂商名称”等数据。单击“确定”,添加产品完成。
设备类型(DeviceType):指示设备的类型。下拉选择类型。这里以WaterMeter为例。

设备型号(Model):指示设备的型号。这里以NBIoTDevice为例。

厂商ID(ManufacturerId):指示设备的厂商Id。这里以HuaweiSZ为例。

厂商名称(manufacturerName):指示设备的厂商名称。这里以HuaweiSZ为例。

Step 3 在产品详情页面单击“新建服务”,根据界面提示信息,增加基本信息,属性或命令,单击“保存”。
−        新增服务基本信息,服务的名称采用驼峰的命名方式,这里以Battery为例。描述可选,有多个服务就新增多条服务。

−          新增属性
属性名(propertyName):指示属性名称。这里以batteryLevel为例。

属性类型(dataType):指示数据类型。取值范围:int、float、datetime、string、jsonObject、array。这里以int类型为例。

上报数据时,复杂类型数据格式如下:

DateTime:yyyyMMdd’T’HHmmss’Z’如:20151212T121212Z

jsonObject:自定义json结构体,平台不理解只透传。

最小(min)/最大值(max):指示最小/最大值。仅当dataType为int、float时生效,逻辑大于等于/小于等于。

步长(step):指示步长。暂不使用,可填0即可。

单位(unit):指示单位,英文,取值根据参数确定。如:温度单位:“°C”;百分比单位:“%”。

长度(maxLength):指示字符串长度。仅当dataType为string、datetime、jsonObject、array时生效。

枚举值(enumList):如烟感属性activityStatus可有如下取值[ "STANDBY", "RECORDING", "LIVING" ]。

访问模式(method):指示访问模式。R:可读;W:可写;E可订阅。取值范围:R、RW、RE、RWE、null。

本例按照如上方法,创建三个属性,分别为batteryLevel,batteryThreshold和batteryStatus。

−      新增命令

命令名称:指示设备可以执行的命令。如门磁的Lock命令、摄像头的VIDEO_RECORD命令。这里以SET_DIVICE_LEVEL为例。

命令名与参数 共同构成一个完整的命令,在页面上单击“新增字段”。

各字段的说明和属性中的字段类似,这里不再赘述。各字段更详细的命名规则请参考“资料参考”中的Profile开发指南。

Step 4 【可选】单击产品详情右上角的“导出该产品Profile”,可以直接生成Profile文件并把文件导出至本地某个位置。

说明:若您自己线下编写的profile文件,则单击“Profile开发> 导入Profile”,可把已写好的Profile文档导入平台,如下图所示。

3 开发编解码插件
开发完Profile文件后,可以在界面上通过图形化的方式完成设备与平台之间的消息映射。在平台中预集成了编解码插件的模板,可以根据设备类型和接入协议在插件模板中选择模板修改开发编解码插件。

登录开发者Portal,单击“插件开发”,单击右上角的“添加插件”,转到“插件模板”页签,单击“查看”,您可以查看各个模板的内容。

  • 若您的业务和模板中类似,可使用模板再根据实际来修改。
  • 若您不需要使用模板,则可自己新建插件。下面以新建插件来说明如何开发编解码插件。使用模板的类似修改即可。

Step 1 单击页面右上角的“新建插件”,进入设计插件页面。

说明:您可以单击右上角的“新手指导”,查看插件的实现原理。

Step 2 新增消息。单击“新增消息”,输入消息的名称(这里以Battery为例)、描述和消息类型(包括数据上报、命令下发和命令下发响应)。

Step 3 添加字段。单击“添加字段”,添加上报数据的字段。名字:建议和profile文件中设置的保持一致。便于和profile文件中的字段进行对应。

数据类型:包括int8u,int16u,int24u,int32u,string,variablelength string,array,variant。与profile中的相对应。

长度:指示该字段占多少字节长度。若长度为1,则在上报码流时,这个字段占一位,即一个16进制的数值。本例均以长度为1为例。

默认值:该字段在码流中的参考值。
偏移值:当前字段到本条消息码流起始位置的字节数,比如设置为2-3,则这个字段在码流中的第2-3位。
说明:每个消息必须有消息地址域。地址域为标识唯一此消息唯一ID的字段,即唯一标识不同的消息。地址域的名称必须为messageId,且只有地址域的名称可以为messageId。
我们要模拟数据上报,命令下发的完整过程,需要创建“数据上报”、“命令下发”和“命令下发响应”三种类型的消息。

Step 4 导入Profile文件。在页面右侧“设备Profile”区域,单击“更多操作”下的“选择Profile”,选择上述第二章节中开发的Profile。

说明:若您需要修改Profile,则可单击“更多操作”下的“更换Profile”。

Step 5 建立profile属性、命令与消息的映射关系。根据自己定义的profile,来设计插件中的消息。通过拖拉服务中的属性或命令,与消息中的字段进行关联。属性对应于数据上报中的字段列表。有多个服务就新增多个消息。为便于理解,字段名称建议和属性名设置为相同。
注意,命令下发的消息名称必须和Profile中的相同。

Step 6 完成映射关系后,单击页面右上角的“部署”,部署成功后,系统会将您的设计结果自动生成编解码插件包。

4 注册设备

开发部署成功后,您可以将您的设备接入到IoT平台。
Step 1 登录开发者Portal,单击“我的设备”,进入设备列表页面。单击右上角的“注册设备”,转向注册设备页面,选择您需要注册设备的Profile。

Step 2 单击Profile,进入Profile详情页面,在页面底部填写设备名称和设备标识码,这里的设备名称和设备标识码均以HuaweiSZ为例,单击“注册”,完成设备的注册。

其中,在真实场景中,设备标识码为IMEI号。如果设备是在线状态,表示设备已经成功的接入到平台。

说明:可以单击设备后面的修改或删除按钮,对设备进行修改。

5 添加非NB设备模拟器(可选步骤)

您无需真实设备,通过模拟设备的Json消息来完成与北向应用的调试。若使用码流来模拟,则可跳过该步骤。

Step 1 登录开发者Portal,单击“模拟器 > 非NB设备模拟器”,进入非NB设备模拟器列表页面。单击右上角的“设备模拟器”,弹出“创建设备模拟器”的页面,如下图所示。

Step 2 选择您需要模拟的设备型号(即自己创建的设备),进入页面后,输入和“注册设备”章节注册的相同验证码(VerificateCode),这里即为HuaweiSZ。

Step 3 单击“创建”,完成创建您的设备模拟器。单击您创建的设备模拟器,进入详情页面,可以设置设备的状态为在线或离线,如下图所示。

6 上报数据

  • 非NB设备模拟器

Step 1 单击“模拟器 > 非NB设备模拟器”,进入非NB设备模拟器列表页面。

Step 2 单击自己创建的设备模拟器,进入详情页面,单击需要上报数据的服务,输入各个字段的值(这里以batteryLevel取值1,batteryThreshold取值3,batteryStatus取值2为例)。如下图所示。                 

Step 3 选择发送模式(这里以手动发送模式为例)后,单击“发送”,则在页面右侧弹出发送数据的详细消息。如下图所示。

Step 4 单击“我的设备”,进入自己的设备详情页面,单击“历史数据”页签,可以看到上报的数据。此时,上报数据即成功。如下图所示。

  • NB设备模拟器(码流)

Step 1 单击“模拟器 > NB设备模拟器”,进入NB设备模拟器列表页面,单击“绑定设备”,在弹出框中输入第四章节注册设备时的验证码,单击“确定”即绑定设备。如下图所示。  

Step 2 进入NB设备模拟器测试页面,输入十六进制码流00010203,单击“发送”,则在页面右侧弹出发送成功的消息。如下图所示。

本例中,一共上报4个字节,分别为“00”、“01”、“02”、“03”。其中,第一个字节“00”表示messageId,第二个字节“01”表示上报数据对应的“batteryLevel”字段,第三个字节“02”表示batteryThreshold字段,第四个字节“03”表示batteryStatus字段。这些内容与profile文件和编解码插件是一一对应的。
    

Step 3 单击“我的设备”,进入自己的设备详情页面,单击“历史数据”页签,可以看到上报的数据。此时,上报数据即成功。如下图所示。

7 命令下发
Step 1 单击“我的设备”,进入设备列表页面。单击设备右侧的命令下发图标,弹出命令下发界面,根据界面信息,选择命令,输入命令参数的值。如下图所示。

Step 2 单击“发送”,若发送成功,则会在页面右侧显示下发数据的详细消息。此时单击设备,查看历史命令,消息状态为“已送达”状态。如下图所示。

8 消息订阅

北向应用除了通过RESTful类型的数据查询接口,获取设备的当前数据和历史数据外,还可以通过消息订阅的方式来获取实时数据。

当南向设备上报数据到达平台时,平台将检索是否有订阅存在,如果存在,则向对应的callbackUrl推送POST消息。

消息订阅除了可以订阅消息外,还可以订阅设备绑定消息、设备删除消息、规则时间、命令响应等。更详细的可以参见API接口参考。

下面详细介绍整个订阅流程,这里以获取设备数据为例进行介绍。

Step 1        首先要搭建服务器(这里以tomcat为例)。

配置https服务器具体步骤可参考:http://developer.huawei.com/ict/forum/thread-25457.html

Step 2       写一个简单的RESTful接口webapp,部署到服务器,将服务器映射到公网,调试Post接口能调通。

tomcat+restful接收https推送消息和校验证书可参考如下帖子中:http://developer.huawei.com/ict/forum/forum.php?mod=viewthread&tid=47157

Step 3       把Step1中制作好的CA证书(按照Step1中制作的证书为tomcat.pem)上传到IoT平台。

登录开发者Portal平台,单击“对接信息”,单击“上传”,选择制作好的CA证书(这里为tomcat.pem),上传即可。

Step 4       调用订阅接口,订阅接口传入的callbackURL即部署的服务器地址(这里callbackurl:https://ip:port/RESTfulWS/rest/UserInfoService/subscriber1),平台会把消息推送到服务器上。

a.下载北向LiteDemo并导入Eclipse中:http://developer.huawei.com/ict/cn/rescenter/CMDA_FIELD_OCEAN_CONNECT?developlan=Other

b.         修改全局参数。在Constant.java中设置平台的基本信息和callbackURL。具体修改如下:

BASE_URL:设置为OceanConnect的平台地址,如https://218.4.33.71:8743。

APPIDSECRET:设置为应用的appID和密钥。

CALLBACK_BASE_URL:部署的服务器IP和端口号,如https://172.31.26.81:8743。

DEVICE_APPID_CALLBACK_URL等地址为完整的callbackURL,这里为CALLBACK_BASE_URL+"RESTfulWS/rest/UserInfoService/subscriber1"。

订阅的消息类型有deviceAdded、deviceInfoChanged、deviceDataChanged等类型。可根据需要选择类型,这里以订阅设备数据变化(notifyType为deviceDataChanged)为例。

c.         调用订阅接口。右键单击SubscribeNotification.java文件,选择“Run As > Java Application”。若成功,则在控制台Console中会返回201,如下图所示:

Step 5       触发推送操作,此时我们上报数据,则在服务器日志中可以查看到推送的消息。

进入服务器log目录,输入如下命令:

tail -f catalina.out

则可以看到服务器中收到了推送消息,如下图所示:

从这里可以看到推送的数据和平台上或调用查询设备历史数据中的是一致的。

说明:如上只是简单的流程体验。如果使用过程中遇到问题需要咨询,或者发现开发者portal的问题请提单给华为开发人员 。提单地址:https://devcenter.huawei.com。

NB-IOT:物联网【无码化】体验NB-loT全流程相关推荐

  1. 物联网【无码化】体验NB-loT全流程

    无 码化编解码插件开发.一键式插件部署.南向设备模拟器,您可以通过简便的操作就来体验整个NB-IoT全流程. 对于大多数NB-IoT开发者来说,如果能在正式开发之前,快速体验NB-IoT的上报数据和命 ...

  2. springboot风电检测物联网平台JAVA源码 iot物联网源码

    springboot风电检测物联网平台JAVA源码 iot物联网源码,仅供测试学习使用. 此项目为模拟风电场监控项目,功能包括电厂信息,风机配置,数据统计,故障记录,风速统计,功率统计,机舱实时信息等 ...

  3. 基于无码化平台用户深度参与搭建,数睿数据+南京玻纤院联合打造国家级智慧实验室解决方案

    第一部分:喜报--数睿数据收到一份特殊的感谢信 新春伊始,南京数睿数据科技有限公司(简称数睿数据)收到了来自南京玻璃纤维研究设计院(下简称南京玻纤院)的感谢信.在过去的一年中,数睿数据公司与南京玻纤院 ...

  4. GitHub强势开源,这个神器,支持12个视频片源、高清无码、能下载、全平台 !!...

    点击上方"Github爱好者社区",选择星标 回复"资料",获取小编整理的一份资料 作者:GG哥 来源:GitHub爱好者社区(github_shequ) 这是 ...

  5. 筑基期第一式:深入Spring源码之第二节getBean全流程【循环依赖分析+扩展点分析】

    getBean整体逻辑 AbstractBeanFactory#doGetBean方法 protected <T> T doGetBean(String name, @Nullable C ...

  6. 物联网省/国赛AIOT智能家居全流程演示

    文章目录 前言 一.虚拟仿真部署部分 打开虚拟终端,配置与Home Assistant连接 添加 MQTT 连接 重启 HA服务 Home Assistant平台 二.Home Assistant平台 ...

  7. 电子招投标系统源码之了解电子招标投标全流程

    随着各级政府部门的大力推进,以及国内互联网+的建设,电子招投标已经逐渐成为国内主流的招标投标方式,但是依然有很多人对电子招投标的流程不够了解,在具体操作上存在困难.虽然各个交易平台的招标投标在线操作会 ...

  8. 电子招标系统源码之了解电子招标投标全流程

    随着各级政府部门的大力推进,以及国内互联网+的建设,电子招投标已经逐渐成为国内主流的招标投标方式,但是依然有很多人对电子招投标的流程不够了解,在具体操作上存在困难.虽然各个交易平台的招标投标在线操作会 ...

  9. Java版电子招投标系统源码之了解电子招标投标全流程

    随着各级政府部门的大力推进,以及国内互联网+的建设,电子招投标已经逐渐成为国内主流的招标投标方式,但是依然有很多人对电子招投标的流程不够了解,在具体操作上存在困难.虽然各个交易平台的招标投标在线操作会 ...

最新文章

  1. python类装饰器详解-Python装饰器详解
  2. jakarta ee_Jakarta EE,EE4J和Java EE之间的关系
  3. JavaScript数据结构与算法(六) 链表的实现
  4. 计算机二级c选择题怎么准备,马上计算机二级考试,你准备得怎么样了?
  5. jquery 如何获取动态添加的元素
  6. 假如我来发明编程语言
  7. bootstrap课程5 bootstrap中的组件使用的注意事项是什么
  8. 教学|zbrush雕刻头发笔刷介绍,巧用工具可以事半功倍哦!
  9. 在html css中加粗显示,css字体怎么加粗?
  10. 中国知名个人站长排行TOP91
  11. YOLO5Face:为什么要重新发明人脸检测器
  12. 腾讯文档表格内存优化总结
  13. Win10安装程序修复计算机,如何在Windows 10上使用安装介质引导或修复
  14. Maxent软件安装及使用
  15. 用js实现数组去除重复的元素方法
  16. 跳槽时,这些Java面试题必须会,99%会被问到!
  17. 10月18---10月20号第一周总结
  18. python3 sleep 延时秒 毫秒
  19. AI作画,NovelAI开源教程
  20. 大企业喜欢使用外包人员驻场开发软件的原因解析

热门文章

  1. 机器学习项目实战----信用卡欺诈检测(二)
  2. ios Class类型使用
  3. Win7系统C盘空间不足
  4. jquery.lazyload 插件实现图片延迟加载
  5. IIS中防止MDB被下载的办法
  6. 使用ELK实时分析SSH暴力破解
  7. Centos8 加密 GRUB 防破解root密码
  8. 10个Python进行数据分析的小技巧
  9. curl: (7) Failed connect to localhost:9200; Connection refused
  10. android 电池续航时间,《Android优化专题》——优化电池续航能力