Node-RED:Рецепты/Как подписаться на топик

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Как подписаться на топик[1]

Проблема

Вам нужно подписаться на сообщения, публикуемые в некий MQTT-топик.

Решение

Воспользуйтесь нодой «MQTT input», чтобы подписаться на топик и получать сообщения, публикуемые в него.

Пример

[{"id":"8024cb4.98c5238","type":"mqtt in","z":"eda2a949.74ea98","name":"","topic":"sensors/#","qos":"2","broker":"61de5090.0f5d9","x":240,"y":180,"wires":[["15d727dd.33e808"]]},{"id":"15d727dd.33e808","type":"debug","z":"eda2a949.74ea98","name":"","active":true,"console":"false","complete":"false","x":390,"y":180,"wires":[]},{"id":"61de5090.0f5d9","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

Разбор

Фильтр для поиска нужных топиков в настройках ноды «MQTT input» нельзя задать динамически, поэтому его нужно будет «захардкодить». Впрочем, эту проблему можно обойти.

Во-первых, можно задать название топика в переменной окружения вроде «$(MY_TOPIC)». Запустившись, среда выполнения Node-RED вставит значение этой переменной окружения в свойство «Topic» ноды. Соответственно, это позволяет поменять топик, но также требует перезапуска Node-RED для считывания нужного значения из переменной окружения.

Во-вторых, можно воспользоваться wildcard-символами «+» и «#». Первый позволяет найти топики одного уровня иерархии, а второй – всю под-иерархию топиков. Это позволяет получать сообщения от нескольких топиков при помощи всего одной ноды. Топик должен быть указан в свойстве «msg.topic» присылаемого сообщения.

См.также

Внешние ссылки