【问题标题】:How does one send data from a dictionary over an mqtt broker如何通过 mqtt 代理从字典中发送数据
【发布时间】:2017-08-14 20:06:57
【问题描述】:

基本上我有两个树莓派,我希望一个在 python 文件中发布从字典中获取的数据,另一个订阅这个字典数据。抱歉,如果这是一个非常平淡的问题,但我在互联网上找不到任何关于此的信息。

【问题讨论】:

    标签: python dictionary mosquitto


    【解决方案1】:

    如果您还没有阅读基本 MQTT 教程,我建议您阅读。这将帮助您决定您的主题和数据应该是什么样的。

    为了帮助您入门,下面是一个示例,说明如何发布和订阅您的用例。 发布者可以遍历字典中的键并将数据发布到主题“keys/$key_name”,消息是字典中该键的值。

    订阅者可以订阅主题“keys/#”。这样订阅者将获得所有的键和相应的数据并重建字典。

    根据字典中数据的性质,您可以通过多种方式发布数据。

    【讨论】:

    • 我觉得我只需要一个主题,我应该能够迭代字典,但我不确定如何在将我迭代的内容发布到代理的上下文中进行迭代。我已经尝试将字典转换为 json 并且代理正在接收它,但是订阅者如何分解 json 以读取数据?
    • 似乎您的问题是关于如何从 json 重建字典而不与 mqtt 和 pub-sub 相关?如果是,这可能会有所帮助:stackoverflow.com/questions/17496513/… 如果不是,您能否详细说明您的问题是什么?
    • 我的字典格式如下,键是日期时间,值是浮点数。但 mqtt 指定有效载荷只能是字符串、字节数组、int、float 或 None。所以我的字典基本上是不兼容的,如果我的键是日期时间对象,我可能会受限于我能做什么。您是否建议我在发布之前更改我的字典并将键转换为兼容的数据类型?
    • 如果您将字典中的每个条目转换为 json(类似于 {"timestamp: "", value:""},那么这是一个可以发布到任何主题的字符串。您可以将字典中的每个条目分别发布到同一主题,或者您可以连接所有条目并发送一个大字符串。这取决于您的字典有多大以及订阅者如何处理数据。
    【解决方案2】:

    如果您想将字典直接从主机 A 上的 python 脚本发送到主机 B 上的 python 脚本,有一种方法。

    1. 将您的字典转换为字符串。
    2. 将字符串作为负载从主机 A 发送到代理。
    3. 使用主机 B 订阅代理并接收负载。
    4. 使用 ast.literal_eval() 评估字符串,将其转换回字典。

    如果解释不清楚,我可以发布一些示例代码。

    我可能会使用 JSON 或多个主题,但上述过程会起作用。

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多