исправвил баги 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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -28,4 +28,6 @@ void publishWidgets();
void publishState(); void publishState();
void mqttCallback(char* topic, uint8_t* payload, size_t length); void mqttCallback(char* topic, uint8_t* payload, size_t length);
void handleMqttStatus(bool send);
void handleMqttStatus(bool send, int state);
const String getStateStr(int e); const String getStateStr(int e);

View File

@@ -9,16 +9,16 @@ void mqttInit() {
SerialPrint("I", F("WIFI"), F("OK")); SerialPrint("I", F("WIFI"), F("OK"));
if (mqtt.connected()) { if (mqtt.connected()) {
SerialPrint("I", F("MQTT"), "OK"); SerialPrint("I", F("MQTT"), "OK");
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state())); handleMqttStatus(false);
static unsigned int prevMillis; static unsigned int prevMillis;
mqttUptime = mqttUptime + (millis() - prevMillis); mqttUptime = mqttUptime + (millis() - prevMillis);
prevMillis = millis(); prevMillis = millis();
// setLedStatus(LED_OFF); // setLedStatus(LED_OFF);
} else { } else {
SerialPrint("E", F("MQTT"), F("✖ Connection lost")); SerialPrint("E", F("MQTT"), F("✖ Connection lost"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state())); handleMqttStatus(false);
mqttUptime = 0; mqttUptime = 0;
mqttConnect(); mqttConnect();
} }
@@ -43,8 +43,9 @@ boolean mqttConnect() {
bool res = false; bool res = false;
if (mqttServer == "") { if (mqttServer == "") {
SerialPrint("E", "MQTT", F("mqttServer empty")); SerialPrint("E", "MQTT", F("mqttServer empty"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(6));
standWebSocket.broadcastTXT(errorsHeapJson); handleMqttStatus(true, 6);
return res; return res;
} }
SerialPrint("I", "MQTT", "connection started"); SerialPrint("I", "MQTT", "connection started");
@@ -66,23 +67,20 @@ boolean mqttConnect() {
SerialPrint("I", F("MQTT"), F("Go to connection without login and password")); SerialPrint("I", F("MQTT"), F("Go to connection without login and password"));
} else { } else {
SerialPrint("E", F("MQTT"), F("✖ Login or password missed")); SerialPrint("E", F("MQTT"), F("✖ Login or password missed"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(7)); handleMqttStatus(true, 7);
standWebSocket.broadcastTXT(errorsHeapJson);
return res; return res;
} }
if (mqtt.connected()) { if (mqtt.state() == 0) {
SerialPrint("I", F("MQTT"), F("✔ connected")); SerialPrint("I", F("MQTT"), F("✔ connected"));
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state())); handleMqttStatus(true);
standWebSocket.broadcastTXT(errorsHeapJson); // setLedStatus(LED_OFF);
// setLedStatus(LED_OFF);
mqttSubscribe(); mqttSubscribe();
res = true; res = true;
} else { } else {
SerialPrint("E", F("MQTT"), "🡆 Could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s"); SerialPrint("E", F("MQTT"), "🡆 Could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s");
jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state())); handleMqttStatus(true);
standWebSocket.broadcastTXT(errorsHeapJson); // setLedStatus(LED_FAST);
// setLedStatus(LED_FAST);
} }
} }
return res; 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) { const String getStateStr(int e) {
switch (e) { switch (e) {
case -4: case -4: //Нет ответа от сервера
return F("e1"); return F("e1");
break; break;
case -3: case -3: //Соединение было разорвано
return F("e2"); return F("e2");
break; break;
case -2: case -2: //Ошибка соединения. Обычно возникает когда неверно указано название сервера MQTT
return F("e3"); return F("e3");
break; break;
case -1: case -1: //Клиент был отключен
return F("e4"); return F("e4");
break; break;
case 0: case 0: //подключено
return F("e5"); return F("e5");
break; break;
case 1: case 1: //Ошибка версии
return F("e6"); return F("e6");
break; break;
case 2: case 2: //Отклонен идентификатор
return F("e7"); return F("e7");
break; break;
case 3: case 3: //Не могу установить соединение
return F("e8"); return F("e8");
break; break;
case 4: case 4: //Неправильное имя пользователя/пароль
return F("e9"); return F("e9");
break; break;
case 5: case 5: //Не авторизован для подключения
return F("e10"); return F("e10");
break; break;
case 6: case 6: //Название сервера пустое
return F("e11"); return F("e11");
break; break;
case 7: case 7: //Имя пользователя или пароль пустые
return F("e12"); return F("e12");
break; break;
case 8: case 8: //Подключение в процессе
return F("e13"); return F("e13");
break; break;
default: 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"); SerialPrint("E", "WS " + String(num), "Package without header");
} }
// all pages=================================================================== // page dashboard===================================================================
//**отправка**//
if (headerStr == ("/all|")) {
standWebSocket.sendTXT(num, ssidListHeapJson);
standWebSocket.sendTXT(num, errorsHeapJson);
}
// dashboard===================================================================
//**отправка**// //**отправка**//
if (headerStr == "/|") { if (headerStr == "/|") {
sendFileToWs("/layout.json", num, 1024); 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|") { if (headerStr == "/tuoyal|") {
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256); writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
} }
// configutation=============================================================== // page configutation================================================================
//**отправка**// //**отправка**//
if (headerStr == "/config|") { if (headerStr == "/config|") {
sendFileToWs("/items.json", num, 1024); 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|") { if (headerStr == "/gifnoc|") {
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256); writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
} }
// connection=================================================================== // page connection===================================================================
//**отправка**// //**отправка**//
if (headerStr == "/connection|") { if (headerStr == "/connection|") {
sendFileToWs("/settings.json", num, 1024); sendFileToWs("/settings.json", num, 1024);
standWebSocket.sendTXT(num, ssidListHeapJson);
standWebSocket.sendTXT(num, errorsHeapJson);
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений //запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
// RouterFind(jsonReadStr(settingsFlashJson, F("routerssid"))); // 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|") { if (headerStr == "/sgnittes|") {
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256); writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
writeUint8tToString(payload, length, headerLenth, settingsFlashJson); writeUint8tToString(payload, length, headerLenth, settingsFlashJson);
standWebSocket.sendTXT(num, errorsHeapJson);
// settingsFlashJson = readFile(F("settings.json"), 4096); // 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"))); RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
standWebSocket.sendTXT(num, ssidListHeapJson); 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|") { if (headerStr == "/list|") {
standWebSocket.sendTXT(num, devListHeapJson); standWebSocket.sendTXT(num, devListHeapJson);
} }
// system =================================================================== // page system =========================================================================
//**отправка**//
if (headerStr == "/system|") {
standWebSocket.sendTXT(num, errorsHeapJson);
}
//**сохранение**// //**сохранение**//
if (headerStr == "/rorre|") { if (headerStr == "/rorre|") {
writeUint8tValueToJsonString(payload, length, headerLenth, errorsHeapJson); writeUint8tValueToJsonString(payload, length, headerLenth, errorsHeapJson);
} }
// orders =================================================================== // orders ==============================================================================
//**команда перезагрузки esp**//
if (headerStr == "/reboot|") { if (headerStr == "/reboot|") {
ESP.restart(); ESP.restart();
} }
if (headerStr == "/mqtt|") {
jsonWriteStr_(errorsHeapJson, F("mqtt"), F("e13"));
// if (jsonReadStr(errorsHeapJson, "mqtt") != "e13") {
mqttReconnect();
//}
}
} break; } break;