目录
我以前上课都是用巴法云服务器来演示MQTT的,前几天因为测试工业互联网关使用了华为的IoTDA,觉得也不算太复杂,今天尝试用MQTTX连接华为云,看看要不要在课上讲这个。
华为IoTDA平台
华为云设备接入IoTDA指的是设备接入服务(IoT Device Access),是华为云的物联网平台提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成。
有关华为IoTDA平台上如何创建产品和设备,请参见前面写得博文:【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备-CSDN博客。
MQTTX连接参数的设置
MQTTX所需要的连接参数可以在云平台的左栏中 "设备→所有设备",然后选定要使用的设备,进入设备详情后,选择"MQTT连接参数:查看" 中找到。我选择非SSL模式,这里的端口信息一定要选择1883。如果要使用SSL,则端口为8883,则在服务器和MQTTX中都需要配置CA证书。
然后,我们就可以根据以上参数设置MQTTX的连接参数。
物模型的构建
当产品下定义物模型,设备按照物模型定义呈现上报的属性数据,服务器就会自动进行解析,从而方便进行数据处理。
在线开发产品模型前需要创建产品。创建产品需要输入产品名称、协议类型、数据格式、所属行业和设备类型等信息,产品模型会使用这些信息作为设备能力字段取值。物联网平台提供了标准模型和厂商模型,这些模型涉及多个领域,模型中提供了已经编辑好的产品模型文件,您可以根据自己的需要对产品模型中的字段进行修改和增删;如果选择自定义产品模型,则需要完整定义产品模型。
操作步骤如下:
-
访问设备接入服务,单击"管理控制台"进入"设备接入"控制台。
-
单击左侧导航栏的"产品",在产品列表中,找到对应的产品,单击产品进入产品详情页。
-
在产品详情模型定义页面,单击"自定义模型",添加服务。
-
输入"服务ID"、"服务类型"和"服务描述",然后单击"确认"。
- "服务ID":采用首字母大写的命名方式。比如:WaterMeter、温湿度。
- "服务类型":建议和服务ID保持一致。
- "服务描述":比如路灯上报的环境光强度和路灯开关状态的属性。
添加服务后,在"添加服务"区域,对属性和命令进行定义。每个服务下,可以包含属性和命令,也可以只包含其中之一,请根据此类设备的实际情况进行配置。
-
单击步骤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
字段的值存储在事件记录中。