mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-31 12:29:14 +03:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
285a898ba9 | ||
|
|
ba30af5182 | ||
|
|
5250049e08 | ||
|
|
c7ba7fecbc | ||
|
|
abfc847793 | ||
|
|
7d1c0268f5 | ||
|
|
b6145695cc | ||
|
|
0cf60ab214 | ||
|
|
a038960a4c |
279
Cmd.ino
279
Cmd.ino
@@ -4,8 +4,6 @@ void CMD_init() {
|
|||||||
sCmd.addCommand("buttonSet", buttonSet);
|
sCmd.addCommand("buttonSet", buttonSet);
|
||||||
sCmd.addCommand("buttonChange", buttonChange);
|
sCmd.addCommand("buttonChange", buttonChange);
|
||||||
|
|
||||||
//sCmd.addCommand("button_touch", button_touch);
|
|
||||||
|
|
||||||
sCmd.addCommand("pinSet", pinSet);
|
sCmd.addCommand("pinSet", pinSet);
|
||||||
sCmd.addCommand("pinChange", pinChange);
|
sCmd.addCommand("pinChange", pinChange);
|
||||||
|
|
||||||
@@ -48,23 +46,6 @@ void CMD_init() {
|
|||||||
|
|
||||||
|
|
||||||
handle_time_init();
|
handle_time_init();
|
||||||
|
|
||||||
//======новые виджеты ver2.0=======//
|
|
||||||
/*
|
|
||||||
sCmd.addCommand("inputText", inputText);
|
|
||||||
sCmd.addCommand("inputTextSet", inputTextSet);
|
|
||||||
|
|
||||||
sCmd.addCommand("inputTime", inputTime);
|
|
||||||
sCmd.addCommand("inputTimeSet", inputTimeSet);
|
|
||||||
|
|
||||||
sCmd.addCommand("inputDate", inputDate);
|
|
||||||
sCmd.addCommand("inputDateSet", inputDateSet);
|
|
||||||
|
|
||||||
sCmd.addCommand("inputDate", inputDate);
|
|
||||||
|
|
||||||
//sCmd.addCommand("inputDropdown", inputDropdown);
|
|
||||||
*/
|
|
||||||
//=================================//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -75,13 +56,13 @@ void button() {
|
|||||||
|
|
||||||
String button_number = sCmd.next();
|
String button_number = sCmd.next();
|
||||||
String button_param = sCmd.next();
|
String button_param = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
jsonWrite(optionJson, "button_param" + button_number, button_param);
|
jsonWriteStr(optionJson, "button_param" + button_number, button_param);
|
||||||
jsonWrite(configJson, "buttonSet" + button_number, start_state);
|
jsonWriteStr(configJson, "buttonSet" + button_number, start_state);
|
||||||
|
|
||||||
if (isDigitStr (button_param)) {
|
if (isDigitStr (button_param)) {
|
||||||
pinMode(button_param.toInt(), OUTPUT);
|
pinMode(button_param.toInt(), OUTPUT);
|
||||||
@@ -89,7 +70,7 @@ void button() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (button_param == "scenario") {
|
if (button_param == "scenario") {
|
||||||
jsonWrite(configSetup, "scenario", start_state);
|
jsonWriteStr(configSetup, "scenario", start_state);
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
@@ -107,7 +88,7 @@ void button() {
|
|||||||
str = deleteBeforeDelimiter(str, ",");
|
str = deleteBeforeDelimiter(str, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.toggle.json", "buttonSet" + button_number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.toggle.json", "buttonSet" + button_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buttonSet() {
|
void buttonSet() {
|
||||||
@@ -121,7 +102,7 @@ void buttonSet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (button_param == "scenario") {
|
if (button_param == "scenario") {
|
||||||
jsonWrite(configSetup, "scenario", button_state);
|
jsonWriteStr(configSetup, "scenario", button_state);
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
@@ -142,7 +123,7 @@ void buttonSet() {
|
|||||||
|
|
||||||
eventGen ("buttonSet", button_number);
|
eventGen ("buttonSet", button_number);
|
||||||
|
|
||||||
jsonWrite(configJson, "buttonSet" + button_number, button_state);
|
jsonWriteStr(configJson, "buttonSet" + button_number, button_state);
|
||||||
sendSTATUS("buttonSet" + button_number, button_state);
|
sendSTATUS("buttonSet" + button_number, button_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,7 +136,7 @@ void buttonChange() {
|
|||||||
current_state = "1";
|
current_state = "1";
|
||||||
}
|
}
|
||||||
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
||||||
jsonWrite(configJson, "buttonSet" + button_number, current_state);
|
jsonWriteStr(configJson, "buttonSet" + button_number, current_state);
|
||||||
sendSTATUS("buttonSet" + button_number, current_state);
|
sendSTATUS("buttonSet" + button_number, current_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,21 +159,21 @@ void pwm() {
|
|||||||
static boolean flag = true;
|
static boolean flag = true;
|
||||||
String pwm_number = sCmd.next();
|
String pwm_number = sCmd.next();
|
||||||
String pwm_pin = sCmd.next();
|
String pwm_pin = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
viget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
|
|
||||||
uint8_t pwm_pin_int = pwm_pin.toInt();
|
uint8_t pwm_pin_int = pwm_pin.toInt();
|
||||||
jsonWrite(optionJson, "pwm_pin" + pwm_number, pwm_pin);
|
jsonWriteStr(optionJson, "pwm_pin" + pwm_number, pwm_pin);
|
||||||
pinMode(pwm_pin_int, INPUT);
|
pinMode(pwm_pin_int, INPUT);
|
||||||
analogWrite(pwm_pin_int, start_state.toInt());
|
analogWrite(pwm_pin_int, start_state.toInt());
|
||||||
//analogWriteFreq(32000);
|
//analogWriteFreq(32000);
|
||||||
jsonWrite(configJson, "pwmSet" + pwm_number, start_state);
|
jsonWriteStr(configJson, "pwmSet" + pwm_number, start_state);
|
||||||
|
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.range.json", "pwmSet" + pwm_number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.range.json", "pwmSet" + pwm_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pwmSet() {
|
void pwmSet() {
|
||||||
@@ -206,7 +187,7 @@ void pwmSet() {
|
|||||||
|
|
||||||
eventGen ("pwmSet", pwm_number);
|
eventGen ("pwmSet", pwm_number);
|
||||||
|
|
||||||
jsonWrite(configJson, "pwmSet" + pwm_number, pwm_state);
|
jsonWriteStr(configJson, "pwmSet" + pwm_number, pwm_state);
|
||||||
sendSTATUS("pwmSet" + pwm_number, pwm_state);
|
sendSTATUS("pwmSet" + pwm_number, pwm_state);
|
||||||
}
|
}
|
||||||
//==================================================================================================================
|
//==================================================================================================================
|
||||||
@@ -232,13 +213,13 @@ void handleButton() {
|
|||||||
|
|
||||||
eventGen ("switchSet", String(switch_number));
|
eventGen ("switchSet", String(switch_number));
|
||||||
|
|
||||||
jsonWrite(configJson, "switchSet" + String(switch_number), "1");
|
jsonWriteStr(configJson, "switchSet" + String(switch_number), "1");
|
||||||
}
|
}
|
||||||
if (buttons[switch_number].rose()) {
|
if (buttons[switch_number].rose()) {
|
||||||
|
|
||||||
eventGen ("switchSet", String(switch_number));
|
eventGen ("switchSet", String(switch_number));
|
||||||
|
|
||||||
jsonWrite(configJson, "switchSet" + String(switch_number), "0");
|
jsonWriteStr(configJson, "switchSet" + String(switch_number), "0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch_number++;
|
switch_number++;
|
||||||
@@ -250,19 +231,19 @@ void handleButton() {
|
|||||||
void inputDigit() {
|
void inputDigit() {
|
||||||
String value_name = sCmd.next();
|
String value_name = sCmd.next();
|
||||||
String number = value_name.substring(5);
|
String number = value_name.substring(5);
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
viget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
page_name.replace("#", " ");
|
page_name.replace("#", " ");
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(configJson, "digitSet" + number, start_state);
|
jsonWriteStr(configJson, "digitSet" + number, start_state);
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.inputNum.json", "digitSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digitSet" + number);
|
||||||
}
|
}
|
||||||
void digitSet() {
|
void digitSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWrite(configJson, "digitSet" + number, value);
|
jsonWriteStr(configJson, "digitSet" + number, value);
|
||||||
sendSTATUS("digitSet" + number, value);
|
sendSTATUS("digitSet" + number, value);
|
||||||
}
|
}
|
||||||
//=====================================================================================================================================
|
//=====================================================================================================================================
|
||||||
@@ -270,19 +251,19 @@ void digitSet() {
|
|||||||
void inputTime() {
|
void inputTime() {
|
||||||
String value_name = sCmd.next();
|
String value_name = sCmd.next();
|
||||||
String number = value_name.substring(4);
|
String number = value_name.substring(4);
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
viget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
page_name.replace("#", " ");
|
page_name.replace("#", " ");
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(configJson, "timeSet" + number, start_state);
|
jsonWriteStr(configJson, "timeSet" + number, start_state);
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "timeSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "timeSet" + number);
|
||||||
}
|
}
|
||||||
void timeSet() {
|
void timeSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWrite(configJson, "timeSet" + number, value);
|
jsonWriteStr(configJson, "timeSet" + number, value);
|
||||||
sendSTATUS("timeSet" + number, value);
|
sendSTATUS("timeSet" + number, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,7 +272,7 @@ void handle_time_init() {
|
|||||||
|
|
||||||
String tmp = GetTime();
|
String tmp = GetTime();
|
||||||
tmp.replace(":", "-");
|
tmp.replace(":", "-");
|
||||||
jsonWrite(configJson, "timenowSet", tmp);
|
jsonWriteStr(configJson, "timenowSet", tmp);
|
||||||
eventGen ("timenowSet", "");
|
eventGen ("timenowSet", "");
|
||||||
|
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
@@ -302,11 +283,11 @@ void handle_time_init() {
|
|||||||
void text() {
|
void text() {
|
||||||
|
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.anydata.json", "textSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", "textSet" + number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -324,7 +305,7 @@ void textSet() {
|
|||||||
text = text + " " + GetDataDigital() + " " + time;
|
text = text + " " + GetDataDigital() + " " + time;
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonWrite(configJson, "textSet" + number, text);
|
jsonWriteStr(configJson, "textSet" + number, text);
|
||||||
sendSTATUS("textSet" + number, text);
|
sendSTATUS("textSet" + number, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,7 +318,7 @@ void stepper() {
|
|||||||
String pin_step = sCmd.next();
|
String pin_step = sCmd.next();
|
||||||
String pin_dir = sCmd.next();
|
String pin_dir = sCmd.next();
|
||||||
|
|
||||||
jsonWrite(optionJson, "stepper" + stepper_number, pin_step + " " + pin_dir);
|
jsonWriteStr(optionJson, "stepper" + stepper_number, pin_step + " " + pin_dir);
|
||||||
pinMode(pin_step.toInt(), OUTPUT);
|
pinMode(pin_step.toInt(), OUTPUT);
|
||||||
pinMode(pin_dir.toInt(), OUTPUT);
|
pinMode(pin_dir.toInt(), OUTPUT);
|
||||||
}
|
}
|
||||||
@@ -346,7 +327,7 @@ void stepper() {
|
|||||||
void stepperSet() {
|
void stepperSet() {
|
||||||
String stepper_number = sCmd.next();
|
String stepper_number = sCmd.next();
|
||||||
String steps = sCmd.next();
|
String steps = sCmd.next();
|
||||||
jsonWrite(optionJson, "steps" + stepper_number, steps);
|
jsonWriteStr(optionJson, "steps" + stepper_number, steps);
|
||||||
String stepper_speed = sCmd.next();
|
String stepper_speed = sCmd.next();
|
||||||
String pin_step = selectToMarker (jsonRead(optionJson, "stepper" + stepper_number), " ");
|
String pin_step = selectToMarker (jsonRead(optionJson, "stepper" + stepper_number), " ");
|
||||||
String pin_dir = deleteBeforeDelimiter (jsonRead(optionJson, "stepper" + stepper_number), " ");
|
String pin_dir = deleteBeforeDelimiter (jsonRead(optionJson, "stepper" + stepper_number), " ");
|
||||||
@@ -389,38 +370,38 @@ void stepperSet() {
|
|||||||
/*
|
/*
|
||||||
void inputText() {
|
void inputText() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
viget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
page_name.replace("#", " ");
|
page_name.replace("#", " ");
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(configJson, "inputTextSet" + number, start_state);
|
jsonWriteStr(configJson, "inputTextSet" + number, start_state);
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputText.json", "inputTextSet" + number);
|
||||||
}
|
}
|
||||||
void inputTextSet() {
|
void inputTextSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWrite(configJson, "inputTextSet" + number, value);
|
jsonWriteStr(configJson, "inputTextSet" + number, value);
|
||||||
sendSTATUS("inputTextSet" + number, value);
|
sendSTATUS("inputTextSet" + number, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inputTime() {
|
void inputTime() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
viget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
page_name.replace("#", " ");
|
page_name.replace("#", " ");
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(configJson, "inputTimeSet" + number, start_state);
|
jsonWriteStr(configJson, "inputTimeSet" + number, start_state);
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "inputTimeSet" + number);
|
||||||
}
|
}
|
||||||
void inputTimeSet() {
|
void inputTimeSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
value.replace(":", ".");
|
value.replace(":", ".");
|
||||||
jsonWrite(configJson, "inputTimeSet" + number, value);
|
jsonWriteStr(configJson, "inputTimeSet" + number, value);
|
||||||
value.replace(".", ":");
|
value.replace(".", ":");
|
||||||
sendSTATUS("inputTimeSet" + number, value);
|
sendSTATUS("inputTimeSet" + number, value);
|
||||||
}
|
}
|
||||||
@@ -428,19 +409,19 @@ void stepperSet() {
|
|||||||
|
|
||||||
void inputDate() {
|
void inputDate() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
viget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
page_name.replace("#", " ");
|
page_name.replace("#", " ");
|
||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(configJson, "inputDateSet" + number, start_state);
|
jsonWriteStr(configJson, "inputDateSet" + number, start_state);
|
||||||
createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputDate.json", "inputDateSet" + number);
|
||||||
}
|
}
|
||||||
void inputDateSet() {
|
void inputDateSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWrite(configJson, "inputDateSet" + number, value);
|
jsonWriteStr(configJson, "inputDateSet" + number, value);
|
||||||
sendSTATUS("inputDateSet" + number, value);
|
sendSTATUS("inputDateSet" + number, value);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
@@ -482,29 +463,11 @@ void handleCMD_loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================выполнение команд (через период) по очереди из строки order=======================================
|
|
||||||
/*void handleCMD_ticker() {
|
|
||||||
|
|
||||||
ts.add(CMD, CMD_update_int, [&](void*) {
|
|
||||||
if (!busy) {
|
|
||||||
if (order_ticker != "") {
|
|
||||||
|
|
||||||
String tmp = selectToMarker(order_ticker, ","); //выделяем из страки order первую команду pus title body
|
|
||||||
if (tmp != "no_command") sCmd.readStr(tmp); //выполняем первую команду
|
|
||||||
Serial.println("order_ticker => " + order_ticker);
|
|
||||||
order_ticker = deleteBeforeDelimiter(order_ticker, ","); //осекаем выполненную команду
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================================================================================
|
//=======================================================================================================================================
|
||||||
//=======================================================================================================================================
|
//=======================================================================================================================================
|
||||||
void txtExecution(String file) {
|
void txtExecution(String file) {
|
||||||
|
|
||||||
String command_all = readFile(file, 2048) + "\r\n"; //2048
|
String command_all = readFile(file, 2048) + "\r\n";
|
||||||
|
|
||||||
command_all.replace("\r\n", "\n");
|
command_all.replace("\r\n", "\n");
|
||||||
command_all.replace("\r", "\n");
|
command_all.replace("\r", "\n");
|
||||||
@@ -512,153 +475,23 @@ void txtExecution(String file) {
|
|||||||
while (command_all.length() != 0) {
|
while (command_all.length() != 0) {
|
||||||
|
|
||||||
String tmp = selectToMarker (command_all, "\n");
|
String tmp = selectToMarker (command_all, "\n");
|
||||||
//if (tmp.indexOf("//") < 0)
|
|
||||||
sCmd.readStr(tmp);
|
sCmd.readStr(tmp);
|
||||||
command_all = deleteBeforeDelimiter(command_all, "\n");
|
command_all = deleteBeforeDelimiter(command_all, "\n");
|
||||||
}
|
}
|
||||||
|
command_all = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringExecution(String str) {
|
void stringExecution(String str) {
|
||||||
|
|
||||||
String command_all = str + "\r\n"; //"\r\n"
|
str = str + "\r\n";
|
||||||
|
|
||||||
command_all.replace("\r\n", "\n");
|
str.replace("\r\n", "\n");
|
||||||
command_all.replace("\r", "\n");
|
str.replace("\r", "\n");
|
||||||
|
|
||||||
while (command_all.length() != 0) {
|
while (str.length() != 0) {
|
||||||
|
|
||||||
String tmp = selectToMarker (command_all, "\n");
|
String tmp = selectToMarker (str, "\n");
|
||||||
//if (tmp.indexOf("//") < 0)
|
|
||||||
sCmd.readStr(tmp);
|
sCmd.readStr(tmp);
|
||||||
command_all = deleteBeforeDelimiter(command_all, "\n");
|
str = deleteBeforeDelimiter(str, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//======================================================================================================================
|
|
||||||
//===============================================Создание виджетов=======================================================
|
|
||||||
|
|
||||||
void createViget (String viget_name, String page_name, String page_number, String file, String topic) {
|
|
||||||
|
|
||||||
String viget;
|
|
||||||
viget = readFile(file, 1024);
|
|
||||||
|
|
||||||
if (viget == "Failed") return;
|
|
||||||
if (viget == "Large") return;
|
|
||||||
|
|
||||||
viget_name.replace("#", " ");
|
|
||||||
page_name.replace("#", " ");
|
|
||||||
|
|
||||||
jsonWrite(viget, "page", page_name);
|
|
||||||
jsonWrite(viget, "order", page_number);
|
|
||||||
jsonWrite(viget, "descr", viget_name);
|
|
||||||
jsonWrite(viget, "topic", prex + "/" + topic);
|
|
||||||
all_vigets += viget + "\r\n";
|
|
||||||
viget = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value) {
|
|
||||||
|
|
||||||
String viget;
|
|
||||||
viget = readFile(file, 1024);
|
|
||||||
|
|
||||||
if (viget == "Failed") return;
|
|
||||||
if (viget == "Large") return;
|
|
||||||
|
|
||||||
viget_name.replace("#", " ");
|
|
||||||
page_name.replace("#", " ");
|
|
||||||
|
|
||||||
value.replace("#", " ");
|
|
||||||
|
|
||||||
viget = vidgetConfigWrite(viget, key, value);
|
|
||||||
|
|
||||||
jsonWrite(viget, "page", page_name);
|
|
||||||
jsonWrite(viget, "pageId", page_number);
|
|
||||||
jsonWrite(viget, "descr", viget_name);
|
|
||||||
jsonWrite(viget, "topic", prex + "/" + topic);
|
|
||||||
|
|
||||||
all_vigets += viget + "\r\n";
|
|
||||||
viget = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value, String key2, String value2) {
|
|
||||||
|
|
||||||
String viget;
|
|
||||||
viget = readFile(file, 1024);
|
|
||||||
|
|
||||||
if (viget == "Failed") return;
|
|
||||||
if (viget == "Large") return;
|
|
||||||
|
|
||||||
viget_name.replace("#", " ");
|
|
||||||
page_name.replace("#", " ");
|
|
||||||
|
|
||||||
value.replace("#", " ");
|
|
||||||
|
|
||||||
viget = vidgetConfigWrite(viget, key, value);
|
|
||||||
viget = vidgetConfigWrite(viget, key2, value2);
|
|
||||||
|
|
||||||
jsonWrite(viget, "page", page_name);
|
|
||||||
jsonWrite(viget, "pageId", page_number);
|
|
||||||
jsonWrite(viget, "descr", viget_name);
|
|
||||||
jsonWrite(viget, "topic", prex + "/" + topic);
|
|
||||||
|
|
||||||
all_vigets += viget + "\r\n";
|
|
||||||
viget = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
String vidgetConfigWrite(String viget, String key, String value) {
|
|
||||||
|
|
||||||
if (viget == "") return "";
|
|
||||||
if (viget == "{}") return "";
|
|
||||||
int psn1 = viget.indexOf("{");
|
|
||||||
if (psn1 != -1) {
|
|
||||||
psn1 = viget.indexOf("{", psn1 + 1);
|
|
||||||
if (psn1 != -1) {
|
|
||||||
int psn2 = viget.indexOf("}", psn1);
|
|
||||||
String WigetConfig = viget.substring(psn1, psn2) + "}";
|
|
||||||
jsonWrite(WigetConfig, key, value);
|
|
||||||
String part1 = viget.substring(0, psn1);
|
|
||||||
viget = part1 + WigetConfig + "}";
|
|
||||||
return viget;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//============разное
|
|
||||||
|
|
||||||
/*
|
|
||||||
void delAlert() {
|
|
||||||
|
|
||||||
String alert_id = sCmd.next();
|
|
||||||
delViget(alert_id);
|
|
||||||
sendAllWigets();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void delViget(String text_in_viget) {
|
|
||||||
String viget = all_vigets;
|
|
||||||
while (viget.length() != 0) {
|
|
||||||
String tmp = selectToMarkerPlus (viget, "\r\n", 2);
|
|
||||||
if (tmp.indexOf(text_in_viget) > 0) {
|
|
||||||
|
|
||||||
all_vigets.replace(tmp, "");
|
|
||||||
//Serial.println(all_vigets);
|
|
||||||
|
|
||||||
viget = deleteBeforeDelimiter(viget, "\r\n");
|
|
||||||
} else {
|
|
||||||
viget = deleteBeforeDelimiter(viget, "\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|||||||
BIN
ESP8266FS-0.5.0.zip
Normal file
BIN
ESP8266FS-0.5.0.zip
Normal file
Binary file not shown.
BIN
ESP8266FS.rar
BIN
ESP8266FS.rar
Binary file not shown.
38
FS.ino
Normal file
38
FS.ino
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
void File_system_init() {
|
||||||
|
|
||||||
|
Serial.begin(115200);
|
||||||
|
//Serial.setDebugOutput(true);
|
||||||
|
Serial.println("--------------started----------------");
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
SPIFFS.begin();
|
||||||
|
configSetup = readFile("config.json", 4096);
|
||||||
|
configSetup.replace(" ", "");
|
||||||
|
configSetup.replace("\r\n", "");
|
||||||
|
Serial.println(configSetup);
|
||||||
|
jsonWriteStr(configJson, "name", jsonRead(configSetup, "name"));
|
||||||
|
jsonWriteStr(configJson, "lang", jsonRead(configSetup, "lang"));
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
uint32_t chipID_u = ESP.getEfuseMac();
|
||||||
|
chipID = String(chipID_u);
|
||||||
|
jsonWriteStr(configSetup, "chipID", chipID);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
chipID = String( ESP.getChipId() ) + "-" + String(ESP.getFlashChipId());
|
||||||
|
jsonWriteStr(configSetup, "chipID", chipID);
|
||||||
|
Serial.setDebugOutput(0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
jsonWriteStr(configSetup, "firmware_version", firmware_version);
|
||||||
|
|
||||||
|
prex = jsonRead(configSetup, "mqttPrefix") + "/" + chipID;
|
||||||
|
Serial.println(chipID);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void get_esp_info() {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
286
Init.ino
286
Init.ino
@@ -1,30 +1,33 @@
|
|||||||
void All_init() {
|
void All_init() {
|
||||||
|
|
||||||
server.on("/all_modules_init", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/init", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
Device_init();
|
String value;
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
if (request->hasArg("arg")) {
|
||||||
});
|
value = request->getParam("arg")->value();
|
||||||
|
|
||||||
server.on("/scenario", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
if (request->hasArg("status")) {
|
|
||||||
jsonWrite(configSetup, "scenario", request->getParam("status")->value());
|
|
||||||
}
|
}
|
||||||
|
if (value == "0") {
|
||||||
|
jsonWriteStr(configSetup, "scenario", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
}
|
||||||
});
|
if (value == "1") {
|
||||||
|
jsonWriteStr(configSetup, "scenario", value);
|
||||||
server.on("/cleanlog", HTTP_GET, [](AsyncWebServerRequest * request) {
|
saveConfig();
|
||||||
SPIFFS.remove("/log.analog.txt");
|
Scenario_init();
|
||||||
SPIFFS.remove("/log.dallas.txt");
|
}
|
||||||
SPIFFS.remove("/log.level.txt");
|
if (value == "2") {
|
||||||
SPIFFS.remove("/log.ph.txt");
|
Device_init();
|
||||||
SPIFFS.remove("/log.txt");
|
}
|
||||||
|
if (value == "3") {
|
||||||
|
clean_log_date();
|
||||||
|
}
|
||||||
|
if (value == "4") {
|
||||||
|
Scenario_init();
|
||||||
|
}
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
});
|
});
|
||||||
|
|
||||||
prsets_init();
|
prsets_init();
|
||||||
|
|
||||||
Device_init();
|
Device_init();
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
Timer_countdown_init();
|
Timer_countdown_init();
|
||||||
@@ -43,169 +46,104 @@ void Device_init() {
|
|||||||
ts.remove(STEPPER1);
|
ts.remove(STEPPER1);
|
||||||
ts.remove(STEPPER2);
|
ts.remove(STEPPER2);
|
||||||
|
|
||||||
all_vigets = "";
|
#ifdef layout_in_ram
|
||||||
txtExecution("firmware.config.txt");
|
all_widgets = "";
|
||||||
|
#else
|
||||||
|
SPIFFS.remove("/layout.txt");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
txtExecution("firmware.c.txt");
|
||||||
//outcoming_date();
|
//outcoming_date();
|
||||||
}
|
}
|
||||||
//-------------------------------сценарии-----------------------------------------------------
|
//-------------------------------сценарии-----------------------------------------------------
|
||||||
|
|
||||||
void Scenario_init() {
|
void Scenario_init() {
|
||||||
if (jsonRead(configSetup, "scenario") == "1") {
|
if (jsonRead(configSetup, "scenario") == "1") {
|
||||||
scenario = readFile("firmware.scenario.txt", 2048);
|
scenario = readFile("firmware.s.txt", 2048);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void prsets_init() {
|
void prsets_init() {
|
||||||
|
server.on("/preset", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
//part 1===============================================================================
|
String value;
|
||||||
|
if (request->hasArg("arg")) {
|
||||||
server.on("/relay", HTTP_GET, [](AsyncWebServerRequest * request) {
|
value = request->getParam("arg")->value();
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay.config.txt", 2048));
|
}
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay.scenario.txt", 2048));
|
if (value == "1") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "2") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay_t.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay_t.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "3") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay_c.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay_c.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "4") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay_s.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay_s.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "5") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay_sw.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay_sw.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "6") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay_br.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay_br.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "7") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/relay_sr.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/relay_sr.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "8") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/pwm.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/pwm.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "9") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/dht11.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/dht11.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "10") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/dht22.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/dht22.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "11") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/analog.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/analog.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "12") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/dallas.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/dallas.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "13") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/termostat.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/termostat.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "14") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/level.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/level.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "15") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/moution_r.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/moution_r.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "16") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/moution_s.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/moution_s.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "17") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/stepper.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/stepper.s.txt", 2048));
|
||||||
|
}
|
||||||
|
if (value == "18") {
|
||||||
|
writeFile("firmware.c.txt", readFile("configs/firmware.c.txt", 2048));
|
||||||
|
writeFile("firmware.s.txt", readFile("configs/firmware.s.txt", 2048));
|
||||||
|
}
|
||||||
Device_init();
|
Device_init();
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
String tmp = "";
|
request->redirect("/?configuration");
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/relay_timer", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay_t.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay_t.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/relay_countdown", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay_c.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay_c.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/relay_several", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay_s.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay_s.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/relay_switch", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay_sw.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay_sw.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/relay_button_remote", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay_br.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay_br.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/relay_switch_remote", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/relay_sr.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/relay_sr.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/pwm", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/pwm.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/pwm.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
//part 2===============================================================================
|
|
||||||
|
|
||||||
server.on("/dht11", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/dht11.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/dht11.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/dht22", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/dht22.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/dht22.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/analog", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/analog.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/analog.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/dallas", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/dallas.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/dallas.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/termostat", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/termostat.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/termostat.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/level", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/level.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/level.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/moution_relay", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/moution_r.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/moution_r.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/moution_security", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/moution_s.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/moution_s.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on("/stepper", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/stepper.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/stepper.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
|
||||||
|
|
||||||
//default===============================================================================
|
|
||||||
|
|
||||||
server.on("/default", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
writeFile("firmware.config.txt", readFile("configs/firmware.config.txt", 2048));
|
|
||||||
writeFile("firmware.scenario.txt", readFile("configs/firmware.scenario.txt", 2048));
|
|
||||||
Device_init();
|
|
||||||
Scenario_init();
|
|
||||||
request->redirect("/page.htm?configuration");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,19 +157,19 @@ void up_time() {
|
|||||||
|
|
||||||
if (ss != 0) {
|
if (ss != 0) {
|
||||||
out = "[i] uptime = " + String(ss) + " sec";
|
out = "[i] uptime = " + String(ss) + " sec";
|
||||||
jsonWrite(configJson, "uptime", String(ss) + " sec");
|
jsonWriteStr(configJson, "uptime", String(ss) + " sec");
|
||||||
}
|
}
|
||||||
if (mm != 0) {
|
if (mm != 0) {
|
||||||
out = "[i] uptime = " + String(mm) + " min";
|
out = "[i] uptime = " + String(mm) + " min";
|
||||||
jsonWrite(configJson, "uptime", String(mm) + " min");
|
jsonWriteStr(configJson, "uptime", String(mm) + " min");
|
||||||
}
|
}
|
||||||
if (hh != 0) {
|
if (hh != 0) {
|
||||||
out = "[i] uptime = " + String(hh) + " hours";
|
out = "[i] uptime = " + String(hh) + " hours";
|
||||||
jsonWrite(configJson, "uptime", String(hh) + " hours");
|
jsonWriteStr(configJson, "uptime", String(hh) + " hours");
|
||||||
}
|
}
|
||||||
if (dd != 0) {
|
if (dd != 0) {
|
||||||
out = "[i] uptime = " + String(dd) + " days";
|
out = "[i] uptime = " + String(dd) + " days";
|
||||||
jsonWrite(configJson, "uptime", String(dd) + " days");
|
jsonWriteStr(configJson, "uptime", String(dd) + " days");
|
||||||
}
|
}
|
||||||
Serial.println(out + ", mqtt_lost_error: " + String(mqtt_lost_error) + ", wifi_lost_error: " + String(wifi_lost_error));
|
Serial.println(out + ", mqtt_lost_error: " + String(mqtt_lost_error) + ", wifi_lost_error: " + String(wifi_lost_error));
|
||||||
}
|
}
|
||||||
@@ -245,6 +183,7 @@ void statistics_init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void statistics() {
|
void statistics() {
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
String urls = "http://backup.privet.lv/visitors/?";
|
String urls = "http://backup.privet.lv/visitors/?";
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
urls += WiFi.macAddress().c_str();
|
urls += WiFi.macAddress().c_str();
|
||||||
@@ -270,4 +209,5 @@ void statistics() {
|
|||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
String stat = getURL(urls);
|
String stat = getURL(urls);
|
||||||
//Serial.println(stat);
|
//Serial.println(stat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
171
Logging.ino
Normal file
171
Logging.ino
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
//===============================================Логирование============================================================
|
||||||
|
void logging() {
|
||||||
|
|
||||||
|
static boolean flag = true;
|
||||||
|
|
||||||
|
String sensor_name = sCmd.next();
|
||||||
|
String period_min = sCmd.next();
|
||||||
|
String maxCount = sCmd.next();
|
||||||
|
|
||||||
|
String optimozation = sCmd.next();
|
||||||
|
|
||||||
|
String widget_name = sCmd.next();
|
||||||
|
widget_name.replace("#", " ");
|
||||||
|
String page_name = sCmd.next();
|
||||||
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
|
if (optimozation == "fast") chart_data_in_solid_array = true;
|
||||||
|
if (optimozation == "slow") chart_data_in_solid_array = false;
|
||||||
|
|
||||||
|
if (sensor_name == "analog") jsonWriteStr(optionJson, "analog_logging_count", maxCount);
|
||||||
|
if (sensor_name == "level") jsonWriteStr(optionJson, "level_logging_count", maxCount);
|
||||||
|
if (sensor_name == "dallas") jsonWriteStr(optionJson, "dallas_logging_count", maxCount);
|
||||||
|
if (sensor_name == "dhtT") jsonWriteStr(optionJson, "dhtT_logging_count", maxCount);
|
||||||
|
if (sensor_name == "dhtH") jsonWriteStr(optionJson, "dhtH_logging_count", maxCount);
|
||||||
|
|
||||||
|
if (sensor_name == "analog") createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", "loganalog", maxCount);
|
||||||
|
if (sensor_name == "level") createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", "loglevel", maxCount);
|
||||||
|
if (sensor_name == "dallas") createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", "logdallas", maxCount);
|
||||||
|
if (sensor_name == "dhtT") createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", "logdhtT", maxCount);
|
||||||
|
if (sensor_name == "dhtH") createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", "logdhtH", maxCount);
|
||||||
|
|
||||||
|
if (sensor_name == "analog") {
|
||||||
|
flagLoggingAnalog = true;
|
||||||
|
ts.remove(ANALOG_LOG);
|
||||||
|
ts.add(ANALOG_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
|
deleteOldDate("log.analog.txt", jsonReadtoInt(optionJson, "analog_logging_count"), jsonRead(configJson, "analog"));
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor_name == "level") {
|
||||||
|
flagLoggingLevel = true;
|
||||||
|
ts.remove(LEVEL_LOG);
|
||||||
|
ts.add(LEVEL_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
|
deleteOldDate("log.level.txt", jsonReadtoInt(optionJson, "level_logging_count"), jsonRead(configJson, "level"));
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor_name == "dallas") {
|
||||||
|
flagLoggingDallas = true;
|
||||||
|
ts.remove(DALLAS_LOG);
|
||||||
|
ts.add(DALLAS_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
|
deleteOldDate("log.dallas.txt", jsonReadtoInt(optionJson, "dallas_logging_count"), jsonRead(configJson, "dallas"));
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor_name == "dhtT") {
|
||||||
|
flagLoggingdhtT = true;
|
||||||
|
ts.remove(dhtT_LOG);
|
||||||
|
ts.add(dhtT_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
|
deleteOldDate("log.dhtT.txt", jsonReadtoInt(optionJson, "dhtT_logging_count"), jsonRead(configJson, "dhtT"));
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor_name == "dhtH") {
|
||||||
|
flagLoggingdhtH = true;
|
||||||
|
ts.remove(dhtH_LOG);
|
||||||
|
ts.add(dhtH_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
|
deleteOldDate("log.dhtH.txt", jsonReadtoInt(optionJson, "dhtH_logging_count"), jsonRead(configJson, "dhtH"));
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================Удаление стрых данных и запись новых==================================================================
|
||||||
|
void deleteOldDate(String file, int seted_number_of_lines, String date_to_add) {
|
||||||
|
String log_date = readFile(file, 5000);
|
||||||
|
int current_number_of_lines = count(log_date, "\r\n");
|
||||||
|
Serial.println("=====> [i] in log file " + file + " " + current_number_of_lines + " lines");
|
||||||
|
|
||||||
|
if (current_number_of_lines > seted_number_of_lines + 1) {
|
||||||
|
SPIFFS.remove("/" + file);
|
||||||
|
current_number_of_lines = 0;
|
||||||
|
}
|
||||||
|
if (current_number_of_lines == 0) {
|
||||||
|
SPIFFS.remove("/" + file);
|
||||||
|
current_number_of_lines = 0;
|
||||||
|
}
|
||||||
|
if (current_number_of_lines > seted_number_of_lines) {
|
||||||
|
log_date = deleteBeforeDelimiter(log_date, "\r\n");
|
||||||
|
if (GetTimeUnix() != "failed") {
|
||||||
|
log_date += GetTimeUnix() + " " + date_to_add + "\r\n";
|
||||||
|
writeFile(file, log_date);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (GetTimeUnix() != "failed") {
|
||||||
|
addFile(file, GetTimeUnix() + " " + date_to_add);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log_date = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================Выбор какие данные отправлять==================================================================
|
||||||
|
void choose_log_date_and_send() {
|
||||||
|
|
||||||
|
if (flagLoggingAnalog) sendLogData("log.analog.txt", "loganalog", chart_data_in_solid_array);
|
||||||
|
if (flagLoggingLevel) sendLogData("log.level.txt", "loglevel", chart_data_in_solid_array);
|
||||||
|
if (flagLoggingDallas) sendLogData("log.dallas.txt", "logdallas", chart_data_in_solid_array);
|
||||||
|
if (flagLoggingdhtT) sendLogData("log.dhtT.txt", "logdhtT", chart_data_in_solid_array);
|
||||||
|
if (flagLoggingdhtH) sendLogData("log.dhtH.txt", "logdhtH", chart_data_in_solid_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================Отправка данных===================================================================================
|
||||||
|
void sendLogData(String file, String topic, boolean type) {
|
||||||
|
if (type) {
|
||||||
|
//----------------------------------------------
|
||||||
|
String log_date = readFile(file, 5000);
|
||||||
|
log_date.replace("\r\n", "\n");
|
||||||
|
log_date.replace("\r", "\n");
|
||||||
|
String buf = "{}";
|
||||||
|
String json_array;
|
||||||
|
String unix_time;
|
||||||
|
String value;
|
||||||
|
while (log_date.length() != 0) {
|
||||||
|
String tmp = selectToMarker (log_date, "\n");
|
||||||
|
log_date = deleteBeforeDelimiter(log_date, "\n");
|
||||||
|
unix_time = selectToMarker (tmp, " ");
|
||||||
|
jsonWriteInt(buf, "x", unix_time.toInt());
|
||||||
|
value = deleteBeforeDelimiter(tmp, " ");
|
||||||
|
jsonWriteFloat(buf, "y1", value.toFloat());
|
||||||
|
if (log_date.length() < 3) {
|
||||||
|
json_array += buf;
|
||||||
|
} else {
|
||||||
|
json_array += buf + ",";
|
||||||
|
}
|
||||||
|
buf = "{}";
|
||||||
|
}
|
||||||
|
unix_time = "";
|
||||||
|
value = "";
|
||||||
|
log_date = "";
|
||||||
|
json_array = "{\"status\":[" + json_array + "]}";
|
||||||
|
Serial.println(json_array);
|
||||||
|
sendCHART(topic, json_array);
|
||||||
|
json_array = "";
|
||||||
|
getMemoryLoad("[i] after send log date");
|
||||||
|
//----------------------------------------------
|
||||||
|
} else {
|
||||||
|
//----------------------------------------------
|
||||||
|
File configFile = SPIFFS.open("/" + file, "r");
|
||||||
|
if (!configFile) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
configFile.seek(0, SeekSet); //поставим курсор в начало файла
|
||||||
|
while (configFile.position() != configFile.size()) {
|
||||||
|
String tmp = configFile.readStringUntil('\r\n');
|
||||||
|
String unix_time = selectToMarker (tmp, " ");
|
||||||
|
String value = deleteBeforeDelimiter(tmp, " ");
|
||||||
|
String final_line = "{\"status\":{\"x\":" + unix_time + ",\"y1\":" + value + "}}";
|
||||||
|
//Serial.println(final_line);
|
||||||
|
sendCHART(topic, final_line);
|
||||||
|
}
|
||||||
|
getMemoryLoad("[i] after send log date");
|
||||||
|
}
|
||||||
|
//----------------------------------------------
|
||||||
|
}
|
||||||
|
//=========================================Очистка данных===================================================================================
|
||||||
|
void clean_log_date() {
|
||||||
|
SPIFFS.remove("/log.analog.txt");
|
||||||
|
SPIFFS.remove("/log.level.txt");
|
||||||
|
SPIFFS.remove("/log.dallas.txt");
|
||||||
|
SPIFFS.remove("/log.dhtT.txt");
|
||||||
|
SPIFFS.remove("/log.dhtH.txt");
|
||||||
|
}
|
||||||
40
SSDP.ino
40
SSDP.ino
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
void SSDP_init() {
|
|
||||||
|
|
||||||
// --------------------Получаем ssdp со страницы
|
|
||||||
server.on("/ssdp", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
if (request->hasArg("ssdp")) {
|
|
||||||
jsonWrite(configSetup, "SSDP", request->getParam("ssdp")->value());
|
|
||||||
jsonWrite(configJson, "SSDP", request->getParam("ssdp")->value());
|
|
||||||
SSDP.setName(jsonRead(configSetup, "SSDP"));
|
|
||||||
}
|
|
||||||
saveConfig();
|
|
||||||
request->send(200, "text/text", "OK");
|
|
||||||
});
|
|
||||||
|
|
||||||
// SSDP дескриптор
|
|
||||||
server.on("/description.xml", [](AsyncWebServerRequest * request) {
|
|
||||||
//SSDP.schema(http.client());
|
|
||||||
request->send(200, "text/text", "OK");
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
|
||||||
//Если версия 2.0.0 закаментируйте следующую строчку
|
|
||||||
SSDP.setDeviceType("upnp:rootdevice");
|
|
||||||
SSDP.setSchemaURL("description.xml");
|
|
||||||
SSDP.setHTTPPort(80);
|
|
||||||
SSDP.setName(jsonRead(configSetup, "SSDP"));
|
|
||||||
SSDP.setSerialNumber(chipID);
|
|
||||||
SSDP.setURL("/");
|
|
||||||
SSDP.setModelName("tech");
|
|
||||||
SSDP.setModelNumber(chipID + "/" + jsonRead(configSetup, "SSDP"));
|
|
||||||
|
|
||||||
|
|
||||||
SSDP.setModelURL("https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware");
|
|
||||||
SSDP.setManufacturer("Borisenko Dmitry");
|
|
||||||
SSDP.setManufacturerURL("https://www.instagram.com/rriissee3");
|
|
||||||
SSDP.begin();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
@@ -69,7 +69,7 @@ void handleScenario() {
|
|||||||
}
|
}
|
||||||
String tmp2 = jsonRead(optionJson, "scenario_status"); //читаем файл событий
|
String tmp2 = jsonRead(optionJson, "scenario_status"); //читаем файл событий
|
||||||
tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие
|
tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие
|
||||||
jsonWrite(optionJson, "scenario_status", tmp2); //записываем обновленный файл событий
|
jsonWriteStr(optionJson, "scenario_status", tmp2); //записываем обновленный файл событий
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ void eventGen (String event_name, String number) { //событие выгля
|
|||||||
if (jsonRead(configSetup, "scenario") == "1") {
|
if (jsonRead(configSetup, "scenario") == "1") {
|
||||||
String tmp = jsonRead(optionJson, "scenario_status") ; //генерирование события
|
String tmp = jsonRead(optionJson, "scenario_status") ; //генерирование события
|
||||||
//Serial.println(event_name);
|
//Serial.println(event_name);
|
||||||
jsonWrite(optionJson, "scenario_status", tmp + event_name + number + ",");
|
jsonWriteStr(optionJson, "scenario_status", tmp + event_name + number + ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
173
Sensors.ino
173
Sensors.ino
@@ -2,7 +2,7 @@
|
|||||||
//=========================================Модуль аналогового сенсора============================================================
|
//=========================================Модуль аналогового сенсора============================================================
|
||||||
void analog() {
|
void analog() {
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String analog_start = sCmd.next();
|
String analog_start = sCmd.next();
|
||||||
@@ -10,11 +10,11 @@ void analog() {
|
|||||||
String analog_start_out = sCmd.next();
|
String analog_start_out = sCmd.next();
|
||||||
String analog_end_out = sCmd.next();
|
String analog_end_out = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(optionJson, "analog_start", analog_start);
|
jsonWriteStr(optionJson, "analog_start", analog_start);
|
||||||
jsonWrite(optionJson, "analog_end", analog_end);
|
jsonWriteStr(optionJson, "analog_end", analog_end);
|
||||||
jsonWrite(optionJson, "analog_start_out", analog_start_out);
|
jsonWriteStr(optionJson, "analog_start_out", analog_start_out);
|
||||||
jsonWrite(optionJson, "analog_end_out", analog_end_out);
|
jsonWriteStr(optionJson, "analog_end_out", analog_end_out);
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, type, "analog");
|
choose_widget_and_create(widget_name, page_name, page_number, type, "analog");
|
||||||
ts.add(ANALOG_, analog_update_int, [&](void*) {
|
ts.add(ANALOG_, analog_update_int, [&](void*) {
|
||||||
static int analog_old;
|
static int analog_old;
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
@@ -24,13 +24,13 @@ void analog() {
|
|||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
int analog_in = analogRead(A0);
|
int analog_in = analogRead(A0);
|
||||||
#endif
|
#endif
|
||||||
jsonWrite(configJson, "analog_in", analog_in);
|
jsonWriteInt(configJson, "analog_in", analog_in);
|
||||||
int analog = map(analog_in,
|
int analog = map(analog_in,
|
||||||
jsonReadtoInt(optionJson, "analog_start") ,
|
jsonReadtoInt(optionJson, "analog_start") ,
|
||||||
jsonReadtoInt(optionJson, "analog_end"),
|
jsonReadtoInt(optionJson, "analog_end"),
|
||||||
jsonReadtoInt(optionJson, "analog_start_out"),
|
jsonReadtoInt(optionJson, "analog_start_out"),
|
||||||
jsonReadtoInt(optionJson, "analog_end_out"));
|
jsonReadtoInt(optionJson, "analog_end_out"));
|
||||||
jsonWrite(configJson, "analog", analog);
|
jsonWriteInt(configJson, "analog", analog);
|
||||||
// if (analog_old != analog) {
|
// if (analog_old != analog) {
|
||||||
eventGen ("analog", "");
|
eventGen ("analog", "");
|
||||||
sendSTATUS("analog", String(analog));
|
sendSTATUS("analog", String(analog));
|
||||||
@@ -45,17 +45,17 @@ void analog() {
|
|||||||
//===================================================================================================================================
|
//===================================================================================================================================
|
||||||
//=========================================Модуль измерения уровня в баке============================================================
|
//=========================================Модуль измерения уровня в баке============================================================
|
||||||
void level() {
|
void level() {
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String empty_level = sCmd.next();
|
String empty_level = sCmd.next();
|
||||||
String full_level = sCmd.next();
|
String full_level = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWrite(optionJson, "empty_level", empty_level);
|
jsonWriteStr(optionJson, "empty_level", empty_level);
|
||||||
jsonWrite(optionJson, "full_level", full_level);
|
jsonWriteStr(optionJson, "full_level", full_level);
|
||||||
pinMode(14, OUTPUT);
|
pinMode(14, OUTPUT);
|
||||||
pinMode(12, INPUT);
|
pinMode(12, INPUT);
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, type, "level");
|
choose_widget_and_create(widget_name, page_name, page_number, type, "level");
|
||||||
ts.add(LEVEL, tank_level_shooting_interval, [&](void*) {
|
ts.add(LEVEL, tank_level_shooting_interval, [&](void*) {
|
||||||
long duration_;
|
long duration_;
|
||||||
int distance_cm;
|
int distance_cm;
|
||||||
@@ -73,11 +73,11 @@ void level() {
|
|||||||
counter++;
|
counter++;
|
||||||
if (counter > tank_level_times_to_send) {
|
if (counter > tank_level_times_to_send) {
|
||||||
counter = 0;
|
counter = 0;
|
||||||
jsonWrite(configJson, "level_in", distance_cm);
|
jsonWriteInt(configJson, "level_in", distance_cm);
|
||||||
level = map(distance_cm,
|
level = map(distance_cm,
|
||||||
jsonReadtoInt(optionJson, "empty_level"),
|
jsonReadtoInt(optionJson, "empty_level"),
|
||||||
jsonReadtoInt(optionJson, "full_level"), 0, 100);
|
jsonReadtoInt(optionJson, "full_level"), 0, 100);
|
||||||
jsonWrite(configJson, "level", level);
|
jsonWriteInt(configJson, "level", level);
|
||||||
//if (level_old != level) {
|
//if (level_old != level) {
|
||||||
eventGen ("level", "");
|
eventGen ("level", "");
|
||||||
sendSTATUS("level", String(level));
|
sendSTATUS("level", String(level));
|
||||||
@@ -94,7 +94,7 @@ void level() {
|
|||||||
//=========================================Модуль температурного сенсора ds18b20============================================================
|
//=========================================Модуль температурного сенсора ds18b20============================================================
|
||||||
void dallas() {
|
void dallas() {
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
@@ -102,13 +102,13 @@ void dallas() {
|
|||||||
sensors.setOneWire(oneWire);
|
sensors.setOneWire(oneWire);
|
||||||
sensors.begin();
|
sensors.begin();
|
||||||
sensors.setResolution(12);
|
sensors.setResolution(12);
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, type, "dallas");
|
choose_widget_and_create(widget_name, page_name, page_number, type, "dallas");
|
||||||
ts.add(DALLAS, temp_update_int, [&](void*) {
|
ts.add(DALLAS, temp_update_int, [&](void*) {
|
||||||
float temp = 0;
|
float temp = 0;
|
||||||
static float temp_old;
|
static float temp_old;
|
||||||
sensors.requestTemperatures();
|
sensors.requestTemperatures();
|
||||||
temp = sensors.getTempCByIndex(0);
|
temp = sensors.getTempCByIndex(0);
|
||||||
jsonWrite(configJson, "dallas", String(temp));
|
jsonWriteStr(configJson, "dallas", String(temp));
|
||||||
//if (temp_old != temp) {
|
//if (temp_old != temp) {
|
||||||
eventGen ("dallas", "");
|
eventGen ("dallas", "");
|
||||||
sendSTATUS("dallas", String(temp));
|
sendSTATUS("dallas", String(temp));
|
||||||
@@ -126,7 +126,7 @@ void dallas() {
|
|||||||
void dhtT() {
|
void dhtT() {
|
||||||
String sensor_type = sCmd.next();
|
String sensor_type = sCmd.next();
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
@@ -136,7 +136,7 @@ void dhtT() {
|
|||||||
if (sensor_type == "DHT22") {
|
if (sensor_type == "DHT22") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT22);
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
||||||
}
|
}
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, type, "dhtT");
|
choose_widget_and_create(widget_name, page_name, page_number, type, "dhtT");
|
||||||
ts.add(DHTT, dhtT_update_int, [&](void*) { //dht.getMinimumSamplingPeriod()
|
ts.add(DHTT, dhtT_update_int, [&](void*) { //dht.getMinimumSamplingPeriod()
|
||||||
float value = 0;
|
float value = 0;
|
||||||
static float value_old;
|
static float value_old;
|
||||||
@@ -147,14 +147,16 @@ void dhtT() {
|
|||||||
} else {
|
} else {
|
||||||
counter = 0;
|
counter = 0;
|
||||||
value = dht.getTemperature();
|
value = dht.getTemperature();
|
||||||
jsonWrite(configJson, "dhtT", String(value));
|
|
||||||
//if (value_old != value) {
|
//if (value_old != value) {
|
||||||
|
if (String(value) != "nan") {
|
||||||
eventGen ("dhtT", "");
|
eventGen ("dhtT", "");
|
||||||
|
jsonWriteStr(configJson, "dhtT", String(value));
|
||||||
sendSTATUS("dhtT", String(value));
|
sendSTATUS("dhtT", String(value));
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
Serial.println("[i] sensor 'dhtT' send date " + String(value));
|
Serial.println("[i] sensor 'dhtT' send date " + String(value));
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
|
}
|
||||||
value_old = value;
|
value_old = value;
|
||||||
}
|
}
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
@@ -164,7 +166,7 @@ void dhtT() {
|
|||||||
void dhtH() {
|
void dhtH() {
|
||||||
String sensor_type = sCmd.next();
|
String sensor_type = sCmd.next();
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
@@ -174,7 +176,7 @@ void dhtH() {
|
|||||||
if (sensor_type == "DHT22") {
|
if (sensor_type == "DHT22") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT22);
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
||||||
}
|
}
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, type, "dhtH");
|
choose_widget_and_create(widget_name, page_name, page_number, type, "dhtH");
|
||||||
ts.add(DHTH, dhtH_update_int , [&](void*) { //dht.getMinimumSamplingPeriod()
|
ts.add(DHTH, dhtH_update_int , [&](void*) { //dht.getMinimumSamplingPeriod()
|
||||||
int value = 0;
|
int value = 0;
|
||||||
static int value_old;
|
static int value_old;
|
||||||
@@ -185,24 +187,26 @@ void dhtH() {
|
|||||||
} else {
|
} else {
|
||||||
counter = 0;
|
counter = 0;
|
||||||
value = dht.getHumidity();
|
value = dht.getHumidity();
|
||||||
jsonWrite(configJson, "dhtH", String(value));
|
if (String(value) != "nan" || value <= 100 || value >= 0) {
|
||||||
//if (value_old != value) {
|
//if (value_old != value) {
|
||||||
eventGen ("dhtH", "");
|
eventGen ("dhtH", "");
|
||||||
|
jsonWriteStr(configJson, "dhtH", String(value));
|
||||||
sendSTATUS("dhtH", String(value));
|
sendSTATUS("dhtH", String(value));
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
Serial.println("[i] sensor 'dhtH' send date " + String(value));
|
Serial.println("[i] sensor 'dhtH' send date " + String(value));
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
|
}
|
||||||
value_old = value;
|
value_old = value;
|
||||||
}
|
}
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dhtPerception() {
|
void dhtPerception() {
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, "any-data", "dhtPerception");
|
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtPerception");
|
||||||
ts.add(DHTP, dht_calculation_update_int, [&](void*) {
|
ts.add(DHTP, dht_calculation_update_int, [&](void*) {
|
||||||
byte value;
|
byte value;
|
||||||
if (dht.getStatus() != 0) {
|
if (dht.getStatus() != 0) {
|
||||||
@@ -210,7 +214,7 @@ void dhtPerception() {
|
|||||||
} else {
|
} else {
|
||||||
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
||||||
String final_line = perception(value);
|
String final_line = perception(value);
|
||||||
jsonWrite(configJson, "dhtPerception", final_line);
|
jsonWriteStr(configJson, "dhtPerception", final_line);
|
||||||
eventGen ("dhtPerception", "");
|
eventGen ("dhtPerception", "");
|
||||||
sendSTATUS("dhtPerception", final_line);
|
sendSTATUS("dhtPerception", final_line);
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
@@ -232,10 +236,10 @@ String perception(byte value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void dhtComfort() {
|
void dhtComfort() {
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, "any-data", "dhtComfort");
|
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtComfort");
|
||||||
ts.add(DHTC, dht_calculation_update_int, [&](void*) {
|
ts.add(DHTC, dht_calculation_update_int, [&](void*) {
|
||||||
float value;
|
float value;
|
||||||
ComfortState cf;
|
ComfortState cf;
|
||||||
@@ -277,7 +281,7 @@ void dhtComfort() {
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
String final_line = comfortStatus;
|
String final_line = comfortStatus;
|
||||||
jsonWrite(configJson, "dhtComfort", final_line);
|
jsonWriteStr(configJson, "dhtComfort", final_line);
|
||||||
eventGen ("dhtComfort", "");
|
eventGen ("dhtComfort", "");
|
||||||
sendSTATUS("dhtComfort", final_line);
|
sendSTATUS("dhtComfort", final_line);
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
@@ -288,17 +292,17 @@ void dhtComfort() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void dhtDewpoint() {
|
void dhtDewpoint() {
|
||||||
String viget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
choose_viget_and_create(viget_name, page_name, page_number, "any-data", "dhtDewpoint");
|
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtDewpoint");
|
||||||
ts.add(DHTD, dht_calculation_update_int, [&](void*) {
|
ts.add(DHTD, dht_calculation_update_int, [&](void*) {
|
||||||
float value;
|
float value;
|
||||||
if (dht.getStatus() != 0) {
|
if (dht.getStatus() != 0) {
|
||||||
sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
|
sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
|
||||||
} else {
|
} else {
|
||||||
value = dht.computeDewPoint(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
value = dht.computeDewPoint(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
||||||
jsonWrite(configJson, "dhtDewpoint", value);
|
jsonWriteInt(configJson, "dhtDewpoint", value);
|
||||||
eventGen ("dhtDewpoint", "");
|
eventGen ("dhtDewpoint", "");
|
||||||
sendSTATUS("dhtDewpoint", String(value));
|
sendSTATUS("dhtDewpoint", String(value));
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
@@ -309,106 +313,11 @@ void dhtDewpoint() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void choose_viget_and_create(String viget_name, String page_name, String page_number, String type, String topik) {
|
void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik) {
|
||||||
|
|
||||||
if (type == "any-data") createViget (viget_name, page_name, page_number, "vigets/viget.anydata.json", topik);
|
|
||||||
if (type == "progress-line") createViget (viget_name, page_name, page_number, "vigets/viget.progressL.json", topik);
|
|
||||||
if (type == "progress-round") createViget (viget_name, page_name, page_number, "vigets/viget.progressR.json", topik);
|
|
||||||
|
|
||||||
|
if (type == "any-data") createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", topik);
|
||||||
|
if (type == "progress-line") createWidget (widget_name, page_name, page_number, "widgets/widget.progLine.json", topik);
|
||||||
|
if (type == "progress-round") createWidget (widget_name, page_name, page_number, "widgets/widget.progRound.json", topik);
|
||||||
|
if (type == "fill-gauge") createWidget (widget_name, page_name, page_number, "widgets/widget.fillGauge.json", topik);
|
||||||
|
|
||||||
}
|
}
|
||||||
//======================================================================================================================
|
|
||||||
//===============================================Логирование============================================================
|
|
||||||
|
|
||||||
void logging() {
|
|
||||||
|
|
||||||
static boolean flag = true;
|
|
||||||
|
|
||||||
String sensor_name = sCmd.next();
|
|
||||||
String period_min = sCmd.next();
|
|
||||||
String maxCount = sCmd.next();
|
|
||||||
String viget_name = sCmd.next();
|
|
||||||
viget_name.replace("#", " ");
|
|
||||||
String page_name = sCmd.next();
|
|
||||||
String page_number = sCmd.next();
|
|
||||||
|
|
||||||
if (sensor_name == "analog") jsonWrite(optionJson, "analog_logging_count", maxCount);
|
|
||||||
if (sensor_name == "level") jsonWrite(optionJson, "level_logging_count", maxCount);
|
|
||||||
if (sensor_name == "dallas") jsonWrite(optionJson, "dallas_logging_count", maxCount);
|
|
||||||
if (sensor_name == "ph") jsonWrite(optionJson, "ph_logging_count", maxCount);
|
|
||||||
/*
|
|
||||||
if (sensor_name == "analog") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loganalog", "maxCount", maxCount);
|
|
||||||
if (sensor_name == "level") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loglevel", "maxCount", maxCount);
|
|
||||||
if (sensor_name == "dallas") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logdallas", "maxCount", maxCount);
|
|
||||||
if (sensor_name == "ph") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logph", "maxCount", maxCount);
|
|
||||||
*/
|
|
||||||
if (sensor_name == "analog") {
|
|
||||||
flagLoggingAnalog = true;
|
|
||||||
ts.remove(ANALOG_LOG);
|
|
||||||
ts.add(ANALOG_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
|
||||||
deleteOldDate("log.analog.txt", jsonReadtoInt(optionJson, "analog_logging_count"), jsonRead(configJson, "analog"), false);
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sensor_name == "level") {
|
|
||||||
flagLoggingLevel = true;
|
|
||||||
ts.remove(LEVEL_LOG);
|
|
||||||
ts.add(LEVEL_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
|
||||||
deleteOldDate("log.level.txt", jsonReadtoInt(optionJson, "level_logging_count"), jsonRead(configJson, "level"), false);
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sensor_name == "dallas") {
|
|
||||||
flagLoggingDallas = true;
|
|
||||||
ts.remove(DALLAS_LOG);
|
|
||||||
ts.add(DALLAS_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
|
||||||
deleteOldDate("log.dallas.txt", jsonReadtoInt(optionJson, "dallas_logging_count"), jsonRead(configJson, "dallas"), false);
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void deleteOldDate(String file, int seted_number_of_lines, String date_to_add, boolean date_time) {
|
|
||||||
|
|
||||||
String current_time;
|
|
||||||
|
|
||||||
if (date_time) {
|
|
||||||
current_time = GetDataDigital() + " " + GetTimeWOsec();
|
|
||||||
current_time.replace(".", "");
|
|
||||||
current_time.replace(":", "");
|
|
||||||
} else {
|
|
||||||
current_time = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
String log_date = readFile(file, 5000);
|
|
||||||
getMemoryLoad("[i] after logging procedure");
|
|
||||||
|
|
||||||
//предел количества строк 255
|
|
||||||
|
|
||||||
log_date.replace("\r\n", "\n");
|
|
||||||
log_date.replace("\r", "\n");
|
|
||||||
|
|
||||||
int current_number_of_lines = count(log_date, "\n");
|
|
||||||
Serial.println("[i] in log file " + file + " " + current_number_of_lines + " lines");
|
|
||||||
|
|
||||||
|
|
||||||
if (current_number_of_lines > seted_number_of_lines + 1) {
|
|
||||||
SPIFFS.remove("/" + file);
|
|
||||||
current_number_of_lines = 0;
|
|
||||||
}
|
|
||||||
if (current_number_of_lines == 0) {
|
|
||||||
SPIFFS.remove("/" + file);
|
|
||||||
current_number_of_lines = 0;
|
|
||||||
}
|
|
||||||
if (current_number_of_lines > seted_number_of_lines) {
|
|
||||||
log_date = deleteBeforeDelimiter(log_date, "\n");
|
|
||||||
log_date += current_time + " " + date_to_add + "\n";
|
|
||||||
writeFile(file, log_date);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (date_time) {
|
|
||||||
addFile(file, current_time + " " + date_to_add);
|
|
||||||
} else {
|
|
||||||
addFile(file, date_to_add);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
45
Time.ino
45
Time.ino
@@ -1,23 +1,26 @@
|
|||||||
void Time_Init() {
|
void Time_Init() {
|
||||||
server.on("/timeZone", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/timeZone", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("timezone")) {
|
if (request->hasArg("timezone")) {
|
||||||
jsonWrite(configSetup, "timezone", request->getParam("timezone")->value());
|
jsonWriteStr(configSetup, "timezone", request->getParam("timezone")->value());
|
||||||
}
|
}
|
||||||
saveConfig();
|
saveConfig();
|
||||||
reconfigTime();
|
reconfigTime();
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ts.add(TIME_SYNC, 30000, [&](void*) {
|
||||||
|
if (GetTimeUnix() == "failed") {
|
||||||
|
Serial.println("[i] Time is not synchronized, start synchronization");
|
||||||
reconfigTime();
|
reconfigTime();
|
||||||
|
}
|
||||||
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void reconfigTime() {
|
void reconfigTime() {
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
configTime(0, 0, ntpServer);
|
||||||
configTime(jsonRead(configSetup, "timezone").toInt() * 3600, 0, ntpServer);
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Serial.println("[i] Awaiting for time ");
|
Serial.println("[i] Awaiting for time ");
|
||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
struct tm timeinfo;
|
struct tm timeinfo;
|
||||||
while (!getLocalTime(&timeinfo) && i <= 4) {
|
while (!getLocalTime(&timeinfo) && i <= 4) {
|
||||||
@@ -26,7 +29,6 @@ void reconfigTime() {
|
|||||||
delay(1000);
|
delay(1000);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
// while (!time(nullptr) && i < 4) {
|
// while (!time(nullptr) && i < 4) {
|
||||||
// Serial.print(".");
|
// Serial.print(".");
|
||||||
@@ -34,20 +36,33 @@ void reconfigTime() {
|
|||||||
delay(2000);
|
delay(2000);
|
||||||
// }
|
// }
|
||||||
#endif
|
#endif
|
||||||
|
if (GetTimeUnix() != "failed") {
|
||||||
Serial.print("[i] Time = ");
|
Serial.print("[V] Time synchronized = ");
|
||||||
Serial.print(GetDataDigital());
|
Serial.print(GetDataDigital());
|
||||||
Serial.print(" ");
|
Serial.print(" ");
|
||||||
Serial.println(GetTime());
|
Serial.println(GetTime());
|
||||||
|
} else {
|
||||||
|
Serial.println("[E] Time server or internet connection error, will try again in 30 sec");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Serial.println("[E] Get time impossible, no wifi connection");
|
Serial.println("[E] Get time impossible, no wifi connection");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Получаем время в формате linux gmt
|
||||||
|
String GetTimeUnix() {
|
||||||
|
time_t now = time(nullptr);
|
||||||
|
if (now < 30000) {
|
||||||
|
return "failed";
|
||||||
|
} else {
|
||||||
|
return String(now);
|
||||||
|
}
|
||||||
|
}
|
||||||
// Получение текущего времени
|
// Получение текущего времени
|
||||||
String GetTime() {
|
String GetTime() {
|
||||||
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
|
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
|
||||||
|
int zone = 3600 * jsonRead(configSetup, "timezone").toInt();
|
||||||
|
now = now + zone;
|
||||||
String Time = ""; // Строка для результатов времени
|
String Time = ""; // Строка для результатов времени
|
||||||
Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
|
Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
|
||||||
int i = Time.indexOf(":"); //Ишем позицию первого символа :
|
int i = Time.indexOf(":"); //Ишем позицию первого символа :
|
||||||
@@ -57,6 +72,8 @@ String GetTime() {
|
|||||||
|
|
||||||
String GetTimeWOsec() {
|
String GetTimeWOsec() {
|
||||||
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
|
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
|
||||||
|
int zone = 3600 * jsonRead(configSetup, "timezone").toInt();
|
||||||
|
now = now + zone;
|
||||||
String Time = ""; // Строка для результатов времени
|
String Time = ""; // Строка для результатов времени
|
||||||
Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
|
Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
|
||||||
int i = Time.indexOf(":"); //Ишем позицию первого символа :
|
int i = Time.indexOf(":"); //Ишем позицию первого символа :
|
||||||
@@ -67,6 +84,8 @@ String GetTimeWOsec() {
|
|||||||
// Получение даты
|
// Получение даты
|
||||||
String GetDate() {
|
String GetDate() {
|
||||||
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
|
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
|
||||||
|
int zone = 3600 * jsonRead(configSetup, "timezone").toInt();
|
||||||
|
now = now + zone;
|
||||||
String Data = ""; // Строка для результатов времени
|
String Data = ""; // Строка для результатов времени
|
||||||
Data += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
|
Data += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
|
||||||
Data.replace("\n", "");
|
Data.replace("\n", "");
|
||||||
@@ -106,3 +125,11 @@ String GetDataDigital() {
|
|||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int timeToMin(String Time) {
|
||||||
|
//"00:00:00" время в секунды
|
||||||
|
long min = selectToMarker(Time, ":").toInt() * 60; //общее количество секунд в полных часах
|
||||||
|
Time = deleteBeforeDelimiter (Time, ":"); // Теперь здесь минуты секунды
|
||||||
|
min += selectToMarker(Time, ":").toInt(); // Добавим секунды из полных минут
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
|||||||
16
Timers.ino
16
Timers.ino
@@ -9,7 +9,7 @@ void Timer_countdown_init() {
|
|||||||
|
|
||||||
if (old_line != "") {
|
if (old_line != "") {
|
||||||
|
|
||||||
Serial.println(old_line);
|
//Serial.println(old_line);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ void Timer_countdown_init() {
|
|||||||
|
|
||||||
delTimer (String (number));
|
delTimer (String (number));
|
||||||
|
|
||||||
jsonWrite(configJson, "timerSet" + String(number), "0");
|
jsonWriteStr(configJson, "timerSet" + String(number), "0");
|
||||||
|
|
||||||
eventGen ("timerSet", String(number));
|
eventGen ("timerSet", String(number));
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ void timerStart() {
|
|||||||
if (type == "hours") period_of_time = String(period_of_time.toInt() * 60 * 60);
|
if (type == "hours") period_of_time = String(period_of_time.toInt() * 60 * 60);
|
||||||
|
|
||||||
addTimer(number, period_of_time);
|
addTimer(number, period_of_time);
|
||||||
jsonWrite(configJson, "timerSet" + number, "1");
|
jsonWriteStr(configJson, "timerSet" + number, "1");
|
||||||
}
|
}
|
||||||
void addTimer(String number, String time) {
|
void addTimer(String number, String time) {
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ void addTimer(String number, String time) {
|
|||||||
} else { //если его нет
|
} else { //если его нет
|
||||||
tmp += new_timer + ",";
|
tmp += new_timer + ",";
|
||||||
}
|
}
|
||||||
jsonWrite(optionJson, "timers", tmp);
|
jsonWriteStr(optionJson, "timers", tmp);
|
||||||
//Serial.println("ura");
|
//Serial.println("ura");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ void delTimer (String number) {
|
|||||||
int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
|
int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
|
||||||
String timer = tmp.substring(psn1, psn2) + ","; //1:60, выделяем таймер который надо удалить
|
String timer = tmp.substring(psn1, psn2) + ","; //1:60, выделяем таймер который надо удалить
|
||||||
tmp.replace(timer, ""); //удаляем таймер
|
tmp.replace(timer, ""); //удаляем таймер
|
||||||
jsonWrite(optionJson, "timers", tmp);
|
jsonWriteStr(optionJson, "timers", tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,9 +157,9 @@ void time() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
jsonWrite(optionJson, "times", replace_line);
|
jsonWriteStr(optionJson, "times", replace_line);
|
||||||
|
|
||||||
jsonWrite(configJson, "timeSet" + time_number, "1");
|
jsonWriteStr(configJson, "timeSet" + time_number, "1");
|
||||||
|
|
||||||
ts.add(TIMERS, 1000, [&](void*) {
|
ts.add(TIMERS, 1000, [&](void*) {
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ void time() {
|
|||||||
Serial.println(seted_time);
|
Serial.println(seted_time);
|
||||||
|
|
||||||
if (current_time == seted_time) {
|
if (current_time == seted_time) {
|
||||||
jsonWrite(configJson, "timeSet" + time_number, "0");
|
jsonWriteStr(configJson, "timeSet" + time_number, "0");
|
||||||
eventGen ("timeSet", time_number);
|
eventGen ("timeSet", time_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
87
Upgrade.ino
87
Upgrade.ino
@@ -1,47 +1,68 @@
|
|||||||
void initUpgrade() {
|
void initUpgrade() {
|
||||||
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) {
|
|
||||||
|
|
||||||
start_check_version = true;
|
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
||||||
|
#endif
|
||||||
|
#ifdef ESP32
|
||||||
|
if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
|
||||||
|
#endif
|
||||||
|
jsonWriteStr(configSetup, "last_version", last_version);
|
||||||
Serial.print("[i] Last firmware version: ");
|
Serial.print("[i] Last firmware version: ");
|
||||||
Serial.println(last_version);
|
Serial.println(last_version);
|
||||||
|
|
||||||
|
server.on("/check", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
upgrade_url = true;
|
||||||
|
Serial.print("[i] Last firmware version: ");
|
||||||
|
Serial.println(last_version);
|
||||||
String tmp = "{}";
|
String tmp = "{}";
|
||||||
if (!flash_1mb) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
if (mb_4_of_memory) {
|
||||||
if (last_version != "") {
|
if (last_version != "") {
|
||||||
if (last_version != "error") {
|
if (last_version != "error") {
|
||||||
if (last_version == firmware_version) {
|
if (last_version == firmware_version) {
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Последняя версия прошивки уже установлена.");
|
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Последняя версия прошивки уже установлена.");
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
} else {
|
} else {
|
||||||
upgrade_flag = true;
|
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='/'; }, 30000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>");
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Идет обновление прошивки... После завершения устройство перезагрузится. Подождите одну минуту!!!");
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Ошибка... Cервер не найден. Попробуйте позже...");
|
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Ошибка... Cервер не найден. Попробуйте позже...");
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Нажмите на кнопку \"обновить прошивку\" повторно...");
|
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Нажмите на кнопку \"обновить прошивку\" повторно...");
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти...");
|
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти...");
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Устройство не подключен к роутеру...");
|
||||||
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
}
|
}
|
||||||
request->send(200, "text/text", tmp);
|
request->send(200, "text/text", tmp);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
upgrade = true;
|
||||||
|
String tmp = "{}";
|
||||||
|
//jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Есть новая версия <a href=\"#\" onclick=\"setTimeout(function(){ location.href='/'; }, 5000);}\">Установить?</a>");
|
||||||
|
request->send(200, "text/text", "ok");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_get_url() {
|
void do_upgrade_url() {
|
||||||
if (start_check_version) {
|
if (upgrade_url) {
|
||||||
start_check_version = false;
|
upgrade_url = false;
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
|
last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
|
||||||
|
jsonWriteStr(configSetup, "last_version", last_version);
|
||||||
#endif
|
#endif
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
||||||
|
jsonWriteStr(configSetup, "last_version", last_version);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -51,8 +72,8 @@ 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;
|
||||||
scenario_for_update = readFile("firmware.scenario.txt", 3072);
|
scenario_for_update = readFile("firmware.s.txt", 3072);
|
||||||
config_for_update = readFile("firmware.config.txt", 3072);
|
config_for_update = readFile("firmware.c.txt", 3072);
|
||||||
configSetup_for_update = configSetup;
|
configSetup_for_update = configSetup;
|
||||||
|
|
||||||
Serial.println("Start upgrade SPIFFS, please wait...");
|
Serial.println("Start upgrade SPIFFS, please wait...");
|
||||||
@@ -70,8 +91,8 @@ void upgrade_firmware() {
|
|||||||
|
|
||||||
if (ret == HTTP_UPDATE_OK) {
|
if (ret == HTTP_UPDATE_OK) {
|
||||||
|
|
||||||
writeFile("firmware.scenario.txt", scenario_for_update);
|
writeFile("firmware.s.txt", scenario_for_update);
|
||||||
writeFile("firmware.config.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();
|
||||||
|
|
||||||
@@ -95,9 +116,9 @@ void upgrade_firmware() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_upgrade() {
|
void do_upgrade() {
|
||||||
if (upgrade_flag) {
|
if (upgrade) {
|
||||||
upgrade_flag = false;
|
upgrade = false;
|
||||||
upgrade_firmware();
|
upgrade_firmware();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -189,12 +210,12 @@ void handle_upgrade() {
|
|||||||
String config_for_update;
|
String config_for_update;
|
||||||
String configSetup_for_update;
|
String configSetup_for_update;
|
||||||
Serial.println(spiffsData);
|
Serial.println(spiffsData);
|
||||||
scenario_for_update = readFile("firmware.scenario.txt", 2048);
|
scenario_for_update = readFile("firmware.s.txt", 2048);
|
||||||
config_for_update = readFile("config.all.txt", 2048);
|
config_for_update = readFile("config.all.txt", 2048);
|
||||||
configSetup_for_update = configSetup;
|
configSetup_for_update = configSetup;
|
||||||
ESPhttpUpdate.rebootOnUpdate(false); // Отключим перезагрузку после обновления
|
ESPhttpUpdate.rebootOnUpdate(false); // Отключим перезагрузку после обновления
|
||||||
updateHTTP(spiffsData, true);
|
updateHTTP(spiffsData, true);
|
||||||
writeFile("firmware.scenario.txt", scenario_for_update);
|
writeFile("firmware.s.txt", scenario_for_update);
|
||||||
writeFile("config.all.txt", config_for_update);
|
writeFile("config.all.txt", config_for_update);
|
||||||
writeFile("config.json", configSetup_for_update);
|
writeFile("config.json", configSetup_for_update);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
@@ -227,24 +248,24 @@ void handle_upgrade() {
|
|||||||
case HTTP_UPDATE_FAILED:
|
case HTTP_UPDATE_FAILED:
|
||||||
Serial.println(mode + "_FAILED");
|
Serial.println(mode + "_FAILED");
|
||||||
var = "{}";
|
var = "{}";
|
||||||
jsonWrite(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_FAILED");
|
jsonWriteStr(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_FAILED");
|
||||||
jsonWrite(var, "class", "pop-up");
|
jsonWriteStr(var, "class", "pop-up");
|
||||||
//request->send(200, "text/text", var);
|
//request->send(200, "text/text", var);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HTTP_UPDATE_NO_UPDATES:
|
case HTTP_UPDATE_NO_UPDATES:
|
||||||
Serial.println(mode + "_NO_UPDATES");
|
Serial.println(mode + "_NO_UPDATES");
|
||||||
var = "{}";
|
var = "{}";
|
||||||
jsonWrite(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_NO_UPDATES");
|
jsonWriteStr(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_NO_UPDATES");
|
||||||
jsonWrite(var, "class", "pop-up");
|
jsonWriteStr(var, "class", "pop-up");
|
||||||
//request->send(200, "text/text", var);
|
//request->send(200, "text/text", var);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HTTP_UPDATE_OK:
|
case HTTP_UPDATE_OK:
|
||||||
Serial.println(mode + "_UPDATE_OK");
|
Serial.println(mode + "_UPDATE_OK");
|
||||||
var = "{}";
|
var = "{}";
|
||||||
jsonWrite(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_UPDATE_OK");
|
jsonWriteStr(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_UPDATE_OK");
|
||||||
jsonWrite(var, "class", "pop-up");
|
jsonWriteStr(var, "class", "pop-up");
|
||||||
//request->send(200, "text/text", var);
|
//request->send(200, "text/text", var);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ 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());
|
||||||
@@ -120,6 +121,7 @@ void Web_server_init() {
|
|||||||
if (final)
|
if (final)
|
||||||
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);
|
||||||
|
|||||||
39
WiFi.ino
39
WiFi.ino
@@ -3,10 +3,10 @@ void WIFI_init() {
|
|||||||
// --------------------Получаем ssid password со страницы
|
// --------------------Получаем ssid password со страницы
|
||||||
server.on("/ssid", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/ssid", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("ssid")) {
|
if (request->hasArg("ssid")) {
|
||||||
jsonWrite(configSetup, "ssid", request->getParam("ssid")->value());
|
jsonWriteStr(configSetup, "ssid", request->getParam("ssid")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("password")) {
|
if (request->hasArg("password")) {
|
||||||
jsonWrite(configSetup, "password", request->getParam("password")->value());
|
jsonWriteStr(configSetup, "password", request->getParam("password")->value());
|
||||||
}
|
}
|
||||||
saveConfig(); // Функция сохранения данных во Flash
|
saveConfig(); // Функция сохранения данных во Flash
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
@@ -14,10 +14,10 @@ void WIFI_init() {
|
|||||||
// --------------------Получаем ssidAP passwordAP со страницы
|
// --------------------Получаем ssidAP passwordAP со страницы
|
||||||
server.on("/ssidap", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/ssidap", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("ssidAP")) {
|
if (request->hasArg("ssidAP")) {
|
||||||
jsonWrite(configSetup, "ssidAP", request->getParam("ssidAP")->value());
|
jsonWriteStr(configSetup, "ssidAP", request->getParam("ssidAP")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("passwordAP")) {
|
if (request->hasArg("passwordAP")) {
|
||||||
jsonWrite(configSetup, "passwordAP", request->getParam("passwordAP")->value());
|
jsonWriteStr(configSetup, "passwordAP", request->getParam("passwordAP")->value());
|
||||||
}
|
}
|
||||||
saveConfig(); // Функция сохранения данных во Flash
|
saveConfig(); // Функция сохранения данных во Flash
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
@@ -26,10 +26,10 @@ void WIFI_init() {
|
|||||||
// --------------------Получаем логин и пароль для web со страницы
|
// --------------------Получаем логин и пароль для web со страницы
|
||||||
server.on("/web", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/web", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("web_login")) {
|
if (request->hasArg("web_login")) {
|
||||||
jsonWrite(configSetup, "web_login", request->getParam("web_login")->value());
|
jsonWriteStr(configSetup, "web_login", request->getParam("web_login")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("web_pass")) {
|
if (request->hasArg("web_pass")) {
|
||||||
jsonWrite(configSetup, "web_pass", request->getParam("web_pass")->value());
|
jsonWriteStr(configSetup, "web_pass", request->getParam("web_pass")->value());
|
||||||
}
|
}
|
||||||
saveConfig(); // Функция сохранения данных во Flash
|
saveConfig(); // Функция сохранения данных во Flash
|
||||||
//Web_server_init();
|
//Web_server_init();
|
||||||
@@ -42,12 +42,12 @@ void WIFI_init() {
|
|||||||
}
|
}
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
});
|
});
|
||||||
|
ROUTER_Connecting();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ROUTER_Connecting() {
|
||||||
// Попытка подключения к точке доступа
|
|
||||||
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
// WiFi.mode(WIFI_NONE_SLEEP);
|
|
||||||
|
|
||||||
byte tries = 20;
|
byte tries = 20;
|
||||||
String _ssid = jsonRead(configSetup, "ssid");
|
String _ssid = jsonRead(configSetup, "ssid");
|
||||||
@@ -69,7 +69,7 @@ void WIFI_init() {
|
|||||||
if (WiFi.status() == WL_CONNECT_FAILED) {
|
if (WiFi.status() == WL_CONNECT_FAILED) {
|
||||||
Serial.println("[E] password is not correct");
|
Serial.println("[E] password is not correct");
|
||||||
tries = 1;
|
tries = 1;
|
||||||
jsonWrite(optionJson, "pass_status", 1);
|
jsonWriteInt(optionJson, "pass_status", 1);
|
||||||
}
|
}
|
||||||
Serial.print(".");
|
Serial.print(".");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@@ -88,10 +88,12 @@ void WIFI_init() {
|
|||||||
// о подключении и выводим адрес IP
|
// о подключении и выводим адрес IP
|
||||||
Serial.println("");
|
Serial.println("");
|
||||||
Serial.println("[V] WiFi connected");
|
Serial.println("[V] WiFi connected");
|
||||||
Serial.print("[V] IP address: ");
|
Serial.print("[V] IP address: http://");
|
||||||
Serial.print(WiFi.localIP());
|
Serial.print(WiFi.localIP());
|
||||||
Serial.println("");
|
Serial.println("");
|
||||||
jsonWrite(configJson, "ip", WiFi.localIP().toString());
|
jsonWriteStr(configJson, "ip", WiFi.localIP().toString());
|
||||||
|
|
||||||
|
//add_dev_in_list("dev.txt", chipID, WiFi.localIP().toString());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,15 +110,15 @@ bool StartAPMode() {
|
|||||||
IPAddress myIP = WiFi.softAPIP();
|
IPAddress myIP = WiFi.softAPIP();
|
||||||
Serial.print("AP IP address: ");
|
Serial.print("AP IP address: ");
|
||||||
Serial.println(myIP);
|
Serial.println(myIP);
|
||||||
jsonWrite(configJson, "ip", myIP.toString());
|
jsonWriteStr(configJson, "ip", myIP.toString());
|
||||||
|
|
||||||
if (jsonReadtoInt(optionJson, "pass_status") != 1) {
|
if (jsonReadtoInt(optionJson, "pass_status") != 1) {
|
||||||
ts.add(ROUTER_SEARCHING, 10 * 1000, [&](void*) {
|
ts.add(ROUTER_SEARCHING, 10 * 1000, [&](void*) {
|
||||||
Serial.println("->try find router");
|
Serial.println("->try find router");
|
||||||
if (RouterFind(jsonRead(configSetup, "ssid"))) {
|
if (RouterFind(jsonRead(configSetup, "ssid"))) {
|
||||||
ts.remove(ROUTER_SEARCHING);
|
ts.remove(ROUTER_SEARCHING);
|
||||||
WIFI_init();
|
ROUTER_Connecting();
|
||||||
MQTT_init();
|
MQTT_Connecting();
|
||||||
}
|
}
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
@@ -164,8 +166,9 @@ boolean RouterFind(String ssid) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
String scanWIFI() {
|
String scanWIFI() {
|
||||||
uint8_t n = WiFi.scanNetworks();
|
uint8_t n = WiFi.scanNetworks();
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& json = jsonBuffer.createObject();
|
JsonObject& json = jsonBuffer.createObject();
|
||||||
@@ -178,13 +181,13 @@ String scanWIFI() {
|
|||||||
int8_t dbm = WiFi.RSSI(i);
|
int8_t dbm = WiFi.RSSI(i);
|
||||||
data["dbm"] = dbm;
|
data["dbm"] = dbm;
|
||||||
if (ssidMy == jsonRead(configSetup, "ssid")) {
|
if (ssidMy == jsonRead(configSetup, "ssid")) {
|
||||||
jsonWrite(configJson, "dbm", dbm);
|
jsonWriteStr(configJson, "dbm", dbm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String root;
|
String root;
|
||||||
json.printTo(root);
|
json.printTo(root);
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
{
|
{
|
||||||
|
|||||||
49
Widgets.ino
Normal file
49
Widgets.ino
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
//======================================================================================================================
|
||||||
|
//===============================================Создание виджетов=======================================================
|
||||||
|
void createWidget (String widget_name, String page_name, String page_number, String file, String topic) {
|
||||||
|
|
||||||
|
String widget;
|
||||||
|
widget = readFile(file, 1024);
|
||||||
|
|
||||||
|
if (widget == "Failed") return;
|
||||||
|
if (widget == "Large") return;
|
||||||
|
|
||||||
|
widget_name.replace("#", " ");
|
||||||
|
page_name.replace("#", " ");
|
||||||
|
|
||||||
|
jsonWriteStr(widget, "page", page_name);
|
||||||
|
jsonWriteStr(widget, "order", page_number);
|
||||||
|
jsonWriteStr(widget, "descr", widget_name);
|
||||||
|
jsonWriteStr(widget, "topic", prex + "/" + topic);
|
||||||
|
#ifdef layout_in_ram
|
||||||
|
all_widgets += widget + "\r\n";
|
||||||
|
#else
|
||||||
|
addFile("layout.txt", widget);
|
||||||
|
#endif
|
||||||
|
widget = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void createChart (String widget_name, String page_name, String page_number, String file, String topic, String maxCount) {
|
||||||
|
|
||||||
|
String widget;
|
||||||
|
widget = readFile(file, 1024);
|
||||||
|
|
||||||
|
if (widget == "Failed") return;
|
||||||
|
if (widget == "Large") return;
|
||||||
|
|
||||||
|
widget_name.replace("#", " ");
|
||||||
|
page_name.replace("#", " ");
|
||||||
|
|
||||||
|
jsonWriteStr(widget, "page", page_name);
|
||||||
|
jsonWriteStr(widget, "order", page_number);
|
||||||
|
//jsonWriteStr(widget, "descr", widget_name);
|
||||||
|
jsonWriteStr(widget, "series", widget_name);
|
||||||
|
jsonWriteStr(widget, "maxCount", maxCount);
|
||||||
|
jsonWriteStr(widget, "topic", prex + "/" + topic);
|
||||||
|
#ifdef layout_in_ram
|
||||||
|
all_widgets += widget + "\r\n";
|
||||||
|
#else
|
||||||
|
addFile("layout.txt", widget);
|
||||||
|
#endif
|
||||||
|
widget = "";
|
||||||
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"SSDP": "MODULES",
|
"name": "IoTmanager",
|
||||||
"chipID": "",
|
"chipID": "",
|
||||||
"ssidAP": "WiFi",
|
"ssidAP": "WiFi",
|
||||||
"passwordAP": "",
|
"passwordAP": "",
|
||||||
"ssid": "rise",
|
"ssid": "your_ssid",
|
||||||
"password": "hostel3333",
|
"password": "your_password",
|
||||||
"timezone": 3,
|
"timezone": 3,
|
||||||
"mqttServer": "m12.cloudmqtt.com",
|
"mqttServer": "",
|
||||||
"mqttPort": 14053,
|
"mqttPort": 0,
|
||||||
"mqttPrefix": "/IoTmanager",
|
"mqttPrefix": "/IoTmanager",
|
||||||
"mqttUser": "lbscvzuj",
|
"mqttUser": "",
|
||||||
"mqttPass": "bLxlveOgaF8F",
|
"mqttPass": "",
|
||||||
"scenario": "1",
|
"scenario": "1",
|
||||||
"pushingbox_id": "",
|
"pushingbox_id": "",
|
||||||
"web_login": "admin",
|
"web_login": "admin",
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"SSDP": "MODULES",
|
"name": "IoTmanager",
|
||||||
"chipID": "",
|
"chipID": "",
|
||||||
"ssidAP": "WiFi",
|
"ssidAP": "WiFi",
|
||||||
"passwordAP": "",
|
"passwordAP": "",
|
||||||
"ssid": "your_ssid",
|
"ssid": "rise",
|
||||||
"password": "your_password",
|
"password": "hostel3333",
|
||||||
"timezone": 3,
|
"timezone": 2,
|
||||||
"mqttServer": "",
|
"mqttServer": "mqtt.ioty.ru",
|
||||||
"mqttPort": 0,
|
"mqttPort": 1883,
|
||||||
"mqttPrefix": "/IoTmanager",
|
"mqttPrefix": "/rise",
|
||||||
"mqttUser": "",
|
"mqttUser": "test",
|
||||||
"mqttPass": "",
|
"mqttPass": "test",
|
||||||
"scenario": "1",
|
"scenario": "1",
|
||||||
"pushingbox_id": "",
|
"pushingbox_id": "",
|
||||||
"web_login": "admin",
|
"web_login": "admin",
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
analog 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1
|
analog 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1
|
||||||
|
logging analog 5 100 slow Аналоговый#вход Датчики 2
|
||||||
|
|
||||||
//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит
|
//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит
|
||||||
//значение чтения аналогового входа будут примерно равным
|
//значение чтения аналогового входа будут примерно равным
|
||||||
//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции)
|
//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции)
|
||||||
//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении
|
//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении
|
||||||
//варианты отображения: any-data, progress-round, progress-line
|
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
dallas 2 Водонагреватель,#t°C Датчики any-data 1
|
dallas 2 Водонагреватель,#t°C Датчики any-data 1
|
||||||
|
logging dallas 1 100 slow Температура Датчики 2
|
||||||
|
|
||||||
//2 - номер пина датчика
|
//2 - номер пина датчика
|
||||||
//варианты отображения: any-data, progress-round, progress-line
|
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
||||||
@@ -3,6 +3,8 @@ dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 2
|
|||||||
dhtComfort Степень#комфорта: Датчики 3
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
dhtPerception Восприятие: Датчики 4
|
dhtPerception Восприятие: Датчики 4
|
||||||
dhtDewpoint Точка#росы: Датчики 5
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
|
logging dhtT 5 50 slow Температура Датчики 6
|
||||||
|
logging dhtH 5 50 slow Влажность Датчики 7
|
||||||
|
|
||||||
//2 - номер пина датчика
|
//2 - номер пина датчика
|
||||||
//варианты отображения: any-data, progress-round, progress-line
|
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
||||||
@@ -3,6 +3,8 @@ dhtH DHT22 2 Влажность#DHT,#% Датчики any-data 2
|
|||||||
dhtComfort Степень#комфорта: Датчики 3
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
dhtPerception Восприятие: Датчики 4
|
dhtPerception Восприятие: Датчики 4
|
||||||
dhtDewpoint Точка#росы: Датчики 5
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
|
logging dhtT 5 50 slow Температура Датчики 6
|
||||||
|
logging dhtH 5 50 slow Влажность Датчики 7
|
||||||
|
|
||||||
//2 - номер пина датчика
|
//2 - номер пина датчика
|
||||||
//варианты отображения: any-data, progress-round, progress-line
|
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
||||||
14
data/configs/firmware.c.txt
Normal file
14
data/configs/firmware.c.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
button 1 na Включить#все Реле 0 1
|
||||||
|
button 2 13 Прихожая Реле 0 2
|
||||||
|
button 3 14 Кухня Реле 0 3
|
||||||
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
|
analog 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
||||||
|
logging analog 1 100 slow Аналоговый#вход Датчики 7
|
||||||
|
|
||||||
|
//Это демо конфигурация. В ней показано как связать кнопки c мощью сценариев
|
||||||
|
//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
|
||||||
|
//Так же продемонстрированна система логгирования данных строкой logging
|
||||||
|
//1 - это интервал между точками в минутах, 100 это количество точек
|
||||||
|
//slow или fast это два варианта выгрузки графика, slow более экономичный режим
|
||||||
|
//больше подходит для esp8266
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
button 1 na Включить#все Реле 0 1
|
|
||||||
button 2 13 Прихожая Реле 0 2
|
|
||||||
button 3 14 Кухня Реле 0 3
|
|
||||||
pwm 1 3 Яркость#коредор: Реле 1023 4
|
|
||||||
pwm 2 4 Яркость#ванная: Реле 510 5
|
|
||||||
analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6
|
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
level Вода#в#баке,#% Датчики any-data 125 20 1
|
level Вода#в#баке,#% Датчики fill-gauge 125 20 1
|
||||||
inputDigit digit1 При#скольки#выключить? Датчики 95 2
|
inputDigit digit1 При#скольки#выключить? Датчики 95 2
|
||||||
inputDigit digit2 При#скольки#включить? Датчики 10 3
|
inputDigit digit2 При#скольки#включить? Датчики 10 3
|
||||||
button 1 5 Насос Датчики 0 4
|
button 1 5 Насос Датчики 0 4
|
||||||
button 2 line1,line2, Автоматический#режим Датчики 1 5
|
button 2 line1,line2, Автоматический#режим Датчики 1 5
|
||||||
|
logging level 1 100 slow Вода#в#баке Датчики 6
|
||||||
|
|
||||||
//125 - это расстояние от датчика до дна бака в сантиметрах
|
//125 - это расстояние от датчика до дна бака в сантиметрах
|
||||||
//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
||||||
//вывод данных будет в процентах заполнения бака
|
//вывод данных будет в процентах заполнения бака
|
||||||
//варианты отображения: any-data, progress-round, progress-line
|
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
||||||
@@ -2,9 +2,11 @@ switch 1 0 20
|
|||||||
text 1 Вход: Охрана 1
|
text 1 Вход: Охрана 1
|
||||||
textSet 1 не#обнаружено-time
|
textSet 1 не#обнаружено-time
|
||||||
button 1 na Сбросить Охрана 0 2
|
button 1 na Сбросить Охрана 0 2
|
||||||
|
button 2 line3, Включить#push Охрана 1 3
|
||||||
|
|
||||||
//0 - номер пина датчика
|
//0 - номер пина датчика
|
||||||
//при срабатывании датчика движения устройство пошлет пуш и в приложении будет
|
//при срабатывании датчика движения устройство пошлет пуш и в приложении будет
|
||||||
//написано в текстовом поле, что движение было обнаружено, так же будет зафиксирован
|
//написано в текстовом поле, что движение было обнаружено
|
||||||
//момент времени срабатывания датчика
|
//так же будет зафиксирован момент времени срабатывания датчика
|
||||||
|
//в приложении можно отключать отправку пуш сообщений на тот случай если дома хозяин
|
||||||
//перевести датчик снова в режим ожидания движения можно нажав кнопку сброса в приложении
|
//перевести датчик снова в режим ожидания движения можно нажав кнопку сброса в приложении
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
switch1 = 1
|
switch1 = 1
|
||||||
textSet 1 обнаружено#движение-time
|
textSet 1 обнаружено#движение-time
|
||||||
push Внимание обнаружено#движение!
|
|
||||||
end
|
end
|
||||||
button1 = 1
|
button1 = 1
|
||||||
textSet 1 не#обнаружено-time
|
textSet 1 не#обнаружено-time
|
||||||
buttonSet 1 0
|
buttonSet 1 0
|
||||||
end
|
end
|
||||||
|
switch1 = 1
|
||||||
|
push Внимание обнаружено#движение!
|
||||||
|
end
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
dallas 2 Водонагреватель,#t°C Термостат any-data 1
|
dallas 2 Водонагреватель,#t°C Термостат any-data 1
|
||||||
inputDigit digit1 При#скольки#выключить? Термостат 40 2
|
logging dallas 5 100 slow Температура Термостат 2
|
||||||
inputDigit digit2 При#скольки#включить? Термостат 20 3
|
inputDigit digit1 При#скольки#выключить? Термостат 40 3
|
||||||
button 1 5 Нагреватель Термостат 0 4
|
inputDigit digit2 При#скольки#включить? Термостат 20 4
|
||||||
button 2 line1,line2, Автоматический#режим Термостат 1 5
|
button 1 5 Нагреватель Термостат 0 5
|
||||||
|
button 2 line1,line2, Автоматический#режим Термостат 1 6
|
||||||
|
|
||||||
//2 - номер пина датчика
|
//2 - номер пина датчика
|
||||||
//5 - номер пина реле
|
//5 - номер пина реле
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
"content": [
|
"content": [
|
||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{SSDP}}",
|
"title": "{{name}}",
|
||||||
"class": "alert-warning"
|
"class": "alert-warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -33,24 +33,24 @@
|
|||||||
"style": "display:inline",
|
"style": "display:inline",
|
||||||
"title": {
|
"title": {
|
||||||
"#": "Выбирите то, во что Вы хотите превратить ESP <span class=\"caret\"></span>",
|
"#": "Выбирите то, во что Вы хотите превратить ESP <span class=\"caret\"></span>",
|
||||||
"/relay": "1.Вкл. выкл. локального реле",
|
"/preset?arg=1": "1.Вкл. выкл. локального реле",
|
||||||
"/relay_timer": "2.Вкл. выкл. локального реле в определенное время",
|
"/preset?arg=2": "2.Вкл. выкл. локального реле в определенное время",
|
||||||
"/relay_countdown": "3.Вкл. выкл. локального реле на определенный период времени",
|
"/preset?arg=3": "3.Вкл. выкл. локального реле на определенный период времени",
|
||||||
"/relay_several": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
"/preset?arg=4": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
||||||
"/relay_switch": "5.Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)",
|
"/preset?arg=5": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
|
||||||
"/relay_button_remote": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
"/preset?arg=6": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
||||||
"/relay_switch_remote": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
"/preset?arg=7": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
||||||
"/pwm": "8.Широтно импульсная модуляция",
|
"/preset?arg=8": "8.Широтно импульсная модуляция",
|
||||||
"/dht11": "9.Сенсор DHT11",
|
"/preset?arg=9": "9.Сенсор DHT11 и логгирование",
|
||||||
"/dht22": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03",
|
"/preset?arg=10": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 и логгирование",
|
||||||
"/analog": "11.Аналоговый сенсор",
|
"/preset?arg=11": "11.Аналоговый сенсор и логгирование",
|
||||||
"/dallas": "12.Сенсор DS18B20",
|
"/preset?arg=12": "12.Сенсор DS18B20 и логгирование",
|
||||||
"/termostat": "13.Термостат на DS18B20 с переключением в ручной режим",
|
"/preset?arg=13": "13.Термостат на DS18B20 с переключением в ручной режим и логгированием",
|
||||||
"/level": "14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)",
|
"/preset?arg=14": "14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование (управление насосом)",
|
||||||
"/moution_relay": "15.Датчик движения включающий свет",
|
"/preset?arg=15": "15.Датчик движения включающий свет",
|
||||||
"/moution_security": "16.Охранный датчик движения",
|
"/preset?arg=16": "16.Охранный датчик движения",
|
||||||
"/stepper": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
|
"/preset?arg=17": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
|
||||||
"/default": "Настройки по умолчанию"
|
"/preset?arg=18": "Настройки по умолчанию"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -59,10 +59,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"state": "firmware.config.txt",
|
"state": "firmware.c.txt",
|
||||||
"style": "width:100%;height:400px",
|
"style": "width:100%;height:400px",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "/all_modules_init",
|
"action": "/init?arg=2",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"name": "scenario",
|
"name": "scenario",
|
||||||
"title": "Включить сценарии",
|
"title": "Включить сценарии",
|
||||||
"action": "/scenario?status=[[scenario]]",
|
"action": "/init?arg=[[scenario]]",
|
||||||
"state": "{{scenario}}"
|
"state": "{{scenario}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -88,10 +88,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"state": "firmware.scenario.txt",
|
"state": "firmware.s.txt",
|
||||||
"style": "width:100%;height:400px",
|
"style": "width:100%;height:400px",
|
||||||
"title": "Сохранить и включить",
|
"title": "Сохранить",
|
||||||
"action": "/scenario?status=1",
|
"action": "/init?arg=4",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -99,14 +99,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Очистить все логи",
|
"title": "Очистить логи сенсоров",
|
||||||
"action": "/cleanlog",
|
"action": "/init?arg=3",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"action": "/page.htm?index",
|
"action": "/",
|
||||||
"class": "btn btn-block btn-danger btn-sm"
|
"class": "btn btn-block btn-danger btn-sm"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
65
data/dev.json
Normal file
65
data/dev.json
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"configs": [
|
||||||
|
"/config.live.json",
|
||||||
|
"/config.setup.json"
|
||||||
|
],
|
||||||
|
"title": "Главная",
|
||||||
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "h5",
|
||||||
|
"title": "{{name}}",
|
||||||
|
"class": "alert-warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "Список других устройств в сети:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "csv",
|
||||||
|
"title": [
|
||||||
|
"html",
|
||||||
|
"html",
|
||||||
|
"html"
|
||||||
|
],
|
||||||
|
"state": "dev.csv",
|
||||||
|
"style": "width:100%;",
|
||||||
|
"class": "nan"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Переформировать список устройств",
|
||||||
|
"action": "udp?arg=2",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Обновить страницу",
|
||||||
|
"action": "udp?arg=3",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"class": "alert alert-warning",
|
||||||
|
"title": "После нажатия на кнопку 'Переформировать список устройств' ждите примерно минуту, а затем обновите страницу и список появится вновь"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Главная",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-danger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
data/favicon.ico
BIN
data/favicon.ico
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
14
data/firmware.c.txt
Normal file
14
data/firmware.c.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
button 1 na Включить#все Реле 0 1
|
||||||
|
button 2 13 Прихожая Реле 0 2
|
||||||
|
button 3 14 Кухня Реле 0 3
|
||||||
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
|
analog 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
||||||
|
logging analog 1 100 slow Аналоговый#вход Датчики 7
|
||||||
|
|
||||||
|
//Это демо конфигурация. В ней показано как связать кнопки c мощью сценариев
|
||||||
|
//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
|
||||||
|
//Так же продемонстрированна система логгирования данных строкой logging
|
||||||
|
//1 - это интервал между точками в минутах, 100 это количество точек
|
||||||
|
//slow или fast это два варианта выгрузки графика, slow более экономичный режим
|
||||||
|
//больше подходит для esp8266
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
button 1 na Включить#все Реле 0 1
|
|
||||||
button 2 13 Прихожая Реле 0 2
|
|
||||||
button 3 14 Кухня Реле 0 3
|
|
||||||
pwm 1 3 Яркость#коредор: Реле 1023 4
|
|
||||||
pwm 2 4 Яркость#ванная: Реле 510 5
|
|
||||||
analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6
|
|
||||||
Binary file not shown.
@@ -8,7 +8,7 @@
|
|||||||
"content": [
|
"content": [
|
||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{SSDP}}",
|
"title": "{{name}}",
|
||||||
"class": "alert-warning"
|
"class": "alert-warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "SPIFFS version: 2.3.1"
|
"title": "SPIFFS version: 2.3.2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
@@ -37,45 +37,51 @@
|
|||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация устройства",
|
"title": "Конфигурация устройства",
|
||||||
"action": "/page.htm?configuration",
|
"action": "/?configuration",
|
||||||
"class": "btn btn-block btn-primary"
|
"class": "btn btn-block btn-primary"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Список других устройств в сети",
|
||||||
|
"action": "/?dev",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация WIFI",
|
"title": "Конфигурация WIFI",
|
||||||
"action": "/page.htm?setup",
|
"action": "/?setup",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация MQTT",
|
"title": "Конфигурация MQTT",
|
||||||
"action": "/page.htm?mqtt",
|
"action": "/?mqtt",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация push",
|
"title": "Конфигурация push",
|
||||||
"action": "/page.htm?pushingbox",
|
"action": "/?pushingbox",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "h3",
|
"type": "h3",
|
||||||
"name": "my-block",
|
"name": "my-block",
|
||||||
"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": "hr"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title": "Обновить прошивку",
|
"title": "Обновить прошивку",
|
||||||
"action": "/upgrade",
|
"action": "/check",
|
||||||
"response": "[[my-block]]",
|
"response": "[[my-block]]",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-danger"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -1,95 +1,105 @@
|
|||||||
{
|
{
|
||||||
"configs": [
|
"configs": [
|
||||||
"/config.setup.json"
|
"/config.setup.json"
|
||||||
],
|
],
|
||||||
"class":"col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
"content": [
|
"content": [
|
||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{SSDP}}",
|
"title": "{{name}}",
|
||||||
"class":"alert-warning"
|
"class": "alert-warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "Server name:"
|
"title": "Server name:"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "",
|
"title": "",
|
||||||
"name":"1",
|
"name": "1",
|
||||||
"state": "{{mqttServer}}"
|
"state": "{{mqttServer}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "Port:"
|
"title": "Port:"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "",
|
"title": "",
|
||||||
"name":"2",
|
"name": "2",
|
||||||
"state": "{{mqttPort}}"
|
"state": "{{mqttPort}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "Prefix:"
|
"title": "Prefix:"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "",
|
"title": "",
|
||||||
"name":"3",
|
"name": "3",
|
||||||
"state": "{{mqttPrefix}}"
|
"state": "{{mqttPrefix}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "User name:"
|
"title": "User name:"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "",
|
"title": "",
|
||||||
"name":"4",
|
"name": "4",
|
||||||
"state": "{{mqttUser}}"
|
"state": "{{mqttUser}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "Password:"
|
"title": "Password:"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "",
|
"title": "",
|
||||||
"name":"5",
|
"name": "5",
|
||||||
"state": "{{mqttPass}}"
|
"state": "{{mqttPass}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type":"h3",
|
"type": "h3",
|
||||||
"name":"my-block",
|
"name": "my-block",
|
||||||
"style":"position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
"style": "position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
||||||
"class":"hidden"
|
"class": "hidden"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"type": "text",
|
||||||
|
"class": "alert alert-warning",
|
||||||
|
"title": "Прежде чем нажимать на кнопку 'Отправить настройки MQTT' сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
|
||||||
|
},
|
||||||
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title":"Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "mqttSave?mqttServer=[[1]]&mqttPort=[[2]]&mqttPrefix=[[3]]&mqttUser=[[4]]&mqttPass=[[5]]",
|
"action": "mqttSave?mqttServer=[[1]]&mqttPort=[[2]]&mqttPrefix=[[3]]&mqttUser=[[4]]&mqttPass=[[5]]",
|
||||||
"class": "btn btn-block btn-success",
|
"class": "btn btn-block btn-success"
|
||||||
"style": "width:100%;display:inline"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title":"Проверить соединение с MQTT",
|
"title": "Отправить настройки MQTT с этого устройства на все остальные",
|
||||||
|
"action": "udp?arg=1",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "Проверить соединение с MQTT",
|
||||||
"action": "mqttCheck",
|
"action": "mqttCheck",
|
||||||
"response":"[[my-block]]",
|
"response": "[[my-block]]",
|
||||||
"class": "btn btn-block btn-success",
|
"class": "btn btn-block btn-success"
|
||||||
"style": "width:100%;display:inline"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Перезагрузить устройство",
|
"title": "Перезагрузить устройство",
|
||||||
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
||||||
"class": "btn btn-block btn-warning"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"action": "/page.htm?index",
|
"action": "/",
|
||||||
"class": "btn btn-block btn-danger btn-sm"
|
"class": "btn btn-block btn-danger btn-sm"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"content": [
|
"content": [
|
||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{SSDP}}",
|
"title": "{{name}}",
|
||||||
"class":"alert-warning"
|
"class":"alert-warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"action": "/page.htm?index",
|
"action": "/",
|
||||||
"class": "btn btn-block btn-danger btn-sm"
|
"class": "btn btn-block btn-danger btn-sm"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"content": [
|
"content": [
|
||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{SSDP}}",
|
"title": "{{name}}",
|
||||||
"class":"alert-warning"
|
"class":"alert-warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -26,14 +26,14 @@
|
|||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "Имя устройства",
|
"title": "Имя устройства",
|
||||||
"name":"ssdp",
|
"name":"dev_name",
|
||||||
"state": "{{SSDP}}",
|
"state": "{{name}}",
|
||||||
"pattern": "[0-9a-zA-Zа-яА-Я.\\- ]{1,20}"
|
"pattern": "[0-9a-zA-Zа-яА-Я.\\- ]{1,20}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "ssdp?ssdp=[[ssdp]]",
|
"action": "name?arg=[[dev_name]]",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
BIN
data/sync.ffs_db
Normal file
BIN
data/sync.ffs_db
Normal file
Binary file not shown.
5
data/widgets/widget.chart.json
Normal file
5
data/widgets/widget.chart.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"widget": "chart",
|
||||||
|
"series": "Temperature, °C",
|
||||||
|
"dateFormat": "HH:mm"
|
||||||
|
}
|
||||||
7
data/widgets/widget.fillGauge.json
Normal file
7
data/widgets/widget.fillGauge.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"widget": "fillgauge",
|
||||||
|
"circleColor": "#00FFFF",
|
||||||
|
"textColor": "#FFFFFF",
|
||||||
|
"waveTextColor": "#000000",
|
||||||
|
"waveColor": "#00FFFF"
|
||||||
|
}
|
||||||
BIN
date_excess/favicon.ico
Normal file
BIN
date_excess/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,36 +1,9 @@
|
|||||||
#include "set.h"
|
#include "set.h"
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
|
||||||
Serial.begin(115200);
|
|
||||||
//Serial.setDebugOutput(true);
|
|
||||||
Serial.println("--------------started----------------");
|
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
SPIFFS.begin();
|
File_system_init();
|
||||||
configSetup = readFile("config.json", 4096);
|
|
||||||
configSetup.replace(" ", "");
|
|
||||||
configSetup.replace("\r\n", "");
|
|
||||||
Serial.println(configSetup);
|
|
||||||
jsonWrite(configJson, "SSDP", jsonRead(configSetup, "SSDP"));
|
|
||||||
jsonWrite(configJson, "lang", jsonRead(configSetup, "lang"));
|
|
||||||
Serial.println("SPIFFS_init");
|
Serial.println("SPIFFS_init");
|
||||||
|
|
||||||
#ifdef ESP32
|
|
||||||
uint32_t chipID_u = ESP.getEfuseMac();
|
|
||||||
chipID = String(chipID_u);
|
|
||||||
jsonWrite(configSetup, "chipID", chipID);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ESP8266
|
|
||||||
chipID = String( ESP.getChipId() ) + "-" + String(ESP.getFlashChipId());
|
|
||||||
jsonWrite(configSetup, "chipID", chipID);
|
|
||||||
Serial.setDebugOutput(0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
jsonWrite(configSetup, "firmware_version", firmware_version);
|
|
||||||
|
|
||||||
prex = jsonRead(configSetup, "mqttPrefix") + "/" + chipID;
|
|
||||||
Serial.println(chipID);
|
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
CMD_init();
|
CMD_init();
|
||||||
Serial.println("[V] CMD_init");
|
Serial.println("[V] CMD_init");
|
||||||
@@ -59,32 +32,26 @@ void setup() {
|
|||||||
Push_init();
|
Push_init();
|
||||||
Serial.println("[V] Push_init");
|
Serial.println("[V] Push_init");
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
//SSDP_init();
|
UDP_init();
|
||||||
//Serial.println("[V] SSDP_init");
|
Serial.println("[V] UDP_init");
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
Serial.print("[i] Date compiling: ");
|
|
||||||
Serial.println(DATE_COMPILING);
|
|
||||||
|
|
||||||
getMemoryLoad("[i] After loading");
|
|
||||||
|
|
||||||
#ifdef ESP8266
|
ts.add(TEST, 5000, [&](void*) {
|
||||||
last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
|
||||||
#endif
|
|
||||||
#ifdef ESP32
|
|
||||||
last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
jsonWrite(configSetup, "last_version", last_version);
|
getMemoryLoad("[i] periodic check of");
|
||||||
|
//String json = "{}";
|
||||||
|
//jsonWriteStr(json, "test6", GetTime());
|
||||||
|
//ws.textAll(json);
|
||||||
|
|
||||||
|
}, nullptr, true);
|
||||||
|
|
||||||
Serial.print("[i] Last firmware version: ");
|
|
||||||
Serial.println(last_version);
|
|
||||||
|
|
||||||
just_load = false;
|
just_load = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
#ifdef OTA_enable
|
#ifdef OTA_enable
|
||||||
@@ -95,15 +62,21 @@ void loop() {
|
|||||||
ws.cleanupClients();
|
ws.cleanupClients();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
not_async_actions();
|
||||||
|
|
||||||
handleMQTT();
|
handleMQTT();
|
||||||
|
|
||||||
handle_connection();
|
|
||||||
handle_get_url();
|
|
||||||
|
|
||||||
handleCMD_loop();
|
handleCMD_loop();
|
||||||
handleButton();
|
handleButton();
|
||||||
handleScenario();
|
handleScenario();
|
||||||
|
handleUdp();
|
||||||
|
|
||||||
ts.update();
|
ts.update();
|
||||||
handle_upgrade();
|
}
|
||||||
|
|
||||||
|
void not_async_actions() {
|
||||||
|
do_mqtt_connection();
|
||||||
|
do_upgrade_url();
|
||||||
|
do_upgrade();
|
||||||
|
do_udp_data_parse();
|
||||||
|
do_mqtt_send_settings_to_udp();
|
||||||
}
|
}
|
||||||
|
|||||||
129
main.ino
129
main.ino
@@ -12,9 +12,23 @@ int jsonReadtoInt(String &json, String name) {
|
|||||||
JsonObject& root = jsonBuffer.parseObject(json);
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
return root[name];
|
return root[name];
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
root[name] = volume;
|
||||||
|
json = "";
|
||||||
|
root.printTo(json);
|
||||||
|
return json;
|
||||||
|
|
||||||
|
DynamicJsonDocument jsonBuffer(1024);
|
||||||
|
deserializeJson(jsonBuffer,json);
|
||||||
|
jsonBuffer[name] = volume;
|
||||||
|
json = "";
|
||||||
|
serializeJson(jsonBuffer,json);
|
||||||
|
return json;
|
||||||
|
*/
|
||||||
// ------------- Запись значения json String
|
// ------------- Запись значения json String
|
||||||
String jsonWrite(String &json, String name, String volume) {
|
String jsonWriteStr(String &json, String name, String volume) {
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& root = jsonBuffer.parseObject(json);
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
root[name] = volume;
|
root[name] = volume;
|
||||||
@@ -24,7 +38,7 @@ String jsonWrite(String &json, String name, String volume) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------- Запись значения json int
|
// ------------- Запись значения json int
|
||||||
String jsonWrite(String &json, String name, int volume) {
|
String jsonWriteInt(String &json, String name, int volume) {
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& root = jsonBuffer.parseObject(json);
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
root[name] = volume;
|
root[name] = volume;
|
||||||
@@ -34,7 +48,7 @@ String jsonWrite(String &json, String name, int volume) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------- Запись значения json float
|
// ------------- Запись значения json float
|
||||||
String jsonWrite(String &json, String name, float volume) {
|
String jsonWriteFloat(String &json, String name, float volume) {
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& root = jsonBuffer.parseObject(json);
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
root[name] = volume;
|
root[name] = volume;
|
||||||
@@ -42,6 +56,26 @@ String jsonWrite(String &json, String name, float volume) {
|
|||||||
root.printTo(json);
|
root.printTo(json);
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
String jsonWriteArray(String &json, String value1, String value2, String value3) {
|
||||||
|
|
||||||
|
const int capacity = JSON_ARRAY_SIZE(1) + 3 * JSON_OBJECT_SIZE(3);
|
||||||
|
|
||||||
|
StaticJsonBuffer<capacity> jb;
|
||||||
|
JsonArray& arr = jb.createArray();
|
||||||
|
JsonObject& obj1 = jb.createObject();
|
||||||
|
|
||||||
|
obj1[value1] = 1;
|
||||||
|
obj1[value2] = 2;
|
||||||
|
obj1[value3] = 3;
|
||||||
|
|
||||||
|
arr.add(obj1);
|
||||||
|
|
||||||
|
arr.printTo(json);
|
||||||
|
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
*/
|
||||||
//=============================================CONFIG===========================================================
|
//=============================================CONFIG===========================================================
|
||||||
void saveConfig () {
|
void saveConfig () {
|
||||||
writeFile("config.json", configSetup);
|
writeFile("config.json", configSetup);
|
||||||
@@ -159,7 +193,7 @@ String safeDataToFile(String data, String Folder)
|
|||||||
// addFile(fileName, GetTime() + "/" + data);
|
// addFile(fileName, GetTime() + "/" + data);
|
||||||
|
|
||||||
Serial.println(fileName);
|
Serial.println(fileName);
|
||||||
jsonWrite(configJson, "test", fileName);
|
jsonWriteStr(configJson, "test", fileName);
|
||||||
}
|
}
|
||||||
// ------------- Чтение файла в строку
|
// ------------- Чтение файла в строку
|
||||||
String readFile(String fileName, size_t len ) {
|
String readFile(String fileName, size_t len ) {
|
||||||
@@ -211,16 +245,65 @@ String addFile(String fileName, String strings ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------- Чтение строки из файла
|
// ------------- Чтение строки из файла
|
||||||
String readFileString(String fileName, String found)
|
//возвращает стоку из файла в которой есть искомое слово found
|
||||||
{
|
String readFileString(String fileName, String found) {
|
||||||
File configFile = SPIFFS.open("/" + fileName, "r");
|
File configFile = SPIFFS.open("/" + fileName, "r");
|
||||||
if (!configFile) {
|
if (!configFile) {
|
||||||
return "Failed";
|
return "Failed";
|
||||||
}
|
}
|
||||||
if (configFile.find(found.c_str())) {
|
if (configFile.find(found.c_str())) {
|
||||||
return configFile.readStringUntil('\r\n'); //'\r'
|
return configFile.readStringUntil('\n'); //'\r'
|
||||||
}
|
}
|
||||||
//return "|-|-|";
|
configFile.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запись данных в файл с частотой 1 секунда и более. Максимальное количество данных в суточном файле 1440 значений
|
||||||
|
void safeDataToFile(int inter, String par, uint16_t data) {
|
||||||
|
yield();
|
||||||
|
// Формируем зоголовок (префикс) Интервал, Параметр, размер_параметра
|
||||||
|
uint16_t dataSize = sizeof(data);
|
||||||
|
String prifexFile;
|
||||||
|
prifexFile += inter;
|
||||||
|
prifexFile += "," + par;
|
||||||
|
prifexFile += ",";
|
||||||
|
prifexFile += dataSize;
|
||||||
|
prifexFile += ":";
|
||||||
|
uint16_t prifexLen = prifexFile.length(); //Размер префикса
|
||||||
|
|
||||||
|
// Сделаем имя файла
|
||||||
|
String fileName = GetDate();
|
||||||
|
fileName = deleteBeforeDelimiter(fileName, " "); // удалим день недели
|
||||||
|
fileName.replace(" ", ".");
|
||||||
|
fileName.replace("..", "."); // Заменяем пробелы точками
|
||||||
|
fileName = par + "/" + fileName + ".txt"; // Имя файла параметр в виде директории и дата
|
||||||
|
fileName.toLowerCase(); //fileName = "san aug 31 2018"; Имя файла строчными буквами
|
||||||
|
Serial.println(fileName);
|
||||||
|
File configFile = SPIFFS.open("/" + fileName, "a"); // Открываем файл на добавление
|
||||||
|
size_t size = configFile.size();
|
||||||
|
yield();
|
||||||
|
if (size == 0) {
|
||||||
|
configFile.print(prifexFile);
|
||||||
|
}
|
||||||
|
size = configFile.size();
|
||||||
|
// Получим время и определим позицию в файле
|
||||||
|
String time = GetTime();
|
||||||
|
//time = "00:15:00";
|
||||||
|
int timeM = timeToMin(time); // Здесь количество минут с начала суток
|
||||||
|
timeM = timeM / inter;
|
||||||
|
int poz = timeM * dataSize + prifexLen + 1; // позиция в которую нужно записать.
|
||||||
|
int endF = (size - prifexLen) * dataSize + prifexLen + 1; // позиция конца файла
|
||||||
|
if (poz >= endF) { // если файл имел пропуски в записи данных
|
||||||
|
int i = (poz - endF) / dataSize;
|
||||||
|
for (int j = 0; j < i; j++) { // Заполним недостающие данные
|
||||||
|
for (int d = 0; d < dataSize; d++) {
|
||||||
|
yield();
|
||||||
|
configFile.write(0); // нулями
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yield();
|
||||||
|
configFile.write(data >> 8); // добавим текущие
|
||||||
|
configFile.write(data); // данные
|
||||||
configFile.close();
|
configFile.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +343,7 @@ void led_blink(int pin, int fq, String blink_satus) {
|
|||||||
|
|
||||||
void getMemoryLoad(String text) {
|
void getMemoryLoad(String text) {
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
int all_memory = 53312;
|
int all_memory = 52864;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
int all_memory = 362868;
|
int all_memory = 362868;
|
||||||
@@ -276,19 +359,19 @@ void getMemoryLoad(String text) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
//esp32 full memory = 362868 k bytes
|
//esp32 full memory = 362868 k bytes
|
||||||
//esp8266 full memory = 53312 k bytes
|
//esp8266 full memory = 52864 k bytes
|
||||||
|
|
||||||
//===================================================================
|
//===================================================================
|
||||||
/*
|
/*
|
||||||
void web_print (String text) {
|
void web_print (String text) {
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
jsonWrite(json, "test1", jsonRead(json, "test2"));
|
jsonWriteStr(json, "test1", jsonRead(json, "test2"));
|
||||||
jsonWrite(json, "test2", jsonRead(json, "test3"));
|
jsonWriteStr(json, "test2", jsonRead(json, "test3"));
|
||||||
jsonWrite(json, "test3", jsonRead(json, "test4"));
|
jsonWriteStr(json, "test3", jsonRead(json, "test4"));
|
||||||
jsonWrite(json, "test4", jsonRead(json, "test5"));
|
jsonWriteStr(json, "test4", jsonRead(json, "test5"));
|
||||||
jsonWrite(json, "test5", jsonRead(json, "test6"));
|
jsonWriteStr(json, "test5", jsonRead(json, "test6"));
|
||||||
|
|
||||||
jsonWrite(json, "test6", GetTime() + " " + text);
|
jsonWriteStr(json, "test6", GetTime() + " " + text);
|
||||||
|
|
||||||
ws.textAll(json);
|
ws.textAll(json);
|
||||||
}
|
}
|
||||||
@@ -309,6 +392,12 @@ void getMemoryLoad(String text) {
|
|||||||
*/
|
*/
|
||||||
//===================================================================
|
//===================================================================
|
||||||
/*
|
/*
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "Конфигурация устройства",
|
||||||
|
"socket": "test2",
|
||||||
|
"class": "btn btn-block btn-primary"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
@@ -345,7 +434,7 @@ void getMemoryLoad(String text) {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
String getResetReason(uint8_t core) {
|
String getResetReason(uint8_t core) {
|
||||||
int reason = rtc_get_reset_reason(core);
|
int reason = rtc_get_reset_reason(core);
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case 1 : return "Power on"; break; //Vbat power on reset
|
case 1 : return "Power on"; break; //Vbat power on reset
|
||||||
@@ -365,10 +454,10 @@ String getResetReason(uint8_t core) {
|
|||||||
case 16 : return "RTC Watch dog reset digital core and rtc module"; break;
|
case 16 : return "RTC Watch dog reset digital core and rtc module"; break;
|
||||||
default : return "NO_MEAN";
|
default : return "NO_MEAN";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String EspClass::getResetReason(void) {
|
String EspClass::getResetReason(void) {
|
||||||
char buff[32];
|
char buff[32];
|
||||||
if (resetInfo.reason == REASON_DEFAULT_RST) { // normal startup by power on
|
if (resetInfo.reason == REASON_DEFAULT_RST) { // normal startup by power on
|
||||||
strcpy_P(buff, PSTR("Power on"));
|
strcpy_P(buff, PSTR("Power on"));
|
||||||
@@ -388,5 +477,5 @@ String EspClass::getResetReason(void) {
|
|||||||
strcpy_P(buff, PSTR("Unknown"));
|
strcpy_P(buff, PSTR("Unknown"));
|
||||||
}
|
}
|
||||||
return String(buff);
|
return String(buff);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|||||||
125
mqtt.ino
125
mqtt.ino
@@ -22,38 +22,47 @@ void MQTT_init() {
|
|||||||
|
|
||||||
server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("mqttServer")) {
|
if (request->hasArg("mqttServer")) {
|
||||||
jsonWrite(configSetup, "mqttServer", request->getParam("mqttServer")->value());
|
jsonWriteStr(configSetup, "mqttServer", request->getParam("mqttServer")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttPort")) {
|
if (request->hasArg("mqttPort")) {
|
||||||
int port = (request->getParam("mqttPort")->value()).toInt();
|
int port = (request->getParam("mqttPort")->value()).toInt();
|
||||||
jsonWrite(configSetup, "mqttPort", port);
|
jsonWriteInt(configSetup, "mqttPort", port);
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttPrefix")) {
|
if (request->hasArg("mqttPrefix")) {
|
||||||
jsonWrite(configSetup, "mqttPrefix", request->getParam("mqttPrefix")->value());
|
jsonWriteStr(configSetup, "mqttPrefix", request->getParam("mqttPrefix")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttUser")) {
|
if (request->hasArg("mqttUser")) {
|
||||||
jsonWrite(configSetup, "mqttUser", request->getParam("mqttUser")->value());
|
jsonWriteStr(configSetup, "mqttUser", request->getParam("mqttUser")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttPass")) {
|
if (request->hasArg("mqttPass")) {
|
||||||
jsonWrite(configSetup, "mqttPass", request->getParam("mqttPass")->value());
|
jsonWriteStr(configSetup, "mqttPass", request->getParam("mqttPass")->value());
|
||||||
}
|
}
|
||||||
saveConfig();
|
saveConfig();
|
||||||
start_connecting_to_mqtt = true;
|
mqtt_connection = true;
|
||||||
|
|
||||||
request->send(200, "text/text", "ok");
|
request->send(200, "text/text", "ok");
|
||||||
});
|
});
|
||||||
|
|
||||||
server.on("/mqttCheck", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/mqttCheck", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
String tmp = "{}";
|
String tmp = "{}";
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + stateMQTT());
|
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + stateMQTT());
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
jsonWriteStr(tmp, "class", "pop-up");
|
||||||
request->send(200, "text/text", tmp);
|
request->send(200, "text/text", tmp);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_connection() {
|
void do_mqtt_send_settings_to_udp() {
|
||||||
if (start_connecting_to_mqtt) {
|
if (mqtt_send_settings_to_udp) {
|
||||||
start_connecting_to_mqtt = false;
|
mqtt_send_settings_to_udp = false;
|
||||||
|
send_mqtt_to_udp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void do_mqtt_connection() {
|
||||||
|
if (mqtt_connection) {
|
||||||
|
mqtt_connection = false;
|
||||||
client.disconnect();
|
client.disconnect();
|
||||||
MQTT_Connecting();
|
MQTT_Connecting();
|
||||||
}
|
}
|
||||||
@@ -99,7 +108,7 @@ boolean MQTT_Connecting() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=====================================================ВХОДЯЩИЕ ДАННЫЕ========================================================
|
//=====================================================ВХОДЯЩИЕ ДАННЫЕ========================================================
|
||||||
void callback(char* topic, byte* payload, unsigned int length) {
|
void callback(char* topic, byte * payload, unsigned int length) {
|
||||||
Serial.print("[MQTT] ");
|
Serial.print("[MQTT] ");
|
||||||
Serial.print(topic);
|
Serial.print(topic);
|
||||||
String topic_str = String(topic);
|
String topic_str = String(topic);
|
||||||
@@ -134,15 +143,12 @@ void outcoming_date() {
|
|||||||
|
|
||||||
sendAllWigets();
|
sendAllWigets();
|
||||||
sendAllData();
|
sendAllData();
|
||||||
|
choose_log_date_and_send();
|
||||||
// if (flagLoggingAnalog) sendLogData("log.analog.txt", "loganalog");
|
|
||||||
// if (flagLoggingPh) sendLogData("log.ph.txt", "logph");
|
|
||||||
// if (flagLoggingDallas) sendLogData("log.dallas.txt", "logdallas");
|
|
||||||
// if (flagLoggingLevel) sendLogData("log.level.txt", "loglevel");
|
|
||||||
|
|
||||||
Serial.println("[V] Sending all date to iot manager completed");
|
Serial.println("[V] Sending all date to iot manager completed");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//======================================CONFIG==================================================
|
//======================================CONFIG==================================================
|
||||||
boolean sendMQTT(String end_of_topik, String data) {
|
boolean sendMQTT(String end_of_topik, String data) {
|
||||||
String topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + end_of_topik;
|
String topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + end_of_topik;
|
||||||
@@ -151,11 +157,23 @@ boolean sendMQTT(String end_of_topik, String data) {
|
|||||||
client.endPublish();
|
client.endPublish();
|
||||||
return send_status;
|
return send_status;
|
||||||
}
|
}
|
||||||
|
boolean sendCHART(String topik, String data) {
|
||||||
|
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
|
boolean send_status = client.beginPublish(topik.c_str(), data.length(), false);
|
||||||
|
client.print(data);
|
||||||
|
client.endPublish();
|
||||||
|
return send_status;
|
||||||
|
}
|
||||||
|
boolean sendCHART_test(String topik, String data) {
|
||||||
|
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
|
boolean send_status = client.publish (topik.c_str(), data.c_str(), false);
|
||||||
|
return send_status;
|
||||||
|
}
|
||||||
//======================================STATUS==================================================
|
//======================================STATUS==================================================
|
||||||
void sendSTATUS(String topik, String state) {
|
void sendSTATUS(String topik, String state) {
|
||||||
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
String json_ = "{}";
|
String json_ = "{}";
|
||||||
jsonWrite(json_, "status", state);
|
jsonWriteStr(json_, "status", state);
|
||||||
int send_status = client.publish (topik.c_str(), json_.c_str(), false);
|
int send_status = client.publish (topik.c_str(), json_.c_str(), false);
|
||||||
}
|
}
|
||||||
//======================================CONTROL==================================================
|
//======================================CONTROL==================================================
|
||||||
@@ -165,35 +183,52 @@ void sendCONTROL(String id, String topik, String state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
|
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
|
||||||
|
|
||||||
|
#ifdef layout_in_ram
|
||||||
void sendAllWigets() {
|
void sendAllWigets() {
|
||||||
if (all_vigets != "") {
|
if (all_widgets != "") {
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
String line;
|
String line;
|
||||||
int psn_1 = 0;
|
int psn_1 = 0;
|
||||||
int psn_2;
|
int psn_2;
|
||||||
do {
|
do {
|
||||||
psn_2 = all_vigets.indexOf("\r\n", psn_1);
|
psn_2 = all_widgets.indexOf("\r\n", psn_1); //\r\n
|
||||||
line = all_vigets.substring(psn_1, psn_2);
|
line = all_widgets.substring(psn_1, psn_2);
|
||||||
line.replace("\n", "");
|
line.replace("\n", "");
|
||||||
line.replace("\r\n", "");
|
line.replace("\r\n", "");
|
||||||
//jsonWrite(line, "id", String(counter));
|
//jsonWriteStr(line, "id", String(counter));
|
||||||
//jsonWrite(line, "pageId", String(counter));
|
//jsonWriteStr(line, "pageId", String(counter));
|
||||||
counter++;
|
counter++;
|
||||||
sendMQTT("config", line);
|
sendMQTT("config", line);
|
||||||
Serial.println("[V] " + line);
|
Serial.println("[V] " + line);
|
||||||
psn_1 = psn_2 + 1;
|
psn_1 = psn_2 + 1;
|
||||||
} while (psn_2 + 2 < all_vigets.length());
|
} while (psn_2 + 2 < all_widgets.length());
|
||||||
getMemoryLoad("[i] after send all vigets");
|
getMemoryLoad("[i] after send all widgets");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//прямое выкидывание данных из файла в файловой системе в mqtt, без загрузки оперативной памяти
|
||||||
|
void sendAllWigets() {
|
||||||
|
File configFile = SPIFFS.open("/layout.txt", "r");
|
||||||
|
if (!configFile) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
configFile.seek(0, SeekSet); //поставим курсор в начало файла
|
||||||
|
while (configFile.position() != configFile.size()) {
|
||||||
|
String widget_to_send = configFile.readStringUntil('\r\n');
|
||||||
|
Serial.println("[V] " + widget_to_send);
|
||||||
|
sendMQTT("config", widget_to_send);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
|
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
|
||||||
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
|
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
|
||||||
|
|
||||||
String current_config = configJson; //{"SSDP":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
String current_config = configJson; //{"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("}", ""); //"SSDP":"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 += ","; //"SSDP":"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",
|
||||||
|
|
||||||
while (current_config.length() != 0) {
|
while (current_config.length() != 0) {
|
||||||
|
|
||||||
@@ -202,7 +237,7 @@ void sendAllData() { //берет строку json и ключи превра
|
|||||||
topic.replace("\"", "");
|
topic.replace("\"", "");
|
||||||
String state = selectToMarkerLast (tmp, ":");
|
String state = selectToMarkerLast (tmp, ":");
|
||||||
state.replace("\"", "");
|
state.replace("\"", "");
|
||||||
if (topic != ssdpS && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
|
if (topic != "name" && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
|
||||||
sendSTATUS(topic, state);
|
sendSTATUS(topic, state);
|
||||||
//Serial.println("-->" + topic + " " + state);
|
//Serial.println("-->" + topic + " " + state);
|
||||||
}
|
}
|
||||||
@@ -210,23 +245,7 @@ void sendAllData() { //берет строку json и ключи превра
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendLogData(String file, String topic) {
|
|
||||||
|
|
||||||
String log_date = readFile(file, 5000) + "\r\n";
|
|
||||||
getMemoryLoad("[i] after send log date");
|
|
||||||
|
|
||||||
log_date.replace("\r\n", "\n");
|
|
||||||
log_date.replace("\r", "\n");
|
|
||||||
|
|
||||||
while (log_date.length() != 0) {
|
|
||||||
String tmp = selectToMarker (log_date, "\n");
|
|
||||||
|
|
||||||
sendSTATUS(topic, selectFromMarkerToMarker(tmp, " ", 2));
|
|
||||||
if (tmp != "") sendSTATUS(topic, tmp);
|
|
||||||
|
|
||||||
log_date = deleteBeforeDelimiter(log_date, "\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String stateMQTT() {
|
String stateMQTT() {
|
||||||
|
|
||||||
@@ -259,7 +278,7 @@ String stateMQTT() {
|
|||||||
|
|
||||||
//SCENARIO ANALOG > 5 800324-1458415 rel1 0
|
//SCENARIO ANALOG > 5 800324-1458415 rel1 0
|
||||||
if (jsonRead(configSetup, "scenario") == "1") {
|
if (jsonRead(configSetup, "scenario") == "1") {
|
||||||
//String all_text = readFile("firmware.scenario.txt", 1024) + "\r\n";
|
//String all_text = readFile("firmware.s.txt", 1024) + "\r\n";
|
||||||
String all_text = scenario + "\r\n";
|
String all_text = scenario + "\r\n";
|
||||||
all_text.replace("\r\n", "\n");
|
all_text.replace("\r\n", "\n");
|
||||||
all_text.replace("\r", "\n");
|
all_text.replace("\r", "\n");
|
||||||
@@ -297,12 +316,12 @@ String stateMQTT() {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
//jsonWrite(tmp, "status", "1");
|
//jsonWriteStr(tmp, "status", "1");
|
||||||
|
|
||||||
String current_config = configJson; //{"SSDP":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
String current_config = configJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
||||||
current_config.replace("{", "");
|
current_config.replace("{", "");
|
||||||
current_config.replace("}", ""); //"SSDP":"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 += ","; //"SSDP":"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",
|
||||||
|
|
||||||
while (current_config.length() != 0) {
|
while (current_config.length() != 0) {
|
||||||
|
|
||||||
@@ -313,8 +332,8 @@ String stateMQTT() {
|
|||||||
String state = selectToMarkerLast (tmp, ":"); //"1"
|
String state = selectToMarkerLast (tmp, ":"); //"1"
|
||||||
state.replace("\"", ""); //1
|
state.replace("\"", ""); //1
|
||||||
|
|
||||||
//if (viget.lastIndexOf(topic) > 0) {
|
//if (widget.lastIndexOf(topic) > 0) {
|
||||||
jsonWrite(tmp, "status", state);
|
jsonWriteStr(tmp, "status", state);
|
||||||
//}
|
//}
|
||||||
current_config = deleteBeforeDelimiter(current_config, ",");
|
current_config = deleteBeforeDelimiter(current_config, ",");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ void Push_init() {
|
|||||||
server.on("/pushingboxDate", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/pushingboxDate", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
|
||||||
if (request->hasArg("pushingbox_id")) {
|
if (request->hasArg("pushingbox_id")) {
|
||||||
jsonWrite(configSetup, "pushingbox_id", request->getParam("pushingbox_id")->value());
|
jsonWriteStr(configSetup, "pushingbox_id", request->getParam("pushingbox_id")->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
|
|||||||
67
set.h
67
set.h
@@ -1,12 +1,15 @@
|
|||||||
String firmware_version = "2.3.1";
|
String firmware_version = "2.3.1";
|
||||||
boolean flash_1mb = true;
|
//-----------------------------------------------------------------
|
||||||
|
boolean mb_4_of_memory = true;
|
||||||
String last_version;
|
String last_version;
|
||||||
boolean start_check_version = false;
|
|
||||||
|
|
||||||
//#define OTA_enable
|
//#define OTA_enable
|
||||||
//#define MDNS_enable
|
//#define MDNS_enable
|
||||||
//#define WS_enable
|
//#define WS_enable
|
||||||
|
|
||||||
|
//#define layout_in_ram
|
||||||
|
|
||||||
#define TIME_COMPILING String(__TIME__)
|
#define TIME_COMPILING String(__TIME__)
|
||||||
#define DATE_COMPILING String(__DATE__)
|
#define DATE_COMPILING String(__DATE__)
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
@@ -14,9 +17,6 @@ boolean start_check_version = false;
|
|||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
#define analog_update_int 5000
|
#define analog_update_int 5000
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
#define ph_shooting_interval 500 //интервал выстрела датчика
|
|
||||||
#define ph_times_to_send 10 //после скольки выстрелов делать отправку данных
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#define temp_update_int 5000
|
#define temp_update_int 5000
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
#define tank_level_shooting_interval 500 //интервал выстрела датчика
|
#define tank_level_shooting_interval 500 //интервал выстрела датчика
|
||||||
@@ -25,7 +25,8 @@ boolean start_check_version = false;
|
|||||||
#define dhtT_update_int 10000
|
#define dhtT_update_int 10000
|
||||||
#define dhtH_update_int 10000
|
#define dhtH_update_int 10000
|
||||||
#define dht_calculation_update_int 10000
|
#define dht_calculation_update_int 10000
|
||||||
#define statistics_update 1000 * 60 * 60 * 4
|
//-----------------------------------------------------------------
|
||||||
|
#define statistics_update 1000 * 60 * 60 * 2
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -33,11 +34,9 @@ boolean start_check_version = false;
|
|||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <ESP8266HTTPClient.h>
|
#include <ESP8266HTTPClient.h>
|
||||||
//#include <ESPAsyncTCP.h>
|
|
||||||
#ifdef MDNS_enable
|
#ifdef MDNS_enable
|
||||||
#include <ESP8266mDNS.h>
|
#include <ESP8266mDNS.h>
|
||||||
#endif
|
#endif
|
||||||
//#include <ESP8266SSDP.h>
|
|
||||||
#include <ESP8266httpUpdate.h>
|
#include <ESP8266httpUpdate.h>
|
||||||
#include <ESP8266HTTPUpdateServer.h>
|
#include <ESP8266HTTPUpdateServer.h>
|
||||||
ESP8266HTTPUpdateServer httpUpdater;
|
ESP8266HTTPUpdateServer httpUpdater;
|
||||||
@@ -52,11 +51,8 @@ ESP8266HTTPUpdateServer httpUpdater;
|
|||||||
#endif
|
#endif
|
||||||
#include <AsyncTCP.h>
|
#include <AsyncTCP.h>
|
||||||
#include <analogWrite.h>
|
#include <analogWrite.h>
|
||||||
//#include <ESP32SSDP.h>
|
|
||||||
#include <HTTPUpdate.h>
|
#include <HTTPUpdate.h>
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
//HTTPClient http;
|
|
||||||
//#include <rom/rtc.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//==общие библиотеки и объекты==//
|
//==общие библиотеки и объекты==//
|
||||||
@@ -75,14 +71,16 @@ AsyncWebSocket ws("/ws");
|
|||||||
#endif
|
#endif
|
||||||
AsyncEventSource events("/events");
|
AsyncEventSource events("/events");
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
#include "time.h"
|
#include <time.h>
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
#include <TickerScheduler.h>
|
#include <TickerScheduler.h>
|
||||||
TickerScheduler ts(30);
|
TickerScheduler ts(30);
|
||||||
enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, STEPPER1, STEPPER2, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, CMD, TIMER_COUNTDOWN, TIMERS, TIME, STATISTICS, TEST};
|
enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, STEPPER1, STEPPER2, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, dhtT_LOG, dhtH_LOG, CMD, TIMER_COUNTDOWN, TIMERS, TIME, TIME_SYNC, STATISTICS, UDP, UDP_DB, TEST};
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
|
//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
|
||||||
//#include "Ticker_for_TickerScheduler/Ticker/Ticker.h"
|
//---------------------------------------------------------------
|
||||||
|
#include <WiFiUdp.h>
|
||||||
|
WiFiUDP Udp;
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
WiFiClient espClient;
|
WiFiClient espClient;
|
||||||
@@ -105,11 +103,16 @@ GMedian medianFilter;
|
|||||||
OneWire *oneWire;
|
OneWire *oneWire;
|
||||||
DallasTemperature sensors;
|
DallasTemperature sensors;
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
#include "DHTesp.h"
|
#include <DHTesp.h>
|
||||||
DHTesp dht;
|
DHTesp dht;
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
//#include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021
|
//#include <ModbusMaster.h>
|
||||||
//Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021();
|
//#include "SoftwareSerial.h"
|
||||||
|
//SoftwareSerial SoftSerial(12, 13, false, 128);
|
||||||
|
//ModbusMaster modbus;
|
||||||
|
|
||||||
|
//swSer.begin(9600);
|
||||||
|
//modbus.begin(1, SoftSerial);
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
boolean just_load = true;
|
boolean just_load = true;
|
||||||
@@ -125,7 +128,7 @@ String json = "{}";
|
|||||||
String chipID = "";
|
String chipID = "";
|
||||||
String prex;
|
String prex;
|
||||||
String ids;
|
String ids;
|
||||||
String all_vigets = "";
|
String all_widgets = "";
|
||||||
String scenario;
|
String scenario;
|
||||||
|
|
||||||
String order_loop;
|
String order_loop;
|
||||||
@@ -133,13 +136,13 @@ String order_loop;
|
|||||||
boolean flagLoggingAnalog = false;
|
boolean flagLoggingAnalog = false;
|
||||||
boolean flagLoggingLevel = false;
|
boolean flagLoggingLevel = false;
|
||||||
boolean flagLoggingDallas = false;
|
boolean flagLoggingDallas = false;
|
||||||
boolean flagLoggingPh = false;
|
boolean flagLoggingdhtT = false;
|
||||||
|
boolean flagLoggingdhtH = false;
|
||||||
|
|
||||||
const char* ntpServer = "pool.ntp.org";
|
const char* ntpServer = "pool.ntp.org";
|
||||||
const long gmtOffset_sec = 3600;
|
const long gmtOffset_sec = 3600;
|
||||||
const int daylightOffset_sec = 3600;
|
const int daylightOffset_sec = 3600;
|
||||||
|
|
||||||
const String ssdpS = "SSDP";
|
|
||||||
String current_time;
|
String current_time;
|
||||||
|
|
||||||
int scenario_line_status [] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
int scenario_line_status [] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
||||||
@@ -148,7 +151,25 @@ int wifi_lost_error = 0;
|
|||||||
int mqtt_lost_error = 0;
|
int mqtt_lost_error = 0;
|
||||||
|
|
||||||
String var;
|
String var;
|
||||||
boolean upgrade_flag = false;
|
|
||||||
boolean get_url_flag = false;
|
|
||||||
|
|
||||||
boolean start_connecting_to_mqtt = false;
|
//flags for not async actions
|
||||||
|
boolean upgrade_url = false;
|
||||||
|
boolean upgrade = false;
|
||||||
|
boolean mqtt_connection = false;
|
||||||
|
boolean udp_data_parse = false;
|
||||||
|
boolean mqtt_send_settings_to_udp = false;
|
||||||
|
|
||||||
|
boolean udp_busy = false;
|
||||||
|
|
||||||
|
|
||||||
|
String test;
|
||||||
|
|
||||||
|
boolean chart_data_in_solid_array;
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int udp_port = 4210;
|
||||||
|
char udp_incomingPacket[255];
|
||||||
|
//char udp_replyPacket[] = "Multicast packet 1";
|
||||||
|
IPAddress udp_multicastIP (255, 255, 255, 255);
|
||||||
|
String received_ip;
|
||||||
|
String received_udp_line;
|
||||||
|
|||||||
122
udp.ino
Normal file
122
udp.ino
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
void UDP_init() {
|
||||||
|
server.on("/udp", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
String value;
|
||||||
|
if (request->hasArg("arg")) {
|
||||||
|
value = request->getParam("arg")->value();
|
||||||
|
}
|
||||||
|
if (value == "1") {
|
||||||
|
mqtt_send_settings_to_udp = true;
|
||||||
|
request->send(200, "text/text", "ok");
|
||||||
|
}
|
||||||
|
if (value == "2") {
|
||||||
|
SPIFFS.remove("/dev.csv");
|
||||||
|
request->redirect("/?dev");
|
||||||
|
}
|
||||||
|
if (value == "3") {
|
||||||
|
request->redirect("/?dev");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
server.on("/name", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
if (request->hasArg("arg")) {
|
||||||
|
jsonWriteStr(configSetup, "name", request->getParam("arg")->value());
|
||||||
|
jsonWriteStr(configJson, "name", request->getParam("arg")->value());
|
||||||
|
saveConfig();
|
||||||
|
}
|
||||||
|
request->send(200, "text/text", "OK");
|
||||||
|
});
|
||||||
|
|
||||||
|
SPIFFS.remove("/dev.csv");
|
||||||
|
|
||||||
|
Udp.begin(udp_port);
|
||||||
|
|
||||||
|
ts.add(UDP, 30000, [&](void*) {
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
if (!udp_busy) {
|
||||||
|
String line_to_send = chipID + ";" + jsonRead(configSetup, "name");
|
||||||
|
#ifdef ESP8266
|
||||||
|
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
|
||||||
|
Udp.write(line_to_send.c_str());
|
||||||
|
#endif
|
||||||
|
#ifdef ESP32
|
||||||
|
Udp.beginMulticast(udp_multicastIP, udp_port);
|
||||||
|
#endif
|
||||||
|
Udp.endPacket();
|
||||||
|
Serial.println("[UDP<=] dev info send");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, nullptr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void add_dev_in_list(String fileName, String id, String dev_name, String ip) {
|
||||||
|
File configFile = SPIFFS.open("/" + fileName, "r");
|
||||||
|
if (!configFile) {
|
||||||
|
addFile(fileName, "device id;device name;ip adress");
|
||||||
|
}
|
||||||
|
if (!configFile.find(id.c_str())) {
|
||||||
|
addFile(fileName, id + ";" + dev_name + "; <a href=\"http://" + ip + "\" target=\"_blank\"\">" + ip + "</a>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleUdp() {
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
int packetSize = Udp.parsePacket();
|
||||||
|
if (packetSize) {
|
||||||
|
//Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
|
||||||
|
received_ip = Udp.remoteIP().toString();
|
||||||
|
int len = Udp.read(udp_incomingPacket, 255);
|
||||||
|
if (len > 0) {
|
||||||
|
udp_incomingPacket[len] = 0;
|
||||||
|
}
|
||||||
|
received_udp_line = String(udp_incomingPacket);
|
||||||
|
udp_data_parse = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void do_udp_data_parse() {
|
||||||
|
if (udp_data_parse) {
|
||||||
|
udp_data_parse = false;
|
||||||
|
Serial.print("[UDP=>] " + received_ip);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.println(received_udp_line);
|
||||||
|
if (received_udp_line.indexOf("mqttServer") > 0) {
|
||||||
|
jsonWriteStr(configSetup, "mqttServer", jsonRead(received_udp_line, "mqttServer"));
|
||||||
|
jsonWriteInt(configSetup, "mqttPort", jsonReadtoInt(received_udp_line, "mqttPort"));
|
||||||
|
jsonWriteStr(configSetup, "mqttPrefix", jsonRead(received_udp_line, "mqttPrefix"));
|
||||||
|
jsonWriteStr(configSetup, "mqttUser", jsonRead(received_udp_line, "mqttUser"));
|
||||||
|
jsonWriteStr(configSetup, "mqttPass", jsonRead(received_udp_line, "mqttPass"));
|
||||||
|
saveConfig();
|
||||||
|
Serial.println("[V] new mqtt setting received from udp and saved");
|
||||||
|
mqtt_connection = true;
|
||||||
|
} else {
|
||||||
|
add_dev_in_list("dev.csv", selectFromMarkerToMarker(received_udp_line, ";", 0), selectFromMarkerToMarker(received_udp_line, ";", 1), received_ip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_mqtt_to_udp() {
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
udp_busy = true;
|
||||||
|
String mqtt_data = "{}";
|
||||||
|
jsonWriteStr(mqtt_data, "mqttServer", jsonRead(configSetup, "mqttServer"));
|
||||||
|
jsonWriteInt(mqtt_data, "mqttPort", jsonReadtoInt(configSetup, "mqttPort"));
|
||||||
|
jsonWriteStr(mqtt_data, "mqttPrefix", jsonRead(configSetup, "mqttPrefix"));
|
||||||
|
jsonWriteStr(mqtt_data, "mqttUser", jsonRead(configSetup, "mqttUser"));
|
||||||
|
jsonWriteStr(mqtt_data, "mqttPass", jsonRead(configSetup, "mqttPass"));
|
||||||
|
Serial.println(mqtt_data);
|
||||||
|
#ifdef ESP8266
|
||||||
|
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
|
||||||
|
Udp.write(mqtt_data.c_str());
|
||||||
|
#endif
|
||||||
|
#ifdef ESP32
|
||||||
|
Udp.beginMulticast(udp_multicastIP, udp_port);
|
||||||
|
int size_of = sizeof(mqtt_data);
|
||||||
|
uint8_t msg[10] = (uint8_t)atoi(mqtt_data.c_str());
|
||||||
|
//Udp.write(msg, sizeof(mqtt_data));
|
||||||
|
//Udp.write(mqtt_data.c_str(), strlen(mqtt_data.c_str()));
|
||||||
|
#endif
|
||||||
|
Udp.endPacket();
|
||||||
|
Serial.println("[UDP<=] mqtt info send");
|
||||||
|
udp_busy = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user