mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
upddate BL0937
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
"port": 1883,
|
||||
"user": "root",
|
||||
"pass": "4321",
|
||||
"brige":1,
|
||||
"brige": 1,
|
||||
"server":"http://iotmanager.org",
|
||||
"srvUser": "rise",
|
||||
"srvPass": "3hostel3",
|
||||
|
||||
@@ -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,7 +244,7 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
IoTValue execute(String command, std::vector<IoTValue> ¶m)
|
||||
{
|
||||
if (!bl0937)
|
||||
@@ -210,18 +253,15 @@ public:
|
||||
{
|
||||
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); // для калибровки потребляемую мощность нужно вводить из веб интерфейса
|
||||
expV = param[0].valD;
|
||||
expA = param[1].valD;
|
||||
expW = param[2].valD;
|
||||
return {};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
*/
|
||||
|
||||
~BL0937cmd()
|
||||
{
|
||||
if (bl0937)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user