物接入IoT Hub

    数据型项目配置

    创建物接入项目

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

    创建物接入用户

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

    1. 选择“产品服务>物接入IoT Hub”,进入项目列表。
    2. 点击项目名称,进入物接入项目页面。
    3. 点击“创建用户”,在弹出窗口中输入用户名称,并点击“下一步”。

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

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

      image.png

    5. 输入身份名称,并点击“下一步”。
    6. 为身份绑定策略。此处可以直接从下拉菜单中选择策略名称,如果没有可用策略,也可以选择“+创建”,创建新策略。
    7. 输入策略名称、主题及主题的权限,点击“下一步”完成用户创建。

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

      image.png

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

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

      image.png

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

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

    创建物接入身份

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

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

    1. 选择“产品服务>物接入IoT Hub”,进入项目列表。
    2. 点击项目名称,进入物接入项目页面。
    3. 点击左侧导航中的“身份列表”,进入身份列表。

      image.png

    4. 点击“创建身份”,在弹出窗口中输入身份名称,并点击“下一步”。
    5. 为身份绑定策略。此处可以直接从下拉菜单中选择策略名称,如果没有可用策略,也可以选择“+创建”,创建新策略。

      image.png

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

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

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

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

      image.png

    重新生成密钥

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

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

    1. 选择“产品服务>物接入IoT Hub”,进入项目列表。
    2. 点击项目名称,进入物接入项目页面。
    3. 点击左侧导航中的“身份列表”,进入身份列表。
    4. 找到指定的身份,点击“重新生成密钥”。此时系统将在弹出对话框中给出重新初始化后的密钥,请妥善保管。

      image.png

    创建物接入策略

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

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

    1. 选择“产品服务>物接入IoT Hub”,进入项目列表。
    2. 点击项目名称,进入物接入项目页面。
    3. 点击左侧导航中的“策略列表”,进入策略列表。

      image.png

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

    说明:重新生成密钥后,已经连接的用户会断开连接,请谨慎使用。 策略新增或变更后,针对已有连接,重新并重新连接后才会适配新策略

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

    image.png

    关于通配符的使用方法

    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接收到。

    上一篇
    核心概念
    下一篇
    连接测试