Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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 如何向MQTT消息发送响应?_Python_Mqtt - Fatal编程技术网

Python 如何向MQTT消息发送响应?

Python 如何向MQTT消息发送响应?,python,mqtt,Python,Mqtt,我想要一个树莓A向树莓B发送一个按摩,树莓B应该自动发送一个按摩。我知道这是一个初学者的问题,但我是其中之一,我真的挣扎了一整天试图找到一个anwser 这是我客户的密码 import paho.mqtt.client as mqtt MQTT_SERVER = "localhost" MQTT_PATH = "test_channel" def on_connect(client, userdata, flags, rc): print("Connected with resul

我想要一个树莓A向树莓B发送一个按摩,树莓B应该自动发送一个按摩。我知道这是一个初学者的问题,但我是其中之一,我真的挣扎了一整天试图找到一个anwser

这是我客户的密码

import paho.mqtt.client as mqtt

MQTT_SERVER = "localhost"
MQTT_PATH = "test_channel"


def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))


client.subscribe(MQTT_PATH)

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    # more callbacks, etc

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(MQTT_SERVER, 1883, 60)


client.loop_forever()
这是我出版商的代码

import paho.mqtt.publish as publish

MQTT_SERVER = "192.168.1.5"
MQTT_PATH = "test_channel"

publish.single(MQTT_PATH, "Hello World!", hostname=MQTT_SERVER)

我应该如何编写不同的代码,以便我的客户能够返回消息,例如:“Hello back”

有两种消息模型:

  • 点对点(一对一)-消息通过队列从一个应用程序发送到另一个应用程序。可以有多个消费(接收器)应用程序,但其中只有一个将接收消息

  • 发布/订阅-将消息发布到某个主题,多个使用者(订阅者)将每个接收消息的副本。可以有1个或多个应用程序向同一主题发布消息,也可以有1个或多个应用程序使用(接收)消息

MQTT构建在发布/订阅消息传递模型上

您的描述听起来像是想要点对点的消息传递。是的,您可以将MQTT改为点对点的方式,但请注意,如果有多个应用程序将消息发布到同一主题,您可能会感到困惑

MQTT_PATH = "test_channel"
publish.single(MQTT_PATH, "Hello World!", hostname=MQTT_SERVER)
MQTT中没有“通道”这样的东西。您的代码正在将消息发布到名为:test_channel的主题

最好在主题名称中使用一点层次结构

i、 e

  • pivk95/食品/汉堡
  • pivk95/食物/薯条
  • pivk95/食品/比萨饼
  • pivk95/食品/墨西哥煎饼
  • pivk95/饮料/奶昔
  • pivk95/饮料/软饮料

请记住,任何数量的应用程序都可以将消息发布到给定的主题,任何数量的应用程序都可以订阅给定的主题并接收消息的副本

一个好的问题还应该显示您的具体错误或问题(例如,如果您遇到异常,则显示异常文本),而不是只显示您的现有代码,而不说明它是如何失败的;参见定义。(类似地,对于同一页,代码示例应该是最短的东西,可以让人们自己真实地再现相同的问题——因此,如果你想在这里有一个
#更多的东西
注释掉,你需要确保代码仍然足够有效,以显示注释中的问题)。此代码没有问题。我只是希望RaspberryPI-B能够回答RaspberryPI-a的问题。我只是一个编程新手,所以我真的不知道如何更改此代码才能做到这一点。听起来你可能需要一个不同的频道来回答,这样其他系统就可以在上面发送答案了?没有什么需要的代码是您尚未拥有的--只需要复制您已经拥有的用于订阅和侦听客户端的代码,这样它就可以侦听响应,将通道标识符更改为另一个。我希望RPI-B自动响应来自RPI-a的消息。因此,如果我使用不同的通道,它还能自动响应吗?