Node-RED:Рецепты/Как подписаться на топик: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
Строка 17: | Строка 17: | ||
[[File:nodered_recipe_subscribe-to-topic.png|center]] | [[File:nodered_recipe_subscribe-to-topic.png|center]] | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
[{"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":""}] | [{"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":""}] | ||
</syntaxhighlight> | </syntaxhighlight> |
Текущая версия от 18:25, 14 мая 2023
Как подписаться на топик[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» присылаемого сообщения.
См.также
Внешние ссылки