OneNet平台2024版MQTT协议完整开发案例教程【MQTT数据流模式】

一、前言

此篇文章是以智慧路灯项目为例,完整的演示介绍 OneNet平台的开发

OneNet平台 是2024年的新版本,采用数据流模版为例。

方便大家,腾讯云IOTOneNet平台。 因为目前腾讯云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来区分项目
产品IDpid,鉴权信息组之一,创建产品时由平台分配的唯一产品识别码,用于标识唯一个产品,作为设备登录鉴权参数之一项目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/

进来先登录账号。

image-20240402000239430

(2)选择物联网开放平台

image-20240402000349407

(3)添加产品

image-20240402000427233

根据自己产品信息填写:

image-20240414205253934

image-20240414205321795

创建之后点击确定。

image-20240414205451513

创建完成。

image-20240414205515838

(4)产品ID

产品ID: 98uHEEv82D

2.3 创建设备

产品是属性抽象模型,产品下面的设备就表示具体的硬件设备,需要与具体的硬件关联。产品下可以创建很多的设。

(1)添加设备

image-20240414205553976

(2)填写设备信息

image-20240414205617817

创建完成。

image-20240414205636755

创建完成。

image-20240414205700691

(3)查看设备详情

添加完成之后,点击查看详情,查看设备的详细信息。

image-20240414205711245

image-20240414205731335

这里的产品ID、设备ID、设备密匙非常有用。后续MQTT登录参数需要使用。这里记录一下。

产品ID:  98uHEEv82D
设备ID:  2160589715
设备密匙:NThVNm9pQ3lYbmRvMTVhU0QyM0hXOFhmMXExRlE5T0g=
设备名称:dev1

2.4 添加数据流模板

(1)添加数据流模板

image-20240414205840406

添加数据流模板。

image-20240414205901410

(2)根据设备需求添加

当前设备里,与云端交互的状态有以下几个:

上传到物联网平台的数据属性。DHT11_T     	环境温度  
DHT11_H     	环境湿度    		
HumanBody_Flag  人体感应    		
BH1750      	环境光强    		  
LED_SW      	路灯开关           
MQ135       	空气质量            
LED_SW_Flag     路灯的状态  0故障  1正常
SOS_Info        SOS紧急求助    
gps             地图定位信息

开始创建:

image-20240414211328445

image-20240414211408744

下面依次创建即可。

(3)添加完毕

image-20240414211549661

添加完成:

DHT11_T环境温度
DHT11_H环境湿度%
HumanBody_Flag人体感应
BH1750环境光强Lux
LED_SW路灯开关
MQ135空气质量
LED_SW_Flag路灯的状态
SOS_InfoSOS紧急求助
gps地图定位信息

2.5 MQTT协议接入地址

当前智能鱼缸设备是采用MQTT协议与OneNet服务器进行通信。

MQTT物联网套件产品架构如下图所示:

image

接入地址说明:https://open.iot.10086.cn/doc/v5/develop/detail/248

在帮助文档页面,介绍了MQTT接入的地址和端口号。 当前设备是单片机,端口采用1883非加密端口。

image-20221205160655279

地址与端口总结如下:

上面的域名转为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

需要订阅什么数据,设备端按照下面的主题格式填写订阅即可。

image-20221205161140648

如果想知道设备所有相关信息,直接订阅$sys/{产品ID}/{device-name}/#即可。 (其中的PID就是产品ID)

$sys/98uHEEv82D/dev1/#

(2)主题发布

主题发布: 就是设备向平台上传数据。

帮助文档地址:https://open.iot.10086.cn/doc/mqtt/book/example/datapoints.html

文档里介绍了数据点上传的格式:

image-20221104113829775

根据当前设备,总结的格式如下:

发布主题: $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)生成密码需要的参数

生成密码的软件里需要填写的参数如下:

image-20240414213932354

(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)模拟设备登录

接下来根据软件的输入框提示,输入对应的参数,然后登录设备,订阅主题,发布主题即可完成一个流程的测试。

image-20240414214103237

(2)登录OneNet控制台查看设备

在设备列表页面,可以看到设备已经在线了。

image-20240414214130962

在设备详情页面可以看到设备模拟器刚才上传的数据:

image-20240414214207398

地图也可以查看。

image-20240414214229985

到此,设备的云平台已经配置完毕。

三、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
在这里插入图片描述
看这里就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497617.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起学Git【第六节:查看版本差异】

git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…

【小程序】wxss与rpx单位以及全局样式和局部样式

