需要脚本来解析文件然后转换为mqtt消息

时间:2016-12-30 17:52:08

标签: shell awk mqtt netcat

首先,我不是程序员,但我过去曾设法做过一些事情。黑客比任何事都多。

我正在使用Mochad与我的X10接收器接口,我想从Mochad获取输出,从中解析几个部分,然后将其作为MQTT消息发送,以便我可以将它与我的家庭自动化中心Home Assistant一起使用。这就是Mochad的输出结果:

pi@raspberrypi:~ $ nc localhost 1099
12/30 17:37:18 Rx RF HouseUnit: B3 Func: On
12/30 17:37:19 Rx RF HouseUnit: B4 Func: Off
12/30 17:37:21 Rx RF HouseUnit: B6 Func: On
12/30 17:37:23 Rx RF HouseUnit: B6 Func: On
12/30 17:37:24 Rx RF HouseUnit: B7 Func: Off
12/30 17:37:25 Rx RF HouseUnit: B8 Func: On
12/30 17:37:27 Rx RF HouseUnit: B2 Func: On

请注意,我正在使用net cat来查看此数据。只有在检测到X10信号时才会添加新行。我想获取HouseUnit值(ex B3)和Func值(ex On)。我可以使用awk轻松完成此操作,但我无法弄清楚如何从netcat输出中执行此操作。

这两个值或解析后,我想将它们发布到MQTT消息,如下所示:

mosquitto_pub -t /X10/B3 -m On

在此之后,例程将等待另一条消息,并继续为从Mochad收到的每条新消息执行此过程。

通过命令行脚本有一种简单的方法吗?我已经编写了可以执行这些操作的循环,但我正在努力将net cat输出转换为for循环。

我正在使用HASSBian发行版(Raspbian为Home Assistant修改)在RaspberryPi3上完成所有这些操作。非常感谢任何帮助。

编辑其他人能够提供帮助吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

以下应该做你想做的事:

nc localhost 1099 | awk ' { system("mosquitto_pub -t /X10/"$6" -m "$8) } '

这会获取nc的输出并将其输入awk,然后为每行调用mosquitto_pub

编辑:测试以下内容:

nc -l localhost 1099< NC-测试

其中nc-test是一个文本文件,其中示例数据显示在问题中。

P.S。作为规则,MQTT主题不应以前导/开头,因为它会向主题树添加额外的空白级别。