From bbe9737974b9366275f9752f88f3469e8acef1f1 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Tue, 27 Sep 2022 18:30:18 +0200 Subject: [PATCH] =?UTF-8?q?pzem=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=D1=85=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/Pzem004t/Pzem004t.cpp | 100 ++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/src/modules/sensors/Pzem004t/Pzem004t.cpp b/src/modules/sensors/Pzem004t/Pzem004t.cpp index 0f59fccb..66718d36 100644 --- a/src/modules/sensors/Pzem004t/Pzem004t.cpp +++ b/src/modules/sensors/Pzem004t/Pzem004t.cpp @@ -28,9 +28,109 @@ class Pzem004v : public IoTItem { ~Pzem004v(){}; }; +class Pzem004a : public IoTItem { + private: + String addr; + PZEMSensor* pzem; + + public: + Pzem004a(String parameters) : IoTItem(parameters) { + addr = jsonReadStr(parameters, "addr"); + if (myUART) { + pzem = new PZEMSensor(myUART, hexStringToUint8(addr)); + } + } + + void doByInterval() { + if (pzem) { + value.valD = pzem->values()->current; + regEvent(value.valD, "Pzem Ampere"); + } + } + + ~Pzem004a(){}; +}; + +class Pzem004w : public IoTItem { + private: + String addr; + PZEMSensor* pzem; + + public: + Pzem004w(String parameters) : IoTItem(parameters) { + addr = jsonReadStr(parameters, "addr"); + if (myUART) { + pzem = new PZEMSensor(myUART, hexStringToUint8(addr)); + } + } + + void doByInterval() { + if (pzem) { + value.valD = pzem->values()->power; + regEvent(value.valD, "Pzem Watt"); + } + } + + ~Pzem004w(){}; +}; + +class Pzem004wh : public IoTItem { + private: + String addr; + PZEMSensor* pzem; + + public: + Pzem004wh(String parameters) : IoTItem(parameters) { + addr = jsonReadStr(parameters, "addr"); + if (myUART) { + pzem = new PZEMSensor(myUART, hexStringToUint8(addr)); + } + } + + void doByInterval() { + if (pzem) { + value.valD = pzem->values()->energy; + regEvent(value.valD, "Pzem Watt/hr"); + } + } + + ~Pzem004wh(){}; +}; + +class Pzem004hz : public IoTItem { + private: + String addr; + PZEMSensor* pzem; + + public: + Pzem004hz(String parameters) : IoTItem(parameters) { + addr = jsonReadStr(parameters, "addr"); + if (myUART) { + pzem = new PZEMSensor(myUART, hexStringToUint8(addr)); + } + } + + void doByInterval() { + if (pzem) { + value.valD = pzem->values()->freq; + regEvent(value.valD, "Pzem Hz"); + } + } + + ~Pzem004hz(){}; +}; + void* getAPI_Pzem004(String subtype, String param) { if (subtype == F("Pzem004v")) { return new Pzem004v(param); + } else if (subtype == F("Pzem004a")) { + return new Pzem004a(param); + } else if (subtype == F("Pzem004w")) { + return new Pzem004w(param); + } else if (subtype == F("Pzem004wh")) { + return new Pzem004wh(param); + } else if (subtype == F("Pzem004hz")) { + return new Pzem004hz(param); } else { return nullptr; }