Python 订阅成功,但回调函数不显示数据
我编写了发布和订阅主题的代码。这本书出版得很好。订阅也是如此,但是我的on_message回调函数不显示数据(打印(message.payload),尽管我可以在节点上看到protobuf格式的数据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
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评论后所做的更改。如果您可以使用实用程序(例如)订阅,这也会很有用并详细说明完整的命令行和结果(确认问题出在代码而不是代理配置上,并使我们能够查看主题等)。