如何获取包含MQTT broker已知的特定值的所有主题的列表?
如何获取包含MQTT broker已知的特定值的所有主题的列表?,mqtt,wildcard,distributed-system,paho,Mqtt,Wildcard,Distributed System,Paho,我正在寻找一种方法来获得一个经纪人知道的所有主题的列表。有一些非常类似的问题,但它们并没有帮助我为我的用例找出答案 我有3个树莓Pi,带有多个传感器(温度、湿度),通过MQTT网络连接。每个Pi都有自己的数据库,其中包含测量时间序列和其他系统变量(如CPU) 现在,我正在为以下szenario寻找一种方法: 我想监控我的系统并检测异常情况。为此,我希望在最后x秒内获得所有传感器时间序列,并在python脚本中处理它们。我的系统做的监控计算可以是每一个Pi 示例:我在RPI2上,希望监视整个分布式
我正在寻找一种方法来获得一个经纪人知道的所有主题的列表。有一些非常类似的问题,但它们并没有帮助我为我的用例找出答案
我有3个树莓Pi,带有多个传感器(温度、湿度),通过MQTT网络连接。每个Pi都有自己的数据库,其中包含测量时间序列和其他系统变量(如CPU)
现在,我正在为以下szenario寻找一种方法:
我想监控我的系统并检测异常情况。为此,我希望在最后x秒内获得所有传感器时间序列,并在python脚本中处理它们。我的系统做的监控计算可以是每一个Pi
示例:我在RPI2上,希望监视整个分布式网络。没有关于连接到Pi的传感器的已知信息。现在,通过在RP2上运行的python脚本,我将初始化MQTT客户机并订阅代理上的每个传感器数据<我知道通配符,但我不知道在那种情况下如何使用它。我的magic命令看起来像以下伪代码:
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
首先,您的通配符主题模式无效。主题模式只能包含一个“#”字符,并且只能出现在主题的末尾,例如,
foo/bar/
有效,/foo
无效。您可以使用+
字符,它是一个单级通配符
这意味着+/sensor/#
的主题模式将与以下各项匹配:
rpi1/传感器/foo
rpi1/传感器/棒/温度
rpi1/foo/sensor/bar
解决方案可能是指定一个“主”代理,将所有其他代理以一种方式连接到该代理,然后让客户订阅“#”以获取所有内容,或者订阅更像“+/sensor/#”的内容以查看传感器读数。好的,我理解,谢谢!因此,如果我理解正确,我必须订阅正确的传感器主题,以获得该传感器的测量值。但是如果没有其他人订阅并让他们发布他们的测量值,而不知道传感器开始发布其测量值所需的确切主题层次结构和消息,我就没有机会获得这些主题。是这样吗?如果您订阅
#
,那么您将看到发布的所有消息(假设没有ACL)。其他人不需要订阅。所以我只是测试了整个设置,如果订阅#
,我只能在请求传感器读取时看到消息。但这意味着,如果我将我的系统用作黑盒,我希望能够通过#
订阅所有主题,然后发现主题无法通过这种方式工作,因为我需要其他人触发传感器读数,并使传感器发布该读数,以从我的订阅中获取测量值。如果您的传感器仅按要求发布,那么就没有办法让它成为一个黑匣子。唯一的解决办法是,如果发布的传感器保留标志设置为trueOk,非常感谢您的努力!看来我得改变一些计划了。