From c50f1759c48d7aeda34c3afd8cb8dc0fb664974c Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Feb 2022 12:11:58 +0100 Subject: [PATCH 01/13] First try of a plugin for reading current through ADS1015 + SCT013 over 1V, not a success --- src/_P126_IRMS.ino | 135 +++++++++++++++++++++ src/src/PluginStructs/P126_data_struct.cpp | 56 +++++++++ src/src/PluginStructs/P126_data_struct.h | 27 +++++ 3 files changed, 218 insertions(+) create mode 100644 src/_P126_IRMS.ino create mode 100644 src/src/PluginStructs/P126_data_struct.cpp create mode 100644 src/src/PluginStructs/P126_data_struct.h diff --git a/src/_P126_IRMS.ino b/src/_P126_IRMS.ino new file mode 100644 index 0000000000..c3885fccdc --- /dev/null +++ b/src/_P126_IRMS.ino @@ -0,0 +1,135 @@ +#include "_Plugin_Helper.h" +#ifdef USES_P126 + +// ####################################################################################################### +// ################################ Plugin 126: Irms through ADS1015 I2C ################################# +// ####################################################################################################### + + +#include "src/PluginStructs/P126_data_struct.h" + +#define PLUGIN_126 +#define PLUGIN_ID_126 126 +#define PLUGIN_NAME_126 "Current Irms Sensor (ADS1015)" +#define PLUGIN_VALUENAME1_126 "IrmsADS1015_Canal1" +#define PLUGIN_VALUENAME2_126 "IrmsADS1015_Canal2" + + +boolean Plugin_126(uint8_t function, struct EventStruct *event, String& string) +{ + boolean success = false; + + // static uint8_t portValue = 0; + switch (function) + { + case PLUGIN_DEVICE_ADD: + { + Device[++deviceCount].Number = PLUGIN_ID_126; + Device[deviceCount].Type = DEVICE_TYPE_I2C; + Device[deviceCount].VType = Sensor_VType::SENSOR_TYPE_DUAL; + Device[deviceCount].Ports = 0; + Device[deviceCount].PullUpOption = false; + Device[deviceCount].InverseLogicOption = false; + Device[deviceCount].FormulaOption = true; + Device[deviceCount].ValueCount = 2; + Device[deviceCount].SendDataOption = true; + Device[deviceCount].TimerOption = true; + Device[deviceCount].GlobalSyncOption = true; + break; + } + + case PLUGIN_GET_DEVICENAME: + { + string = F(PLUGIN_NAME_126); + break; + } + + case PLUGIN_GET_DEVICEVALUENAMES: + { + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_126)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1], PSTR(PLUGIN_VALUENAME2_126)); + break; + } + + case PLUGIN_I2C_HAS_ADDRESS: + case PLUGIN_WEBFORM_SHOW_I2C_PARAMS: + { + #define ADS1115_I2C_OPTION 4 + const uint8_t i2cAddressValues[] = { 0x48, 0x49, 0x4A, 0x4B }; + if (function == PLUGIN_WEBFORM_SHOW_I2C_PARAMS) { + addFormSelectorI2C(F("i2c_addr"), ADS1115_I2C_OPTION, i2cAddressValues, PCONFIG(0)); + } else { + success = intArrayContains(ADS1115_I2C_OPTION, i2cAddressValues, event->Par1); + } + break; + } + + case PLUGIN_WEBFORM_LOAD: + { + addFormSubHeader(F("Calibration")); + addFormNumericBox(F("Canal 1"), F("P126_adc01"), PCONFIG_LONG(0), 0, 240); + addFormNumericBox(F("Canal 2"), F("P126_adc23"), PCONFIG_LONG(1), 0, 240); + + success = true; + break; + } + + case PLUGIN_WEBFORM_SAVE: + { + PCONFIG(0) = getFormItemInt(F("i2c_addr")); + PCONFIG_LONG(0) = getFormItemInt(F("P126_adc01")); + PCONFIG_LONG(1) = getFormItemInt(F("P126_adc23")); + + success = true; + break; + } + + case PLUGIN_INIT: + { + const uint8_t address = PCONFIG(0); + const int c1_calibre = PCONFIG_LONG(0); + const int c2_calibre = PCONFIG_LONG(1); + + initPluginTaskData(event->TaskIndex, new (std::nothrow) P126_data_struct(address, c1_calibre, c2_calibre)); + P126_data_struct *P126_data = + static_cast(getPluginTaskData(event->TaskIndex)); + + if (nullptr != P126_data) { + success = true; + } + break; + } + + case PLUGIN_READ: + { + P126_data_struct *P126_data = + static_cast(getPluginTaskData(event->TaskIndex)); + + if (nullptr != P126_data) { + const bool res_read = P126_data->read(); + if ( true != res_read ) { + if (loglevelActiveFor(LOG_LEVEL_ERROR)) { + addLog(LOG_LEVEL_ERROR, F("IRMS: failed reading values")); + } + } else { + const float c1Current = P126_data->getCurrent(1); + const float c2Current = P126_data->getCurrent(2); + UserVar[event->BaseVarIndex] = c1Current; + UserVar[event->BaseVarIndex+1] = c2Current; + if (loglevelActiveFor(LOG_LEVEL_DEBUG)) { + String log = "IRMS: Reading canal1 current = "; + log += c1Current; + log += " / canal2 current = "; + log += c2Current; + addLog(LOG_LEVEL_DEBUG, log); + } + success = true; + } + } + break; + } + } + return success; +} + +#endif // USES_P126 diff --git a/src/src/PluginStructs/P126_data_struct.cpp b/src/src/PluginStructs/P126_data_struct.cpp new file mode 100644 index 0000000000..97717cc048 --- /dev/null +++ b/src/src/PluginStructs/P126_data_struct.cpp @@ -0,0 +1,56 @@ +#include "../PluginStructs/P126_data_struct.h" + +#ifdef USES_P126 + +#define P126_ADS1015_MUX_DIFF_01 (0x0000) +#define P126_ADS1015_MUX_DIFF_23 (0x3000) +#define P126_ADS1015_PGA_1_024V (0x0600) //< +/-1.024V range = Gain 4 +#define P126_ADS1015_CONFIG_CQUE_NONE (0x0003) // Disable the comparator (default val) +#define P126_ADS1015_CONFIG_CLAT_NONLAT (0x0000) // Non-latching (default val) +#define P126_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) +#define P126_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) +#define P126_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second +#define P126_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) +#define P126_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion + +P126_data_struct::P126_data_struct(uint8_t i2c_addr, uint8_t c1Cal, uint8_t c2Cal) : c1Calibre(c1Cal), c2Calibre(c2Cal), i2cAddress(i2c_addr) {} + +bool P126_data_struct::read() { + uint16_t config = P126_ADS1015_CONFIG_CQUE_NONE | + P126_ADS1015_CONFIG_CLAT_NONLAT | + P126_ADS1015_CONFIG_CPOL_ACTVLOW | + P126_ADS1015_CONFIG_CMODE_TRAD | + P126_ADS1015_RATE_3300SPS | + P126_ADS1015_CONV_MODE_SINGLE; + + config |= P126_ADS1015_PGA_1_024V; + config |= P126_ADS1015_MUX_DIFF_01; + config |= P126_ADS1015_START_SINGLE_CONV; + + Wire.beginTransmission(i2cAddress); + Wire.write((uint8_t)(0x01)); + Wire.write((uint8_t)(config >> 8)); + Wire.write((uint8_t)(config & 0xFF)); + Wire.endTransmission(); + + delay(9); // See https://github.com/letscontrolit/ESPEasy/issues/3159#issuecomment-660546091 + return readRegister126(0x00); +} + +uint16_t P126_data_struct::readRegister126(uint8_t reg) { + Wire.beginTransmission(i2cAddress); + Wire.write((0x00)); + Wire.endTransmission(); + + if (Wire.requestFrom(i2cAddress, (uint8_t)2) != 2) { + return 0x8000; + } + return (Wire.read() << 8) | Wire.read(); +} + +float_t P126_data_struct::getCurrent(uint8_t canal) +{ + return 0.; +} + +#endif // ifdef USES_P126 diff --git a/src/src/PluginStructs/P126_data_struct.h b/src/src/PluginStructs/P126_data_struct.h new file mode 100644 index 0000000000..25000880fb --- /dev/null +++ b/src/src/PluginStructs/P126_data_struct.h @@ -0,0 +1,27 @@ +#ifndef PLUGINSTRUCTS_P126_DATA_STRUCT_H +#define PLUGINSTRUCTS_P126_DATA_STRUCT_H + +#include "../../_Plugin_Helper.h" +#ifdef USES_P126 + +struct P126_data_struct : public PluginTaskData_base { +public: + + P126_data_struct(uint8_t i2c_addr, + uint8_t c1Cal, + uint8_t c2Cal); + + bool read(); + float_t getCurrent(uint8_t canal); + +private: + + uint16_t readRegister126(uint8_t reg); + + uint8_t c1Calibre; + uint8_t c2Calibre; + uint8_t i2cAddress; +}; + +#endif // ifdef USES_P126 +#endif // ifndef PLUGINSTRUCTS_P126_DATA_STRUCT_H From 889b135c2f9f95133faf2e4e9a9fa6e47a74fa76 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Feb 2022 18:27:50 +0100 Subject: [PATCH 02/13] Successfull creation of plugin to get current from an alternative power, using ADS1015 to sample the wave and calculate current through Irms method (around 60 sample over 20ms, you can select how many wave you want to get accurate measure ;-) ) --- src/_P127_IRMS_ADS1015.ino | 157 ++++++++++++ src/src/PluginStructs/P127_data_struct.cpp | 281 +++++++++++++++++++++ src/src/PluginStructs/P127_data_struct.h | 44 ++++ 3 files changed, 482 insertions(+) create mode 100644 src/_P127_IRMS_ADS1015.ino create mode 100644 src/src/PluginStructs/P127_data_struct.cpp create mode 100644 src/src/PluginStructs/P127_data_struct.h diff --git a/src/_P127_IRMS_ADS1015.ino b/src/_P127_IRMS_ADS1015.ino new file mode 100644 index 0000000000..015d1301f0 --- /dev/null +++ b/src/_P127_IRMS_ADS1015.ino @@ -0,0 +1,157 @@ +#include "_Plugin_Helper.h" +#ifdef USES_P127 + +// ####################################################################################################### +// ############################# Plugin 127: Irms ADS1015 I2C (base : 0x48) ############################# +// ####################################################################################################### + + +#include "src/PluginStructs/P127_data_struct.h" + +#define PLUGIN_127 +#define PLUGIN_ID_127 127 +#define PLUGIN_NAME_127 "Irms - ADS1015" +#define PLUGIN_VALUENAME1_127 "current1" +#define PLUGIN_VALUENAME2_127 "power1" +#define PLUGIN_VALUENAME3_127 "current2" +#define PLUGIN_VALUENAME4_127 "power2" + + +boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) +{ + boolean success = false; + + // static uint8_t portValue = 0; + switch (function) + { + case PLUGIN_DEVICE_ADD: + { + Device[++deviceCount].Number = PLUGIN_ID_127; + Device[deviceCount].Type = DEVICE_TYPE_I2C; + Device[deviceCount].VType = Sensor_VType::SENSOR_TYPE_SINGLE; + Device[deviceCount].Ports = 0; + Device[deviceCount].PullUpOption = false; + Device[deviceCount].InverseLogicOption = false; + Device[deviceCount].FormulaOption = true; + Device[deviceCount].ValueCount = 4; + Device[deviceCount].SendDataOption = true; + Device[deviceCount].TimerOption = true; + Device[deviceCount].GlobalSyncOption = true; + break; + } + + case PLUGIN_GET_DEVICENAME: + { + string = F(PLUGIN_NAME_127); + break; + } + + case PLUGIN_GET_DEVICEVALUENAMES: + { + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_127)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1], PSTR(PLUGIN_VALUENAME2_127)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[2], PSTR(PLUGIN_VALUENAME3_127)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[3], PSTR(PLUGIN_VALUENAME4_127)); + break; + } + + case PLUGIN_I2C_HAS_ADDRESS: + case PLUGIN_WEBFORM_SHOW_I2C_PARAMS: + { + #define ADS1015_I2C_OPTION 4 + const uint8_t i2cAddressValues[] = { 0x48, 0x49, 0x4A, 0x4B }; + if (function == PLUGIN_WEBFORM_SHOW_I2C_PARAMS) { + addFormSelectorI2C(F("i2c_addr"), ADS1015_I2C_OPTION, i2cAddressValues, PCONFIG(0)); + } else { + success = intArrayContains(ADS1015_I2C_OPTION, i2cAddressValues, event->Par1); + } + break; + } + + case PLUGIN_WEBFORM_LOAD: + { + addFormSubHeader(F("Calibration - General")); + addFormNumericBox(F("Current Frequency"), F("p127_frequency"), PCONFIG_LONG(0), 50, 60); + addFormNumericBox(F("Nb Sinus to read"), F("p127_nb_sinus"), PCONFIG_LONG(1), 1, 25); + addFormNote("Take care! Reading sinus is a blocking process. With a SCT013 (60A/50A/30A - 1V), reading 2 sinus on 50Hz giving stable values."); + addFormCheckBox(F("ADC Conversion Mode Continous"), F("p127_adc_continous"), PCONFIG_LONG(2)); + addFormCheckBox(F("Small Debug to INFO Log"), F("p127_debug"), PCONFIG(3)); + addFormFloatNumberBox(F("Voltage Estimated"), F("p127_voltageEstimated"), PCONFIG_FLOAT(0), 1.0, 400000.0, 2); + addFormSubHeader(F("Calibration")); + addFormNumericBox(F("Canal 1 - Max Current"), F("p127_calCurrent1"), PCONFIG(1), 1, 250); + addFormNumericBox(F("Canal 2 - Max Current"), F("p127_calCurrent2"), PCONFIG(2), 1, 250); + + success = true; + break; + } + + case PLUGIN_WEBFORM_SAVE: + { + PCONFIG(0) = getFormItemInt(F("i2c_addr")); + PCONFIG_LONG(0) = getFormItemInt(F("p127_frequency")); + PCONFIG_LONG(1) = getFormItemInt(F("p127_nb_sinus")); + PCONFIG_LONG(2) = (true == isFormItemChecked(F("p127_adc_continous")))?1:0; + PCONFIG(3) = (true == isFormItemChecked(F("p127_debug")))?1:0; + + PCONFIG_FLOAT(0) = getFormItemFloat(F("p127_voltageEstimated")); + PCONFIG(1) = getFormItemInt(F("p127_calCurrent1")); + PCONFIG(2) = getFormItemInt(F("p127_calCurrent2")); + + success = true; + break; + } + + case PLUGIN_INIT: + { + const uint8_t address = PCONFIG(0); + const uint8_t calCurrent1 = PCONFIG(1); + const uint8_t calCurrent2 = PCONFIG(2); + const float_t voltageEstimated = PCONFIG_FLOAT(0); + const uint8_t debug = PCONFIG(3); + const uint8_t currentFreq = PCONFIG_LONG(0); + const uint8_t nbSinus = PCONFIG_LONG(1); + const uint8_t adc_continous = PCONFIG_LONG(2); + + initPluginTaskData(event->TaskIndex, new (std::nothrow) P127_data_struct(address, calCurrent1, calCurrent2, voltageEstimated, currentFreq, nbSinus, adc_continous)); + P127_data_struct *P127_data = + static_cast(getPluginTaskData(event->TaskIndex)); + + if (nullptr != P127_data) { + P127_data->setDebug(debug); + success = true; + } + break; + } + + case PLUGIN_READ: + { + P127_data_struct *P127_data = + static_cast(getPluginTaskData(event->TaskIndex)); + + if (nullptr != P127_data) { + float_t value = 0.; + P127_data->readCurrent(1, value); + UserVar[event->BaseVarIndex+0] = value; + UserVar[event->BaseVarIndex+1] = P127_data->estimatePower(value); + P127_data->readCurrent(2, value); + UserVar[event->BaseVarIndex+2] = value; + UserVar[event->BaseVarIndex+3] = P127_data->estimatePower(value); + + { + String log; + log = F("Irms - ADS1015 : Canal1{ current="); log += UserVar[event->BaseVarIndex+0]; + log += F("; power="); log += UserVar[event->BaseVarIndex+1]; + log += F(";} Canal2{ current="); log += UserVar[event->BaseVarIndex+2]; + log += F("; power="); log += UserVar[event->BaseVarIndex+3]; + log += F(";}"); + addLog(LOG_LEVEL_INFO, log); + } + success = true; + } + break; + } + } + return success; +} + +#endif // USES_P127 diff --git a/src/src/PluginStructs/P127_data_struct.cpp b/src/src/PluginStructs/P127_data_struct.cpp new file mode 100644 index 0000000000..03325764ca --- /dev/null +++ b/src/src/PluginStructs/P127_data_struct.cpp @@ -0,0 +1,281 @@ +#include "../PluginStructs/P127_data_struct.h" + +#ifdef USES_P127 + +#define P127_ADS1X15_REG_POINTER_CONVERT (0x00) +#define P127_ADS1X15_REG_POINTER_CONFIG (0x01) +#define P127_ADS1X15_REG_POINTER_THRESH_LO (0x02) +#define P127_ADS1X15_REG_POINTER_THRESH_HI (0x03) + +#define P127_ADS1015_MUX_DIFF_01 (0x0000) +#define P127_ADS1015_MUX_DIFF_23 (0x3000) +#define P127_ADS1015_PGA_1_024V (0x0600) //< +/-1.024V range = Gain 4 => datasheet says 1bit = 0.5mV +#define P127_ADS1015_CONFIG_CQUE_NONE (0x0003) // Disable the comparator (default val) +#define P127_ADS1015_CONFIG_CLAT_NONLAT (0x0000) // Non-latching (default val) +#define P127_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) +#define P127_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) +#define P127_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second +#define P127_ADS1015_CONV_MODE_CONTINUOUS (0x0000) // Single-shot mode (default) +#define P127_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) +#define P127_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion + +P127_data_struct::P127_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8_t _calCurrent2, float_t _calVoltage, uint8_t _currentFreq, uint8_t _nbSinus, uint8_t _convModeContinuous) : + i2cAddress(i2c_addr), + calCurrent1(_calCurrent1), + calCurrent2(_calCurrent2), + calVoltage(_calVoltage), + currentFreq(_currentFreq), + nbSinus(_nbSinus), + convModeContinuous (_convModeContinuous) { + this->debug = 0; + } + +void P127_data_struct::setDebug(uint8_t _debug) { + this->debug = _debug; + if (this->debug) { + String log; + log = F("Irms - ADS1015 : Set internal plugin debug; _calCurrent1="); + log += this->calCurrent1; + log += F(" _calCurrent2="); + log += this->calCurrent2; + log += F(" voltEst.="); + log += String(this->calVoltage); + log += F(" frequency="); + log += this->currentFreq; + log += F(" nbSinus="); + log += this->nbSinus; + addLog(LOG_LEVEL_INFO, log); + } +} + +uint8_t P127_data_struct::getDebug() { + return this->debug; +} + +boolean P127_data_struct::writeRegister(uint8_t registerAddr, uint16_t registerValue) { + boolean result = false; + uint8_t res = 0; + Wire.beginTransmission(this->i2cAddress); + Wire.write((uint8_t)(registerAddr)); + Wire.write((uint8_t)(registerValue >> 8)); + Wire.write((uint8_t)(registerValue & 0xFF)); + res = Wire.endTransmission(); + if ( 0 == res ) { + result = true; + } else { + String log = F("Irms - ADS1015 : writeRegister NOK, errcode= "); + log += res ; + addLog(LOG_LEVEL_INFO, log); + result = false; + } + return result; +} + +boolean P127_data_struct::readRegister(uint8_t registerAddr, uint16_t& registerValue) { + boolean result = false; + const uint8_t requestedByte = 2; + Wire.beginTransmission(this->i2cAddress); + Wire.write((uint8_t)(registerAddr)); + if ( 0 == Wire.endTransmission() ) { + if ( requestedByte == Wire.requestFrom(this->i2cAddress, requestedByte) ) { + result = true; + registerValue = ((Wire.read() << 8) | Wire.read()); + } + } + return result; +} + +uint16_t P127_data_struct::readRegisterFacility(uint8_t registerAddr) { + uint16_t registerValue = 0; + this->readRegister(registerAddr, registerValue); + return registerValue; +} + +boolean P127_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue) { + boolean result = false; + uint16_t registerValue = 0; + uint16_t configGlobal = P127_ADS1015_CONFIG_CQUE_NONE | + P127_ADS1015_CONFIG_CLAT_NONLAT | + P127_ADS1015_CONFIG_CPOL_ACTVLOW | + P127_ADS1015_CONFIG_CMODE_TRAD | + P127_ADS1015_RATE_3300SPS | + P127_ADS1015_PGA_1_024V; + configGlobal |= muxConf; + + uint16_t configStartSingle = configGlobal | + P127_ADS1015_CONV_MODE_SINGLE | + P127_ADS1015_START_SINGLE_CONV; + uint16_t configStartContinuous = configGlobal | + P127_ADS1015_CONV_MODE_CONTINUOUS | + P127_ADS1015_START_SINGLE_CONV; + uint16_t configStop = configGlobal | + P127_ADS1015_CONV_MODE_SINGLE; + + // write conf+ =>start reading + if ( false == this->writeRegister(P127_ADS1X15_REG_POINTER_CONFIG, configStartSingle) ) { + addLog(LOG_LEVEL_INFO, F("readadcsingle write register conf failed")); + result = false; + } else { + // delay(9); // See https://github.com/letscontrolit/ESPEasy/issues/3159#issuecomment-660546091 + // requesting if conversion ended + ulong readingLongUS = micros(); + while ( micros() < (readingLongUS + 1000) ) { + if ( ( this->readRegisterFacility(P127_ADS1X15_REG_POINTER_CONFIG) & 0x8000) != 0 ) { + if ( true == this->readRegister(P127_ADS1X15_REG_POINTER_CONVERT, registerValue) ) { + // Shift 12-bit results right 4 bits for the ADS1015, + // making sure we keep the sign bit intact + adcValue = ((int16_t)(registerValue >> 4)); + if (adcValue > 0x07FF) { + // negative number - extend the sign to 16th bit + adcValue |= 0xF000; + } + result = true; + } + break; + } + } + } + return result; +} + +boolean P127_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t period_ms, float_t& adcIrms, uint16_t& nbSample) { + boolean success = false; + boolean pbmWhileReading = false; + uint16_t registerValue = 0; + uint64_t sumI = 0, sqrI = 0; + adcIrms = 0.; + nbSample = 0; + uint16_t configGlobal = P127_ADS1015_CONFIG_CQUE_NONE | + P127_ADS1015_CONFIG_CLAT_NONLAT | + P127_ADS1015_CONFIG_CPOL_ACTVLOW | + P127_ADS1015_CONFIG_CMODE_TRAD | + P127_ADS1015_RATE_3300SPS | + P127_ADS1015_PGA_1_024V; + configGlobal |= muxConf; + + uint16_t configStartSingle = configGlobal | + P127_ADS1015_CONV_MODE_SINGLE | + P127_ADS1015_START_SINGLE_CONV; + uint16_t configStartContinuous = configGlobal | + P127_ADS1015_CONV_MODE_CONTINUOUS | + P127_ADS1015_START_SINGLE_CONV; + uint16_t configStop = configGlobal | + P127_ADS1015_CONV_MODE_SINGLE; + + // write conf+ =>start reading + if ( false == this->writeRegister(P127_ADS1X15_REG_POINTER_CONFIG, configStartContinuous) ) { + addLog(LOG_LEVEL_INFO, F("readadccontinuous write register conf failed")); + success = false; + } else { + // delay(9); // See https://github.com/letscontrolit/ESPEasy/issues/3159#issuecomment-660546091 + // requesting if conversion ended + pbmWhileReading = false; + ulong endPeriod = millis() + period_ms; + while ( millis() < endPeriod ) { + if ( true != this->readRegister(P127_ADS1X15_REG_POINTER_CONVERT, registerValue) ) { + pbmWhileReading = true; + break; + } else { + nbSample++; + // Shift 12-bit results right 4 bits for the ADS1015, + // making sure we keep the sign bit intact + int16_t adcValue = ((int16_t)(registerValue >> 4)); + if (adcValue > 0x07FF) { + // negative number - extend the sign to 16th bit + adcValue |= 0xF000; + } + sqrI = adcValue * adcValue; + sumI += sqrI; + #ifdef P127_DEBUG_DEV + String log = "readadccontinuous registerValue=" + String(registerValue); + log += " adcValue=" + String(adcValue); + log += " sqrI=" + String((unsigned long)(sqrI >>16), HEX) + String((unsigned long)(sqrI & 0x0000FFFF), HEX); + log += " sumI=" + String((unsigned long)(sumI >>16), HEX) + String((unsigned long)(sumI & 0x0000FFFF), HEX); + addLog(LOG_LEVEL_INFO, log); + #endif + } + } + if ( true == pbmWhileReading ) { + success = false; + } else { + adcIrms = sqrt(1. * sumI / nbSample); + success = true; + } + } + if ( false == this->writeRegister(P127_ADS1X15_REG_POINTER_CONFIG, configStop) ) { + addLog(LOG_LEVEL_INFO, F("readadccontinuous stop reading failed")); + } + return success; +} + +float_t P127_data_struct::estimatePower(float_t current) { + return calVoltage * current; +} + +boolean P127_data_struct::readCurrent(uint8_t canal, float_t& currentValue) { + boolean success = false; + boolean calculatingRMSSuccess = true; + uint16_t registerValue = 0; + int16_t adc = 0; + uint64_t sumI = 0; + float_t adcIrms = .0; + uint16_t nbSample = 0; + uint16_t durationSample = (this->nbSinus * (1000 / this->currentFreq)); + float_t voltage = .0; + float_t calCurrent =.0; + unsigned long endTime = 0; + if ( ( 1 != canal ) && ( 2 != canal ) ) + success = false; + else { + uint16_t muxConf = P127_ADS1015_MUX_DIFF_01; + if ( 1 == canal ) + muxConf = P127_ADS1015_MUX_DIFF_01; + else if ( 2 == canal ) + muxConf = P127_ADS1015_MUX_DIFF_23; + else + muxConf = P127_ADS1015_MUX_DIFF_01; //default value, should never happened + + if ( 1 != this->convModeContinuous ) { + // start loop + endTime = millis() + durationSample; // 2*20ms => 5sinus + calculatingRMSSuccess = true; + while ( millis() < endTime ) { + if ( false == this->readAdcSingleValue(muxConf, adc) ) { + currentValue = 0; + calculatingRMSSuccess = false; + break; + } else { + sumI += (adc * adc); + nbSample++; + } + } + if ( true == calculatingRMSSuccess ) { + adcIrms = sqrt(sumI / nbSample); + voltage = adcIrms * 0.0005; + calCurrent = (1==canal)?calCurrent1:calCurrent2; + currentValue = voltage * calCurrent; + success = true; + } + } else { + adcIrms = 0.; + nbSample = 0; + success = this->readAdcContinuousRmsValue(muxConf, durationSample, adcIrms, nbSample); + voltage = adcIrms * 0.0005; + calCurrent = (1==canal)?calCurrent1:calCurrent2; + currentValue = voltage * calCurrent; + } + if (false != this->debug) { + String log; + log = String("Irms - ADS1015 : "); log += ((true == success)?String("SUCCESS"):String("FAILED")); + log += String(" readCurrent canal = "); log += canal; addLog(LOG_LEVEL_INFO, log); + log = F("Irms - ADS1015 : Differential square/root: "); log += adcIrms; addLog(LOG_LEVEL_INFO, log); + log = F("Irms - ADS1015 : (voltage: "); log += voltage + String("mV )"); addLog(LOG_LEVEL_INFO, log); + log = F("Irms - ADS1015 : (sample duration: "); log += durationSample + String("ms )"); addLog(LOG_LEVEL_INFO, log); + log = F("Irms - ADS1015 : (sample count: "); log += nbSample + String(" )"); addLog(LOG_LEVEL_INFO, log); + log = F("Irms - ADS1015 : Current: "); log += currentValue; addLog(LOG_LEVEL_INFO, log); + } + } + return success; +} + +#endif // ifdef USES_P127 diff --git a/src/src/PluginStructs/P127_data_struct.h b/src/src/PluginStructs/P127_data_struct.h new file mode 100644 index 0000000000..807bca3e77 --- /dev/null +++ b/src/src/PluginStructs/P127_data_struct.h @@ -0,0 +1,44 @@ +#ifndef PLUGINSTRUCTS_P127_DATA_STRUCT_H +#define PLUGINSTRUCTS_P127_DATA_STRUCT_H + +#include "../../_Plugin_Helper.h" +#ifdef USES_P127 + +#undef P127_DEBUG_DEV + +struct P127_data_struct : public PluginTaskData_base { +public: + + P127_data_struct(uint8_t i2c_addr, + uint8_t _calCurrent1, + uint8_t _calCurrent2, + float_t _calVoltage, + uint8_t _currentFreq, + uint8_t _nbSinus, + uint8_t _convModeContinuous); + + void setDebug(uint8_t _debug); + uint8_t getDebug(); + boolean readCurrent(uint8_t canal, float_t& currentValue); + float_t estimatePower(float_t current); + +private: + + uint8_t i2cAddress; + uint8_t calCurrent1; + uint8_t calCurrent2; + float_t calVoltage; + uint8_t currentFreq; + uint8_t nbSinus; + uint8_t convModeContinuous; + uint8_t debug; + + boolean writeRegister(uint8_t registerAddr, uint16_t registerValue); + boolean readRegister(uint8_t registerAddr, uint16_t& registerValue); + uint16_t readRegisterFacility(uint8_t registerAddr); + boolean readAdcSingleValue(uint16_t muxConf, int16_t& adcValue); + boolean readAdcContinuousRmsValue(uint16_t muxConf, uint16_t period_ms, float_t& adcIrms, uint16_t& nbSample); +}; + +#endif // ifdef USES_P127 +#endif // ifndef PLUGINSTRUCTS_P127_DATA_STRUCT_H From 74232c33b67854919fc289e06f625072fc27743c Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 11:22:27 +0100 Subject: [PATCH 03/13] =?UTF-8?q?Validation=20pr=C3=A9paration=20du=20pull?= =?UTF-8?q?=20request=20en=20plugin=20130=20dans=20une=20branche?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformio.ini | 3 ++- platformio_esp32_envs.ini | 16 +++++++++++++++- src/src/CustomBuild/define_plugin_sets.h | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index 4fe062eaef..90368e67f5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,8 +20,9 @@ extra_configs = platformio_esp32_envs.ini platformio_special_envs.ini -default_envs = custom_ESP8266_4M1M, custom_ESP32_4M316k +; default_envs = custom_ESP8266_4M1M, custom_ESP32_4M316k ; default_envs = custom_ESP8266_4M1M +default_envs = custom_ESP32_4M316k_current_sensor ;default_envs = normal_ESP8266_4M1M ;default_envs = test_beta_ESP8266_4M1M diff --git a/platformio_esp32_envs.ini b/platformio_esp32_envs.ini index 776b20c060..1d91efe32c 100644 --- a/platformio_esp32_envs.ini +++ b/platformio_esp32_envs.ini @@ -27,6 +27,20 @@ build_flags = ${core_esp32_3_3_0.build_flags} -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE monitor_filters = esp32_exception_decoder +; Custom: 4096k version -------------------------- +[env:custom_ESP32_4M316k_current_sensor] +extends = esp32_common +platform = ${esp32_common.platform} +lib_deps = ${esp32_common.lib_deps} +build_flags = ${esp32_common.build_flags} + ;-D PLUGIN_BUILD_CUSTOM + -D USES_P126 + -D USES_P127 + -D FEATURE_ARDUINO_OTA + -D PLUGIN_DISPLAY_COLLECTION +board = esp32dev +extra_scripts = ${esp32_common.extra_scripts} + pre:tools/pio/pre_custom_esp32.py ; Custom: 4096k version -------------------------- [env:custom_ESP32_4M316k] @@ -293,7 +307,7 @@ extends = esp32_common platform = ${esp32_common.platform} lib_deps = ${esp32_common.lib_deps}, ServoESP32 build_flags = ${esp32_common.build_flags} - -DFEATURE_ARDUINO_OTA + -D FEATURE_ARDUINO_OTA -D PLUGIN_DISPLAY_COLLECTION board = esp32dev extra_scripts = ${esp32_common.extra_scripts} diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index 9f0124cf73..4f05a55f91 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -1053,6 +1053,8 @@ To create/register a plugin, you have to : #define USES_P079 // Wemos Motoshield #endif +#define USES_P126 +#define USES_P127 #ifdef CONTROLLER_SET_STABLE #define USES_C001 // Domoticz HTTP From 5f89618ceae863066cfdf5f85c1f9e3685c10eb5 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 11:43:01 +0100 Subject: [PATCH 04/13] removing local P126 as failed POC --- platformio_esp32_envs.ini | 1 - src/_P126_IRMS.ino | 135 --------------------- src/src/CustomBuild/define_plugin_sets.h | 1 - src/src/PluginStructs/P126_data_struct.cpp | 56 --------- src/src/PluginStructs/P126_data_struct.h | 27 ----- 5 files changed, 220 deletions(-) delete mode 100644 src/_P126_IRMS.ino delete mode 100644 src/src/PluginStructs/P126_data_struct.cpp delete mode 100644 src/src/PluginStructs/P126_data_struct.h diff --git a/platformio_esp32_envs.ini b/platformio_esp32_envs.ini index e80e5b306e..03a7e5423b 100644 --- a/platformio_esp32_envs.ini +++ b/platformio_esp32_envs.ini @@ -35,7 +35,6 @@ platform = ${esp32_common.platform} lib_deps = ${esp32_common.lib_deps} build_flags = ${esp32_common.build_flags} ;-D PLUGIN_BUILD_CUSTOM - -D USES_P126 -D USES_P127 -D FEATURE_ARDUINO_OTA -D PLUGIN_DISPLAY_COLLECTION diff --git a/src/_P126_IRMS.ino b/src/_P126_IRMS.ino deleted file mode 100644 index c3885fccdc..0000000000 --- a/src/_P126_IRMS.ino +++ /dev/null @@ -1,135 +0,0 @@ -#include "_Plugin_Helper.h" -#ifdef USES_P126 - -// ####################################################################################################### -// ################################ Plugin 126: Irms through ADS1015 I2C ################################# -// ####################################################################################################### - - -#include "src/PluginStructs/P126_data_struct.h" - -#define PLUGIN_126 -#define PLUGIN_ID_126 126 -#define PLUGIN_NAME_126 "Current Irms Sensor (ADS1015)" -#define PLUGIN_VALUENAME1_126 "IrmsADS1015_Canal1" -#define PLUGIN_VALUENAME2_126 "IrmsADS1015_Canal2" - - -boolean Plugin_126(uint8_t function, struct EventStruct *event, String& string) -{ - boolean success = false; - - // static uint8_t portValue = 0; - switch (function) - { - case PLUGIN_DEVICE_ADD: - { - Device[++deviceCount].Number = PLUGIN_ID_126; - Device[deviceCount].Type = DEVICE_TYPE_I2C; - Device[deviceCount].VType = Sensor_VType::SENSOR_TYPE_DUAL; - Device[deviceCount].Ports = 0; - Device[deviceCount].PullUpOption = false; - Device[deviceCount].InverseLogicOption = false; - Device[deviceCount].FormulaOption = true; - Device[deviceCount].ValueCount = 2; - Device[deviceCount].SendDataOption = true; - Device[deviceCount].TimerOption = true; - Device[deviceCount].GlobalSyncOption = true; - break; - } - - case PLUGIN_GET_DEVICENAME: - { - string = F(PLUGIN_NAME_126); - break; - } - - case PLUGIN_GET_DEVICEVALUENAMES: - { - strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_126)); - strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1], PSTR(PLUGIN_VALUENAME2_126)); - break; - } - - case PLUGIN_I2C_HAS_ADDRESS: - case PLUGIN_WEBFORM_SHOW_I2C_PARAMS: - { - #define ADS1115_I2C_OPTION 4 - const uint8_t i2cAddressValues[] = { 0x48, 0x49, 0x4A, 0x4B }; - if (function == PLUGIN_WEBFORM_SHOW_I2C_PARAMS) { - addFormSelectorI2C(F("i2c_addr"), ADS1115_I2C_OPTION, i2cAddressValues, PCONFIG(0)); - } else { - success = intArrayContains(ADS1115_I2C_OPTION, i2cAddressValues, event->Par1); - } - break; - } - - case PLUGIN_WEBFORM_LOAD: - { - addFormSubHeader(F("Calibration")); - addFormNumericBox(F("Canal 1"), F("P126_adc01"), PCONFIG_LONG(0), 0, 240); - addFormNumericBox(F("Canal 2"), F("P126_adc23"), PCONFIG_LONG(1), 0, 240); - - success = true; - break; - } - - case PLUGIN_WEBFORM_SAVE: - { - PCONFIG(0) = getFormItemInt(F("i2c_addr")); - PCONFIG_LONG(0) = getFormItemInt(F("P126_adc01")); - PCONFIG_LONG(1) = getFormItemInt(F("P126_adc23")); - - success = true; - break; - } - - case PLUGIN_INIT: - { - const uint8_t address = PCONFIG(0); - const int c1_calibre = PCONFIG_LONG(0); - const int c2_calibre = PCONFIG_LONG(1); - - initPluginTaskData(event->TaskIndex, new (std::nothrow) P126_data_struct(address, c1_calibre, c2_calibre)); - P126_data_struct *P126_data = - static_cast(getPluginTaskData(event->TaskIndex)); - - if (nullptr != P126_data) { - success = true; - } - break; - } - - case PLUGIN_READ: - { - P126_data_struct *P126_data = - static_cast(getPluginTaskData(event->TaskIndex)); - - if (nullptr != P126_data) { - const bool res_read = P126_data->read(); - if ( true != res_read ) { - if (loglevelActiveFor(LOG_LEVEL_ERROR)) { - addLog(LOG_LEVEL_ERROR, F("IRMS: failed reading values")); - } - } else { - const float c1Current = P126_data->getCurrent(1); - const float c2Current = P126_data->getCurrent(2); - UserVar[event->BaseVarIndex] = c1Current; - UserVar[event->BaseVarIndex+1] = c2Current; - if (loglevelActiveFor(LOG_LEVEL_DEBUG)) { - String log = "IRMS: Reading canal1 current = "; - log += c1Current; - log += " / canal2 current = "; - log += c2Current; - addLog(LOG_LEVEL_DEBUG, log); - } - success = true; - } - } - break; - } - } - return success; -} - -#endif // USES_P126 diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index bdc3bbad2d..f822b8761f 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -1053,7 +1053,6 @@ To create/register a plugin, you have to : #define USES_P079 // Wemos Motoshield #endif -#define USES_P126 #define USES_P127 #ifdef CONTROLLER_SET_STABLE diff --git a/src/src/PluginStructs/P126_data_struct.cpp b/src/src/PluginStructs/P126_data_struct.cpp deleted file mode 100644 index 97717cc048..0000000000 --- a/src/src/PluginStructs/P126_data_struct.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "../PluginStructs/P126_data_struct.h" - -#ifdef USES_P126 - -#define P126_ADS1015_MUX_DIFF_01 (0x0000) -#define P126_ADS1015_MUX_DIFF_23 (0x3000) -#define P126_ADS1015_PGA_1_024V (0x0600) //< +/-1.024V range = Gain 4 -#define P126_ADS1015_CONFIG_CQUE_NONE (0x0003) // Disable the comparator (default val) -#define P126_ADS1015_CONFIG_CLAT_NONLAT (0x0000) // Non-latching (default val) -#define P126_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) -#define P126_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) -#define P126_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second -#define P126_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) -#define P126_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion - -P126_data_struct::P126_data_struct(uint8_t i2c_addr, uint8_t c1Cal, uint8_t c2Cal) : c1Calibre(c1Cal), c2Calibre(c2Cal), i2cAddress(i2c_addr) {} - -bool P126_data_struct::read() { - uint16_t config = P126_ADS1015_CONFIG_CQUE_NONE | - P126_ADS1015_CONFIG_CLAT_NONLAT | - P126_ADS1015_CONFIG_CPOL_ACTVLOW | - P126_ADS1015_CONFIG_CMODE_TRAD | - P126_ADS1015_RATE_3300SPS | - P126_ADS1015_CONV_MODE_SINGLE; - - config |= P126_ADS1015_PGA_1_024V; - config |= P126_ADS1015_MUX_DIFF_01; - config |= P126_ADS1015_START_SINGLE_CONV; - - Wire.beginTransmission(i2cAddress); - Wire.write((uint8_t)(0x01)); - Wire.write((uint8_t)(config >> 8)); - Wire.write((uint8_t)(config & 0xFF)); - Wire.endTransmission(); - - delay(9); // See https://github.com/letscontrolit/ESPEasy/issues/3159#issuecomment-660546091 - return readRegister126(0x00); -} - -uint16_t P126_data_struct::readRegister126(uint8_t reg) { - Wire.beginTransmission(i2cAddress); - Wire.write((0x00)); - Wire.endTransmission(); - - if (Wire.requestFrom(i2cAddress, (uint8_t)2) != 2) { - return 0x8000; - } - return (Wire.read() << 8) | Wire.read(); -} - -float_t P126_data_struct::getCurrent(uint8_t canal) -{ - return 0.; -} - -#endif // ifdef USES_P126 diff --git a/src/src/PluginStructs/P126_data_struct.h b/src/src/PluginStructs/P126_data_struct.h deleted file mode 100644 index 25000880fb..0000000000 --- a/src/src/PluginStructs/P126_data_struct.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef PLUGINSTRUCTS_P126_DATA_STRUCT_H -#define PLUGINSTRUCTS_P126_DATA_STRUCT_H - -#include "../../_Plugin_Helper.h" -#ifdef USES_P126 - -struct P126_data_struct : public PluginTaskData_base { -public: - - P126_data_struct(uint8_t i2c_addr, - uint8_t c1Cal, - uint8_t c2Cal); - - bool read(); - float_t getCurrent(uint8_t canal); - -private: - - uint16_t readRegister126(uint8_t reg); - - uint8_t c1Calibre; - uint8_t c2Calibre; - uint8_t i2cAddress; -}; - -#endif // ifdef USES_P126 -#endif // ifndef PLUGINSTRUCTS_P126_DATA_STRUCT_H From 3119a25f0011684a958b2dd2bf8fd5d4aee1d609 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 12:41:55 +0100 Subject: [PATCH 05/13] Migrating plugin from local POC P127 to official P130 --- platformio_esp32_envs.ini | 8 +- ...RMS_ADS1015.ino => _P130_IRMS_ADS1015.ino} | 88 ++++++------- src/src/CustomBuild/define_plugin_sets.h | 5 +- ...7_data_struct.cpp => P130_data_struct.cpp} | 122 +++++++++--------- ...{P127_data_struct.h => P130_data_struct.h} | 16 +-- 5 files changed, 119 insertions(+), 120 deletions(-) rename src/{_P127_IRMS_ADS1015.ino => _P130_IRMS_ADS1015.ino} (62%) rename src/src/PluginStructs/{P127_data_struct.cpp => P130_data_struct.cpp} (69%) rename src/src/PluginStructs/{P127_data_struct.h => P130_data_struct.h} (75%) diff --git a/platformio_esp32_envs.ini b/platformio_esp32_envs.ini index 03a7e5423b..e3efb6de93 100644 --- a/platformio_esp32_envs.ini +++ b/platformio_esp32_envs.ini @@ -29,15 +29,15 @@ build_flags = ${core_esp32_3_3_2.build_flags} monitor_filters = esp32_exception_decoder ; Custom: 4096k version -------------------------- -[env:custom_ESP32_4M316k_current_sensor] +[env:custom_ESP32_4M316k_handfreezer] extends = esp32_common platform = ${esp32_common.platform} lib_deps = ${esp32_common.lib_deps} build_flags = ${esp32_common.build_flags} ;-D PLUGIN_BUILD_CUSTOM - -D USES_P127 - -D FEATURE_ARDUINO_OTA - -D PLUGIN_DISPLAY_COLLECTION + -DUSES_P130 + -DFEATURE_ARDUINO_OTA + -DPLUGIN_DISPLAY_COLLECTION board = esp32dev extra_scripts = ${esp32_common.extra_scripts} pre:tools/pio/pre_custom_esp32.py diff --git a/src/_P127_IRMS_ADS1015.ino b/src/_P130_IRMS_ADS1015.ino similarity index 62% rename from src/_P127_IRMS_ADS1015.ino rename to src/_P130_IRMS_ADS1015.ino index 015d1301f0..db6228c835 100644 --- a/src/_P127_IRMS_ADS1015.ino +++ b/src/_P130_IRMS_ADS1015.ino @@ -1,23 +1,23 @@ #include "_Plugin_Helper.h" -#ifdef USES_P127 +#ifdef USES_P130 // ####################################################################################################### -// ############################# Plugin 127: Irms ADS1015 I2C (base : 0x48) ############################# +// ############################# Plugin 130: Irms ADS1015 I2C (base : 0x48) ############################# // ####################################################################################################### -#include "src/PluginStructs/P127_data_struct.h" +#include "src/PluginStructs/P130_data_struct.h" -#define PLUGIN_127 -#define PLUGIN_ID_127 127 -#define PLUGIN_NAME_127 "Irms - ADS1015" -#define PLUGIN_VALUENAME1_127 "current1" -#define PLUGIN_VALUENAME2_127 "power1" -#define PLUGIN_VALUENAME3_127 "current2" -#define PLUGIN_VALUENAME4_127 "power2" +#define PLUGIN_130 +#define PLUGIN_ID_130 130 +#define PLUGIN_NAME_130 "Irms - ADS1015" +#define PLUGIN_VALUENAME1_130 "current1" +#define PLUGIN_VALUENAME2_130 "power1" +#define PLUGIN_VALUENAME3_130 "current2" +#define PLUGIN_VALUENAME4_130 "power2" -boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) +boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) { boolean success = false; @@ -26,7 +26,7 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) { case PLUGIN_DEVICE_ADD: { - Device[++deviceCount].Number = PLUGIN_ID_127; + Device[++deviceCount].Number = PLUGIN_ID_130; Device[deviceCount].Type = DEVICE_TYPE_I2C; Device[deviceCount].VType = Sensor_VType::SENSOR_TYPE_SINGLE; Device[deviceCount].Ports = 0; @@ -42,16 +42,16 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) case PLUGIN_GET_DEVICENAME: { - string = F(PLUGIN_NAME_127); + string = F(PLUGIN_NAME_130); break; } case PLUGIN_GET_DEVICEVALUENAMES: { - strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_127)); - strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1], PSTR(PLUGIN_VALUENAME2_127)); - strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[2], PSTR(PLUGIN_VALUENAME3_127)); - strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[3], PSTR(PLUGIN_VALUENAME4_127)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_130)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1], PSTR(PLUGIN_VALUENAME2_130)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[2], PSTR(PLUGIN_VALUENAME3_130)); + strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[3], PSTR(PLUGIN_VALUENAME4_130)); break; } @@ -71,15 +71,15 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) case PLUGIN_WEBFORM_LOAD: { addFormSubHeader(F("Calibration - General")); - addFormNumericBox(F("Current Frequency"), F("p127_frequency"), PCONFIG_LONG(0), 50, 60); - addFormNumericBox(F("Nb Sinus to read"), F("p127_nb_sinus"), PCONFIG_LONG(1), 1, 25); + addFormNumericBox(F("Current Frequency"), F("p130_frequency"), PCONFIG_LONG(0), 50, 60); + addFormNumericBox(F("Nb Sinus to read"), F("p130_nb_sinus"), PCONFIG_LONG(1), 1, 25); addFormNote("Take care! Reading sinus is a blocking process. With a SCT013 (60A/50A/30A - 1V), reading 2 sinus on 50Hz giving stable values."); - addFormCheckBox(F("ADC Conversion Mode Continous"), F("p127_adc_continous"), PCONFIG_LONG(2)); - addFormCheckBox(F("Small Debug to INFO Log"), F("p127_debug"), PCONFIG(3)); - addFormFloatNumberBox(F("Voltage Estimated"), F("p127_voltageEstimated"), PCONFIG_FLOAT(0), 1.0, 400000.0, 2); + addFormCheckBox(F("ADC Conversion Mode Continous"), F("p130_adc_continous"), PCONFIG_LONG(2)); + addFormCheckBox(F("Small Debug to INFO Log"), F("p130_debug"), PCONFIG(3)); + addFormFloatNumberBox(F("Voltage Estimated"), F("p130_voltageEstimated"), PCONFIG_FLOAT(0), 1.0, 400000.0, 2); addFormSubHeader(F("Calibration")); - addFormNumericBox(F("Canal 1 - Max Current"), F("p127_calCurrent1"), PCONFIG(1), 1, 250); - addFormNumericBox(F("Canal 2 - Max Current"), F("p127_calCurrent2"), PCONFIG(2), 1, 250); + addFormNumericBox(F("Canal 1 - Max Current"), F("p130_calCurrent1"), PCONFIG(1), 1, 250); + addFormNumericBox(F("Canal 2 - Max Current"), F("p130_calCurrent2"), PCONFIG(2), 1, 250); success = true; break; @@ -88,14 +88,14 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) case PLUGIN_WEBFORM_SAVE: { PCONFIG(0) = getFormItemInt(F("i2c_addr")); - PCONFIG_LONG(0) = getFormItemInt(F("p127_frequency")); - PCONFIG_LONG(1) = getFormItemInt(F("p127_nb_sinus")); - PCONFIG_LONG(2) = (true == isFormItemChecked(F("p127_adc_continous")))?1:0; - PCONFIG(3) = (true == isFormItemChecked(F("p127_debug")))?1:0; + PCONFIG_LONG(0) = getFormItemInt(F("p130_frequency")); + PCONFIG_LONG(1) = getFormItemInt(F("p130_nb_sinus")); + PCONFIG_LONG(2) = (true == isFormItemChecked(F("p130_adc_continous")))?1:0; + PCONFIG(3) = (true == isFormItemChecked(F("p130_debug")))?1:0; - PCONFIG_FLOAT(0) = getFormItemFloat(F("p127_voltageEstimated")); - PCONFIG(1) = getFormItemInt(F("p127_calCurrent1")); - PCONFIG(2) = getFormItemInt(F("p127_calCurrent2")); + PCONFIG_FLOAT(0) = getFormItemFloat(F("p130_voltageEstimated")); + PCONFIG(1) = getFormItemInt(F("p130_calCurrent1")); + PCONFIG(2) = getFormItemInt(F("p130_calCurrent2")); success = true; break; @@ -112,12 +112,12 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) const uint8_t nbSinus = PCONFIG_LONG(1); const uint8_t adc_continous = PCONFIG_LONG(2); - initPluginTaskData(event->TaskIndex, new (std::nothrow) P127_data_struct(address, calCurrent1, calCurrent2, voltageEstimated, currentFreq, nbSinus, adc_continous)); - P127_data_struct *P127_data = - static_cast(getPluginTaskData(event->TaskIndex)); + initPluginTaskData(event->TaskIndex, new (std::nothrow) P130_data_struct(address, calCurrent1, calCurrent2, voltageEstimated, currentFreq, nbSinus, adc_continous)); + P130_data_struct *P130_data = + static_cast(getPluginTaskData(event->TaskIndex)); - if (nullptr != P127_data) { - P127_data->setDebug(debug); + if (nullptr != P130_data) { + P130_data->setDebug(debug); success = true; } break; @@ -125,17 +125,17 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) case PLUGIN_READ: { - P127_data_struct *P127_data = - static_cast(getPluginTaskData(event->TaskIndex)); + P130_data_struct *P130_data = + static_cast(getPluginTaskData(event->TaskIndex)); - if (nullptr != P127_data) { + if (nullptr != P130_data) { float_t value = 0.; - P127_data->readCurrent(1, value); + P130_data->readCurrent(1, value); UserVar[event->BaseVarIndex+0] = value; - UserVar[event->BaseVarIndex+1] = P127_data->estimatePower(value); - P127_data->readCurrent(2, value); + UserVar[event->BaseVarIndex+1] = P130_data->estimatePower(value); + P130_data->readCurrent(2, value); UserVar[event->BaseVarIndex+2] = value; - UserVar[event->BaseVarIndex+3] = P127_data->estimatePower(value); + UserVar[event->BaseVarIndex+3] = P130_data->estimatePower(value); { String log; @@ -154,4 +154,4 @@ boolean Plugin_127(uint8_t function, struct EventStruct *event, String& string) return success; } -#endif // USES_P127 +#endif // USES_P130 diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index f822b8761f..686d28cbb8 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -1053,8 +1053,6 @@ To create/register a plugin, you have to : #define USES_P079 // Wemos Motoshield #endif -#define USES_P127 - #ifdef CONTROLLER_SET_STABLE #define USES_C001 // Domoticz HTTP #define USES_C002 // Domoticz MQTT @@ -1191,6 +1189,7 @@ To create/register a plugin, you have to : #define USES_P120 // ADXL345 I2C #define USES_P121 // HMC5883L #define USES_P125 // ADXL345 SPI + #define USES_P130 // Current Sensor Irms - ADS1015 #endif @@ -1336,7 +1335,7 @@ To create/register a plugin, you have to : //#define USES_P124 // Ventus_W266_RFM69 #define USES_P125 // ArduCAM #define USES_P127 // Teleinfo - #define USES_P130 // VEML6075 + #define USES_P130 // [Irms - ADS1015](https://github.com/letscontrolit/ESPEasy/issues/3839) #define USES_P131 // SHT3X #define USES_P133 // VL53L0X #define USES_P141 // LedStrip diff --git a/src/src/PluginStructs/P127_data_struct.cpp b/src/src/PluginStructs/P130_data_struct.cpp similarity index 69% rename from src/src/PluginStructs/P127_data_struct.cpp rename to src/src/PluginStructs/P130_data_struct.cpp index 03325764ca..e71e615171 100644 --- a/src/src/PluginStructs/P127_data_struct.cpp +++ b/src/src/PluginStructs/P130_data_struct.cpp @@ -1,25 +1,25 @@ -#include "../PluginStructs/P127_data_struct.h" +#include "../PluginStructs/P130_data_struct.h" -#ifdef USES_P127 +#ifdef USES_P130 -#define P127_ADS1X15_REG_POINTER_CONVERT (0x00) -#define P127_ADS1X15_REG_POINTER_CONFIG (0x01) -#define P127_ADS1X15_REG_POINTER_THRESH_LO (0x02) -#define P127_ADS1X15_REG_POINTER_THRESH_HI (0x03) +#define P130_ADS1X15_REG_POINTER_CONVERT (0x00) +#define P130_ADS1X15_REG_POINTER_CONFIG (0x01) +#define P130_ADS1X15_REG_POINTER_THRESH_LO (0x02) +#define P130_ADS1X15_REG_POINTER_THRESH_HI (0x03) -#define P127_ADS1015_MUX_DIFF_01 (0x0000) -#define P127_ADS1015_MUX_DIFF_23 (0x3000) -#define P127_ADS1015_PGA_1_024V (0x0600) //< +/-1.024V range = Gain 4 => datasheet says 1bit = 0.5mV -#define P127_ADS1015_CONFIG_CQUE_NONE (0x0003) // Disable the comparator (default val) -#define P127_ADS1015_CONFIG_CLAT_NONLAT (0x0000) // Non-latching (default val) -#define P127_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) -#define P127_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) -#define P127_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second -#define P127_ADS1015_CONV_MODE_CONTINUOUS (0x0000) // Single-shot mode (default) -#define P127_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) -#define P127_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion +#define P130_ADS1015_MUX_DIFF_01 (0x0000) +#define P130_ADS1015_MUX_DIFF_23 (0x3000) +#define P130_ADS1015_PGA_1_024V (0x0600) //< +/-1.024V range = Gain 4 => datasheet says 1bit = 0.5mV +#define P130_ADS1015_CONFIG_CQUE_NONE (0x0003) // Disable the comparator (default val) +#define P130_ADS1015_CONFIG_CLAT_NONLAT (0x0000) // Non-latching (default val) +#define P130_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) +#define P130_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) +#define P130_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second +#define P130_ADS1015_CONV_MODE_CONTINUOUS (0x0000) // Single-shot mode (default) +#define P130_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) +#define P130_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion -P127_data_struct::P127_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8_t _calCurrent2, float_t _calVoltage, uint8_t _currentFreq, uint8_t _nbSinus, uint8_t _convModeContinuous) : +P130_data_struct::P130_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8_t _calCurrent2, float_t _calVoltage, uint8_t _currentFreq, uint8_t _nbSinus, uint8_t _convModeContinuous) : i2cAddress(i2c_addr), calCurrent1(_calCurrent1), calCurrent2(_calCurrent2), @@ -30,7 +30,7 @@ P127_data_struct::P127_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8 this->debug = 0; } -void P127_data_struct::setDebug(uint8_t _debug) { +void P130_data_struct::setDebug(uint8_t _debug) { this->debug = _debug; if (this->debug) { String log; @@ -48,11 +48,11 @@ void P127_data_struct::setDebug(uint8_t _debug) { } } -uint8_t P127_data_struct::getDebug() { +uint8_t P130_data_struct::getDebug() { return this->debug; } -boolean P127_data_struct::writeRegister(uint8_t registerAddr, uint16_t registerValue) { +boolean P130_data_struct::writeRegister(uint8_t registerAddr, uint16_t registerValue) { boolean result = false; uint8_t res = 0; Wire.beginTransmission(this->i2cAddress); @@ -71,7 +71,7 @@ boolean P127_data_struct::writeRegister(uint8_t registerAddr, uint16_t registerV return result; } -boolean P127_data_struct::readRegister(uint8_t registerAddr, uint16_t& registerValue) { +boolean P130_data_struct::readRegister(uint8_t registerAddr, uint16_t& registerValue) { boolean result = false; const uint8_t requestedByte = 2; Wire.beginTransmission(this->i2cAddress); @@ -85,34 +85,34 @@ boolean P127_data_struct::readRegister(uint8_t registerAddr, uint16_t& registerV return result; } -uint16_t P127_data_struct::readRegisterFacility(uint8_t registerAddr) { +uint16_t P130_data_struct::readRegisterFacility(uint8_t registerAddr) { uint16_t registerValue = 0; this->readRegister(registerAddr, registerValue); return registerValue; } -boolean P127_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue) { +boolean P130_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue) { boolean result = false; uint16_t registerValue = 0; - uint16_t configGlobal = P127_ADS1015_CONFIG_CQUE_NONE | - P127_ADS1015_CONFIG_CLAT_NONLAT | - P127_ADS1015_CONFIG_CPOL_ACTVLOW | - P127_ADS1015_CONFIG_CMODE_TRAD | - P127_ADS1015_RATE_3300SPS | - P127_ADS1015_PGA_1_024V; + uint16_t configGlobal = P130_ADS1015_CONFIG_CQUE_NONE | + P130_ADS1015_CONFIG_CLAT_NONLAT | + P130_ADS1015_CONFIG_CPOL_ACTVLOW | + P130_ADS1015_CONFIG_CMODE_TRAD | + P130_ADS1015_RATE_3300SPS | + P130_ADS1015_PGA_1_024V; configGlobal |= muxConf; uint16_t configStartSingle = configGlobal | - P127_ADS1015_CONV_MODE_SINGLE | - P127_ADS1015_START_SINGLE_CONV; + P130_ADS1015_CONV_MODE_SINGLE | + P130_ADS1015_START_SINGLE_CONV; uint16_t configStartContinuous = configGlobal | - P127_ADS1015_CONV_MODE_CONTINUOUS | - P127_ADS1015_START_SINGLE_CONV; + P130_ADS1015_CONV_MODE_CONTINUOUS | + P130_ADS1015_START_SINGLE_CONV; uint16_t configStop = configGlobal | - P127_ADS1015_CONV_MODE_SINGLE; + P130_ADS1015_CONV_MODE_SINGLE; // write conf+ =>start reading - if ( false == this->writeRegister(P127_ADS1X15_REG_POINTER_CONFIG, configStartSingle) ) { + if ( false == this->writeRegister(P130_ADS1X15_REG_POINTER_CONFIG, configStartSingle) ) { addLog(LOG_LEVEL_INFO, F("readadcsingle write register conf failed")); result = false; } else { @@ -120,8 +120,8 @@ boolean P127_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue // requesting if conversion ended ulong readingLongUS = micros(); while ( micros() < (readingLongUS + 1000) ) { - if ( ( this->readRegisterFacility(P127_ADS1X15_REG_POINTER_CONFIG) & 0x8000) != 0 ) { - if ( true == this->readRegister(P127_ADS1X15_REG_POINTER_CONVERT, registerValue) ) { + if ( ( this->readRegisterFacility(P130_ADS1X15_REG_POINTER_CONFIG) & 0x8000) != 0 ) { + if ( true == this->readRegister(P130_ADS1X15_REG_POINTER_CONVERT, registerValue) ) { // Shift 12-bit results right 4 bits for the ADS1015, // making sure we keep the sign bit intact adcValue = ((int16_t)(registerValue >> 4)); @@ -138,32 +138,32 @@ boolean P127_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue return result; } -boolean P127_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t period_ms, float_t& adcIrms, uint16_t& nbSample) { +boolean P130_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t period_ms, float_t& adcIrms, uint16_t& nbSample) { boolean success = false; boolean pbmWhileReading = false; uint16_t registerValue = 0; uint64_t sumI = 0, sqrI = 0; adcIrms = 0.; nbSample = 0; - uint16_t configGlobal = P127_ADS1015_CONFIG_CQUE_NONE | - P127_ADS1015_CONFIG_CLAT_NONLAT | - P127_ADS1015_CONFIG_CPOL_ACTVLOW | - P127_ADS1015_CONFIG_CMODE_TRAD | - P127_ADS1015_RATE_3300SPS | - P127_ADS1015_PGA_1_024V; + uint16_t configGlobal = P130_ADS1015_CONFIG_CQUE_NONE | + P130_ADS1015_CONFIG_CLAT_NONLAT | + P130_ADS1015_CONFIG_CPOL_ACTVLOW | + P130_ADS1015_CONFIG_CMODE_TRAD | + P130_ADS1015_RATE_3300SPS | + P130_ADS1015_PGA_1_024V; configGlobal |= muxConf; uint16_t configStartSingle = configGlobal | - P127_ADS1015_CONV_MODE_SINGLE | - P127_ADS1015_START_SINGLE_CONV; + P130_ADS1015_CONV_MODE_SINGLE | + P130_ADS1015_START_SINGLE_CONV; uint16_t configStartContinuous = configGlobal | - P127_ADS1015_CONV_MODE_CONTINUOUS | - P127_ADS1015_START_SINGLE_CONV; + P130_ADS1015_CONV_MODE_CONTINUOUS | + P130_ADS1015_START_SINGLE_CONV; uint16_t configStop = configGlobal | - P127_ADS1015_CONV_MODE_SINGLE; + P130_ADS1015_CONV_MODE_SINGLE; // write conf+ =>start reading - if ( false == this->writeRegister(P127_ADS1X15_REG_POINTER_CONFIG, configStartContinuous) ) { + if ( false == this->writeRegister(P130_ADS1X15_REG_POINTER_CONFIG, configStartContinuous) ) { addLog(LOG_LEVEL_INFO, F("readadccontinuous write register conf failed")); success = false; } else { @@ -172,7 +172,7 @@ boolean P127_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t p pbmWhileReading = false; ulong endPeriod = millis() + period_ms; while ( millis() < endPeriod ) { - if ( true != this->readRegister(P127_ADS1X15_REG_POINTER_CONVERT, registerValue) ) { + if ( true != this->readRegister(P130_ADS1X15_REG_POINTER_CONVERT, registerValue) ) { pbmWhileReading = true; break; } else { @@ -186,7 +186,7 @@ boolean P127_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t p } sqrI = adcValue * adcValue; sumI += sqrI; - #ifdef P127_DEBUG_DEV + #ifdef P130_DEBUG_DEV String log = "readadccontinuous registerValue=" + String(registerValue); log += " adcValue=" + String(adcValue); log += " sqrI=" + String((unsigned long)(sqrI >>16), HEX) + String((unsigned long)(sqrI & 0x0000FFFF), HEX); @@ -202,17 +202,17 @@ boolean P127_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t p success = true; } } - if ( false == this->writeRegister(P127_ADS1X15_REG_POINTER_CONFIG, configStop) ) { + if ( false == this->writeRegister(P130_ADS1X15_REG_POINTER_CONFIG, configStop) ) { addLog(LOG_LEVEL_INFO, F("readadccontinuous stop reading failed")); } return success; } -float_t P127_data_struct::estimatePower(float_t current) { +float_t P130_data_struct::estimatePower(float_t current) { return calVoltage * current; } -boolean P127_data_struct::readCurrent(uint8_t canal, float_t& currentValue) { +boolean P130_data_struct::readCurrent(uint8_t canal, float_t& currentValue) { boolean success = false; boolean calculatingRMSSuccess = true; uint16_t registerValue = 0; @@ -227,13 +227,13 @@ boolean P127_data_struct::readCurrent(uint8_t canal, float_t& currentValue) { if ( ( 1 != canal ) && ( 2 != canal ) ) success = false; else { - uint16_t muxConf = P127_ADS1015_MUX_DIFF_01; + uint16_t muxConf = P130_ADS1015_MUX_DIFF_01; if ( 1 == canal ) - muxConf = P127_ADS1015_MUX_DIFF_01; + muxConf = P130_ADS1015_MUX_DIFF_01; else if ( 2 == canal ) - muxConf = P127_ADS1015_MUX_DIFF_23; + muxConf = P130_ADS1015_MUX_DIFF_23; else - muxConf = P127_ADS1015_MUX_DIFF_01; //default value, should never happened + muxConf = P130_ADS1015_MUX_DIFF_01; //default value, should never happened if ( 1 != this->convModeContinuous ) { // start loop @@ -278,4 +278,4 @@ boolean P127_data_struct::readCurrent(uint8_t canal, float_t& currentValue) { return success; } -#endif // ifdef USES_P127 +#endif // ifdef USES_P130 diff --git a/src/src/PluginStructs/P127_data_struct.h b/src/src/PluginStructs/P130_data_struct.h similarity index 75% rename from src/src/PluginStructs/P127_data_struct.h rename to src/src/PluginStructs/P130_data_struct.h index 807bca3e77..b6307fe717 100644 --- a/src/src/PluginStructs/P127_data_struct.h +++ b/src/src/PluginStructs/P130_data_struct.h @@ -1,15 +1,15 @@ -#ifndef PLUGINSTRUCTS_P127_DATA_STRUCT_H -#define PLUGINSTRUCTS_P127_DATA_STRUCT_H +#ifndef PLUGINSTRUCTS_P130_DATA_STRUCT_H +#define PLUGINSTRUCTS_P130_DATA_STRUCT_H #include "../../_Plugin_Helper.h" -#ifdef USES_P127 +#ifdef USES_P130 -#undef P127_DEBUG_DEV +#undef P130_DEBUG_DEV -struct P127_data_struct : public PluginTaskData_base { +struct P130_data_struct : public PluginTaskData_base { public: - P127_data_struct(uint8_t i2c_addr, + P130_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8_t _calCurrent2, float_t _calVoltage, @@ -40,5 +40,5 @@ struct P127_data_struct : public PluginTaskData_base { boolean readAdcContinuousRmsValue(uint16_t muxConf, uint16_t period_ms, float_t& adcIrms, uint16_t& nbSample); }; -#endif // ifdef USES_P127 -#endif // ifndef PLUGINSTRUCTS_P127_DATA_STRUCT_H +#endif // ifdef USES_P130 +#endif // ifndef PLUGINSTRUCTS_P130_DATA_STRUCT_H From 1135c89b73f48896c131a3a04a88104df3646d4c Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 15:13:38 +0100 Subject: [PATCH 06/13] Applying right way to get a personnal build without polluting git repository --- platformio.ini | 2 +- src/Custom-sample.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 1b3f9d656a..6d8922634c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -22,7 +22,7 @@ extra_configs = ; default_envs = custom_ESP8266_4M1M, custom_ESP32_4M316k ; default_envs = custom_ESP8266_4M1M -default_envs = custom_ESP32_4M316k_current_sensor +default_envs = custom_ESP32_4M316k ;default_envs = normal_ESP8266_4M1M ;default_envs = test_beta_ESP8266_4M1M diff --git a/src/Custom-sample.h b/src/Custom-sample.h index 6022ef7041..cec89e2db1 100644 --- a/src/Custom-sample.h +++ b/src/Custom-sample.h @@ -382,6 +382,11 @@ static const char DATA_ESPEASY_DEFAULT_MIN_CSS[] PROGMEM = { // #define USES_P120 // ADXL345 I2C Acceleration / Gravity // #define USES_P124 // I2C MultiRelay // #define USES_P125 // ADXL345 SPI Acceleration / Gravity +// #define USES_P126 // +// #define USES_P127 // +// #define USES_P128 // +// #define USES_P129 // +// #define USES_P130 // Current Sensor Irms - ADS1015 // Special plugins needing IR library From 26af21f16a53e113e9774fac44c20af3c72a7c3c Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 15:15:02 +0100 Subject: [PATCH 07/13] Few rename and cleaning code/default values --- src/_P130_IRMS_ADS1015.ino | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/_P130_IRMS_ADS1015.ino b/src/_P130_IRMS_ADS1015.ino index db6228c835..329a6a2a4a 100644 --- a/src/_P130_IRMS_ADS1015.ino +++ b/src/_P130_IRMS_ADS1015.ino @@ -10,7 +10,7 @@ #define PLUGIN_130 #define PLUGIN_ID_130 130 -#define PLUGIN_NAME_130 "Irms - ADS1015" +#define PLUGIN_NAME_130 "Current Sensor Irms - ADS1015" #define PLUGIN_VALUENAME1_130 "current1" #define PLUGIN_VALUENAME2_130 "power1" #define PLUGIN_VALUENAME3_130 "current2" @@ -76,7 +76,7 @@ boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) addFormNote("Take care! Reading sinus is a blocking process. With a SCT013 (60A/50A/30A - 1V), reading 2 sinus on 50Hz giving stable values."); addFormCheckBox(F("ADC Conversion Mode Continous"), F("p130_adc_continous"), PCONFIG_LONG(2)); addFormCheckBox(F("Small Debug to INFO Log"), F("p130_debug"), PCONFIG(3)); - addFormFloatNumberBox(F("Voltage Estimated"), F("p130_voltageEstimated"), PCONFIG_FLOAT(0), 1.0, 400000.0, 2); + addFormFloatNumberBox(F("Voltage Estimated"), F("p130_voltageEstimated"), PCONFIG_FLOAT(0), 0.0, 380.0, 2); addFormSubHeader(F("Calibration")); addFormNumericBox(F("Canal 1 - Max Current"), F("p130_calCurrent1"), PCONFIG(1), 1, 250); addFormNumericBox(F("Canal 2 - Max Current"), F("p130_calCurrent2"), PCONFIG(2), 1, 250); @@ -88,14 +88,15 @@ boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) case PLUGIN_WEBFORM_SAVE: { PCONFIG(0) = getFormItemInt(F("i2c_addr")); + PCONFIG(1) = getFormItemInt(F("p130_calCurrent1")); + PCONFIG(2) = getFormItemInt(F("p130_calCurrent2")); + PCONFIG(3) = (true == isFormItemChecked(F("p130_debug")))?1:0; + PCONFIG_LONG(0) = getFormItemInt(F("p130_frequency")); PCONFIG_LONG(1) = getFormItemInt(F("p130_nb_sinus")); PCONFIG_LONG(2) = (true == isFormItemChecked(F("p130_adc_continous")))?1:0; - PCONFIG(3) = (true == isFormItemChecked(F("p130_debug")))?1:0; PCONFIG_FLOAT(0) = getFormItemFloat(F("p130_voltageEstimated")); - PCONFIG(1) = getFormItemInt(F("p130_calCurrent1")); - PCONFIG(2) = getFormItemInt(F("p130_calCurrent2")); success = true; break; @@ -106,11 +107,11 @@ boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) const uint8_t address = PCONFIG(0); const uint8_t calCurrent1 = PCONFIG(1); const uint8_t calCurrent2 = PCONFIG(2); - const float_t voltageEstimated = PCONFIG_FLOAT(0); const uint8_t debug = PCONFIG(3); const uint8_t currentFreq = PCONFIG_LONG(0); const uint8_t nbSinus = PCONFIG_LONG(1); const uint8_t adc_continous = PCONFIG_LONG(2); + const float_t voltageEstimated = PCONFIG_FLOAT(0); initPluginTaskData(event->TaskIndex, new (std::nothrow) P130_data_struct(address, calCurrent1, calCurrent2, voltageEstimated, currentFreq, nbSinus, adc_continous)); P130_data_struct *P130_data = From 6ffd1c139a03ed6197a8838af4937ef4ed1ef128 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 15:15:46 +0100 Subject: [PATCH 08/13] Changing default conversion rate to get a more stable value Centralised default reading conf of ADS1015 --- src/src/PluginStructs/P130_data_struct.cpp | 26 ++++++++++++---------- src/src/PluginStructs/P130_data_struct.h | 1 + 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/src/PluginStructs/P130_data_struct.cpp b/src/src/PluginStructs/P130_data_struct.cpp index e71e615171..614f596d61 100644 --- a/src/src/PluginStructs/P130_data_struct.cpp +++ b/src/src/PluginStructs/P130_data_struct.cpp @@ -15,6 +15,8 @@ #define P130_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) #define P130_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) #define P130_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second +#define P130_ADS1015_RATE_2400SPS (0x00A0) // < 2400 samples per second +#define P130_ADS1015_RATE_1600SPS (0x0080) // < 1600 samples per second #define P130_ADS1015_CONV_MODE_CONTINUOUS (0x0000) // Single-shot mode (default) #define P130_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) #define P130_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion @@ -91,15 +93,20 @@ uint16_t P130_data_struct::readRegisterFacility(uint8_t registerAddr) { return registerValue; } +uint16_t P130_data_struct::getDefaultADS1015ReadConfig(){ + return P130_ADS1015_CONFIG_CQUE_NONE | + P130_ADS1015_CONFIG_CLAT_NONLAT | + P130_ADS1015_CONFIG_CPOL_ACTVLOW | + P130_ADS1015_CONFIG_CMODE_TRAD | + P130_ADS1015_RATE_1600SPS | + P130_ADS1015_PGA_1_024V; + +} + boolean P130_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue) { boolean result = false; uint16_t registerValue = 0; - uint16_t configGlobal = P130_ADS1015_CONFIG_CQUE_NONE | - P130_ADS1015_CONFIG_CLAT_NONLAT | - P130_ADS1015_CONFIG_CPOL_ACTVLOW | - P130_ADS1015_CONFIG_CMODE_TRAD | - P130_ADS1015_RATE_3300SPS | - P130_ADS1015_PGA_1_024V; + uint16_t configGlobal = P130_data_struct::getDefaultADS1015ReadConfig(); configGlobal |= muxConf; uint16_t configStartSingle = configGlobal | @@ -145,12 +152,7 @@ boolean P130_data_struct::readAdcContinuousRmsValue(uint16_t muxConf, uint16_t p uint64_t sumI = 0, sqrI = 0; adcIrms = 0.; nbSample = 0; - uint16_t configGlobal = P130_ADS1015_CONFIG_CQUE_NONE | - P130_ADS1015_CONFIG_CLAT_NONLAT | - P130_ADS1015_CONFIG_CPOL_ACTVLOW | - P130_ADS1015_CONFIG_CMODE_TRAD | - P130_ADS1015_RATE_3300SPS | - P130_ADS1015_PGA_1_024V; + uint16_t configGlobal = P130_data_struct::getDefaultADS1015ReadConfig(); configGlobal |= muxConf; uint16_t configStartSingle = configGlobal | diff --git a/src/src/PluginStructs/P130_data_struct.h b/src/src/PluginStructs/P130_data_struct.h index b6307fe717..fe7de822d5 100644 --- a/src/src/PluginStructs/P130_data_struct.h +++ b/src/src/PluginStructs/P130_data_struct.h @@ -33,6 +33,7 @@ struct P130_data_struct : public PluginTaskData_base { uint8_t convModeContinuous; uint8_t debug; + static uint16_t getDefaultADS1015ReadConfig(); boolean writeRegister(uint8_t registerAddr, uint16_t registerValue); boolean readRegister(uint8_t registerAddr, uint16_t& registerValue); uint16_t readRegisterFacility(uint8_t registerAddr); From 89be65e5a39610ea91706e0ae206a48678b6f454 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 17:31:05 +0100 Subject: [PATCH 09/13] rolling back to origin --- platformio.ini | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index 6d8922634c..2d7b77bbde 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,9 +20,8 @@ extra_configs = platformio_esp32_envs.ini platformio_special_envs.ini -; default_envs = custom_ESP8266_4M1M, custom_ESP32_4M316k +default_envs = custom_ESP8266_4M1M, custom_ESP32_4M316k ; default_envs = custom_ESP8266_4M1M -default_envs = custom_ESP32_4M316k ;default_envs = normal_ESP8266_4M1M ;default_envs = test_beta_ESP8266_4M1M From 69e9877b7af63ab1d0f5cc8f046b1f6c2bc60f04 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 6 Mar 2022 23:50:15 +0100 Subject: [PATCH 10/13] Adding possibility to select Sample Per Second between 1600/2400/3300 (sample count are similar between 2400 and 3300 => ESP32 too slow to benefit of 3300 BUT 2400 is more accurate!) --- src/_P130_IRMS_ADS1015.ino | 16 ++++++++++++---- src/src/PluginStructs/P130_data_struct.cpp | 16 ++++++++-------- src/src/PluginStructs/P130_data_struct.h | 9 +++++++-- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/_P130_IRMS_ADS1015.ino b/src/_P130_IRMS_ADS1015.ino index 329a6a2a4a..76001dde70 100644 --- a/src/_P130_IRMS_ADS1015.ino +++ b/src/_P130_IRMS_ADS1015.ino @@ -58,19 +58,25 @@ boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) case PLUGIN_I2C_HAS_ADDRESS: case PLUGIN_WEBFORM_SHOW_I2C_PARAMS: { - #define ADS1015_I2C_OPTION 4 + #define ADS1015_I2C_ADDR_COUNT 4 const uint8_t i2cAddressValues[] = { 0x48, 0x49, 0x4A, 0x4B }; if (function == PLUGIN_WEBFORM_SHOW_I2C_PARAMS) { - addFormSelectorI2C(F("i2c_addr"), ADS1015_I2C_OPTION, i2cAddressValues, PCONFIG(0)); + addFormSelectorI2C(F("i2c_addr"), ADS1015_I2C_ADDR_COUNT, i2cAddressValues, PCONFIG(0)); } else { - success = intArrayContains(ADS1015_I2C_OPTION, i2cAddressValues, event->Par1); + success = intArrayContains(ADS1015_I2C_ADDR_COUNT, i2cAddressValues, event->Par1); } break; } case PLUGIN_WEBFORM_LOAD: { + #define ADS1015_SPS_AVAILABLE_COUNT 3 + const String spsAvailableStr[] = {String(1600), String(2400), String(3300)}; + const int spsAvailableVal[] = {P130_ADS1015_RATE_1600SPS, + P130_ADS1015_RATE_2400SPS, + P130_ADS1015_RATE_3300SPS}; addFormSubHeader(F("Calibration - General")); + addFormSelector(F("SPS"),F("p130_sps"), ADS1015_SPS_AVAILABLE_COUNT, spsAvailableStr,spsAvailableVal, PCONFIG_LONG(3)); addFormNumericBox(F("Current Frequency"), F("p130_frequency"), PCONFIG_LONG(0), 50, 60); addFormNumericBox(F("Nb Sinus to read"), F("p130_nb_sinus"), PCONFIG_LONG(1), 1, 25); addFormNote("Take care! Reading sinus is a blocking process. With a SCT013 (60A/50A/30A - 1V), reading 2 sinus on 50Hz giving stable values."); @@ -95,6 +101,7 @@ boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) PCONFIG_LONG(0) = getFormItemInt(F("p130_frequency")); PCONFIG_LONG(1) = getFormItemInt(F("p130_nb_sinus")); PCONFIG_LONG(2) = (true == isFormItemChecked(F("p130_adc_continous")))?1:0; + PCONFIG_LONG(3) = getFormItemInt(F("p130_sps")); PCONFIG_FLOAT(0) = getFormItemFloat(F("p130_voltageEstimated")); @@ -111,9 +118,10 @@ boolean Plugin_130(uint8_t function, struct EventStruct *event, String& string) const uint8_t currentFreq = PCONFIG_LONG(0); const uint8_t nbSinus = PCONFIG_LONG(1); const uint8_t adc_continous = PCONFIG_LONG(2); + const uint8_t sps = PCONFIG_LONG(3); const float_t voltageEstimated = PCONFIG_FLOAT(0); - initPluginTaskData(event->TaskIndex, new (std::nothrow) P130_data_struct(address, calCurrent1, calCurrent2, voltageEstimated, currentFreq, nbSinus, adc_continous)); + initPluginTaskData(event->TaskIndex, new (std::nothrow) P130_data_struct(address, calCurrent1, calCurrent2, voltageEstimated, currentFreq, nbSinus, adc_continous, sps)); P130_data_struct *P130_data = static_cast(getPluginTaskData(event->TaskIndex)); diff --git a/src/src/PluginStructs/P130_data_struct.cpp b/src/src/PluginStructs/P130_data_struct.cpp index 614f596d61..f3adb2fb35 100644 --- a/src/src/PluginStructs/P130_data_struct.cpp +++ b/src/src/PluginStructs/P130_data_struct.cpp @@ -14,21 +14,19 @@ #define P130_ADS1015_CONFIG_CLAT_NONLAT (0x0000) // Non-latching (default val) #define P130_ADS1015_CONFIG_CPOL_ACTVLOW (0x0000) // Alert/Rdy active low (default val) #define P130_ADS1015_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator (default val) -#define P130_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second -#define P130_ADS1015_RATE_2400SPS (0x00A0) // < 2400 samples per second -#define P130_ADS1015_RATE_1600SPS (0x0080) // < 1600 samples per second #define P130_ADS1015_CONV_MODE_CONTINUOUS (0x0000) // Single-shot mode (default) #define P130_ADS1015_CONV_MODE_SINGLE (0x0100) // Single-shot mode (default) #define P130_ADS1015_START_SINGLE_CONV (0x8000) // Start a single conversion -P130_data_struct::P130_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8_t _calCurrent2, float_t _calVoltage, uint8_t _currentFreq, uint8_t _nbSinus, uint8_t _convModeContinuous) : +P130_data_struct::P130_data_struct(uint8_t i2c_addr, uint8_t _calCurrent1, uint8_t _calCurrent2, float_t _calVoltage, uint8_t _currentFreq, uint8_t _nbSinus, uint8_t _convModeContinuous, uint8_t _sps) : i2cAddress(i2c_addr), calCurrent1(_calCurrent1), calCurrent2(_calCurrent2), calVoltage(_calVoltage), currentFreq(_currentFreq), nbSinus(_nbSinus), - convModeContinuous (_convModeContinuous) { + convModeContinuous (_convModeContinuous), + sps (_sps) { this->debug = 0; } @@ -46,6 +44,8 @@ void P130_data_struct::setDebug(uint8_t _debug) { log += this->currentFreq; log += F(" nbSinus="); log += this->nbSinus; + log += F(" SPS="); + log += this->sps; addLog(LOG_LEVEL_INFO, log); } } @@ -98,9 +98,8 @@ uint16_t P130_data_struct::getDefaultADS1015ReadConfig(){ P130_ADS1015_CONFIG_CLAT_NONLAT | P130_ADS1015_CONFIG_CPOL_ACTVLOW | P130_ADS1015_CONFIG_CMODE_TRAD | - P130_ADS1015_RATE_1600SPS | - P130_ADS1015_PGA_1_024V; - + P130_ADS1015_PGA_1_024V | + this->sps; } boolean P130_data_struct::readAdcSingleValue(uint16_t muxConf, int16_t& adcValue) { @@ -272,6 +271,7 @@ boolean P130_data_struct::readCurrent(uint8_t canal, float_t& currentValue) { log += String(" readCurrent canal = "); log += canal; addLog(LOG_LEVEL_INFO, log); log = F("Irms - ADS1015 : Differential square/root: "); log += adcIrms; addLog(LOG_LEVEL_INFO, log); log = F("Irms - ADS1015 : (voltage: "); log += voltage + String("mV )"); addLog(LOG_LEVEL_INFO, log); + log = F("Irms - ADS1015 : (SPS: "); log += this->sps + String(" )"); addLog(LOG_LEVEL_INFO, log); log = F("Irms - ADS1015 : (sample duration: "); log += durationSample + String("ms )"); addLog(LOG_LEVEL_INFO, log); log = F("Irms - ADS1015 : (sample count: "); log += nbSample + String(" )"); addLog(LOG_LEVEL_INFO, log); log = F("Irms - ADS1015 : Current: "); log += currentValue; addLog(LOG_LEVEL_INFO, log); diff --git a/src/src/PluginStructs/P130_data_struct.h b/src/src/PluginStructs/P130_data_struct.h index fe7de822d5..8eb7a45858 100644 --- a/src/src/PluginStructs/P130_data_struct.h +++ b/src/src/PluginStructs/P130_data_struct.h @@ -5,6 +5,9 @@ #ifdef USES_P130 #undef P130_DEBUG_DEV +#define P130_ADS1015_RATE_3300SPS (0x00C0) // < 3300 samples per second +#define P130_ADS1015_RATE_2400SPS (0x00A0) // < 2400 samples per second +#define P130_ADS1015_RATE_1600SPS (0x0080) // < 1600 samples per second struct P130_data_struct : public PluginTaskData_base { public: @@ -15,7 +18,8 @@ struct P130_data_struct : public PluginTaskData_base { float_t _calVoltage, uint8_t _currentFreq, uint8_t _nbSinus, - uint8_t _convModeContinuous); + uint8_t _convModeContinuous, + uint8_t _sps); void setDebug(uint8_t _debug); uint8_t getDebug(); @@ -32,8 +36,9 @@ struct P130_data_struct : public PluginTaskData_base { uint8_t nbSinus; uint8_t convModeContinuous; uint8_t debug; + uint8_t sps; - static uint16_t getDefaultADS1015ReadConfig(); + uint16_t getDefaultADS1015ReadConfig(); boolean writeRegister(uint8_t registerAddr, uint16_t registerValue); boolean readRegister(uint8_t registerAddr, uint16_t& registerValue); uint16_t readRegisterFacility(uint8_t registerAddr); From e77eacef53f8ce50878a8afd77e42a23b9ef2cc3 Mon Sep 17 00:00:00 2001 From: Handfreezer Date: Sun, 13 Mar 2022 16:42:12 +0100 Subject: [PATCH 11/13] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fefc736ed9..90554db8e2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# ⚠️ This is a fork of [letscontrolit/ESPEasy](https://github.com/letscontrolit/ESPEasy) and you should prefer to start from original project! This fork is for personnal maintenance and making PR to original project. ⚠️ + + |Latest Nightly | Build Status | Downloads | Docs | Patreon | Ko-Fi | PayPal | |-------|-------|-------|-------|-------|-------|-------| | [![GitHub version](https://img.shields.io/github/release/letscontrolit/ESPEasy/all.svg)](https://github.com/letscontrolit/ESPEasy/releases/latest) | ![Build status](https://github.com/letscontrolit/ESPEasy/actions/workflows/build.yml/badge.svg) | [![Downloads](https://img.shields.io/github/downloads/letscontrolit/ESPEasy/total.svg)](https://github.com/letscontrolit/ESPEasy/releases) | [![Documentation Status](https://readthedocs.org/projects/espeasy/badge/?version=latest)](https://espeasy.readthedocs.io/en/latest/?badge=latest) | [![donate](https://img.shields.io/badge/donate-Patreon-blue.svg)](https://www.patreon.com/GrovkillenTDer) | [![donate](https://img.shields.io/badge/donate-KoFi-blue.svg)](https://ko-fi.com/grovkillentder) | [![donate](https://img.shields.io/badge/donate-PayPal-blue.svg)](https://www.paypal.me/espeasy) | From d192d93a6422b342bcc0173d4cf15bdafb621368 Mon Sep 17 00:00:00 2001 From: Ether Date: Sun, 3 Apr 2022 15:11:29 +0200 Subject: [PATCH 12/13] Adding documentation for P130 plugin Current Sensor through ADS1015 --- docs/source/Plugin/P130.rst | 128 ++++++++++++++++++ .../Plugin/P130_device_configuration_page.png | Bin 0 -> 24529 bytes docs/source/Plugin/P130_vue_globale.jpg | Bin 0 -> 229295 bytes docs/source/Plugin/_Plugin.rst | 1 + docs/source/Plugin/_plugin_categories.repl | 2 +- docs/source/Plugin/_plugin_substitutions.repl | 1 + .../Plugin/_plugin_substitutions_p13x.repl | 13 ++ 7 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 docs/source/Plugin/P130.rst create mode 100644 docs/source/Plugin/P130_device_configuration_page.png create mode 100644 docs/source/Plugin/P130_vue_globale.jpg create mode 100644 docs/source/Plugin/_plugin_substitutions_p13x.repl diff --git a/docs/source/Plugin/P130.rst b/docs/source/Plugin/P130.rst new file mode 100644 index 0000000000..dd639be71b --- /dev/null +++ b/docs/source/Plugin/P130.rst @@ -0,0 +1,128 @@ +.. include:: ../Plugin/_plugin_substitutions_p13x.repl +.. _P130_page: + +|P130_typename| +================================================== + +|P130_shortinfo| + +Plugin details +-------------- + +Type: |P130_type| + +Name: |P130_name| + +Status: |P130_status| + +GitHub: |P130_github|_ + +Maintainer: |P130_maintainer| + +Used libraries: |P130_usedlibraries| + + + +Introduction +------------ + +.. image:: P130_vue_globale.jpg + +This plugin can be used to measure Current usage through `Irms ` using an ADS1015 through I2C. +It is the most simple schematic I succeed to create. +To get it to work, you have to buy an ADS1015 board, an ESP32 (not that ESP8266 might be too slow), and current sensors (I encouraged you to buy the black version, more robust, and smaller). +The only requirement is to buy a current sensor doing the conversion over 1Vac. You have to choose the right calibration in other cases you may definitely break your ADS1015. Say you bought a 30A/1V current sensor, if you try to measure a current of 60A, output voltage will be 2V and your ADS1015 will be burned out! +Note that each ADS1015 can manage TWO sensors! as I'm using the ADS1015 in a differential mode (this avoid managing an offset voltage and a complicated way to get a full range measure) +As ADS1015 can have four I2C addresses, you can manage up to EIGHT current sensors within one ESPEasy unit. + +Specifications: + * Output: Irms Current + * Input: 1Vac through current sensor + +Wiring +------ + +.. code-block:: none + + ESP ADS1015 + GPIO (SCL) <--> SCL + GPIO (SDA) <--> SDA + ADDR (choose on our side, see note below) + + Power + 3.3V <--> VCC + GND <--> GND + + Current Sensor 1 (Canal 1) + P1 <--> ADC0 + P2 <--> ADC1 + + Current Sensor 2 (Canal 2) + P1 <--> ADC2 + P2 <--> ADC3 + +The ADDR pin have to be used to set the wanted address of your choice (have a look on datasheet to configure one) + +Setup +----- + +.. image:: P130_device_configuration_page.png + +Task settings +~~~~~~~~~~~~~ + +* **Device**: Name of plugin +* **Name**: Name of the task (example name **Irms**) +* **Enable**: Should the task be enabled or not + +I2C options +^^^^^^^^^^^ + +* **I2C Address**: Default 0x48 is used. +* **Force Slow I2C speed**: not needed for ADS1015, and should not be used as it can reduce sampling rate + +Calibration - General +^^^^^^^^^^^^^^^^^^^^^ + +* **SPS** : Sample Per Second : based on my tests, 2400 SPS give the same real SPS as 3600 because of internal code of ESPEasy. Setting to 2400 will slo down the internal converter of the ADS1015 and so, sampling will have a more stable result. +* **Current Frequency** : Needed to calculate the period of sampling for a sinus +* **Nb Sinus to read** : more sinus implies more accuracy, BUT also more blocking time in plugin, SO: I suggest 2 sinus for 50Hz (even for 60Hz too) +* **ADC Conversion Mode Continuous** : this option was coded for test purposes but do not give better result, I suggest to leave it UNchecked (the default) +* **Small Debug to INFO log** : this allow you to get statistic of each conversion on serial console without switching global log level to debug (becuase it is slowing down conversion rate, and so bad results) +* **Voltage estimated** : this is to get from plugin a power conversion. as it is not a real value, the power value is an estimated one based on this voltage. + +Calibration +^^^^^^^^^^^ + +This is where you specify the calibration of the current sensor you connected, say you have connected a current sensor given for 50A/1V, you will indicate 50. + +* **Canal 1 - Max current** : Current value for 1V +* **Canal 2 - Max current** : Current value for 1V + +Where to buy +------------ + +.. csv-table:: + :header: "Store", "Link" + :widths: 5, 40 + + "AliExpress ESP32","" + "AliExpress ADS1015 board","" + "AliExpress SCT013","" + "AliExpress OPCT10AL","" + +* **Note : to simply help this famous project ESPEasy, just bought through referral link above!** + +Change log +---------- + +.. versionadded:: 1.0 + ... + + |added| + Initial release version. + + + + + diff --git a/docs/source/Plugin/P130_device_configuration_page.png b/docs/source/Plugin/P130_device_configuration_page.png new file mode 100644 index 0000000000000000000000000000000000000000..685143d50acb571cc2f26622be5d957e58d8ab8e GIT binary patch literal 24529 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 literal 0 HcmV?d00001 diff --git a/docs/source/Plugin/P130_vue_globale.jpg b/docs/source/Plugin/P130_vue_globale.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31a53fc1c2909ef105aeaf06c7997e13df82d78c GIT binary patch literal 229295 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

