diff --git a/src/modules/exec/BrokerMQTT/modinfo.json b/src/modules/exec/BrokerMQTT/modinfo.json index fac52f02..7b671047 100644 --- a/src/modules/exec/BrokerMQTT/modinfo.json +++ b/src/modules/exec/BrokerMQTT/modinfo.json @@ -15,7 +15,7 @@ "port": 1883, "user": "root", "pass": "4321", - "brige":1, + "brige": 1, "server":"http://iotmanager.org", "srvUser": "rise", "srvPass": "3hostel3", diff --git a/src/modules/sensors/BL0937/BL0937.cpp b/src/modules/sensors/BL0937/BL0937.cpp index 2e207813..1e709f06 100644 --- a/src/modules/sensors/BL0937/BL0937.cpp +++ b/src/modules/sensors/BL0937/BL0937.cpp @@ -157,9 +157,12 @@ private: int BL0937_CF_GPIO = 4; // 8266 12 //Нужна возможность задавать пин из веб, это по умолчанию int BL0937_CF1_GPIO = 5; // 8266 13 //Нужна возможность задавать пин из веб, это по умолчанию int BL0937_SEL_GPIO_INV = 12; // 8266 15 // inverted //Нужна возможность задавать пин из веб, это по умолчанию - float _expV = 0; - float _expA = 0; - float _expW = 0; + float _kfV = 0; + float _kfA = 0; + float _kfW = 0; + float expV = 0; + float expA = 0; + float expW = 0; public: BL0937cmd(String parameters) : IoTItem(parameters) @@ -170,24 +173,64 @@ public: jsonRead(parameters, "CF_GPIO", BL0937_CF_GPIO); jsonRead(parameters, "CF1_GPIO", BL0937_CF1_GPIO); jsonRead(parameters, "SEL_GPIO", BL0937_SEL_GPIO_INV); - jsonRead(parameters, "expV", _expV); - jsonRead(parameters, "expA", _expA); - jsonRead(parameters, "expW", _expW); + jsonRead(parameters, "kfV", _kfV); + jsonRead(parameters, "kfA", _kfA); + jsonRead(parameters, "kfW", _kfW); bl0937 = new BL0937; bl0937->begin(BL0937_CF_GPIO, BL0937_CF1_GPIO, BL0937_SEL_GPIO_INV, LOW, true); bl0937->setResistors(CURRENT_RESISTOR, VOLTAGE_RESISTOR_UPSTREAM, VOLTAGE_RESISTOR_DOWNSTREAM); attachInterrupt(BL0937_CF1_GPIO, bl0937_cf1_interrupt, FALLING); attachInterrupt(BL0937_CF_GPIO, bl0937_cf_interrupt, FALLING); - if (_expV) - bl0937->expectedVoltage(_expV); // для калибровки вольтаж нужно вводить из веб интерфейса - if (_expV) - bl0937->expectedCurrent(_expA); // для калибровки можно так, а лучше ток вводить из веб интерфейса - if (_expV) - bl0937->expectedActivePower(_expW); // для калибровки потребляемую мощность нужно вводить из веб интерфейса + if (_kfV) + bl0937->setVoltageMultiplier(_kfV); + if (_kfA) + bl0937->setCurrentMultiplier(_kfA); + if (_kfW) + bl0937->setPowerMultiplier(_kfW); } void doByInterval() { + static bool startCalbr = false; + if (expV && expA && expW) + { + startCalbr = true; + SerialPrint("i", "BL0937", "Start calibration ..."); + } + + if (startCalbr) + { + if (expV && bl0937->getVoltage()) + { + bl0937->expectedVoltage(expV); // для калибровки вольтаж нужно вводить из веб интерфейса + _kfV = bl0937->getVoltageMultiplier(); + expV = 0; + } + if (expA && bl0937->getCurrent()) + { + bl0937->expectedCurrent(expA); // для калибровки можно так, а лучше ток вводить из веб интерфейса + _kfA = bl0937->getCurrentMultiplier(); + expA = 0; + } + if (expW && bl0937->getActivePower()) + { + bl0937->expectedActivePower(expW); // для калибровки потребляемую мощность нужно вводить из веб интерфейса + _kfW = bl0937->getPowerMultiplier(); + expW = 0; + } + if (!expV && !expA && !expW) + { + String str = "Calibration done: kfV="; + str += _kfV; + str += ", kfA="; + str += _kfA; + str += ", kfW="; + str += _kfW; + SerialPrint("i", "BL0937", str); + SerialPrint("i", "BL0937", "Enter multiplier to configuration!"); + startCalbr = false; + } + } } void onModuleOrder(String &key, String &value) @@ -201,27 +244,24 @@ public: } } } - /* - IoTValue execute(String command, std::vector ¶m) - { - if (!bl0937) - return {}; - if (command == "calibration") - { - if (param.size() == 3) - { - float v = param[0].valD; - float a = param[1].valD; - float p = param[2].valD; - bl0937->expectedVoltage(v); // для калибровки вольтаж нужно вводить из веб интерфейса - bl0937->expectedCurrent(a); // для калибровки можно так, а лучше ток вводить из веб интерфейса - bl0937->expectedActivePower(p); // для калибровки потребляемую мощность нужно вводить из веб интерфейса - return {}; - } - } + + IoTValue execute(String command, std::vector ¶m) + { + if (!bl0937) return {}; + if (command == "calibration") + { + if (param.size() == 3) + { + expV = param[0].valD; + expA = param[1].valD; + expW = param[2].valD; + return {}; + } } - */ + return {}; + } + ~BL0937cmd() { if (bl0937) diff --git a/src/modules/sensors/BL0937/BL0937lib.cpp b/src/modules/sensors/BL0937/BL0937lib.cpp index d4b46e55..a54e68b4 100644 --- a/src/modules/sensors/BL0937/BL0937lib.cpp +++ b/src/modules/sensors/BL0937/BL0937lib.cpp @@ -74,6 +74,7 @@ double BL0937::getCurrent() { // so we first check if power is 0 to set _current to 0 too if (_power == 0) { _current_pulse_width = 0; + getActivePower(); } else if (_use_interrupts) { _checkCF1Signal(); diff --git a/src/modules/sensors/BL0937/modinfo.json b/src/modules/sensors/BL0937/modinfo.json index d9be43f7..49560838 100644 --- a/src/modules/sensors/BL0937/modinfo.json +++ b/src/modules/sensors/BL0937/modinfo.json @@ -42,7 +42,7 @@ "name": "BL0937 Реакт.Мощность", "type": "Reading", "subtype": "BL0937reactw", - "id": "bl_w", + "id": "bl_reactw", "widget": "anydataWt", "page": "BL0937", "descr": "Реакт.Мощность", @@ -83,6 +83,7 @@ "page": "", "descr": "", "btn-reset": "", + "int": "5", "R_current": 0.001, "R_upstream": 1000000, "R_downstream": 1000, @@ -108,7 +109,7 @@ "title": "Счетчик электроэнергии BL0937", "moduleDesc": "Считает потраченную электроэнергию, измеряет напряжение, силу тока и прочие параметры.", "propInfo": { - "int": "Количество секунд между опросами датчика.", + "int": "Количество секунд между опросами датчика. В bl_set интервал между попытками калибровки (т.к. нужны сначала данные от датчика)", "btn-reset": "Энергия BL0937 будет сброшена к нулю.", "R_current": "Резистор подключенный последовательно к основной линии", "R_upstream": "это 5 резисторов по 470 Ком в делителе напряжения, который питает вывод V2P", @@ -116,10 +117,17 @@ "CF_GPIO": "пин CF", "CF1_GPIO": "пин CF1", "SEL_GPIO": "пин SEL", - "expV": "реальное напряжение, указать для калибровки", - "expA": "реальный ток, указать для калибровки", - "expW": "реальная мощность, указать для калибровки" - } + "kfV": "Коэффициент корректировки напряжение, указать после калибровки", + "kfA": "Коэффициент корректировки тока, указать после калибровки", + "kfW": "Коэффициент корректировки мощности, указать после калибровки" + }, + "funcInfo": [ + { + "name": "calibration", + "descr": "Расчет коэффициентов калибровки. Вызывать от имени BL0937 настройка. bl_set.calibration(220, 16, 3.5). Полученный коэффициенты искать в логе и ввести в конфигурацию kfV, kfA и kfW", + "params": ["Напряжение, Ток, Мощность"] + } + ] }, "defActive": true, "usedLibs": {