2019-12-24 11:53:26 +03:00
|
|
|
|
//===============================================================================================================================
|
|
|
|
|
|
//=========================================Модуль аналогового сенсора============================================================
|
|
|
|
|
|
void analog() {
|
2020-02-08 02:45:35 +03:00
|
|
|
|
String pin = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2019-12-24 11:53:26 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String type = sCmd.next();
|
|
|
|
|
|
String analog_start = sCmd.next();
|
|
|
|
|
|
String analog_end = sCmd.next();
|
|
|
|
|
|
String analog_start_out = sCmd.next();
|
|
|
|
|
|
String analog_end_out = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteStr(optionJson, "analog_start", analog_start);
|
|
|
|
|
|
jsonWriteStr(optionJson, "analog_end", analog_end);
|
|
|
|
|
|
jsonWriteStr(optionJson, "analog_start_out", analog_start_out);
|
|
|
|
|
|
jsonWriteStr(optionJson, "analog_end_out", analog_end_out);
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, type, "analog");
|
2019-12-24 11:53:26 +03:00
|
|
|
|
ts.add(ANALOG_, analog_update_int, [&](void*) {
|
|
|
|
|
|
static int analog_old;
|
2020-02-10 01:06:18 +03:00
|
|
|
|
#ifdef ESP32
|
2020-02-13 20:20:34 +03:00
|
|
|
|
//int pin_int = pin.toInt();
|
2020-03-16 00:00:59 +01:00
|
|
|
|
int analog_in = analogRead(34);
|
2020-02-10 01:06:18 +03:00
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef ESP8266
|
|
|
|
|
|
int analog_in = analogRead(A0);
|
|
|
|
|
|
#endif
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteInt(configJson, "analog_in", analog_in);
|
2019-12-24 11:53:26 +03:00
|
|
|
|
int analog = map(analog_in,
|
|
|
|
|
|
jsonReadtoInt(optionJson, "analog_start") ,
|
|
|
|
|
|
jsonReadtoInt(optionJson, "analog_end"),
|
|
|
|
|
|
jsonReadtoInt(optionJson, "analog_start_out"),
|
|
|
|
|
|
jsonReadtoInt(optionJson, "analog_end_out"));
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteInt(configJson, "analog", analog);
|
2019-12-24 11:53:26 +03:00
|
|
|
|
// if (analog_old != analog) {
|
|
|
|
|
|
eventGen ("analog", "");
|
|
|
|
|
|
sendSTATUS("analog", String(analog));
|
|
|
|
|
|
if (client.connected()) {
|
2020-02-16 19:36:58 +03:00
|
|
|
|
Serial.println("[i] sensor 'analog' send date " + String(analog));
|
2019-12-24 11:53:26 +03:00
|
|
|
|
}
|
|
|
|
|
|
// }
|
|
|
|
|
|
analog_old = analog;
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//===================================================================================================================================
|
|
|
|
|
|
//=========================================Модуль измерения уровня в баке============================================================
|
|
|
|
|
|
void level() {
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2019-12-24 11:53:26 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String type = sCmd.next();
|
|
|
|
|
|
String empty_level = sCmd.next();
|
|
|
|
|
|
String full_level = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteStr(optionJson, "empty_level", empty_level);
|
|
|
|
|
|
jsonWriteStr(optionJson, "full_level", full_level);
|
2019-12-24 11:53:26 +03:00
|
|
|
|
pinMode(14, OUTPUT);
|
|
|
|
|
|
pinMode(12, INPUT);
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, type, "level");
|
2019-12-24 11:53:26 +03:00
|
|
|
|
ts.add(LEVEL, tank_level_shooting_interval, [&](void*) {
|
|
|
|
|
|
long duration_;
|
|
|
|
|
|
int distance_cm;
|
|
|
|
|
|
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;
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteInt(configJson, "level_in", distance_cm);
|
2019-12-24 11:53:26 +03:00
|
|
|
|
level = map(distance_cm,
|
|
|
|
|
|
jsonReadtoInt(optionJson, "empty_level"),
|
|
|
|
|
|
jsonReadtoInt(optionJson, "full_level"), 0, 100);
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteInt(configJson, "level", level);
|
2019-12-24 11:53:26 +03:00
|
|
|
|
//if (level_old != level) {
|
|
|
|
|
|
eventGen ("level", "");
|
|
|
|
|
|
sendSTATUS("level", String(level));
|
|
|
|
|
|
if (client.connected()) {
|
2020-02-16 19:36:58 +03:00
|
|
|
|
Serial.println("[i] sensor tank 'level' send date " + String(level));
|
2019-12-24 11:53:26 +03:00
|
|
|
|
}
|
|
|
|
|
|
//}
|
|
|
|
|
|
level_old = level;
|
|
|
|
|
|
}
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//==========================================================================================================================================
|
|
|
|
|
|
//=========================================Модуль температурного сенсора ds18b20============================================================
|
|
|
|
|
|
void dallas() {
|
|
|
|
|
|
String pin = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2019-12-24 11:53:26 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String type = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
|
|
|
|
|
oneWire = new OneWire((uint8_t) pin.toInt());
|
|
|
|
|
|
sensors.setOneWire(oneWire);
|
|
|
|
|
|
sensors.begin();
|
|
|
|
|
|
sensors.setResolution(12);
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, type, "dallas");
|
2019-12-24 11:53:26 +03:00
|
|
|
|
ts.add(DALLAS, temp_update_int, [&](void*) {
|
|
|
|
|
|
float temp = 0;
|
|
|
|
|
|
static float temp_old;
|
|
|
|
|
|
sensors.requestTemperatures();
|
|
|
|
|
|
temp = sensors.getTempCByIndex(0);
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteStr(configJson, "dallas", String(temp));
|
2019-12-24 11:53:26 +03:00
|
|
|
|
//if (temp_old != temp) {
|
|
|
|
|
|
eventGen ("dallas", "");
|
|
|
|
|
|
sendSTATUS("dallas", String(temp));
|
|
|
|
|
|
if (client.connected()) {
|
2020-02-16 19:36:58 +03:00
|
|
|
|
Serial.println("[i] sensor 'dallas' send date " + String(temp));
|
2019-12-24 11:53:26 +03:00
|
|
|
|
}
|
|
|
|
|
|
//}
|
|
|
|
|
|
temp_old = temp;
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-02-04 03:09:08 +03:00
|
|
|
|
|
2020-02-10 01:06:18 +03:00
|
|
|
|
//======================================================================================================================
|
|
|
|
|
|
//=========================================Модуль сенсоров DHT==========================================================
|
|
|
|
|
|
void dhtT() {
|
2020-02-15 20:17:25 +03:00
|
|
|
|
String sensor_type = sCmd.next();
|
2020-02-10 01:06:18 +03:00
|
|
|
|
String pin = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2020-02-10 01:06:18 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String type = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-02-15 20:17:25 +03:00
|
|
|
|
if (sensor_type == "DHT11") {
|
|
|
|
|
|
dht.setup(pin.toInt(), DHTesp::DHT11);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (sensor_type == "DHT22") {
|
|
|
|
|
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
|
|
|
|
|
}
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, type, "dhtT");
|
2020-02-19 03:14:21 +03:00
|
|
|
|
ts.add(DHTT, dhtT_update_int, [&](void*) { //dht.getMinimumSamplingPeriod()
|
2020-02-15 20:17:25 +03:00
|
|
|
|
float value = 0;
|
|
|
|
|
|
static float value_old;
|
2020-02-19 03:14:21 +03:00
|
|
|
|
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) {
|
2020-03-27 15:48:17 +01:00
|
|
|
|
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));
|
|
|
|
|
|
}
|
|
|
|
|
|
//}
|
2020-02-19 03:14:21 +03:00
|
|
|
|
}
|
|
|
|
|
|
value_old = value;
|
2020-02-10 01:06:18 +03:00
|
|
|
|
}
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void dhtH() {
|
2020-02-15 20:17:25 +03:00
|
|
|
|
String sensor_type = sCmd.next();
|
2020-02-10 01:06:18 +03:00
|
|
|
|
String pin = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2020-02-10 01:06:18 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String type = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-02-15 20:17:25 +03:00
|
|
|
|
if (sensor_type == "DHT11") {
|
|
|
|
|
|
dht.setup(pin.toInt(), DHTesp::DHT11);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (sensor_type == "DHT22") {
|
|
|
|
|
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
|
|
|
|
|
}
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, type, "dhtH");
|
2020-02-19 03:14:21 +03:00
|
|
|
|
ts.add(DHTH, dhtH_update_int , [&](void*) { //dht.getMinimumSamplingPeriod()
|
2020-02-10 01:06:18 +03:00
|
|
|
|
int value = 0;
|
|
|
|
|
|
static int value_old;
|
2020-02-19 03:14:21 +03:00
|
|
|
|
static int counter;
|
|
|
|
|
|
if (dht.getStatus() != 0 && counter < 5) {
|
|
|
|
|
|
sendSTATUS("dhtH", String(dht.getStatusString()));
|
|
|
|
|
|
counter++;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
counter = 0;
|
|
|
|
|
|
value = dht.getHumidity();
|
2020-03-30 01:45:42 +02:00
|
|
|
|
if (String(value) != "nan" || value <= 100 || value >= 0) {
|
2020-03-27 15:48:17 +01:00
|
|
|
|
//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));
|
|
|
|
|
|
}
|
|
|
|
|
|
//}
|
2020-02-19 03:14:21 +03:00
|
|
|
|
}
|
|
|
|
|
|
value_old = value;
|
2020-02-10 01:06:18 +03:00
|
|
|
|
}
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-02-15 20:17:25 +03:00
|
|
|
|
void dhtPerception() {
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2020-02-15 20:17:25 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtPerception");
|
2020-02-16 19:36:58 +03:00
|
|
|
|
ts.add(DHTP, dht_calculation_update_int, [&](void*) {
|
2020-02-15 20:17:25 +03:00
|
|
|
|
byte value;
|
2020-02-19 03:14:21 +03:00
|
|
|
|
if (dht.getStatus() != 0) {
|
|
|
|
|
|
sendSTATUS("dhtPerception", String(dht.getStatusString()));
|
|
|
|
|
|
} else {
|
|
|
|
|
|
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
|
|
|
|
|
String final_line = perception(value);
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteStr(configJson, "dhtPerception", final_line);
|
2020-02-19 03:14:21 +03:00
|
|
|
|
eventGen ("dhtPerception", "");
|
|
|
|
|
|
sendSTATUS("dhtPerception", final_line);
|
|
|
|
|
|
if (client.connected()) {
|
|
|
|
|
|
Serial.println("[i] sensor 'dhtPerception' send date " + final_line);
|
|
|
|
|
|
}
|
2020-02-15 20:17:25 +03:00
|
|
|
|
}
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String perception(byte value) {
|
|
|
|
|
|
if (value == 0) return "Сухой воздух";
|
|
|
|
|
|
if (value == 1) return "Комфортно";
|
|
|
|
|
|
if (value == 2) return "Уютно";
|
|
|
|
|
|
if (value == 3) return "Хорошо";
|
|
|
|
|
|
if (value == 4) return "Неудобно";
|
|
|
|
|
|
if (value == 5) return "Довольно неудобно";
|
|
|
|
|
|
if (value == 6) return "Очень неудобно";
|
|
|
|
|
|
if (value == 7) return "Сильно неудобно, полный звиздец";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void dhtComfort() {
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2020-02-15 20:17:25 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtComfort");
|
2020-02-16 19:36:58 +03:00
|
|
|
|
ts.add(DHTC, dht_calculation_update_int, [&](void*) {
|
2020-02-15 20:17:25 +03:00
|
|
|
|
float value;
|
|
|
|
|
|
ComfortState cf;
|
2020-02-19 03:14:21 +03:00
|
|
|
|
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;
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteStr(configJson, "dhtComfort", final_line);
|
2020-02-19 03:14:21 +03:00
|
|
|
|
eventGen ("dhtComfort", "");
|
|
|
|
|
|
sendSTATUS("dhtComfort", final_line);
|
|
|
|
|
|
if (client.connected()) {
|
|
|
|
|
|
Serial.println("[i] sensor 'dhtComfort' send date " + final_line);
|
|
|
|
|
|
}
|
2020-02-15 20:17:25 +03:00
|
|
|
|
}
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-02-16 19:36:58 +03:00
|
|
|
|
void dhtDewpoint() {
|
2020-03-24 19:01:11 +01:00
|
|
|
|
String widget_name = sCmd.next();
|
2020-02-15 20:17:25 +03:00
|
|
|
|
String page_name = sCmd.next();
|
|
|
|
|
|
String page_number = sCmd.next();
|
2020-03-24 19:01:11 +01:00
|
|
|
|
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtDewpoint");
|
2020-02-16 19:36:58 +03:00
|
|
|
|
ts.add(DHTD, dht_calculation_update_int, [&](void*) {
|
|
|
|
|
|
float value;
|
2020-02-19 03:14:21 +03:00
|
|
|
|
if (dht.getStatus() != 0) {
|
|
|
|
|
|
sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
|
|
|
|
|
|
} else {
|
|
|
|
|
|
value = dht.computeDewPoint(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
2020-03-27 15:48:17 +01:00
|
|
|
|
jsonWriteInt(configJson, "dhtDewpoint", value);
|
2020-02-19 03:14:21 +03:00
|
|
|
|
eventGen ("dhtDewpoint", "");
|
|
|
|
|
|
sendSTATUS("dhtDewpoint", String(value));
|
|
|
|
|
|
if (client.connected()) {
|
|
|
|
|
|
Serial.println("[i] sensor 'dhtDewpoint' send date " + String(value));
|
|
|
|
|
|
}
|
2020-02-15 20:17:25 +03:00
|
|
|
|
}
|
|
|
|
|
|
}, nullptr, true);
|
|
|
|
|
|
}
|
2020-02-10 01:06:18 +03:00
|
|
|
|
|
|
|
|
|
|
|
2020-03-24 19:01:11 +01:00
|
|
|
|
void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik) {
|
2020-02-10 01:06:18 +03:00
|
|
|
|
|
2020-03-24 19:01:11 +01:00
|
|
|
|
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);
|
2020-02-10 01:06:18 +03:00
|
|
|
|
|
2020-02-04 03:09:08 +03:00
|
|
|
|
}
|