исправвил баги mqtt

This commit is contained in:
Dmitry Borisenko
2022-02-12 14:34:17 +01:00
parent 38acd7f569
commit 09bbd96a63
5 changed files with 66 additions and 49 deletions

View File

@@ -9,16 +9,16 @@ void mqttInit() {
SerialPrint("I", F("WIFI"), F("OK"));
if (mqtt.connected()) {
SerialPrint("I", F("MQTT"), "OK");
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
handleMqttStatus(false);
static unsigned int prevMillis;
mqttUptime = mqttUptime + (millis() - prevMillis);
prevMillis = millis();
// setLedStatus(LED_OFF);
} else {
SerialPrint("E", F("MQTT"), F("✖ Connection lost"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
handleMqttStatus(false);
mqttUptime = 0;
mqttConnect();
}
@@ -43,8 +43,9 @@ boolean mqttConnect() {
bool res = false;
if (mqttServer == "") {
SerialPrint("E", "MQTT", F("mqttServer empty"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(6));
standWebSocket.broadcastTXT(errorsHeapJson);
handleMqttStatus(true, 6);
return res;
}
SerialPrint("I", "MQTT", "connection started");
@@ -66,23 +67,20 @@ boolean mqttConnect() {
SerialPrint("I", F("MQTT"), F("Go to connection without login and password"));
} else {
SerialPrint("E", F("MQTT"), F("✖ Login or password missed"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(7));
standWebSocket.broadcastTXT(errorsHeapJson);
handleMqttStatus(true, 7);
return res;
}
if (mqtt.connected()) {
if (mqtt.state() == 0) {
SerialPrint("I", F("MQTT"), F("✔ connected"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
standWebSocket.broadcastTXT(errorsHeapJson);
// setLedStatus(LED_OFF);
handleMqttStatus(true);
// setLedStatus(LED_OFF);
mqttSubscribe();
res = true;
} else {
SerialPrint("E", F("MQTT"), "🡆 Could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s");
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
standWebSocket.broadcastTXT(errorsHeapJson);
// setLedStatus(LED_FAST);
handleMqttStatus(true);
// setLedStatus(LED_FAST);
}
}
return res;
@@ -319,45 +317,59 @@ void publishState() {
//}
}
void handleMqttStatus(bool send) {
String stateStr = getStateStr(mqtt.state());
Serial.println(stateStr);
jsonWriteStr_(errorsHeapJson, F("mqtt"), stateStr);
if (!send) standWebSocket.broadcastTXT(errorsHeapJson);
}
void handleMqttStatus(bool send, int state) {
String stateStr = getStateStr(state);
Serial.println(stateStr);
jsonWriteStr_(errorsHeapJson, F("mqtt"), stateStr);
if (!send) standWebSocket.broadcastTXT(errorsHeapJson);
}
const String getStateStr(int e) {
switch (e) {
case -4:
case -4: //Нет ответа от сервера
return F("e1");
break;
case -3:
case -3: //Соединение было разорвано
return F("e2");
break;
case -2:
case -2: //Ошибка соединения. Обычно возникает когда неверно указано название сервера MQTT
return F("e3");
break;
case -1:
case -1: //Клиент был отключен
return F("e4");
break;
case 0:
case 0: //подключено
return F("e5");
break;
case 1:
case 1: //Ошибка версии
return F("e6");
break;
case 2:
case 2: //Отклонен идентификатор
return F("e7");
break;
case 3:
case 3: //Не могу установить соединение
return F("e8");
break;
case 4:
case 4: //Неправильное имя пользователя/пароль
return F("e9");
break;
case 5:
case 5: //Не авторизован для подключения
return F("e10");
break;
case 6:
case 6: //Название сервера пустое
return F("e11");
break;
case 7:
case 7: //Имя пользователя или пароль пустые
return F("e12");
break;
case 8:
case 8: //Подключение в процессе
return F("e13");
break;
default:

View File

@@ -47,13 +47,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
SerialPrint("E", "WS " + String(num), "Package without header");
}
// all pages===================================================================
//**отправка**//
if (headerStr == ("/all|")) {
standWebSocket.sendTXT(num, ssidListHeapJson);
standWebSocket.sendTXT(num, errorsHeapJson);
}
// dashboard===================================================================
// page dashboard===================================================================
//**отправка**//
if (headerStr == "/|") {
sendFileToWs("/layout.json", num, 1024);
@@ -63,7 +57,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
if (headerStr == "/tuoyal|") {
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
}
// configutation===============================================================
// page configutation================================================================
//**отправка**//
if (headerStr == "/config|") {
sendFileToWs("/items.json", num, 1024);
@@ -75,10 +69,12 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
if (headerStr == "/gifnoc|") {
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
}
// connection===================================================================
// page connection===================================================================
//**отправка**//
if (headerStr == "/connection|") {
sendFileToWs("/settings.json", num, 1024);
standWebSocket.sendTXT(num, ssidListHeapJson);
standWebSocket.sendTXT(num, errorsHeapJson);
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
// RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
@@ -86,6 +82,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
if (headerStr == "/sgnittes|") {
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
writeUint8tToString(payload, length, headerLenth, settingsFlashJson);
standWebSocket.sendTXT(num, errorsHeapJson);
// settingsFlashJson = readFile(F("settings.json"), 4096);
}
//**отправка**//
@@ -94,26 +91,32 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
standWebSocket.sendTXT(num, ssidListHeapJson);
}
// list ===================================================================
//**сохранение**//
if (headerStr == "/mqtt|") {
sendFileToWs("/settings.json", num, 1024); //отправляем в ответ новые полученные настройки
handleMqttStatus(false, 8); //меняем статус на неопределенный
mqttReconnect(); //начинаем переподключение
standWebSocket.sendTXT(num, errorsHeapJson); //отправляем что статус неопределен
}
// page list ==========================================================================
//**отправка**//
if (headerStr == "/list|") {
standWebSocket.sendTXT(num, devListHeapJson);
}
// system ===================================================================
// page system =========================================================================
//**отправка**//
if (headerStr == "/system|") {
standWebSocket.sendTXT(num, errorsHeapJson);
}
//**сохранение**//
if (headerStr == "/rorre|") {
writeUint8tValueToJsonString(payload, length, headerLenth, errorsHeapJson);
}
// orders ===================================================================
// orders ==============================================================================
//**команда перезагрузки esp**//
if (headerStr == "/reboot|") {
ESP.restart();
}
if (headerStr == "/mqtt|") {
jsonWriteStr_(errorsHeapJson, F("mqtt"), F("e13"));
// if (jsonReadStr(errorsHeapJson, "mqtt") != "e13") {
mqttReconnect();
//}
}
} break;