LittleFS, and some mprovements

This commit is contained in:
Yuri Trikoz
2020-06-20 22:51:14 +03:00
parent db5b8d7258
commit 6fbd555474
22 changed files with 870 additions and 890 deletions

View File

@@ -43,7 +43,7 @@
}, },
{ {
"type": "h4", "type": "h4",
"title": "SPIFFS version: 2.3.4" "title": "LittleFS version: 2.3.4"
}, },
{ {
"type": "hr" "type": "hr"
@@ -109,7 +109,6 @@
"action": "/set?sceninit", "action": "/set?sceninit",
"class": "btn btn-block btn-default" "class": "btn btn-block btn-default"
}, },
{ {
"type": "link", "type": "link",
"title": "Инструкция к системе автоматизации", "title": "Инструкция к системе автоматизации",
@@ -131,7 +130,6 @@
"style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;", "style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
"class": "hidden" "class": "hidden"
}, },
{ {
"type": "button", "type": "button",
"title": "Обновить прошивку устройства", "title": "Обновить прошивку устройства",

View File

@@ -6,7 +6,7 @@
#include <ESP32Servo.h> #include <ESP32Servo.h>
#include <HTTPClient.h> #include <HTTPClient.h>
#include <HTTPUpdate.h> #include <HTTPUpdate.h>
#include <SPIFFS.h> #include <LittleFS.h>
#include <WiFi.h> #include <WiFi.h>
#include <analogWrite.h> #include <analogWrite.h>

View File

@@ -8,6 +8,7 @@
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <ESP8266HTTPUpdateServer.h> #include <ESP8266HTTPUpdateServer.h>
#include <ESPAsyncWebServer.h> #include <ESPAsyncWebServer.h>
#include <LittleFS.h>
#include <SPIFFSEditor.h> #include <SPIFFSEditor.h>
#include "Consts.h" #include "Consts.h"
@@ -56,9 +57,6 @@ extern AsyncWebServer server;
extern DallasTemperature sensors; extern DallasTemperature sensors;
/* /*
* Global vars * Global vars
*/ */
@@ -82,14 +80,13 @@ enum { ROUTER_SEARCHING,
UDP_DB, UDP_DB,
TEST }; TEST };
extern boolean just_load; extern boolean just_load;
extern String configSetupJson; //все настройки extern String configSetupJson; //все настройки
extern String configLiveJson; //все данные с датчиков (связан с mqtt) extern String configLiveJson; //все данные с датчиков (связан с mqtt)
extern String configOptionJson; //для трансфера extern String configOptionJson; //для трансфера
extern String chipID; extern String chipId;
extern String prex; extern String prex;
extern String all_widgets; extern String all_widgets;
extern String scenario; extern String scenario;
@@ -187,6 +184,7 @@ extern void clean_log_date();
extern void choose_log_date_and_send(); extern void choose_log_date_and_send();
// Main // Main
extern void setChipId();
extern void getMemoryLoad(String text); extern void getMemoryLoad(String text);
extern void saveConfig(); extern void saveConfig();
extern String getURL(const String &urls); extern String getURL(const String &urls);

View File

@@ -7,24 +7,24 @@
* Чтение строки из файла * Чтение строки из файла
* возвращает стоку из файла в которой есть искомое слово found * возвращает стоку из файла в которой есть искомое слово found
*/ */
String readFileString(const String& filename, const String& str_to_found); String readFileString(const String filename, const String to_find);
/* /*
* Добовление строки в файл * Добовление строки в файл
*/ */
String addFile(const String& fileName, const String& str); String addFile(const String filename, const String str);
/* /*
* Запись строки в файл * Запись строки в файл
*/ */
String writeFile(const String& fileName, const String& str); String writeFile(const String filename, const String str);
/* /*
* Чтение файла в строку * Чтение файла в строку
*/ */
String readFile(const String& fileName, size_t len); String readFile(const String filename, size_t max_size);
/* /*
* Размер файла * Размер файла
*/ */
String sizeFile(const String& fileName); String getFileSize(const String filename);

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include <Arduino.h> #include <Arduino.h>
#include <TZ.h>
void Time_Init(); void Time_Init();
@@ -23,11 +24,14 @@ String getTimeUnix();
*/ */
boolean getUnixTimeStr(String&); boolean getUnixTimeStr(String&);
String GetTimeWOsec(); String getTimeWOsec();
String GetDate(); /*
* Получение даты
*/
String getDate();
String GetDataDigital(); String getDateDigitalFormated();
int timeToMin(String Time); int timeToMin(String Time);

View File

@@ -1,6 +1,7 @@
#ifndef SPIFFSEditor_H_ #ifndef SPIFFSEditor_H_
#define SPIFFSEditor_H_ #define SPIFFSEditor_H_
#include <ESPAsyncWebServer.h> #include <ESPAsyncWebServer.h>
#include <LittleFS.h>
class SPIFFSEditor : public AsyncWebHandler { class SPIFFSEditor : public AsyncWebHandler {
private: private:
@@ -9,11 +10,12 @@ class SPIFFSEditor: public AsyncWebHandler {
String _password; String _password;
bool _authenticated; bool _authenticated;
uint32_t _startTime; uint32_t _startTime;
public: public:
#ifdef ESP32 #ifdef ESP32
SPIFFSEditor(const fs::FS& fs, const String& username = String(), const String& password = String()); SPIFFSEditor(const fs::FS& fs, const String& username = String(), const String& password = String());
#else #else
SPIFFSEditor(const String& username=String(), const String& password=String(), const fs::FS& fs=SPIFFS); SPIFFSEditor(const String& username = String(), const String& password = String(), const fs::FS& fs = LittleFS);
#endif #endif
virtual bool canHandle(AsyncWebServerRequest* request) override final; virtual bool canHandle(AsyncWebServerRequest* request) override final;
virtual void handleRequest(AsyncWebServerRequest* request) override final; virtual void handleRequest(AsyncWebServerRequest* request) override final;

View File

@@ -274,12 +274,14 @@ void inputDigit() {
jsonWriteStr(configLiveJson, "digit" + number, start_state); jsonWriteStr(configLiveJson, "digit" + number, start_state);
createWidget(widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digit" + number); createWidget(widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digit" + number);
} }
void digitSet() { void digitSet() {
String number = sCmd.next(); String number = sCmd.next();
String value = sCmd.next(); String value = sCmd.next();
jsonWriteStr(configLiveJson, "digit" + number, value); jsonWriteStr(configLiveJson, "digit" + number, value);
sendSTATUS("digit" + number, value); sendSTATUS("digit" + number, value);
} }
//===================================================================================================================================== //=====================================================================================================================================
//=========================================Добавление окна ввода времени=============================================================== //=========================================Добавление окна ввода времени===============================================================
void inputTime() { void inputTime() {
@@ -294,6 +296,7 @@ void inputTime() {
jsonWriteStr(configLiveJson, "time" + number, start_state); jsonWriteStr(configLiveJson, "time" + number, start_state);
createWidget(widget_name, page_name, page_number, "widgets/widget.inputTime.json", "time" + number); createWidget(widget_name, page_name, page_number, "widgets/widget.inputTime.json", "time" + number);
} }
void timeSet() { void timeSet() {
String number = sCmd.next(); String number = sCmd.next();
String value = sCmd.next(); String value = sCmd.next();
@@ -334,7 +337,7 @@ void textSet() {
text.replace("#", " "); text.replace("#", " ");
String time = getTime(); String time = getTime();
time.replace(":", "."); time.replace(":", ".");
text = text + " " + GetDataDigital() + " " + time; text = text + " " + getDateDigitalFormated() + " " + time;
} }
jsonWriteStr(configLiveJson, "text" + number, text); jsonWriteStr(configLiveJson, "text" + number, text);

View File

@@ -1,40 +0,0 @@
#include "Global.h"
void File_system_init() {
Serial.begin(115200);
//Serial.setDebugOutput(true);
Serial.println("--------------started----------------");
//--------------------------------------------------------------
SPIFFS.begin();
configSetupJson = readFile("config.json", 4096);
configSetupJson.replace(" ", "");
configSetupJson.replace("\r\n", "");
Serial.println(configSetupJson);
//jsonWriteStr(configLiveJson, "name", jsonReadStr(configSetupJson, "name"));
//jsonWriteStr(configLiveJson, "lang", jsonReadStr(configSetupJson, "lang"));
#ifdef ESP32
uint32_t chipID_u = ESP.getEfuseMac();
chipID = String(chipID_u);
jsonWriteStr(configSetupJson, "chipID", chipID);
#endif
#ifdef ESP8266
chipID = String( ESP.getChipId() ) + "-" + String(ESP.getFlashChipId());
jsonWriteStr(configSetupJson, "chipID", chipID);
Serial.setDebugOutput(0);
#endif
jsonWriteStr(configSetupJson, "firmware_version", firmware_version);
prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID;
Serial.println(chipID);
}
void get_esp_info() {
}

View File

@@ -11,6 +11,8 @@ AsyncWebSocket ws;
TickerScheduler ts(TEST + 1); TickerScheduler ts(TEST + 1);
WiFiClient espClient;
PubSubClient client_mqtt(espClient); PubSubClient client_mqtt(espClient);
StringCommand sCmd; StringCommand sCmd;
@@ -19,10 +21,6 @@ AsyncWebServer server(80);
DallasTemperature sensors; DallasTemperature sensors;
WiFiClient espClient;
/* /*
* Global vars * Global vars
*/ */
@@ -35,11 +33,11 @@ String configLiveJson = "{}";
String configOptionJson = "{}"; String configOptionJson = "{}";
// Mqtt // Mqtt
String chipID = ""; String chipId = "";
String prex; String prex = "";
String all_widgets = ""; String all_widgets = "";
String scenario; String scenario = "";
String order_loop; String order_loop = "";
// Sensors // Sensors
String analog_value_names_list; String analog_value_names_list;

View File

@@ -7,6 +7,24 @@ UptimeInterval myUptime(10);
void handle_uptime(); void handle_uptime();
void handle_statistics(); void handle_statistics();
void File_system_init() {
if (!LittleFS.begin()) {
Serial.println("[E] LittleFS");
return;
}
configSetupJson = readFile("config.json", 4096);
configSetupJson.replace(" ", "");
configSetupJson.replace("\r\n", "");
jsonWriteStr(configSetupJson, "chipID", chipId);
jsonWriteStr(configSetupJson, "firmware_version", firmware_version);
prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId;
Serial.println(configSetupJson);
}
void All_init() { void All_init() {
Device_init(); Device_init();
Scenario_init(); Scenario_init();
@@ -47,7 +65,7 @@ void Device_init() {
#ifdef layout_in_ram #ifdef layout_in_ram
all_widgets = ""; all_widgets = "";
#else #else
SPIFFS.remove("/layout.txt"); LittleFS.remove("/layout.txt");
#endif #endif
txtExecution("firmware.c.txt"); txtExecution("firmware.c.txt");

View File

@@ -22,7 +22,7 @@ void logging() {
LOG1, period_min.toInt() * 1000 * 60, [&](void*) { LOG1, period_min.toInt() * 1000 * 60, [&](void*) {
String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0); String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0);
deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadInt(configOptionJson, tmp_buf_1 + "_c"), jsonReadStr(configLiveJson, tmp_buf_1)); deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadInt(configOptionJson, tmp_buf_1 + "_c"), jsonReadStr(configLiveJson, tmp_buf_1));
Serial.println("[i] LOGGING for sensor '" + tmp_buf_1 + "' done"); Serial.println("[I] LOGGING for sensor '" + tmp_buf_1 + "' done");
}, },
nullptr, false); nullptr, false);
} }
@@ -31,7 +31,7 @@ void logging() {
LOG2, period_min.toInt() * 1000 * 60, [&](void*) { LOG2, period_min.toInt() * 1000 * 60, [&](void*) {
String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1); String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1);
deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadInt(configOptionJson, tmp_buf_2 + "_c"), jsonReadStr(configLiveJson, tmp_buf_2)); deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadInt(configOptionJson, tmp_buf_2 + "_c"), jsonReadStr(configLiveJson, tmp_buf_2));
Serial.println("[i] LOGGING for sensor '" + tmp_buf_2 + "' done"); Serial.println("[I] LOGGING for sensor '" + tmp_buf_2 + "' done");
}, },
nullptr, false); nullptr, false);
} }
@@ -40,7 +40,7 @@ void logging() {
LOG3, period_min.toInt() * 1000 * 60, [&](void*) { LOG3, period_min.toInt() * 1000 * 60, [&](void*) {
String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2); String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2);
deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadInt(configOptionJson, tmp_buf_3 + "_c"), jsonReadStr(configLiveJson, tmp_buf_3)); deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadInt(configOptionJson, tmp_buf_3 + "_c"), jsonReadStr(configLiveJson, tmp_buf_3));
Serial.println("[i] LOGGING for sensor '" + tmp_buf_3 + "' done"); Serial.println("[I] LOGGING for sensor '" + tmp_buf_3 + "' done");
}, },
nullptr, false); nullptr, false);
} }
@@ -49,7 +49,7 @@ void logging() {
LOG4, period_min.toInt() * 1000 * 60, [&](void*) { LOG4, period_min.toInt() * 1000 * 60, [&](void*) {
String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3); String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3);
deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadInt(configOptionJson, tmp_buf_4 + "_c"), jsonReadStr(configLiveJson, tmp_buf_4)); deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadInt(configOptionJson, tmp_buf_4 + "_c"), jsonReadStr(configLiveJson, tmp_buf_4));
Serial.println("[i] LOGGING for sensor '" + tmp_buf_4 + "' done"); Serial.println("[I] LOGGING for sensor '" + tmp_buf_4 + "' done");
}, },
nullptr, false); nullptr, false);
} }
@@ -58,7 +58,7 @@ void logging() {
LOG5, period_min.toInt() * 1000 * 60, [&](void*) { LOG5, period_min.toInt() * 1000 * 60, [&](void*) {
String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4); String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4);
deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadInt(configOptionJson, tmp_buf_5 + "_c"), jsonReadStr(configLiveJson, tmp_buf_5)); deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadInt(configOptionJson, tmp_buf_5 + "_c"), jsonReadStr(configLiveJson, tmp_buf_5));
Serial.println("[i] LOGGING for sensor '" + tmp_buf_5 + "' done"); Serial.println("[I] LOGGING for sensor '" + tmp_buf_5 + "' done");
}, },
nullptr, false); nullptr, false);
} }
@@ -71,11 +71,11 @@ void deleteOldDate(String file, int seted_number_of_lines, String date_to_add) {
Serial.println("=====> [i] in log file " + file + " " + current_number_of_lines + " lines"); Serial.println("=====> [i] in log file " + file + " " + current_number_of_lines + " lines");
if (current_number_of_lines > seted_number_of_lines + 1) { if (current_number_of_lines > seted_number_of_lines + 1) {
SPIFFS.remove("/" + file); LittleFS.remove("/" + file);
current_number_of_lines = 0; current_number_of_lines = 0;
} }
if (current_number_of_lines == 0) { if (current_number_of_lines == 0) {
SPIFFS.remove("/" + file); LittleFS.remove("/" + file);
current_number_of_lines = 0; current_number_of_lines = 0;
} }
if (current_number_of_lines > seted_number_of_lines) { if (current_number_of_lines > seted_number_of_lines) {
@@ -133,7 +133,7 @@ void sendLogData(String file, String topic) {
Serial.println(json_array); Serial.println(json_array);
sendCHART(topic, json_array); sendCHART(topic, json_array);
json_array = ""; json_array = "";
getMemoryLoad("[i] after send log date"); getMemoryLoad("[I] after send log date");
} }
} }
@@ -152,14 +152,14 @@ void sendLogData(String file, String topic) {
//Serial.println(final_line); //Serial.println(final_line);
sendCHART(topic, final_line); sendCHART(topic, final_line);
} }
getMemoryLoad("[i] after send log date"); getMemoryLoad("[I] after send log date");
*/ */
//=========================================Очистка данных=================================================================================== //=========================================Очистка данных===================================================================================
void clean_log_date() { void clean_log_date() {
String all_line = logging_value_names_list; String all_line = logging_value_names_list;
while (all_line.length() != 0) { while (all_line.length() != 0) {
String tmp = selectToMarker(all_line, ","); String tmp = selectToMarker(all_line, ",");
SPIFFS.remove("/log." + tmp + ".txt"); LittleFS.remove("/log." + tmp + ".txt");
all_line = deleteBeforeDelimiter(all_line, ","); all_line = deleteBeforeDelimiter(all_line, ",");
} }
all_line = ""; all_line = "";

View File

@@ -60,16 +60,16 @@ boolean MQTT_Connecting() {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
if (!client_mqtt.connected()) { if (!client_mqtt.connected()) {
Serial.println("[V] Connecting to MQTT server commenced"); Serial.println("[V] Connecting to MQTT server commenced");
if (client_mqtt.connect(chipID.c_str(), jsonReadStr(configSetupJson, "mqttUser").c_str(), jsonReadStr(configSetupJson, "mqttPass").c_str())) { if (client_mqtt.connect(chipId.c_str(), jsonReadStr(configSetupJson, "mqttUser").c_str(), jsonReadStr(configSetupJson, "mqttPass").c_str())) {
Serial.println("[VV] MQTT connected"); Serial.println("[VV] MQTT connected");
led_blink("off"); led_blink("off");
client_mqtt.setCallback(callback); client_mqtt.setCallback(callback);
client_mqtt.subscribe(jsonReadStr(configSetupJson, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи client_mqtt.subscribe(jsonReadStr(configSetupJson, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/+/control").c_str()); // Подписываемся на топики control
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/order").c_str()); // Подписываемся на топики order
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/update").c_str()); client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/update").c_str());
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/devc").c_str()); client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/devc").c_str());
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/devs").c_str()); client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/devs").c_str());
Serial.println("[V] Callback set, subscribe done"); Serial.println("[V] Callback set, subscribe done");
res = true; res = true;
} else { } else {
@@ -142,7 +142,7 @@ void outcoming_date() {
//======================================CONFIG================================================== //======================================CONFIG==================================================
boolean sendMQTT(String end_of_topik, String data) { boolean sendMQTT(String end_of_topik, String data) {
String topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + end_of_topik; String topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + end_of_topik;
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false); boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
client_mqtt.print(data); client_mqtt.print(data);
client_mqtt.endPublish(); client_mqtt.endPublish();
@@ -150,7 +150,7 @@ boolean sendMQTT(String end_of_topik, String data) {
} }
boolean sendCHART(String topik, String data) { boolean sendCHART(String topik, String data) {
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status"; topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/" + "status";
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false); boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
client_mqtt.print(data); client_mqtt.print(data);
client_mqtt.endPublish(); client_mqtt.endPublish();
@@ -158,14 +158,14 @@ boolean sendCHART(String topik, String data) {
} }
boolean sendCHART_test(String topik, String data) { boolean sendCHART_test(String topik, String data) {
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status"; topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/" + "status";
boolean send_status = client_mqtt.publish(topik.c_str(), data.c_str(), false); boolean send_status = client_mqtt.publish(topik.c_str(), data.c_str(), false);
return send_status; return send_status;
} }
//======================================STATUS================================================== //======================================STATUS==================================================
void sendSTATUS(String topik, String state) { void sendSTATUS(String topik, String state) {
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status"; topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/" + "status";
String json_ = "{}"; String json_ = "{}";
jsonWriteStr(json_, "status", state); jsonWriteStr(json_, "status", state);
client_mqtt.publish(topik.c_str(), json_.c_str(), false); client_mqtt.publish(topik.c_str(), json_.c_str(), false);
@@ -198,20 +198,21 @@ void sendAllWigets() {
Serial.println("[V] " + line); Serial.println("[V] " + line);
psn_1 = psn_2 + 1; psn_1 = psn_2 + 1;
} while (psn_2 + 2 < all_widgets.length()); } while (psn_2 + 2 < all_widgets.length());
getMemoryLoad("[i] after send all widgets"); getMemoryLoad("[I] after send all widgets");
} }
} }
#endif #endif
#ifndef layout_in_ram #ifndef layout_in_ram
void sendAllWigets() { void sendAllWigets() {
File configFile = SPIFFS.open("/layout.txt", "r"); auto file = LittleFS.open("/layout.txt", "r");
if (!configFile) { if (!file) {
Serial.println("[e] on open layout.txt");
return; return;
} }
configFile.seek(0, SeekSet); //поставим курсор в начало файла file.seek(0, SeekSet); //поставим курсор в начало файла
while (configFile.position() != configFile.size()) { while (file.position() != file.size()) {
String widget_to_send = configFile.readStringUntil('\n'); String widget_to_send = file.readStringUntil('\n');
Serial.println("[V] " + widget_to_send); Serial.println("[V] " + widget_to_send);
sendMQTT("config", widget_to_send); sendMQTT("config", widget_to_send);
} }
@@ -221,7 +222,7 @@ void sendAllWigets() {
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
String current_config = configLiveJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"} String current_config = configLiveJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
getMemoryLoad("[i] after send all date"); getMemoryLoad("[I] after send all date");
current_config.replace("{", ""); current_config.replace("{", "");
current_config.replace("}", ""); //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1" current_config.replace("}", ""); //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
current_config += ","; //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1", current_config += ","; //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1",

View File

@@ -147,12 +147,12 @@ void ultrasonic_reading() {
jsonWriteInt(configLiveJson, levelPr_value_name, level); jsonWriteInt(configLiveJson, levelPr_value_name, level);
eventGen(levelPr_value_name, ""); eventGen(levelPr_value_name, "");
sendSTATUS(levelPr_value_name, String(level)); sendSTATUS(levelPr_value_name, String(level));
Serial.println("[i] sensor '" + levelPr_value_name + "' data: " + String(level)); Serial.println("[I] sensor '" + levelPr_value_name + "' data: " + String(level));
jsonWriteInt(configLiveJson, ultrasonicCm_value_name, distance_cm); jsonWriteInt(configLiveJson, ultrasonicCm_value_name, distance_cm);
eventGen(ultrasonicCm_value_name, ""); eventGen(ultrasonicCm_value_name, "");
sendSTATUS(ultrasonicCm_value_name, String(distance_cm)); sendSTATUS(ultrasonicCm_value_name, String(distance_cm));
Serial.println("[i] sensor '" + ultrasonicCm_value_name + "' data: " + String(distance_cm)); Serial.println("[I] sensor '" + ultrasonicCm_value_name + "' data: " + String(distance_cm));
} }
} }
#endif #endif
@@ -202,7 +202,7 @@ void analog_reading1() {
jsonWriteInt(configLiveJson, value_name, analog); jsonWriteInt(configLiveJson, value_name, analog);
eventGen(value_name, ""); eventGen(value_name, "");
sendSTATUS(value_name, String(analog)); sendSTATUS(value_name, String(analog));
Serial.println("[i] sensor '" + value_name + "' data: " + String(analog)); Serial.println("[I] sensor '" + value_name + "' data: " + String(analog));
} }
void analog_reading2() { void analog_reading2() {
@@ -221,7 +221,7 @@ void analog_reading2() {
jsonWriteInt(configLiveJson, value_name, analog); jsonWriteInt(configLiveJson, value_name, analog);
eventGen(value_name, ""); eventGen(value_name, "");
sendSTATUS(value_name, String(analog)); sendSTATUS(value_name, String(analog));
Serial.println("[i] sensor '" + value_name + "' data: " + String(analog)); Serial.println("[I] sensor '" + value_name + "' data: " + String(analog));
} }
#endif #endif
//========================================================================================================================================= //=========================================================================================================================================
@@ -250,7 +250,7 @@ void dallas_reading() {
jsonWriteStr(configLiveJson, "dallas", String(temp)); jsonWriteStr(configLiveJson, "dallas", String(temp));
eventGen("dallas", ""); eventGen("dallas", "");
sendSTATUS("dallas", String(temp)); sendSTATUS("dallas", String(temp));
Serial.println("[i] sensor 'dallas' send date " + String(temp)); Serial.println("[I] sensor 'dallas' send date " + String(temp));
} }
#endif #endif
//========================================================================================================================================= //=========================================================================================================================================
@@ -289,7 +289,7 @@ void dhtT_reading() {
eventGen(dhtT_value_name, ""); eventGen(dhtT_value_name, "");
jsonWriteStr(configLiveJson, dhtT_value_name, String(value)); jsonWriteStr(configLiveJson, dhtT_value_name, String(value));
sendSTATUS(dhtT_value_name, String(value)); sendSTATUS(dhtT_value_name, String(value));
Serial.println("[i] sensor '" + dhtT_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + dhtT_value_name + "' data: " + String(value));
} }
} }
} }
@@ -327,7 +327,7 @@ void dhtH_reading() {
eventGen(dhtH_value_name, ""); eventGen(dhtH_value_name, "");
jsonWriteStr(configLiveJson, dhtH_value_name, String(value)); jsonWriteStr(configLiveJson, dhtH_value_name, String(value));
sendSTATUS(dhtH_value_name, String(value)); sendSTATUS(dhtH_value_name, String(value));
Serial.println("[i] sensor '" + dhtH_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + dhtH_value_name + "' data: " + String(value));
} }
} }
} }
@@ -352,7 +352,7 @@ void dhtP_reading() {
eventGen("dhtPerception", ""); eventGen("dhtPerception", "");
sendSTATUS("dhtPerception", final_line); sendSTATUS("dhtPerception", final_line);
if (client_mqtt.connected()) { if (client_mqtt.connected()) {
Serial.println("[i] sensor 'dhtPerception' data: " + final_line); Serial.println("[I] sensor 'dhtPerception' data: " + final_line);
} }
} }
} }
@@ -409,7 +409,7 @@ void dhtC_reading() {
jsonWriteStr(configLiveJson, "dhtComfort", final_line); jsonWriteStr(configLiveJson, "dhtComfort", final_line);
eventGen("dhtComfort", ""); eventGen("dhtComfort", "");
sendSTATUS("dhtComfort", final_line); sendSTATUS("dhtComfort", final_line);
Serial.println("[i] sensor 'dhtComfort' send date " + final_line); Serial.println("[I] sensor 'dhtComfort' send date " + final_line);
} }
} }
@@ -468,7 +468,7 @@ void dhtD_reading() {
jsonWriteInt(configLiveJson, "dhtDewpoint", value); jsonWriteInt(configLiveJson, "dhtDewpoint", value);
eventGen("dhtDewpoint", ""); eventGen("dhtDewpoint", "");
sendSTATUS("dhtDewpoint", String(value)); sendSTATUS("dhtDewpoint", String(value));
Serial.println("[i] sensor 'dhtDewpoint' data: " + String(value)); Serial.println("[I] sensor 'dhtDewpoint' data: " + String(value));
} }
} }
#endif #endif
@@ -504,7 +504,7 @@ void bmp280T_reading() {
jsonWriteStr(configLiveJson, bmp280T_value_name, String(value)); jsonWriteStr(configLiveJson, bmp280T_value_name, String(value));
eventGen(bmp280T_value_name, ""); eventGen(bmp280T_value_name, "");
sendSTATUS(bmp280T_value_name, String(value)); sendSTATUS(bmp280T_value_name, String(value));
Serial.println("[i] sensor '" + bmp280T_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + bmp280T_value_name + "' data: " + String(value));
} }
//bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2 //bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2
@@ -536,7 +536,7 @@ void bmp280P_reading() {
jsonWriteStr(configLiveJson, bmp280P_value_name, String(value)); jsonWriteStr(configLiveJson, bmp280P_value_name, String(value));
eventGen(bmp280P_value_name, ""); eventGen(bmp280P_value_name, "");
sendSTATUS(bmp280P_value_name, String(value)); sendSTATUS(bmp280P_value_name, String(value));
Serial.println("[i] sensor '" + bmp280P_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + bmp280P_value_name + "' data: " + String(value));
} }
//========================================================================================================================================= //=========================================================================================================================================
@@ -561,7 +561,7 @@ void bme280T_reading() {
jsonWriteStr(configLiveJson, bme280T_value_name, String(value)); jsonWriteStr(configLiveJson, bme280T_value_name, String(value));
eventGen(bme280T_value_name, ""); eventGen(bme280T_value_name, "");
sendSTATUS(bme280T_value_name, String(value)); sendSTATUS(bme280T_value_name, String(value));
Serial.println("[i] sensor '" + bme280T_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + bme280T_value_name + "' data: " + String(value));
} }
//bme280P pres1 0x76 Давление#bmp280 Датчики any-data 1 //bme280P pres1 0x76 Давление#bmp280 Датчики any-data 1
@@ -585,7 +585,7 @@ void bme280P_reading() {
jsonWriteStr(configLiveJson, bme280P_value_name, String(value)); jsonWriteStr(configLiveJson, bme280P_value_name, String(value));
eventGen(bme280P_value_name, ""); eventGen(bme280P_value_name, "");
sendSTATUS(bme280P_value_name, String(value)); sendSTATUS(bme280P_value_name, String(value));
Serial.println("[i] sensor '" + bme280P_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + bme280P_value_name + "' data: " + String(value));
} }
//bme280H hum1 0x76 Влажность#bmp280 Датчики any-data 1 //bme280H hum1 0x76 Влажность#bmp280 Датчики any-data 1
@@ -608,7 +608,7 @@ void bme280H_reading() {
jsonWriteStr(configLiveJson, bme280H_value_name, String(value)); jsonWriteStr(configLiveJson, bme280H_value_name, String(value));
eventGen(bme280H_value_name, ""); eventGen(bme280H_value_name, "");
sendSTATUS(bme280H_value_name, String(value)); sendSTATUS(bme280H_value_name, String(value));
Serial.println("[i] sensor '" + bme280H_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + bme280H_value_name + "' data: " + String(value));
} }
//bme280A altit1 0x76 Высота#bmp280 Датчики any-data 1 //bme280A altit1 0x76 Высота#bmp280 Датчики any-data 1
@@ -631,5 +631,5 @@ void bme280A_reading() {
jsonWriteStr(configLiveJson, bme280A_value_name, String(value)); jsonWriteStr(configLiveJson, bme280A_value_name, String(value));
eventGen(bme280A_value_name, ""); eventGen(bme280A_value_name, "");
sendSTATUS(bme280A_value_name, String(value)); sendSTATUS(bme280A_value_name, String(value));
Serial.println("[i] sensor '" + bme280A_value_name + "' data: " + String(value)); Serial.println("[I] sensor '" + bme280A_value_name + "' data: " + String(value));
} }

