一、平台简介
中国移动物联网开放平台(OneNET) 是中移物联网有限公司基于物联网技术和产业特点打造的开放平台和生态环境,适配各种网络环境和协议类型,支持各类传感器和智能硬件的快速接入和大数据服务,提供丰富的API和应用模板以支持各类行业应用和智能硬件的开发,能够有效降低物联网应用开发和部署成本,满足物联网领域设备连接、协议适配、数据存储、数据安全、大数据分析等平台级服务需求。
官网主页:https://open.iot.10086.cn/
帮助文档:https://open.iot.10086.cn/doc/v5/develop
平台架构:
1.1 OneNET Studio
OneNET Studio 定位新一代物联网中台,向下接入设备,向上承载应用。整合产业链上下游,向下整合终端设备接入与管理,向上延展物联网一站式应用开发,横向聚合增值能力,提供智能化数据分析,形成端到端完整链路物联网解决方案体系,打造物联网生态环境。
-
统一设备接入
提供MQTT、CoAP和泛协议标准接入SDK,支持直连、网关、云云对接等多种方式接入,随用随选。 -
统一物模型
提供灵活的物模型定义及全行业多品类标准模版,构建标准化数据模型,解决数据碎片化,简化设备与应用开发。 -
统一能力网关
支撑增值服务一体化,聚合LBS定位、智能语音等增值能力,提供多种物联网增值能力API。 -
一站式开发
面向行业场景,提供项目管理与应用开发工具,实现跨用户跨产品的资源整合,加速项目集成。 -
运维监控
提供设备生命周期管理、业务监控、链路监控等能力,实时反映感知设备接入情况,实现平台业务自动化运维和统一告警管理。 -
大数据分析
对物联网数据资产进行统一的管理、分析,助力物联网企业实现数据化,通过数据分析产生更多的业务价值。 -
数据可视化
提供丰富的可视化组件和免编程、拖拽式编辑方式,助力用户无缝对接海量数据,搭建可视化大屏应用。 -
边缘计算
提供安全可靠、低延时、低成本、易扩展、弱依赖的本地计算服务,打造“云-网-边-端-业” 一体化5G专网解决方案。 -
人工智能
围绕人脸识别、图像处理、视频分析等方向,打造20余种AI标准化能力,可实现API接口调用、算法移植、标准化应用等对外服务。 -
生态赋能
基于平台生态及合作伙伴各项技术能力,实现产品及业务全生命周期监管、认证和推广,为各主要行业提供一站式智能化解决方案。
二、Demo体验与SDK下载
2.1 创建产品
进入Studio平台后,展开菜单栏中的「设备接入与管理」,点击「设备管理」,进入设备列表页面。
点击「添加设备」,选中单个设备(默认方式)输入设备详情,点击「确定」创建设备。
按照提示填写产品的基本信息,进行产品创建;请按照提示尽可能完整、全面地填写相应内容,这样更方便您后期对产品进行管理,接入协议选择 MQTT
协议。
2.2 创建设备
进入Studio平台后,展开菜单栏中的「设备接入与管理」,点击「设备管理」,进入设备列表页面。
点击「添加设备」,选中单个设备(默认方式)输入设备详情,点击「确定」创建设备。
编辑「设备名称」与 「设备描述」,点击「确定」,完成添加设备。
2.3 SDK下载及修改
OneNET Studio 物模型设备接入 SDK 的使用,适用于“MCU+标准通信模组”或单板 SOC 的方案。SDK 由
固定代码包
和平台生成的配置文件
构成,用户根据使用的硬件平台集成 SDK,通过配置宏选择不同的接入协议,并调用相应 API 接口即可实现 OneNET Studio 的快速接入。
- SDK固定代码包下载:
https://open.iot.10086.cn/doc/v5/develop/detail/625
SDK目录结构:
从平台获取产品 ID
,设备名称
,设备密钥
:
然后根据实际获取到的产品 ID,设备名称和设备密钥修改onenet_studio_sdk\main.c
中的产品 ID,设备名称和设备密钥。
/*****************************************************************************/
/* Local Definitions ( Constant and Macro ) */
/*****************************************************************************/
/**
* 用户可在OneNET Studio创建新的产品,导入目录中model-schema.json定义的物模型后,
* 直接使用SDK内的tm_user.[ch]进行调试,同时还可以从平台导出tm_user.[ch]与SDK
* 内置的文件进行对比,熟悉物模型功能点的开发方式
*/
#define PRODUCT_ID "RTy8HXUHrv"
#define DEVICE_NAME "DHT11"
#define ACCESS_KEY "c+2NEaKvoE3IOFJolLQb8Cmw0eQyFdrE0YEsfpKOHSg="
然后根据创建产品时选择的接入协议 MQTT
,修改onenet_studio_sdk\config.h
中相对应的宏FEATURE_TM_PROTOCOL_MQTT 1
- SDK平台生成的配置文件下载:
平台端下载的配置文件包括tm_user.c
和tm_user.h
文件,用户需将其放入 SDK 的onenet\thing_model\user
目录中替换。
查看Linux系统位数 getconf LONG_BIT
,然后根据结果修改\onenet_studio_sdk\CMakeLists.txt
中的位数:
2.4 SDK编译及运行程序对接平台测试
将修改完的 SDK 工程文件夹 onenet_studio_sdk 放入 Linux
运行环境中 ,进入 onenet_studio_sdk
目录,执行 cmake .
命令生成 makefile
,再执行 make
进行编译,系统自动编译生成可执行文件,运行程序 aio.out
2.4.1 设备登录
平台查看终端已在线:
注:单设备5s登录不能超过3次。
2.4.2 数据上传
修改 main.c 中的 main()
函数。根据物模型生成的配置文件 tm_user.c
,加入当前电压、当前温度和温度报警等数据上传:
make clean
清理工程,并 make
重新编译执行 aio.out
在平台进行数据查看,可看到数据已上传:
详细内容可查看设备日志:
2.4.3 数据下发
-
写属性点
若用户在平台定义的属性功能点具备写属性,则配置文件会生成相应的写函数,平台进行数据下发时会进入对应的功能点写函数,用户需在函数中根据下发的数据执行相关逻辑,如控制开关、调整 LED 亮度等
。 -
读属性点
若用户在平台定义的属性功能点具备读属性,则配置文件会生成相应的读函数,平台进行数据下发时会进入对应的功能点读函数,用户需在函数中根据实际硬件设计获取功能点值设置到参数 val 中
。 -
服务调用
若用户在平台定义的服务功能点后,则配置文件会生成相应的服务调用函数,平台进行数据下发时会进入对应的服务调用回调函数,用户需在函数中根据服务定义,由输入参数运算得到输出参数,设置到 val 中
。
在设备调试中进行,数据下发测试:
在 tm_user.c
中的温度上限设置回调函数加入打印:
int32_t tm_prop_MaxTempSet_wr_cb(void *data)
{
float32_t val = 0;
tm_data_get_float(data, &val);
/** 根据变量val的值,填入下发控制逻辑 */
printf("val %f\n", val);
return 0;
}
终端查看指令下发成功:
三、MQTT协议接口介绍
帮助文档:https://open.iot.10086.cn/doc/v5/develop/detail/638
3.1 接口地址
设备接入支持标准MQTTV3.1.1
版本,支持TLS加密
通信协议 | 地址 | 端口 | 说明 |
---|---|---|---|
MQTT | studio-mqtt.heclouds.com | 1883 | 非加密端口接入 |
MQTTS | studio-mqtts.heclouds.com | 8883 | 加密端口接入 证书下载 |
3.2 通信主题
3.2.1 Topic概念
物联网平台中,服务端和设备端通过通信主题Topic实现消息通信
,设备可以通过发布
消息到系统 topic 调用服务接口,也可以订阅
系统 topic 用于接收服务消息通知,服务提供的系统 topic 见Topic列表。
3.2.2 Topic列表
物联网平台预定义物模型通信Topic,各物模型功能Topic消息的数据格式,见OneJSON数据格式。
Topic类以正斜线(/)进行分层,区分每个类目。其中,有两个类目为既定类目:${pid}
表示产品的产品id;${device-name}
表示设备名称;${identifier}
表示服务标识符
功能 | 类别 | 行为 | 描述 | Topic类 | 操作权限 |
---|---|---|---|---|---|
物模型通信Topic | 属性 | 设备属性上报 | 请求 | $sys/{pid}/{device-name}/thing/property/post | 发布 |
响应 | $sys/{pid}/{device-name}/thing/property/post/reply | 订阅 | |||
设备属性设置(同步) | 请求 | $sys/{pid}/{device-name}/thing/property/set | 订阅 | ||
响应 | $sys/{pid}/{device-name}/thing/property/set_reply | 发布 | |||
设备获取属性期望值 | 请求 | $sys/{pid}/{device-name}/thing/property/desired/get | 发布 | ||
响应 | $sys/{pid}/{device-name}/thing/property/desired/get/reply | 订阅 | |||
清除属性期望值 | 请求 | $sys/{pid}/{device-name}/thing/property/desired/delete | 发布 | ||
响应 | $sys/{pid}/{device-name}/thing/property/desired/delete/reply | 订阅 | |||
设备属性获取 | 请求 | $sys/{pid}/{device-name}/thing/property/get | 订阅 | ||
响应 | $sys/{pid}/{device-name}/thing/property/get_reply | 发布 | |||
事件 | 设备事件上报 | 请求 | $sys/{pid}/{device-name}/thing/event/post | 发布 | |
响应 | $sys/{pid}/{device-name}/thing/event/post/reply | 订阅 | |||
服务 | 设备服务调用 | 请求 | $sys/{pid}/{device-name}/thing/service/{identifier}/invoke | 订阅 | |
响应 | $sys/{pid}/{device-name}/thing/service/{identifier}/invoke_reply | 发布 |
3.3 MQTT客户端测试
查看 中国移动物联网开放平台OneNET学习笔记(2)——设备接入测试(MQTT协议)OneNET Studio篇
• 由 Leung 写于 2022 年 8 月 17 日