mqtt подключение

This commit is contained in:
Dmitry Borisenko
2022-02-12 03:09:57 +01:00
parent 8d86bb222a
commit 38acd7f569
14 changed files with 74 additions and 38 deletions

View File

@@ -3,5 +3,8 @@
// for the documentation about the extensions.json format // for the documentation about the extensions.json format
"recommendations": [ "recommendations": [
"platformio.platformio-ide" "platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
] ]
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -26,7 +26,7 @@ extern FS* filesystem;
extern bool fileSystemInit(); extern bool fileSystemInit();
extern void globalVarsSync(); extern void globalVarsSync();
extern void saveSettingsFlashJson(); extern void syncSettingsFlashJson();
extern void saveParamsFlashJson(); extern void saveParamsFlashJson();
extern const String getChipId(); extern const String getChipId();

View File

@@ -99,6 +99,8 @@ extern String mqttPrefix;
extern String mqttUser; extern String mqttUser;
extern String mqttPass; extern String mqttPass;
extern unsigned long mqttUptime;
extern String mqttRootDevice; extern String mqttRootDevice;
extern String chipId; extern String chipId;
extern String prex; extern String prex;

View File

@@ -28,4 +28,4 @@ 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);
const String getStateStr(); const String getStateStr(int e);

View File

@@ -18,14 +18,14 @@ void globalVarsSync() {
jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice); jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice);
jsonWriteStr_(settingsFlashJson, "id", chipId); jsonWriteStr_(settingsFlashJson, "id", chipId);
saveSettingsFlashJson(); syncSettingsFlashJson();
jsonWriteStr_(errorsHeapJson, "errors", ""); //метка для парсинга jsonWriteStr_(errorsHeapJson, "errors", ""); //метка для парсинга
jsonWriteStr_(ssidListHeapJson, "ssid", ""); //метка для парсинга jsonWriteStr_(ssidListHeapJson, "ssid", ""); //метка для парсинга
jsonWriteStr(paramsHeapJson, "params", ""); //метка для парсинга jsonWriteStr(paramsHeapJson, "params", ""); //метка для парсинга
} }
void saveSettingsFlashJson() { void syncSettingsFlashJson() {
writeFile(F("settings.json"), settingsFlashJson); writeFile(F("settings.json"), settingsFlashJson);
} }

View File

@@ -52,6 +52,8 @@ String mqttPrefix = "";
String mqttUser = ""; String mqttUser = "";
String mqttPass = ""; String mqttPass = "";
unsigned long mqttUptime;
String chipId = ""; String chipId = "";
String prex = ""; String prex = "";
String all_widgets = ""; String all_widgets = "";

View File

@@ -48,6 +48,8 @@ void setup() {
configure("/config.json"); configure("/config.json");
syncSettingsFlashJson();
//инициализация задач переодического выполнения //инициализация задач переодического выполнения
periodicTasksInit(); periodicTasksInit();
} }

View File

