Получить сохраненное сообщение MQTT
Я использую ESP8266 с кодом Arduino. Каждое устройство публикует сообщения «состояние» и «доступность» для определенной темы.
Я хочу иметь возможность читать эти сохраненные сообщения, а не только сразу после подключения и подписки на брокера MQTT.
Обновление 1 – Пояснения
- Я использую Raspberry Pi Zero W в качестве MQTT-брокера (локального).
- При загрузке устройство меняет свое состояние с
офлайн
наонлайн
, но другой процесс периодически проверяет, является ли состояниеофлайн
илионлайн
для текущего устройства и других в сети. - это не то же самое, что и при подписке на сохраненную тему, когда вы получаете состояние в это конкретное время.
- Сохранение состояния в переменной — это один из способов сделать это, но есть ли другой?
@Guy . D, 👍0
Обсуждение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
- Как подключиться к MQTT брокеру с помощью TLS?
- Преобразование byte* в int в Arduino
- esp32-cam публикует изображение в mqtt
- ESP8266 глубокий сон и MQTT
- ESP-01 неправильно просыпается после глубокого сна
- Приведение от 'char*' к 'char' теряет точность
- Публиковать данные json в mqtt
- Не удалось подключиться к брокеру MQTT через esp8266/32 и pub/sub client
Извините, вопрос отредактирован., @Guy . D
@jsotola — я подписан на определенную тему, но как я активно (по запросу — внутри оператора «если») проверяю, что мое сохраненное состояние «онлайн» или «офлайн»?, @Guy . D
@ Guy.D, когда вы говорите: «Это не то же самое, что при подписке на сохраненную тему, вы получаете состояние в это конкретное время». что ты имеешь в виду? Если издатель и брокер все время были в сети, а подписчик только что подключился, сохраненное сообщение Node-RED (тема и полезная нагрузка) будет последним сообщением, отправленным издателем., @st2000