MQTT — Можно ли разослать Lastwill в несколько тем?

Я использую ESP8266 в качестве устройства IOT с MQTT для отправки сообщений о состоянии. У каждого устройства есть своя тема доступности, в которой указывается его состояние онлайн или оффлайн (необходимо для индикации Home Assistant в веб-интерфейсе)

Поскольку имеется несколько устройств, мне было интересно, можно ли отправить статус Lastwill для совместной темы для мониторинга (например:"device_id:offline" )

Моя соответствующая часть кода, определяющая тему Lastwill для устройств: mqttClient.connect(deviceName, user, passw,availTopic, 0, true, "offline")

РЕДАКТИРОВАТЬ1: используя PubSubClient.h

, 👍0

Обсуждение

нет, последняя воля настраивается при подключении к брокеру (как вы знаете), и вы можете установить только одну тему с одним значением - в домашнем помощнике вы можете использовать эту тему LWT для любого количества «устройств», которое вам нужно - Я предполагаю, что под «устройствами» вы имеете в виду несколько устройств, подключенных к одному ESP8266… на самом деле, полностью прочитав ваш вопрос, я вижу, что вы более или менее знаете, что делать… используйте «совместную» тему, @Jaromanda X

@JaromandaX под несколькими устройствами Я имел в виду 10 устройств ESP8266, отправляющих разные показания датчиков. Если меня неправильно поняли, я имел в виду, что хочу, чтобы одна тема получала все уведомления «офлайн» со всех 10 устройств (тема, которая будет сохранена в виде файла журнала)., @Guy . D

ой, так 10 устройств отправляют в одну тему? это бессмысленно... если один не работает, то все считаются неработающими?, @Jaromanda X

Нет. Извините за мой плохой английский. Каждое устройство будет идентифицироваться в своем последнем сообщении как «offline_dev1»., @Guy . D

поэтому каждое устройство будет использовать одну и ту же тему MQTT?, @Jaromanda X

Да. Общая тема для офлайн-уведомлений только для всех устройств, @Guy . D

Полагаю, у меня с этим проблемы, потому что все мои LWT имеют флаг сохранения - но если вы не используете сохраненные сообщения, тогда подписчик должен иметь дело с получением сообщений с разных устройств по одной и той же теме - не уверен, что это так. настройка домашнего помощника будет более сложной, чем если бы у вас была одна тема для каждого устройства., @Jaromanda X

Технически, что касается MQTT, нет проблем с публикацией нескольких устройств в одной и той же теме. MQTT с этим справляется. Это всего лишь брокер — ему все равно , откуда берутся вещи и что они содержат. Это глупо., @Majenko

@Маженко - это я хорошо знаю, но могу ли я настроить, чтобы последнее желание было отправлено более чем в одну тему?, @Guy . D

Это зависит от библиотеки MQTT (и, возможно, сервера MQTT), которую вы используете., @Majenko

@Маженко см. в редакции 1, @Guy . D


1 ответ


Лучший ответ:

2

Функция MQTT «Последняя воля и завещание» контролируется сервером, а не клиентом.

Тема и полезная нагрузка указываются при подключении клиента в рамках подтверждения соединения. Когда клиент отключается, эта сохраненная информация автоматически публикуется сервером.

Спецификация допускает установку только одной темы и полезной нагрузки.

Конечно, вы можете указать одну и ту же тему для многих клиентов и предоставить каждому отдельную полезную нагрузку, но вы не можете одновременно иметь уникальную тему для каждого клиента.

Это соответствует спецификации – однако это не мешает брокеру реализовать свои собственные расширения спецификации, позволяющие такие вещи – но я не знаю ни одного реализованного такого расширения. Но, учитывая природу многих реализаций MQTT с открытым исходным кодом (например, PubSubClient.h и Mosquitto), нет причин, по которым вы не могли бы расширить протокол для реализации своих собственных требований (за счет совместимости с другими системами MQTT). конечно).

,