Получить сохраненное сообщение MQTT

Я использую ESP8266 с кодом Arduino. Каждое устройство публикует сообщения «состояние» и «доступность» для определенной темы.

Я хочу иметь возможность читать эти сохраненные сообщения, а не только сразу после подключения и подписки на брокера MQTT.

Обновление 1 – Пояснения

  1. Я использую Raspberry Pi Zero W в качестве MQTT-брокера (локального).
  2. При загрузке устройство меняет свое состояние с офлайн на онлайн, но другой процесс периодически проверяет, является ли состояние офлайн или онлайн для текущего устройства и других в сети.
  3. это не то же самое, что и при подписке на сохраненную тему, когда вы получаете состояние в это конкретное время.
  4. Сохранение состояния в переменной — это один из способов сделать это, но есть ли другой?

, 👍0

Обсуждение

Извините, вопрос отредактирован., @Guy . D

@jsotola — я подписан на определенную тему, но как я активно (по запросу — внутри оператора «если») проверяю, что мое сохраненное состояние «онлайн» или «офлайн»?, @Guy . D

@ Guy.D, когда вы говорите: «Это не то же самое, что при подписке на сохраненную тему, вы получаете состояние в это конкретное время». что ты имеешь в виду? Если издатель и брокер все время были в сети, а подписчик только что подключился, сохраненное сообщение Node-RED (тема и полезная нагрузка) будет последним сообщением, отправленным издателем., @st2000


1 ответ


1

После прохождения сообщения через MQTT broker невозможно получить его от брокера.

Вместо этого рассмотрите возможность принятия решения о действии в момент получения сообщения подписчиком. Если это решение необходимо принять позднее, рассмотрите возможность сохранения состояния в полезной нагрузке сообщения на подписчике.

Также рассмотрите возможность запуска Node-RED. Если платформа, на которой работает брокер MQTT, может поддерживать Node-RED (например, Raspberry Pi), оказывается удобным запускать оба на одном компьютере. Node-RED содержит узлы (блоки графического программирования), которые могут подписываться и публиковать темы MQTT. Подключив к ним другие узлы, можно управлять темой и полезной нагрузкой. Интерес представляет вариант в узле Output MQTT. Здесь вы можете выбрать «Сохранить истину». Эта страница объясняет, как работает этот параметр:

После того как вы отправили сохраненное сообщение в тему, все подписчики получать это сообщение при подписке.

Чтобы очистить ранее сохраненную тему от брокера, отправьте пустую сообщение в эту тему с установленным флагом сохранения.

,

Это единственный способ, который я имел в виду (сохранение изменения состояния в определенной переменной), но я надеялся, что есть лучший способ., @Guy . D

Пожалуйста, отредактируйте свой вопрос: 1) Добавьте свой комментарий, в котором вы объясните, почему вы хотите получить старые темы MQTT. 2) Расскажите нам, на чем вы используете своего MQTT-брокера. 3) Что вы будете делать с онлайн/офлайн информацией. Поскольку есть дополнительные инструменты, которые хорошо работают с MQTT, они могут применяться в вашей ситуации., @st2000

Спасибо. отредактировано, @Guy . D

@Guy.D, мне нужно ненадолго отключиться от сети. Если вы отредактируете свой вопрос, чтобы сделать его лучше, я предполагаю, что вы используете обычный персональный компьютер для брокера MQTT. Эта платформа, вероятно, будет поддерживать Node-RED — графический язык программирования, предназначенный для обработки тем MQTT, который использует интерфейс веб-страницы. Потребуется некоторое время, чтобы привыкнуть, поэтому нам нужно принять решение на основе вашего отредактированного вопроса, стоит ли установка и изучение., @st2000

спасибо, вы видели, что Q был отредактирован с запрошенной информацией?, @Guy . D

Да, это потребует усилий, но я думаю, что установка и изучение Node-RED решит ваши проблемы. И, возможно, вы можете частично обрабатывать полезные нагрузки сообщений MQTT на Node-RED, упрощая код на своих клиентах MQTT Arduino., @st2000

Кстати, обновление статуса в автономном режиме (генерируемое lastwill) не будет обновлять указанную переменную., @Guy . D