【问题标题】:Running a process on MQTT message在 MQTT 消息上运行进程
【发布时间】:2016-02-29 20:29:06
【问题描述】:

当接收到 MQTT 数据包时,我想在我的 RP 上启动一项任务(例如播放音频文件)。 处理它的最佳方法是什么?我正在考虑写一个 c++ 脚本或 python。我对 Linux shell 不是很精通,可能有更简单的方法可以做到这一点。有什么建议吗?

【问题讨论】:

  • 每条消息的声音是否相同?

标签: bash unix raspberry-pi mqtt


【解决方案1】:

已接受的答案不适用于 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 标志可防止处理“陈旧”消息。

【讨论】:

    【解决方案2】:

    您可以使用mosquitto_sub 播放声音文件(考虑到您在某处有声音文件):

    while read msg;
    do
       aplay $msg;
    done < <(mosquitto_sub -t topic -q 1)
    

    【讨论】:

      【解决方案3】:

      您可以使用Node-RED 来做到这一点,它有一个 MQTT 输入节点,可以监听给定的主题(或通配符主题)和一个 exec 节点,它将运行任意命令,在这种情况下类似于 mpg123 播放

      【讨论】:

        【解决方案4】:

        使用 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
                        }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-12
          • 1970-01-01
          • 2016-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多