@@ -9,11 +9,17 @@ 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");
jsonWriteInt_(errorsHeapJson, F("mqtt"), mqtt.state()); jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
static unsigned int prevMillis;
mqttUptime = mqttUptime + (millis() - prevMillis);
prevMillis = millis();
// setLedStatus(LED_OFF); // setLedStatus(LED_OFF);
} else { } else {
SerialPrint("E", F("MQTT"), F("✖ Connection lost")); SerialPrint("E", F("MQTT"), F("✖ Connection lost"));
jsonWriteInt_(errorsHeapJson, F("mqtt"), mqtt.state()); jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
mqttUptime = 0;
mqttConnect(); mqttConnect();
} }
} else { } else {
@@ -37,7 +43,8 @@ boolean mqttConnect() {
bool res = false; bool res = false;
if (mqttServer == "") { if (mqttServer == "") {
SerialPrint("E", "MQTT", F("mqttServer empty")); SerialPrint("E", "MQTT", F("mqttServer empty"));
jsonWriteInt_(errorsHeapJson, F("mqtt"), 6); jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(6));
standWebSocket.broadcastTXT(errorsHeapJson);
return res; return res;
} }
SerialPrint("I", "MQTT", "connection started"); SerialPrint("I", "MQTT", "connection started");
@@ -59,19 +66,22 @@ 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"));
jsonWriteInt_(errorsHeapJson, F("mqtt"), 7); jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(7));
standWebSocket.broadcastTXT(errorsHeapJson);
return res; return res;
} }
if (connected) { if (mqtt.connected()) {
SerialPrint("I", F("MQTT"), F("✔ connected")); SerialPrint("I", F("MQTT"), F("✔ connected"));
jsonWriteInt_(errorsHeapJson, F("mqtt"), mqtt.state()); jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
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");
jsonWriteInt_(errorsHeapJson, F("mqtt"), mqtt.state()); jsonWriteStr_(errorsHeapJson, F("mqtt"), getStateStr(mqtt.state()));
standWebSocket.broadcastTXT(errorsHeapJson);
// setLedStatus(LED_FAST); // setLedStatus(LED_FAST);
} }
} }
@@ -309,43 +319,49 @@ void publishState() {
//} //}
} }
const String getStateStr() { const String getStateStr(int e) {
switch (mqtt.state()) { switch (e) {
case -4: case -4:
return F("no respond"); return F("e1");
break; break;
case -3: case -3:
return F("connection was broken"); return F("e2");
break; break;
case -2: case -2:
return F("connection failed"); return F("e3");
break; break;
case -1: case -1:
return F("client disconnected"); return F("e4");
break; break;
case 0: case 0:
return F("client connected"); return F("e5");
break; break;
case 1: case 1:
return F("doesn't support the requested version"); return F("e6");
break; break;
case 2: case 2:
return F("rejected the client identifier"); return F("e7");
break; break;
case 3: case 3:
return F("unable to accept the connection"); return F("e8");
break; break;
case 4: case 4:
return F("wrong username/password"); return F("e9");
break; break;
case 5: case 5:
return F("not authorized to connect"); return F("e10");
break;
case 6:
return F("e11");
break;
case 7:
return F("e12");
break;
case 8:
return F("e13");
break; break;
default: default:
return F("unspecified"); return F("unk");
break; break;
} }
} }
// 6 сервер не задан
// 7 Логин или пароль отсутствует

View File

@@ -13,6 +13,7 @@ void periodicTasksInit() {
jsonWriteInt_(errorsHeapJson, F("rssi"), RSSIquality()); jsonWriteInt_(errorsHeapJson, F("rssi"), RSSIquality());
// uptime // uptime
jsonWriteStr_(errorsHeapJson, F("upt"), prettyMillis(millis())); jsonWriteStr_(errorsHeapJson, F("upt"), prettyMillis(millis()));
jsonWriteStr_(errorsHeapJson, F("uptm"), prettyMillis(mqttUptime));
// build ver // build ver
jsonWriteStr_(errorsHeapJson, F("bver"), String(FIRMWARE_VERSION)); jsonWriteStr_(errorsHeapJson, F("bver"), String(FIRMWARE_VERSION));
periodicWsSend(); periodicWsSend();
@@ -34,6 +35,6 @@ void printGlobalVarSize() {
if (settingsFlashJsonSize > halfBuffer || errorsHeapJsonSize > halfBuffer || paramsFlashJsonSize > halfBuffer || paramsHeapJsonSize > halfBuffer) { if (settingsFlashJsonSize > halfBuffer || errorsHeapJsonSize > halfBuffer || paramsFlashJsonSize > halfBuffer || paramsHeapJsonSize > halfBuffer) {
SerialPrint(F("EE"), F("Json"), F("Insufficient buffer size!!!")); SerialPrint(F("EE"), F("Json"), F("Insufficient buffer size!!!"));
jsonWriteInt(errorsHeapJson, "jsbuf", 1); jsonWriteInt(errorsHeapJson, "jse1", 1);
} }
} }

