【发布时间】:2017-07-05 13:44:32
【问题描述】:
我已经配置了 MQTT 代理,从另一段代码(不是我编写或访问的)接收已发布的消息。我在代理配置中添加了另一个主题,现在正尝试从一段 python 代码将数据发布到这个新主题。我得到的反馈是回调函数发布了消息,但没有收到实际数据。
我有什么遗漏吗?
我正在使用以下代码:
import paho.mqtt.client as mqtt
import time
#=========================================================================
def on_connect(client, userdata, flags, rc) :
print "on_connect()"
#=========================================================================
def on_publish(client, userdata, mid) :
print "on_publish()"
#=========================================================================
def send() :
mqttc = mqtt.Client()
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
#host = "localhost"
host = "127.0.0.1"
port = 1883
keepalive = 60
print "\nConnect to '%s', port '%s', keepalive '%s'" % (host, port, keepalive)
mqttc.connect(host=host, port=port, keepalive=keepalive)
time.sleep(3)
mqttc.loop_start()
time.sleep(3)
topic = "data/MY/TOPIC"
msg = "MY_MESSAGE"
print "Publish to '%s' msg '%s'" % (topic, msg)
mqttc.publish(topic, msg, qos=2)
time.sleep(3)
mqttc.loop_stop()
# end send()
#=========================================================================
if __name__ == "__main__":
send()
# end if
获取标准输出
Connect to '127.0.0.1', port '1883', keepalive '60'
on_connect()
Publish to 'data/MY/TOPIC' msg 'MY MESSAGE'
on_publish()
我不确定是否需要 loop() 函数,但如果我没有在 loop_start() 和 loop_stop() 中嵌入发布,我不会得到 on_connect 回调。
【问题讨论】:
-
您在此处发布的代码虽然不是很好,但对我来说确实可以正常工作。 (鉴于连接最多只能存活 9 秒,因此无需设置 keepalive)
-
所以你说这段代码有效,错误一定是在代理的配置方面?
-
你用什么来测试的?我只是使用 mosquitto_sub -v -t '#' 来查看是否有任何显示。可能是代理上的 ACL 不允许您发布到该主题
-
使用 on_log 回调可能会有所帮助,这将为您提供更有用的反馈。
标签: python mqtt publish-subscribe