我成功地将Raspberry Pi连接到Cloud IoT,并且能够轻松切换设备。但是过了一会儿,根据我的说法,设备超时了,并显示“('on_disconnect','1:内存不足。')”,并且连接状态设置为False。因此,我重新安装了git软件包(社区文件夹),并重复了相同的步骤,然后我又成功了。但是,显然,一段时间后会出现相同的错误。我似乎无法将其范围缩小到导致问题的原因。我是新来的,所以让我知道是否应该添加其他信息。
编辑:由于我试图缩小它的范围,所以我发现在发生上述问题时重新运行“ export GOOGLE_CLOUD_PROJECT = your-project-id-123”命令,可以帮助我正确地建立连接(无需更改任何东西)。尽管这并不能阻止“内存不足”问题,但现在可以使用。
编辑:https://github.com/GoogleCloudPlatform/community/tree/master/tutorials/cloud-iot-gateways-rpi 链接到文件夹
答案 0 :(得分:0)
我帮助这个问题的作者在另一个平台上解决了这个问题,但是我将解决方案重新发布以供参考。
问题在于,OP遵循的教程中生成的JWT在大约一个小时后过期,并且还没有包含过期后刷新令牌的代码。有关创建和刷新JWT的更多信息,请参见here。
edit:根据要求,添加用于刷新jwts的代码段。在这种情况下,get_client
将创建MQTT连接,该连接还将处理JWT的创建。假设JWT在60分钟后过期,但是在Cloud IoT Core中,JWT的有效期长达24小时。
seconds_since_issue = (datetime.datetime.utcnow() - jwt_iat).seconds
if seconds_since_issue > 60 * jwt_exp_mins:
print('Refreshing token after {}s').format(seconds_since_issue)
jwt_iat = datetime.datetime.utcnow()
client = get_client(
args.project_id, args.cloud_region,
args.registry_id, args.device_id, args.private_key_file,
args.algorithm, args.ca_certs, args.mqtt_bridge_hostname,
args.mqtt_bridge_port)
答案 1 :(得分:0)
对于任何尝试MQTT example的人来这里
在我的情况下,问题是我只是忘记了在CLI示例中正确设置--project
标志,该标志将项目名称解析为None
,这显然在上游产生了此错误。因此,您可能要检查项目设置是否正确。顺便说一句,区域也一样,这可能导致连接被拒绝。