kopia lustrzana https://github.com/weetmuts/wmbusmeters
Refactoring with the intent to make it easier to write drivers.
rodzic
8540559767
commit
1ba56609b5
|
@ -44,7 +44,7 @@ private:
|
|||
};
|
||||
|
||||
MeterAmiplus::MeterAmiplus(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::AMIPLUS)
|
||||
MeterCommonImplementation(mi, "amiplus")
|
||||
{
|
||||
setMeterType(MeterType::ElectricityMeter);
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ shared_ptr<Meter> createApator08(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterApator08::MeterApator08(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::APATOR08)
|
||||
MeterCommonImplementation(mi, "apator08")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ shared_ptr<Meter> createApator162(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterApator162::MeterApator162(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::APATOR162)
|
||||
MeterCommonImplementation(mi, "apator162")
|
||||
{
|
||||
processExtras(mi.extras);
|
||||
|
||||
|
|
|
@ -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_; },
|
||||
|
|
|
@ -42,7 +42,7 @@ private:
|
|||
};
|
||||
|
||||
MeterAventiesHCA::MeterAventiesHCA(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::AVENTIESHCA)
|
||||
MeterCommonImplementation(mi, "aventieshca")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ shared_ptr<Meter> createAventiesWM(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterAventiesWM::MeterAventiesWM(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::AVENTIESWM)
|
||||
MeterCommonImplementation(mi, "aventieswm")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ shared_ptr<Meter> createBFW240Radio(MeterInfo &mi)
|
|||
|
||||
|
||||
MeterBFW240RADIO::MeterBFW240RADIO(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::BFW240RADIO)
|
||||
MeterCommonImplementation(mi, "bfw240radio")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ private:
|
|||
};
|
||||
|
||||
MeterCMa12w::MeterCMa12w(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::CMA12W)
|
||||
MeterCommonImplementation(mi, "cma12w")
|
||||
{
|
||||
setMeterType(MeterType::TempHygroMeter);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ shared_ptr<Meter> createCompact5(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterCompact5::MeterCompact5(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::COMPACT5)
|
||||
MeterCommonImplementation(mi, "compact5")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ private:
|
|||
};
|
||||
|
||||
MeterEBZWMBE::MeterEBZWMBE(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EBZWMBE)
|
||||
MeterCommonImplementation(mi, "ebzwmbe")
|
||||
{
|
||||
setMeterType(MeterType::ElectricityMeter);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ private:
|
|||
};
|
||||
|
||||
MeterEHZP::MeterEHZP(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EHZP)
|
||||
MeterCommonImplementation(mi, "ehzp")
|
||||
{
|
||||
setMeterType(MeterType::ElectricityMeter);
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ private:
|
|||
};
|
||||
|
||||
MeterEI6500::MeterEI6500(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EI6500)
|
||||
MeterCommonImplementation(mi, "ei6500")
|
||||
{
|
||||
setMeterType(MeterType::SmokeDetector);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ private:
|
|||
};
|
||||
|
||||
MeterElf::MeterElf(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::ELF)
|
||||
MeterCommonImplementation(mi, "elf")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ shared_ptr<Meter> createEM24(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterEM24::MeterEM24(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EM24)
|
||||
MeterCommonImplementation(mi, "em24")
|
||||
{
|
||||
setMeterType(MeterType::ElectricityMeter);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
};
|
||||
|
||||
MeterEMerlin868::MeterEMerlin868(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EMERLIN868)
|
||||
MeterCommonImplementation(mi, "emerlin868")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -42,7 +42,7 @@ private:
|
|||
};
|
||||
|
||||
MeterEurisII::MeterEurisII(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EURISII)
|
||||
MeterCommonImplementation(mi, "eurisii")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
};
|
||||
|
||||
MeterEV200::MeterEV200(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EV200)
|
||||
MeterCommonImplementation(mi, "ev200")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ shared_ptr<Meter> createEVO868(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterEvo868::MeterEvo868(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::EVO868)
|
||||
MeterCommonImplementation(mi, "evo868")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ shared_ptr<Meter> createFHKVDataIII(MeterInfo &mi)
|
|||
|
||||
|
||||
MeterFHKVDataIII::MeterFHKVDataIII(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::FHKVDATAIII)
|
||||
MeterCommonImplementation(mi, "fhkvdataiii")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ private:
|
|||
};
|
||||
|
||||
MeterFHKVDataIV::MeterFHKVDataIV(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::FHKVDATAIV)
|
||||
MeterCommonImplementation(mi, "fhkvdataiv")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -82,7 +82,7 @@ shared_ptr<Meter> createCCx01(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterGransystemsCCx01::MeterGransystemsCCx01(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::CCx01)
|
||||
MeterCommonImplementation(mi, "gransystems")
|
||||
{
|
||||
setMeterType(MeterType::ElectricityMeter);
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ private:
|
|||
};
|
||||
|
||||
MeterHydrocalM3::MeterHydrocalM3(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::HYDROCALM3)
|
||||
MeterCommonImplementation(mi, "hydrocalm3")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ shared_ptr<Meter> createHydrodigit(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterHydrodigit::MeterHydrodigit(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::HYDRODIGIT)
|
||||
MeterCommonImplementation(mi, "hydrodigit")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ private:
|
|||
};
|
||||
|
||||
MeterHydrus::MeterHydrus(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::HYDRUS)
|
||||
MeterCommonImplementation(mi, "hydrus")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
};
|
||||
|
||||
MeterIperl::MeterIperl(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::IPERL)
|
||||
MeterCommonImplementation(mi, "iperl")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ shared_ptr<Meter> createIzar(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterIzar::MeterIzar(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::IZAR)
|
||||
MeterCommonImplementation(mi, "izar")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ shared_ptr<Meter> createIzar3(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterIzar3::MeterIzar3(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::IZAR3)
|
||||
MeterCommonImplementation(mi, "izar3")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -39,7 +39,7 @@ private:
|
|||
};
|
||||
|
||||
MeterLansenPU::MeterLansenPU(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::LANSENPU)
|
||||
MeterCommonImplementation(mi, "lansenpu")
|
||||
{
|
||||
setMeterType(MeterType::PulseCounter);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
};
|
||||
|
||||
MeterLansenSM::MeterLansenSM(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::LANSENSM)
|
||||
MeterCommonImplementation(mi, "lansensm")
|
||||
{
|
||||
setMeterType(MeterType::SmokeDetector);
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ private:
|
|||
};
|
||||
|
||||
MeterLansenTH::MeterLansenTH(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::LANSENTH)
|
||||
MeterCommonImplementation(mi, "lansenth")
|
||||
{
|
||||
setMeterType(MeterType::TempHygroMeter);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ private:
|
|||
};
|
||||
|
||||
MeterLSE_08::MeterLSE_08(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::LSE_08)
|
||||
MeterCommonImplementation(mi, "lse_08")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMinomess::MeterMinomess(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MINOMESS)
|
||||
MeterCommonImplementation(mi, "minomess")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ private:
|
|||
};
|
||||
|
||||
MKRadio3::MKRadio3(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MKRADIO3)
|
||||
MeterCommonImplementation(mi, "mkradio3")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
};
|
||||
|
||||
MKRadio4::MKRadio4(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MKRADIO4)
|
||||
MeterCommonImplementation(mi, "mkradio4")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -52,7 +52,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMultical302::MeterMultical302(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MULTICAL302)
|
||||
MeterCommonImplementation(mi, "multical302")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMultical403::MeterMultical403(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MULTICAL403)
|
||||
MeterCommonImplementation(mi, "multical403")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMultical602::MeterMultical602(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MULTICAL602)
|
||||
MeterCommonImplementation(mi, "multical602")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMultical603::MeterMultical603(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MULTICAL603)
|
||||
MeterCommonImplementation(mi, "multical603")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMultical803::MeterMultical803(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MULTICAL803)
|
||||
MeterCommonImplementation(mi, "multical803")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ private:
|
|||
};
|
||||
|
||||
MeterMunia::MeterMunia(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::MUNIA)
|
||||
MeterCommonImplementation(mi, "munia")
|
||||
{
|
||||
setMeterType(MeterType::TempHygroMeter);
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ shared_ptr<Meter> createOmnipower(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterOmnipower::MeterOmnipower(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::OMNIPOWER)
|
||||
MeterCommonImplementation(mi, "omnipower")
|
||||
{
|
||||
setMeterType(MeterType::ElectricityMeter);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
};
|
||||
|
||||
MeterPIIGTH::MeterPIIGTH(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::PIIGTH)
|
||||
MeterCommonImplementation(mi, "piigth")
|
||||
{
|
||||
setMeterType(MeterType::TempHygroMeter);
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ shared_ptr<Meter> createQ400(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterQ400::MeterQ400(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::Q400)
|
||||
MeterCommonImplementation(mi, "q400")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ private:
|
|||
};
|
||||
|
||||
MeterQCaloric::MeterQCaloric(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::QCALORIC)
|
||||
MeterCommonImplementation(mi, "qcaloric")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ private:
|
|||
};
|
||||
|
||||
MeterQHeat::MeterQHeat(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::QHEAT)
|
||||
MeterCommonImplementation(mi, "qheat")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ private:
|
|||
};
|
||||
|
||||
MeterQSmoke::MeterQSmoke(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::QSMOKE)
|
||||
MeterCommonImplementation(mi, "qsmoke")
|
||||
{
|
||||
setMeterType(MeterType::SmokeDetector);
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ private:
|
|||
};
|
||||
|
||||
MeterRfmAmb::MeterRfmAmb(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::RFMAMB)
|
||||
MeterCommonImplementation(mi, "rfmamb")
|
||||
{
|
||||
setMeterType(MeterType::TempHygroMeter);
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ shared_ptr<Meter> createRfmTX1(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterRfmTX1::MeterRfmTX1(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::RFMTX1)
|
||||
MeterCommonImplementation(mi, "rfmtx1")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ shared_ptr<Meter> createSensostar(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterSensostar::MeterSensostar(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::SENSOSTAR)
|
||||
MeterCommonImplementation(mi, "sensostar")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ private:
|
|||
};
|
||||
|
||||
MeterSharky::MeterSharky(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::SHARKY)
|
||||
MeterCommonImplementation(mi, "sharky")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ private:
|
|||
};
|
||||
|
||||
MeterSontex868::MeterSontex868(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::SONTEX868)
|
||||
MeterCommonImplementation(mi, "sontex868")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ shared_ptr<Meter> createSupercom587(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterSupercom587::MeterSupercom587(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::SUPERCOM587)
|
||||
MeterCommonImplementation(mi, "supercom587")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ shared_ptr<Meter> createTopasEsKr(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterTopasEsKr::MeterTopasEsKr(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::TOPASESKR)
|
||||
MeterCommonImplementation(mi, "topaseskr")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ private:
|
|||
};
|
||||
|
||||
MeterTSD2::MeterTSD2(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::TSD2)
|
||||
MeterCommonImplementation(mi, "tsd2")
|
||||
{
|
||||
setMeterType(MeterType::SmokeDetector);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ shared_ptr<Meter> createUltrimis(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterUltrimis::MeterUltrimis(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::ULTRIMIS)
|
||||
MeterCommonImplementation(mi, "ultrimis")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ shared_ptr<Meter> createUnismart(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterUnismart::MeterUnismart(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::UNISMART)
|
||||
MeterCommonImplementation(mi, "unismart")
|
||||
{
|
||||
setMeterType(MeterType::GasMeter);
|
||||
|
||||
|
|
|
@ -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_; },
|
||||
|
|
|
@ -46,7 +46,7 @@ shared_ptr<Meter> createVario451(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterVario451::MeterVario451(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::VARIO451)
|
||||
MeterCommonImplementation(mi, "vario451")
|
||||
{
|
||||
setMeterType(MeterType::HeatMeter);
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ shared_ptr<Meter> createWaterstarM(MeterInfo &mi)
|
|||
}
|
||||
|
||||
MeterWaterstarM::MeterWaterstarM(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::WATERSTARM)
|
||||
MeterCommonImplementation(mi, "waterstarm")
|
||||
{
|
||||
setMeterType(MeterType::WaterMeter);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ private:
|
|||
};
|
||||
|
||||
MeterWhe46x::MeterWhe46x(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::WHE46X)
|
||||
MeterCommonImplementation(mi, "whe46x")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ private:
|
|||
};
|
||||
|
||||
MeterWhe5x::MeterWhe5x(MeterInfo &mi) :
|
||||
MeterCommonImplementation(mi, MeterDriver::WHE5X)
|
||||
MeterCommonImplementation(mi, "whe5x")
|
||||
{
|
||||
setMeterType(MeterType::HeatCostAllocationMeter);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
32
src/meters.h
32
src/meters.h
|
@ -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
|
||||
|
|
|
@ -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_ {};
|
||||
|
|
Ładowanie…
Reference in New Issue