RabbitMQ с MQTT отправляет сообщение о подключении - PullRequest
0 голосов
/ 16 декабря 2018

Я использую 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

1 Ответ

0 голосов
/ 16 декабря 2018

Вы опубликовали сообщение с полезной нагрузкой 0 и установленным оставленным битом.

Это означает, что когда клиент когда-либо подписывается на эту тему, последнее сообщение с установленным сохраненным битом будет доставлено этомуclient.

Вы можете очистить сохраненное сообщение, опубликовав сообщение с установленным сохраненным битом и нулевой полезной нагрузкой в ​​той же теме.Вы можете сделать это с помощью команды mosquitto_pub следующим образом:

mosquitto_pub -t "channel/dostuff" -u 'user' -P 'password' -r -n

Вы должны убедиться, что то, что вы используете для публикации сообщения, обычно не устанавливает оставшийся бит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...