要在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密钥。无法理解两个客户之间的本质区别。此外,我使用第二种方式获取设备的状态。
这些来自两个不同的API。一个是客户端(没有API本身,它只是设备[客户]用来连接到IoT Core的方法),另一个是物联网核心管理方面的事情。
MQTT bridge用于将设备连接到IoT Core以发送遥测数据。这是你的第一个片段中的mqtt客户端代码。设备无法连接以发送遥测,IoT Core只是一个MQTT(或HTTP)端点。在上面的例子中,你可能还有代码在那里做client.publish到mqtt.googleapis.com:8883。这通过MQTT将设备连接到IoT核心。
第二个是您需要使用的,以便调用IoT Core Admin SDK。例如,如果您有一个脚本想要在由IoT Core控制的设备上使用update the config。
您必须生成的JSON密钥是使用API服务进行身份验证。有关认证件here的详细信息。在使用MQTT情况的设备中,没有API身份验证,它使用JWT在该实例中进行身份验证,但对于admin SDK,您需要使用Cloud Project进行身份验证才能发出这些管理命令。
所以TL; DR,在你的第一个片段中,那是你正在创建的MQTT客户端。在第二个片段中,它是Google Cloud Project(GCP)客户端。首先是设备向IoT Core发送数据,第二个是向GCP发出管理类型调用。
第一种方法是using the MQTT bridge。
第二个是使用基于不同API的不同访问方法。来自Getting device state data:
此示例使用Google API Client Library for Python。
client = get_client(service_account_json)