1

为了在 Google Cloud IoT Core 中创建客户端,我最初只使用:

client = mqtt.Client(client_id=('projects/{}/locations/{}/registries/{}/devices/{}'
                    .format(args.project_id, args.cloud_region,
                            args.registry_id, args.device_id)))

虽然,在许多文档代码示例中,我看到使用了下面给出的这种方式和另一种方式:

client = get_client(service_account_json)

为了能够使用上述内容,我必须生成另一个 JSON 密钥。无法理解这两个客户之间的本质区别是什么。另外,我使用了第二种方法来获取设备的状态。

4

2 回答 2

1

第一种方法是使用 MQTT 网桥

第二种是基于不同的 API 使用不同的访问方法。从获取设备状态数据

此示例使用Python 的 Google API 客户端库

client = get_client(service_account_json)
于 2019-03-12T11:39:54.503 回答
1

这些来自两个不同的 API。一个是客户端(本身没有 API,它只是设备 [客户端] 用来连接到 IoT Core 的方法),另一个是 IoT Core 管理方面的事情。

MQTT 桥用于将设备连接到 IoT Core 以发送遥测数据。这是您的第一个片段中的 mqtt 客户端代码。没有用于连接设备以发送遥测数据的 API,IoT Core 只是一个 MQTT(或 HTTP)端点。在上述情况下,您可能还获得了将 client.publish 到 mqtt.googleapis.com:8883 的代码。通过 MQTT 将设备连接到 IoT Core。

第二个是调用 IoT Core Admin SDK 所需要使用的。例如,如果您有一个脚本想要更新IoT Core 控制的设备上的配置。

您必须生成的 JSON 密钥用于向 API 服务进行身份验证。这里有关于认证部分的详细信息。在使用 MQTT 的设备中,没有 API 身份验证,它在该实例中使用 JWT 进行身份验证,但是对于管理 SDK,您需要使用 Cloud Project 进行身份验证才能发出这些类型的管理命令。

所以 TL;DR,在您的第一个片段中,这是您正在创建的 MQTT 客户端。在第二个片段中,它是一个 Google Cloud Project (GCP) 客户端。首先是用于向 IoT Core 发送数据的设备,其次是用于向 GCP 发出管理类型调用。

于 2019-03-12T15:12:59.153 回答