DHT support

This commit is contained in:
Dmitry Borisenko
2020-02-10 01:06:18 +03:00
parent 8c3111cfa8
commit 9de15efdff
16 changed files with 332 additions and 283 deletions

149
Cmd.ino
View File

@@ -1,9 +1,7 @@
void CMD_init() { void CMD_init() {
sCmd.addCommand("button", button); sCmd.addCommand("button", button);
sCmd.addCommand("buttonSet", buttonSet); sCmd.addCommand("buttonSet", buttonSet);
sCmd.addCommand("pinSet", pinSet); sCmd.addCommand("pinSet", pinSet);
sCmd.addCommand("pwm", pwm); sCmd.addCommand("pwm", pwm);
@@ -12,37 +10,31 @@ void CMD_init() {
sCmd.addCommand("switch", switch_); sCmd.addCommand("switch", switch_);
sCmd.addCommand("analog", analog); sCmd.addCommand("analog", analog);
sCmd.addCommand("ph", ph);
sCmd.addCommand("level", level); sCmd.addCommand("level", level);
sCmd.addCommand("dallas", dallas); sCmd.addCommand("dallas", dallas);
sCmd.addCommand("dhtT", dhtT);
sCmd.addCommand("dhtH", dhtH);
sCmd.addCommand("logging", logging); sCmd.addCommand("logging", logging);
sCmd.addCommand("inputDigit", inputDigit); sCmd.addCommand("inputDigit", inputDigit);
sCmd.addCommand("digitSet", digitSet); sCmd.addCommand("digitSet", digitSet);
sCmd.addCommand("text", text); sCmd.addCommand("text", text);
sCmd.addCommand("textSet", textSet); sCmd.addCommand("textSet", textSet);
// sCmd.addCommand("time", time);
// sCmd.addCommand("timeSet", timeSet);
sCmd.addCommand("timerStart", timerStart); sCmd.addCommand("timerStart", timerStart);
sCmd.addCommand("timerStop", timerStop); sCmd.addCommand("timerStop", timerStop);
sCmd.addCommand("mqtt", mqttOrderSend); sCmd.addCommand("mqtt", mqttOrderSend);
sCmd.addCommand("http", httpOrderSend); sCmd.addCommand("http", httpOrderSend);
//!sCmd.addCommand("push", pushControl); sCmd.addCommand("push", pushControl);
//handleCMD_ticker();
// sCmd.addCommand("time", time);
// sCmd.addCommand("timeSet", timeSet);
//======новые виджеты ver2.0=======// //======новые виджеты ver2.0=======//
sCmd.addCommand("inputText", inputText); sCmd.addCommand("inputText", inputText);
sCmd.addCommand("inputTextSet", inputTextSet); sCmd.addCommand("inputTextSet", inputTextSet);
@@ -54,75 +46,12 @@ void CMD_init() {
sCmd.addCommand("inputDate", inputDate); sCmd.addCommand("inputDate", inputDate);
//sCmd.addCommand("inputDropdown", inputDropdown); //sCmd.addCommand("inputDropdown", inputDropdown);
//=================================// //=================================//
} }
void inputText() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number);
}
void inputTextSet() {
String number = sCmd.next();
String value = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, value);
sendSTATUS("inputTextSet" + number, value);
}
void inputTime() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
jsonWrite(configJson, "inputTimeSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number);
}
void inputTimeSet() {
String number = sCmd.next();
String value = sCmd.next();
value.replace(":", ".");
jsonWrite(configJson, "inputTimeSet" + number, value);
value.replace(".", ":");
sendSTATUS("inputTimeSet" + number, value);
}
void inputDate() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number);
}
void inputDateSet() {
String number = sCmd.next();
String value = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, value);
sendSTATUS("inputDateSet" + number, value);
}
//========================================================================================================== //==========================================================================================================
//==========================================Модуль кнопок=================================================== //==========================================Модуль кнопок===================================================
void button() { void button() {
@@ -310,7 +239,7 @@ void text() {
String page_name = sCmd.next(); String page_name = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "textSet" + number); createViget (viget_name, page_name, page_number, "vigets/viget.anydata.json", "textSet" + number);
} }
@@ -331,6 +260,64 @@ void textSet() {
sendSTATUS("textSet" + number, text); sendSTATUS("textSet" + number, text);
} }
//====================================================================================================================================================
void inputText() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number);
}
void inputTextSet() {
String number = sCmd.next();
String value = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, value);
sendSTATUS("inputTextSet" + number, value);
}
void inputTime() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
jsonWrite(configJson, "inputTimeSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number);
}
void inputTimeSet() {
String number = sCmd.next();
String value = sCmd.next();
value.replace(":", ".");
jsonWrite(configJson, "inputTimeSet" + number, value);
value.replace(".", ":");
sendSTATUS("inputTimeSet" + number, value);
}
void inputDate() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number);
}
void inputDateSet() {
String number = sCmd.next();
String value = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, value);
sendSTATUS("inputDateSet" + number, value);
}
//=================================================Глобальные команды удаленного управления=========================================================== //=================================================Глобальные команды удаленного управления===========================================================
void mqttOrderSend() { void mqttOrderSend() {
@@ -441,6 +428,8 @@ void createViget (String viget_name, String page_name, String page_number, Stri
all_vigets += viget + "\r\n"; all_vigets += viget + "\r\n";
viget = ""; viget = "";
} }
/*
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value) { void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value) {
String viget; String viget;
@@ -489,7 +478,7 @@ void createViget (String viget_name, String page_name, String page_number, Stri
all_vigets += viget + "\r\n"; all_vigets += viget + "\r\n";
viget = ""; viget = "";
} }
*/
String vidgetConfigWrite(String viget, String key, String value) { String vidgetConfigWrite(String viget, String key, String value) {
if (viget == "") return ""; if (viget == "") return "";

View File

@@ -1,6 +1,6 @@
void All_init() { void All_init() {
server.on("/all_modules_init", HTTP_GET, [](AsyncWebServerRequest * request) { server.on("/all_modules_init", HTTP_GET, [](AsyncWebServerRequest * request) {
Device_init(); Device_init();
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
}); });
@@ -31,15 +31,17 @@ void All_init() {
void Device_init() { void Device_init() {
ts.remove(LEVEL); //SENSORS-SECTION
ts.remove(ANALOG_); ts.remove(ANALOG_);
ts.remove(PH); ts.remove(LEVEL);
ts.remove(DALLAS); ts.remove(DALLAS);
ts.remove(DHTT);
ts.remove(DHTH);
//================
all_vigets = ""; all_vigets = "";
txtExecution("config.all.txt"); txtExecution("config.all.txt");
//outcoming_date(); //outcoming_date();
} }
//-------------------------------сценарии----------------------------------------------------- //-------------------------------сценарии-----------------------------------------------------

View File

@@ -1,7 +1,6 @@
//=============================================================================================================================== //===============================================================================================================================
//=========================================Модуль аналогового сенсора============================================================ //=========================================Модуль аналогового сенсора============================================================
void analog() { void analog() {
static boolean flag = true;
String pin = sCmd.next(); String pin = sCmd.next();
String viget_name = sCmd.next(); String viget_name = sCmd.next();
String page_name = sCmd.next(); String page_name = sCmd.next();
@@ -11,29 +10,26 @@ void analog() {
String analog_start_out = sCmd.next(); String analog_start_out = sCmd.next();
String analog_end_out = sCmd.next(); String analog_end_out = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
jsonWrite(optionJson, "analog_start", analog_start); jsonWrite(optionJson, "analog_start", analog_start);
jsonWrite(optionJson, "analog_end", analog_end); jsonWrite(optionJson, "analog_end", analog_end);
jsonWrite(optionJson, "analog_start_out", analog_start_out); jsonWrite(optionJson, "analog_start_out", analog_start_out);
jsonWrite(optionJson, "analog_end_out", analog_end_out); jsonWrite(optionJson, "analog_end_out", analog_end_out);
choose_viget_and_create(viget_name, page_name, page_number, type, "analog"); choose_viget_and_create(viget_name, page_name, page_number, type, "analog");
ts.add(ANALOG_, analog_update_int, [&](void*) { ts.add(ANALOG_, analog_update_int, [&](void*) {
static int analog_old; static int analog_old;
#ifdef ESP32
int analog_in = analogRead(pin.toInt()); int analog_in = analogRead(pin.toInt());
#endif
#ifdef ESP8266
int analog_in = analogRead(A0);
#endif
jsonWrite(configJson, "analog_in", analog_in); jsonWrite(configJson, "analog_in", analog_in);
int analog = map(analog_in, int analog = map(analog_in,
jsonReadtoInt(optionJson, "analog_start") , jsonReadtoInt(optionJson, "analog_start") ,
jsonReadtoInt(optionJson, "analog_end"), jsonReadtoInt(optionJson, "analog_end"),
jsonReadtoInt(optionJson, "analog_start_out"), jsonReadtoInt(optionJson, "analog_start_out"),
jsonReadtoInt(optionJson, "analog_end_out")); jsonReadtoInt(optionJson, "analog_end_out"));
jsonWrite(configJson, "analog", analog); jsonWrite(configJson, "analog", analog);
// if (analog_old != analog) { // if (analog_old != analog) {
eventGen ("analog", ""); eventGen ("analog", "");
sendSTATUS("analog", String(analog)); sendSTATUS("analog", String(analog));
@@ -41,95 +37,30 @@ void analog() {
Serial.println("[i] sensor analog send date " + String(analog)); Serial.println("[i] sensor analog send date " + String(analog));
} }
// } // }
analog_old = analog; analog_old = analog;
}, nullptr, true); }, nullptr, true);
} }
//===============================================================================================================================
//=========================================Модуль аналогового сенсора============================================================
void ph() {
String viget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String offset = sCmd.next();
String page_number = sCmd.next();
jsonWrite(optionJson, "ph_offset", offset);
if (type == "text") createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "ph");
if (type == "gauge") createViget (viget_name, page_name, page_number, "vigets/viget.fillgauge.json", "ph");
if (type == "gauge2") createViget (viget_name, page_name, page_number, "vigets/viget.gauge.json", "ph");
if (type == "termometr") createViget (viget_name, page_name, page_number, "vigets/viget.termometr.json", "ph", "titleString", viget_name);
ts.add(PH, ph_shooting_interval, [&](void*) {
static float pHValue_old;
static int counter;
float offset = jsonRead(optionJson, "ph_offset").toFloat();
int analog = analogRead(A0);
analog = medianFilter.filtered(analog);
float voltage = analog * 3.2 / 1024;
float pHValue = 3.5 * voltage + offset;
String pHValue_str = String(pHValue);
pHValue_str = selectToMarkerPlus(pHValue_str, "." , 2);
counter++;
if (counter > ph_times_to_send) {
counter = 0;
jsonWrite(configJson, "ph", pHValue_str);
//if (pHValue_old != pHValue) {
eventGen ("ph", "");
sendSTATUS("ph", pHValue_str);
if (client.connected()) {
Serial.println("[i] sensor ph send date " + pHValue_str);
Serial.println("voltage " + String(voltage));
}
//}
pHValue_old = pHValue;
}
}, nullptr, true);
}
//=================================================================================================================================== //===================================================================================================================================
//=========================================Модуль измерения уровня в баке============================================================ //=========================================Модуль измерения уровня в баке============================================================
void level() { void level() {
static boolean flag = true;
String viget_name = sCmd.next(); String viget_name = sCmd.next();
String page_name = sCmd.next(); String page_name = sCmd.next();
String type = sCmd.next(); String type = sCmd.next();
String empty_level = sCmd.next(); String empty_level = sCmd.next();
String full_level = sCmd.next(); String full_level = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
jsonWrite(optionJson, "empty_level", empty_level); jsonWrite(optionJson, "empty_level", empty_level);
jsonWrite(optionJson, "full_level", full_level); jsonWrite(optionJson, "full_level", full_level);
pinMode(14, OUTPUT); pinMode(14, OUTPUT);
pinMode(12, INPUT); pinMode(12, INPUT);
choose_viget_and_create(viget_name, page_name, page_number, type, "level");
if (type == "text") createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "level");
if (type == "gauge") createViget (viget_name, page_name, page_number, "vigets/viget.fillgauge.json", "level");
if (type == "gauge2") createViget (viget_name, page_name, page_number, "vigets/viget.gauge.json", "level", "maximum", "100");
if (type == "termometr") createViget (viget_name, page_name, page_number, "vigets/viget.termometr.json", "level", "titleString", viget_name);
ts.add(LEVEL, tank_level_shooting_interval, [&](void*) { ts.add(LEVEL, tank_level_shooting_interval, [&](void*) {
long duration_; long duration_;
int distance_cm; int distance_cm;
int level; int level;
static int level_old; //переменная static сохраняет свое значение между вызовами функции static int level_old; //переменная static сохраняет свое значение между вызовами функции
static int counter; static int counter;
digitalWrite(14, LOW); digitalWrite(14, LOW);
delayMicroseconds(2); delayMicroseconds(2);
digitalWrite(14, HIGH); digitalWrite(14, HIGH);
@@ -138,21 +69,15 @@ void level() {
duration_ = pulseIn(12, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m duration_ = pulseIn(12, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
distance_cm = duration_ / 29 / 2; distance_cm = duration_ / 29 / 2;
distance_cm = medianFilter.filtered(distance_cm);//отсечение промахов медианным фильтром distance_cm = medianFilter.filtered(distance_cm);//отсечение промахов медианным фильтром
counter++; counter++;
if (counter > tank_level_times_to_send) { if (counter > tank_level_times_to_send) {
counter = 0; counter = 0;
jsonWrite(configJson, "level_in", distance_cm); jsonWrite(configJson, "level_in", distance_cm);
level = map(distance_cm, level = map(distance_cm,
jsonReadtoInt(optionJson, "empty_level"), jsonReadtoInt(optionJson, "empty_level"),
jsonReadtoInt(optionJson, "full_level"), 0, 100); jsonReadtoInt(optionJson, "full_level"), 0, 100);
//jsonWrite(configJson, "level", level); //jsonWrite(configJson, "level", level);
//if (level_old != level) { //if (level_old != level) {
eventGen ("level", ""); eventGen ("level", "");
sendSTATUS("level", String(level)); sendSTATUS("level", String(level));
if (client.connected()) { if (client.connected()) {
@@ -167,33 +92,22 @@ void level() {
//========================================================================================================================================== //==========================================================================================================================================
//=========================================Модуль температурного сенсора ds18b20============================================================ //=========================================Модуль температурного сенсора ds18b20============================================================
void dallas() { void dallas() {
static boolean flag = true;
String pin = sCmd.next(); String pin = sCmd.next();
String viget_name = sCmd.next(); String viget_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();
oneWire = new OneWire((uint8_t) pin.toInt()); oneWire = new OneWire((uint8_t) pin.toInt());
sensors.setOneWire(oneWire); sensors.setOneWire(oneWire);
sensors.begin(); sensors.begin();
sensors.setResolution(12); sensors.setResolution(12);
choose_viget_and_create(viget_name, page_name, page_number, type, "dallas");
if (type == "text") createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "dallas");
if (type == "gauge") createViget (viget_name, page_name, page_number, "vigets/viget.fillgauge.json", "dallas");
if (type == "gauge2") createViget (viget_name, page_name, page_number, "vigets/viget.gauge.json", "dallas");
if (type == "termometr") createViget (viget_name, page_name, page_number, "vigets/viget.termometr.json", "dallas", "titleString", viget_name);
ts.add(DALLAS, temp_update_int, [&](void*) { ts.add(DALLAS, temp_update_int, [&](void*) {
float temp = 0; float temp = 0;
static float temp_old; static float temp_old;
sensors.requestTemperatures(); sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0); temp = sensors.getTempCByIndex(0);
jsonWrite(configJson, "dallas", String(temp)); jsonWrite(configJson, "dallas", String(temp));
//if (temp_old != temp) { //if (temp_old != temp) {
eventGen ("dallas", ""); eventGen ("dallas", "");
sendSTATUS("dallas", String(temp)); sendSTATUS("dallas", String(temp));
@@ -201,17 +115,71 @@ void dallas() {
Serial.println("[i] sensor dallas send date " + String(temp)); Serial.println("[i] sensor dallas send date " + String(temp));
} }
//} //}
temp_old = temp; temp_old = temp;
}, nullptr, true); }, nullptr, true);
} }
//======================================================================================================================
//=========================================Модуль сенсоров DHT==========================================================
void dhtT() {
String pin = sCmd.next();
String viget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String page_number = sCmd.next();
dht.setup(pin.toInt());
choose_viget_and_create(viget_name, page_name, page_number, type, "dhtT");
ts.add(DHTT, dhtT_update_int, [&](void*) {
int value = 0;
static int value_old;
value = dht.getTemperature();
jsonWrite(configJson, "dhtT", String(value));
//if (value_old != value) {
eventGen ("dhtT", "");
sendSTATUS("dhtT", String(value));
if (client.connected()) {
Serial.println("[i] sensor dhtT send date " + String(value));
}
//}
value_old = value;
}, nullptr, true);
}
void dhtH() {
String pin = sCmd.next();
String viget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String page_number = sCmd.next();
dht.setup(pin.toInt());
choose_viget_and_create(viget_name, page_name, page_number, type, "dhtH");
ts.add(DHTH, dhtH_update_int, [&](void*) {
int value = 0;
static int value_old;
value = dht.getHumidity();
jsonWrite(configJson, "dhtH", String(value));
//if (value_old != value) {
eventGen ("dhtH", "");
sendSTATUS("dhtH", String(value));
if (client.connected()) {
Serial.println("[i] sensor dhtH send date " + String(value));
}
//}
value_old = value;
}, nullptr, true);
}
void choose_viget_and_create(String viget_name, String page_name, String page_number, String type, String topik) { void choose_viget_and_create(String viget_name, String page_name, String page_number, String type, String topik) {
if (type == "any-data") createViget (viget_name, page_name, page_number, "vigets/viget.anydata.json", topik);
if (type == "progress-line") createViget (viget_name, page_name, page_number, "vigets/viget.progressL.json", topik); if (type == "progress-line") createViget (viget_name, page_name, page_number, "vigets/viget.progressL.json", topik);
if (type == "progress-round") createViget (viget_name, page_name, page_number,"vigets/viget.progressR.json", topik); if (type == "progress-round") createViget (viget_name, page_name, page_number, "vigets/viget.progressR.json", topik);
} }
//====================================================================================================================== //======================================================================================================================
//===============================================Логирование============================================================ //===============================================Логирование============================================================
@@ -232,12 +200,12 @@ void logging() {
if (sensor_name == "level") jsonWrite(optionJson, "level_logging_count", maxCount); if (sensor_name == "level") jsonWrite(optionJson, "level_logging_count", maxCount);
if (sensor_name == "dallas") jsonWrite(optionJson, "dallas_logging_count", maxCount); if (sensor_name == "dallas") jsonWrite(optionJson, "dallas_logging_count", maxCount);
if (sensor_name == "ph") jsonWrite(optionJson, "ph_logging_count", maxCount); if (sensor_name == "ph") jsonWrite(optionJson, "ph_logging_count", maxCount);
/*
if (sensor_name == "analog") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loganalog", "maxCount", maxCount); if (sensor_name == "analog") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loganalog", "maxCount", maxCount);
if (sensor_name == "level") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loglevel", "maxCount", maxCount); if (sensor_name == "level") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loglevel", "maxCount", maxCount);
if (sensor_name == "dallas") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logdallas", "maxCount", maxCount); if (sensor_name == "dallas") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logdallas", "maxCount", maxCount);
if (sensor_name == "ph") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logph", "maxCount", maxCount); if (sensor_name == "ph") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logph", "maxCount", maxCount);
*/
if (sensor_name == "analog") { if (sensor_name == "analog") {
flagLoggingAnalog = true; flagLoggingAnalog = true;
ts.remove(ANALOG_LOG); ts.remove(ANALOG_LOG);

View File

@@ -1,6 +1,6 @@
void Web_server_init() { void Web_server_init() {
//========================================OTA============================================ //========================================OTA============================================
#ifdef OTA_enable #ifdef OTA_enable
//Send OTA events to the browser //Send OTA events to the browser
ArduinoOTA.onStart([]() { ArduinoOTA.onStart([]() {
@@ -28,14 +28,14 @@ void Web_server_init() {
ArduinoOTA.begin(); ArduinoOTA.begin();
#endif #endif
//========================================MDNS============================================ //========================================MDNS============================================
#ifdef MDNS_enable #ifdef MDNS_enable
MDNS.addService("http", "tcp", 80); MDNS.addService("http", "tcp", 80);
#endif #endif
//SPIFFS.begin(); //SPIFFS.begin();
//========================================WS============================================ //========================================WS============================================
#ifdef WS_enable #ifdef WS_enable
ws.onEvent(onWsEvent); ws.onEvent(onWsEvent);
server.addHandler(&ws); server.addHandler(&ws);
@@ -46,12 +46,12 @@ void Web_server_init() {
server.addHandler(&events); server.addHandler(&events);
#endif #endif
//====================================================================================== //======================================================================================
#ifdef ESP32 #ifdef ESP32
server.addHandler(new SPIFFSEditor(SPIFFS, http_username, http_password)); server.addHandler(new SPIFFSEditor(SPIFFS, jsonRead(configSetup, "web_login").c_str(), jsonRead(configSetup, "web_pass").c_str()));
#elif defined(ESP8266) #elif defined(ESP8266)
server.addHandler(new SPIFFSEditor(http_username, http_password)); server.addHandler(new SPIFFSEditor(jsonRead(configSetup, "web_login").c_str(), jsonRead(configSetup, "web_pass").c_str()));
#endif #endif
server.on("/heap", HTTP_GET, [](AsyncWebServerRequest * request) { server.on("/heap", HTTP_GET, [](AsyncWebServerRequest * request) {
@@ -64,7 +64,7 @@ void Web_server_init() {
server.serveStatic("/", SPIFFS, "/favicon.ico").setCacheControl("max-age=31536000"); server.serveStatic("/", SPIFFS, "/favicon.ico").setCacheControl("max-age=31536000");
server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm") server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm")
.setAuthentication(http_username, http_password); .setAuthentication(jsonRead(configSetup, "web_login").c_str(), jsonRead(configSetup, "web_pass").c_str());
server.onNotFound([](AsyncWebServerRequest * request) { server.onNotFound([](AsyncWebServerRequest * request) {
@@ -145,7 +145,7 @@ void Web_server_init() {
request->send(200, "application/json", configSetup); request->send(200, "application/json", configSetup);
}); });
} }
//========================================WS========================================================================================= //========================================WS=========================================================================================
#ifdef WS_enable #ifdef WS_enable
void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) { void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) {
if (type == WS_EVT_CONNECT) { if (type == WS_EVT_CONNECT) {

View File

@@ -23,6 +23,26 @@ void WIFI_init() {
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
}); });
// --------------------Получаем логин и пароль для web со страницы
server.on("/web", HTTP_GET, [](AsyncWebServerRequest * request) {
if (request->hasArg("web_login")) {
jsonWrite(configSetup, "web_login", request->getParam("web_login")->value());
}
if (request->hasArg("web_pass")) {
jsonWrite(configSetup, "web_pass", request->getParam("web_pass")->value());
}
saveConfig(); // Функция сохранения данных во Flash
//Web_server_init();
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
});
server.on("/restart", HTTP_GET, [](AsyncWebServerRequest * request) {
if (request->hasArg("device")) {
if (request->getParam("device")->value() == "ok") ESP.restart();
}
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
});
// Попытка подключения к точке доступа // Попытка подключения к точке доступа
@@ -86,7 +106,7 @@ bool StartAPMode() {
Serial.println(myIP); Serial.println(myIP);
if (jsonReadtoInt(optionJson, "pass_status") != 1) { if (jsonReadtoInt(optionJson, "pass_status") != 1) {
ts.add(ROUTER_SEARCHING, 30 * 1000, [&](void*) { ts.add(ROUTER_SEARCHING, 10 * 1000, [&](void*) {
Serial.println("->try find router"); Serial.println("->try find router");
if (RouterFind(jsonRead(configSetup, "ssid"))) { if (RouterFind(jsonRead(configSetup, "ssid"))) {
ts.remove(ROUTER_SEARCHING); ts.remove(ROUTER_SEARCHING);

View File

@@ -1,8 +1,20 @@
button 1 na Включить#все Освещение 0 1 button 1 na Включить#все Реле 0 1
button 2 13 Прихожая Освещение 0 2 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 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6 //analog 0 Аналоговый#вход,#% Датчики progress-line 1 1024 1 1024 6
button 4 na вкл:#>10,##выкл:#<10 Датчики 0 7 //dallas 2 Водонагреватель,#t°C Датчики any-data 7
inputDigit digit1 введите#число Датчики 10 8 dhtT 2 Температура#DHT,#t°C Датчики any-data 8
dhtH 2 Влажность#DHT,#% Датчики any-data 9
//level Вода#в#баке,#% Датчики any-data 125 20 10
button 4 na вкл:#>10,##выкл:#<10 Датчики 0 11
inputDigit digit1 При#скольки#включить? Датчики 10 12
button 5 na Вкл#обратный#таймер Таймеры 0 13
inputDigit digit2 Через#сколько#секунд#включить? Таймеры 5 14
button 6 5 Включится#по#таймеру Таймеры 0 15
switch 1 0 20
textSet 1 неопределено
text 1 Квартира Двери 22
button 7 scenario Вкл#выкл#все#сценарии Сценарии 1 23
button 8 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24

View File

@@ -1 +1 @@
{"SSDP":"MODULES","chipID":"4039078204","ssidAP":"WiFi","passwordAP":"","ssid":"rise","password":"hostel3333","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"v670C4F8A2581A11"} {"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"rise","password":"hostel3333","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"v7C133E426B0C69E","web_login":"admin","web_pass":"admin"}

View File

@@ -13,4 +13,16 @@ buttonSet 4 1
end end
analog < digit1 analog < digit1
buttonSet 4 0 buttonSet 4 0
end
button5 = 1
timerStart 1 digit2 sec
end
timer1 = 0
buttonSet 6 1
end
switch1 = 1
textSet 1 закрыто
end
switch1 = 0
textSet 1 открыто
end end

View File

@@ -62,65 +62,18 @@
"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": "h2",
"title": "Временная зона GMT"
},
{
"type": "input",
"title": "{{LangSpace}}",
"name":"timeZone",
"state": "{{timezone}}",
"pattern": "[0-9-]{1,3}"
},
{
"type": "button",
"module":"",
"title": "Сохранить",
"class": "btn btn-block btn-success",
"action": "timeZone?timeZone=[[timeZone]]"
},
{
"type": "link",
"title": "Автоопределение зоны",
"action": "javascript:set_time_zone(this);",
"class": "btn btn-block btn-primary"
},
{
"type": "time",
"name":"times1",
"title": "На устройстве сейчас",
"state":"{{time}}"
},
{
"type": "button",
"response":"[[&#116imes1]]",
"title": "Синхронизировать",
"class": "btn btn-block btn-primary",
"action": "Time"
},
{
"type": "hr" "type": "hr"
}, },
{ {
"type": "h2", "type": "h2",
"title": "Точка доступа" "title": "Точка доступа"
}, },
{
"type": "text",
"title": "После того как устройство подключается к роутеру, его Wi-Fi исчезнет.",
"class": "alert alert-warning",
"style": "width:45%;float:right;"
},
{ {
"type": "input", "type": "input",
"title": "Имя WI-FI сети", "title": "Имя WI-FI сети",
"name":"ssidap", "name":"ssidap",
"state": "{{ssidAP}}", "state": "{{ssidAP}}",
"style": "width:50%;display:inline",
"pattern": ".{1,20}" "pattern": ".{1,20}"
}, },
{ {
@@ -128,19 +81,41 @@
"title": "Пароль", "title": "Пароль",
"name":"ssidApPass", "name":"ssidApPass",
"state": "{{passwordAP}}", "state": "{{passwordAP}}",
"style": "width:50%;display:inline",
"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"
"style": "width:50%;display:inline" },
{
"type": "hr"
}, },
{ {
"type": "hr" "type": "h2",
}, "title": "Логин и пароль web interface"
},
{
"type": "input",
"title": "Логин",
"name":"web-login",
"state": "{{web_login}}",
"pattern": ".{1,20}"
},
{
"type": "password",
"title": "Пароль",
"name":"web-pass",
"state": "{{web_pass}}",
"pattern": ".{1,20}"
},
{
"type": "button",
"title": "Сохранить",
"action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]",
"class": "btn btn-block btn-success"
},
{ {
"type": "hr" "type": "hr"
}, },

View File

@@ -0,0 +1,5 @@
{
"widget" : "anydata",
"after" : "",
"icon" : ""
}

View File

@@ -1,6 +1,5 @@
{ {
"widget" : "input", "widget" : "input",
"size" : "small", "color" : "blue",
"color" : "orange",
"type" : "number" "type" : "number"
} }

View File

@@ -1,5 +1,5 @@
{ {
"widget" : "toggle", "widget" : "toggle",
"icon" : "sunny", "icon" : "",
"iconOff" : "moon" "iconOff" : ""
} }

View File

@@ -5,7 +5,6 @@ void setup() {
Serial.begin(115200); Serial.begin(115200);
Serial.setDebugOutput(true); Serial.setDebugOutput(true);
Serial.println("--------------started----------------"); Serial.println("--------------started----------------");
//-------------------------------------------------------------- //--------------------------------------------------------------
SPIFFS.begin(); SPIFFS.begin();
configSetup = readFile("config.json", 4096); configSetup = readFile("config.json", 4096);
@@ -47,25 +46,28 @@ void setup() {
MQTT_init(); MQTT_init();
Serial.println("[V] MQTT_init"); Serial.println("[V] MQTT_init");
//-------------------------------------------------------------- //--------------------------------------------------------------
Push_init();
Serial.println("[V] Push_init");
getMemoryLoad("[i] After loading"); getMemoryLoad("[i] After loading");
ts.add(TEST, 1000, [&](void*) { // ts.add(TEST, 1000, [&](void*) {
//getMemoryLoad("[i] Periodic check"); //getMemoryLoad("[i] Periodic check");
}, nullptr, true); // }, nullptr, true);
} }
void loop() { void loop() {
#ifdef OTA_enable
ArduinoOTA.handle();
#endif
#ifdef WS_enable #ifdef OTA_enable
ArduinoOTA.handle();
#endif
#ifdef WS_enable
ws.cleanupClients(); ws.cleanupClients();
#endif #endif

View File

@@ -271,9 +271,11 @@ void getMemoryLoad(String text) {
int memory_load = memory_used * 100 / all_memory; int memory_load = memory_used * 100 / all_memory;
if (memory_load > 65) Serial.print("Attention!!! too match memory used!!!"); if (memory_load > 65) Serial.print("Attention!!! too match memory used!!!");
Serial.print(text + " memory used:"); Serial.print(text + " memory used:");
Serial.println(String(memory_load) + "%"); Serial.print(String(memory_load) + "%; ");
Serial.print("memory remain:");
Serial.println(String(memory_remain) + " k bytes");
} }
//esp32 full memory = 362868 //esp32 full memory = 362868 k bytes
//esp8266 full memory = 53312 //esp8266 full memory = 53312 k bytes

58
push_pushingbox.ino Normal file
View File

@@ -0,0 +1,58 @@
void Push_init() {
server.on("/pushingboxDate", HTTP_GET, [](AsyncWebServerRequest * request) {
if (request->hasArg("pushingbox_id")) {
jsonWrite(configSetup, "pushingbox_id", request->getParam("pushingbox_id")->value());
}
saveConfig();
request->send(200, "text/text", "ok"); // отправляем ответ о выполнении
});
}
void pushControl() {
String title = sCmd.next();
title.replace("#", " ");
String body = sCmd.next();
body.replace("#", " ");
static String body_old;
const char* logServer = "api.pushingbox.com";
String deviceId = jsonRead(configSetup, "pushingbox_id");
Serial.println("- starting client");
WiFiClient client;
Serial.println("- connecting to pushing server: " + String(logServer));
if (client.connect(logServer, 80)) {
Serial.println("- succesfully connected");
String postStr = "devid=";
postStr += String(deviceId);
postStr += "&title=";
postStr += String(title);
postStr += "&body=";
postStr += String(body);
postStr += "\r\n\r\n";
Serial.println("- sending data...");
client.print("POST /pushingbox HTTP/1.1\n");
client.print("Host: api.pushingbox.com\n");
client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
}
client.stop();
Serial.println("- stopping the client");
}

23
set.h
View File

@@ -35,7 +35,7 @@ AsyncEventSource events("/events");
#include "time.h" #include "time.h"
#include <TickerScheduler.h> #include <TickerScheduler.h>
TickerScheduler ts(30); TickerScheduler ts(30);
enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, PH, DALLAS, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TEST}; enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TEST};
//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure //ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
#include <PubSubClient.h> #include <PubSubClient.h>
@@ -58,9 +58,15 @@ GMedian medianFilter;
#include <DallasTemperature.h> #include <DallasTemperature.h>
OneWire *oneWire; OneWire *oneWire;
DallasTemperature sensors; DallasTemperature sensors;
//----------------------------------------------------------------
#include <DHT.h> //https://github.com/markruys/arduino-DHT
DHT dht;
//----------------------------------------------------------------
#include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021
Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021();
//----------------------------------------------------------------- //-----------------------------------------------------------------
//#define OTA_enable //#define OTA_enable
//----------------------------------------------------------------- //-----------------------------------------------------------------
//#define MDNS_enable //#define MDNS_enable
@@ -68,9 +74,7 @@ DallasTemperature sensors;
//#define WS_enable //#define WS_enable
//----------------------------------------------------------------- //-----------------------------------------------------------------
#define wifi_mqtt_reconnecting 20000
#define wifi_mqtt_reconnecting 60000
//----------------------------------------------------------------- //-----------------------------------------------------------------
#define analog_update_int 5000 #define analog_update_int 5000
//----------------------------------------------------------------- //-----------------------------------------------------------------
@@ -82,11 +86,12 @@ DallasTemperature sensors;
#define tank_level_shooting_interval 500 //интервал выстрела датчика #define tank_level_shooting_interval 500 //интервал выстрела датчика
#define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных #define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных
//----------------------------------------------------------------- //-----------------------------------------------------------------
#define dhtT_update_int 5000
#define dhtH_update_int 5000
//-----------------------------------------------------------------
const char* hostName = "esp-async"; const char* hostName = "esp-async";
const char* http_username = "admin";
const char* http_password = "admin";
String configSetup = "{}"; String configSetup = "{}";
String configJson = "{}"; String configJson = "{}";
@@ -96,7 +101,7 @@ String chipID = "";
String prefix = "/IoTmanager"; String prefix = "/IoTmanager";
String prex; String prex;
String ids; String ids;
//boolean busy; //boolean busy;
String all_vigets = ""; String all_vigets = "";
String scenario; String scenario;