如何在 python 的 mqtt broker 上发布 json 数据?
How to publish json data on mqtt broker in python?
我正在尝试发布有关 MQTT 代理主题的 JSON 数据。这是源代码,我试过了-
import paho.mqtt.client as mqtt
import json
# Define Variables
MQTT_HOST = "localhost"
MQTT_PORT = 1883
MQTT_KEEPALIVE_INTERVAL = 45
MQTT_TOPIC = "irisPayload"
MQTT_MSG=json.dumps({"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"});
# Define on_publish event function
def on_publish(client, userdata, mid):
print "Message Published..."
# Initiate MQTT Client
mqttc = mqtt.Client()
# Register publish callback function
mqttc.on_publish = on_publish
# Connect with MQTT Broker
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
# Publish message to MQTT Broker
mqttc.publish(MQTT_TOPIC,MQTT_MSG)
# Disconnect from MQTT_Broker
mqttc.disconnect()
我只想发布 JSON 没有 payload={jsondata} 格式的数据,如何删除每次发布特定主题数据时出现的有效负载?
在日志中它显示这样的消息--- [payload={ "sepalLength": "6.4", "sepalWidth": "3.2", "petalLength": "4.5", "petalWidth": "1.5" }]
data = {"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"}
print json.dumps(data)
打印:
{"sepalLength": "6.4","sepalWidth": "3.2","petalLength":
"4.5","petalWidth": "1.5"}
不是:
payload={"sepalLength": "6.4","sepalWidth": "3.2","petalLength":
"4.5","petalWidth": "1.5"}
你在其他地方有一个描述该有效载荷的操纵字符串
将不需要的密钥添加到 msg
我对你的代码进行了一些修改,然后你可以将 json 发布为字符串,然后接收字符串并转换为 json。
示例代码:
import paho.mqtt.client as mqtt
import json
# Define Variables
MQTT_HOST = "localhost"
MQTT_PORT = 1883
MQTT_KEEPALIVE_INTERVAL = 45
MQTT_TOPIC = "irisPayload"
MQTT_MSG=json.dumps({"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"});
# Define on_publish event function
def on_publish(client, userdata, mid):
print "Message Published..."
def on_connect(client, userdata, flags, rc):
client.subscribe(MQTT_TOPIC)
client.publish(MQTT_TOPIC, MQTT_MSG)
def on_message(client, userdata, msg):
print(msg.topic)
print(msg.payload) # <- do you mean this payload = {...} ?
payload = json.loads(msg.payload) # you can use json.loads to convert string to json
print(payload['sepalWidth']) # then you can check the value
client.disconnect() # Got message then disconnect
# Initiate MQTT Client
mqttc = mqtt.Client()
# Register publish callback function
mqttc.on_publish = on_publish
mqttc.on_connect = on_connect
mqttc.on_message = on_message
# Connect with MQTT Broker
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
# Loop forever
mqttc.loop_forever()
我正在尝试发布有关 MQTT 代理主题的 JSON 数据。这是源代码,我试过了-
import paho.mqtt.client as mqtt
import json
# Define Variables
MQTT_HOST = "localhost"
MQTT_PORT = 1883
MQTT_KEEPALIVE_INTERVAL = 45
MQTT_TOPIC = "irisPayload"
MQTT_MSG=json.dumps({"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"});
# Define on_publish event function
def on_publish(client, userdata, mid):
print "Message Published..."
# Initiate MQTT Client
mqttc = mqtt.Client()
# Register publish callback function
mqttc.on_publish = on_publish
# Connect with MQTT Broker
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
# Publish message to MQTT Broker
mqttc.publish(MQTT_TOPIC,MQTT_MSG)
# Disconnect from MQTT_Broker
mqttc.disconnect()
我只想发布 JSON 没有 payload={jsondata} 格式的数据,如何删除每次发布特定主题数据时出现的有效负载?
在日志中它显示这样的消息--- [payload={ "sepalLength": "6.4", "sepalWidth": "3.2", "petalLength": "4.5", "petalWidth": "1.5" }]
data = {"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"}
print json.dumps(data)
打印:
{"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"}
不是:
payload={"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"}
你在其他地方有一个描述该有效载荷的操纵字符串 将不需要的密钥添加到 msg
我对你的代码进行了一些修改,然后你可以将 json 发布为字符串,然后接收字符串并转换为 json。
示例代码:
import paho.mqtt.client as mqtt
import json
# Define Variables
MQTT_HOST = "localhost"
MQTT_PORT = 1883
MQTT_KEEPALIVE_INTERVAL = 45
MQTT_TOPIC = "irisPayload"
MQTT_MSG=json.dumps({"sepalLength": "6.4","sepalWidth": "3.2","petalLength": "4.5","petalWidth": "1.5"});
# Define on_publish event function
def on_publish(client, userdata, mid):
print "Message Published..."
def on_connect(client, userdata, flags, rc):
client.subscribe(MQTT_TOPIC)
client.publish(MQTT_TOPIC, MQTT_MSG)
def on_message(client, userdata, msg):
print(msg.topic)
print(msg.payload) # <- do you mean this payload = {...} ?
payload = json.loads(msg.payload) # you can use json.loads to convert string to json
print(payload['sepalWidth']) # then you can check the value
client.disconnect() # Got message then disconnect
# Initiate MQTT Client
mqttc = mqtt.Client()
# Register publish callback function
mqttc.on_publish = on_publish
mqttc.on_connect = on_connect
mqttc.on_message = on_message
# Connect with MQTT Broker
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
# Loop forever
mqttc.loop_forever()