数据型项目

操作准备

核心概念

说明: 如果您还不了解MQTT协议,推荐您首先查看MQTT协议介绍,了解MQTT的工作原理。

  • 物接入项目(endpoint):简称“项目”,代表一个完整的物接入服务。一个百度智能云账号可以创建100个项目。

  • 物接入用户(thing):简称“用户”,在项目中创建的虚拟用户,每个项目下最多可以创建10000个用户。

  • 物接入身份(principal):简称“身份”,在项目中创建的虚拟设备的身份,每个设备可以绑定一个身份。每个项目下最多可以创建10000个身份。

  • 物接入策略(policy):简称“策略”,策略中定义了关于特定主题的收发权限,每个身份可以绑定一个策略。每个项目下最多可以创建10000个策略。

  • MQTT主题(topic):简称“主题”,每个策略都需要指定主题及主题对应的权限。该主题应用于MQTT客户端。物接入允许主题中带一个通配符“#”,例如“temperature/#”就是匹配前缀是temperature/的所有topic;单独的“#”表示匹配所有topic。

  • 实体设备:通过物接入连接的实体设备。

有关项目实例、用户、身份、策略和实体设备的关系,请参看下图:

数据型项目配置

创建物接入项目

详见快速入门-步骤三:创建项目

创建物接入用户

创建物接入设备前,应先完成创建物接入项目操作。

  1. 选择“产品服务>物接入IoT Hub”,进入项目列表。

  2. 点击项目名称,进入物接入项目页面。

  3. 点击“创建用户”,在弹出窗口中输入用户名称,并点击“下一步”。

    “项目Endpoint名称/用户名称”将作为实体设备连接云端的用户名。

  4. 为用户绑定身份。此处可以直接从下拉菜单中选择身份名称,如果没有可用身份,也可以选择“+创建”,创建新身份。

  5. 输入身份名称,并点击“下一步”。

  6. 为身份绑定策略。此处可以直接从下拉菜单中选择策略名称,如果没有可用策略,也可以选择“+创建”,创建新策略。

  7. 输入策略名称、主题及主题的权限,点击“下一步”完成用户创建。

    说明:每个策略下只能配置100个主题。

    每个策略可以创建多个主题,在创建策略弹框右侧,点击“+”可以绑定更多的主题。添加主题时,可以使用“#”或“+”作为通配符,关于通配符的介绍,请参看关于通配符的使用方法

    创建新用户后,系统将自动初始化该身份对应的密钥。该密钥将用于后续实体设备登录,请妥善保管。

您也可以使用IoT Hub CLI命令创建各项参数,详细过程请参考IoT Hub CLI

视频操作指导-创建物接入用户(无语音)

创建物接入身份

身份需要与用户绑定后才有意义。用户可以在创建用户的过程中创建身份(具体操作请参考创建物接入用户),也可以单独创建。

创建物接入用户前,应先完成创建物接入项目操作。

  1. 选择“产品服务>物接入IoT Hub”,进入项目列表。

  2. 点击项目名称,进入物接入项目页面。

  3. 点击左侧导航中的“身份列表”,进入身份列表。

  4. 点击“创建身份”,在弹出窗口中输入身份名称,并点击“下一步”。

  5. 为身份绑定策略。此处可以直接从下拉菜单中选择策略名称,如果没有可用策略,也可以选择“+创建”,创建新策略。

  6. 输入策略名称、主题及主题的权限,点击“下一步”完成身份创建。

    >说明:每个策略下只能配置100个主题。

    每个策略可以创建多个主题,在创建策略弹框右侧,点击“+”可以绑定更多的主题。添加主题时,可以使用“#”或“+”作为通配符,关于通配符的介绍,请参看关于通配符的使用方法

    创建新身份后,系统将自动初始化改身份对应的密钥。该密钥将用于后续实体设备登录,请妥善保管。

重新生成密钥

说明:重新生成密钥后,已经连接的用户会断开连接,请谨慎使用。

每个身份对应一个密钥,该密钥用于实体设备连接物接入服务。创建新身份后,系统将自动初始化改身份对应的密钥。如果用户忘记该密钥,可重新生成密钥。具体操作如下:

  1. 选择“产品服务>物接入IoT Hub”,进入项目列表。

  2. 点击项目名称,进入物接入项目页面。

  3. 点击左侧导航中的“身份列表”,进入身份列表。

  4. 找到指定的身份,点击“重新生成密钥”。此时系统将在弹出对话框中给出重新初始化后的密钥,请妥善保管。

创建物接入策略

策略需要与身份和用户绑定后才有意义。用户可以在创建用户的过程中创建策略(具体操作请参考创建物接入用户),也可以单独创建。

