如何解决AWS IoT Core Python SDK的属性错误及MQTT超时问题
解决AWS IoT Core Python SDK的两个常见错误
1. 修复'awscrt.mqtt' has no attribute 'OnConnectionFailuredata'错误
这个错误是属性名称拼写错误导致的。正确的回调事件名称是OnConnectionFailed,你应该是手误多写了data后缀。
示例代码里使用的是正确名称,你需要检查自己代码中引用该回调的部分,把错误的OnConnectionFailuredata替换为OnConnectionFailed。比如正确的回调绑定代码:
mqtt_connection = mqtt.Connection( client_bootstrap=client_bootstrap, client_id=client_id, host_name=endpoint, port=port, on_connection_failed=on_connection_failed_callback, # 此处为正确参数名 # 其他参数... )
如果是通过事件方式绑定,确保使用awscrt.mqtt.OnConnectionFailed这个正确属性。
2. 排查AWS_ERROR_MQTT_TIMEOUT超时错误
既然示例代码能正常运行,说明环境本身没问题,问题出在自定义设备的配置或参数上,按以下步骤排查:
- 校验设备凭证:确认设备证书、私钥、根CA证书正确有效:
- 证书在AWS IoT控制台中处于激活状态(未被吊销或禁用)
- 私钥与证书匹配,根CA证书使用AWS官方提供的版本(比如Amazon Root CA 1)
- 检查端点与端口:
- 确认AWS IoT Core的端点地址正确(从控制台>设置>设备数据端点获取)
- 使用8883端口(MQTT over TLS),若网络有代理或防火墙,确保该端口开放
- 连接参数检查:
- 避免重复使用同一个
client_id(AWS IoT不允许同一ID同时在线) - 调整
keep_alive_interval_secs参数,不要设置过短(建议默认300秒,网络不稳定时可适当延长)
- 避免重复使用同一个
- IoT Policy权限验证:
- 确认设备已附加正确的IoT Policy,Policy必须包含
iot:Connect权限,资源范围覆盖设备client ID,示例Policy:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }
- 确认设备已附加正确的IoT Policy,Policy必须包含
内容的提问来源于stack exchange,提问作者Joel Lusavuvu
相关产品推荐
相关产品推荐

