AWS IoT 设备如何显示为 "connected"

How does an AWS IoT device show as "connected"

我正在关注 AWS IoT using MQTT herepubsub.py 示例代码。特别是我使用 awsiotsdk.

连接到 MQTT

该示例工作正常,但它作为通用客户端而非特定设备连接到 MQTT。

我想连接到 MQTT 以作为特定设备发布和订阅。特别是我希望能够查询已连接的设备并看到该设备出现。

在演示代码中,我看到包含 --client-id。默认情况下,它使用 UUID 为演示生成唯一的客户端 ID。我尝试将 client-id 设置为 ARN arn:aws:iot:us-west-2:123456789012:thing/test

我want/expect看到的是下面的搜索显示连接thing。当 pubsub 演示为 运行 时,查询返回为空。它是空的这一事实告诉我,pubsub 示例作为 MQTT 客户端而不是设备进行连接。如何作为设备连接?

aws iot search-index --query-string connectivity.connected:true
{
    "things": []
}

请注意,我已通过 AWS CLI 启用 thingConnectivityIndexingMode=STATUS


来自评论的其他详细信息:

来自文档:

When the message broker receives a message published by a device or client, it republishes that message

看来我总是作为“客户端”连接到 MQTT(通过 WSS)。我看不到如何作为“设备”进行连接。关于这一点,文档非常不明确。 pubsub.py 示例似乎连接为通用“客户端”,而不是特定“设备”。

我可以并且已经通过 AWS 控制台或 boto3 注册了设备。

clientId 必须等于在注册表中注册的事物的事物名称。

The connectivity status data is indexed only for connections where the client ID has a matching thing name.

https://docs.aws.amazon.com/iot/latest/developerguide/aggregation-troubleshooting.html