创建物接入策略前,应先完成创建物接入项目操作。

  1. 选择“产品服务>物接入IoT Hub”,进入项目列表。

  2. 点击项目名称,进入物接入项目页面。

  3. 点击左侧导航中的“策略列表”,进入策略列表。

  4. 点击“创建策略”,在弹出窗口中输入策略名称、主题及主题的权限,点击“确定”完成策略创建。

> 说明:重新生成密钥后,已经连接的用户会断开连接,请谨慎使用。

每个策略可以创建多个主题,在创建策略弹框右侧,点击“+”可以绑定更多的主题。添加主题时,可以使用“#”或“+”作为通配符,关于通配符的介绍,请参看关于通配符的使用方法

关于通配符的使用方法

MQTT通过“主题”实现将消息从发布者客户端送达至接收者客户端。“主题”是附加在应用消息上的一个标签,发布者客户端将“主题”和“消息”发送至代理服务器,代理服务器将该消息转发至每一个订阅了该“主题”的订阅者客户端。

一个主题名可以由多个主题层级组成,每一层通过“/”斜杠分隔开,例如:“baidu/F1”,“baidu/F2”。如果用户需要一次订阅多个具有类似结构的主题,可以在主题过滤器中包含通配符。通配符只可用在主题过滤器中,在发布应用消息时的主题名不允许包含通配符,主题通配符有两种:

  • #:表示匹配\>=0个层次,比如a/#就匹配a,a/,a/b,a/b/c。单独的一个#表示匹配所有,不允许a#或a/#/c等形式。

  • +:表示匹配一个层次,例如a/+匹配a/b,a/c,不匹配a/b/c。单独的一个+是允许的,但a+为非法形式。

通配符可以应用在物接入策略中和实体设备的订阅主题中,通过以下示例我们可以进一步了解通配符的作用。

我们使用下表的配置在云端创建四个物接入用户。

项目Endpoint名称 用户名称 身份名称 策略名称 主题 权限
endpoint01 thing01 principal01 policy01 baidu/# 发布/订阅
endpoint01 thing02 principal02 policy02 baidu/+/area1 发布/订阅
endpoint01 thing03 principal03 policy03 baidu/floor1 发布/订阅
endpoint01 thing04 principal04 policy04 baidu/floor1/area1 发布/订阅

通过MQTT.fx客户端模拟4台实体设备(Device01~Device04),分别使用thing01、thing02、thing03和thing04的用户名和密码连接物接入服务。

互通情况测试结果可参看下表:

发布用户 发布主题 订阅用户 订阅主题 是否可以互通
Device01 baidu/device02/area1 Device02 baidu/device02/area1
Device01 baidu/floor1 Device03 baidu/floor1
Device01 baidu/floor1/area1 Device04 baidu/floor1/area1
Device02 baidu/device01/area1 Device01 baidu/device01/area1
Device02 - Device03 -
Device02 baidu/floor1/area1 Device04 baidu/floor1/area1
Device03 baidu/floor1 Device01 baidu/floor1
Device03 - Device02 -
Device03 - Device04 -
Device04 baidu/floor1/area1 Device01 baidu/floor1/area1
Device04 baidu/floor1/area1 Device02 baidu/floor1/area1
Device04 - Device03 -

避免用广播方式向特定用户发送消息

在百度智能云创建一个物接入用户,具体配置如下:

项目Endpoint名称 用户名称 身份名称 策略名称 主题 权限
endpoint01 thing01 principal01 policy01 topic01 发布/订阅

如下图所示,在该场景中所有实体设备都通过相同的物接入用户接入,拥有相同的用户名、密码和权限。由于所有用户都订阅了相同的主题,当Device-A向Device-D发布消息时Device-B和Device-C也会收到。这种部署方式会对实体设备造成额外的处理负担,同时也会对当月的物接入消息配额造成不必要的损失。

在不增加额外配置的情况下,可以采取以下部署方式解决上述问题。在百度智能云创建一个物接入用户,具体配置如下:

项目Endpoint名称 用户名称 身份名称 策略名称 主题 权限
endpoint01 thing01 principal01 policy01 topic01/# 发布/订阅

由于在主题中使用了“#”通配符,因此每个用户可以订阅两个主题:

  • topic01/broadcast:用来订阅广播消息。

  • topic01/DeviceName:DeviceName需要替换为用户的实际名称并全局唯一,用来订阅单播消息。

在单播场景下,Device-A向Device-D发送消息,Device-B和Device-C都不会接收到。

在广播场景下,Device-A发布的消息可以同时被Device-B、Device-C和Device-D接收到。

连接测试

