From 8af8f403354bb9ca8bf594a1e922d038ebc4369e Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 7 Oct 2022 14:03:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20Pzem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/Pzem004t/Pzem004t.cpp | 31 ++++++++++++++++ src/modules/sensors/Pzem004t/modinfo.json | 44 ++++++++++++++++------- 2 files changed, 62 insertions(+), 13 deletions(-) diff --git a/src/modules/sensors/Pzem004t/Pzem004t.cpp b/src/modules/sensors/Pzem004t/Pzem004t.cpp index 8f0dab93..6c4b655c 100644 --- a/src/modules/sensors/Pzem004t/Pzem004t.cpp +++ b/src/modules/sensors/Pzem004t/Pzem004t.cpp @@ -150,6 +150,35 @@ class Pzem004hz : public IoTItem { ~Pzem004hz(){}; }; +class Pzem004pf : public IoTItem { + private: + String addr; + PZEMSensor* pzem; + + public: + Pzem004pf(String parameters) : IoTItem(parameters) { + addr = jsonReadStr(parameters, "addr"); + if (myUART) { + pzem = new PZEMSensor(myUART, hexStringToUint8(addr)); + } + } + + void doByInterval() { + if (pzem) { + bool online = false; + value.valD = pzem->values(online)->pf; + if (online) { + regEvent(value.valD, "Pzem Pf"); + } else { + regEvent(NAN, "Pzem Pf"); + SerialPrint("E", "Pzem", "Pf error"); + } + } + } + + ~Pzem004pf(){}; +}; + void* getAPI_Pzem004(String subtype, String param) { if (subtype == F("Pzem004v")) { return new Pzem004v(param); @@ -161,6 +190,8 @@ void* getAPI_Pzem004(String subtype, String param) { return new Pzem004wh(param); } else if (subtype == F("Pzem004hz")) { return new Pzem004hz(param); + } else if (subtype == F("Pzem004pf")) { + return new Pzem004pf(param); } else { return nullptr; } diff --git a/src/modules/sensors/Pzem004t/modinfo.json b/src/modules/sensors/Pzem004t/modinfo.json index 49fe7ad9..2a25464f 100644 --- a/src/modules/sensors/Pzem004t/modinfo.json +++ b/src/modules/sensors/Pzem004t/modinfo.json @@ -7,10 +7,11 @@ "subtype": "Pzem004v", "id": "v", "widget": "anydataVlt", - "page": "Сенсоры", + "page": "PZEM", "descr": "Напряжение", "int": 15, - "addr": "0xF8" + "addr": "0xF8", + "round": 1 }, { "name": "PZEM 004t Сила тока", @@ -18,10 +19,11 @@ "subtype": "Pzem004a", "id": "a", "widget": "anydataAmp", - "page": "Сенсоры", + "page": "PZEM", "descr": "Сила тока", "int": 15, - "addr": "0xF8" + "addr": "0xF8", + "round": 1 }, { "name": "PZEM 004t Мощность", @@ -29,10 +31,11 @@ "subtype": "Pzem004w", "id": "w", "widget": "anydataWt", - "page": "Сенсоры", + "page": "PZEM", "descr": "Мощность", "int": 15, - "addr": "0xF8" + "addr": "0xF8", + "round": 1 }, { "name": "PZEM 004t Энергия", @@ -40,10 +43,11 @@ "subtype": "Pzem004wh", "id": "wh", "widget": "anydataWth", - "page": "Сенсоры", + "page": "PZEM", "descr": "Энергия", "int": 15, - "addr": "0xF8" + "addr": "0xF8", + "round": 1 }, { "name": "PZEM 004t Частота", @@ -51,10 +55,23 @@ "subtype": "Pzem004hz", "id": "hz", "widget": "anydataHtz", - "page": "Сенсоры", + "page": "PZEM", "descr": "Частота", "int": 15, - "addr": "0xF8" + "addr": "0xF8", + "round": 1 + }, + { + "name": "PZEM 004t Косинус", + "type": "Reading", + "subtype": "Pzem004pf", + "id": "pf", + "widget": "anydata", + "page": "PZEM", + "descr": "Косинус F", + "int": 15, + "addr": "0xF8", + "round": 1 } ], "about": { @@ -73,7 +90,8 @@ "Pzem004a", "Pzem004w", "Pzem004wh", - "Pzem004hz" + "Pzem004hz", + "Pzem004pf" ], "title": "Счетчик электроэнергии PZEM 004 t версии 3.0 (с модбасом). Возможно подключение трех счетчиков к одной esp для трехфазных сетей. Для этого нужно настроить разные адреса modbus в платах pzem", "moduleDesc": "Считает потраченную электроэнергию, измеряет напряжение, частоту, силу тока и прочие параметры", @@ -85,10 +103,10 @@ "defActive": true, "usedLibs": { "esp32_4mb": [ - "mandulaj/PZEM-004T-v30" + "https://github.com/mandulaj/PZEM-004T-v30" ], "esp8266_4mb": [ - "mandulaj/PZEM-004T-v30" + "https://github.com/mandulaj/PZEM-004T-v30" ] } } \ No newline at end of file