一、前言
此篇文章是以智慧路灯项目为例
,完整的演示介绍 OneNet平台的开发
。
OneNet平台 是2024年的新版本,采用数据流模版为例。
方便大家,腾讯云IOT
转 OneNet平台
。 因为目前腾讯云IOT平台无法白嫖了,新用户已经无法免费使用了。
二、OneNet平台开发
2.1 OneNet平台介绍
OneNET-中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,实现物联网设备的数据获取,数据存储,数据展现。
OneNET资源模型如下图:
- 产品(product)
用户的最大资源集为产品,产品下资源包括设备、设备数据、设备权限、数据触发服务以及基于设备数据的应用等多种资源,用户可以创建多个产品。 - 设备(device)
设备为真实终端在平台的映射,真实终端连接平台时,需要与平台设备建立一一对应关系,终端上传的数据被存储在数据流中,设备可以拥有一个或者多个数据流。 - 数据流与数据点
数据流用于存储设备的某一类属性数据,例如温度,湿度,坐标等信息;平台要求设备上传并存储数据时,必须以key-value的格式上传数据,其中key即为数据流名称,value为实际存储的数据点,value格式可以,int、float、string、json等多种自定义格式。 - APIkey
APIkey为用户进行API调用时的密钥,用户访问产品资源时,必须使用该产品目录下对应的APIkey。 - 触发器(trigger)
触发器为产品目录下的消息服务,可以进行基于数据流的简单逻辑判断并触发HTTP请求或者邮件。 - 应用(application)
应用编辑服务,支持用户以拖拽控件并关联设备数据流的方式,生成简易网页展示应用。
OneNET常用的术语解释如下:
术语 | 解释 | 别名&曾用名 |
---|---|---|
产品 | OneNET平台资源(包括设备,APIKey,触发器,应用等)的集合,一个产品对应唯一的masterkey、产品ID,设备注册码,一个产品下包含多个具备同一特征的设备,多个设备之间的唯一性由SN来区分 | 项目 |
产品ID | pid,鉴权信息组之一,创建产品时由平台分配的唯一产品识别码,用于标识唯一个产品,作为设备登录鉴权参数之一 | 项目ID |
APIKey | 用于API调用时的鉴权参数 Master-APIkey:产品下唯一的管理员权限的APIKey,具有管理产品下所有设备的权限,在产品页面获取 Device-APIkey:设备级APIkey,具备与之关联的所有设备的访问权限,在设备详情获取 | |
accessKey | 安全性更高的访问密钥,用于访问平台时的隐性鉴权参数(非直接传输),通过参与计算并传输token的方式进行访问鉴权 | |
token | 安全性更高的鉴权参数,由多个参数组成,在通道中直接传输 | |
注册码 | 产品下唯一,可用于真实设备调用注册设备时,作为API的鉴权参数之一 | |
设备 | 归属于某一个产品下,是真实设备在平台的映射,用于和真实设备通过连接报文建立连接关系,平台资源分配的最小单位 | |
鉴权信息组 | 由设备ID,产品ID,设备SN组成的平台内设备唯一的参数组合,真实设备进行设备连接时需要携带有这些参数进行鉴权(参数要求根据设备接入协议不同有一定差异) | |
设备ID | 鉴权信息组之一,由平台分配的,在平台范围内设备唯一的识别号 | |
SN | 鉴权信息组之一,由硬件厂家自定义的设备唯一出厂序列号,创建/注册设备时作为设备参数,在产品内唯一,作为设备连接时的鉴权参数之一 | auth_info 设备编号 |
数据流 | 设备属性,可为设备单项数据属性,例如温度=10;也可为设备数据属性的组合,例如坐标=x:10 y:20 | |
数据流模板 | 产品下所有设备均具备的采集数据属性,例如空气质量检测仪均可以上报“PH2.5”“甲醛浓度”等数据 | |
数据点 | 设备每次上传到数据流中的数据 | |
脚本 | 平台支持用户自定义数据解析规则,解析二进制/字符串格式的数据(仅适用于TCP+脚本接入方式) |
2.2 创建产品
(1)登录账户
官网:https://open.iot.10086.cn/
进来先登录账号。
(2)选择物联网开放平台
(3)添加产品
根据自己产品信息填写:
创建之后点击确定。
创建完成。
(4)产品ID
产品ID: 98uHEEv82D
2.3 创建设备
产品是属性抽象模型,产品下面的设备就表示具体的硬件设备,需要与具体的硬件关联。产品下可以创建很多的设。
(1)添加设备
(2)填写设备信息
创建完成。
创建完成。
(3)查看设备详情
添加完成之后,点击查看详情,查看设备的详细信息。
这里的产品ID、设备ID、设备密匙非常有用。后续MQTT登录参数需要使用。这里记录一下。
产品ID: 98uHEEv82D
设备ID: 2160589715
设备密匙:NThVNm9pQ3lYbmRvMTVhU0QyM0hXOFhmMXExRlE5T0g=
设备名称:dev1
2.4 添加数据流模板
(1)添加数据流模板
添加数据流模板。
(2)根据设备需求添加
当前设备里,与云端交互的状态有以下几个:
上传到物联网平台的数据属性。DHT11_T 环境温度
DHT11_H 环境湿度
HumanBody_Flag 人体感应
BH1750 环境光强
LED_SW 路灯开关
MQ135 空气质量
LED_SW_Flag 路灯的状态 0故障 1正常
SOS_Info SOS紧急求助
gps 地图定位信息
开始创建:
下面依次创建即可。
(3)添加完毕
添加完成:
DHT11_T | 环境温度 | ℃ |
---|---|---|
DHT11_H | 环境湿度 | % |
HumanBody_Flag | 人体感应 | |
BH1750 | 环境光强 | Lux |
LED_SW | 路灯开关 | |
MQ135 | 空气质量 | |
LED_SW_Flag | 路灯的状态 | |
SOS_Info | SOS紧急求助 | |
gps | 地图定位信息 |
2.5 MQTT协议接入地址
当前智能鱼缸设备是采用MQTT协议与OneNet服务器进行通信。
MQTT物联网套件产品架构如下图所示:
接入地址说明:https://open.iot.10086.cn/doc/v5/develop/detail/248
在帮助文档页面,介绍了MQTT接入的地址和端口号。 当前设备是单片机,端口采用1883非加密端口。
地址与端口总结如下:
上面的域名转为IP之后信息如下:(如果设备不支持域名解析,可以直接填IP地址)
IP地址: 183.230.40.96
端口号: 1883
2.6 MQTT主题订阅与发布
MQTT协议是一种消息列队传输协议,采用订阅、发布机制,订阅者只接收自己已经订阅的数据,非订阅数据则不接收,既保证了必要的数据的交换,又避免了无效数据造成的储存与处理。因此在工业物联网中得到广泛的应用。
(1)主题订阅
主题订阅是设备订阅平台的消息,如果设备想知道平台下发的消息,就需要订阅主题。
帮助文档: https://open.iot.10086.cn/doc/mqtt/book/device-develop/protocol.html
需要订阅什么数据,设备端按照下面的主题格式填写订阅即可。
如果想知道设备所有相关信息,直接订阅$sys/{产品ID}/{device-name}/#
即可。 (其中的PID就是产品ID)
$sys/98uHEEv82D/dev1/#
(2)主题发布
主题发布: 就是设备向平台上传数据。
帮助文档地址:https://open.iot.10086.cn/doc/mqtt/book/example/datapoints.html
文档里介绍了数据点上传的格式:
根据当前设备,总结的格式如下:
发布主题: $sys/98uHEEv82D/dev1/dp/post/json发布消息:
{"id":123,"dp":{"DHT11_T":[{"v":20}],"DHT11_H":[{"v":10}],"BH1750":[{"v":30}],"MQ135":[{"v":10}],"LED_SW":[{"v":1}],"HumanBody_Flag":[{"v":0}],"LED_SW_Flag":[{"v":0}],"SOS_Info":[{"v":0}],"gps":[{"v":{"lon":108.89921,"lat":34.268685}}]}}
dp
对象里面就是需要上传的数据点字段。 这个数据点的名字就是自己创建数据流模板的时候创建的。
数据点是标准的JSON结构:
{"id": 123,"dp": {"DHT11_T": [{"v": 20}],"DHT11_H": [{"v": 10}],"BH1750": [{"v": 30}],"MQ135": [{"v": 10}],"LED_SW": [{"v": 1}],"HumanBody_Flag": [{"v": 0}],"LED_SW_Flag": [{"v": 0}],"SOS_Info": [{"v": 0}],"gps": [{"v": {"lon": 108.89921,"lat": 34.268685}}]}
}
2.7 MQTT三元组生成
设备登录OneNet采用的是MQTT协议,MQTT协议登录需要填写 登录信息:简称 MQTT三元组
。
(1)生成密码需要的参数
生成密码的软件里需要填写的参数如下:
(2)密匙生成需要的参数
产品ID: 98uHEEv82D
设备key:NThVNm9pQ3lYbmRvMTVhU0QyM0hXOFhmMXExRlE5T0g=
(3)使用Python代码生成MQTT密匙
下面提供了一份Python代码,实现此密码生成的算法。
建议大家,用我提供的代码,使用Python生成密码,不要使用OneNet自带的工具生成。
这样更加简单,不用考虑过期时间问题。非常的方便。你只需要安装好Python环境就可以了。
Python环境搭建: https://blog.csdn.net/xiaolong1126626497/article/details/118497618
完整的代码如下。`
import base64
import hmac
from urllib.parse import quote
import timedef token(id,access_key): version = '2018-10-31'res = 'products/%s' % id # 通过产品ID访问产品API# 用户自定义token过期时间et = str(int(time.time()) + 3600)# 签名方法,支持md5、sha1、sha256method = 'sha1'# 对access_key进行decodekey = base64.b64decode(access_key)# 计算signorg = et + '\n' + method + '\n' + res + '\n' + versionsign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)sign = base64.b64encode(sign_b.digest()).decode()# value 部分进行url编码,method/res/version值较为简单无需编码sign = quote(sign, safe='')res = quote(res, safe='')# token参数拼接token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)return tokenusername = "98uHEEv82D" # 产品ID
accesskey = "NThVNm9pQ3lYbmRvMTVhU0QyM0hXOFhmMXExRlE5T0g=" # accessKey
password = token(username, accesskey)
print(password)
(4)生成MQTT登录密匙
第一步: 填好参数
第二步:生成密匙
第三步,复制密匙,待用
version=2018-10-31&res=products%2F98uHEEv82D%2Fdevices%2Fdev1&et=99986799814791288&method=md5&sign=F39nUo4xXMeXxPfSerTfIQ%3D%3D
(5)MQTT登录参数总结
MQTT协议登录时,需要输入3个参数: MQTT-设备ID,MQTT-设备名称,MQTT-密码。
对应OneNet的参数:
MQTT- 设备ID -----> 就是OneNet的设备名称MQTT-设备名称-----> 就是OneNet的产品IDMQTT-密码------------> 就是OneNet的密匙工具生成的密码
下面是对本次的设备做总结:
IP地址: 183.230.40.96
端口号: 1883
clientId: dev1
username: 98uHEEv82D
password: version=2018-10-31&res=products%2F98uHEEv82D%2Fdevices%2Fdev1&et=99986799814791288&method=md5&sign=F39nUo4xXMeXxPfSerTfIQ%3D%3D订阅主题: $sys/98uHEEv82D/dev1/#发布主题: $sys/98uHEEv82D/dev1/dp/post/json发布消息:
{"id":123,"dp":{"DHT11_T":[{"v":20}],"DHT11_H":[{"v":10}],"BH1750":[{"v":30}],"MQ135":[{"v":10}],"LED_SW":[{"v":1}],"HumanBody_Flag":[{"v":0}],"LED_SW_Flag":[{"v":0}],"SOS_Info":[{"v":0}],"gps":[{"v":{"lon":108.89921,"lat":34.268685}}]}}
2.8 MQTT工具登录测试
前面已经介绍了MQTT协议登录需要用到的参数,以及订阅主题、发布主题的格式,接下来我们通过MQTT工具模拟设备登录OneNet平台,完成数据交互测试。
简单来说: 就是用软件来模拟实际的硬件,登录onenet平台,上传数据,走一下这个流程。
(1)模拟设备登录
接下来根据软件的输入框提示,输入对应的参数,然后登录设备,订阅主题,发布主题即可完成一个流程的测试。
(2)登录OneNet控制台查看设备
在设备列表页面,可以看到设备已经在线了。
在设备详情页面可以看到设备模拟器刚才上传的数据:
地图也可以查看。
到此,设备的云平台已经配置完毕。
三、OneNet可视化界面设计
关于中国移动的OneNet物联网开发平台
的可视化界面使用可以看视频教程:https://www.bilibili.com/video/BV12m421u7A5
四、腾讯云如何替换OneNet
(1)看这个文章:https://blog.csdn.net/xiaolong1126626497/article/details/144806792
这里就对应了,腾讯云平台文章,一样的内容。 如何得到 订阅、发布主题,以及MQTT登陆参数。
然后得到这些之后,如何替换到你的腾讯云工程之后。
看这个文章
https://blog.csdn.net/xiaolong1126626497/article/details/134781708
看这里就完成了。