【发布时间】:2019-01-14 11:18:30
【问题描述】:
我尝试使用 Python 读取 MQTT 消息。出于调试目的,我至少减少了程序。
import paho.mqtt.client as mqtt
import json
def on_connect(client, userdata, flags, rc):
print("Connected with code " + str(rc))
client.subscribe("temperature")
def on_message(client, userdata, message):
if message.topic == "temperature":
print("New message received")
dhtreadings_json = json.loads(message.payload)
temperature = dhtreadings_json['temperature']
print(temperature)
mqttc = mqtt.Client()
mqttc.username_pw_set("user","password")
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.connect("192.168.1.133",1883,60)
mqttc.loop_forever()
在 Python 2 下,一切正常:
在 Python3 下,我收到了已建立连接的消息,并被告知收到了一条新消息,仅此而已。超过此之后没有其他输出:
环境:Raspberry Pi 3B+ 上最新版本的 Raspbian
按照建议,我替换为打印(“收到新消息”,message.payload)。 Python2和Python3中message.payload是一样的。
Python2:
Python3:
谢谢!
【问题讨论】:
-
print(message.payload)带给你什么? -
是的,将这一行 print("New message received") 更改为 print("New message received", message.payload) 并发布输出
-
@Tomalak @Alex K 正如建议的那样,我替换为打印(“收到新消息”,message.payload)。在 Python2 和 Python3 中 message.payload 是一样的。
-
我仍然怀疑有异常被抛出。将
json.loads()放入try:/except:块并打印任何异常。 -
托马拉克是对的。
on_message被称为in a try-except, and any exceptions are logged and discarded。