При смене пароля на mqtt сервере ардуино нано перестает пинговаться

yden
Offline
Зарегистрирован: 30.01.2016

Здравствуйте.

Подскажите пожалуйста. Есть парк ардуино нано с ENC28J60. Ардуинки по mqtt (мктт сервер москит) отправляют\получают данные. На днях словил баг, видимо в коде. Я мктт сервере я поменял пароль подключения клиентов. И все (10 шт) ардуинки в один момент перестали пинговаться в сети. Возвращаю старый пароль - пинг оживает. Код на всех контроллерах в части подключения к сети и mqtt одинаковый.

Где я в коде скосячил:

#include <UIPEthernet.h>
#include <PubSubClient.h>

// =======================================================================
// Конфигурация устройства MQTT:
uint8_t mac[6] = { 0xDE, 0xAD, 0xBE, 0xD4, 0xD9, 0xD9 };
uint8_t myIP[4] = {10, 12, 10, 115};
uint8_t myDNS[4] = {10, 12, 10, 1};
uint8_t myGW[4] = {10, 12, 10, 1};
uint8_t myMASK[4] = {255, 255, 255, 0};

const char *mqtt_server = "10.12.10.10"; // Имя сервера MQTT
const int mqtt_port = 1883; // Порт для подключения к серверу MQTT
const char *mqtt_user = "****"; // Логи от сервер
const char *mqtt_pass = "****"; // Пароль от сервера

EthernetClient ethClient;
PubSubClient client(ethClient);


char buff[15];

//mqtt broker
uint32_t previousMillis_mqtt_connect = 0;  // храним время последнего подключения
uint32_t interval_mqtt_connect = 60000;     //интервал
uint32_t currentMillis_mqtt_connect = 0;

// =======================================================================
void mqtt_reconnect()
{
  currentMillis_mqtt_connect = millis();

  // подключаемся к MQTT серверу
  if (currentMillis_mqtt_connect - previousMillis_mqtt_connect > interval_mqtt_connect)
  {
    String clientId = "nanopirssensor-";
    clientId += String(random(0xffff), HEX);
    client.connect(clientId.c_str(), mqtt_user, mqtt_pass);
    previousMillis_mqtt_connect = currentMillis_mqtt_connect;

    client.publish("ihouse/gadget/doorLock", digitalRead(inButtonDoor));
  }
}

// =======================================================================
void setup()
{
  Ethernet.begin(mac, myIP, myDNS, myGW, myMASK);
  delay(10);

  client.setServer(mqtt_server, mqtt_port);
  delay(10);

}

// =======================================================================
void loop()
{
  if (!client.connected())
  {
    mqtt_reconnect();
  }

  client.loop();
}
// =======================================================================

Благодарю

sadman41
Offline
Зарегистрирован: 19.10.2016

Контроллер не может авторизоваться, висит в процедуре коннекта, не выполняя прием пакетов и не отвечая на них.

Это не баг, это штатное поведение драйвера.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А я таким не пользовался, но на будущее - пароль и логин на устройствах отличается от пароля и логина на сервисе?