View File

@@ -7,7 +7,7 @@ void initUpgrade() {
if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt"); if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
#endif #endif
jsonWriteStr(configSetupJson, "last_version", last_version); jsonWriteStr(configSetupJson, "last_version", last_version);
Serial.print("[i] Last firmware version: "); Serial.print("[I] Last firmware version: ");
Serial.println(last_version); Serial.println(last_version);
} }
@@ -25,7 +25,6 @@ void do_upgrade_url() {
} }
void upgrade_firmware() { void upgrade_firmware() {
String scenario_for_update; String scenario_for_update;
String config_for_update; String config_for_update;
String configSetup_for_update; String configSetup_for_update;
@@ -47,13 +46,12 @@ void upgrade_firmware() {
#endif #endif
if (ret == HTTP_UPDATE_OK) { if (ret == HTTP_UPDATE_OK) {
writeFile("firmware.s.txt", scenario_for_update); writeFile("firmware.s.txt", scenario_for_update);
writeFile("firmware.c.txt", config_for_update); writeFile("firmware.c.txt", config_for_update);
writeFile("config.json", configSetup_for_update); writeFile("config.json", configSetup_for_update);
saveConfig(); saveConfig();
Serial.println("SPIFFS upgrade done!"); Serial.println("Upgrade done!");
Serial.println("Start upgrade BUILD, please wait..."); Serial.println("Start upgrade BUILD, please wait...");
#ifdef ESP32 #ifdef ESP32
@@ -66,15 +64,14 @@ void upgrade_firmware() {
#endif #endif
if (ret == HTTP_UPDATE_OK) { if (ret == HTTP_UPDATE_OK) {
Serial.println("Upgrade done!");
Serial.println("BUILD upgrade done!"); Serial.println("Restart...");
Serial.println("Restart ESP....");
ESP.restart(); ESP.restart();
} else { } else {
Serial.println("!!!!BUILD upgrade ERROR"); Serial.println("[e] on build");
} }
} else { } else {
Serial.println("!!!!SPIFFS upgrade ERROR"); Serial.println("[e] on upgrade");
} }
} }

View File

@@ -1,42 +1,47 @@
#include "Utils/FileUtils.h" #include "Utils/FileUtils.h"
String readFileString(const String& filename, const String& str_to_found) { #include <LittleFS.h>
String res = "failed";
auto file = SPIFFS.open("/" + filename, "r"); String readFileString(const String filename, const String to_find) {
if (file && file.find(str_to_found.c_str())) { String res = "Failed";
auto file = LittleFS.open("/" + filename, "r");
if (!file) {
return "Failed";
}
if (file.find(to_find.c_str())) {
res = file.readStringUntil('\n'); res = file.readStringUntil('\n');
} }
file.close(); file.close();
return res; return res;
} }
String addFile(const String& fileName, const String& str) { String addFile(const String filename, const String str) {
auto file = SPIFFS.open("/" + fileName, "a"); auto file = LittleFS.open("/" + filename, "a");
if (!file) { if (!file) {
return "Failed to open file"; return "Failed";
} }
file.println(str); file.println(str);
file.close(); file.close();
return "Write sucсess"; return "Write sucсess";
} }
String writeFile(const String& fileName, const String& str) { String writeFile(const String filename, const String str) {
auto file = SPIFFS.open("/" + fileName, "w"); auto file = LittleFS.open("/" + filename, "w");
if (!file) { if (!file) {
return "Failed to open file"; return "Failed";
} }
file.print(str); file.print(str);
file.close(); file.close();
return "Write sucсess"; return "Write sucсess";
} }
String readFile(const String& fileName, size_t len) { String readFile(const String filename, size_t max_size) {
File file = SPIFFS.open("/" + fileName, "r"); auto file = LittleFS.open("/" + filename, "r");
if (!file) { if (!file) {
return "Failed"; return "Failed";
} }
size_t size = file.size(); size_t size = file.size();
if (size > len) { if (size > max_size) {
file.close(); file.close();
return "Large"; return "Large";
} }
@@ -45,8 +50,8 @@ String readFile(const String& fileName, size_t len) {
return temp; return temp;
} }
String sizeFile(const String& fileName) { String getFileSize(const String filename) {
auto file = SPIFFS.open("/" + fileName, "r"); auto file = LittleFS.open("/" + filename, "r");
if (!file) { if (!file) {
return "Failed"; return "Failed";
} }

View File

@@ -3,9 +3,6 @@
#include "Global.h" #include "Global.h"
#include "Utils\StringUtils.h" #include "Utils\StringUtils.h"
static const char* TIME_FORMAT PROGMEM = "%2d:%2d:%2d";
static const char* TIME_FORMAT_WITH_DAYS PROGMEM = "%dd %2d:%2d";
void Time_Init() { void Time_Init() {
ts.add( ts.add(
TIME_SYNC, 30000, [&](void*) { TIME_SYNC, 30000, [&](void*) {
@@ -14,33 +11,9 @@ void Time_Init() {
nullptr, true); nullptr, true);
} }
const String prettyMillis(unsigned long time_ms) {
unsigned long tmp = time_ms;
unsigned long seconds;
unsigned long minutes;
unsigned long hours;
unsigned long days;
seconds = tmp % 60;
tmp = tmp / 60;
minutes = tmp % 60;
tmp = tmp / 60;
hours = tmp % 24;
days = tmp / 24;
char buf[16];
if (days) {
sprintf_P(buf, TIME_FORMAT, hours, minutes, seconds);
} else {
sprintf_P(buf, TIME_FORMAT_WITH_DAYS, days, hours, minutes);
}
return String(buf);
}
void time_check() { void time_check() {
if (getTimeUnix() == "failed") { if (getTimeUnix() == "failed") {
Serial.println("[i] Time is not synchronized, start synchronization"); Serial.println("[I] Trying to obtain time");
reconfigTime(); reconfigTime();
} }
} }
@@ -50,7 +23,7 @@ void reconfigTime() {
String ntp = jsonReadStr(configSetupJson, "ntp"); String ntp = jsonReadStr(configSetupJson, "ntp");
configTime(0, 0, ntp.c_str()); configTime(0, 0, ntp.c_str());
int i = 0; int i = 0;
Serial.println("[i] Awaiting for time "); Serial.println("[I] Start time sync");
#ifdef ESP32 #ifdef ESP32
struct tm timeinfo; struct tm timeinfo;
while (!getLocalTime(&timeinfo) && i <= 4) { while (!getLocalTime(&timeinfo) && i <= 4) {
@@ -67,15 +40,15 @@ void reconfigTime() {
//} //}
#endif #endif
if (getTimeUnix() != "failed") { if (getTimeUnix() != "failed") {
Serial.print("[V] Time synchronized = "); Serial.print("[V] Got time = ");
Serial.print(GetDataDigital()); Serial.print(getDateDigitalFormated());
Serial.print(" "); Serial.print(' ');
Serial.println(getTime()); Serial.println(getTime());
} else { } else {
Serial.println("[E] Time server or internet connection error, will try again in 30 sec"); Serial.println("[E] Failed to obtain time, retry in 30 sec");
} }
} else { } else {
Serial.println("[E] Get time impossible, no wifi connection"); Serial.println("[E] Unable to obtain time");
} }
} }
@@ -105,7 +78,7 @@ String getTime() {
return Time; // Возврашаем полученное время return Time; // Возврашаем полученное время
} }
String GetTimeWOsec() { String getTimeWOsec() {
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt(); int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
now = now + zone; now = now + zone;
@@ -116,8 +89,7 @@ String GetTimeWOsec() {
return Time; // Возврашаем полученное время return Time; // Возврашаем полученное время
} }
// Получение даты String getDate() {
String GetDate() {
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt(); int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
now = now + zone; now = now + zone;
@@ -130,8 +102,8 @@ String GetDate() {
return Data; // Возврашаем полученную дату return Data; // Возврашаем полученную дату
} }
String GetDataDigital() { String getDateDigitalFormated() {
String date = GetDate(); String date = getDate();
date = deleteBeforeDelimiter(date, " "); date = deleteBeforeDelimiter(date, " ");
@@ -168,3 +140,30 @@ int timeToMin(String Time) {
min += selectToMarker(Time, ":").toInt(); // Добавим секунды из полных минут min += selectToMarker(Time, ":").toInt(); // Добавим секунды из полных минут
return min; return min;
} }
static const char* TIME_FORMAT PROGMEM = "%2d:%2d:%2d";
static const char* TIME_FORMAT_WITH_DAYS PROGMEM = "%dd %2d:%2d";
const String prettyMillis(unsigned long time_ms) {
unsigned long tmp = time_ms;
unsigned long seconds;
unsigned long minutes;
unsigned long hours;
unsigned long days;
seconds = tmp % 60;
tmp = tmp / 60;
minutes = tmp % 60;
tmp = tmp / 60;
hours = tmp % 24;
days = tmp / 24;
char buf[16];
if (days) {
sprintf_P(buf, TIME_FORMAT, hours, minutes, seconds);
} else {
sprintf_P(buf, TIME_FORMAT_WITH_DAYS, days, hours, minutes);
}
return String(buf);
}

View File

@@ -147,7 +147,7 @@ void web_init() {
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
if (request->hasArg("updatelist")) { if (request->hasArg("updatelist")) {
SPIFFS.remove("/dev.csv"); LittleFS.remove("/dev.csv");
addFile("dev.csv", "device id;device name;ip address"); addFile("dev.csv", "device id;device name;ip address");
request->redirect("/?set.udp"); request->redirect("/?set.udp");
} }
@@ -286,7 +286,7 @@ void web_init() {
//==============================upgrade settings============================================= //==============================upgrade settings=============================================
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) { server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
upgrade_url = true; upgrade_url = true;
Serial.print("[i] Last firmware version: "); Serial.print("[I] Last firmware version: ");
Serial.println(last_version); Serial.println(last_version);
String tmp = "{}"; String tmp = "{}";
int case_of_update; int case_of_update;
@@ -306,20 +306,17 @@ void web_init() {
case 1: { case 1: {
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Последняя версия прошивки уже установлена."); jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Последняя версия прошивки уже установлена.");
jsonWriteStr(tmp, "class", "pop-up"); jsonWriteStr(tmp, "class", "pop-up");
} } break;
break;
case 2: { case 2: {
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Имеется новая версия прошивки<a href=\"#\" class=\"btn btn-block btn-danger\" onclick=\"send_request(this, '/upgrade');setTimeout(function(){ location.href='/'; }, 120000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>"); jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Имеется новая версия прошивки<a href=\"#\" class=\"btn btn-block btn-danger\" onclick=\"send_request(this, '/upgrade');setTimeout(function(){ location.href='/'; }, 120000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>");
jsonWriteStr(tmp, "class", "pop-up"); jsonWriteStr(tmp, "class", "pop-up");
} } break;
break;
case 3: { case 3: {
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Ошибка... Cервер не найден. Попробуйте позже..."); jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Ошибка... Cервер не найден. Попробуйте позже...");
jsonWriteStr(tmp, "class", "pop-up"); jsonWriteStr(tmp, "class", "pop-up");
} } break;
break;
case 4: { case 4: {
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Нажмите на кнопку \"обновить прошивку\" повторно..."); jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Нажмите на кнопку \"обновить прошивку\" повторно...");

View File

@@ -17,11 +17,16 @@ void Web_server_init() {
events.send(p, "ota"); events.send(p, "ota");
}); });
ArduinoOTA.onError([](ota_error_t error) { ArduinoOTA.onError([](ota_error_t error) {
if (error == OTA_AUTH_ERROR) events.send("Auth Failed", "ota"); if (error == OTA_AUTH_ERROR)
else if (error == OTA_BEGIN_ERROR) events.send("Begin Failed", "ota"); events.send("Auth Failed", "ota");
else if (error == OTA_CONNECT_ERROR) events.send("Connect Failed", "ota"); else if (error == OTA_BEGIN_ERROR)
else if (error == OTA_RECEIVE_ERROR) events.send("Recieve Failed", "ota"); events.send("Begin Failed", "ota");
else if (error == OTA_END_ERROR) events.send("End Failed", "ota"); else if (error == OTA_CONNECT_ERROR)
events.send("Connect Failed", "ota");
else if (error == OTA_RECEIVE_ERROR)
events.send("Recieve Failed", "ota");
else if (error == OTA_END_ERROR)
events.send("End Failed", "ota");
}); });
ArduinoOTA.setHostname(hostName); ArduinoOTA.setHostname(hostName);
ArduinoOTA.begin(); ArduinoOTA.begin();
@@ -32,7 +37,7 @@ void Web_server_init() {
#ifdef MDNS_enable #ifdef MDNS_enable
MDNS.addService("http", "tcp", 80); MDNS.addService("http", "tcp", 80);
#endif #endif
//SPIFFS.begin(); //LittleFS.begin();
/********************************************************************************* /*********************************************************************************
**************************************WS****************************************** **************************************WS******************************************
*********************************************************************************/ *********************************************************************************/
@@ -50,7 +55,7 @@ void Web_server_init() {
**************************************WEB**************************************** **************************************WEB****************************************
*********************************************************************************/ *********************************************************************************/
#ifdef ESP32 #ifdef ESP32
server.addHandler(new SPIFFSEditor(SPIFFS, jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str())); server.addHandler(new SPIFFSEditor(LittleFS, jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str()));
#elif defined(ESP8266) #elif defined(ESP8266)
server.addHandler(new SPIFFSEditor(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str())); server.addHandler(new SPIFFSEditor(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str()));
#endif #endif
@@ -59,13 +64,12 @@ void Web_server_init() {
request->send(200, "text/plain", String(ESP.getFreeHeap())); request->send(200, "text/plain", String(ESP.getFreeHeap()));
});*/ });*/
server.serveStatic("/css/", SPIFFS, "/css/").setCacheControl("max-age=31536000"); server.serveStatic("/css/", LittleFS, "/css/").setCacheControl("max-age=31536000");
server.serveStatic("/js/", SPIFFS, "/js/").setCacheControl("max-age=31536000"); server.serveStatic("/js/", LittleFS, "/js/").setCacheControl("max-age=31536000");
server.serveStatic("/favicon.ico", SPIFFS, "/favicon.ico").setCacheControl("max-age=31536000"); server.serveStatic("/favicon.ico", LittleFS, "/favicon.ico").setCacheControl("max-age=31536000");
server.serveStatic("/icon.jpeg", SPIFFS, "/icon.jpeg").setCacheControl("max-age=31536000"); server.serveStatic("/icon.jpeg", LittleFS, "/icon.jpeg").setCacheControl("max-age=31536000");
server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm") server.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm").setAuthentication(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str());
.setAuthentication(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str());
server.onNotFound([](AsyncWebServerRequest *request) { server.onNotFound([](AsyncWebServerRequest *request) {
Serial.printf("NOT_FOUND: "); Serial.printf("NOT_FOUND: ");
@@ -114,7 +118,6 @@ void Web_server_init() {
request->send(404); request->send(404);
}); });
server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) { server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) {
if (!index) if (!index)
Serial.printf("UploadStart: %s\n", filename.c_str()); Serial.printf("UploadStart: %s\n", filename.c_str());
@@ -123,7 +126,6 @@ void Web_server_init() {
Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index + len); Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index + len);
}); });
server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) { server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
if (!index) if (!index)
Serial.printf("BodyStart: %u\n", total); Serial.printf("BodyStart: %u\n", total);

View File

@@ -3,7 +3,6 @@
boolean RouterFind(String ssid); boolean RouterFind(String ssid);
void ROUTER_Connecting() { void ROUTER_Connecting() {
led_blink("slow"); led_blink("slow");
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
@@ -15,8 +14,7 @@ void ROUTER_Connecting() {
if (_ssid == "" && _password == "") { if (_ssid == "" && _password == "") {
WiFi.begin(); WiFi.begin();
} } else {
else {
WiFi.begin(_ssid.c_str(), _password.c_str()); WiFi.begin(_ssid.c_str(), _password.c_str());
Serial.print("ssid: "); Serial.print("ssid: ");
Serial.println(_ssid); Serial.println(_ssid);
@@ -33,15 +31,13 @@ void ROUTER_Connecting() {
delay(1000); delay(1000);
} }
if (WiFi.status() != WL_CONNECTED) if (WiFi.status() != WL_CONNECTED) {
{
// Если не удалось подключиться запускаем в режиме AP // Если не удалось подключиться запускаем в режиме AP
Serial.println(""); Serial.println("");
// WiFi.disconnect(true); // WiFi.disconnect(true);
StartAPMode(); StartAPMode();
} } else {
else {
// Иначе удалось подключиться отправляем сообщение // Иначе удалось подключиться отправляем сообщение
// о подключении и выводим адрес IP // о подключении и выводим адрес IP
Serial.println(""); Serial.println("");
@@ -57,7 +53,7 @@ void ROUTER_Connecting() {
} }
bool StartAPMode() { bool StartAPMode() {
Serial.println("WiFi up AP"); Serial.println("[I] WiFi AP");
WiFi.disconnect(); WiFi.disconnect();
WiFi.mode(WIFI_AP); WiFi.mode(WIFI_AP);
@@ -67,67 +63,49 @@ bool StartAPMode() {
WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str()); WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
IPAddress myIP = WiFi.softAPIP(); IPAddress myIP = WiFi.softAPIP();
led_blink("on"); led_blink("on");
Serial.print("AP IP address: "); Serial.print("[I] AP IP: ");
Serial.println(myIP); Serial.println(myIP);
jsonWriteStr(configSetupJson, "ip", myIP.toString()); jsonWriteStr(configSetupJson, "ip", myIP.toString());
//if (jsonReadInt(configOptionJson, "pass_status") != 1) { //if (jsonReadInt(configOptionJson, "pass_status") != 1) {
ts.add(ROUTER_SEARCHING, 10 * 1000, [&](void*) { ts.add(
Serial.println("->try find router"); ROUTER_SEARCHING, 10 * 1000, [&](void*) {
Serial.println("[I] searching ssid");
if (RouterFind(jsonReadStr(configSetupJson, "routerssid"))) { if (RouterFind(jsonReadStr(configSetupJson, "routerssid"))) {
ts.remove(ROUTER_SEARCHING); ts.remove(ROUTER_SEARCHING);
WiFi.scanDelete(); WiFi.scanDelete();
ROUTER_Connecting(); ROUTER_Connecting();
} }
}, nullptr, true); },
nullptr, true);
//} //}
return true; return true;
} }
boolean RouterFind(String ssid) {
boolean RouterFind(String ssid)
{
bool res = false; bool res = false;
int n = WiFi.scanComplete(); int8_t n = WiFi.scanComplete();
Serial.println("n = " + String(n)); Serial.printf("[I][WIFI] scan result = %d\n", n);
if (n == -2) if (n == -2) {
{ //Сканирование не было запущено, запускаем // не было запущено, запускаем
Serial.println("[WIFI][i] scanning has not been triggered, starting scanning"); Serial.println("[I][WIFI] scanning has not been triggered, start scanning");
WiFi.scanNetworks(true, false); //async, show_hidde // async, show_hidden
}
else if (n == -1)
{ //Сканирование все еще выполняется
Serial.println("[WIFI][i] scanning still in progress");
}
else if (n == 0)
{ //ни одна сеть не найдена
Serial.println("[WIFI][i] no any wifi sations, starting scanning");
WiFi.scanNetworks(true, false); WiFi.scanNetworks(true, false);
} } else if (n == -1) {
else if (n > 0) // все еще выполняется
{ Serial.println("[I][WIFI] scanning in progress");
for (int i = 0; i <= n; i++) } else if (n == 0) {
{ // не найдена ни одна сеть
if (WiFi.SSID(i) == ssid) Serial.println("[I][WIFI] no wifi stations, start scanning");
{ WiFi.scanNetworks(true, false);
} else if (n > 0) {
for (int8_t i = 0; i < n; i++) {
if (WiFi.SSID(i) == ssid) {
WiFi.scanDelete(); WiFi.scanDelete();
res = true; res = true;
} } else {
else Serial.printf("%d) %s;\n", i, WiFi.SSID(i).c_str());
{
Serial.print(i);
Serial.print(")");
if (i == n)
{
Serial.print(WiFi.SSID(i));
Serial.println("; ");
}
else
{
Serial.print(WiFi.SSID(i));
Serial.println("; ");
}
} }
} }
WiFi.scanDelete(); WiFi.scanDelete();

View File

@@ -3,47 +3,51 @@
void not_async_actions(); void not_async_actions();
void setup() { void setup() {
//-------------------------------------------------------------- Serial.begin(115200);
Serial.println();
Serial.println("--------------started----------------");
//Serial.setDebugOutput(true);
setChipId();
File_system_init(); File_system_init();
Serial.println("SPIFFS_init"); Serial.println("[V] LittleFS");
//--------------------------------------------------------------
CMD_init(); CMD_init();
Serial.println("[V] CMD_init"); Serial.println("[V] Commands");
//--------------------------------------------------------------
sensors_init(); sensors_init();
Serial.println("[V] sensors_init"); Serial.println("[V] Sensors");
//--------------------------------------------------------------
All_init(); All_init();
Serial.println("[V] All_init"); Serial.println("[V] All");
//--------------------------------------------------------------
ROUTER_Connecting(); ROUTER_Connecting();
Serial.println("[V] ROUTER_Connecting"); Serial.println("[V] ROUTER_Connecting");
//--------------------------------------------------------------
uptime_init(); uptime_init();
Serial.println("[V] statistics_init"); Serial.println("[V] statistics_init");
//--------------------------------------------------------------
initUpgrade(); initUpgrade();
Serial.println("[V] initUpgrade"); Serial.println("[V] initUpgrade");
//--------------------------------------------------------------
Web_server_init(); Web_server_init();
Serial.println("[V] Web_server_init"); Serial.println("[V] Web_server_init");
//--------------------------------------------------------------
web_init(); web_init();
Serial.println("[V] web_init"); Serial.println("[V] web_init");
//--------------------------------------------------------------
Time_Init(); Time_Init();
Serial.println("[V] Time_Init"); Serial.println("[V] Time_Init");
//--------------------------------------------------------------
#ifdef UDP_enable #ifdef UDP_enable
UDP_init(); UDP_init();
Serial.println("[V] UDP_init"); Serial.println("[V] UDP_init");
#endif #endif
//--------------------------------------------------------------
ts.add( ts.add(
TEST, 10000, [&](void*) { TEST, 10000, [&](void*) {
getMemoryLoad("[i] periodic check of"); getMemoryLoad("[I] sysinfo ");
//ws.textAll(json);
}, },
nullptr, true); nullptr, true);

View File

@@ -33,7 +33,7 @@ void safeDataToFile(String data, String Folder) {
void sendCONFIG(String topik, String widgetConfig, String key, String date) { void sendCONFIG(String topik, String widgetConfig, String key, String date) {
yield(); yield();
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/status"; topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/status";
String outer = "{\"widgetConfig\":"; String outer = "{\"widgetConfig\":";
String inner = "{\""; String inner = "{\"";
inner = inner + key; inner = inner + key;
@@ -65,16 +65,32 @@ void led_blink(String satus) {
#endif #endif
} }
const String getChipId() {
String res;
#ifdef ESP32
res = String(ESP.getEfuseMac());
#endif
#ifdef ESP8266
res = String(ESP.getChipId()) + "-" + String(ESP.getFlashChipId());
#endif
return res;
}
void setChipId() {
chipId = getChipId();
Serial.println(chipId);
}
void getMemoryLoad(String text) { void getMemoryLoad(String text) {
#ifdef ESP8266 #ifdef ESP8266
int all_memory = 52864; uint32_t all_memory = 52864;
#endif #endif
#ifdef ESP32 #ifdef ESP32
int all_memory = 362868; uint32_t all_memory = 362868;
#endif #endif
int memory_remain = ESP.getFreeHeap(); uint32_t memory_remain = ESP.getFreeHeap();
int memory_used = all_memory - memory_remain; uint32_t memory_used = all_memory - memory_remain;
int memory_load = (memory_used * 100) / all_memory; uint32_t memory_load = (memory_used * 100) / all_memory;
if (memory_load > 65) { if (memory_load > 65) {
Serial.println("Memory low!"); Serial.println("Memory low!");
} }

View File

@@ -20,7 +20,7 @@ void add_dev_in_list(String fileName, String id, String dev_name, String ip);
#ifdef UDP_enable #ifdef UDP_enable
void UDP_init() { void UDP_init() {
SPIFFS.remove("/dev.csv"); LittleFS.remove("/dev.csv");
addFile("dev.csv", "device id;device name;ip address"); addFile("dev.csv", "device id;device name;ip address");
#ifdef ESP8266 #ifdef ESP8266
@@ -37,7 +37,7 @@ void UDP_init() {
if (jsonReadStr(configSetupJson, "udponoff") == "1") { if (jsonReadStr(configSetupJson, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
if (!udp_busy) { if (!udp_busy) {
String line_to_send = "iotm;" + chipID + ";" + jsonReadStr(configSetupJson, "name"); String line_to_send = "iotm;" + chipId + ";" + jsonReadStr(configSetupJson, "name");
#ifdef ESP8266 #ifdef ESP8266
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP()); Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
Udp.write(line_to_send.c_str()); Udp.write(line_to_send.c_str());
@@ -122,10 +122,10 @@ void do_udp_data_parse() {
} }
} }
void add_dev_in_list(String fileName, String id, String dev_name, String ip) { void add_dev_in_list(String filename, String id, String dev_name, String ip) {
File configFile = SPIFFS.open("/" + fileName, "r"); File configFile = LittleFS.open("/" + filename, "r");
if (!configFile.find(id.c_str())) { if (!configFile.find(id.c_str())) {
addFile(fileName, id + ";" + dev_name + "; <a href=\"http://" + ip + "\" target=\"_blank\"\">" + ip + "</a>"); addFile(filename, id + ";" + dev_name + "; <a href=\"http://" + ip + "\" target=\"_blank\"\">" + ip + "</a>");
} }
} }