kopia lustrzana https://github.com/weetmuts/wmbusmeters
Added Apparent Power to interface and meter
rodzic
65ad8f624c
commit
db7acae6cd
|
@ -22,18 +22,20 @@
|
|||
#include"wmbus_utils.h"
|
||||
#include"util.h"
|
||||
|
||||
#include<cmath>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
#define ERROR_CODE_VOLTAGE_PHASE_1_OVERFLOW 0x01
|
||||
#define ERROR_CODE_VOLTAGE_PHASE_2_OVERFLOW 0x02
|
||||
#define ERROR_CODE_VOLTAGE_PHASE_3_OVERFLOW 0x04
|
||||
constexpr uint8_t ERROR_CODE_VOLTAGE_PHASE_1_OVERFLOW=0x01;
|
||||
constexpr uint8_t ERROR_CODE_VOLTAGE_PHASE_2_OVERFLOW=0x02;
|
||||
constexpr uint8_t ERROR_CODE_VOLTAGE_PHASE_3_OVERFLOW=0x04;
|
||||
|
||||
#define ERROR_CODE_CURRENT_PHASE_1_OVERFLOW 0x08
|
||||
#define ERROR_CODE_CURRENT_PHASE_2_OVERFLOW 0x10
|
||||
#define ERROR_CODE_CURRENT_PHASE_3_OVERFLOW 0x20
|
||||
constexpr uint8_t ERROR_CODE_CURRENT_PHASE_1_OVERFLOW=0x08;
|
||||
constexpr uint8_t ERROR_CODE_CURRENT_PHASE_2_OVERFLOW=0x10;
|
||||
constexpr uint8_t ERROR_CODE_CURRENT_PHASE_3_OVERFLOW=0x20;
|
||||
|
||||
#define ERROR_CODE_FREQUENCY_OUT_OF_RANGE 0x40
|
||||
constexpr uint8_t ERROR_CODE_FREQUENCY_OUT_OF_RANGE=0x40;
|
||||
|
||||
|
||||
struct MeterEM24 : public virtual ElectricityMeter, public virtual MeterCommonImplementation {
|
||||
|
@ -45,6 +47,9 @@ struct MeterEM24 : public virtual ElectricityMeter, public virtual MeterCommonIm
|
|||
double totalReactiveEnergyConsumption(Unit u);
|
||||
double totalReactiveEnergyProduction(Unit u);
|
||||
|
||||
double totalApparentEnergyConsumption(Unit u);
|
||||
double totalApparentEnergyProduction(Unit u);
|
||||
|
||||
string status();
|
||||
|
||||
private:
|
||||
|
@ -91,6 +96,16 @@ MeterEM24::MeterEM24(WMBus *bus, MeterInfo &mi) :
|
|||
"The total reactive energy production recorded by this meter.",
|
||||
true, true);
|
||||
|
||||
addPrint("total_apparent_energy_consumption", Quantity::Apparent_Energy,
|
||||
[&](Unit u){ return totalApparentEnergyConsumption(u); },
|
||||
"The total apparent energy consumption by calculation.",
|
||||
true, true);
|
||||
|
||||
addPrint("total_apparent_energy_production", Quantity::Apparent_Energy,
|
||||
[&](Unit u){ return totalApparentEnergyProduction(u); },
|
||||
"The total apparent energy production by calculation.",
|
||||
true, true);
|
||||
|
||||
addPrint("errors", Quantity::Text,
|
||||
[&](){ return status(); },
|
||||
"Any errors currently being reported.",
|
||||
|
@ -121,6 +136,27 @@ double MeterEM24::totalReactiveEnergyProduction(Unit u)
|
|||
return convert(total_reactive_energy_production_kvarh_, Unit::KVARH, u);
|
||||
}
|
||||
|
||||
double MeterEM24::totalApparentEnergyConsumption(Unit u)
|
||||
{
|
||||
assertQuantity(u, Quantity::Apparent_Energy);
|
||||
return convert(
|
||||
sqrt(
|
||||
pow(total_true_energy_consumption_kwh_, 2) +
|
||||
pow(total_reactive_energy_consumption_kvarh_, 2)
|
||||
)
|
||||
, Unit::KVAH, u);
|
||||
}
|
||||
|
||||
double MeterEM24::totalApparentEnergyProduction(Unit u)
|
||||
{
|
||||
assertQuantity(u, Quantity::Apparent_Energy);
|
||||
return convert(
|
||||
sqrt(
|
||||
pow(total_true_energy_production_kwh_, 2) +
|
||||
pow(total_reactive_energy_production_kvarh_, 2)
|
||||
)
|
||||
, Unit::KVAH, u);
|
||||
}
|
||||
|
||||
void MeterEM24::processContent(Telegram *t)
|
||||
{
|
||||
|
@ -175,4 +211,3 @@ string MeterEM24::status()
|
|||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include<algorithm>
|
||||
#include<memory.h>
|
||||
#include<time.h>
|
||||
#include<cmath>
|
||||
|
||||
MeterCommonImplementation::MeterCommonImplementation(WMBus *bus, MeterInfo &mi,
|
||||
MeterType type) :
|
||||
|
@ -472,38 +473,43 @@ void MeterCommonImplementation::printMeter(Telegram *t,
|
|||
}
|
||||
}
|
||||
|
||||
double WaterMeter::totalWaterConsumption(Unit u) { return -47.11; }
|
||||
double WaterMeter::totalWaterConsumption(Unit u) { return -NAN; }
|
||||
bool WaterMeter::hasTotalWaterConsumption() { return false; }
|
||||
double WaterMeter::targetWaterConsumption(Unit u) { return -47.11; }
|
||||
double WaterMeter::targetWaterConsumption(Unit u) { return -NAN; }
|
||||
bool WaterMeter::hasTargetWaterConsumption() { return false; }
|
||||
double WaterMeter::maxFlow(Unit u) { return -47.11; }
|
||||
double WaterMeter::maxFlow(Unit u) { return -NAN; }
|
||||
bool WaterMeter::hasMaxFlow() { return false; }
|
||||
double WaterMeter::flowTemperature(Unit u) { return -47.11; }
|
||||
double WaterMeter::flowTemperature(Unit u) { return -NAN; }
|
||||
bool WaterMeter::hasFlowTemperature() { return false; }
|
||||
double WaterMeter::externalTemperature(Unit u) { return -47.11; }
|
||||
double WaterMeter::externalTemperature(Unit u) { return -NAN; }
|
||||
bool WaterMeter::hasExternalTemperature() { return false; }
|
||||
|
||||
string WaterMeter::statusHumanReadable() { return "-47.11"; }
|
||||
string WaterMeter::status() { return "-47.11"; }
|
||||
string WaterMeter::timeDry() { return "-47.11"; }
|
||||
string WaterMeter::timeReversed() { return "-47.11"; }
|
||||
string WaterMeter::timeLeaking() { return "-47.11"; }
|
||||
string WaterMeter::timeBursting() { return "-47.11"; }
|
||||
string WaterMeter::statusHumanReadable() { return "-NAN"; }
|
||||
string WaterMeter::status() { return "-NAN"; }
|
||||
string WaterMeter::timeDry() { return "-NAN"; }
|
||||
string WaterMeter::timeReversed() { return "-NAN"; }
|
||||
string WaterMeter::timeLeaking() { return "-NAN"; }
|
||||
string WaterMeter::timeBursting() { return "-NAN"; }
|
||||
|
||||
double HeatMeter::totalEnergyConsumption(Unit u) { return -47.11; }
|
||||
double HeatMeter::currentPeriodEnergyConsumption(Unit u) { return -47.11; }
|
||||
double HeatMeter::previousPeriodEnergyConsumption(Unit u) { return -47.11; }
|
||||
double HeatMeter::currentPowerConsumption(Unit u) { return -47.11; }
|
||||
double HeatMeter::totalVolume(Unit u) { return -47.11; }
|
||||
double HeatMeter::totalEnergyConsumption(Unit u) { return -NAN; }
|
||||
double HeatMeter::currentPeriodEnergyConsumption(Unit u) { return -NAN; }
|
||||
double HeatMeter::previousPeriodEnergyConsumption(Unit u) { return -NAN; }
|
||||
double HeatMeter::currentPowerConsumption(Unit u) { return -NAN; }
|
||||
double HeatMeter::totalVolume(Unit u) { return -NAN; }
|
||||
|
||||
double ElectricityMeter::totalEnergyConsumption(Unit u) { return -47.11; }
|
||||
double ElectricityMeter::currentPowerConsumption(Unit u) { return -47.11; }
|
||||
double ElectricityMeter::totalEnergyProduction(Unit u) { return -47.11; }
|
||||
double ElectricityMeter::currentPowerProduction(Unit u) { return -47.11; }
|
||||
double ElectricityMeter::totalEnergyConsumption(Unit u) { return -NAN; }
|
||||
double ElectricityMeter::totalEnergyProduction(Unit u) { return -NAN; }
|
||||
double ElectricityMeter::totalReactiveEnergyConsumption(Unit u) { return -NAN; }
|
||||
double ElectricityMeter::totalReactiveEnergyProduction(Unit u) { return -NAN; }
|
||||
double ElectricityMeter::totalApparentEnergyConsumption(Unit u) { return -NAN; }
|
||||
double ElectricityMeter::totalApparentEnergyProduction(Unit u) { return -NAN; }
|
||||
|
||||
double HeatCostMeter::currentConsumption(Unit u) { return -47.11; }
|
||||
string HeatCostMeter::setDate() { return "47.11"; }
|
||||
double HeatCostMeter::consumptionAtSetDate(Unit u) { return -47.11; }
|
||||
double ElectricityMeter::currentPowerConsumption(Unit u) { return -NAN; }
|
||||
double ElectricityMeter::currentPowerProduction(Unit u) { return -NAN; }
|
||||
|
||||
double HeatCostMeter::currentConsumption(Unit u) { return -NAN; }
|
||||
string HeatCostMeter::setDate() { return "NAN"; }
|
||||
double HeatCostMeter::consumptionAtSetDate(Unit u) { return -NAN; }
|
||||
|
||||
void MeterCommonImplementation::setExpectedTPLSecurityMode(TPLSecurityMode tsm)
|
||||
{
|
||||
|
|
|
@ -252,8 +252,15 @@ struct HeatMeter : public virtual Meter
|
|||
struct ElectricityMeter : public virtual Meter
|
||||
{
|
||||
virtual double totalEnergyConsumption(Unit u); // kwh
|
||||
virtual double currentPowerConsumption(Unit u); // kw
|
||||
virtual double totalEnergyProduction(Unit u); // kwh
|
||||
|
||||
virtual double totalReactiveEnergyConsumption(Unit u); // kvarh
|
||||
virtual double totalReactiveEnergyProduction(Unit u); // kvarh
|
||||
|
||||
virtual double totalApparentEnergyConsumption(Unit u); // kvah
|
||||
virtual double totalApparentEnergyProduction(Unit u); // kvah
|
||||
|
||||
virtual double currentPowerConsumption(Unit u); // kw
|
||||
virtual double currentPowerProduction(Unit u); // kw
|
||||
};
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#define LIST_OF_QUANTITIES \
|
||||
X(Energy,KWH) \
|
||||
X(Reactive_Energy,KVARH) \
|
||||
X(Apparent_Energy,KVAH) \
|
||||
X(Power,KW) \
|
||||
X(Volume,M3) \
|
||||
X(Flow,M3H) \
|
||||
|
@ -39,6 +40,7 @@
|
|||
X(MJ,mj,"MJ",Energy,"Mega Joule") \
|
||||
X(GJ,gj,"GJ",Energy,"Giga Joule") \
|
||||
X(KVARH,kvarh,"kVARh",Reactive_Energy,"kilo volt amperes reactive hour") \
|
||||
X(KVAH,kvah,"kVAh",Apparent_Energy,"kilo volt amperes hour") \
|
||||
X(M3,m3,"m3",Volume,"cubic meter") \
|
||||
X(L,l,"l",Volume,"litre") \
|
||||
X(KW,kw,"kW",Power,"kilo Watt") \
|
||||
|
|
Ładowanie…
Reference in New Issue