当前位置: 首页 > 知识库问答 >
问题:

为什么我没有收到AWS Iot核心on_message回调

华振
2023-03-14

我试图从aws上订阅的主题接收消息,我可以发布到该主题,但无法在paho mqtt应用程序上接收到消息。在AWS物联网客户端中,它工作得非常完美。

我的代码

import ssl

prefix = 'prefix'
uid = 'udi'
aws_region = 'us-west-2'
topic = 'node/test'

client_id = 'myNode'
device_cert = f'{prefix}-certificate.pem.crt'
device_privatekey = f'{prefix}-private.pem.key'
ca_cert = 'AmazonRootCA1.pem'
mqtt_url = f'{uid}.iot.{aws_region}.amazonaws.com'


def on_connect(client, userdata, flags, response_code):
    print(f"Connected with status: {response_code}")
    mqtt.subscribe(topic)

def on_disconnect(client, userdata, response_code):
    if response_code != 0:
        print(f"Unexpected disconnection. With Error code {response_code}")

def on_message(client, userdata, message):
    # print("Received message '" + str(message.payload) + "' on topic '"
    #     + message.topic + "' with QoS " + str(message.qos))
    print(message)

if __name__ == "__main__":
    print ("Loaded MQTT configuration information.")

    client = mqtt.Client(client_id=client_id, clean_session=True, userdata=None,
                        protocol=mqtt.MQTTv311, transport="tcp")

    client.tls_set(ca_cert,
                   certfile = device_cert,
                   keyfile = device_privatekey,
                   cert_reqs = ssl.CERT_REQUIRED,
                   tls_version = ssl.PROTOCOL_TLSv1_2,
                   ciphers = None)

    client.tls_insecure_set(False)
    client.on_connect = on_connect
    client.on_message = on_message

    print ("Connecting to AWS IoT Broker...")
    client.connect(mqtt_url, port = 8883, keepalive=60)
    client.loop_forever()

我的物联网地址:{“版本”:“2012-10-17”,“html" target="_blank">声明”:[{“效果”:“允许”,“行动”:“物联网”,“资源”:“arn:aws:iot:us-west-2:account_-id:client/myNode”},{“效果”:“允许”,“行动”:“允许”,“行动”:“iot:Subscribe”,“资源”:“arn:aws:iot:us-west-2:account_-id:topicfilter/node/test”},{“效果”:“允许”,“行动”:“物联网:接收”,“资源”:”:“arn:aws:iot:us-west-2:account\u id:topic/node/test”}]}

为了安全起见我没有显示我的ACCOUNT_ID前缀和UID

共有1个答案

松雅昶
2023-03-14

on_connect()回调mqtt.subscribe(主题)中,可能应该是client.subscribe(主题)

 类似资料:
  • 我正在为Minecraft服务器的discord制作一个机器人。我在下面有一个on_会员加入事件和on_消息事件。on_member_join工作得很好,但是当我在discord服务器中发送消息时,on_message事件内部不会发生任何事情。这是我的代码,如果有人有可能的解决方案,我会非常感激。

  • 问题内容: 我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如LIKE)称为实例方法。这是我感到困惑的地方,因为我期望从null对象调用静态方法(就像在调用实例方法中一样)。我真的很感谢一些解释,为什么我错了一个期望。 这是示例代码: 问题答案: 通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估表达式并丢弃结果后静态进

  • 问题内容: 我在android虚拟机中使用以下代码 我收到HttpHostConnectException。不知道为什么?我已将网址中的地址从127.0.0.1更改为10.0.2.2,但仍然收到该异常。我的电脑中安装了wamp服务器,文件“ ReadingFromServer.php”位于“ www”文件夹中。 这是完整的堆栈跟踪 谢谢。 问题答案: 您是否在AndroidManifest.xml

  • 我在Flink(Java)中创建了一个程序来计算3个不同房间的9个假传感器的平均值。如果我启动jar文件,该程序运行良好。所以我决定启动flink独立集群来检查运行我的作业和相应任务的TaskManager,如这里(https://ci.apache.org/projects/flink/flink-docs-stable/tutorials/local_setup.html)。我正在我的机器上运

  • 我正在创建一个进行线性探测以查找键索引的哈希图。如果键已经在索引中,我想增加它的值,而不是向新索引添加一个。 例如,如果我得到字符串“五,五,五”的字数,我的输出是五1,五1,五1,而不是五3。 我认为一定是我的 containsKey 方法,它使用 get 方法来检查我的密钥是否已在映射中。下面是我的Hashmap.java类。

  • 它仍然打印出10个“*”,但后来我得到了这个错误: 但是如果我使用hasNext而不是hasNextLine,它可以正常工作。 所以我想知道为什么hasNext有效,而hasNextLine无效。