исправвил баги 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 mqttCallback(char* topic, uint8_t* payload, size_t length);
void handleMqttStatus(bool send);
void handleMqttStatus(bool send, int state);
const String getStateStr(int e);

View File

@@ -9,7 +9,7 @@ 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);
@@ -18,7 +18,7 @@ void mqttInit() {
// 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,22 +67,19 @@ 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);
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);
handleMqttStatus(true);
// setLedStatus(LED_FAST);
}
}
@@ -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;