From e3072ce887975f96d33b53cc309060a64f33b90e Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 20 May 2022 08:52:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=81=D0=B5=D0=BD=D1=81=D0=BE=D1=80=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=D0=B0=20=D0=BD=D0=B0=D0=BF=D1=80=D1=8F=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D1=82=D0=BE=D0=BA=20=D1=81=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B2=D1=85=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/items.json | 96 ++++++++++++++++--------- platformio.ini | 2 + src/modules/API.cpp | 2 + src/modules/sensors/Emon/Emon.cpp | 72 +++++++++++++++++++ src/modules/sensors/Emon/items.json | 34 +++++++++ src/modules/sensors/Emon/platformio.ini | 8 +++ 6 files changed, 181 insertions(+), 33 deletions(-) create mode 100644 src/modules/sensors/Emon/Emon.cpp create mode 100644 src/modules/sensors/Emon/items.json create mode 100644 src/modules/sensors/Emon/platformio.ini diff --git a/data_svelte/items.json b/data_svelte/items.json index a4ccfb6c..e295be90 100644 --- a/data_svelte/items.json +++ b/data_svelte/items.json @@ -303,9 +303,39 @@ "round": 1 }, { - "name": "22. Cенсор температуры GY21", + "name": "22. Датчик тока", "num": 22, "type": "Reading", + "subtype": "I", + "id": "current", + "widget": "anydataAmp", + "page": "Сенсоры", + "descr": "Датчик тока", + "int": 10, + "pin_I": 34, + "calib_I": 111.1, + "plus": 0, + "multiply": 1 + }, + { + "name": "23. Датчик напряжения", + "num": 23, + "type": "Reading", + "subtype": "U", + "id": "voltage", + "widget": "anydataVlt", + "page": "Сенсоры", + "descr": "Датчик напряжения", + "int": 10, + "pin_U": 35, + "calib_U": 223.1, + "plus": 0, + "multiply": 1 + }, + { + "name": "24. Cенсор температуры GY21", + "num": 24, + "type": "Reading", "subtype": "GY21t", "id": "tmp4", "widget": "anydataTmp", @@ -315,8 +345,8 @@ "int": 15 }, { - "name": "23. Cенсор влажности GY21", - "num": 23, + "name": "25. Cенсор влажности GY21", + "num": 25, "type": "Reading", "subtype": "GY21h", "id": "Hum4", @@ -327,8 +357,8 @@ "int": 15 }, { - "name": "24. Cенсор температуры HDC1080", - "num": 24, + "name": "26. Cенсор температуры HDC1080", + "num": 26, "type": "Reading", "subtype": "Hdc1080t", "id": "Temp1080", @@ -340,8 +370,8 @@ "round": 1 }, { - "name": "25. Cенсор влажности HDC1080", - "num": 25, + "name": "27. Cенсор влажности HDC1080", + "num": 27, "type": "Reading", "subtype": "Hdc1080h", "id": "Hum1080", @@ -353,8 +383,8 @@ "round": 1 }, { - "name": "26. Cенсор температуры MAX6675", - "num": 26, + "name": "28. Cенсор температуры MAX6675", + "num": 28, "type": "Reading", "subtype": "Max6675t", "id": "maxtmp", @@ -367,8 +397,8 @@ "CLK": 14 }, { - "name": "27. Датчик CO2 MHZ-19 UART", - "num": 27, + "name": "29. Датчик CO2 MHZ-19 UART", + "num": 29, "type": "Reading", "subtype": "Mhz19uart", "id": "co2uart", @@ -386,8 +416,8 @@ "ABC": 1 }, { - "name": "28. Датчик CO2 MHZ-19 PWM", - "num": 28, + "name": "30. Датчик CO2 MHZ-19 PWM", + "num": 30, "type": "Reading", "subtype": "Mhz19pwm", "id": "co2pwm", @@ -401,8 +431,8 @@ "int": 300 }, { - "name": "29. Cенсор температуры от MHZ-19 UART", - "num": 29, + "name": "31. Cенсор температуры от MHZ-19 UART", + "num": 31, "type": "Reading", "subtype": "Mhz19temp", "id": "Mhz19temp", @@ -418,8 +448,8 @@ "int": 30 }, { - "name": "30. Рабочий диапазон от MHZ-19 UART", - "num": 30, + "name": "32. Рабочий диапазон от MHZ-19 UART", + "num": 32, "type": "Reading", "subtype": "Mhz19range", "id": "Mhz19range", @@ -436,8 +466,8 @@ "int": 30 }, { - "name": "31. Автокалибровка от MHZ-19 UART", - "num": 31, + "name": "33. Автокалибровка от MHZ-19 UART", + "num": 33, "type": "Reading", "subtype": "Mhz19ABC", "id": "Mhz19ABC", @@ -451,8 +481,8 @@ "int": 30 }, { - "name": "32. Датчик пыли SDS011 PM25", - "num": 32, + "name": "34. Датчик пыли SDS011 PM25", + "num": 34, "type": "Reading", "subtype": "Sds011_25", "id": "pmuart25", @@ -469,8 +499,8 @@ "period": 300 }, { - "name": "33. Датчик пыли SDS011 PM10", - "num": 33, + "name": "35. Датчик пыли SDS011 PM10", + "num": 35, "type": "Reading", "subtype": "Sds011_10", "id": "pmuart10", @@ -487,8 +517,8 @@ "period": 300 }, { - "name": "34. Cенсор температуры Sht20", - "num": 34, + "name": "36. Cенсор температуры Sht20", + "num": 36, "type": "Reading", "subtype": "Sht20t", "id": "tmp2", @@ -499,8 +529,8 @@ "round": 1 }, { - "name": "35. Cенсор влажности Sht20", - "num": 35, + "name": "37. Cенсор влажности Sht20", + "num": 37, "type": "Reading", "subtype": "Sht20h", "id": "Hum2", @@ -511,8 +541,8 @@ "round": 1 }, { - "name": "36. Сонар HC-SR04", - "num": 36, + "name": "38. Сонар HC-SR04", + "num": 38, "type": "Reading", "subtype": "Sonar", "id": "sonar", @@ -527,8 +557,8 @@ "header": "Экраны" }, { - "name": "37. LCD экран 2004", - "num": 37, + "name": "39. LCD экран 2004", + "num": 39, "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", @@ -542,8 +572,8 @@ "id2show": "id датчика" }, { - "name": "38. LCD экран 1602", - "num": 38, + "name": "40. LCD экран 1602", + "num": 40, "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", diff --git a/platformio.ini b/platformio.ini index 6201e281..a00c5e25 100644 --- a/platformio.ini +++ b/platformio.ini @@ -54,6 +54,7 @@ lib_deps = adafruit/Adafruit BMP280 Library beegee-tokyo/DHT sensor library for ESPx milesburton/DallasTemperature@^3.9.1 + openenergymonitor/EmonLib@1.1.0 https://github.com/JonasGMorsch/GY-21.git ClosedCube HDC1080 adafruit/MAX6675 library @@ -73,6 +74,7 @@ lib_deps = adafruit/Adafruit BMP280 Library beegee-tokyo/DHT sensor library for ESPx milesburton/DallasTemperature@^3.9.1 + openenergymonitor/EmonLib@1.1.0 https://github.com/JonasGMorsch/GY-21.git ClosedCube HDC1080 adafruit/MAX6675 library diff --git a/src/modules/API.cpp b/src/modules/API.cpp index cb2ef008..1cd0d2d8 100644 --- a/src/modules/API.cpp +++ b/src/modules/API.cpp @@ -16,6 +16,7 @@ void* getAPI_Bme280(String subtype, String params); void* getAPI_Bmp280(String subtype, String params); void* getAPI_Dht1122(String subtype, String params); void* getAPI_Ds18b20(String subtype, String params); +void* getAPI_Emon(String subtype, String params); void* getAPI_GY21(String subtype, String params); void* getAPI_Hdc1080(String subtype, String params); void* getAPI_Max6675(String subtype, String params); @@ -43,6 +44,7 @@ if ((tmpAPI = getAPI_Bme280(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Bmp280(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Dht1122(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Ds18b20(subtype, params)) != nullptr) return tmpAPI; +if ((tmpAPI = getAPI_Emon(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_GY21(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Hdc1080(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Max6675(subtype, params)) != nullptr) return tmpAPI; diff --git a/src/modules/sensors/Emon/Emon.cpp b/src/modules/sensors/Emon/Emon.cpp new file mode 100644 index 00000000..ba196de9 --- /dev/null +++ b/src/modules/sensors/Emon/Emon.cpp @@ -0,0 +1,72 @@ +/****************************************************************** + Used Energy Monitoring Library + + https://github.com/openenergymonitor/EmonLib + + adapted for version 4 @Serghei63 + ******************************************************************/ + +#include "Global.h" +#include "classes/IoTItem.h" +#include + +extern IoTGpio IoTgpio; + +#include "EmonLib.h" // Include Emon Library + +EnergyMonitor emon1; // Create an instance + + +class Energy : public IoTItem { + + private: + unsigned int _pinI; // ток + unsigned int _calibI; // ток + + public: + Energy(String parameters): IoTItem(parameters) { + _pinI = jsonReadInt(parameters, "pin_I"); + _calibI = jsonReadInt(parameters, "calib_I"); + emon1.current(_pinI, _calibI); // Current: input pin, calibration. + } + + void doByInterval() { + value.valD = emon1.calcIrms(1480); // Calculate Irms only + regEvent(value.valD, "current"); + } + + ~Energy(){}; +}; + + +class Power : public IoTItem { + + private: + unsigned int _pinU; // напряжение + unsigned int _calibU; // напряжение + + public: + Power(String parameters): IoTItem(parameters) { + _pinU = jsonReadInt(parameters, "pin_U"); + _calibU = jsonReadInt(parameters, "calib_U"); + emon1.voltage(_pinU, _calibU, 1.7); // Voltage: input pin, calibration, phase_shift + } + + void doByInterval() { + if (emon1.Irms > 0) emon1.calcVI(10, 1000); // Calculate all. No.of half wavelengths (crossings), time-out при условии, что ток не нулевой + value.valD = emon1.Vrms; //extract Vrms into Variable; + regEvent(value.valD, "voltage"); + } + + ~Power(){}; +}; + +void* getAPI_Emon(String subtype, String param) { + if (subtype == F("I")) { + return new Energy(param); + } else if (subtype == F("U")) { + return new Power(param); + } else { + return nullptr; + } +} diff --git a/src/modules/sensors/Emon/items.json b/src/modules/sensors/Emon/items.json new file mode 100644 index 00000000..1facbc24 --- /dev/null +++ b/src/modules/sensors/Emon/items.json @@ -0,0 +1,34 @@ +[ + { + "name": "Датчик тока", + "num": 31, + "type": "Reading", + "subtype": "I", + "id": "current", + "widget": "anydataAmp", + "page": "Сенсоры", + "descr": "Датчик тока", + "int": 10, + "pin_I": 34, + "calib_I": 111.1, + "plus": 0, + "multiply": 1 + }, + { + "name": "Датчик напряжения", + "num": 32, + "type": "Reading", + "subtype": "U", + "id": "voltage", + "widget": "anydataVlt", + "page": "Сенсоры", + "descr": "Датчик напряжения", + "int": 10, + "pin_U": 35, + "calib_U": 223.1, + "plus": 0, + "multiply": 1 + } + + +] \ No newline at end of file diff --git a/src/modules/sensors/Emon/platformio.ini b/src/modules/sensors/Emon/platformio.ini new file mode 100644 index 00000000..47b8b86f --- /dev/null +++ b/src/modules/sensors/Emon/platformio.ini @@ -0,0 +1,8 @@ +[env:esp8266_4mb] +lib_deps = + openenergymonitor/EmonLib@1.1.0 + +[env:esp32_4mb] +lib_deps = + openenergymonitor/EmonLib@1.1.0 +