gpt4 book ai didi

MQTT:使用 stdin 中的 mosquitto_pub 发布多个主题

转载 作者:行者123 更新时间:2023-12-02 03:29:22 26 4
gpt4 key购买 nike

我有一个简单的程序gettemp,每 3 秒打印出一个温度......

$ gettemp -repeat 3
23.5 C
23.2 C
...

我可以将其有效地通过管道传输到 MQTT 命令行工具 mosquitto_pub :

$ gettemp -repeat 3 | mosquitto_pub --stdin-line --topic /sensors/temp/outside

我所说的“高效”是指,每 3 秒没有启动一个新的 mosquitto_pub 进程。

现在我有另一个程序,每当收到新值时,它都会打印来自多个传感器( radio 温度计)的值:

$ temps_radio --format "temp_%n=%v C"
temp_0d=23.5 C
temp_02=11.3 C
temp_04=5.0 C
...

我想以某种方式将这些数据也通过管道传输到 mosquitto_pub 中,但当然是在单独的主题下(例如 /sensors/temp/0d)。

  • 不想为每个新行启动一个新的mosquitto_pub!

  • 我不知道,有多少个不同的传感器temps_radio会吐出,所以我无法设置一些命名管道,让多个mosquitto_pub 从它们中读取,并使用一些 awktemps_radio 输出分发到这些管道中。

真的有必要为此编写自己的程序或脚本吗?

我希望“将键值行流馈送到 MQTT 中”这一用例非常常见。例如,另一端 mosquitto_sub supports user-formatted output ,这使得将其输出到另一个程序中很方便,例如

$ mosquitto_sub -t /sensors/temps/# -F "UPDATE Temperatures(%t, %p)" | mysqlcli

最佳答案

不,您必须编写一个程序/脚本来执行此操作。

这样的程序在Python之类的东西中相对简单:

import paho.mqtt.client as mqtt
import time
import sys
import re


def main():
client = mqtt.Client()
client.connect("localhost", 1883 , 60)
client.loop_start()

for line in sys.stdin:
m = re.match('(.*)=(.*)', line)
if m:
client.publish(m.group(1), payload=m.group(2))

time.sleep(2)
client.loop_stop()

if __name__ == "__main__":
main()

运行方式:

temps_radio --format "temp_%n=%v C" | python publish.py

关于MQTT:使用 stdin 中的 mosquitto_pub 发布多个主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52283671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com