Added ev200 and emerlin868.

pull/186/head
Fredrik Öhrström 2020-11-14 10:48:49 +01:00
rodzic dcb46566da
commit 3735c9fa70
14 zmienionych plików z 308 dodań i 97 usunięć

Wyświetl plik

@ -1,4 +1,7 @@
Mira added support for Elster V200H water meter and the Elster Merlin 868 addon.
Thanks Mira!
Version 1.0.3: 2020-11-11
Add missing files and update man page for --nodeviceexit

Wyświetl plik

@ -120,6 +120,8 @@ METER_OBJS:=\
$(BUILD)/meter_ehzp.o \
$(BUILD)/meter_esyswm.o \
$(BUILD)/meter_em24.o \
$(BUILD)/meter_emerlin868.o \
$(BUILD)/meter_ev200.o \
$(BUILD)/meter_eurisii.o \
$(BUILD)/meter_fhkvdataiii.o \
$(BUILD)/meter_flowiq2200.o \

Wyświetl plik

@ -267,6 +267,8 @@ Aquametro/Integra Topas Es Kr (topaseskr)
Bmeters Hydrodigit (hydrodigit) (partly non-standard protocol)
Diehl/Sappel IZAR RC 868 I R4 PL (izar) (non-standard protocol)
Diehl HYDRUS (hydrus)
Elster Merlin 868 (emerlin868)
Elster V200H (ev200)
Honeywell Q400 (q400)
Kamstrup Multical 21 (multical21)
Kamstrup flowIQ 2200 (flowiq2200)

Wyświetl plik

@ -180,3 +180,13 @@ telegram=|2E4401069897969501167A4B0320052F2F|0413320C000003FD1700000044132109000
telegram=|9E44C5147956341200047A7B0090052F2F|046D25248A2B04063D1F000001FD17000415265F00004406131F0000840106901E0000C40106841E0000840206841E0000C402067A1E0000840306541E0000C40306021E00008404069E1D0000C40406D71C0000840506F21B0000C40506681A00008406061E190000C40606EB1700008407061C170000C40706EE1600002F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F|
{"media":"heat","meter":"sensostar","name":"Heater","id":"12345679","meter_timestamp":"2020-11-10 04:37","total_kwh":7997,"total_water_m3":2435.8,"current_status":"OK","timestamp":"1111-11-11T11:11:11Z"}
|Heater;12345679;7997.000000;2435.800000;OK;1111-11-11 11:11.11
# Test Elster V200H water meter
telegram=|2E449215303099990D077AB50820452F2F|0C12495849004C12557545000FB10445007022C50BFFFFFFFF0000FFF000|
{"media":"water","meter":"ev200","name":"Voda","id":"99993030","total_m3":49.5849,"target_m3":45.7555,"timestamp":"1111-11-11T11:11:11Z"}
|Voda;99993030;49.584900;45.755500;1111-11-11 11:11.11
# Test Elster Merlin 868 radio attachement
telegram=|2E4492159293949511377ABE0020252F2F|04135515000004FD971D80800000441300000000426C000002FDFD02B300|
{"media":"radio converter (meter side)","meter":"emerlin868","name":"Vodda","id":"95949392","total_m3":5.461,"target_m3":0,"timestamp":"1111-11-11T11:11:11Z"}
|Vodda;95949392;5.461000;0.000000;1111-11-11 11:11.11

Wyświetl plik

