Refactoring with the intent to make it easier to write drivers.

pull/441/head
Fredrik Öhrström 2022-01-02 13:08:36 +01:00
rodzic 8540559767
commit 1ba56609b5
71 zmienionych plików z 144 dodań i 80 usunięć

Wyświetl plik

@ -44,7 +44,7 @@ private:
};
MeterAmiplus::MeterAmiplus(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::AMIPLUS)
MeterCommonImplementation(mi, "amiplus")
{
setMeterType(MeterType::ElectricityMeter);

Wyświetl plik

@ -44,7 +44,7 @@ shared_ptr<Meter> createApator08(MeterInfo &mi)
}
MeterApator08::MeterApator08(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::APATOR08)
MeterCommonImplementation(mi, "apator08")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<Meter> createApator162(MeterInfo &mi)
}
MeterApator162::MeterApator162(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::APATOR162)
MeterCommonImplementation(mi, "apator162")
{
processExtras(mi.extras);

Wyświetl plik

@ -35,7 +35,7 @@ struct MeterAuto : public virtual MeterCommonImplementation {
};
MeterAuto::MeterAuto(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::AUTO)
MeterCommonImplementation(mi, "auto")
{
addPrint("meter_info", Quantity::Text,
[&](){ return meter_info_; },

Wyświetl plik

@ -42,7 +42,7 @@ private:
};
MeterAventiesHCA::MeterAventiesHCA(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::AVENTIESHCA)
MeterCommonImplementation(mi, "aventieshca")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -50,7 +50,7 @@ shared_ptr<Meter> createAventiesWM(MeterInfo &mi)
}
MeterAventiesWM::MeterAventiesWM(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::AVENTIESWM)
MeterCommonImplementation(mi, "aventieswm")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -56,7 +56,7 @@ shared_ptr<Meter> createBFW240Radio(MeterInfo &mi)
MeterBFW240RADIO::MeterBFW240RADIO(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::BFW240RADIO)
MeterCommonImplementation(mi, "bfw240radio")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -36,7 +36,7 @@ private:
};
MeterCMa12w::MeterCMa12w(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::CMA12W)
MeterCommonImplementation(mi, "cma12w")
{
setMeterType(MeterType::TempHygroMeter);

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<Meter> createCompact5(MeterInfo &mi)
}
MeterCompact5::MeterCompact5(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::COMPACT5)
MeterCommonImplementation(mi, "compact5")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -45,7 +45,7 @@ shared_ptr<Meter> createDME_07(MeterInfo &mi)
}
MeterDME_07::MeterDME_07(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::DME_07)
MeterCommonImplementation(mi, "dme_07")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -45,7 +45,7 @@ private:
};
MeterEBZWMBE::MeterEBZWMBE(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EBZWMBE)
MeterCommonImplementation(mi, "ebzwmbe")
{
setMeterType(MeterType::ElectricityMeter);

Wyświetl plik

@ -43,7 +43,7 @@ private:
};
MeterEHZP::MeterEHZP(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EHZP)
MeterCommonImplementation(mi, "ehzp")
{
setMeterType(MeterType::ElectricityMeter);

Wyświetl plik

@ -69,7 +69,7 @@ private:
};
MeterEI6500::MeterEI6500(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EI6500)
MeterCommonImplementation(mi, "ei6500")
{
setMeterType(MeterType::SmokeDetector);

Wyświetl plik

@ -50,7 +50,7 @@ private:
};
MeterElf::MeterElf(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::ELF)
MeterCommonImplementation(mi, "elf")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -70,7 +70,7 @@ shared_ptr<Meter> createEM24(MeterInfo &mi)
}
MeterEM24::MeterEM24(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EM24)
MeterCommonImplementation(mi, "em24")
{
setMeterType(MeterType::ElectricityMeter);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterEMerlin868::MeterEMerlin868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EMERLIN868)
MeterCommonImplementation(mi, "emerlin868")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -62,7 +62,7 @@ private:
};
MeterESYSWM::MeterESYSWM(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::ESYSWM)
MeterCommonImplementation(mi, "esyswm")
{
setMeterType(MeterType::ElectricityMeter);
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_NO_IV);

Wyświetl plik

