首先,我不是程序员,但我过去曾设法做过一些事情。黑客比任何事都多。
我正在使用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上完成所有这些操作。非常感谢任何帮助。
编辑其他人能够提供帮助吗?非常感谢!
答案 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主题不应以前导/开头,因为它会向主题树添加额外的空白级别。