@ -0,0 +1,107 @@
/*
Copyright (C) 2017-2020 Fredrik Öhrström
Copyright (C) 2018 David Mallon
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include"dvparser.h"
#include"meters.h"
#include"meters_common_implementation.h"
#include"wmbus.h"
#include"wmbus_utils.h"
using namespace std;
struct MeterEMerlin868 : public virtual WaterMeter, public virtual MeterCommonImplementation {
MeterEMerlin868(MeterInfo &mi);
// Total water counted through the meter
double totalWaterConsumption(Unit u);
bool hasTotalWaterConsumption();
double targetWaterConsumption(Unit u);
bool hasTargetWaterConsumption();
private:
void processContent(Telegram *t);
double actual_total_water_consumption_m3_ {};
double last_total_water_consumption_m3h_ {};
};
MeterEMerlin868::MeterEMerlin868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EMERLIN868)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);
addLinkMode(LinkMode::T1);
// version 0x68
// version 0x7c Sensus 640
addPrint("total", Quantity::Volume,
[&](Unit u){ return totalWaterConsumption(u); },
"The total water consumption recorded by this meter.",
true, true);
addPrint("target", Quantity::Volume,
[&](Unit u){ return targetWaterConsumption(u); },
"The target water consumption recorded at previous period.",
true, true);
}
shared_ptr<WaterMeter> createEMerlin868(MeterInfo &mi)
{
return shared_ptr<WaterMeter>(new MeterEMerlin868(mi));
}
void MeterEMerlin868::processContent(Telegram *t)
{
int offset;
string key;
if(findKey(MeasurementType::Unknown, ValueInformation::Volume, 0, 0, &key, &t->values)) {
extractDVdouble(&t->values, key, &offset, &actual_total_water_consumption_m3_);
t->addMoreExplanation(offset, " actual total consumption (%f m3)", actual_total_water_consumption_m3_);
}
if(findKey(MeasurementType::Unknown, ValueInformation::Volume, 1, 0, &key, &t->values)) {
extractDVdouble(&t->values, key, &offset, &last_total_water_consumption_m3h_);
t->addMoreExplanation(offset, " last total consumption (%f m3)", last_total_water_consumption_m3h_);
}
}
double MeterEMerlin868::totalWaterConsumption(Unit u)
{
assertQuantity(u, Quantity::Volume);
return convert(actual_total_water_consumption_m3_, Unit::M3, u);
}
bool MeterEMerlin868::hasTotalWaterConsumption()
{
return true;
}
double MeterEMerlin868::targetWaterConsumption(Unit u)
{
assertQuantity(u, Quantity::Volume);
return convert(last_total_water_consumption_m3h_, Unit::M3, u);
}
bool MeterEMerlin868::hasTargetWaterConsumption()
{
return true;
}

Wyświetl plik

@ -21,7 +21,7 @@
#include"wmbus.h"
#include"wmbus_utils.h"
struct MeterEurisII : public virtual HeatCostMeter, public virtual MeterCommonImplementation {
struct MeterEurisII : public virtual HeatCostAllocationMeter, public virtual MeterCommonImplementation {
MeterEurisII(MeterInfo &mi);
double currentConsumption(Unit u);
@ -80,9 +80,9 @@ MeterEurisII::MeterEurisII(MeterInfo &mi) :
true, true);
}
shared_ptr<HeatCostMeter> createEurisII(MeterInfo &mi)
shared_ptr<HeatCostAllocationMeter> createEurisII(MeterInfo &mi)
{
return shared_ptr<HeatCostMeter>(new MeterEurisII(mi));
return shared_ptr<HeatCostAllocationMeter>(new MeterEurisII(mi));
}
double MeterEurisII::currentConsumption(Unit u)

107
src/meter_ev200.cc 100644
Wyświetl plik

@ -0,0 +1,107 @@
/*
Copyright (C) 2017-2020 Fredrik Öhrström
Copyright (C) 2018 David Mallon
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include"dvparser.h"
#include"meters.h"
#include"meters_common_implementation.h"
#include"wmbus.h"
#include"wmbus_utils.h"
using namespace std;
struct MeterEV200 : public virtual WaterMeter, public virtual MeterCommonImplementation {
MeterEV200(MeterInfo &mi);
// Total water counted through the meter
double totalWaterConsumption(Unit u);
bool hasTotalWaterConsumption();
double targetWaterConsumption(Unit u);
bool hasTargetWaterConsumption();
private:
void processContent(Telegram *t);
double actual_total_water_consumption_m3_ {};
double last_total_water_consumption_m3h_ {};
};
MeterEV200::MeterEV200(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EV200)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);
addLinkMode(LinkMode::T1);
// version 0x68
// version 0x7c Sensus 640
addPrint("total", Quantity::Volume,
[&](Unit u){ return totalWaterConsumption(u); },
"The total water consumption recorded by this meter.",
true, true);
addPrint("target", Quantity::Volume,
[&](Unit u){ return targetWaterConsumption(u); },
"The target water consumption recorded at previous period.",
true, true);
}
shared_ptr<WaterMeter> createEV200(MeterInfo &mi)
{
return shared_ptr<WaterMeter>(new MeterEV200(mi));
}
void MeterEV200::processContent(Telegram *t)
{
int offset;
string key;
if(findKey(MeasurementType::Unknown, ValueInformation::Volume, 0, 0, &key, &t->values)) {
extractDVdouble(&t->values, key, &offset, &actual_total_water_consumption_m3_);
t->addMoreExplanation(offset, " actual total consumption (%f m3)", actual_total_water_consumption_m3_);
}
if(findKey(MeasurementType::Unknown, ValueInformation::Volume, 1, 0, &key, &t->values)) {
extractDVdouble(&t->values, key, &offset, &last_total_water_consumption_m3h_);
t->addMoreExplanation(offset, " last total consumption (%f m3)", last_total_water_consumption_m3h_);
}
}
double MeterEV200::totalWaterConsumption(Unit u)
{
assertQuantity(u, Quantity::Volume);
return convert(actual_total_water_consumption_m3_, Unit::M3, u);
}
bool MeterEV200::hasTotalWaterConsumption()
{
return true;
}
double MeterEV200::targetWaterConsumption(Unit u)
{
assertQuantity(u, Quantity::Volume);
return convert(last_total_water_consumption_m3h_, Unit::M3, u);
}
bool MeterEV200::hasTargetWaterConsumption()
{
return true;
}

Wyświetl plik

@ -24,7 +24,7 @@
#include"util.h"
#include <ctime>
struct MeterFHKVDataIII : public virtual HeatCostMeter, public virtual MeterCommonImplementation
struct MeterFHKVDataIII : public virtual HeatCostAllocationMeter, public virtual MeterCommonImplementation
{
MeterFHKVDataIII(MeterInfo &mi);
@ -49,9 +49,9 @@ struct MeterFHKVDataIII : public virtual HeatCostMeter, public virtual MeterComm
double temp_radiator_ {};
};
shared_ptr<HeatCostMeter> createFHKVDataIII(MeterInfo &mi)
shared_ptr<HeatCostAllocationMeter> createFHKVDataIII(MeterInfo &mi)
{
return shared_ptr<HeatCostMeter>(new MeterFHKVDataIII(mi));
return shared_ptr<HeatCostAllocationMeter>(new MeterFHKVDataIII(mi));
}

Wyświetl plik

@ -21,7 +21,7 @@
#include"wmbus.h"
#include"wmbus_utils.h"
struct MeterQCaloric : public virtual HeatCostMeter, public virtual MeterCommonImplementation {
struct MeterQCaloric : public virtual HeatCostAllocationMeter, public virtual MeterCommonImplementation {
MeterQCaloric(MeterInfo &mi);
double currentConsumption(Unit u);
@ -98,9 +98,9 @@ MeterQCaloric::MeterQCaloric(MeterInfo &mi) :
false, true);
}
shared_ptr<HeatCostMeter> createQCaloric(MeterInfo &mi)
shared_ptr<HeatCostAllocationMeter> createQCaloric(MeterInfo &mi)
{
return shared_ptr<HeatCostMeter>(new MeterQCaloric(mi));
return shared_ptr<HeatCostAllocationMeter>(new MeterQCaloric(mi));
}
double MeterQCaloric::currentConsumption(Unit u)

Wyświetl plik

@ -21,7 +21,7 @@
#include"wmbus.h"
#include"wmbus_utils.h"
struct MeterSontex868 : public virtual HeatCostMeter, public virtual MeterCommonImplementation {
struct MeterSontex868 : public virtual HeatCostAllocationMeter, public virtual MeterCommonImplementation {
MeterSontex868(MeterInfo &mi);
double currentConsumption(Unit u);
@ -101,9 +101,9 @@ MeterSontex868::MeterSontex868(MeterInfo &mi) :
false, true);
}
shared_ptr<HeatCostMeter> createSontex868(MeterInfo &mi)
shared_ptr<HeatCostAllocationMeter> createSontex868(MeterInfo &mi)
{
return shared_ptr<HeatCostMeter>(new MeterSontex868(mi));
return shared_ptr<HeatCostAllocationMeter>(new MeterSontex868(mi));
}
double MeterSontex868::currentConsumption(Unit u)

Wyświetl plik

@ -630,9 +630,9 @@ double ElectricityMeter::totalApparentEnergyProduction(Unit u) { return -NAN; }
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; }
double HeatCostAllocationMeter::currentConsumption(Unit u) { return -NAN; }
string HeatCostAllocationMeter::setDate() { return "NAN"; }
double HeatCostAllocationMeter::consumptionAtSetDate(Unit u) { return -NAN; }
void MeterCommonImplementation::setExpectedTPLSecurityMode(TPLSecurityMode tsm)
{

Wyświetl plik

@ -27,45 +27,47 @@
#include<vector>
#define LIST_OF_METERS \
X(amiplus, T1_bit, Electricity, AMIPLUS, Amiplus) \
X(apator08, T1_bit, Water, APATOR08, Apator08) \
X(apator162, C1_bit|T1_bit, Water, APATOR162, Apator162) \
X(cma12w, C1_bit|T1_bit, TempHygro, CMA12W, CMa12w) \
X(compact5, T1_bit, Heat, COMPACT5, Compact5) \
X(ebzwmbe, T1_bit, Electricity, EBZWMBE, EBZWMBE) \
X(eurisii, T1_bit, HeatCostAllocation, EURISII, EurisII) \
X(ehzp, T1_bit, Electricity, EHZP, EHZP) \
X(esyswm, T1_bit, Electricity, ESYSWM, ESYSWM) \
X(flowiq2200, C1_bit, Water, FLOWIQ2200, FlowIQ2200) \
X(flowiq3100, C1_bit, Water, FLOWIQ3100, FlowIQ3100) \
X(em24, C1_bit, Electricity, EM24, EM24) \
X(fhkvdataiii, T1_bit, HeatCostAllocation, FHKVDATAIII, FHKVDataIII) \
X(hydrus, T1_bit, Water, HYDRUS, Hydrus) \
X(hydrodigit, T1_bit, Water, HYDRODIGIT, Hydrodigit) \
X(iperl, T1_bit, Water, IPERL, Iperl) \
X(izar, T1_bit, Water, IZAR, Izar) \
X(izar3, T1_bit, Water, IZAR3, Izar3) \
X(lansensm, T1_bit, Smoke, LANSENSM, LansenSM) \
X(lansenth, T1_bit, TempHygro, LANSENTH, LansenTH) \
X(lansendw, T1_bit, DoorWindow, LANSENDW, LansenDW) \
X(lansenpu, T1_bit, Pulse, LANSENPU, LansenPU) \
X(mkradio3, T1_bit, Water, MKRADIO3, MKRadio3) \
X(multical21, C1_bit|T1_bit, Water, MULTICAL21, Multical21) \
X(multical302,C1_bit, Heat, MULTICAL302, Multical302) \
X(multical403,C1_bit, Heat, MULTICAL403, Multical403) \
X(multical603,C1_bit, Heat, MULTICAL603, Multical603) \
X(omnipower, C1_bit, Electricity, OMNIPOWER, Omnipower) \
X(rfmamb, T1_bit, TempHygro, RFMAMB, RfmAmb) \
X(rfmtx1, T1_bit, Water, RFMTX1, RfmTX1) \
X(q400, T1_bit, Water, Q400, Q400) \
X(qcaloric, C1_bit, HeatCostAllocation, QCALORIC, QCaloric) \
X(sontex868, T1_bit, HeatCostAllocation, SONTEX868, Sontex868) \
X(supercom587,T1_bit, Water, SUPERCOM587, Supercom587) \
X(ultrimis, T1_bit, Water, ULTRIMIS, Ultrimis) \
X(vario451, T1_bit, Heat, VARIO451, Vario451) \
X(waterstarm, C1_bit|T1_bit, Water,WATERSTARM, WaterstarM) \
X(topaseskr, T1_bit, Water, TOPASESKR, TopasEsKr) \
X(sensostar, C1_bit|T1_bit, Heat,SENSOSTAR, Sensostar) \
X(amiplus, T1_bit, ElectricityMeter, AMIPLUS, Amiplus) \
X(apator08, T1_bit, WaterMeter, APATOR08, Apator08) \
X(apator162, C1_bit|T1_bit, WaterMeter, APATOR162, Apator162) \
X(cma12w, C1_bit|T1_bit, TempHygroMeter, CMA12W, CMa12w) \
X(compact5, T1_bit, HeatMeter, COMPACT5, Compact5) \
X(ebzwmbe, T1_bit, ElectricityMeter, EBZWMBE, EBZWMBE) \
X(eurisii, T1_bit, HeatCostAllocationMeter, EURISII, EurisII) \
X(ehzp, T1_bit, ElectricityMeter, EHZP, EHZP) \
X(esyswm, T1_bit, ElectricityMeter, ESYSWM, ESYSWM) \
X(flowiq2200, C1_bit, WaterMeter, FLOWIQ2200, FlowIQ2200) \
X(flowiq3100, C1_bit, WaterMeter, FLOWIQ3100, FlowIQ3100) \
X(em24, C1_bit, ElectricityMeter, EM24, EM24) \
X(emerlin868, T1_bit, WaterMeter, EMERLIN868, EMerlin868) \
X(ev200, T1_bit, WaterMeter, EV200, EV200) \
X(fhkvdataiii, T1_bit, HeatCostAllocationMeter, FHKVDATAIII, FHKVDataIII) \
X(hydrus, T1_bit, WaterMeter, HYDRUS, Hydrus) \
X(hydrodigit, T1_bit, WaterMeter, HYDRODIGIT, Hydrodigit) \
X(iperl, T1_bit, WaterMeter, IPERL, Iperl) \
X(izar, T1_bit, WaterMeter, IZAR, Izar) \
X(izar3, T1_bit, WaterMeter, IZAR3, Izar3) \
X(lansensm, T1_bit, SmokeDetector, LANSENSM, LansenSM) \
X(lansenth, T1_bit, TempHygroMeter, LANSENTH, LansenTH) \
X(lansendw, T1_bit, DoorWindowDetector, LANSENDW, LansenDW) \
X(lansenpu, T1_bit, PulseCounter, LANSENPU, LansenPU) \
X(mkradio3, T1_bit, WaterMeter, MKRADIO3, MKRadio3) \
X(multical21, C1_bit|T1_bit, WaterMeter, MULTICAL21, Multical21) \
X(multical302,C1_bit, HeatMeter, MULTICAL302, Multical302) \
X(multical403,C1_bit, HeatMeter, MULTICAL403, Multical403) \
X(multical603,C1_bit, HeatMeter, MULTICAL603, Multical603) \
X(omnipower, C1_bit, ElectricityMeter, OMNIPOWER, Omnipower) \
X(rfmamb, T1_bit, TempHygroMeter, RFMAMB, RfmAmb) \
X(rfmtx1, T1_bit, WaterMeter, RFMTX1, RfmTX1) \
X(q400, T1_bit, WaterMeter, Q400, Q400) \
X(qcaloric, C1_bit, HeatCostAllocationMeter, QCALORIC, QCaloric) \
X(sontex868, T1_bit, HeatCostAllocationMeter, SONTEX868, Sontex868) \
X(supercom587,T1_bit, WaterMeter, SUPERCOM587, Supercom587) \
X(ultrimis, T1_bit, WaterMeter, ULTRIMIS, Ultrimis) \
X(vario451, T1_bit, HeatMeter, VARIO451, Vario451) \
X(waterstarm, C1_bit|T1_bit, WaterMeter,WATERSTARM, WaterstarM) \
X(topaseskr, T1_bit, WaterMeter, TOPASESKR, TopasEsKr) \
X(sensostar, C1_bit|T1_bit, HeatMeter,SENSOSTAR, Sensostar) \
// List of numbers that can be used to detect the meter driver
@ -98,6 +100,8 @@
X(FLOWIQ2200,MANUFACTURER_KAW, 0x16, 0x3a) \
X(FLOWIQ3100,MANUFACTURER_KAM, 0x16, 0x1d) \
X(EM24, MANUFACTURER_KAM, 0x02, 0x33) \
X(EMERLIN868,MANUFACTURER_ELR, 0x37, 0x11) \
X(EV200, MANUFACTURER_ELR, 0x07, 0x0d) \
X(FHKVDATAIII,MANUFACTURER_TCH, 0x80, 0x69) \
X(HYDRUS, MANUFACTURER_DME, 0x07, 0x70) \
X(HYDRUS, MANUFACTURER_HYD, 0x07, 0x24) \
@ -313,7 +317,7 @@ struct ElectricityMeter : public virtual Meter
virtual double currentPowerProduction(Unit u); // kw
};
struct HeatCostMeter : public virtual Meter
struct HeatCostAllocationMeter : public virtual Meter
{
virtual double currentConsumption(Unit u);
virtual string setDate();
@ -356,53 +360,17 @@ struct PulseCounter : public virtual Meter
virtual ~PulseCounter() = default;
};
struct GenericMeter : public virtual Meter {
struct Generic : public virtual Meter {
};
string toMeterName(MeterType mt);
MeterType toMeterType(string& type);
LinkModeSet toMeterLinkModeSet(string& type);
shared_ptr<WaterMeter> createMultical21(MeterInfo &m);
shared_ptr<WaterMeter> createFlowIQ2200(MeterInfo &m);
shared_ptr<WaterMeter> createFlowIQ3100(MeterInfo &m);
shared_ptr<HeatMeter> createMultical302(MeterInfo &m);
shared_ptr<HeatMeter> createMultical403(MeterInfo &m);
shared_ptr<HeatMeter> createMultical603(MeterInfo &m);
shared_ptr<HeatMeter> createVario451(MeterInfo &m);
shared_ptr<WaterMeter> createWaterstarM(MeterInfo &m);
shared_ptr<HeatMeter> createCompact5(MeterInfo &m);
shared_ptr<ElectricityMeter> createOmnipower(MeterInfo &m);
shared_ptr<ElectricityMeter> createAmiplus(MeterInfo &m);
shared_ptr<ElectricityMeter> createEM24(MeterInfo &m);
shared_ptr<WaterMeter> createSupercom587(MeterInfo &m);
shared_ptr<WaterMeter> createMKRadio3(MeterInfo &m);
shared_ptr<WaterMeter> createApator08(MeterInfo &m);
shared_ptr<WaterMeter> createApator162(MeterInfo &m);
shared_ptr<WaterMeter> createIperl(MeterInfo &m);
shared_ptr<WaterMeter> createHydrus(MeterInfo &m);
shared_ptr<WaterMeter> createHydrodigit(MeterInfo &m);
shared_ptr<WaterMeter> createIzar(MeterInfo &m);
shared_ptr<WaterMeter> createIzar3(MeterInfo &m);
shared_ptr<WaterMeter> createQ400(MeterInfo &m);
shared_ptr<HeatCostMeter> createQCaloric(MeterInfo &m);
shared_ptr<HeatCostMeter> createEurisII(MeterInfo &m);
shared_ptr<HeatCostMeter> createFHKVDataIII(MeterInfo &m);
shared_ptr<HeatCostMeter> createSontex868(MeterInfo &m);
shared_ptr<TempHygroMeter> createLansenTH(MeterInfo &m);
shared_ptr<SmokeDetector> createLansenSM(MeterInfo &m);
shared_ptr<PulseCounter> createLansenPU(MeterInfo &m);
shared_ptr<DoorWindowDetector> createLansenDW(MeterInfo &m);
shared_ptr<TempHygroMeter> createCMa12w(MeterInfo &m);
shared_ptr<TempHygroMeter> createRfmAmb(MeterInfo &m);
shared_ptr<WaterMeter> createRfmTX1(MeterInfo &m);
shared_ptr<ElectricityMeter> createEHZP(MeterInfo &m);
shared_ptr<ElectricityMeter> createESYSWM(MeterInfo &m);
shared_ptr<ElectricityMeter> createEBZWMBE(MeterInfo &m);
shared_ptr<WaterMeter> createTopasEsKr(MeterInfo &m);
shared_ptr<WaterMeter> createUltrimis(MeterInfo &m);
shared_ptr<HeatMeter> createSensostar(MeterInfo &m);
#define X(mname,linkmode,info,type,cname) shared_ptr<info> create##cname(MeterInfo &m);
LIST_OF_METERS
#undef X
GenericMeter *createGeneric(WMBus *bus, MeterInfo &m);
Generic *createGeneric(WMBus *bus, MeterInfo &m);
#endif

Wyświetl plik

@ -185,6 +185,16 @@ Received telegram from: 12345679
type: Heat meter (0x04)
ver: 0x00
driver: sensostar
Received telegram from: 99993030
manufacturer: (ELR) Elster Metering, United Kingdom (0x1592)
type: Water meter (0x07)
ver: 0x0d
driver: ev200
Received telegram from: 95949392
manufacturer: (ELR) Elster Metering, United Kingdom (0x1592)
type: Radio converter (meter side) (0x37)
ver: 0x11
driver: emerlin868
EOF
RES=$($PROG --logfile=$LOGFILE --t1 simulations/simulation_t1.txt 2>&1)

Wyświetl plik

@ -37,7 +37,9 @@ METERS="MyWarmWater supercom587 12345678 NOKEY
Wasser rfmtx1 74737271 NOKEY
Woter waterstarm 20096221 BEDB81B52C29B5C143388CBB0D15A051
Witer topaseskr 78563412 NOKEY
Heater sensostar 12345679 NOKEY"
Heater sensostar 12345679 NOKEY
Voda ev200 99993030 NOKEY
Vodda emerlin868 95949392 NOKEY"
cat simulations/simulation_t1.txt | grep '^{' > $TEST/test_expected.txt