我正在使用mqtt启动程序(
https://github.com/jpmens/mqtt-launcher
)当接收到负载为“0”的特定MQTT消息时执行命令。
这是配置文件
logfile = '/home/user/mqtt-launcher/logfile'
mqtt_broker = 'broker' # default: 'localhost'. If using TLS, this must be set to the domain name signed by$
mqtt_port = 1883 # default: 1883
mqtt_clientid = 'mqtt-launcher-1'
mqtt_username = ''
mqtt_password = ''
mqtt_tls = None # default: No TLS
topiclist = {
# topic payload value program & arguments
"channel/dostuff" : {
'0' : [
'/usr/bin/ssh',
'-i',
'/home/user/.ssh/privatekey',
'user@host',
'script.sh'
]
}
}
每次启动python脚本时,shell脚本执行两次。
但是,如果发送了负载为“0”的MQTT消息,我希望它只执行一次。
我确保在清除订阅时隐式创建的队列之前是空的,然后启动mqtt启动程序,但在程序连接后脚本仍然执行两次。
当我奔跑
user@localhost:~$ mosquitto_sub -h broker -p 1883 -t 'channel/dostuff' -v -u 'user' -P 'mysecurepassword'
我得到
channel/dostuff 0
我不熟悉蚊子,但我认为这意味着我收到了一条信息,对吗?
我打开了retain选项,重新启动了openhab和rabbitmq,但仍然发送消息。以下是openhab mqtt.cfg:
broker.url=tcp://broker:1883
broker.user=openhab
broker.pwd=mysecurepassword
broker.qos=1
broker.retain=false
broker.async=false