出现此问题可能是因为订阅的主题不存在或订阅者不具备访问该主题的权限。为了解决此问题,您可以首先确保您的订阅主题存在并且订阅者具有访问权限。您还可以检查设备是否成功连接到AWS IoT并在正确主题上发布消息。以下是一个示例代码,用于连接到AWS IoT Core并在指定主题上发布和接收消息:
import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT
# 初始化AWS IoT Core连接
myMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient("myClientID")
myMQTTClient.configureEndpoint("YOUR_ENDPOINT", 8883)
myMQTTClient.configureCredentials("YOUR_ROOT_CA_PATH", "YOUR_PRIVATE_KEY_PATH", "YOUR_CERTIFICATE_PATH")
# 连接到AWS IoT Core并订阅消息
myMQTTClient.connect()
myMQTTClient.subscribe("my/topic", 1, myCallback)
# 发布消息到指定主题
message = {}
message['message'] = 'Hello IoT'
myMQTTClient.publish("my/topic", json.dumps(message), 1)
# 定义回调函数
def myCallback(client, userdata, message):
print("Received new message: ")
print(message.payload)
print("from topic: ")
print(message.topic)
print("--------------\n\n")
# 断开AWS IoT Core连接
myMQTTClient.disconnect()
在上面的代码中,您需要将YOUR_ENDPOINT替换为AWS IoT的端点,将YOUR_ROOT_CA_PATH、YOUR_PRIVATE_KEY_PATH和YOUR_CERTIFICATE_PATH替换为您的证书文件路径,将my/topic替换为要订阅/发布的主题名称,以及将myCallback替换为自定义回调函数。运行代码后,您应该能够成功发送和接收消息。