This commit is contained in:
Yuri Trikoz
2020-06-19 03:49:56 +03:00
parent 5494f61267
commit aa1ad777c9
3 changed files with 144 additions and 186 deletions

View File

@@ -114,8 +114,7 @@ extern AsyncEventSource events;
extern int sensors_reading_map[15]; extern int sensors_reading_map[15];
enum enum {
{
ROUTER_SEARCHING, ROUTER_SEARCHING,
WIFI_MQTT_CONNECTION_CHECK, WIFI_MQTT_CONNECTION_CHECK,
SENSORS, SENSORS,
@@ -154,7 +153,7 @@ extern int udp_period;
#ifdef level_enable #ifdef level_enable
#include "GyverFilters.h" #include "GyverFilters.h"
GMedian<10, int> medianFilter; extern GMedian<10, int> medianFilter;
#endif #endif
#include <DallasTemperature.h> #include <DallasTemperature.h>
@@ -163,23 +162,23 @@ extern OneWire *oneWire;
extern DallasTemperature sensors; extern DallasTemperature sensors;
#include <DHTesp.h> #include <DHTesp.h>
DHTesp dht; extern DHTesp dht;
#include <Wire.h> #include <Wire.h>
#ifdef bmp_enable #ifdef bmp_enable
#include <Adafruit_BMP280.h> #include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // use I2C interface extern Adafruit_BMP280 bmp;
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor(); extern Adafruit_Sensor *bmp_temp;
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor(); extern Adafruit_Sensor *bmp_pressure;
#endif #endif
#ifdef bme_enable #ifdef bme_enable
#include <Adafruit_BME280.h> #include <Adafruit_BME280.h>
Adafruit_BME280 bme; // use I2C interface extern Adafruit_BME280 bme;
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor(); extern Adafruit_Sensor *bme_temp;
Adafruit_Sensor *bme_pressure = bme.getPressureSensor(); extern Adafruit_Sensor *bme_pressure;
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor(); extern Adafruit_Sensor *bme_humidity;
#endif #endif
//#include <SoftwareSerial.h> //#include <SoftwareSerial.h>

View File

@@ -99,6 +99,24 @@ int udp_period;
// i2c // i2c
String i2c_list; String i2c_list;
extern OneWire *oneWire; OneWire *oneWire;
extern DallasTemperature sensors; DallasTemperature sensors;
DHTesp dht;
#ifdef level_enable
GMedian<10, int> medianFilter;
#endif
#ifdef bmp_enable
Adafruit_BMP280 bmp;
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
#endif
#ifdef bme_enable
Adafruit_BME280 bme;
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
#endif

View File

@@ -4,8 +4,7 @@ String perception(byte value);
void bmp280T_reading(); void bmp280T_reading();
String get_comfort_status(ComfortState cf); String get_comfort_status(ComfortState cf);
void sensors_init() void sensors_init() {
{
ts.add( ts.add(
SENSORS, 1000, [&](void *) { SENSORS, 1000, [&](void *) {
static int counter; static int counter;
@@ -16,8 +15,7 @@ void sensors_init()
level_reading(); level_reading();
#endif #endif
if (counter > 10) if (counter > 10) {
{
counter = 0; counter = 0;
#ifdef analog_enable #ifdef analog_enable
@@ -71,8 +69,7 @@ void sensors_init()
//=========================================Модуль измерения уровня в баке================================================================== //=========================================Модуль измерения уровня в баке==================================================================
#ifdef level_enable #ifdef level_enable
//level L 14 12 Вода#в#баке,#% Датчики fill-gauge 125 20 1 //level L 14 12 Вода#в#баке,#% Датчики fill-gauge 125 20 1
void level() void level() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String trig = sCmd.next(); String trig = sCmd.next();
String echo = sCmd.next(); String echo = sCmd.next();
@@ -93,8 +90,7 @@ void level()
sensors_reading_map[0] = 1; sensors_reading_map[0] = 1;
} }
void level_reading() void level_reading() {
{
long duration_; long duration_;
int distance_cm; int distance_cm;
int level; int level;
@@ -110,8 +106,7 @@ void level_reading()
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;
level = map(distance_cm, level = map(distance_cm,
jsonReadInt(optionJson, "e_lev"), jsonReadInt(optionJson, "e_lev"),
@@ -127,8 +122,7 @@ void level_reading()
//=========================================Модуль аналогового сенсора====================================================================== //=========================================Модуль аналогового сенсора======================================================================
#ifdef analog_enable #ifdef analog_enable
//analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1 //analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1
void analog() void analog() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String pin = sCmd.next(); String pin = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -146,18 +140,15 @@ void analog()
jsonWriteStr(optionJson, value_name + "_st_out", analog_start_out); jsonWriteStr(optionJson, value_name + "_st_out", analog_start_out);
jsonWriteStr(optionJson, value_name + "_end_out", analog_end_out); jsonWriteStr(optionJson, value_name + "_end_out", analog_end_out);
choose_widget_and_create(widget_name, page_name, page_number, type, value_name); choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
if (enter_to_analog_counter == 1) if (enter_to_analog_counter == 1) {
{
sensors_reading_map[1] = 1; sensors_reading_map[1] = 1;
} }
if (enter_to_analog_counter == 2) if (enter_to_analog_counter == 2) {
{
sensors_reading_map[2] = 1; sensors_reading_map[2] = 1;
} }
} }
void analog_reading1() void analog_reading1() {
{
String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 0); String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 0);
#ifdef ESP32 #ifdef ESP32
int analog_in = analogRead(34); int analog_in = analogRead(34);
@@ -176,8 +167,7 @@ void analog_reading1()
Serial.println("[i] sensor '" + value_name + "' data: " + String(analog)); Serial.println("[i] sensor '" + value_name + "' data: " + String(analog));
} }
void analog_reading2() void analog_reading2() {
{
String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 1); String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 1);
#ifdef ESP32 #ifdef ESP32
int analog_in = analogRead(35); int analog_in = analogRead(35);
@@ -199,8 +189,7 @@ void analog_reading2()
//========================================================================================================================================= //=========================================================================================================================================
//=========================================Модуль температурного сенсора ds18b20=========================================================== //=========================================Модуль температурного сенсора ds18b20===========================================================
#ifdef dallas_enable #ifdef dallas_enable
void dallas() void dallas() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String pin = sCmd.next(); String pin = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
@@ -216,8 +205,7 @@ void dallas()
sensors_reading_map[3] = 1; sensors_reading_map[3] = 1;
} }
void dallas_reading() void dallas_reading() {
{
float temp = 0; float temp = 0;
sensors.requestTemperatures(); sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0); temp = sensors.getTempCByIndex(0);
@@ -231,8 +219,7 @@ void dallas_reading()
//=========================================Модуль сенсоров DHT============================================================================= //=========================================Модуль сенсоров DHT=============================================================================
#ifdef dht_enable #ifdef dht_enable
//dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1 //dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
void dhtT() void dhtT() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String pin = sCmd.next(); String pin = sCmd.next();
String sensor_type = sCmd.next(); String sensor_type = sCmd.next();
@@ -241,33 +228,26 @@ void dhtT()
String type = sCmd.next(); String type = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
dhtT_value_name = value_name; dhtT_value_name = value_name;
if (sensor_type == "dht11") 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, value_name); choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
sensors_reading_map[4] = 1; sensors_reading_map[4] = 1;
} }
void dhtT_reading() void dhtT_reading() {
{
float value = 0; float value = 0;
static int counter; static int counter;
if (dht.getStatus() != 0 && counter < 5) if (dht.getStatus() != 0 && counter < 5) {
{
sendSTATUS(dhtT_value_name, String(dht.getStatusString())); sendSTATUS(dhtT_value_name, String(dht.getStatusString()));
counter++; counter++;
} } else {
else
{
counter = 0; counter = 0;
value = dht.getTemperature(); value = dht.getTemperature();
if (String(value) != "nan") if (String(value) != "nan") {
{
eventGen(dhtT_value_name, ""); eventGen(dhtT_value_name, "");
jsonWriteStr(configJson, dhtT_value_name, String(value)); jsonWriteStr(configJson, dhtT_value_name, String(value));
sendSTATUS(dhtT_value_name, String(value)); sendSTATUS(dhtT_value_name, String(value));
@@ -277,8 +257,7 @@ void dhtT_reading()
} }
//dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 1 //dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 1
void dhtH() void dhtH() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String pin = sCmd.next(); String pin = sCmd.next();
String sensor_type = sCmd.next(); String sensor_type = sCmd.next();
@@ -287,33 +266,26 @@ void dhtH()
String type = sCmd.next(); String type = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
dhtH_value_name = value_name; dhtH_value_name = value_name;
if (sensor_type == "dht11") 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, value_name); choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
sensors_reading_map[5] = 1; sensors_reading_map[5] = 1;
} }
void dhtH_reading() void dhtH_reading() {
{
float value = 0; float value = 0;
static int counter; static int counter;
if (dht.getStatus() != 0 && counter < 5) if (dht.getStatus() != 0 && counter < 5) {
{
sendSTATUS(dhtH_value_name, String(dht.getStatusString())); sendSTATUS(dhtH_value_name, String(dht.getStatusString()));
counter++; counter++;
} } else {
else
{
counter = 0; counter = 0;
value = dht.getHumidity(); value = dht.getHumidity();
if (String(value) != "nan") if (String(value) != "nan") {
{
eventGen(dhtH_value_name, ""); eventGen(dhtH_value_name, "");
jsonWriteStr(configJson, dhtH_value_name, String(value)); jsonWriteStr(configJson, dhtH_value_name, String(value));
sendSTATUS(dhtH_value_name, String(value)); sendSTATUS(dhtH_value_name, String(value));
@@ -323,8 +295,7 @@ void dhtH_reading()
} }
//dhtPerception Восприятие: Датчики 4 //dhtPerception Восприятие: Датчики 4
void dhtP() 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();
@@ -332,32 +303,25 @@ void dhtP()
sensors_reading_map[6] = 1; sensors_reading_map[6] = 1;
} }
void dhtP_reading() void dhtP_reading() {
{
byte value; byte value;
if (dht.getStatus() != 0) if (dht.getStatus() != 0) {
{
sendSTATUS("dhtPerception", String(dht.getStatusString())); sendSTATUS("dhtPerception", String(dht.getStatusString()));
} } else {
else
{
value = dht.computePerception(jsonReadStr(configJson, dhtT_value_name).toFloat(), jsonReadStr(configJson, dhtH_value_name).toFloat(), false); value = dht.computePerception(jsonReadStr(configJson, dhtT_value_name).toFloat(), jsonReadStr(configJson, dhtH_value_name).toFloat(), false);
String final_line = perception(value); String final_line = perception(value);
jsonWriteStr(configJson, "dhtPerception", final_line); jsonWriteStr(configJson, "dhtPerception", final_line);
eventGen("dhtPerception", ""); eventGen("dhtPerception", "");
sendSTATUS("dhtPerception", final_line); sendSTATUS("dhtPerception", final_line);
if (client_mqtt.connected()) if (client_mqtt.connected()) {
{
Serial.println("[i] sensor 'dhtPerception' data: " + final_line); Serial.println("[i] sensor 'dhtPerception' data: " + final_line);
} }
} }
} }
String perception(byte value) String perception(byte value) {
{
String res; String res;
switch (value) switch (value) {
{
case 0: case 0:
res = F("Сухой воздух"); res = F("Сухой воздух");
break; break;
@@ -389,8 +353,7 @@ String perception(byte value)
} }
//dhtComfort Степень#комфорта: Датчики 3 //dhtComfort Степень#комфорта: Датчики 3
void dhtC() 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();
@@ -398,15 +361,12 @@ void dhtC()
sensors_reading_map[7] = 1; sensors_reading_map[7] = 1;
} }
void dhtC_reading() void dhtC_reading() {
{ float value;
ComfortState cf; ComfortState cf;
if (dht.getStatus() != 0) if (dht.getStatus() != 0) {
{
sendSTATUS("dhtComfort", String(dht.getStatusString())); sendSTATUS("dhtComfort", String(dht.getStatusString()));
} } else {
else
{
value = dht.getComfortRatio(cf, jsonReadStr(configJson, dhtT_value_name).toFloat(), jsonReadStr(configJson, dhtH_value_name).toFloat(), false); value = dht.getComfortRatio(cf, jsonReadStr(configJson, dhtT_value_name).toFloat(), jsonReadStr(configJson, dhtH_value_name).toFloat(), false);
String final_line = get_comfort_status(cf); String final_line = get_comfort_status(cf);
jsonWriteStr(configJson, "dhtComfort", final_line); jsonWriteStr(configJson, "dhtComfort", final_line);
@@ -416,11 +376,9 @@ void dhtC_reading()
} }
} }
String get_comfort_status(ComfortState cf) String get_comfort_status(ComfortState cf) {
{
String comfortStatus; String comfortStatus;
switch (cf) switch (cf) {
{
case Comfort_OK: case Comfort_OK:
comfortStatus = "Отлично"; comfortStatus = "Отлично";
break; break;
@@ -456,8 +414,7 @@ String get_comfort_status(ComfortState cf)
} }
//dhtDewpoint Точка#росы: Датчики 5 //dhtDewpoint Точка#росы: Датчики 5
void dhtD() 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();
@@ -465,15 +422,11 @@ void dhtD()
sensors_reading_map[8] = 1; sensors_reading_map[8] = 1;
} }
void dhtD_reading() void dhtD_reading() {
{
float value; float value;
if (dht.getStatus() != 0) if (dht.getStatus() != 0) {
{
sendSTATUS("dhtDewpoint", String(dht.getStatusString())); sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
} } else {
else
{
value = dht.computeDewPoint(jsonReadStr(configJson, dhtT_value_name).toFloat(), jsonReadStr(configJson, dhtH_value_name).toFloat(), false); value = dht.computeDewPoint(jsonReadStr(configJson, dhtT_value_name).toFloat(), jsonReadStr(configJson, dhtH_value_name).toFloat(), false);
jsonWriteInt(configJson, "dhtDewpoint", value); jsonWriteInt(configJson, "dhtDewpoint", value);
eventGen("dhtDewpoint", ""); eventGen("dhtDewpoint", "");
@@ -487,8 +440,7 @@ void dhtD_reading()
//=========================================Модуль сенсоров bmp280========================================================================== //=========================================Модуль сенсоров bmp280==========================================================================
//bmp280T temp1 0x76 Температура#bmp280 Датчики any-data 1 //bmp280T temp1 0x76 Температура#bmp280 Датчики any-data 1
void bmp280T() void bmp280T() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -507,8 +459,7 @@ void bmp280T()
sensors_reading_map[9] = 1; sensors_reading_map[9] = 1;
} }
void bmp280T_reading() void bmp280T_reading() {
{
float value = 0; float value = 0;
sensors_event_t temp_event, pressure_event; sensors_event_t temp_event, pressure_event;
bmp_temp->getEvent(&temp_event); bmp_temp->getEvent(&temp_event);
@@ -520,8 +471,7 @@ void bmp280T_reading()
} }
//bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2 //bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2
void bmp280P() void bmp280P() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -540,8 +490,7 @@ void bmp280P()
sensors_reading_map[10] = 1; sensors_reading_map[10] = 1;
} }
void bmp280P_reading() void bmp280P_reading() {
{
float value = 0; float value = 0;
sensors_event_t temp_event, pressure_event; sensors_event_t temp_event, pressure_event;
bmp_pressure->getEvent(&pressure_event); bmp_pressure->getEvent(&pressure_event);
@@ -556,8 +505,7 @@ void bmp280P_reading()
//========================================================================================================================================= //=========================================================================================================================================
//=============================================Модуль сенсоров bme280====================================================================== //=============================================Модуль сенсоров bme280======================================================================
//bme280T temp1 0x76 Температура#bmp280 Датчики any-data 1 //bme280T temp1 0x76 Температура#bmp280 Датчики any-data 1
void bme280T() void bme280T() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -570,8 +518,7 @@ void bme280T()
sensors_reading_map[11] = 1; sensors_reading_map[11] = 1;
} }
void bme280T_reading() void bme280T_reading() {
{
float value = 0; float value = 0;
value = bme.readTemperature(); value = bme.readTemperature();
jsonWriteStr(configJson, bme280T_value_name, String(value)); jsonWriteStr(configJson, bme280T_value_name, String(value));
@@ -581,8 +528,7 @@ void bme280T_reading()
} }
//bme280P pres1 0x76 Давление#bmp280 Датчики any-data 1 //bme280P pres1 0x76 Давление#bmp280 Датчики any-data 1
void bme280P() void bme280P() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -595,8 +541,7 @@ void bme280P()
sensors_reading_map[12] = 1; sensors_reading_map[12] = 1;
} }
void bme280P_reading() void bme280P_reading() {
{
float value = 0; float value = 0;
value = bme.readPressure(); value = bme.readPressure();
value = value / 1.333224; value = value / 1.333224;
@@ -607,8 +552,7 @@ void bme280P_reading()
} }
//bme280H hum1 0x76 Влажность#bmp280 Датчики any-data 1 //bme280H hum1 0x76 Влажность#bmp280 Датчики any-data 1
void bme280H() void bme280H() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -621,8 +565,7 @@ void bme280H()
sensors_reading_map[13] = 1; sensors_reading_map[13] = 1;
} }
void bme280H_reading() void bme280H_reading() {
{
float value = 0; float value = 0;
value = bme.readHumidity(); value = bme.readHumidity();
jsonWriteStr(configJson, bme280H_value_name, String(value)); jsonWriteStr(configJson, bme280H_value_name, String(value));
@@ -632,8 +575,7 @@ void bme280H_reading()
} }
//bme280A altit1 0x76 Высота#bmp280 Датчики any-data 1 //bme280A altit1 0x76 Высота#bmp280 Датчики any-data 1
void bme280A() void bme280A() {
{
String value_name = sCmd.next(); String value_name = sCmd.next();
String address = sCmd.next(); String address = sCmd.next();
String widget_name = sCmd.next(); String widget_name = sCmd.next();
@@ -646,8 +588,7 @@ void bme280A()
sensors_reading_map[14] = 1; sensors_reading_map[14] = 1;
} }
void bme280A_reading() void bme280A_reading() {
{
float value = 0; float value = 0;
value = bme.readAltitude(1013.25); value = bme.readAltitude(1013.25);
jsonWriteStr(configJson, bme280A_value_name, String(value)); jsonWriteStr(configJson, bme280A_value_name, String(value));