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

Материал из Онлайн справочника
< Node-RED:Рецепты
Версия от 18:14, 3 мая 2019; Myagkij (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


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

Проблема

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

Решение

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

Пример

Nodered recipe subscribe-to-topic.png
[{"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» присылаемого сообщения.

См.также

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