У меня есть простая программа 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
Эффективно Я имею в виду, что новый процесс mosquitto_pub
не запускается каждые 3 секунды.
Теперь у меня есть другая программа, которая печатает значения от нескольких датчиков (радиотермометров), всякий раз, когда новые значения получены:
$ 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
считывать с них и распространять вывод temps_radio
с использованием некоторых awk
в эти трубы.
Действительно ли для этого необходимо написать собственную программу или скрипт?
Я надеялся, что сценарий использования ", передающий поток строк значения ключа в MQTT ", довольно распространен.
На другом конце, например, mosquitto_pub
поддерживает форматированный пользователем вывод, что делает его удобным для передачи этого в другую программу, такую как
$ mosquitto_sub -t /sensors/temps/# -F "UPDATE Temperatures(%t, %p)" | mysqlcli