目录 WXSS 1. 什么是 WXSS 2. WXSS 和 CSS 的关系 rpx 1. 什么是 rpx 尺寸单位 2. rpx 的实现原理 3. rpx 与 px 之间的单位换算* 样式导入 1. 什么是样式导入 2. import 的语法格式 全局样式和局部样式 1. 全局样式 2. 局部样式 WXSS 1. 什么是 WXSS WXSS (We…

uniapp-vue3(下)

关联链接:uniapp-vue3(上) 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…

大数据技术-Hadoop(一)Hadoop集群的安装与配置

目录 一、准备工作 1、安装jdk(每个节点都执行) 2、修改主机配置 (每个节点都执行) 3、配置ssh无密登录 (每个节点都执行) 二、安装Hadoop(每个节点都执行) 三、集群启动配置&a…

ipad如何直连主机(Moonlight Sunshine)

Windows 被连接主机(Windows) 要使用的话需要固定ip,不然ip会换来换去,固定ip方法本人博客有记载Github下载Sunshine Sunshine下载地址除了安装路径需要改一下,其他一路点安装完成后会打开Sunshine的Web UI&#xff…

【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读

上一篇文章学会了stdin任意地址写【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-CSDN博客 本篇关注stdout利用手法,和上篇提及的手法有着异曲同工之妙 文章目录 前言 一、_IO_2_1_stdout_输出链,及利用思路 (一)_IO_2_1_std…

部署SenseVoice

依赖 Conda cuda pythor 查看GPU版本-CSDN博客 创建虚拟conda环境 conda create --name deeplearn python3.10 conda activate deeplearn git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice pip install -r requirements.txt pip install gradio pyth…

【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题

当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况,一般网页和桌面是可以正常编译的, 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…

yolov4算法及其改进

yolov4算法及其改进 1、yolov4介绍2、mosaic与mish激活函数2.1、mosaic数据增强2.2、Mish激活函数 3、backbone网络框架的改进4、PAN-FPN的介绍5、样本匹配和损失函数5.1、样本匹配5.2、YOLOV4损失函数5.2.1、GIOU loss5.2.2、DIOU loss5.2.3、CIOU Loss 1、yolov4介绍 改进点&…

Edge如何获得纯净的启动界面

启动Edge会出现快速链接,推广链接,网站导航,显示小组件,显示信息提要,背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…

目标检测文献阅读-YOLO:统一的实时目标检测(12.23-12.29)

目录 摘要 Abstract 1 引言 2 统一的检测 3 网络设计 4 训练 5 YOLOv5训练猫狗识别模型 5.1 项目代码整体结构介绍 5.2 数据集和预训练权重的准备 5.3 训练猫狗识别模型 5.3.1 修改数据配置文件 5.3.2 修改模型配置文件 5.3.3 训练模型 5.3.4 启用tensorbord查看…

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …

【模块系列】STM321.69TFT屏幕

前言 在翻翻自己的器件盒的时候,发现这块好久之前买的TFT屏了,想起还没有用STM32点亮过,手头上正好有立创的梁山派STM32F4,就试着按照网上的文章教程顺便移植个LVGL看看,然后就有了就本文。 代码工程命名的是LvglDemo&…

Unity中列表List使用出类似字典Dictionary的感觉

首先为什么会有这个标题? 因为字典很好用,只需要键就能拿到值,这种感觉是真的爽,新手最喜欢用了,遇事不决就字典,但是也有不好的地方,字典的内存开销比列表List要大,遍历也是List占…

Android中使用AIDL实现进程通信

前言 关于使用AIDL实现两个APP(跨进程)通信,我们通常把两个APP分别叫做服务端和客户端。本文不讲原理,只给最简易的案例。 一、服务端APP实现 1. 在src/main/aidl目录下新建一个.aidl文件,然后在.aidl文件中定义需要…

Mac安装多个版本node、java、python 等开发软件环境,安装、卸载、升级多个数据库

安装多个版本node、java、python 等开发软件环境 使用nvm(Node.js Version Manager)来管理多个Node.js版本。 使用jenv来管理多个Java版本。 使用pyenv来管理多个Python版本。 以下是安装和使用这些版本管理器的基本步骤: 1. 安装多个版本…

Ftrace: 深入探究Linux内核的追踪利器

文章目录 一、 前言二、Ftrace介绍2.1 Ftrace框架2.2 Ftrace的使用场景 三、Ftrace配置和控制接口四、Ftrace使用步骤1:配置内核2. 挂载debugfs3. 查看和配置Ftrace4. 开始追踪[可选]5. 查看追踪结果6. 保存追踪数据7. 清除追踪配置 五、实战演示5.1 function跟踪器…

人工智能基础软件-Jupyter Notebook

简介: Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。 Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直…

tesla openday数据驱动串讲

一、我写的目的 tesla的数据驱动全流程代表着现在(曾经)的sota,总结和沉淀他的方法总结后与自己现在的理念做一次对标,查漏补缺找到自己现在的主要问题,聚焦下一阶段的投入 二、主要方法 本文不讲解tesla的视觉技术…