Как отправить ответ на сообщение MQTT? - PullRequest
0 голосов
/ 26 июня 2018

Я бы хотел, чтобы один RaspberryPi-A отправил массаж RaspberryPi-B, а RaspberryPI-B должен автоматически отправить массаж обратно. Я знаю, что это вопрос для начинающих, но я один, и я действительно изо всех сил пытался найти ответ.

Это код моего клиента

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)

Как мне написать код по-другому, чтобы мой клиент возвращал массаж, например: «Здравствуйте, назад»?

1 Ответ

0 голосов
/ 27 июня 2018

Существует 2 вида моделей сообщений:

  • Точка-точка (один к одному) - сообщение отправляется из одного приложения в другое приложение через очередь. Может быть более 1 приложения-получателя (получателя), но только одно из них получит сообщение.

  • Опубликовать / Подписаться - это место, где сообщение публикуется в теме, и несколько потребителей (подписчиков) будут каждый получать копию сообщения. Может быть 1 или более приложений, публикующих сообщения в той же теме, и 1 или более приложений, использующих (получающих) сообщения.

MQTT построен на модели обмена сообщениями публикации / подписки.

Ваше описание звучит так, как будто вы хотите, чтобы обмен сообщениями «точка-точка». Да, вы можете настроить MQTT так, чтобы он действовал как «точка-точка», но имейте в виду, что если у вас есть несколько приложений, публикующих сообщения на одну и ту же тему, вы можете запутаться.

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

В MQTT не существует такой вещи, как "канал". Ваш код публикует сообщение в теме с именем: test_channel.

Лучше использовать небольшую иерархию в именах тем.

т.е.

  • пивк95 / еда / гамбургеры
  • пивк95 / еда / картофель фри
  • pivk95 / еда / пицца
  • pivk95 / еда / буррито
  • pivk95 / напиток / трясет
  • pivk95 / напиток / soft_drink

Просто помните, что любое количество приложений может публиковать сообщения на заданную тему, а любое количество приложений может подписаться на данную тему и получать копии сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...