Я использую mqtt-launcher (https://github.com/jpmens/mqtt-launcher) для выполнения команд при получении определенного сообщения MQTT с полезной нагрузкой "0".
Вот конфигурация
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, скрипт оболочки выполняется дважды.
Но я хочу, чтобы он выполнялся только один раз, если отправлено сообщение MQTT с полезной нагрузкой "0".
Я удостоверился, что очередь, которая неявно создается, когда подписка была пустой, прежде чем очистить ее, затем запустив mqtt-launcher, но все равно скрипт выполняется дважды после подключения программы.
Когда я запускаю user@localhost:~$ mosquitto_sub -h broker -p 1883 -t 'channel/dostuff' -v -u 'user' -P 'mysecurepassword'
, я получаюchannel/dostuff 0
Я не знаком с москитом, но думаю, что это означает, что я получаю сообщение, верно?
Я отказался от опции сохранения, перезапустил 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