创建设备后,可以在控制台通过“连接测试”功能模拟MQTT客户端,验证物接入的连接情况。用户也可以通过MQTT.fx验证连接情况。

在执行连接测试前,必须先创建物接入设备

  1. 选择“产品服务>物接入IoT Hub”,进入实例列表。

  2. 点击实例名称,进入物接入实例页面。

  3. 点击“连接测试”,进入测试页面,填写“身份密钥”,点击“connect”,此时可看到设备状态由“未连接”变成“运行中”。

有关其它参数的介绍,如下表所示:

参数名称 描述 必要性
主机名称 实例地址,yourendpoint.mqtt.iot.gz.baidubce.com 必填
端口 wss端口8884 必填
用户ID 客户端ID,用户自定义。在同一个实例下,每个实体设备需要有一个唯一的ID,不同实体设备使用同一个client id建立连接会导致其它连接下线。用户ID只支持英文大小写字母,数字0-9,中划线和下划线,不支持其它字符。 必填
用户名 成功创建thing后生成的用户名称,yourendpoint/设备名称 必填
密码 与thing绑定的principal的密码。成功创建身份principal后系统会自动生成的密码 必填
Keep Alive* 连接保持时长,单位为秒 必填
SSL SSL安全验证 必填
Clean Session* 清理会话 选填
Last-Will Topic 遗嘱消息主题 选填
Last-Will QoS 遗嘱QoS,发布遗嘱消息时使用的服务等级 选填
Last-Will Retain 遗嘱保留,如果勾选遗嘱保留,遗嘱消息发布时将会保留且发送给新的订阅消息 选填
Last-Will Messsage 遗嘱消息,在网络连接关闭后,IoT Hub将会自动发布本条遗嘱消息 选填

*Keep Alive:MQTT协议是一个客户端和服务器端长连接的过程。Keep Alive timer以秒为单位,定义的是从客户端相邻两次接收消息的最大间隔时间,也可以说是一次长连接的保持时间。因此,客户端每隔一段时间就需要向服务器发送数据来保持连接(相当于心跳报文的功能),服务器接收到连接信息后,会反馈一个响应ACK。当服务器端在Keep Alive timer的1.5倍时间内都没有收到来自客户端的任何消息,就会默认为客户端断开连接。

*Clean Session:如果该位被设置为false,则该连接被认为是持久连接,其具体表现为:当该客户断开后,任何订阅的主题和QoS被设置为1或2的信息都会保存,直到该客户端再次连接上server端,物接入服务支持将该消息保留24小时。若“clean session”被设置为true,当该客户断开后,所有的订阅主题都会被移除。

Last-Will当一个客户端断开连接的时候,它希望客户端可以发送它指定的消息。该消息和普通消息的结构相同。通过设置Last-Will Topic和Last-Will Message实现。(遗嘱消息的触发条件有哪些?

连接成功后,可以设置消息订阅和发布,通过自发自收的方式测试连接,如下图所示:

基于证书的双向认证

天工物接入支持双向认证,在创建身份的时候可以选择“用户名密码方式”连接,或者PKI证书连接,设备嵌入证书即可和云端连接。此时PKI证书不再额外收费。

用户可以使用PKI证书实现和云端的TLS双向链接,保证链路层通道层的加密。

图片

百度智能云IoT的PKI证书服务还支持客户为自己的设备创建CA、证书管理等服务,更多使用百度PKI证书进行设备和云端双向认证的方式,请参考PKI产品文档

物接入双向认证操作流程如下:

  1. 创建身份:创建项目实例后,进入项目,选择身份列表,创建身份,选择证书认证。点击下一步

    图片

  2. 选择绑定策略/创建策略。点击下一步。

    图片

  3. 配置确认后,生成对应证书,点击下载。

    图片

    会生成如截图的证书:

    图片

  4. 设备嵌入证书,在此以MQTT.fx客户端为例。在Connection Profile中选择SSL/TLS。

    注意:密码换为证书,用户名仍然需要填写

    图片

  • CA File:TLS认证文件下载,点此下载
  • Client Certificate File:将CERTIFICATE这段复制到文本中另存为,导入路径

  • Client Key File:将PRIVATE KEY这段复制到文本中另存为,导入路径

    图片

鉴于不同客户端嵌入证书的方式不同,我们将CERTIFICATE、PUBLIC KEY、PRIVATE KEY、都集成在同一个文本中。同时在JAVA SDK也支持创建证书、重置证书。详情请参考Java SDK

数据型消息存储配置

用户可以通过规则引擎将物接入服务接收到的消息转存至BOS或者百度Kafka进行存储。

规则引擎为免费服务,有关规则引擎的详细操作,请参看规则引擎-操作指南