草庐IT

中国移动物联网开放平台OneNET学习笔记(2)——设备接入测试(MQTT协议)OneNET Studio篇

Leung_ManWah 2024-04-07 原文

一、创建产品与设备

1.1 创建产品

进入Studio平台后,展开菜单栏中的「设备接入与管理」,点击「设备管理」,进入设备列表页面。
点击「添加设备」,选中单个设备(默认方式)输入设备详情,点击「确定」创建设备。

按照提示填写产品的基本信息,进行产品创建;请按照提示尽可能完整、全面地填写相应内容,这样更方便您后期对产品进行管理,接入协议选择 MQTT 协议。

1.2 创建设备

进入Studio平台后,展开菜单栏中的「设备接入与管理」,点击「设备管理」,进入设备列表页面。
点击「添加设备」,选中单个设备(默认方式)输入设备详情,点击「确定」创建设备。

编辑「设备名称」与 「设备描述」,点击「确定」,完成添加设备。

二、配置MQTT客户端

MQTT X 是一款开源 5.0 桌面测试客户端,它支持在 macOS,Linux,Windows 操作系统上运行。

MQTT X 支持创建多个同时在线的 MQTT 客户端,方便用户快速测试 MQTT/TCP、MQTT/TLS 、MQTT/WebSocket 的连接/发布/订阅功能及其他 MQTT 协议特性。

  • 下载MQTT X

EMQ官网下载:https://www.emqx.com/zh/try?product=MQTTX


  • 打开MQTT X客户端,进入客户端配置页面

  • Client ID: 填写设备名称
  • 服务器地址: 填写 studio-mqtt.heclouds.com
  • 用户名: 填写产品ID
  • 密码: 填写token ,算法参见接入安全认证

Token由多个参数构成,如下表:

名称类型是否必须参数说明参数示例
versionstring参数组版本号,日期格式,目前仅支持"2018-10-31"2018-10-31
resstring访问资源resource格式为:products/{产品id}/devices/{设备名字}products/dafdfadfafdaf/devices/che1
etint访问过期时间expirationTime,单位秒,unix时间当一次访问参数中的et时间小于当前时间时,平台会认为访问参数过期从而拒绝该访问1537255523表示:北京时间 2018-09-18 15:25:23
methodstring签名方法signatureMethod支持hmacmd5、hmacsha1、hmacsha256sha1(代表使用hmacsha1算法)
signstring签名结果字符串signaturerBYeJXTp2q4V3C2aj4DBzjaydcw%3D

平台提供Token生成工具(点击下载

  • MQTT版本:必须为 3.1.1

三、设备连接

点击连接,此时,设备在页面处于在线状态。

四、属性上报

4.1 订阅属性上报结果通知topic

为了确保设备上传消息确实被平台所接受处理,设备可以订阅系统 topic 获取属性上报结果消息,属性上报回复topic为:$sys/{pid}/{device-name}/thing/property/post/reply


4.2 发布属性上报topic

属性上报的topic为:$sys/{pid}/{device-name}/thing/property/post
上报数据成功后,订阅的属性上报会返回success

OneJSON请求数据格式:

{
    "id": "123",
    "version": "1.0",
    "params": {
        "CurrentVoltage": {
            "value": 5.0,
            "time": 1660720877111
        },
        "CurrentTemperature": {
            "value": 23.6,
            "time": 1660720877111
        }   
    }
}

请求参数说明:

参数类型说明
idString消息id号,用户自定义,String类型的数字,长度限制13位。
versionString物模型版本号,可选字段,不填默认为1.0
paramsJsonObject请求参数,用户自定义,标准json格式。如以上示例中,设备上报了的两个属性Power和WF。具体属性信息,包含属性上报时间(time)和上报的属性值(value)。
timeLong属性值生成时间。该参数为可选字段,到毫秒级。根据您的业务场景决定消息中是否带时间戳。如果消息频繁,需根据时间戳判断消息顺序,建议消息中带有时间戳。
valueObject上报的属性值

我们进入产品管理-详情页面,选择两个属性的标识符,如当前电压 CurrentVoltage 和当前温度 CurrentTemperature



页面设备管理-设备详情,查看设备上报的属性数据。

五、属性下发

5.1 订阅设备属性设置topic

设备侧需要收到平台下发的数据,需要订阅:$sys/{pid}/{device-name}/thing/property/set


在页面运维监控-设备调试中-下行数据调试,可进行设置设备属性。

5.2 发布设备属性设置结果通知topic

topic: $sys/{pid}/{device-name}/thing/property/set_reply

{
    "id": "2",
    "code":200,
    "msg":"success"
}

其中id为下行数据的id,需要匹配,code为200代表成功,msg可以自定义。

六、事件上报

6.1 订阅事件上报结果通知topic

为了确保事件上传消息确实被平台所接受处理,设备可以订阅系统 topic 获取事件上报结果消息,属性上报回复topic为:$sys/{pid}/{device-name}/thing/event/post/reply
上报数据成功后,订阅的事件上报会返回success。

6.2 发布事件上报topic

上报事件topic为:$sys/{pid}/{device-name}/thing/event/post

OneJSON请求数据格式:

{
	"id": "123",
	"version": "1.0",
	"params": {
		"HumAlarm": {
			"value": {
				"Type": 1
			},
			"time": 1660720877111
		}
		
	}
}

请求参数说明:

参数类型说明
idString消息id号,用户自定义,String类型的数字,长度限制13位。
versionString物模型版本号,可选字段,不填默认为1.0
paramsJsonObject上报事件的参数。
timeLong属性值生成时间。该参数为可选字段,到毫秒级。根据您的业务场景决定消息中是否带时间戳。如果消息频繁,需根据时间戳判断消息顺序,建议消息中带有时间戳。
valueObject具体的事件信息。

我们进入产品管理-详情页面,选择一个事件的标识符,如湿度报警 HumAlarm



页面设备管理-设备详情,查看设备上报的事件数据。

七、获取设备期望值

7.1 订阅获取设备期望值结果通知topic

设备侧需要收到平台下发的期望值,需要订阅:$sys/{pid}/{device-name}/thing/property/desired/get/reply

7.2 发布设备获取期望值topic

获取设备期望值的topic为:$sys/{pid}/{device-name}/thing/property/desired/get

OneJSON数据格式:

{
    "id" : "123",
    "version":"1.0",
    "params" : [
        "MaxTempSet"
    ]
}

请求参数说明:

参数类型说明
idString消息id号,用户自定义,String类型的数字,长度限制13位。
versionString物模型版本号,可选字段,不填默认为1.0
paramsJsonObject获取属性期望的标识符列表。

页面设置期望值:



• 由 Leung 写于 2022 年 8 月 19 日

有关中国移动物联网开放平台OneNET学习笔记(2)——设备接入测试(MQTT协议)OneNET Studio篇的更多相关文章

  1. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  2. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  3. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  4. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. ruby-on-rails - 禁用设备的 :confirmable on-the-fly to batch-generate users - 2

    Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation

  7. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  8. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  9. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  10. ruby-on-rails - Rails 和 MQTT : Subscribe to topic in background at server startup? - 2

    我想在服务器启动时在我的Rails应用程序中订阅一个mqtt主题,并保持订阅始终处于事件状态和运行状态。我正在使用这个mqttgem进行mqtt通信:https://github.com/njh/ruby-mqtt这是我现在拥有的:在application.rb中:config.after_initializedomqttSub=BackgroundMQTT.newmqttSub.runend后台MQTT类:classMQTTSubscriberdefrunThread.newdoMQTT::Client.connect(:host=>'localhost',:port=>1883,)

随机推荐