Клиент Paho MQTT: как игнорировать сообщения, опубликованные мной самим?

#python #mqtt #paho

Вопрос:

Мой клиент Paho MQTT выполняет следующие действия:

  1. Подпишитесь на mytopic/#
  2. Сделай что-нибудь
  3. Опубликовать в mytopic/#

Проблема:
Опубликованное сообщение на шаге 3 поступает на шаг 1. Я бы хотел избежать добавления sender атрибута-в полезную нагрузку.

Есть ли правильный способ игнорировать самостоятельно опубликованные сообщения? Что-то вроде следующего (псевдокод):

 def on_message(self, client, userdata, message):
    if client.id == message.sender_client_id:  # Is there anything like the sender_client_id?
        return

 

Есть идеи? Спасибо!

Ответ №1:

Начиная со спецификации MQTT v5, вы можете попросить брокера не отправлять вам ваши собственные сообщения обратно в рамках сообщения о подписке.

Это устраняет необходимость добавлять идентификатор, чтобы затем вы могли его игнорировать.

Это, конечно, зависит как от брокера, так и от клиента MQTT, поддерживающего MQTT v5

Ответ №2:

Эта логика должна работать:

  1. Назначьте идентификатор каждому клиенту
  2. каждый клиент публикует на mytopic/{id}
  3. каждый клиент, подключенный к mytopic/#

игнорировать сообщения, в которых сообщение.тема начинается с mytopic/{id}

Комментарии:

1. Я надеялся, что мне не придется касаться этих тем, но ваше решение должно сработать. Спасибо!

2. Идентификатор должен быть отправлен, полезная нагрузка или тема-это ваш выбор дизайна.