python-3.x - 为 GCP IOT Core 和 PUB/SUB 运行 cloudiot_pubsub_example_server.py 代码时出现 403 错误
问题描述
我正在尝试 GCP Python SDK 的 cloudiot_pubsub_example_server.py 示例代码。为了概述,有两个代码客户端和服务器。客户端发布到 GCP PUB/SUB 中的主题并更新或发布随机温度。服务器订阅此主题并接收温度。服务器还发布到客户端的配置主题,并在特定温度升高或降低时打开或关闭风扇。
当我使用提供的所有凭据运行这两个代码时,客户端正在发布温度,服务器被订阅并获取临时数据。但是当服务器发布到配置主题并将 FAN 发送到ON 或 OFF时,我得到:
执行 ModifyCloudToDeviceConfig 时出错:<HttpError 403 在请求https://cloudiot.googleapis.com/v1/projects/project-aura-249003/locations/asia-east1/registries/Linux_PC/devices/linux_pc:modifyCloudToDeviceConfig?alt=json时返回“调用者没有权限”。详细信息:“调用者没有权限”>
为了执行服务器代码,我使用了以下命令:
python3 cloudiot_pubsub_example_server.py --project_id=project-aura-249003 --pubsub_subscription=temp
为了执行客户端代码,我使用了以下命令:
python3 cloudiot_pubsub_example_mqtt_device.py --project_id=project-aura-249003 --registry_id=Linux_PC --device_id=linux_pc --private_key_file=rsa_private.pem --algorithm=RS256 --ca_certs=roots.pem --cloud_region=asia-east1
您可以在此处找到执行代码的所有文件:https ://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/iot/api-client/mqtt_example
我也提供了roots.pem文件请帮我解决这个问题,403错误与一些身份验证问题有关。
我在这里想念什么?
解决方案
确保您之前已定义环境变量或在运行时GOOGLE_APPLICATION_CREDENTIALS='your_service_account_credentials.json'
包含该选项。--service_account_json="your_service_account_credentials.json"
cloudiot_pubsub_example_server.py
您的 python 命令应如下所示:
python3 cloudiot_pubsub_example_server.py --project_id=project-aura-249003 --pubsub_subscription=temp --service_account_json="your_service_account_credentials.json"
还要根据端到端 IoT 教程仔细检查您的关联服务帐户是否具有EDITOR角色。
我确实遵循了端到端的物联网教程,没有遇到任何问题。一切都在云壳中完成。在学习本教程之前,我创建了以下内容:
- 发布/订阅主题
- 发布/订阅订阅
- 设备注册表
运行cloudiot_pubsub_example_mqtt_device.py:
python3 cloudiot_pubsub_example_mqtt_device.py --project_id=my-project-id --registry_id=my-registry --device_id=device-****** --private_key_file=rsa_private.pem --algorithm=RS256 --ca_certs=roots.pem
cloudiot_pubsub_example_mqtt_device.py的输出:
运行cloudiot_pubsub_example_server.py:
python3 cloudiot_pubsub_example_server.py --project_id=my-project-id --pubsub_subscription=my-sub-****** --service_account_json="my_credentials.json"
cloudiot_pubsub_example_server.py的输出:
推荐阅读
- javascript - 附加后如何从子类中删除父类样式
- azure - 使用 MSI 与 Azure 文件共享的连接不起作用
- dll - 为 MT4 或 MT5 创建 DLL?
- python - 大协方差(半正)矩阵的特征值
- ios - Web 和移动站点图标无法在 ios 设备中正确加载
- python - 我在 sql 中有两列,想分别将列表值插入到它们中。我如何用 pyhton 做到这一点?
- jmeter - 在 Jmeter 中 - 如何获取加载页面的时间
- java - 自动完成文本框第一个选项选择
- c# - Selenium C# 与 Neoload 性能测试工具的集成
- android - Android 连接到数据库以存储用户登录/注册详细信息