Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 订阅成功,但回调函数不显示数据_Python_Mqtt_Paho - Fatal编程技术网

Python 订阅成功,但回调函数不显示数据

Python 订阅成功,但回调函数不显示数据,python,mqtt,paho,Python,Mqtt,Paho,我编写了发布和订阅主题的代码。这本书出版得很好。订阅也是如此,但是我的on_message回调函数不显示数据(打印(message.payload),尽管我可以在节点上看到protobuf格式的数据 import paho.mqtt.client as mqtt from google.protobuf.struct_pb2 import Struct import json import pub_message_pb2 as pub_message from google.protobuf.j

我编写了发布和订阅主题的代码。这本书出版得很好。订阅也是如此,但是我的on_message回调函数不显示数据(打印(message.payload),尽管我可以在节点上看到protobuf格式的数据

import paho.mqtt.client as mqtt
from google.protobuf.struct_pb2 import Struct
import json
import pub_message_pb2 as pub_message
from google.protobuf.json_format import Parse

    MQTT_HOST = "xxxxxxxxxxx"
    CLIENT_ID =  "centos"
    BROKER_PORT = 1883
    CA_CERT = "caCert.pem"
    CERTFILE = "ServerCert.pem"
    KEYFILE = "ServerKey.pem"
    MQTT_KEEPALIVE_INTERVAL = 45
    
    publish_topic = "user/7/device/8CF9572000023509/downlink"
    subscribe_topic = "user/7/device/8CF9572000023509/uplink"
    token = ""
    
    payload = Parse(json.dumps({
            "Token":"OVc0/opKynDuz/DxVzaUcA==",
            "Params":{
                "FPort":8,
                "Data":"BAoAAQ==",
                "Confirm":False,
                "DevEUI":"8CF9572000023509" 
            }
        }),pub_message.DeviceDownlink())
    
    def on_publish(client, userdata, mid):
        print("Published...")
    
    def on_connect(client,userdata,flags,rc):
        client.subscribe(subscribe_topic,1)
        client.publish(publish_topic,payload.SerializeToString())
        
    
    def on_message(client,userdata,message):
        print(message.topic)
        print(message.payload)
        #client.disconnect()
    
    client = mqtt.Client(CLIENT_ID,clean_session=False,userdata=None,protocol=mqtt.MQTTv31,transport="tcp")

    client.message_callback_add(subscribe_topic,on_message)
    client.on_connect = on_connect
    client.on_publish = on_publish
    client.on_message = on_message
    
    client.tls_set(ca_certs=CA_CERT,certfile=CERTFILE,keyfile=KEYFILE)
    
    client.username_pw_set(username="xxxxxx",password="xxxxxx")
    
    client.connect(MQTT_HOST,BROKER_PORT,MQTT_KEEPALIVE_INTERVAL)
    
    client.loop_forever()

是不是有些事情做得不好?欢迎您的建议。

在调用
connect()
之前,尝试将所有回调设置移动到。我按照您的建议移动了回调,但数据并不总是显示。“不总是显示”-请澄清您的意思(例如,消息经过一段时间后停止,消息似乎被随机跳过等)。可能最好用完整的细节更新您的问题。这意味着打印(“message.topic”)和打印(“message.payload”)在on_message callback中,尽管我可以在node-red上看到protobuf格式的数据,但不显示任何内容。OK-正在调用on_message中的
?请更新您的代码,以反映@hardillb评论后所做的更改。如果您可以使用实用程序(例如)订阅,这也会很有用并详细说明完整的命令行和结果(确认问题出在代码而不是代理配置上,并使我们能够查看主题等)。