mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Global change
This commit is contained in:
BIN
CH341SER_WIN_3.5.ZIP
Normal file
BIN
CH341SER_WIN_3.5.ZIP
Normal file
Binary file not shown.
109
Cmd.ino
109
Cmd.ino
@@ -18,9 +18,15 @@ void CMD_init() {
|
|||||||
|
|
||||||
sCmd.addCommand("dhtT", dhtT);
|
sCmd.addCommand("dhtT", dhtT);
|
||||||
sCmd.addCommand("dhtH", dhtH);
|
sCmd.addCommand("dhtH", dhtH);
|
||||||
sCmd.addCommand("dhtPerception", dhtPerception);
|
sCmd.addCommand("dhtPerception", dhtP);
|
||||||
sCmd.addCommand("dhtComfort", dhtComfort);
|
sCmd.addCommand("dhtComfort", dhtC);
|
||||||
sCmd.addCommand("dhtDewpoint", dhtDewpoint);
|
sCmd.addCommand("dhtDewpoint", dhtD);
|
||||||
|
|
||||||
|
sCmd.addCommand("bmp280T", bmp280T);
|
||||||
|
sCmd.addCommand("bmp280P", bmp280P);
|
||||||
|
|
||||||
|
sCmd.addCommand("bme280T", bme280T);
|
||||||
|
//sCmd.addCommand("bme280P", bme280P);
|
||||||
|
|
||||||
sCmd.addCommand("stepper", stepper);
|
sCmd.addCommand("stepper", stepper);
|
||||||
sCmd.addCommand("stepperSet", stepperSet);
|
sCmd.addCommand("stepperSet", stepperSet);
|
||||||
@@ -65,7 +71,7 @@ void button() {
|
|||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
jsonWriteStr(optionJson, "button_param" + button_number, button_param);
|
jsonWriteStr(optionJson, "button_param" + button_number, button_param);
|
||||||
jsonWriteStr(configJson, "buttonSet" + button_number, start_state);
|
jsonWriteStr(configJson, "button" + button_number, start_state);
|
||||||
|
|
||||||
if (isDigitStr (button_param)) {
|
if (isDigitStr (button_param)) {
|
||||||
pinMode(button_param.toInt(), OUTPUT);
|
pinMode(button_param.toInt(), OUTPUT);
|
||||||
@@ -91,7 +97,7 @@ void button() {
|
|||||||
str = deleteBeforeDelimiter(str, ",");
|
str = deleteBeforeDelimiter(str, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.toggle.json", "buttonSet" + button_number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.toggle.json", "button" + button_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buttonSet() {
|
void buttonSet() {
|
||||||
@@ -124,23 +130,23 @@ void buttonSet() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eventGen ("buttonSet", button_number);
|
eventGen ("button", button_number);
|
||||||
|
|
||||||
jsonWriteStr(configJson, "buttonSet" + button_number, button_state);
|
jsonWriteStr(configJson, "button" + button_number, button_state);
|
||||||
sendSTATUS("buttonSet" + button_number, button_state);
|
sendSTATUS("button" + button_number, button_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buttonChange() {
|
void buttonChange() {
|
||||||
String button_number = sCmd.next();
|
String button_number = sCmd.next();
|
||||||
String current_state = jsonRead(configJson, "buttonSet" + button_number);
|
String current_state = jsonRead(configJson, "button" + button_number);
|
||||||
if (current_state == "1") {
|
if (current_state == "1") {
|
||||||
current_state = "0";
|
current_state = "0";
|
||||||
} else if (current_state == "0") {
|
} else if (current_state == "0") {
|
||||||
current_state = "1";
|
current_state = "1";
|
||||||
}
|
}
|
||||||
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
||||||
jsonWriteStr(configJson, "buttonSet" + button_number, current_state);
|
jsonWriteStr(configJson, "button" + button_number, current_state);
|
||||||
sendSTATUS("buttonSet" + button_number, current_state);
|
sendSTATUS("button" + button_number, current_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pinSet() {
|
void pinSet() {
|
||||||
@@ -174,9 +180,9 @@ void pwm() {
|
|||||||
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);
|
||||||
jsonWriteStr(configJson, "pwmSet" + pwm_number, start_state);
|
jsonWriteStr(configJson, "pwm" + pwm_number, start_state);
|
||||||
|
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.range.json", "pwmSet" + pwm_number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.range.json", "pwm" + pwm_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pwmSet() {
|
void pwmSet() {
|
||||||
@@ -188,10 +194,10 @@ void pwmSet() {
|
|||||||
int pin = jsonReadtoInt(optionJson, "pwm_pin" + pwm_number);
|
int pin = jsonReadtoInt(optionJson, "pwm_pin" + pwm_number);
|
||||||
analogWrite(pin, pwm_state_int);
|
analogWrite(pin, pwm_state_int);
|
||||||
|
|
||||||
eventGen ("pwmSet", pwm_number);
|
eventGen ("pwm", pwm_number);
|
||||||
|
|
||||||
jsonWriteStr(configJson, "pwmSet" + pwm_number, pwm_state);
|
jsonWriteStr(configJson, "pwm" + pwm_number, pwm_state);
|
||||||
sendSTATUS("pwmSet" + pwm_number, pwm_state);
|
sendSTATUS("pwm" + pwm_number, pwm_state);
|
||||||
}
|
}
|
||||||
//==================================================================================================================
|
//==================================================================================================================
|
||||||
//==========================================Модуль физической кнопки================================================
|
//==========================================Модуль физической кнопки================================================
|
||||||
@@ -214,15 +220,15 @@ void handleButton() {
|
|||||||
buttons[switch_number].update();
|
buttons[switch_number].update();
|
||||||
if (buttons[switch_number].fell()) {
|
if (buttons[switch_number].fell()) {
|
||||||
|
|
||||||
eventGen ("switchSet", String(switch_number));
|
eventGen ("switch", String(switch_number));
|
||||||
|
|
||||||
jsonWriteStr(configJson, "switchSet" + String(switch_number), "1");
|
jsonWriteStr(configJson, "switch" + String(switch_number), "1");
|
||||||
}
|
}
|
||||||
if (buttons[switch_number].rose()) {
|
if (buttons[switch_number].rose()) {
|
||||||
|
|
||||||
eventGen ("switchSet", String(switch_number));
|
eventGen ("switch", String(switch_number));
|
||||||
|
|
||||||
jsonWriteStr(configJson, "switchSet" + String(switch_number), "0");
|
jsonWriteStr(configJson, "switch" + String(switch_number), "0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch_number++;
|
switch_number++;
|
||||||
@@ -240,14 +246,14 @@ void inputDigit() {
|
|||||||
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();
|
||||||
jsonWriteStr(configJson, "digitSet" + number, start_state);
|
jsonWriteStr(configJson, "digit" + number, start_state);
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digitSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digit" + number);
|
||||||
}
|
}
|
||||||
void digitSet() {
|
void digitSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWriteStr(configJson, "digitSet" + number, value);
|
jsonWriteStr(configJson, "digit" + number, value);
|
||||||
sendSTATUS("digitSet" + number, value);
|
sendSTATUS("digit" + number, value);
|
||||||
}
|
}
|
||||||
//=====================================================================================================================================
|
//=====================================================================================================================================
|
||||||
//=========================================Добавление окна ввода времени===============================================================
|
//=========================================Добавление окна ввода времени===============================================================
|
||||||
@@ -260,14 +266,14 @@ void inputTime() {
|
|||||||
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();
|
||||||
jsonWriteStr(configJson, "timeSet" + number, start_state);
|
jsonWriteStr(configJson, "time" + number, start_state);
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "timeSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "time" + number);
|
||||||
}
|
}
|
||||||
void timeSet() {
|
void timeSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWriteStr(configJson, "timeSet" + number, value);
|
jsonWriteStr(configJson, "time" + number, value);
|
||||||
sendSTATUS("timeSet" + number, value);
|
sendSTATUS("time" + number, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_time_init() {
|
void handle_time_init() {
|
||||||
@@ -276,8 +282,8 @@ void handle_time_init() {
|
|||||||
String tmp = GetTime();
|
String tmp = GetTime();
|
||||||
jsonWriteStr(configJson, "time", tmp);
|
jsonWriteStr(configJson, "time", tmp);
|
||||||
tmp.replace(":", "-");
|
tmp.replace(":", "-");
|
||||||
jsonWriteStr(configJson, "timenowSet", tmp);
|
jsonWriteStr(configJson, "timenow", tmp);
|
||||||
eventGen ("timenowSet", "");
|
eventGen ("timenow", "");
|
||||||
|
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
@@ -291,7 +297,7 @@ void text() {
|
|||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", "textSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", "text" + number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -309,8 +315,8 @@ void textSet() {
|
|||||||
text = text + " " + GetDataDigital() + " " + time;
|
text = text + " " + GetDataDigital() + " " + time;
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonWriteStr(configJson, "textSet" + number, text);
|
jsonWriteStr(configJson, "text" + number, text);
|
||||||
sendSTATUS("textSet" + number, text);
|
sendSTATUS("text" + number, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=====================================================================================================================================
|
//=====================================================================================================================================
|
||||||
@@ -418,9 +424,9 @@ void servo_() {
|
|||||||
jsonWriteStr(optionJson, "s_min_deg" + servo_number, min_deg);
|
jsonWriteStr(optionJson, "s_min_deg" + servo_number, min_deg);
|
||||||
jsonWriteStr(optionJson, "s_max_deg" + servo_number, max_deg);
|
jsonWriteStr(optionJson, "s_max_deg" + servo_number, max_deg);
|
||||||
|
|
||||||
jsonWriteStr(configJson, "servoSet" + servo_number, start_state);
|
jsonWriteStr(configJson, "servo" + servo_number, start_state);
|
||||||
|
|
||||||
createWidgetParam (widget_name, page_name, page_number, "widgets/widget.range.json", "servoSet" + servo_number, "min", min_value, "max", max_value, "k", "1");
|
createWidgetParam (widget_name, page_name, page_number, "widgets/widget.range.json", "servo" + servo_number, "min", min_value, "max", max_value, "k", "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
void servoSet() {
|
void servoSet() {
|
||||||
@@ -456,10 +462,10 @@ void servoSet() {
|
|||||||
|
|
||||||
//Serial.println(servo_state_int);
|
//Serial.println(servo_state_int);
|
||||||
|
|
||||||
eventGen ("servoSet", servo_number);
|
eventGen ("servo", servo_number);
|
||||||
|
|
||||||
jsonWriteStr(configJson, "servoSet" + servo_number, servo_state);
|
jsonWriteStr(configJson, "servo" + servo_number, servo_state);
|
||||||
sendSTATUS("servoSet" + servo_number, servo_state);
|
sendSTATUS("servo" + servo_number, servo_state);
|
||||||
}
|
}
|
||||||
//====================================================================================================================================================
|
//====================================================================================================================================================
|
||||||
/*
|
/*
|
||||||
@@ -471,14 +477,14 @@ void servoSet() {
|
|||||||
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();
|
||||||
jsonWriteStr(configJson, "inputTextSet" + number, start_state);
|
jsonWriteStr(configJson, "inputText" + number, start_state);
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.inputText.json", "inputTextSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputText.json", "inputText" + number);
|
||||||
}
|
}
|
||||||
void inputTextSet() {
|
void inputTextSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWriteStr(configJson, "inputTextSet" + number, value);
|
jsonWriteStr(configJson, "inputText" + number, value);
|
||||||
sendSTATUS("inputTextSet" + number, value);
|
sendSTATUS("inputText" + number, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inputTime() {
|
void inputTime() {
|
||||||
@@ -489,16 +495,16 @@ void servoSet() {
|
|||||||
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();
|
||||||
jsonWriteStr(configJson, "inputTimeSet" + number, start_state);
|
jsonWriteStr(configJson, "inputTime" + number, start_state);
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "inputTimeSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "inputTime" + 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(":", ".");
|
||||||
jsonWriteStr(configJson, "inputTimeSet" + number, value);
|
jsonWriteStr(configJson, "inputTime" + number, value);
|
||||||
value.replace(".", ":");
|
value.replace(".", ":");
|
||||||
sendSTATUS("inputTimeSet" + number, value);
|
sendSTATUS("inputTime" + number, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -510,14 +516,14 @@ void servoSet() {
|
|||||||
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();
|
||||||
jsonWriteStr(configJson, "inputDateSet" + number, start_state);
|
jsonWriteStr(configJson, "inputDate" + number, start_state);
|
||||||
createWidget (widget_name, page_name, page_number, "widgets/widget.inputDate.json", "inputDateSet" + number);
|
createWidget (widget_name, page_name, page_number, "widgets/widget.inputDate.json", "inputDate" + number);
|
||||||
}
|
}
|
||||||
void inputDateSet() {
|
void inputDateSet() {
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String value = sCmd.next();
|
String value = sCmd.next();
|
||||||
jsonWriteStr(configJson, "inputDateSet" + number, value);
|
jsonWriteStr(configJson, "inputDate" + number, value);
|
||||||
sendSTATUS("inputDateSet" + number, value);
|
sendSTATUS("inputDate" + number, value);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
//=================================================Глобальные команды удаленного управления===========================================================
|
//=================================================Глобальные команды удаленного управления===========================================================
|
||||||
@@ -531,7 +537,7 @@ void mqttOrderSend() {
|
|||||||
//Serial.print(all_line);
|
//Serial.print(all_line);
|
||||||
//Serial.print("->");
|
//Serial.print("->");
|
||||||
//Serial.println(order);
|
//Serial.println(order);
|
||||||
int send_status = client.publish (all_line.c_str(), order.c_str(), false);
|
int send_status = client_mqtt.publish (all_line.c_str(), order.c_str(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void httpOrderSend() {
|
void httpOrderSend() {
|
||||||
@@ -587,6 +593,7 @@ void stringExecution(String str) {
|
|||||||
|
|
||||||
String tmp = selectToMarker (str, "\n");
|
String tmp = selectToMarker (str, "\n");
|
||||||
sCmd.readStr(tmp);
|
sCmd.readStr(tmp);
|
||||||
|
|
||||||
str = deleteBeforeDelimiter(str, "\n");
|
str = deleteBeforeDelimiter(str, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
57
Init.ino
57
Init.ino
@@ -5,26 +5,34 @@ void All_init() {
|
|||||||
if (request->hasArg("arg")) {
|
if (request->hasArg("arg")) {
|
||||||
value = request->getParam("arg")->value();
|
value = request->getParam("arg")->value();
|
||||||
}
|
}
|
||||||
if (value == "0") {
|
if (value == "0") { //выкл сценариев
|
||||||
jsonWriteStr(configSetup, "scenario", value);
|
jsonWriteStr(configSetup, "scenario", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
if (value == "1") {
|
if (value == "1") { //вкл сценариев
|
||||||
jsonWriteStr(configSetup, "scenario", value);
|
jsonWriteStr(configSetup, "scenario", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
if (value == "2") {
|
if (value == "2") { //инициализация
|
||||||
Device_init();
|
Device_init();
|
||||||
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
if (value == "3") {
|
if (value == "3") {
|
||||||
clean_log_date();
|
clean_log_date();
|
||||||
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
if (value == "4") {
|
if (value == "4") {
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
|
request->send(200, "text/text", "OK");
|
||||||
|
}
|
||||||
|
if (value == "5") {
|
||||||
|
i2c_scanning = true;
|
||||||
|
request->redirect("/?utilities");
|
||||||
}
|
}
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
|
||||||
});
|
});
|
||||||
|
|
||||||
prsets_init();
|
prsets_init();
|
||||||
@@ -35,16 +43,33 @@ void All_init() {
|
|||||||
|
|
||||||
void Device_init() {
|
void Device_init() {
|
||||||
|
|
||||||
ts.remove(ANALOG_);
|
logging_value_names_list = "";
|
||||||
ts.remove(LEVEL);
|
enter_to_logging_counter = LOG1 - 1;
|
||||||
ts.remove(DALLAS);
|
|
||||||
ts.remove(DHTT);
|
analog_value_names_list = "";
|
||||||
ts.remove(DHTH);
|
enter_to_analog_counter = 0; //ANALOG1 - 1;
|
||||||
ts.remove(DHTC);
|
|
||||||
ts.remove(DHTP);
|
level_value_name = "";
|
||||||
ts.remove(DHTD);
|
|
||||||
ts.remove(STEPPER1);
|
dhtT_value_name = "";
|
||||||
ts.remove(STEPPER2);
|
dhtH_value_name = "";
|
||||||
|
|
||||||
|
bmp280T_value_name = "";
|
||||||
|
bmp280P_value_name = "";
|
||||||
|
|
||||||
|
bme280T_value_name = "";
|
||||||
|
|
||||||
|
for (int i = 0; i <= sensors_count; i++) {
|
||||||
|
sensors_reading_map[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = LOG1; i <= LOG5; i++) {
|
||||||
|
ts.remove(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// for (int i = LEVEL; i <= STEPPER2; i++) {
|
||||||
|
// ts.remove(i);
|
||||||
|
// }
|
||||||
|
|
||||||
#ifdef layout_in_ram
|
#ifdef layout_in_ram
|
||||||
all_widgets = "";
|
all_widgets = "";
|
||||||
@@ -137,7 +162,7 @@ void prsets_init() {
|
|||||||
writeFile("firmware.c.txt", readFile("configs/stepper.c.txt", 2048));
|
writeFile("firmware.c.txt", readFile("configs/stepper.c.txt", 2048));
|
||||||
writeFile("firmware.s.txt", readFile("configs/stepper.s.txt", 2048));
|
writeFile("firmware.s.txt", readFile("configs/stepper.s.txt", 2048));
|
||||||
}
|
}
|
||||||
if (value == "18") {
|
if (value == "18") {
|
||||||
writeFile("firmware.c.txt", readFile("configs/servo.c.txt", 2048));
|
writeFile("firmware.c.txt", readFile("configs/servo.c.txt", 2048));
|
||||||
writeFile("firmware.s.txt", readFile("configs/servo.s.txt", 2048));
|
writeFile("firmware.s.txt", readFile("configs/servo.s.txt", 2048));
|
||||||
}
|
}
|
||||||
@@ -203,7 +228,7 @@ void statistics() {
|
|||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
urls += ESP.getResetReason();
|
urls += ESP.getResetReason();
|
||||||
Serial.println(ESP.getResetReason());
|
//Serial.println(ESP.getResetReason());
|
||||||
#endif
|
#endif
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
urls += "Power on";
|
urls += "Power on";
|
||||||
|
|||||||
196
Logging.ino
196
Logging.ino
@@ -1,72 +1,51 @@
|
|||||||
//===============================================Логирование============================================================
|
//===============================================Логирование============================================================
|
||||||
|
//logging temp1 1 10 fast Температура Датчики 2
|
||||||
void logging() {
|
void logging() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
static boolean flag = true;
|
|
||||||
|
|
||||||
String sensor_name = sCmd.next();
|
|
||||||
String period_min = sCmd.next();
|
String period_min = sCmd.next();
|
||||||
String maxCount = sCmd.next();
|
String maxCount = sCmd.next();
|
||||||
|
|
||||||
String optimization = sCmd.next();
|
|
||||||
|
|
||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
widget_name.replace("#", " ");
|
widget_name.replace("#", " ");
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
logging_value_names_list += value_name + ",";
|
||||||
if (optimization == "fast") chart_data_in_solid_array = true;
|
enter_to_logging_counter++; //считаем количество входов в эту функцию
|
||||||
if (optimization == "slow") chart_data_in_solid_array = false;
|
jsonWriteStr(optionJson, value_name + "_c", maxCount); //создаем в файловой системе переменную количества точек на графике с отметкой _c что значит count
|
||||||
|
createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", value_name + "_ch", maxCount); //создаем график в приложении с топиком _ch /prefix/3234045-1589487/value_name_ch
|
||||||
if (sensor_name == "analog") jsonWriteStr(optionJson, "analog_logging_count", maxCount);
|
if (enter_to_logging_counter == LOG1) {
|
||||||
if (sensor_name == "level") jsonWriteStr(optionJson, "level_logging_count", maxCount);
|
ts.add(LOG1, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
if (sensor_name == "dallas") jsonWriteStr(optionJson, "dallas_logging_count", maxCount);
|
String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0);
|
||||||
if (sensor_name == "dhtT") jsonWriteStr(optionJson, "dhtT_logging_count", maxCount);
|
deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadtoInt(optionJson, tmp_buf_1 + "_c"), jsonRead(configJson, tmp_buf_1));
|
||||||
if (sensor_name == "dhtH") jsonWriteStr(optionJson, "dhtH_logging_count", maxCount);
|
Serial.println("[i] LOGGING for sensor '" + tmp_buf_1 + "' done");
|
||||||
|
}, nullptr, false);
|
||||||
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 (enter_to_logging_counter == LOG2) {
|
||||||
if (sensor_name == "level") {
|
ts.add(LOG2, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
flagLoggingLevel = true;
|
String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1);
|
||||||
ts.remove(LEVEL_LOG);
|
deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadtoInt(optionJson, tmp_buf_2 + "_c"), jsonRead(configJson, tmp_buf_2));
|
||||||
ts.add(LEVEL_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
Serial.println("[i] LOGGING for sensor '" + tmp_buf_2 + "' done");
|
||||||
deleteOldDate("log.level.txt", jsonReadtoInt(optionJson, "level_logging_count"), jsonRead(configJson, "level"));
|
}, nullptr, false);
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
if (enter_to_logging_counter == LOG3) {
|
||||||
if (sensor_name == "dallas") {
|
ts.add(LOG3, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
flagLoggingDallas = true;
|
String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2);
|
||||||
ts.remove(DALLAS_LOG);
|
deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadtoInt(optionJson, tmp_buf_3 + "_c"), jsonRead(configJson, tmp_buf_3));
|
||||||
ts.add(DALLAS_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
Serial.println("[i] LOGGING for sensor '" + tmp_buf_3 + "' done");
|
||||||
deleteOldDate("log.dallas.txt", jsonReadtoInt(optionJson, "dallas_logging_count"), jsonRead(configJson, "dallas"));
|
}, nullptr, false);
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
if (enter_to_logging_counter == LOG4) {
|
||||||
if (sensor_name == "dhtT") {
|
ts.add(LOG4, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
flagLoggingdhtT = true;
|
String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3);
|
||||||
ts.remove(dhtT_LOG);
|
deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadtoInt(optionJson, tmp_buf_4 + "_c"), jsonRead(configJson, tmp_buf_4));
|
||||||
ts.add(dhtT_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
Serial.println("[i] LOGGING for sensor '" + tmp_buf_4 + "' done");
|
||||||
deleteOldDate("log.dhtT.txt", jsonReadtoInt(optionJson, "dhtT_logging_count"), jsonRead(configJson, "dhtT"));
|
}, nullptr, false);
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
if (enter_to_logging_counter == LOG5) {
|
||||||
if (sensor_name == "dhtH") {
|
ts.add(LOG5, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
flagLoggingdhtH = true;
|
String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4);
|
||||||
ts.remove(dhtH_LOG);
|
deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadtoInt(optionJson, tmp_buf_5 + "_c"), jsonRead(configJson, tmp_buf_5));
|
||||||
ts.add(dhtH_LOG, period_min.toInt() * 1000 * 60, [&](void*) {
|
Serial.println("[i] LOGGING for sensor '" + tmp_buf_5 + "' done");
|
||||||
deleteOldDate("log.dhtH.txt", jsonReadtoInt(optionJson, "dhtH_logging_count"), jsonRead(configJson, "dhtH"));
|
}, nullptr, false);
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,52 +79,51 @@ void deleteOldDate(String file, int seted_number_of_lines, String date_to_add) {
|
|||||||
|
|
||||||
//=========================================Выбор какие данные отправлять==================================================================
|
//=========================================Выбор какие данные отправлять==================================================================
|
||||||
void choose_log_date_and_send() {
|
void choose_log_date_and_send() {
|
||||||
|
String all_line = logging_value_names_list;
|
||||||
if (flagLoggingAnalog) sendLogData("log.analog.txt", "loganalog", chart_data_in_solid_array);
|
while (all_line.length() != 0) {
|
||||||
if (flagLoggingLevel) sendLogData("log.level.txt", "loglevel", chart_data_in_solid_array);
|
String tmp = selectToMarker (all_line, ",");
|
||||||
if (flagLoggingDallas) sendLogData("log.dallas.txt", "logdallas", chart_data_in_solid_array);
|
sendLogData("log." + tmp + ".txt", tmp + "_ch");
|
||||||
if (flagLoggingdhtT) sendLogData("log.dhtT.txt", "logdhtT", chart_data_in_solid_array);
|
all_line = deleteBeforeDelimiter(all_line, ",");
|
||||||
if (flagLoggingdhtH) sendLogData("log.dhtH.txt", "logdhtH", chart_data_in_solid_array);
|
}
|
||||||
|
all_line = "";
|
||||||
|
}
|
||||||
|
//=========================================Отправка данных===================================================================================
|
||||||
|
void sendLogData(String file, String topic) {
|
||||||
|
String log_date = readFile(file, 5000);
|
||||||
|
if (log_date != "Failed") {
|
||||||
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=========================================Отправка данных===================================================================================
|
/*
|
||||||
void sendLogData(String file, String topic, boolean type) {
|
//----------------------------------------------
|
||||||
if (type) {
|
|
||||||
//----------------------------------------------
|
|
||||||
String log_date = readFile(file, 5000);
|
|
||||||
if (log_date != "Failed") {
|
|
||||||
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");
|
File configFile = SPIFFS.open("/" + file, "r");
|
||||||
if (!configFile) {
|
if (!configFile) {
|
||||||
return;
|
return;
|
||||||
@@ -160,14 +138,14 @@ void sendLogData(String file, String topic, boolean type) {
|
|||||||
sendCHART(topic, final_line);
|
sendCHART(topic, final_line);
|
||||||
}
|
}
|
||||||
getMemoryLoad("[i] after send log date");
|
getMemoryLoad("[i] after send log date");
|
||||||
}
|
*/
|
||||||
//----------------------------------------------
|
|
||||||
}
|
|
||||||
//=========================================Очистка данных===================================================================================
|
//=========================================Очистка данных===================================================================================
|
||||||
void clean_log_date() {
|
void clean_log_date() {
|
||||||
SPIFFS.remove("/log.analog.txt");
|
String all_line = logging_value_names_list;
|
||||||
SPIFFS.remove("/log.level.txt");
|
while (all_line.length() != 0) {
|
||||||
SPIFFS.remove("/log.dallas.txt");
|
String tmp = selectToMarker (all_line, ",");
|
||||||
SPIFFS.remove("/log.dhtT.txt");
|
SPIFFS.remove("/log." + tmp + ".txt");
|
||||||
SPIFFS.remove("/log.dhtH.txt");
|
all_line = deleteBeforeDelimiter(all_line, ",");
|
||||||
|
}
|
||||||
|
all_line = "";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,6 @@ void handleScenario() {
|
|||||||
//Serial.println(i);
|
//Serial.println(i);
|
||||||
String condition = selectToMarker (tmp, "\n"); //выделяем первую строку самого сценария button1 = 1 (условие)
|
String condition = selectToMarker (tmp, "\n"); //выделяем первую строку самого сценария button1 = 1 (условие)
|
||||||
String param_name = selectFromMarkerToMarker(condition, " " , 0);
|
String param_name = selectFromMarkerToMarker(condition, " " , 0);
|
||||||
param_name = add_set(param_name); //из первой страки берем имя параметра button1 и вставляем в него Set и получаем buttonSet1
|
|
||||||
if (param_name.indexOf("timenow") != -1){
|
|
||||||
param_name = param_name + "Set";
|
|
||||||
}
|
|
||||||
String order = jsonRead(optionJson, "scenario_status"); //читаем весь файл событий
|
String order = jsonRead(optionJson, "scenario_status"); //читаем весь файл событий
|
||||||
String param = selectToMarker (order, ","); //читаем первое событие из файла событий
|
String param = selectToMarker (order, ","); //читаем первое событие из файла событий
|
||||||
if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
|
if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
|
||||||
@@ -28,11 +24,11 @@ void handleScenario() {
|
|||||||
String sign = selectFromMarkerToMarker(condition, " " , 1); //читаем знак (=)
|
String sign = selectFromMarkerToMarker(condition, " " , 1); //читаем знак (=)
|
||||||
String value = selectFromMarkerToMarker(condition, " " , 2); //читаем значение (1)
|
String value = selectFromMarkerToMarker(condition, " " , 2); //читаем значение (1)
|
||||||
if (value.indexOf("digit") != -1) {
|
if (value.indexOf("digit") != -1) {
|
||||||
value = add_set(value);
|
// value = add_set(value);
|
||||||
value = jsonRead(configJson, value);
|
value = jsonRead(configJson, value);
|
||||||
}
|
}
|
||||||
if (value.indexOf("time") != -1) {
|
if (value.indexOf("time") != -1) {
|
||||||
value = add_set(value);
|
// value = add_set(value);
|
||||||
value = jsonRead(configJson, value);
|
value = jsonRead(configJson, value);
|
||||||
}
|
}
|
||||||
boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
|
boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
|
||||||
|
|||||||
618
Sensors.ino
618
Sensors.ino
@@ -1,6 +1,90 @@
|
|||||||
//===============================================================================================================================
|
void sensors_init() {
|
||||||
//=========================================Модуль аналогового сенсора============================================================
|
ts.add(SENSORS, 1000, [&](void*) {
|
||||||
|
static int counter;
|
||||||
|
counter++;
|
||||||
|
|
||||||
|
if (sensors_reading_map[0] == 1) level_reading();
|
||||||
|
|
||||||
|
if (counter > 10) {
|
||||||
|
counter = 0;
|
||||||
|
|
||||||
|
if (sensors_reading_map[1] == 1) analog_reading1();
|
||||||
|
if (sensors_reading_map[2] == 1) analog_reading2();
|
||||||
|
|
||||||
|
if (sensors_reading_map[3] == 1) dallas_reading();
|
||||||
|
|
||||||
|
if (sensors_reading_map[4] == 1) dhtT_reading();
|
||||||
|
if (sensors_reading_map[5] == 1) dhtH_reading();
|
||||||
|
if (sensors_reading_map[6] == 1) dhtP_reading();
|
||||||
|
if (sensors_reading_map[7] == 1) dhtC_reading();
|
||||||
|
if (sensors_reading_map[8] == 1) dhtD_reading();
|
||||||
|
|
||||||
|
if (sensors_reading_map[9] == 1) bmp280T_rading();
|
||||||
|
if (sensors_reading_map[10] == 1) bmp280P_reading();
|
||||||
|
|
||||||
|
if (sensors_reading_map[11] == 1) bme280T_reading();
|
||||||
|
}
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================================================
|
||||||
|
//=========================================Модуль измерения уровня в баке==================================================================
|
||||||
|
|
||||||
|
//level L 14 12 Вода#в#баке,#% Датчики fill-gauge 125 20 1
|
||||||
|
void level() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
|
String trig = sCmd.next();
|
||||||
|
String echo = sCmd.next();
|
||||||
|
String widget_name = sCmd.next();
|
||||||
|
String page_name = sCmd.next();
|
||||||
|
String type = sCmd.next();
|
||||||
|
String empty_level = sCmd.next();
|
||||||
|
String full_level = sCmd.next();
|
||||||
|
String page_number = sCmd.next();
|
||||||
|
level_value_name = value_name;
|
||||||
|
jsonWriteStr(optionJson, "e_lev", empty_level);
|
||||||
|
jsonWriteStr(optionJson, "f_lev", full_level);
|
||||||
|
jsonWriteStr(optionJson, "trig", trig);
|
||||||
|
jsonWriteStr(optionJson, "echo", echo);
|
||||||
|
pinMode(trig.toInt(), OUTPUT);
|
||||||
|
pinMode(echo.toInt(), INPUT);
|
||||||
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
|
sensors_reading_map[0] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void level_reading() {
|
||||||
|
long duration_;
|
||||||
|
int distance_cm;
|
||||||
|
int level;
|
||||||
|
static int counter;
|
||||||
|
int trig = jsonReadtoInt(optionJson, "trig");
|
||||||
|
int echo = jsonReadtoInt(optionJson, "echo");
|
||||||
|
digitalWrite(trig, LOW);
|
||||||
|
delayMicroseconds(2);
|
||||||
|
digitalWrite(trig, HIGH);
|
||||||
|
delayMicroseconds(10);
|
||||||
|
digitalWrite(trig, LOW);
|
||||||
|
duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
|
||||||
|
distance_cm = duration_ / 29 / 2;
|
||||||
|
distance_cm = medianFilter.filtered(distance_cm);//отсечение промахов медианным фильтром
|
||||||
|
counter++;
|
||||||
|
if (counter > tank_level_times_to_send) {
|
||||||
|
counter = 0;
|
||||||
|
level = map(distance_cm,
|
||||||
|
jsonReadtoInt(optionJson, "e_lev"),
|
||||||
|
jsonReadtoInt(optionJson, "f_lev"), 0, 100);
|
||||||
|
jsonWriteInt(configJson, level_value_name, level);
|
||||||
|
eventGen (level_value_name, "");
|
||||||
|
sendSTATUS(level_value_name, String(level));
|
||||||
|
Serial.println("[i] sensor '" + level_value_name + "' data: " + String(level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================================================
|
||||||
|
//=========================================Модуль аналогового сенсора======================================================================
|
||||||
|
//analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1
|
||||||
void analog() {
|
void analog() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
@@ -10,90 +94,65 @@ 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();
|
||||||
jsonWriteStr(optionJson, "analog_start", analog_start);
|
analog_value_names_list += value_name + ",";
|
||||||
jsonWriteStr(optionJson, "analog_end", analog_end);
|
enter_to_analog_counter++;
|
||||||
jsonWriteStr(optionJson, "analog_start_out", analog_start_out);
|
jsonWriteStr(optionJson, value_name + "_st", analog_start);
|
||||||
jsonWriteStr(optionJson, "analog_end_out", analog_end_out);
|
jsonWriteStr(optionJson, value_name + "_end", analog_end);
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, "analog");
|
jsonWriteStr(optionJson, value_name + "_st_out", analog_start_out);
|
||||||
ts.add(ANALOG_, analog_update_int, [&](void*) {
|
jsonWriteStr(optionJson, value_name + "_end_out", analog_end_out);
|
||||||
static int analog_old;
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
|
if (enter_to_analog_counter == 1) {
|
||||||
|
sensors_reading_map[1] = 1;
|
||||||
|
}
|
||||||
|
if (enter_to_analog_counter == 2) {
|
||||||
|
sensors_reading_map[2] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void analog_reading1() {
|
||||||
|
String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 0);
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
//int pin_int = pin.toInt();
|
int analog_in = analogRead(34);
|
||||||
int analog_in = analogRead(34);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
int analog_in = analogRead(A0);
|
int analog_in = analogRead(A0);
|
||||||
#endif
|
#endif
|
||||||
jsonWriteInt(configJson, "analog_in", analog_in);
|
int analog = map(analog_in,
|
||||||
int analog = map(analog_in,
|
jsonReadtoInt(optionJson, value_name + "_st") ,
|
||||||
jsonReadtoInt(optionJson, "analog_start") ,
|
jsonReadtoInt(optionJson, value_name + "_end"),
|
||||||
jsonReadtoInt(optionJson, "analog_end"),
|
jsonReadtoInt(optionJson, value_name + "_st_out"),
|
||||||
jsonReadtoInt(optionJson, "analog_start_out"),
|
jsonReadtoInt(optionJson, value_name + "_end_out"));
|
||||||
jsonReadtoInt(optionJson, "analog_end_out"));
|
jsonWriteInt(configJson, value_name, analog);
|
||||||
jsonWriteInt(configJson, "analog", analog);
|
eventGen (value_name, "");
|
||||||
// if (analog_old != analog) {
|
sendSTATUS(value_name, String(analog));
|
||||||
eventGen ("analog", "");
|
Serial.println("[i] sensor '" + value_name + "' data: " + String(analog));
|
||||||
sendSTATUS("analog", String(analog));
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor 'analog' send date " + String(analog));
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
analog_old = analog;
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===================================================================================================================================
|
void analog_reading2() {
|
||||||
//=========================================Модуль измерения уровня в баке============================================================
|
String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 1);
|
||||||
void level() {
|
#ifdef ESP32
|
||||||
String widget_name = sCmd.next();
|
int analog_in = analogRead(35);
|
||||||
String page_name = sCmd.next();
|
#endif
|
||||||
String type = sCmd.next();
|
#ifdef ESP8266
|
||||||
String empty_level = sCmd.next();
|
int analog_in = analogRead(A0);
|
||||||
String full_level = sCmd.next();
|
#endif
|
||||||
String page_number = sCmd.next();
|
int analog = map(analog_in,
|
||||||
jsonWriteStr(optionJson, "empty_level", empty_level);
|
jsonReadtoInt(optionJson, value_name + "_st") ,
|
||||||
jsonWriteStr(optionJson, "full_level", full_level);
|
jsonReadtoInt(optionJson, value_name + "_end"),
|
||||||
pinMode(14, OUTPUT);
|
jsonReadtoInt(optionJson, value_name + "_st_out"),
|
||||||
pinMode(12, INPUT);
|
jsonReadtoInt(optionJson, value_name + "_end_out"));
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, "level");
|
jsonWriteInt(configJson, value_name, analog);
|
||||||
ts.add(LEVEL, tank_level_shooting_interval, [&](void*) {
|
eventGen (value_name, "");
|
||||||
long duration_;
|
sendSTATUS(value_name, String(analog));
|
||||||
int distance_cm;
|
Serial.println("[i] sensor '" + value_name + "' data: " + String(analog));
|
||||||
int level;
|
|
||||||
static int level_old; //переменная static сохраняет свое значение между вызовами функции
|
|
||||||
static int counter;
|
|
||||||
digitalWrite(14, LOW);
|
|
||||||
delayMicroseconds(2);
|
|
||||||
digitalWrite(14, HIGH);
|
|
||||||
delayMicroseconds(10);
|
|
||||||
digitalWrite(14, LOW);
|
|
||||||
duration_ = pulseIn(12, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
|
|
||||||
distance_cm = duration_ / 29 / 2;
|
|
||||||
distance_cm = medianFilter.filtered(distance_cm);//отсечение промахов медианным фильтром
|
|
||||||
counter++;
|
|
||||||
if (counter > tank_level_times_to_send) {
|
|
||||||
counter = 0;
|
|
||||||
jsonWriteInt(configJson, "level_in", distance_cm);
|
|
||||||
level = map(distance_cm,
|
|
||||||
jsonReadtoInt(optionJson, "empty_level"),
|
|
||||||
jsonReadtoInt(optionJson, "full_level"), 0, 100);
|
|
||||||
jsonWriteInt(configJson, "level", level);
|
|
||||||
//if (level_old != level) {
|
|
||||||
eventGen ("level", "");
|
|
||||||
sendSTATUS("level", String(level));
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor tank 'level' send date " + String(level));
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
level_old = level;
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================================================================================
|
//=========================================================================================================================================
|
||||||
//=========================================Модуль температурного сенсора ds18b20============================================================
|
//=========================================Модуль температурного сенсора ds18b20===========================================================
|
||||||
void dallas() {
|
void dallas() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
|
String address = sCmd.next();
|
||||||
String widget_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();
|
||||||
@@ -103,125 +162,120 @@ void dallas() {
|
|||||||
sensors.begin();
|
sensors.begin();
|
||||||
sensors.setResolution(12);
|
sensors.setResolution(12);
|
||||||
choose_widget_and_create(widget_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*) {
|
sensors_reading_map[3] = 1;
|
||||||
float temp = 0;
|
|
||||||
static float temp_old;
|
|
||||||
sensors.requestTemperatures();
|
|
||||||
temp = sensors.getTempCByIndex(0);
|
|
||||||
jsonWriteStr(configJson, "dallas", String(temp));
|
|
||||||
//if (temp_old != temp) {
|
|
||||||
eventGen ("dallas", "");
|
|
||||||
sendSTATUS("dallas", String(temp));
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor 'dallas' send date " + String(temp));
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
temp_old = temp;
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dallas_reading() {
|
||||||
|
float temp = 0;
|
||||||
|
sensors.requestTemperatures();
|
||||||
|
temp = sensors.getTempCByIndex(0);
|
||||||
|
jsonWriteStr(configJson, "dallas", String(temp));
|
||||||
|
eventGen ("dallas", "");
|
||||||
|
sendSTATUS("dallas", String(temp));
|
||||||
|
Serial.println("[i] sensor 'dallas' send date " + String(temp));
|
||||||
|
}
|
||||||
|
|
||||||
//======================================================================================================================
|
//=========================================================================================================================================
|
||||||
//=========================================Модуль сенсоров DHT==========================================================
|
//=========================================Модуль сенсоров DHT=============================================================================
|
||||||
|
//dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
|
||||||
void dhtT() {
|
void dhtT() {
|
||||||
String sensor_type = sCmd.next();
|
String value_name = sCmd.next();
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
|
String sensor_type = sCmd.next();
|
||||||
String widget_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();
|
||||||
if (sensor_type == "DHT11") {
|
dhtT_value_name = value_name;
|
||||||
|
if (sensor_type == "dht11") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT11);
|
dht.setup(pin.toInt(), DHTesp::DHT11);
|
||||||
}
|
}
|
||||||
if (sensor_type == "DHT22") {
|
if (sensor_type == "dht22") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT22);
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
||||||
}
|
}
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, "dhtT");
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
ts.add(DHTT, dhtT_update_int, [&](void*) { //dht.getMinimumSamplingPeriod()
|
sensors_reading_map[4] = 1;
|
||||||
float value = 0;
|
|
||||||
static float value_old;
|
|
||||||
static int counter;
|
|
||||||
if (dht.getStatus() != 0 && counter < 5) {
|
|
||||||
sendSTATUS("dhtT", String(dht.getStatusString()));
|
|
||||||
counter++;
|
|
||||||
} else {
|
|
||||||
counter = 0;
|
|
||||||
value = dht.getTemperature();
|
|
||||||
//if (value_old != value) {
|
|
||||||
if (String(value) != "nan") {
|
|
||||||
eventGen ("dhtT", "");
|
|
||||||
jsonWriteStr(configJson, "dhtT", String(value));
|
|
||||||
sendSTATUS("dhtT", String(value));
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor 'dhtT' send date " + String(value));
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
value_old = value;
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dhtT_reading() {
|
||||||
|
float value = 0;
|
||||||
|
static int counter;
|
||||||
|
if (dht.getStatus() != 0 && counter < 5) {
|
||||||
|
sendSTATUS(dhtT_value_name, String(dht.getStatusString()));
|
||||||
|
counter++;
|
||||||
|
} else {
|
||||||
|
counter = 0;
|
||||||
|
value = dht.getTemperature();
|
||||||
|
if (String(value) != "nan") {
|
||||||
|
eventGen (dhtT_value_name, "");
|
||||||
|
jsonWriteStr(configJson, dhtT_value_name, String(value));
|
||||||
|
sendSTATUS(dhtT_value_name, String(value));
|
||||||
|
Serial.println("[i] sensor '" + dhtT_value_name + "' data: " + String(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 1
|
||||||
void dhtH() {
|
void dhtH() {
|
||||||
String sensor_type = sCmd.next();
|
String value_name = sCmd.next();
|
||||||
String pin = sCmd.next();
|
String pin = sCmd.next();
|
||||||
|
String sensor_type = sCmd.next();
|
||||||
String widget_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();
|
||||||
if (sensor_type == "DHT11") {
|
dhtH_value_name = value_name;
|
||||||
|
if (sensor_type == "dht11") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT11);
|
dht.setup(pin.toInt(), DHTesp::DHT11);
|
||||||
}
|
}
|
||||||
if (sensor_type == "DHT22") {
|
if (sensor_type == "dht22") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT22);
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
||||||
}
|
}
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, "dhtH");
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
ts.add(DHTH, dhtH_update_int , [&](void*) { //dht.getMinimumSamplingPeriod()
|
sensors_reading_map[5] = 1;
|
||||||
int value = 0;
|
|
||||||
static int value_old;
|
|
||||||
static int counter;
|
|
||||||
if (dht.getStatus() != 0 && counter < 5) {
|
|
||||||
sendSTATUS("dhtH", String(dht.getStatusString()));
|
|
||||||
counter++;
|
|
||||||
} else {
|
|
||||||
counter = 0;
|
|
||||||
value = dht.getHumidity();
|
|
||||||
if (String(value) != "nan" || value <= 100 || value >= 0) {
|
|
||||||
//if (value_old != value) {
|
|
||||||
eventGen ("dhtH", "");
|
|
||||||
jsonWriteStr(configJson, "dhtH", String(value));
|
|
||||||
sendSTATUS("dhtH", String(value));
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor 'dhtH' send date " + String(value));
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
value_old = value;
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dhtPerception() {
|
void dhtH_reading() {
|
||||||
|
float value = 0;
|
||||||
|
static int counter;
|
||||||
|
if (dht.getStatus() != 0 && counter < 5) {
|
||||||
|
sendSTATUS(dhtH_value_name, String(dht.getStatusString()));
|
||||||
|
counter++;
|
||||||
|
} else {
|
||||||
|
counter = 0;
|
||||||
|
value = dht.getHumidity();
|
||||||
|
if (String(value) != "nan") {
|
||||||
|
eventGen (dhtH_value_name, "");
|
||||||
|
jsonWriteStr(configJson, dhtH_value_name, String(value));
|
||||||
|
sendSTATUS(dhtH_value_name, String(value));
|
||||||
|
Serial.println("[i] sensor '" + dhtH_value_name + "' data: " + String(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//dhtPerception Восприятие: Датчики 4
|
||||||
|
void dhtP() {
|
||||||
String widget_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_widget_and_create(widget_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*) {
|
sensors_reading_map[6] = 1;
|
||||||
byte value;
|
}
|
||||||
if (dht.getStatus() != 0) {
|
|
||||||
sendSTATUS("dhtPerception", String(dht.getStatusString()));
|
void dhtP_reading() {
|
||||||
} else {
|
byte value;
|
||||||
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
if (dht.getStatus() != 0) {
|
||||||
String final_line = perception(value);
|
sendSTATUS("dhtPerception", String(dht.getStatusString()));
|
||||||
jsonWriteStr(configJson, "dhtPerception", final_line);
|
} else {
|
||||||
eventGen ("dhtPerception", "");
|
value = dht.computePerception(jsonRead(configJson, dhtT_value_name).toFloat(), jsonRead(configJson, dhtH_value_name).toFloat(), false);
|
||||||
sendSTATUS("dhtPerception", final_line);
|
String final_line = perception(value);
|
||||||
if (client.connected()) {
|
jsonWriteStr(configJson, "dhtPerception", final_line);
|
||||||
Serial.println("[i] sensor 'dhtPerception' send date " + final_line);
|
eventGen ("dhtPerception", "");
|
||||||
}
|
sendSTATUS("dhtPerception", final_line);
|
||||||
|
if (client_mqtt.connected()) {
|
||||||
|
Serial.println("[i] sensor 'dhtPerception' data: " + final_line);
|
||||||
}
|
}
|
||||||
}, nullptr, true);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String perception(byte value) {
|
String perception(byte value) {
|
||||||
@@ -235,89 +289,183 @@ String perception(byte value) {
|
|||||||
if (value == 7) return "Сильно неудобно, полный звиздец";
|
if (value == 7) return "Сильно неудобно, полный звиздец";
|
||||||
}
|
}
|
||||||
|
|
||||||
void dhtComfort() {
|
//dhtComfort Степень#комфорта: Датчики 3
|
||||||
|
void dhtC() {
|
||||||
String widget_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_widget_and_create(widget_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*) {
|
sensors_reading_map[7] = 1;
|
||||||
float value;
|
|
||||||
ComfortState cf;
|
|
||||||
if (dht.getStatus() != 0) {
|
|
||||||
sendSTATUS("dhtComfort", String(dht.getStatusString()));
|
|
||||||
} else {
|
|
||||||
value = dht.getComfortRatio(cf, jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
|
||||||
String comfortStatus;
|
|
||||||
switch (cf) {
|
|
||||||
case Comfort_OK:
|
|
||||||
comfortStatus = "Отлично";
|
|
||||||
break;
|
|
||||||
case Comfort_TooHot:
|
|
||||||
comfortStatus = "Очень жарко";
|
|
||||||
break;
|
|
||||||
case Comfort_TooCold:
|
|
||||||
comfortStatus = "Очень холодно";
|
|
||||||
break;
|
|
||||||
case Comfort_TooDry:
|
|
||||||
comfortStatus = "Очень сухо";
|
|
||||||
break;
|
|
||||||
case Comfort_TooHumid:
|
|
||||||
comfortStatus = "Очень влажно";
|
|
||||||
break;
|
|
||||||
case Comfort_HotAndHumid:
|
|
||||||
comfortStatus = "Жарко и влажно";
|
|
||||||
break;
|
|
||||||
case Comfort_HotAndDry:
|
|
||||||
comfortStatus = "Жарко и сухо";
|
|
||||||
break;
|
|
||||||
case Comfort_ColdAndHumid:
|
|
||||||
comfortStatus = "Холодно и влажно";
|
|
||||||
break;
|
|
||||||
case Comfort_ColdAndDry:
|
|
||||||
comfortStatus = "Холодно и сухо";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
comfortStatus = "Неизвестно";
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
String final_line = comfortStatus;
|
|
||||||
jsonWriteStr(configJson, "dhtComfort", final_line);
|
|
||||||
eventGen ("dhtComfort", "");
|
|
||||||
sendSTATUS("dhtComfort", final_line);
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor 'dhtComfort' send date " + final_line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dhtDewpoint() {
|
void dhtC_reading() {
|
||||||
|
float value;
|
||||||
|
ComfortState cf;
|
||||||
|
if (dht.getStatus() != 0) {
|
||||||
|
sendSTATUS("dhtComfort", String(dht.getStatusString()));
|
||||||
|
} else {
|
||||||
|
value = dht.getComfortRatio(cf, jsonRead(configJson, dhtT_value_name).toFloat(), jsonRead(configJson, dhtH_value_name).toFloat(), false);
|
||||||
|
String final_line = get_comfort_status(cf);
|
||||||
|
jsonWriteStr(configJson, "dhtComfort", final_line);
|
||||||
|
eventGen ("dhtComfort", "");
|
||||||
|
sendSTATUS("dhtComfort", final_line);
|
||||||
|
Serial.println("[i] sensor 'dhtComfort' send date " + final_line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String get_comfort_status(ComfortState cf) {
|
||||||
|
String comfortStatus;
|
||||||
|
switch (cf) {
|
||||||
|
case Comfort_OK:
|
||||||
|
comfortStatus = "Отлично";
|
||||||
|
break;
|
||||||
|
case Comfort_TooHot:
|
||||||
|
comfortStatus = "Очень жарко";
|
||||||
|
break;
|
||||||
|
case Comfort_TooCold:
|
||||||
|
comfortStatus = "Очень холодно";
|
||||||
|
break;
|
||||||
|
case Comfort_TooDry:
|
||||||
|
comfortStatus = "Очень сухо";
|
||||||
|
break;
|
||||||
|
case Comfort_TooHumid:
|
||||||
|
comfortStatus = "Очень влажно";
|
||||||
|
break;
|
||||||
|
case Comfort_HotAndHumid:
|
||||||
|
comfortStatus = "Жарко и влажно";
|
||||||
|
break;
|
||||||
|
case Comfort_HotAndDry:
|
||||||
|
comfortStatus = "Жарко и сухо";
|
||||||
|
break;
|
||||||
|
case Comfort_ColdAndHumid:
|
||||||
|
comfortStatus = "Холодно и влажно";
|
||||||
|
break;
|
||||||
|
case Comfort_ColdAndDry:
|
||||||
|
comfortStatus = "Холодно и сухо";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
comfortStatus = "Неизвестно";
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
return comfortStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//dhtDewpoint Точка#росы: Датчики 5
|
||||||
|
void dhtD() {
|
||||||
String widget_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_widget_and_create(widget_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*) {
|
sensors_reading_map[8] = 1;
|
||||||
float value;
|
|
||||||
if (dht.getStatus() != 0) {
|
|
||||||
sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
|
|
||||||
} else {
|
|
||||||
value = dht.computeDewPoint(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
|
||||||
jsonWriteInt(configJson, "dhtDewpoint", value);
|
|
||||||
eventGen ("dhtDewpoint", "");
|
|
||||||
sendSTATUS("dhtDewpoint", String(value));
|
|
||||||
if (client.connected()) {
|
|
||||||
Serial.println("[i] sensor 'dhtDewpoint' send date " + String(value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dhtD_reading() {
|
||||||
void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik) {
|
float value;
|
||||||
|
if (dht.getStatus() != 0) {
|
||||||
if (type == "any-data") createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", topik);
|
sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
|
||||||
if (type == "progress-line") createWidget (widget_name, page_name, page_number, "widgets/widget.progLine.json", topik);
|
} else {
|
||||||
if (type == "progress-round") createWidget (widget_name, page_name, page_number, "widgets/widget.progRound.json", topik);
|
value = dht.computeDewPoint(jsonRead(configJson, dhtT_value_name).toFloat(), jsonRead(configJson, dhtH_value_name).toFloat(), false);
|
||||||
if (type == "fill-gauge") createWidget (widget_name, page_name, page_number, "widgets/widget.fillGauge.json", topik);
|
jsonWriteInt(configJson, "dhtDewpoint", value);
|
||||||
|
eventGen ("dhtDewpoint", "");
|
||||||
|
sendSTATUS("dhtDewpoint", String(value));
|
||||||
|
Serial.println("[i] sensor 'dhtDewpoint' data: " + String(value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================================================
|
||||||
|
//=========================================Модуль сенсоров bmp280==========================================================================
|
||||||
|
//bmp280T temp1 0x76 Температура#bmp280 Датчики any-data 1
|
||||||
|
void bmp280T() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
|
String address = sCmd.next();
|
||||||
|
String widget_name = sCmd.next();
|
||||||
|
String page_name = sCmd.next();
|
||||||
|
String type = sCmd.next();
|
||||||
|
String page_number = sCmd.next();
|
||||||
|
bmp280T_value_name = value_name;
|
||||||
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
|
bmp.begin(hexStringToUint8(address));
|
||||||
|
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
||||||
|
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
||||||
|
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
|
||||||
|
Adafruit_BMP280::FILTER_X16, /* Filtering. */
|
||||||
|
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
|
||||||
|
//bmp_temp->printSensorDetails();
|
||||||
|
sensors_reading_map[9] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bmp280T_rading() {
|
||||||
|
float value = 0;
|
||||||
|
sensors_event_t temp_event, pressure_event;
|
||||||
|
bmp_temp->getEvent(&temp_event);
|
||||||
|
value = temp_event.temperature;
|
||||||
|
jsonWriteStr(configJson, bmp280T_value_name, String(value));
|
||||||
|
eventGen(bmp280T_value_name, "");
|
||||||
|
sendSTATUS(bmp280T_value_name, String(value));
|
||||||
|
Serial.println("[i] sensor '" + bmp280T_value_name + "' data: " + String(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
//bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2
|
||||||
|
void bmp280P() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
|
String address = sCmd.next();
|
||||||
|
String widget_name = sCmd.next();
|
||||||
|
String page_name = sCmd.next();
|
||||||
|
String type = sCmd.next();
|
||||||
|
String page_number = sCmd.next();
|
||||||
|
bmp280P_value_name = value_name;
|
||||||
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
|
bmp.begin(hexStringToUint8(address));
|
||||||
|
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
||||||
|
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
||||||
|
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
|
||||||
|
Adafruit_BMP280::FILTER_X16, /* Filtering. */
|
||||||
|
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
|
||||||
|
//bmp_temp->printSensorDetails();
|
||||||
|
sensors_reading_map[10] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bmp280P_reading() {
|
||||||
|
float value = 0;
|
||||||
|
sensors_event_t temp_event, pressure_event;
|
||||||
|
bmp_pressure->getEvent(&pressure_event);
|
||||||
|
value = pressure_event.pressure;
|
||||||
|
value = value / 1.333224;
|
||||||
|
jsonWriteStr(configJson, bmp280P_value_name, String(value));
|
||||||
|
eventGen(bmp280P_value_name, "");
|
||||||
|
sendSTATUS(bmp280P_value_name, String(value));
|
||||||
|
Serial.println("[i] sensor '" + bmp280P_value_name + "' data: " + String(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================================================
|
||||||
|
//=============================================Модуль сенсоров bme280======================================================================
|
||||||
|
//bme280T temp1 0x76 Температура#bmp280 Датчики any-data 1
|
||||||
|
void bme280T() {
|
||||||
|
String value_name = sCmd.next();
|
||||||
|
String address = sCmd.next();
|
||||||
|
String widget_name = sCmd.next();
|
||||||
|
String page_name = sCmd.next();
|
||||||
|
String type = sCmd.next();
|
||||||
|
String page_number = sCmd.next();
|
||||||
|
bme280T_value_name = value_name;
|
||||||
|
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
||||||
|
bme.begin(hexStringToUint8(address));
|
||||||
|
sensors_reading_map[11] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bme280T_reading() {
|
||||||
|
float value = 0;
|
||||||
|
value = bme.readTemperature();
|
||||||
|
jsonWriteStr(configJson, bme280T_value_name, String(value));
|
||||||
|
eventGen(bme280T_value_name, "");
|
||||||
|
sendSTATUS(bme280T_value_name, String(value));
|
||||||
|
Serial.println("[i] sensor '" + bme280T_value_name + "' data: " + String(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
//bme.readPressure() / 100.0F
|
||||||
|
|
||||||
|
//#define SEALEVELPRESSURE_HPA (1013.25)
|
||||||
|
//bme.readAltitude(SEALEVELPRESSURE_HPA)
|
||||||
|
|
||||||
|
//bme.readHumidity()
|
||||||
|
|||||||
23
Time.ino
23
Time.ino
@@ -1,24 +1,33 @@
|
|||||||
void Time_Init() {
|
void Time_Init() {
|
||||||
server.on("/timeZone", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/time", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("timezone")) {
|
if (request->hasArg("timezone")) {
|
||||||
jsonWriteStr(configSetup, "timezone", request->getParam("timezone")->value());
|
jsonWriteStr(configSetup, "timezone", request->getParam("timezone")->value());
|
||||||
}
|
}
|
||||||
|
if (request->hasArg("ntp")) {
|
||||||
|
jsonWriteStr(configSetup, "ntp", request->getParam("ntp")->value());
|
||||||
|
}
|
||||||
saveConfig();
|
saveConfig();
|
||||||
reconfigTime();
|
reconfigTime();
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
ts.add(TIME_SYNC, 30000, [&](void*) {
|
ts.add(TIME_SYNC, 30000, [&](void*) {
|
||||||
if (GetTimeUnix() == "failed") {
|
time_check();
|
||||||
Serial.println("[i] Time is not synchronized, start synchronization");
|
|
||||||
reconfigTime();
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void time_check() {
|
||||||
|
if (GetTimeUnix() == "failed") {
|
||||||
|
Serial.println("[i] Time is not synchronized, start synchronization");
|
||||||
|
reconfigTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void reconfigTime() {
|
void reconfigTime() {
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
configTime(0, 0, ntpServer);
|
String ntp = jsonRead(configSetup, "ntp");
|
||||||
|
configTime(0, 0, ntp.c_str());
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Serial.println("[i] Awaiting for time ");
|
Serial.println("[i] Awaiting for time ");
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
@@ -126,7 +135,7 @@ String GetDataDigital() {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
int timeToMin(String Time) {
|
int timeToMin(String Time) {
|
||||||
//"00:00:00" время в секунды
|
//"00:00:00" время в секунды
|
||||||
long min = selectToMarker(Time, ":").toInt() * 60; //общее количество секунд в полных часах
|
long min = selectToMarker(Time, ":").toInt() * 60; //общее количество секунд в полных часах
|
||||||
Time = deleteBeforeDelimiter (Time, ":"); // Теперь здесь минуты секунды
|
Time = deleteBeforeDelimiter (Time, ":"); // Теперь здесь минуты секунды
|
||||||
|
|||||||
119
Timers.ino
119
Timers.ino
@@ -1,80 +1,58 @@
|
|||||||
//================================================================================================================
|
//================================================================================================================
|
||||||
//=========================================Таймера=================================================================
|
//=========================================Таймеры=================================================================
|
||||||
void Timer_countdown_init() {
|
void Timer_countdown_init() {
|
||||||
|
|
||||||
ts.add(TIMER_COUNTDOWN, 1000, [&](void*) {
|
ts.add(TIMER_COUNTDOWN, 1000, [&](void*) {
|
||||||
|
|
||||||
String old_line = jsonRead(optionJson, "timers");
|
String old_line = jsonRead(optionJson, "timers");
|
||||||
|
|
||||||
|
|
||||||
if (old_line != "") {
|
if (old_line != "") {
|
||||||
|
|
||||||
//Serial.println(old_line);
|
//Serial.println(old_line);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
String timer = selectFromMarkerToMarker(old_line, "," , i);
|
String timer = selectFromMarkerToMarker(old_line, "," , i);
|
||||||
// Serial.print("timer no " + String (i) + ": ");
|
Serial.print("timer no " + String (i) + ": ");
|
||||||
// Serial.println(timer);
|
Serial.println(timer);
|
||||||
if (timer == "not found" || timer == "") return;
|
if (timer == "not found" || timer == "") return;
|
||||||
int number = selectToMarker (timer, ":").toInt();
|
int number = selectToMarker (timer, ":").toInt();
|
||||||
int time = readTimer(number);
|
int time = readTimer(number);
|
||||||
if (time == 0) {
|
if (time == 0) {
|
||||||
|
|
||||||
delTimer (String (number));
|
delTimer (String (number));
|
||||||
|
jsonWriteStr(configJson, "timer" + String(number), "0");
|
||||||
jsonWriteStr(configJson, "timerSet" + String(number), "0");
|
eventGen ("timer", String(number));
|
||||||
|
|
||||||
eventGen ("timerSet", String(number));
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
time--;
|
time--;
|
||||||
addTimer(String (number), String (time));
|
addTimer(String (number), String (time));
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
} while (i <= 9);
|
} while (i <= 9);
|
||||||
|
|
||||||
}
|
}
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void timerStart() {
|
void timerStart() {
|
||||||
|
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String period_of_time = sCmd.next();
|
String period_of_time = sCmd.next();
|
||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
|
|
||||||
if (period_of_time.indexOf("digit") != -1) {
|
if (period_of_time.indexOf("digit") != -1) {
|
||||||
period_of_time = add_set(period_of_time);
|
//period_of_time = add_set(period_of_time);
|
||||||
period_of_time = jsonRead(configJson, period_of_time);
|
period_of_time = jsonRead(configJson, period_of_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == "sec") period_of_time = period_of_time;
|
if (type == "sec") period_of_time = period_of_time;
|
||||||
if (type == "min") period_of_time = String(period_of_time.toInt() * 60);
|
if (type == "min") period_of_time = String(period_of_time.toInt() * 60);
|
||||||
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);
|
||||||
jsonWriteStr(configJson, "timerSet" + number, "1");
|
jsonWriteStr(configJson, "timer" + number, "1");
|
||||||
}
|
}
|
||||||
void addTimer(String number, String time) {
|
void addTimer(String number, String time) {
|
||||||
|
|
||||||
String tmp = jsonRead(optionJson, "timers"); //1:60,2:120,
|
String tmp = jsonRead(optionJson, "timers"); //1:60,2:120,
|
||||||
String new_timer = number + ":" + time;
|
String new_timer = number + ":" + time;
|
||||||
int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо заменить
|
int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо заменить
|
||||||
|
|
||||||
if (psn1 != -1) { //если он есть
|
if (psn1 != -1) { //если он есть
|
||||||
|
|
||||||
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, new_timer); //заменяем таймер на новый (во всей стороке)
|
///tmp.replace(timer, new_timer); //заменяем таймер на новый (во всей стороке)
|
||||||
tmp.replace(timer + ",", "");
|
tmp.replace(timer + ",", "");
|
||||||
tmp += new_timer + ",";
|
tmp += new_timer + ",";
|
||||||
|
|
||||||
} else { //если его нет
|
} else { //если его нет
|
||||||
tmp += new_timer + ",";
|
tmp += new_timer + ",";
|
||||||
}
|
}
|
||||||
@@ -82,18 +60,14 @@ void addTimer(String number, String time) {
|
|||||||
//Serial.println("ura");
|
//Serial.println("ura");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void timerStop() {
|
void timerStop() {
|
||||||
|
|
||||||
String number = sCmd.next();
|
String number = sCmd.next();
|
||||||
delTimer(number);
|
delTimer(number);
|
||||||
|
|
||||||
}
|
}
|
||||||
void delTimer (String number) {
|
|
||||||
|
|
||||||
|
void delTimer (String number) {
|
||||||
String tmp = jsonRead(optionJson, "timers"); //1:60,2:120,
|
String tmp = jsonRead(optionJson, "timers"); //1:60,2:120,
|
||||||
int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо удалить
|
int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо удалить
|
||||||
|
|
||||||
if (psn1 != -1) { //если он есть
|
if (psn1 != -1) { //если он есть
|
||||||
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, выделяем таймер который надо удалить
|
||||||
@@ -103,13 +77,9 @@ void delTimer (String number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int readTimer(int number) {
|
int readTimer(int number) {
|
||||||
|
|
||||||
String tmp = jsonRead(optionJson, "timers"); //1:60,2:120,
|
String tmp = jsonRead(optionJson, "timers"); //1:60,2:120,
|
||||||
|
|
||||||
int psn1 = tmp.indexOf(String(number) + ":"); //0 ищем позицию таймера который надо прочитать
|
int psn1 = tmp.indexOf(String(number) + ":"); //0 ищем позицию таймера который надо прочитать
|
||||||
|
|
||||||
String timer;
|
String timer;
|
||||||
|
|
||||||
if (psn1 != -1) { //если он есть
|
if (psn1 != -1) { //если он есть
|
||||||
int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
|
int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
|
||||||
timer = tmp.substring(psn1, psn2); //1:60 выделяем таймер который надо прочитать
|
timer = tmp.substring(psn1, psn2); //1:60 выделяем таймер который надо прочитать
|
||||||
@@ -117,72 +87,3 @@ int readTimer(int number) {
|
|||||||
}
|
}
|
||||||
return timer.toInt();
|
return timer.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void timer() {
|
|
||||||
|
|
||||||
String seted_time = sCmd.next();
|
|
||||||
String order = sCmd.next();
|
|
||||||
order.replace("_", " ");
|
|
||||||
if (seted_time == current_time) {
|
|
||||||
|
|
||||||
order_loop += order + ",";
|
|
||||||
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
//------------------------------таймеры------------------------------------------------------
|
|
||||||
|
|
||||||
/*
|
|
||||||
void time() {
|
|
||||||
|
|
||||||
String time_number = sCmd.next();
|
|
||||||
String time = sCmd.next();
|
|
||||||
|
|
||||||
String time_to_add = time_number + "-" + time;
|
|
||||||
|
|
||||||
String replace_line = jsonRead(optionJson, "times") ;
|
|
||||||
int psn1 = replace_line.indexOf(time_number + "-") ; //ищем позицию времени которое надо заменить
|
|
||||||
|
|
||||||
if (psn1 != -1) { //если оно есть
|
|
||||||
|
|
||||||
int psn2 = replace_line.indexOf(",", psn1); //от этой позиции находим позицию запятой
|
|
||||||
|
|
||||||
String timer = replace_line.substring(psn1, psn2); //выделяем таймер который надо заменить
|
|
||||||
///tmp.replace(timer, new_timer); //заменяем таймер на новый (во всей стороке)
|
|
||||||
replace_line.replace(timer + ",", "");
|
|
||||||
replace_line += time_to_add + ",";
|
|
||||||
|
|
||||||
} else { //если его нет
|
|
||||||
replace_line += time_to_add + ",";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
jsonWriteStr(optionJson, "times", replace_line);
|
|
||||||
|
|
||||||
jsonWriteStr(configJson, "timeSet" + time_number, "1");
|
|
||||||
|
|
||||||
ts.add(TIMERS, 1000, [&](void*) {
|
|
||||||
|
|
||||||
current_time = GetTime();
|
|
||||||
Serial.println(current_time);
|
|
||||||
|
|
||||||
String seted_times = jsonRead(optionJson, "times");
|
|
||||||
|
|
||||||
while (seted_times.length() != 0) {
|
|
||||||
String tmp = selectToMarker (seted_times, ",");
|
|
||||||
|
|
||||||
String time_number = selectToMarker(tmp, "-");
|
|
||||||
String seted_time = deleteBeforeDelimiter(tmp, "-");
|
|
||||||
|
|
||||||
Serial.println(seted_time);
|
|
||||||
|
|
||||||
if (current_time == seted_time) {
|
|
||||||
jsonWriteStr(configJson, "timeSet" + time_number, "0");
|
|
||||||
eventGen ("timeSet", time_number);
|
|
||||||
}
|
|
||||||
|
|
||||||
seted_times = deleteBeforeDelimiter(seted_times, ",");
|
|
||||||
}
|
|
||||||
}, nullptr, true);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|||||||
3
WiFi.ino
3
WiFi.ino
@@ -117,8 +117,9 @@ bool StartAPMode() {
|
|||||||
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.scanDelete();
|
||||||
ROUTER_Connecting();
|
ROUTER_Connecting();
|
||||||
MQTT_Connecting();
|
MQTT_init();
|
||||||
}
|
}
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,3 +77,12 @@ void createChart (String widget_name, String page_name, String page_number, Str
|
|||||||
#endif
|
#endif
|
||||||
widget = "";
|
widget = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
33
bus.ino
Normal file
33
bus.ino
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
void do_i2c_scanning() {
|
||||||
|
if (i2c_scanning) {
|
||||||
|
i2c_scanning = false;
|
||||||
|
String tmp = i2c_scan();
|
||||||
|
if (tmp == "error") {
|
||||||
|
tmp = i2c_scan();
|
||||||
|
Serial.println(tmp);
|
||||||
|
jsonWriteStr(configJson, "i2c", tmp);
|
||||||
|
} else {
|
||||||
|
Serial.println(tmp);
|
||||||
|
jsonWriteStr(configJson, "i2c", tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String i2c_scan() {
|
||||||
|
String out;
|
||||||
|
byte count = 0;
|
||||||
|
Wire.begin();
|
||||||
|
for (byte i = 8; i < 120; i++) {
|
||||||
|
Wire.beginTransmission(i);
|
||||||
|
if (Wire.endTransmission() == 0) {
|
||||||
|
count++;
|
||||||
|
out += String(count) + ". 0x" + String(i, HEX) + "; ";
|
||||||
|
delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == 0) {
|
||||||
|
return "error";
|
||||||
|
} else {
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "IoTmanager",
|
"name": "IoTmanager",
|
||||||
"chipID": "",
|
"chipID": "",
|
||||||
"ssidAP": "WiFi",
|
"ssidAP": "WiFi2",
|
||||||
"passwordAP": "",
|
"passwordAP": "",
|
||||||
"ssid": "rise",
|
"ssid": "rise",
|
||||||
"password": "hostel3333",
|
"password": "hostel3333",
|
||||||
"timezone": 2,
|
"timezone": 2,
|
||||||
|
"ntp": "pool.ntp.org",
|
||||||
"mqttServer": "91.204.228.124",
|
"mqttServer": "91.204.228.124",
|
||||||
"mqttPort": 1883,
|
"mqttPort": 1883,
|
||||||
"mqttPrefix": "/rise",
|
"mqttPrefix": "/rise",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
analog 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1
|
analog adc 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1
|
||||||
logging analog 5 100 fast Аналоговый#вход Датчики 2
|
logging adc 5 100 Аналоговый#вход Датчики 2
|
||||||
|
|
||||||
//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит
|
//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит
|
||||||
//значение чтения аналогового входа будут примерно равным
|
//значение чтения аналогового входа будут примерно равным
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
dhtT DHT11 2 Температура#DHT,#t°C Датчики any-data 1
|
dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
|
||||||
dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 2
|
dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 2
|
||||||
dhtComfort Степень#комфорта: Датчики 3
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
dhtPerception Восприятие: Датчики 4
|
dhtPerception Восприятие: Датчики 4
|
||||||
dhtDewpoint Точка#росы: Датчики 5
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
logging dhtT 5 50 fast Температура Датчики 6
|
logging t 1 50 Температура Датчики 6
|
||||||
logging dhtH 5 50 fast Влажность Датчики 7
|
logging h 1 50 Влажность Датчики 7
|
||||||
|
|
||||||
//2 - номер пина датчика
|
|
||||||
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
dhtT DHT22 2 Температура#DHT,#t°C Датчики any-data 1
|
dhtT t 2 dht22 Температура#DHT,#t°C Датчики any-data 1
|
||||||
dhtH DHT22 2 Влажность#DHT,#% Датчики any-data 2
|
dhtH h 2 dht22 Влажность#DHT,#t°C Датчики any-data 2
|
||||||
dhtComfort Степень#комфорта: Датчики 3
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
dhtPerception Восприятие: Датчики 4
|
dhtPerception Восприятие: Датчики 4
|
||||||
dhtDewpoint Точка#росы: Датчики 5
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
logging dhtT 5 50 fast Температура Датчики 6
|
logging t 1 50 Температура Датчики 6
|
||||||
logging dhtH 5 50 fast Влажность Датчики 7
|
logging h 1 50 Влажность Датчики 7
|
||||||
|
|
||||||
//2 - номер пина датчика
|
|
||||||
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
|
||||||
@@ -3,12 +3,10 @@ button 2 13 Прихожая Реле 0 2
|
|||||||
button 3 14 Кухня Реле 0 3
|
button 3 14 Кухня Реле 0 3
|
||||||
pwm 1 3 Яркость#коредор: Реле 1023 4
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
pwm 2 4 Яркость#ванная: Реле 510 5
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
analog 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
analog adc 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
||||||
logging analog 1 100 fast Аналоговый#вход Датчики 7
|
logging adc 1 100 Аналоговый#вход Датчики 7
|
||||||
|
|
||||||
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
||||||
//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
|
//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
|
||||||
//Так же продемонстрированна система логгирования данных строкой logging
|
//Так же продемонстрированна система логгирования данных строкой logging
|
||||||
//1 - это интервал между точками в минутах, 100 это количество точек
|
//1 - это интервал между точками в минутах, 100 это количество точек
|
||||||
//slow или fast это два варианта выгрузки графика, slow более экономичный режим
|
|
||||||
//больше подходит для esp8266
|
|
||||||
@@ -7,4 +7,7 @@ button1 = 0
|
|||||||
buttonSet 2 0
|
buttonSet 2 0
|
||||||
buttonSet 3 0
|
buttonSet 3 0
|
||||||
pwmSet 2 0
|
pwmSet 2 0
|
||||||
|
end
|
||||||
|
adc > 50
|
||||||
|
buttonSet 2 1
|
||||||
end
|
end
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
level Вода#в#баке,#% Датчики fill-gauge 125 20 1
|
level lev 14 12 Вода#в#баке,#% Датчики 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 fast Вода#в#баке Датчики 6
|
logging lev 1 100 Вода#в#баке Датчики 6
|
||||||
|
|
||||||
//125 - это расстояние от датчика до дна бака в сантиметрах
|
//125 - это расстояние от датчика до дна бака в сантиметрах
|
||||||
//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
level > digit1
|
lev > digit1
|
||||||
buttonSet 1 0
|
buttonSet 1 0
|
||||||
end
|
end
|
||||||
level < digit2
|
lev < digit2
|
||||||
buttonSet 1 1
|
buttonSet 1 1
|
||||||
end
|
end
|
||||||
@@ -23,6 +23,10 @@
|
|||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "Uptime: {{uptime}}"
|
"title": "Uptime: {{uptime}}"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Time: {{time}}"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,12 +3,10 @@ button 2 13 Прихожая Реле 0 2
|
|||||||
button 3 14 Кухня Реле 0 3
|
button 3 14 Кухня Реле 0 3
|
||||||
pwm 1 3 Яркость#коредор: Реле 1023 4
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
pwm 2 4 Яркость#ванная: Реле 510 5
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
analog 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
analog adc 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
||||||
logging analog 1 100 fast Аналоговый#вход Датчики 7
|
logging adc 1 100 Аналоговый#вход Датчики 7
|
||||||
|
|
||||||
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
||||||
//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
|
//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
|
||||||
//Так же продемонстрированна система логгирования данных строкой logging
|
//Так же продемонстрированна система логгирования данных строкой logging
|
||||||
//1 - это интервал между точками в минутах, 100 это количество точек
|
//1 - это интервал между точками в минутах, 100 это количество точек
|
||||||
//slow или fast это два варианта выгрузки графика, slow более экономичный режим
|
|
||||||
//больше подходит для esp8266
|
|
||||||
@@ -7,4 +7,7 @@ button1 = 0
|
|||||||
buttonSet 2 0
|
buttonSet 2 0
|
||||||
buttonSet 3 0
|
buttonSet 3 0
|
||||||
pwmSet 2 0
|
pwmSet 2 0
|
||||||
|
end
|
||||||
|
adc > 50
|
||||||
|
buttonSet 2 1
|
||||||
end
|
end
|
||||||
@@ -71,6 +71,12 @@
|
|||||||
"action": "/?pushingbox",
|
"action": "/?pushingbox",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Утилиты",
|
||||||
|
"action": "/?utilities",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "h3",
|
"type": "h3",
|
||||||
"name": "my-block",
|
"name": "my-block",
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
{
|
{
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"class": "alert alert-warning",
|
"class": "alert alert-warning",
|
||||||
"title": "Обратите внимание что поле prefix может состоять только из одного слова и одного разделителя: <b>/your_prefix</b>, вариант вида: <b>/your_prefix1/your_prefix2</b> работать не будет. После изменения поля prefix необходимо перезагрузить устройство"
|
"title": "Обратите внимание что поле prefix может состоять только из одного слова и одного разделителя: <b>/prefix</b>, вариант вида: <b>/prefix1/prefix2</b> работать не будет. После изменения поля prefix необходимо перезагрузить устройство"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "h4",
|
||||||
|
|||||||
308
data/setup.json
308
data/setup.json
@@ -1,148 +1,162 @@
|
|||||||
{
|
{
|
||||||
"configs": [
|
"configs": [
|
||||||
"/config.setup.json"
|
"/config.setup.json"
|
||||||
],
|
],
|
||||||
"title": "Конфигурация",
|
"title": "Конфигурация",
|
||||||
"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": "{{name}}",
|
"title": "{{name}}",
|
||||||
"class":"alert-warning"
|
"class": "alert-warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"action": "/",
|
"action": "/",
|
||||||
"class": "btn btn-block btn-danger"
|
"class": "btn btn-block btn-danger"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h2",
|
"type": "h2",
|
||||||
"title": "Имя устройства"
|
"title": "Имя устройства"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "Имя устройства",
|
"title": "Имя устройства",
|
||||||
"name":"dev_name",
|
"name": "dev_name",
|
||||||
"state": "{{name}}",
|
"state": "{{name}}",
|
||||||
"pattern": "[A-Za-z0-9]{6,12}"
|
"pattern": "[A-Za-z0-9]{6,12}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "name?arg=[[dev_name]]",
|
"action": "name?arg=[[dev_name]]",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h2",
|
"type": "h2",
|
||||||
"title": "Подключение к Wi-Fi роутеру"
|
"title": "Подключение к Wi-Fi роутеру"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title":"Сеть",
|
"title": "Сеть",
|
||||||
"name":"ssid",
|
"name": "ssid",
|
||||||
"state": "{{ssid}}"
|
"state": "{{ssid}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "password",
|
"type": "password",
|
||||||
"title": "Введите пароль",
|
"title": "Введите пароль",
|
||||||
"name":"ssidPass",
|
"name": "ssidPass",
|
||||||
"state": "{{password}}"
|
"state": "{{password}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"class": "btn btn-block btn-success",
|
"class": "btn btn-block btn-success",
|
||||||
"action": "ssid?ssid=[[ssid]]&password=[[ssidPass]]"
|
"action": "ssid?ssid=[[ssid]]&password=[[ssidPass]]"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h2",
|
"type": "h2",
|
||||||
"title": "Точка доступа"
|
"title": "Точка доступа"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "Имя WI-FI сети",
|
"title": "Имя WI-FI сети",
|
||||||
"name":"ssidap",
|
"name": "ssidap",
|
||||||
"state": "{{ssidAP}}",
|
"state": "{{ssidAP}}",
|
||||||
"pattern": ".{1,20}"
|
"pattern": ".{1,20}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "password",
|
"type": "password",
|
||||||
"title": "Пароль",
|
"title": "Пароль",
|
||||||
"name":"ssidApPass",
|
"name": "ssidApPass",
|
||||||
"state": "{{passwordAP}}",
|
"state": "{{passwordAP}}",
|
||||||
"pattern": ".{8,20}"
|
"pattern": ".{8,20}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "ssidap?ssidAP=[[ssidap]]&passwordAP=[[ssidApPass]]",
|
"action": "ssidap?ssidAP=[[ssidap]]&passwordAP=[[ssidApPass]]",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h2",
|
"type": "h2",
|
||||||
"title": "Логин и пароль web interface"
|
"title": "Логин и пароль web interface"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "Логин",
|
"title": "Логин",
|
||||||
"name":"web-login",
|
"name": "web-login",
|
||||||
"state": "{{web_login}}",
|
"state": "{{web_login}}",
|
||||||
"pattern": ".{1,20}"
|
"pattern": ".{1,20}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "password",
|
"type": "password",
|
||||||
"title": "Пароль",
|
"title": "Пароль",
|
||||||
"name":"web-pass",
|
"name": "web-pass",
|
||||||
"state": "{{web_pass}}",
|
"state": "{{web_pass}}",
|
||||||
"pattern": ".{1,20}"
|
"pattern": ".{1,20}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "button",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]",
|
"action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h2",
|
"type": "h2",
|
||||||
"title": "Временная зона"
|
"title": "Временная зона"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input",
|
"type": "input",
|
||||||
"title": "Логин",
|
"title": "Временная зона",
|
||||||
"name":"time-zone",
|
"name": "1",
|
||||||
"state": "{{timezone}}",
|
"state": "{{timezone}}",
|
||||||
"pattern": ".{1,20}"
|
"pattern": ".{1,20}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "button",
|
"type": "input",
|
||||||
"title": "Сохранить",
|
"title": "Название ntp сервера",
|
||||||
"action": "timeZone?timezone=[[time-zone]]",
|
"name": "2",
|
||||||
"class": "btn btn-block btn-success"
|
"state": "{{ntp}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "button",
|
||||||
},
|
"title": "Сохранить",
|
||||||
{
|
"action": "time?timezone=[[1]]&ntp=[[2]]",
|
||||||
"type": "link",
|
"class": "btn btn-block btn-success"
|
||||||
"title": "Перезагрузить устройство",
|
},
|
||||||
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
{
|
||||||
"class": "btn btn-block btn-warning"
|
"type": "hr"
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
}
|
"type": "text",
|
||||||
|
"class": "alert alert-warning",
|
||||||
|
"title": "После изменения поля <b>'NTP сервер'</b> необходимо перезагрузить устройство"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Перезагрузить устройство",
|
||||||
|
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
||||||
|
"class": "btn btn-block btn-warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
41
data/utilities.json
Normal file
41
data/utilities.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"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": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "Сканирование адресов шины i2c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{i2c}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Сканировать",
|
||||||
|
"action": "/init?arg=5",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Главная",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-danger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
"ssid": "your_ssid",
|
"ssid": "your_ssid",
|
||||||
"password": "your_password",
|
"password": "your_password",
|
||||||
"timezone": 3,
|
"timezone": 3,
|
||||||
|
"ntp": "pool.ntp.org",
|
||||||
"mqttServer": "",
|
"mqttServer": "",
|
||||||
"mqttPort": 0,
|
"mqttPort": 0,
|
||||||
"mqttPrefix": "/IoTmanager",
|
"mqttPrefix": "/IoTmanager",
|
||||||
@@ -14,5 +15,6 @@
|
|||||||
"scenario": "1",
|
"scenario": "1",
|
||||||
"pushingbox_id": "",
|
"pushingbox_id": "",
|
||||||
"web_login": "admin",
|
"web_login": "admin",
|
||||||
"web_pass": "admin"
|
"web_pass": "admin",
|
||||||
|
"udponoff": "1"
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,9 @@ void setup() {
|
|||||||
CMD_init();
|
CMD_init();
|
||||||
Serial.println("[V] CMD_init");
|
Serial.println("[V] CMD_init");
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
|
sensors_init();
|
||||||
|
Serial.println("[V] sensors_init");
|
||||||
|
//--------------------------------------------------------------
|
||||||
All_init();
|
All_init();
|
||||||
Serial.println("[V] All_init");
|
Serial.println("[V] All_init");
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
@@ -41,9 +44,6 @@ void setup() {
|
|||||||
ts.add(TEST, 10000, [&](void*) {
|
ts.add(TEST, 10000, [&](void*) {
|
||||||
|
|
||||||
getMemoryLoad("[i] periodic check of");
|
getMemoryLoad("[i] periodic check of");
|
||||||
|
|
||||||
//String json = "{}";
|
|
||||||
//jsonWriteStr(json, "test6", GetTime());
|
|
||||||
//ws.textAll(json);
|
//ws.textAll(json);
|
||||||
|
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
@@ -80,4 +80,5 @@ void not_async_actions() {
|
|||||||
do_upgrade();
|
do_upgrade();
|
||||||
do_udp_data_parse();
|
do_udp_data_parse();
|
||||||
do_mqtt_send_settings_to_udp();
|
do_mqtt_send_settings_to_udp();
|
||||||
|
do_i2c_scanning();
|
||||||
}
|
}
|
||||||
|
|||||||
16
main.ino
16
main.ino
@@ -322,9 +322,23 @@ void sendCONFIG(String topik, String widgetConfig, String key, String date) {
|
|||||||
inner = inner + "}}";
|
inner = inner + "}}";
|
||||||
String t = outer + inner;
|
String t = outer + inner;
|
||||||
//Serial.println(t);
|
//Serial.println(t);
|
||||||
//client.publish(MQTT::Publish(topik, t).set_qos(1));
|
//client_mqtt.publish(MQTT::Publish(topik, t).set_qos(1));
|
||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t hexStringToUint8(String hex) {
|
||||||
|
uint8_t tmp = strtol(hex.c_str(), NULL, 0);
|
||||||
|
if (tmp >= 0x00 && tmp <= 0xFF) {
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t hexStringToUint16(String hex) {
|
||||||
|
uint16_t tmp = strtol(hex.c_str(), NULL, 0);
|
||||||
|
if (tmp >= 0x0000 && tmp <= 0xFFFF) {
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
//=============================================================================================================
|
//=============================================================================================================
|
||||||
#ifdef led_status
|
#ifdef led_status
|
||||||
void led_blink(int pin, int fq, String blink_satus) {
|
void led_blink(int pin, int fq, String blink_satus) {
|
||||||
|
|||||||
77
mqtt.ino
77
mqtt.ino
@@ -4,9 +4,9 @@ void MQTT_init() {
|
|||||||
ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
|
ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
|
||||||
up_time();
|
up_time();
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
Serial.println("[V] WiFi-ok");
|
Serial.println("[VV] WiFi-ok");
|
||||||
if (client.connected()) {
|
if (client_mqtt.connected()) {
|
||||||
Serial.println("[V] MQTT-ok");
|
Serial.println("[VV] MQTT-ok");
|
||||||
} else {
|
} else {
|
||||||
MQTT_Connecting();
|
MQTT_Connecting();
|
||||||
if (!just_load) mqtt_lost_error++;
|
if (!just_load) mqtt_lost_error++;
|
||||||
@@ -50,7 +50,7 @@ void MQTT_init() {
|
|||||||
request->send(200, "text/text", tmp);
|
request->send(200, "text/text", tmp);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_mqtt_send_settings_to_udp() {
|
void do_mqtt_send_settings_to_udp() {
|
||||||
@@ -63,7 +63,7 @@ void do_mqtt_send_settings_to_udp() {
|
|||||||
void do_mqtt_connection() {
|
void do_mqtt_connection() {
|
||||||
if (mqtt_connection) {
|
if (mqtt_connection) {
|
||||||
mqtt_connection = false;
|
mqtt_connection = false;
|
||||||
client.disconnect();
|
client_mqtt.disconnect();
|
||||||
MQTT_Connecting();
|
MQTT_Connecting();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,8 +72,8 @@ void do_mqtt_connection() {
|
|||||||
|
|
||||||
void handleMQTT() {
|
void handleMQTT() {
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
if (client.connected()) {
|
if (client_mqtt.connected()) {
|
||||||
client.loop();
|
client_mqtt.loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -83,16 +83,16 @@ boolean MQTT_Connecting() {
|
|||||||
if ((mqtt_server != "")) {
|
if ((mqtt_server != "")) {
|
||||||
Serial.println("[E] Lost MQTT connection, start reconnecting");
|
Serial.println("[E] Lost MQTT connection, start reconnecting");
|
||||||
//ssl//espClient.setCACert(local_root_ca1);
|
//ssl//espClient.setCACert(local_root_ca1);
|
||||||
client.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort"));
|
client_mqtt.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort"));
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
if (!client.connected()) {
|
if (!client_mqtt.connected()) {
|
||||||
Serial.println("[V] Connecting to MQTT server commenced");
|
Serial.println("[V] Connecting to MQTT server commenced");
|
||||||
if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) {
|
if (client_mqtt.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) {
|
||||||
Serial.println("[V] MQTT connected");
|
Serial.println("[VV] MQTT connected");
|
||||||
client.setCallback(callback);
|
client_mqtt.setCallback(callback);
|
||||||
client.subscribe(jsonRead(configSetup, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
|
client_mqtt.subscribe(jsonRead(configSetup, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
|
||||||
client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
|
client_mqtt.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
|
||||||
client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
|
client_mqtt.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
|
||||||
Serial.println("[V] Callback set, subscribe done");
|
Serial.println("[V] Callback set, subscribe done");
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@@ -119,18 +119,18 @@ void callback(char* topic, byte * payload, unsigned int length) {
|
|||||||
}
|
}
|
||||||
Serial.println(" => " + str);
|
Serial.println(" => " + str);
|
||||||
|
|
||||||
if (str == "HELLO") outcoming_date(); //превращает название топика в команду, а значение в параметр команды
|
if (str == "HELLO") outcoming_date();
|
||||||
|
|
||||||
if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/RelaySet1/control 1
|
//превращает название топика в команду, а значение в параметр команды
|
||||||
//Serial.println(topic_str);
|
if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/button1/control 1 //IoTmanager/800324-1458415/button99/control 1
|
||||||
String topic = selectFromMarkerToMarker(topic_str, "/", 3); //RelaySet1
|
String topic = selectFromMarkerToMarker(topic_str, "/", 3); //button1 //button99
|
||||||
String number = selectToMarkerLast(topic, "Set"); //1
|
topic = add_set(topic); //buttonSet1 //buttonSet99
|
||||||
topic.replace(number, ""); //RelaySet
|
String number = selectToMarkerLast(topic, "Set"); //1 //99
|
||||||
String final_line = topic + " " + number + " " + str; //RelaySet 1 1
|
topic.replace(number, ""); //buttonSet //buttonSet
|
||||||
//Serial.println(final_line);
|
String final_line = topic + " " + number + " " + str; //buttonSet 1 1 //buttonSet 99 1
|
||||||
order_loop += final_line + ",";
|
order_loop += final_line + ",";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (topic_str.indexOf("order") > 0) {
|
if (topic_str.indexOf("order") > 0) {
|
||||||
str.replace("_", " ");
|
str.replace("_", " ");
|
||||||
//Serial.println(str);
|
//Serial.println(str);
|
||||||
@@ -152,21 +152,21 @@ void outcoming_date() {
|
|||||||
//======================================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;
|
||||||
boolean send_status = client.beginPublish(topik.c_str(), data.length(), false);
|
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
|
||||||
client.print(data);
|
client_mqtt.print(data);
|
||||||
client.endPublish();
|
client_mqtt.endPublish();
|
||||||
return send_status;
|
return send_status;
|
||||||
}
|
}
|
||||||
boolean sendCHART(String topik, String data) {
|
boolean sendCHART(String topik, String data) {
|
||||||
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
boolean send_status = client.beginPublish(topik.c_str(), data.length(), false);
|
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
|
||||||
client.print(data);
|
client_mqtt.print(data);
|
||||||
client.endPublish();
|
client_mqtt.endPublish();
|
||||||
return send_status;
|
return send_status;
|
||||||
}
|
}
|
||||||
boolean sendCHART_test(String topik, String data) {
|
boolean sendCHART_test(String topik, String data) {
|
||||||
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
boolean send_status = client.publish (topik.c_str(), data.c_str(), false);
|
boolean send_status = client_mqtt.publish (topik.c_str(), data.c_str(), false);
|
||||||
return send_status;
|
return send_status;
|
||||||
}
|
}
|
||||||
//======================================STATUS==================================================
|
//======================================STATUS==================================================
|
||||||
@@ -174,12 +174,12 @@ void sendSTATUS(String topik, String state) {
|
|||||||
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
topik = jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
String json_ = "{}";
|
String json_ = "{}";
|
||||||
jsonWriteStr(json_, "status", state);
|
jsonWriteStr(json_, "status", state);
|
||||||
int send_status = client.publish (topik.c_str(), json_.c_str(), false);
|
int send_status = client_mqtt.publish (topik.c_str(), json_.c_str(), false);
|
||||||
}
|
}
|
||||||
//======================================CONTROL==================================================
|
//======================================CONTROL==================================================
|
||||||
void sendCONTROL(String id, String topik, String state) {
|
void sendCONTROL(String id, String topik, String state) {
|
||||||
String all_line = jsonRead(configSetup, "mqttPrefix") + "/" + id + "/" + topik + "/control";
|
String all_line = jsonRead(configSetup, "mqttPrefix") + "/" + id + "/" + topik + "/control";
|
||||||
int send_status = client.publish (all_line.c_str(), state.c_str(), false);
|
int send_status = client_mqtt.publish (all_line.c_str(), state.c_str(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
|
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
|
||||||
@@ -208,7 +208,7 @@ void sendAllWigets() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//прямое выкидывание данных из файла в файловой системе в mqtt, без загрузки оперативной памяти
|
#ifndef layout_in_ram
|
||||||
void sendAllWigets() {
|
void sendAllWigets() {
|
||||||
File configFile = SPIFFS.open("/layout.txt", "r");
|
File configFile = SPIFFS.open("/layout.txt", "r");
|
||||||
if (!configFile) {
|
if (!configFile) {
|
||||||
@@ -221,6 +221,7 @@ void sendAllWigets() {
|
|||||||
sendMQTT("config", widget_to_send);
|
sendMQTT("config", widget_to_send);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
|
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
|
||||||
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
|
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
|
||||||
|
|
||||||
@@ -249,7 +250,7 @@ void sendAllData() { //берет строку json и ключи превра
|
|||||||
|
|
||||||
String stateMQTT() {
|
String stateMQTT() {
|
||||||
|
|
||||||
int state = client.state();
|
int state = client_mqtt.state();
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case -4: return "the server didn't respond within the keepalive time";
|
case -4: return "the server didn't respond within the keepalive time";
|
||||||
@@ -286,7 +287,7 @@ String stateMQTT() {
|
|||||||
String line_ = selectToMarker (all_text, "\n");
|
String line_ = selectToMarker (all_text, "\n");
|
||||||
String id = selectFromMarkerToMarker(line_, " ", 4);
|
String id = selectFromMarkerToMarker(line_, " ", 4);
|
||||||
if (id != "not found") {
|
if (id != "not found") {
|
||||||
client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + id + "/+/status").c_str(), 0);
|
client_mqtt.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + id + "/+/status").c_str(), 0);
|
||||||
Serial.println("subscribed to device, id: " + id);
|
Serial.println("subscribed to device, id: " + id);
|
||||||
}
|
}
|
||||||
all_text = deleteBeforeDelimiter(all_text, "\n");
|
all_text = deleteBeforeDelimiter(all_text, "\n");
|
||||||
@@ -306,7 +307,7 @@ String stateMQTT() {
|
|||||||
String id = selectFromMarkerToMarker(line_, " ", 4);
|
String id = selectFromMarkerToMarker(line_, " ", 4);
|
||||||
if (id != "not found") {
|
if (id != "not found") {
|
||||||
//Serial.println();
|
//Serial.println();
|
||||||
Serial.println(client.publish ((jsonRead(configSetup, "mqttPrefix") + "/" + id).c_str(), "CHECK", true));
|
Serial.println(client_mqtt.publish ((jsonRead(configSetup, "mqttPrefix") + "/" + id).c_str(), "CHECK", true));
|
||||||
|
|
||||||
}
|
}
|
||||||
all_text = deleteBeforeDelimiter(all_text, "\n");
|
all_text = deleteBeforeDelimiter(all_text, "\n");
|
||||||
|
|||||||
65
set.h
65
set.h
@@ -5,16 +5,9 @@ boolean mb_4_of_memory = true;
|
|||||||
//#define MDNS_enable
|
//#define MDNS_enable
|
||||||
//#define WS_enable
|
//#define WS_enable
|
||||||
//#define layout_in_ram
|
//#define layout_in_ram
|
||||||
#define wifi_mqtt_reconnecting 20000
|
#define wifi_mqtt_reconnecting 30000
|
||||||
#define analog_update_int 5000
|
|
||||||
#define temp_update_int 5000
|
|
||||||
|
|
||||||
#define tank_level_shooting_interval 500 //интервал выстрела датчика
|
#define tank_level_times_to_send 10 //после скольки выстрелов делать отправку данных
|
||||||
#define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных
|
|
||||||
|
|
||||||
#define dhtT_update_int 10000
|
|
||||||
#define dhtH_update_int 10000
|
|
||||||
#define dht_calculation_update_int 10000
|
|
||||||
|
|
||||||
#define statistics_update 1000 * 60 * 60 * 2
|
#define statistics_update 1000 * 60 * 60 * 2
|
||||||
//======================================================================
|
//======================================================================
|
||||||
@@ -50,7 +43,7 @@ Servo myServo2;
|
|||||||
#include <analogWrite.h>
|
#include <analogWrite.h>
|
||||||
#include "AsyncUDP.h"
|
#include "AsyncUDP.h"
|
||||||
AsyncUDP udp;
|
AsyncUDP udp;
|
||||||
#include <ESP32_Servo.h>
|
#include <ESP32_Servo.h>
|
||||||
Servo myServo1;
|
Servo myServo1;
|
||||||
Servo myServo2;
|
Servo myServo2;
|
||||||
|
|
||||||
@@ -82,13 +75,14 @@ AsyncEventSource events("/events");
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include <TickerScheduler.h>
|
#include <TickerScheduler.h>
|
||||||
TickerScheduler ts(30);
|
enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, SENSORS, STEPPER1, STEPPER2, LOG1, LOG2, LOG3, LOG4, LOG5, TIMER_COUNTDOWN, TIME, TIME_SYNC, STATISTICS, UDP, UDP_DB, 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};
|
TickerScheduler ts(TEST + 1);
|
||||||
|
|
||||||
|
//LEVEL, ANALOG1, ANALOG2, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, BMP280T, BMP280P,
|
||||||
|
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
WiFiClient espClient;
|
WiFiClient espClient;
|
||||||
|
PubSubClient client_mqtt(espClient);
|
||||||
PubSubClient client(espClient);
|
|
||||||
|
|
||||||
#include <StringCommand.h>
|
#include <StringCommand.h>
|
||||||
StringCommand sCmd;
|
StringCommand sCmd;
|
||||||
@@ -110,12 +104,23 @@ DallasTemperature sensors;
|
|||||||
DHTesp dht;
|
DHTesp dht;
|
||||||
|
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
|
||||||
|
#include <Adafruit_BMP280.h>
|
||||||
|
Adafruit_BMP280 bmp; // use I2C interface
|
||||||
|
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
|
||||||
|
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
|
||||||
|
|
||||||
|
#include <Adafruit_BME280.h>
|
||||||
|
Adafruit_BME280 bme; // use I2C interface
|
||||||
|
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
|
||||||
|
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
|
||||||
|
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
|
||||||
//===============FIRMWARE VARS========================
|
//===============FIRMWARE VARS========================
|
||||||
boolean just_load = true;
|
boolean just_load = true;
|
||||||
const char* hostName = "IoT Manager";
|
const char* hostName = "IoT Manager";
|
||||||
//JSON
|
//JSON
|
||||||
String configSetup = "{}";
|
String configSetup = "{}";
|
||||||
String configJson = "{}";
|
String configJson = "{}";
|
||||||
String optionJson = "{}";
|
String optionJson = "{}";
|
||||||
//MQTT
|
//MQTT
|
||||||
String chipID = "";
|
String chipID = "";
|
||||||
@@ -124,15 +129,21 @@ String all_widgets = "";
|
|||||||
String scenario;
|
String scenario;
|
||||||
String order_loop;
|
String order_loop;
|
||||||
//SENSORS
|
//SENSORS
|
||||||
boolean flagLoggingAnalog = false;
|
String analog_value_names_list;
|
||||||
boolean flagLoggingLevel = false;
|
int enter_to_analog_counter;
|
||||||
boolean flagLoggingDallas = false;
|
|
||||||
boolean flagLoggingdhtT = false;
|
String level_value_name;
|
||||||
boolean flagLoggingdhtH = false;
|
String dhtT_value_name;
|
||||||
//NTP
|
String dhtH_value_name;
|
||||||
const char* ntpServer = "pool.ntp.org";
|
String bmp280T_value_name;
|
||||||
const long gmtOffset_sec = 3600;
|
String bmp280P_value_name;
|
||||||
const int daylightOffset_sec = 3600;
|
String bme280T_value_name;
|
||||||
|
int sensors_count = 11;
|
||||||
|
int sensors_reading_map [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
//LOGGING
|
||||||
|
String logging_value_names_list;
|
||||||
|
int enter_to_logging_counter;
|
||||||
|
//NTP and TIME
|
||||||
String current_time;
|
String current_time;
|
||||||
//SCENARIO
|
//SCENARIO
|
||||||
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};
|
||||||
@@ -146,9 +157,9 @@ boolean upgrade = false;
|
|||||||
boolean mqtt_connection = false;
|
boolean mqtt_connection = false;
|
||||||
boolean udp_data_parse = false;
|
boolean udp_data_parse = false;
|
||||||
boolean mqtt_send_settings_to_udp = false;
|
boolean mqtt_send_settings_to_udp = false;
|
||||||
|
boolean i2c_scanning = false;
|
||||||
//UDP
|
//UDP
|
||||||
boolean udp_busy = false;
|
boolean udp_busy = false;
|
||||||
boolean chart_data_in_solid_array;
|
|
||||||
unsigned int udp_port = 4210;
|
unsigned int udp_port = 4210;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
IPAddress udp_multicastIP (255, 255, 255, 255);
|
IPAddress udp_multicastIP (255, 255, 255, 255);
|
||||||
@@ -159,3 +170,5 @@ IPAddress udp_multicastIP (239, 255, 255, 255);
|
|||||||
String received_ip;
|
String received_ip;
|
||||||
String received_udp_line;
|
String received_udp_line;
|
||||||
int udp_period;
|
int udp_period;
|
||||||
|
//i2c
|
||||||
|
String i2c_list;
|
||||||
|
|||||||
2
udp.ino
2
udp.ino
@@ -44,7 +44,7 @@ void UDP_init() {
|
|||||||
handleUdp_esp32();
|
handleUdp_esp32();
|
||||||
|
|
||||||
randomSeed(micros());
|
randomSeed(micros());
|
||||||
udp_period = random(20000, 40000);
|
udp_period = random(50000, 60000);
|
||||||
|
|
||||||
ts.add(UDP, udp_period, [&](void*) {
|
ts.add(UDP, udp_period, [&](void*) {
|
||||||
if (jsonRead(configSetup, "udponoff") == "1") {
|
if (jsonRead(configSetup, "udponoff") == "1") {
|
||||||
|
|||||||
Reference in New Issue
Block a user