Появилась очередная загвоздка. Вводные: два устройства на esp8266. Подключаю их к брокеру. С каждого устройства отправляю статус online/offline. В клиенте на смартфоне, при поочерёдном включении устройств, виджеты топиков отрабатывают штатно. Но, когда включены два устройства сразу, там просто вакханалия, они работают сразу оба, перебивая друг друга. Топики прописаны разные, брокер один.
Я же правильно понимаю, что один брокер может передавать сигналы от разных устройств, но создаются разные каналы, в зависимости от названия топиков? Почему тогда так происходит?
1-ое устройство:
const char* mqttTopicDeviceStatus = "dist/dev/st"; // топик статуса устройства
const char* mqttDeviceStatusOn = "online";
const char* mqttDeviceStatusOff = "offline";
const int mqttDeviceStatusQos = 1;
const bool mqttDeviceStatusRetained = true;
2-ое устройство:
const char* mqttTopicDeviceStatus = "aqa/device/status"; // топик статуса устройства
const char* mqttDeviceStatusOn = "online"; // статус устройства
const char* mqttDeviceStatusOff = "offline"; // статус устройства
const int mqttDeviceStatusQos = 1;
const bool mqttDeviceStatusRetained = true;
Да, и в порту происходит постоянное подключение к брокеру если два устройства подключены одновременно:
14:25:25.230 -> Попытка MQTT подключения...успешно
14:25:25.494 -> Попытка MQTT подключения...успешно
14:25:25.794 -> Попытка MQTT подключения...успешно
14:25:26.063 -> Попытка MQTT подключения...успешно
Я в брокере уже прописал второго пользователя, и устройства имеют разных пользователей, но не помогает (
Понимаю о чём вы. Клиент один, но, я пытался второму устройству назначить другой ID клиент он же в смартфоне фигурирует как брокер, и тогда это устройство в смартфоне вообще не работает. В смартфоне этот брокер постоянно переподключается…
Но, всё же, разве брокер не должен работать со многими устройствами разделяя лишь топики?
Уже понимаю, что clientId = имя устройства, по нему происходит подключение. Я просто не до конца понимаю саму механику. Как я её понимаю - так почему-то не работает.
Как я вижу и как есть:
-Есть брокер на wqtt.ru. Он без всяких названий, просто выдаёт адрес, порт, логин, пароль. Собственно это прописывается в коде.
- В коде первого устройства clientId обозначаю как “DDD”, свои топики. В телефоне я создаю брокера с названием, ну чтоб проще было “DDD”, в нём же указываю clientId = “DDD”, логин и пароль авторизации. Вписываю топики в виджеты, выбирая этот брокер. Всё работает.
-для подключения второго устройства я тоже использую этот брокер (сервис) только в устройстве clientId уже обозначаю как “AAA”, логин и пароль от второго пользователя этим брокером. В телефоне создаю новый брокер “AAA”, с clientId = “ААА ” и авторизацией второго пользователя. Топики, отличающиеся от топиков 1-го устройства, прописываю в виджеты, выбираю брокер “AAA”. Вот только этот брокер “AAA” не подключается, происходят постоянные переподключения.
Что это? Сервис имеет ограничения? Или мне нужно создавать еще один брокер, для передачи данных? Но на сайте нет возможности создавать еще брокеры, только пользователей к имеющемуся.
Я не знаю как работает это (могу только оперировать данными своего опыта). Принимающее устройство может разделять целевое устройство по многим признакам. Это может быть ID, это может быть пара логин/пароль, это может быть совокупность этих данных. Как именно работают принимающая сторона, наверное, можно узнать в документации принимающей стороны…
Неправильно. ClientID это УНИКАЛЬНЫЙ идентификатор, и он должен быть разным у ESP, у телефона и любого другого устройства, который вы подключаете к брокеру. Связывание происходит по имени топика
Возьми любую малинку - апельсинку, поставь mosquitto и будет тебе счастье иметь свой MQTT сервер. Будешь делать всё быстро и качественно. А ещё поставь MQTTExplorer, подключись к MQTT серверу и промониторь что происходит на сервере при подключении второй еспэшки.