MQTTX连接华为云IoTDA

目录

华为IoTDA平台

MQTTX连接参数的设置

物模型的构建

属性上报

基本数据格式

时戳


我以前上课都是用巴法云服务器来演示MQTT的,前几天因为测试工业互联网关使用了华为的IoTDA,觉得也不算太复杂,今天尝试用MQTTX连接华为云,看看要不要在课上讲这个。

华为IoTDA平台

华为云设备接入IoTDA指的是设备接入服务(IoT Device Access),是华为云的物联网平台提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成。

有关华为IoTDA平台上如何创建产品和设备,请参见前面写得博文:【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备-CSDN博客

MQTTX连接参数的设置

MQTTX所需要的连接参数可以在云平台的左栏中 “设备→所有设备“,然后选定要使用的设备,进入设备详情后,选择”MQTT连接参数:查看” 中找到。我选择非SSL模式,这里的端口信息一定要选择1883。如果要使用SSL,则端口为8883,则在服务器和MQTTX中都需要配置CA证书。

然后,我们就可以根据以上参数设置MQTTX的连接参数。

物模型的构建

当产品下定义物模型,设备按照物模型定义呈现上报的属性数据,服务器就会自动进行解析,从而方便进行数据处理。

在线开发产品模型前需要创建产品。创建产品需要输入产品名称、协议类型、数据格式、所属行业和设备类型等信息,产品模型会使用这些信息作为设备能力字段取值。物联网平台提供了标准模型和厂商模型,这些模型涉及多个领域,模型中提供了已经编辑好的产品模型文件,您可以根据自己的需要对产品模型中的字段进行修改和增删;如果选择自定义产品模型,则需要完整定义产品模型。

操作步骤如下:

  1. 访问设备接入服务,单击“管理控制台”进入“设备接入”控制台。
  2. 单击左侧导航栏的“产品”,在产品列表中,找到对应的产品,单击产品进入产品详情页。
  3. 在产品详情模型定义页面,单击“自定义模型”,添加服务。
  4. 输入“服务ID”、“服务类型”和“服务描述”,然后单击“确认”。

    • “服务ID”:采用首字母大写的命名方式。比如:WaterMeter、温湿度。
    • “服务类型”:建议和服务ID保持一致。
    • “服务描述”:比如路灯上报的环境光强度和路灯开关状态的属性。

    添加服务后,在“添加服务”区域,对属性和命令进行定义。每个服务下,可以包含属性和命令,也可以只包含其中之一,请根据此类设备的实际情况进行配置。

  5. 单击步骤4新增的服务ID,在展开的页面单击“新增属性”,在弹出窗口中配置属性的各项参数,然后单击“确定”。

    参数

    说明

    属性名称

    建议采用驼峰形式,如batteryLevel、internalTemperature。

    数据类型

    • int:当上报的数据为整数时,可配置为此类型。
    • long: 当上报的数据为长整型时,可配置为此类型。
    • decimal:当上报的数据为小数时,可配置为此类型。配置“经纬度”属性时,数据类型建议使用“decimal”。
    • string:当上报的数据为字符串、枚举值时,可以配置为此类型。如果为枚举值,值之间需要用英文逗号(“,”)分隔。
    • dateTime:当上报的数据为日期时,可以配置为此类型。

      此类型属性上报格式推荐样例:2020-09-01T18:50:20Z或者2020-09-01T18:50:20.200Z

    • jsonObject:当上报的数据为JSON结构体时,可以配置为此类型。
    • enum: 当上报的数据为枚举值时,可配置为此类型。

      搭配参数enumList格式填写,比如状态属性的enumList填写为OPEN,CLOSE,那么属性上报格式样例为"OPEN"或者"CLOSE"

    • boolean: 当上报的数据为布尔值时,可配置为此类型。

      此类型属性上报推荐格式样例:true/false 或者 0/1

    • stringList: 当上报的数据为字符串数组时,可配置为此类型。

    此类型属性上报推荐格式样例:["str1","str2","str3"]

    访问权限

    • 可读:通过接口可以查询该属性。
    • 可写:通过接口可以修改该属性值。

    取值范围

    请根据此类设备的实际情况进行配置。

    步长

    单位

属性上报

属性上报的topic是$oc/devices/<deviceid>/sys/properties/report,其中的deviceid用真实的设备ID代替。

基本数据格式

数据的基本格式如下:

{
	"services": [
		{
			"serviceId": "温湿度",
			"properties": {
				"温度": 20,
				"湿度": 4
			},
			"event_time": "20230321T081126Z" 
		}
	]
}

其中 event_time字段是时戳,可以省略。如果省略,服务器会把接收时间作为时戳。

我们可以用MQTTX发送上面的信息给服务器。

华为IoT服务器收到属性上报后,会自动解析其中的字段,并显示。

时戳

华为IoT云中的event_time字段,如20230321T081126Z,是一个遵循ISO 8601日期和时间表示法的字符串。这种格式被广泛应用于各种系统和服务中,以确保日期和时间的全球一致性和可解析性。

ISO 8601是一种国际标准,用于表示日期和时间。它定义了一种全球通用的日期和时间表示方法,以避免不同国家和地区之间的混淆。ISO 8601日期和时间字符串的基本格式是:

YYYYMMDDThhmmssZ
  • MM:两位数的月份(01=1月,...,12=12月)
  • DD:两位数的日(01=1日,...,31=31日)
  • T:日期和时间之间的分隔符
  • hh:两位数的小时(00=午夜,23=晚上11点)
  • mm:两位数的分钟(00=0分钟,59=59分钟)
  • ss:两位数的秒(00=0秒,59=59秒)
  • Z:表示协调世界时间(UTC),也称为格林尼治标准时间(GMT)

这个时间通常是由事件发生的系统或设备自动生成的。当某个事件(如设备上报数据、状态变化等)发生时,系统会根据当前的UTC时间,按照ISO 8601格式生成一个时间戳,并将其作为event_time字段的值存储在事件记录中。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 19:00:03       140 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 19:00:03       154 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 19:00:03       129 阅读
  4. Python语言-面向对象

    2024-07-21 19:00:03       141 阅读

热门阅读

  1. 简单介绍什么是投影仪及投影仪的工作原理

    2024-07-21 19:00:03       25 阅读
  2. websocket

    websocket

    2024-07-21 19:00:03      21 阅读
  3. 基于ListBox制作一个好看的侧边菜单导航栏

    2024-07-21 19:00:03       25 阅读
  4. org.mybatis和JDBC有什么关系?

    2024-07-21 19:00:03       29 阅读
  5. JVM调优 jstat 与 jstack

    2024-07-21 19:00:03       27 阅读
  6. 前端入门(五)之练习表格的增删改查

    2024-07-21 19:00:03       30 阅读
  7. MySQL分库分表实现

    2024-07-21 19:00:03       26 阅读