Bd)n$PtO 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�o?G`kXqUO%E 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%0A8*Pz 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
*#yc%}Q+-Nrpc<_Bdm;VA8y4yf_P;tGRog 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 L=%TcVl#l<})?@%L literal 0 HcmV?d00001 diff --git a/docs/source/Plugin/_Plugin.rst b/docs/source/Plugin/_Plugin.rst index e845c5dbfc..7e77994cc3 100644 --- a/docs/source/Plugin/_Plugin.rst +++ b/docs/source/Plugin/_Plugin.rst @@ -146,6 +146,7 @@ There are different released versions of ESP Easy: ":ref:`P120_page`","|P120_status|","P120" ":ref:`P124_page`","|P124_status|","P124" ":ref:`P125_page`","|P125_status|","P125" + ":ref:`P130_page`","|P130_status|","P130" Internal GPIO handling diff --git a/docs/source/Plugin/_plugin_categories.repl b/docs/source/Plugin/_plugin_categories.repl index 7a7da06998..ba1c582e60 100644 --- a/docs/source/Plugin/_plugin_categories.repl +++ b/docs/source/Plugin/_plugin_categories.repl @@ -4,7 +4,7 @@ .. |Plugin_Display| replace:: :ref:`P012_page`, :ref:`P023_page`, :ref:`P036_page`, :ref:`P057_page`, :ref:`P073_page`, :ref:`P075_page`, :ref:`P095_page`, :ref:`P104_page` .. |Plugin_Distance| replace:: :ref:`P110_page`, :ref:`P113_page` .. |Plugin_Dust| replace:: :ref:`P018_page`, :ref:`P053_page`, :ref:`P056_page` -.. |Plugin_Energy_AC| replace:: :ref:`P076_page`, :ref:`P077_page`, :ref:`P078_page`, :ref:`P102_page`, :ref:`P108_page` +.. |Plugin_Energy_AC| replace:: :ref:`P076_page`, :ref:`P077_page`, :ref:`P078_page`, :ref:`P102_page`, :ref:`P108_page`, :ref:`P130_page` .. |Plugin_Energy_DC| replace:: :ref:`P027_page`, :ref:`P085_page`, :ref:`P115_page` .. |Plugin_Energy_Heat| replace:: :ref:`P088_page`, :ref:`P093_page` .. |Plugin_Environment| replace:: :ref:`P004_page`, :ref:`P005_page`, :ref:`P006_page`, :ref:`P014_page`, :ref:`P024_page`, :ref:`P028_page`, :ref:`P030_page`, :ref:`P031_page`, :ref:`P032_page`, :ref:`P034_page`, :ref:`P039_page`, :ref:`P047_page`, :ref:`P051_page`, :ref:`P068_page`, :ref:`P069_page`, :ref:`P072_page`, :ref:`P103_page`, :ref:`P104_page`, :ref:`P105_page`, :ref:`P106_page` diff --git a/docs/source/Plugin/_plugin_substitutions.repl b/docs/source/Plugin/_plugin_substitutions.repl index 9f00224041..56e782b5bd 100644 --- a/docs/source/Plugin/_plugin_substitutions.repl +++ b/docs/source/Plugin/_plugin_substitutions.repl @@ -11,3 +11,4 @@ .. include:: ../Plugin/_plugin_substitutions_p10x.repl .. include:: ../Plugin/_plugin_substitutions_p11x.repl .. include:: ../Plugin/_plugin_substitutions_p12x.repl +.. include:: ../Plugin/_plugin_substitutions_p13x.repl diff --git a/docs/source/Plugin/_plugin_substitutions_p13x.repl b/docs/source/Plugin/_plugin_substitutions_p13x.repl new file mode 100644 index 0000000000..f2b2685be3 --- /dev/null +++ b/docs/source/Plugin/_plugin_substitutions_p13x.repl @@ -0,0 +1,13 @@ +.. |P130_name| replace:: :cyan:`Current Irms via ADS1015 I2C` +.. |P130_type| replace:: :cyan:`Current` +.. |P130_typename| replace:: :cyan:`Current - ADS1015 (I2C)` +.. |P130_porttype| replace:: `.` +.. |P130_status| replace:: :yellow:`TESTING E` +.. |P130_github| replace:: P130_IRMS_ADS1015.ino +.. _P130_github: https://github.com/handfreezer/ESPEasy/blob/P130_01/src/_P130_IRMS_ADS1015.ino +.. |P130_usedby| replace:: `.` +.. |P130_shortinfo| replace:: `Current Irms sensor` +.. |P130_maintainer| replace:: `handfreezer` +.. |P130_compileinfo| replace:: `.` +.. |P130_usedlibraries| replace:: `(none)` + From 1a76556bdfc808ae3c820c479210744b444eaa75 Mon Sep 17 00:00:00 2001 From: Handfreezer Date: Mon, 18 Apr 2022 10:10:58 +0200 Subject: [PATCH 13/13] Remove local testing profil --- platformio_esp32_envs.ini | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/platformio_esp32_envs.ini b/platformio_esp32_envs.ini index 9df2105e78..88dcb99534 100644 --- a/platformio_esp32_envs.ini +++ b/platformio_esp32_envs.ini @@ -28,19 +28,6 @@ build_flags = ${core_esp32_3_3_2.build_flags} -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE monitor_filters = esp32_exception_decoder -; Custom: 4096k version -------------------------- -[env:custom_ESP32_4M316k_handfreezer] -extends = esp32_common -platform = ${esp32_common.platform} -lib_deps = ${esp32_common.lib_deps} -build_flags = ${esp32_common.build_flags} - ;-D PLUGIN_BUILD_CUSTOM - -DUSES_P130 - -DFEATURE_ARDUINO_OTA - -DPLUGIN_DISPLAY_COLLECTION -board = esp32dev -extra_scripts = ${esp32_common.extra_scripts} - pre:tools/pio/pre_custom_esp32.py ; Custom: 4096k version -------------------------- [env:custom_ESP32_4M316k]