【发布时间】:2016-02-29 20:29:06
【问题描述】:
当接收到 MQTT 数据包时,我想在我的 RP 上启动一项任务(例如播放音频文件)。 处理它的最佳方法是什么?我正在考虑写一个 c++ 脚本或 python。我对 Linux shell 不是很精通,可能有更简单的方法可以做到这一点。有什么建议吗?
【问题讨论】:
-
每条消息的声音是否相同?
标签: bash unix raspberry-pi mqtt
当接收到 MQTT 数据包时,我想在我的 RP 上启动一项任务(例如播放音频文件)。 处理它的最佳方法是什么?我正在考虑写一个 c++ 脚本或 python。我对 Linux shell 不是很精通,可能有更简单的方法可以做到这一点。有什么建议吗?
【问题讨论】:
标签: bash unix raspberry-pi mqtt
已接受的答案不适用于 ash(Busybox 上的默认 shell,例如在 Onion Omega 上使用的)。对于ash 兼容的解决方案:
#!/bin/sh
mosquitto_sub -R -h your.mqtt.host -t topic | while read RAW_DATA
do
echo "Got msg" # replace with your task of choice
done
-R 标志可防止处理“陈旧”消息。
【讨论】:
您可以使用mosquitto_sub 播放声音文件(考虑到您在某处有声音文件):
while read msg;
do
aplay $msg;
done < <(mosquitto_sub -t topic -q 1)
【讨论】:
您可以使用Node-RED 来做到这一点,它有一个 MQTT 输入节点,可以监听给定的主题(或通配符主题)和一个 exec 节点,它将运行任意命令,在这种情况下类似于 mpg123 或 播放
【讨论】:
使用 Don Libes 的期望:
#!/usr/local/bin/expect
spawn mosquitto_sub -t mytop
while 1 {
expect {
"hello" {
puts "got hello"
}
"world" {
exec sh -c "touch world"
}
"bye" {
break
}
}
}
【讨论】: