не могу подписаться или опубликовать мой локальный москит через командный файл

avatar
KillerKaninchen 1284
8 августа 2021 в 18:08
174
1
0

Я хочу автоматизировать настройку моего брокера MQTT с помощью пакетных файлов, но этот код в пакетном файле ничего не делает.

###код для публикации#######

@ECHO OFF
cd "C:\program files\mosquitto"
mosquitto_pub -t 'test/topic' -m 'helloWorld'
PAUSE

####код для подписки##################

@ECHO OFF
cd "C:\program files\mosquitto"
mosquitto_sub -t topic/test
PAUSE

примечание: если я использую эти команды в cmd, это работает

Источник
SomethingDark
8 августа 2021 в 18:11
4

«Это ничего не делает» говорит мне очень мало. Сценарий говорит, что публикация прошла успешно? Вы получаете ошибку? Абсолютно ничего не зная о Mosquitto, я сначала подумал, что в нем отсутствуют некоторые переменные среды.

KillerKaninchen 1284
8 августа 2021 в 18:20
0

@SomethingDark cmd понятен, в нем ничего нет для подсказки и «нажмите любую клавишу» для публикации

KillerKaninchen 1284
8 августа 2021 в 18:23
0

@SomethingDark, если бы это была cmd, мне сначала нужно было бы перейти к папке mosquitto, а затем ввести команду mosquitto_sub -t тема/тест. то же самое только для публикации, с другой командой

Compo
8 августа 2021 в 18:57
0

Прямые одинарные кавычки — это обычные символы в файлах cmd.exe/batch, поэтому, если вы собираетесь использовать кавычки, вам следует вместо этого использовать прямые двойные кавычки. Также cd "C:\program files\mosquitto", изменяет только каталог, если текущий диск уже C:, по этой причине вы всегда должны использовать cd /d вместо CD /D "%ProgramFiles%\mosquitto". Важно отметить, что пакетные файлы, по сути, просто вводят каждую строку в cmd.exe так же, как вы вводите их непосредственно сами, (единственное реальное отличие состоит в том, что отдельные символы % в пакетном файле потребуются удвоить).

Compo
8 августа 2021 в 19:03
0

Кстати, если topic/test и test/topic не должны совпадать, и если они на самом деле являются путями, то вам, вероятно, следует использовать обратную косую черту Windows вместо прямой косой черты «nix». Даже если ваше приложение принимает их как прямую косую черту, оно, вероятно, также примет их как обратную косую черту, например. topic\test, даже если вам нужно избежать их, например. topic\\test. Кроме того, если это пути, то, поскольку они не являются полными путями, они будут относиться к C:\Program Files\mosquitto, так как это ваш текущий каталог. Поэтому у вас должны быть права на запись в это место.

hardillb
8 августа 2021 в 19:53
1

Темы @Compo MQTT используют / в качестве разделителя, и это не имеет ничего общего с путями к файлам или разрешениями.

Compo
8 августа 2021 в 20:53
0

Отсюда и причина, по которой я сказал: «Если это пути» @hardillb. Знал бы я, не было бы упоминания о "если", но тем не менее спасибо за информацию.

Ответы (1)

avatar
hardillb
8 августа 2021 в 19:53
2

Во-первых, ваши темы не совпадают, вы публикуете на test/topic и подписываетесь на topic/test.

Во-вторых, при совпадающих темах пакетный файл подписки должен быть запущен до экземпляра публикации. Это связано с тем, что вы не используете фиксированные идентификаторы клиентов, высокое качество обслуживания и гарантируете, что сеанс подписки запускается с флагом очистки, установленным на false. Таким образом, брокер не будет ставить в очередь сообщения для неподключенных клиентов.