View File

@@ -9,10 +9,14 @@ void standWebServerInit() {
HTTP.serveStatic("/js/", FileFS, "/js/", "max-age=31536000"); // кеширование на 1 год HTTP.serveStatic("/js/", FileFS, "/js/", "max-age=31536000"); // кеширование на 1 год
HTTP.serveStatic("/png/", FileFS, "/png/", "max-age=31536000"); // кеширование на 1 год HTTP.serveStatic("/png/", FileFS, "/png/", "max-age=31536000"); // кеширование на 1 год
HTTP.on("/settings.json", HTTP_GET, []() { HTTP.on("/settingsh.json", HTTP_GET, []() {
HTTP.send(200, "application/json", settingsFlashJson); HTTP.send(200, "application/json", settingsFlashJson);
}); });
HTTP.on("/settingsf.json", HTTP_GET, []() {
HTTP.send(200, "application/json", readFile(F("settings.json"), 20000));
});
HTTP.on("/errors.json", HTTP_GET, []() { HTTP.on("/errors.json", HTTP_GET, []() {
HTTP.send(200, "application/json", errorsHeapJson); HTTP.send(200, "application/json", errorsHeapJson);
}); });

View File

@@ -21,7 +21,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
SerialPrint("i", "WS " + String(num), "WS client connected"); SerialPrint("i", "WS " + String(num), "WS client connected");
if (num > 3) { if (num > 3) {
SerialPrint("E", "WS", "Too many clients, connection closed!!!"); SerialPrint("E", "WS", "Too many clients, connection closed!!!");
jsonWriteInt(errorsHeapJson, "wscle", 1); jsonWriteInt(errorsHeapJson, "wse1", 1);
standWebSocket.close(); standWebSocket.close();
standWebSocketsInit(); standWebSocketsInit();
} }
@@ -80,17 +80,19 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
if (headerStr == "/connection|") { if (headerStr == "/connection|") {
sendFileToWs("/settings.json", num, 1024); sendFileToWs("/settings.json", num, 1024);
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений //запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid"))); // RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
} }
//**сохранение**// //**сохранение**//
if (headerStr == "/sgnittes|") { if (headerStr == "/sgnittes|") {
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256); writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
settingsFlashJson = readFile(F("settings.json"), 4096); writeUint8tToString(payload, length, headerLenth, settingsFlashJson);
// settingsFlashJson = readFile(F("settings.json"), 4096);
} }
//**отправка**// //**отправка**//
if (headerStr == "/scan|") { if (headerStr == "/scan|") {
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка //запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid"))); RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
standWebSocket.sendTXT(num, ssidListHeapJson);
} }
// list =================================================================== // list ===================================================================
//**отправка**// //**отправка**//
@@ -107,7 +109,10 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
ESP.restart(); ESP.restart();
} }
if (headerStr == "/mqtt|") { if (headerStr == "/mqtt|") {
jsonWriteStr_(errorsHeapJson, F("mqtt"), F("e13"));
// if (jsonReadStr(errorsHeapJson, "mqtt") != "e13") {
mqttReconnect(); mqttReconnect();
//}
} }
} break; } break;

View File

@@ -274,7 +274,8 @@ String jsonWriteFloat(String& json, String name, float value) {
} }
void jsonErrorDetected() { void jsonErrorDetected() {
int number = jsonReadInt(errorsHeapJson, F("jserr")); jsonWriteInt(errorsHeapJson, F("jse2"), 1);
int number = jsonReadInt(errorsHeapJson, F("jse2n"));
number++; number++;
jsonWriteInt(errorsHeapJson, F("jserr"), number); jsonWriteInt(errorsHeapJson, F("jse2n"), number);
} }