Как получить список всех тем, содержащих указанные c значения, известные брокеру MQTT? - PullRequest
0 голосов
/ 19 февраля 2020


Я ищу способ получить список всех тем, известных брокеру. Есть несколько очень похожих вопросов, но они не помогли мне разобраться в моем случае использования.
У меня есть 3 Raspberry Pi с несколькими датчиками (температура, влажность), которые подключены через сеть MQTT. Каждый Pi имеет свою собственную базу данных, содержащую временные ряды измерений и другие системные переменные (например, CPU).
Теперь я ищу способ для следующего сценария:

Я хочу контролировать свою систему и обнаруживать аномалии. Для этого я хочу получить все временные ряды датчиков за последние x секунд и обработать их в сценарии python. Моя система для выполнения контрольных расчетов может быть у каждого Пи.

Пример: Я на RPI2 и хочу отслеживать всю распределенную сеть. Там нет данных о датчиках, прикрепленных к Пи. Теперь из моего python скрипта, работающего на RP2, я инициализирую MQTT-клиент и подписываю все данные датчика на брокере.
Я знаю о подстановочном знаке #, но я не уверен, как использовать его в этом случае. Моя команда magi c выглядела бы следующим псевдокодом:

1) client subscribe to all sensor data - #/sensor/#
2) get list with all topics 
3) client subscribe to all topics from given list list/#
4) analyse data for anomalies every x seconds

Distributed Network with broker and sensors

1 Ответ

0 голосов
/ 19 февраля 2020

Во-первых, шаблоны подстановочных знаков topi c недопустимы. Шаблоны Topi c могут содержать только один символ «#» и могут появляться только в конце topi c, например, foo/bar/# допустимо, #/foo - нет. Вы можете использовать символ +, который является символом подстановки одного уровня.

Это означает, что шаблон topi c из +/sensor/# будет соответствовать каждому из следующих параметров:

  • rpi1/sensor/foo
  • rpi1/sensor/bar/temp

но не

  • rpi1/foo/sensor/bar

Следующие брокеры не имеют список существующих тем. Темы действительно существуют только в тот момент, когда сообщение публикуется для одного из них, брокер затем проверяет шаблоны, запрошенные подписавшимися клиентами, проверяет топи c на соответствие списку и доставляет его соответствующим клиентам.

В-третьих, когда вы соединяете брокеров в таких циклах, вы должны быть очень осторожны с фильтрами мостов, чтобы убедиться, что сообщения не заканчиваются постоянными l oop.

Решение, вероятно, состоит в том, чтобы назначить "master" "Брокер и соединить все остальные одним способом с этим брокером, а затем попросить клиента подписаться либо на" # ", чтобы получить все, либо на что-то более похожее на" + / sensor / # ", чтобы просто увидеть показания датчика.

...