@ -42,7 +42,7 @@ private:
};
MeterEurisII::MeterEurisII(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EURISII)
MeterCommonImplementation(mi, "eurisii")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterEV200::MeterEV200(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EV200)
MeterCommonImplementation(mi, "ev200")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -59,7 +59,7 @@ shared_ptr<Meter> createEVO868(MeterInfo &mi)
}
MeterEvo868::MeterEvo868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::EVO868)
MeterCommonImplementation(mi, "evo868")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -56,7 +56,7 @@ shared_ptr<Meter> createFHKVDataIII(MeterInfo &mi)
MeterFHKVDataIII::MeterFHKVDataIII(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::FHKVDATAIII)
MeterCommonImplementation(mi, "fhkvdataiii")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -46,7 +46,7 @@ private:
};
MeterFHKVDataIV::MeterFHKVDataIV(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::FHKVDATAIV)
MeterCommonImplementation(mi, "fhkvdataiv")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -41,7 +41,7 @@ using namespace std;
#define INFO_CODE_BURST_SHIFT (4+9)
struct MeterFlowIQ2200 : public virtual MeterCommonImplementation {
MeterFlowIQ2200(MeterInfo &mi, MeterDriver mt);
MeterFlowIQ2200(MeterInfo &mi, string mt);
// Total water counted through the meter
double totalWaterConsumption(Unit u);
@ -104,7 +104,7 @@ private:
string target_datetime_;
};
MeterFlowIQ2200::MeterFlowIQ2200(MeterInfo &mi, MeterDriver mt) :
MeterFlowIQ2200::MeterFlowIQ2200(MeterInfo &mi, string mt) :
MeterCommonImplementation(mi, mt)
{
setMeterType(MeterType::WaterMeter);
@ -271,7 +271,7 @@ bool MeterFlowIQ2200::hasExternalTemperature()
shared_ptr<Meter> createFlowIQ2200(MeterInfo &mi)
{
return shared_ptr<Meter>(new MeterFlowIQ2200(mi, MeterDriver::FLOWIQ2200));
return shared_ptr<Meter>(new MeterFlowIQ2200(mi, "flowiq2200"));
}
void MeterFlowIQ2200::processContent(Telegram *t)

Wyświetl plik

@ -82,7 +82,7 @@ shared_ptr<Meter> createCCx01(MeterInfo &mi)
}
MeterGransystemsCCx01::MeterGransystemsCCx01(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::CCx01)
MeterCommonImplementation(mi, "gransystems")
{
setMeterType(MeterType::ElectricityMeter);

Wyświetl plik

@ -49,7 +49,7 @@ private:
};
MeterHydrocalM3::MeterHydrocalM3(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::HYDROCALM3)
MeterCommonImplementation(mi, "hydrocalm3")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -44,7 +44,7 @@ shared_ptr<Meter> createHydrodigit(MeterInfo &mi)
}
MeterHydrodigit::MeterHydrodigit(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::HYDRODIGIT)
MeterCommonImplementation(mi, "hydrodigit")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -63,7 +63,7 @@ private:
};
MeterHydrus::MeterHydrus(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::HYDRUS)
MeterCommonImplementation(mi, "hydrus")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterIperl::MeterIperl(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::IPERL)
MeterCommonImplementation(mi, "iperl")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -81,7 +81,7 @@ shared_ptr<Meter> createIzar(MeterInfo &mi)
}
MeterIzar::MeterIzar(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::IZAR)
MeterCommonImplementation(mi, "izar")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<Meter> createIzar3(MeterInfo &mi)
}
MeterIzar3::MeterIzar3(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::IZAR3)
MeterCommonImplementation(mi, "izar3")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -21,6 +21,7 @@
#include"wmbus.h"
#include"wmbus_utils.h"
#define INFO_CODE_CLOSED 0x0011
#define INFO_CODE_OPEN 0x0055
@ -39,8 +40,16 @@ private:
double pulse_counter_b_ {};
};
static DriverInfo di = addDriver(
"lansendw",
T1_bit,
MeterType::DoorWindowDetector,
[](MeterInfo& mi){ return shared_ptr<Meter>(new MeterLansenDW(mi)); },
{ { MANUFACTURER_LAS, 0x1d, 0x07 } }
);
MeterLansenDW::MeterLansenDW(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::LANSENDW)
MeterCommonImplementation(mi, "lansendw")
{
setMeterType(MeterType::DoorWindowDetector);
@ -64,6 +73,7 @@ MeterLansenDW::MeterLansenDW(MeterInfo &mi) :
false, true);
}
shared_ptr<Meter> createLansenDW(MeterInfo &mi)
{
return shared_ptr<Meter>(new MeterLansenDW(mi));

Wyświetl plik

@ -39,7 +39,7 @@ private:
};
MeterLansenPU::MeterLansenPU(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::LANSENPU)
MeterCommonImplementation(mi, "lansenpu")
{
setMeterType(MeterType::PulseCounter);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterLansenSM::MeterLansenSM(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::LANSENSM)
MeterCommonImplementation(mi, "lansensm")
{
setMeterType(MeterType::SmokeDetector);

Wyświetl plik

@ -40,7 +40,7 @@ private:
};
MeterLansenTH::MeterLansenTH(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::LANSENTH)
MeterCommonImplementation(mi, "lansenth")
{
setMeterType(MeterType::TempHygroMeter);

Wyświetl plik

@ -65,7 +65,7 @@ shared_ptr<Meter> createLSE_07_17(MeterInfo &mi)
}
MeterLSE_07_17::MeterLSE_07_17(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::LSE_07_17)
MeterCommonImplementation(mi, "lse_07_17")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -39,7 +39,7 @@ private:
};
MeterLSE_08::MeterLSE_08(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::LSE_08)
MeterCommonImplementation(mi, "lse_08")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -46,7 +46,7 @@ private:
};
MeterMinomess::MeterMinomess(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MINOMESS)
MeterCommonImplementation(mi, "minomess")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -45,7 +45,7 @@ private:
};
MKRadio3::MKRadio3(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MKRADIO3)
MeterCommonImplementation(mi, "mkradio3")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MKRadio4::MKRadio4(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MKRADIO4)
MeterCommonImplementation(mi, "mkradio4")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -39,7 +39,7 @@ using namespace std;
#define INFO_CODE_BURST_SHIFT (4+9)
struct MeterMultical21 : public virtual MeterCommonImplementation {
MeterMultical21(MeterInfo &mi, MeterDriver mt);
MeterMultical21(MeterInfo &mi, string mt);
// Total water counted through the meter
double totalWaterConsumption(Unit u);
@ -89,7 +89,7 @@ private:
bool has_external_temperature_ {};
};
MeterMultical21::MeterMultical21(MeterInfo &mi, MeterDriver mt) :
MeterMultical21::MeterMultical21(MeterInfo &mi, string mt) :
MeterCommonImplementation(mi, mt)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);
@ -207,9 +207,9 @@ bool MeterMultical21::hasExternalTemperature()
return has_external_temperature_;
}
shared_ptr<Meter> createMulticalWaterMeter(MeterInfo &mi, MeterDriver mt)
shared_ptr<Meter> createMulticalWaterMeter(MeterInfo &mi, string mt)
{
if (mt != MeterDriver::MULTICAL21 && mt != MeterDriver::FLOWIQ3100) {
if (mt != "multical21" && mt != "flowiq3100") {
error("Internal error! Not a proper meter type when creating a multical21 style meter.\n");
}
return shared_ptr<Meter>(new MeterMultical21(mi,mt));
@ -217,12 +217,12 @@ shared_ptr<Meter> createMulticalWaterMeter(MeterInfo &mi, MeterDriver mt)
shared_ptr<Meter> createMultical21(MeterInfo &mi)
{
return createMulticalWaterMeter(mi, MeterDriver::MULTICAL21);
return createMulticalWaterMeter(mi, "multical21");
}
shared_ptr<Meter> createFlowIQ3100(MeterInfo &mi)
{
return createMulticalWaterMeter(mi, MeterDriver::FLOWIQ3100);
return createMulticalWaterMeter(mi, "flowiq3100");
}
void MeterMultical21::processContent(Telegram *t)

Wyświetl plik

@ -52,7 +52,7 @@ private:
};
MeterMultical302::MeterMultical302(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MULTICAL302)
MeterCommonImplementation(mi, "multical302")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -61,7 +61,7 @@ private:
};
MeterMultical403::MeterMultical403(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MULTICAL403)
MeterCommonImplementation(mi, "multical403")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -64,7 +64,7 @@ private:
};
MeterMultical602::MeterMultical602(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MULTICAL602)
MeterCommonImplementation(mi, "multical602")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -64,7 +64,7 @@ private:
};
MeterMultical603::MeterMultical603(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MULTICAL603)
MeterCommonImplementation(mi, "multical603")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -63,7 +63,7 @@ private:
};
MeterMultical803::MeterMultical803(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MULTICAL803)
MeterCommonImplementation(mi, "multical803")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -36,7 +36,7 @@ private:
};
MeterMunia::MeterMunia(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::MUNIA)
MeterCommonImplementation(mi, "munia")
{
setMeterType(MeterType::TempHygroMeter);

Wyświetl plik

@ -72,7 +72,7 @@ shared_ptr<Meter> createOmnipower(MeterInfo &mi)
}
MeterOmnipower::MeterOmnipower(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::OMNIPOWER)
MeterCommonImplementation(mi, "omnipower")
{
setMeterType(MeterType::ElectricityMeter);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterPIIGTH::MeterPIIGTH(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::PIIGTH)
MeterCommonImplementation(mi, "piigth")
{
setMeterType(MeterType::TempHygroMeter);

Wyświetl plik

@ -59,7 +59,7 @@ shared_ptr<Meter> createQ400(MeterInfo &mi)
}
MeterQ400::MeterQ400(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::Q400)
MeterCommonImplementation(mi, "q400")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -46,7 +46,7 @@ private:
};
MeterQCaloric::MeterQCaloric(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::QCALORIC)
MeterCommonImplementation(mi, "qcaloric")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -49,7 +49,7 @@ private:
};
MeterQHeat::MeterQHeat(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::QHEAT)
MeterCommonImplementation(mi, "qheat")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -44,7 +44,7 @@ private:
};
MeterQSmoke::MeterQSmoke(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::QSMOKE)
MeterCommonImplementation(mi, "qsmoke")
{
setMeterType(MeterType::SmokeDetector);

Wyświetl plik

@ -59,7 +59,7 @@ private:
};
MeterRfmAmb::MeterRfmAmb(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::RFMAMB)
MeterCommonImplementation(mi, "rfmamb")
{
setMeterType(MeterType::TempHygroMeter);

Wyświetl plik

@ -44,7 +44,7 @@ shared_ptr<Meter> createRfmTX1(MeterInfo &mi)
}
MeterRfmTX1::MeterRfmTX1(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::RFMTX1)
MeterCommonImplementation(mi, "rfmtx1")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<Meter> createSensostar(MeterInfo &mi)
}
MeterSensostar::MeterSensostar(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::SENSOSTAR)
MeterCommonImplementation(mi, "sensostar")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -49,7 +49,7 @@ private:
};
MeterSharky::MeterSharky(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::SHARKY)
MeterCommonImplementation(mi, "sharky")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -54,7 +54,7 @@ private:
};
MeterSontex868::MeterSontex868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::SONTEX868)
MeterCommonImplementation(mi, "sontex868")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<Meter> createSupercom587(MeterInfo &mi)
}
MeterSupercom587::MeterSupercom587(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::SUPERCOM587)
MeterCommonImplementation(mi, "supercom587")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -72,7 +72,7 @@ shared_ptr<Meter> createTopasEsKr(MeterInfo &mi)
}
MeterTopasEsKr::MeterTopasEsKr(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::TOPASESKR)
MeterCommonImplementation(mi, "topaseskr")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -43,7 +43,7 @@ private:
};
MeterTSD2::MeterTSD2(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::TSD2)
MeterCommonImplementation(mi, "tsd2")
{
setMeterType(MeterType::SmokeDetector);

Wyświetl plik

@ -50,7 +50,7 @@ shared_ptr<Meter> createUltrimis(MeterInfo &mi)
}
MeterUltrimis::MeterUltrimis(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::ULTRIMIS)
MeterCommonImplementation(mi, "ultrimis")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -58,7 +58,7 @@ shared_ptr<Meter> createUnismart(MeterInfo &mi)
}
MeterUnismart::MeterUnismart(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::UNISMART)
MeterCommonImplementation(mi, "unismart")
{
setMeterType(MeterType::GasMeter);

Wyświetl plik

@ -35,7 +35,7 @@ struct MeterUnknown : public virtual MeterCommonImplementation {
};
MeterUnknown::MeterUnknown(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::AUTO)
MeterCommonImplementation(mi, "auto")
{
addPrint("meter_info", Quantity::Text,
[&](){ return meter_info_; },

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<Meter> createVario451(MeterInfo &mi)
}
MeterVario451::MeterVario451(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::VARIO451)
MeterCommonImplementation(mi, "vario451")
{
setMeterType(MeterType::HeatMeter);

Wyświetl plik

@ -52,7 +52,7 @@ shared_ptr<Meter> createWaterstarM(MeterInfo &mi)
}
MeterWaterstarM::MeterWaterstarM(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::WATERSTARM)
MeterCommonImplementation(mi, "waterstarm")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<Meter> createWEH_07(MeterInfo &mi)
}
MeterWEH_07::MeterWEH_07(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::WEH_07)
MeterCommonImplementation(mi, "weh_07")
{
setMeterType(MeterType::WaterMeter);

Wyświetl plik

@ -50,7 +50,7 @@ private:
};
MeterWhe46x::MeterWhe46x(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::WHE46X)
MeterCommonImplementation(mi, "whe46x")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -42,7 +42,7 @@ private:
};
MeterWhe5x::MeterWhe5x(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterDriver::WHE5X)
MeterCommonImplementation(mi, "whe5x")
{
setMeterType(MeterType::HeatCostAllocationMeter);

Wyświetl plik

@ -29,6 +29,27 @@
#include<time.h>
#include<cmath>
map<string, DriverInfo> all_drivers_;
DriverInfo addDriver(string n,
LinkModeSet lms,
MeterType t,
function<shared_ptr<Meter>(MeterInfo&)> constructor,
vector<DriverDetect> d)
{
assert(all_drivers_.count(n) == 0); // A driver must have a unique name.
DriverInfo di = { n, lms, t, constructor, d };
all_drivers_[n] = di;
// This code is invoked from the static initializers of DriverInfos when starting
// wmbusmeters. Thus we do not yet know if the user has supplied --debug or similar setting.
// To debug this you have to uncomment the printf below.
// fprintf(stderr, "(STATIC) added driver: %s\n", n.c_str());
return di;
}
struct MeterManagerImplementation : public virtual MeterManager
{
private:
@ -419,7 +440,7 @@ shared_ptr<MeterManager> createMeterManager(bool daemon)
}
MeterCommonImplementation::MeterCommonImplementation(MeterInfo &mi,
MeterDriver driver) :
string driver) :
driver_(driver), bus_(mi.bus), name_(mi.name)
{
ids_ = mi.ids;
@ -467,7 +488,8 @@ vector<string> &MeterCommonImplementation::meterExtraConstantFields()
MeterDriver MeterCommonImplementation::driver()
{
return driver_;
return toMeterDriver(driver_);
}
void MeterCommonImplementation::setMeterType(MeterType mt)

Wyświetl plik

@ -207,6 +207,38 @@ struct MeterInfo
bool parse(string name, string driver, string id, string key);
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Dynamic loading of drivers based on the driver info.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct DriverDetect
{
uint16_t mfct;
uchar type;
uchar version;
};
struct DriverInfo
{
string name; // amiplus, lse_07_17, multical21 etc
LinkModeSet linkmodes; // C1, T1, S1 or combinations thereof.
MeterType type; // Water, Electricity etc.
function<shared_ptr<Meter>(MeterInfo&)> constructor; // Invoke this to create an instance of the driver.
vector<DriverDetect> detect;
};
// The function addDriver is called as part of the static initialization inside a driver class.
DriverInfo addDriver(string n,
LinkModeSet lms,
MeterType t,
function<shared_ptr<Meter>(MeterInfo&)> constructor,
vector<DriverDetect> d);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct Print
{
string vname; // Value name, like: total current previous target

Wyświetl plik

@ -53,11 +53,11 @@ struct MeterCommonImplementation : public virtual Meter
double getRecordAsDouble(std::string record);
uint16_t getRecordAsUInt16(std::string record);
MeterCommonImplementation(MeterInfo &mi, MeterDriver driver);
MeterCommonImplementation(MeterInfo &mi, string driver);
~MeterCommonImplementation() = default;
string meterDriver() { return toString(driver_); }
string meterDriver() { return driver_; }
protected:
@ -108,7 +108,7 @@ private:
int index_ {};
MeterType type_ {};
MeterDriver driver_ {};
string driver_ {};
string bus_ {};
MeterKeys meter_keys_ {};
ELLSecurityMode expected_ell_sec_mode_ {};