Refactor MeterType to MeterDriver.

pull/273/head
Fredrik Öhrström 2021-03-08 08:40:48 +01:00
rodzic 9faee235c5
commit a53cb1f77c
69 zmienionych plików z 168 dodań i 163 usunięć

Wyświetl plik

@ -87,8 +87,8 @@ key=00112233445566778899AABBCCDDEEFF
```
Meter driver detection will be automatic. You can also provide an
explicit driver name with: `type=multical21:c1` or explicitly state
that driver detection is automatic: `type=auto`.
explicit driver name with: `driver=multical21:c1` or explicitly state
that driver detection is automatic: `driver=auto`.
Now plugin your wmbus dongle. Wmbusmeters should start automatically,
check with `tail -f /var/log/syslog` and `tail -f /var/log/wmbusmeters/wmbusmeters.log`
@ -157,7 +157,7 @@ depending on if you are running as a daemon or not.
# Running without config files, good for experimentation and test.
```
wmbusmeters version: 1.0.3
Usage: wmbusmeters {options} <device> ( [meter_name] [meter_type]{:<modes>} [meter_id] [meter_key] )*
Usage: wmbusmeters {options} <device> ( [meter_name] [meter_driver]{:<modes>} [meter_id] [meter_key] )*
As <options> you can use:
@ -170,10 +170,10 @@ As <options> you can use:
--exitafter=<time> exit program after time, eg 20h, 10m 5s
--format=<hr/json/fields> for human readable, json or semicolon separated fields
--json_xxx=yyy always add "xxx"="yyy" to the json output and add shell env METER_xxx=yyy
--listenvs=<meter_type> list the env variables available for the given meter type
--listfields=<meter_type> list the fields selectable for the given meter type
--listmeters list all meter types
--listmeters=<search> list all meter types containing the text <search>
--listenvs=<meter_driver> list the env variables available for the given meter driver
--listfields=<meter_driver> list the fields selectable for the given meter driver
--listmeters list all meter drivers
--listmeters=<search> list all meter drivers containing the text <search>
--logfile=<file> use this file instead of stdout
--logtelegrams log the contents of the telegrams for easy replay
--ignoreduplicates=<bool> ignore duplicate telegrams, remember the last 10 telegrams
@ -250,7 +250,7 @@ expecting the same format that is the output from --logtelegrams. This format al
As meter quadruples you specify:
* <meter_name> a mnemonic for this particular meter (!Must not contain a colon ':' character!)
* <meter_type> use "auto" or one of the supported meters (can be suffixed with :<mode> to specify which mode you expect the meter to use when transmitting)
* <meter_driver> use "auto" or one of the supported meters (can be suffixed with :<mode> to specify which mode you expect the meter to use when transmitting)
* <meter_id> an 8 digit mbus id, usually printed on the meter
* <meter_key> an encryption key unique for the meter if the meter uses no encryption, then supply NOKEY

Wyświetl plik

@ -554,15 +554,15 @@ shared_ptr<Configuration> parseCommandLine(int argc, char **argv) {
LinkModeSet modes;
int bps = 0;
size_t colon = type.find(':');
MeterType mt = toMeterType(type);
MeterDriver mt = toMeterDriver(type);
if (colon != string::npos)
{
// The config can be supplied after the type, like this:
// apator162:c1
string modess = type.substr(colon+1);
type = type.substr(0, colon);
mt = toMeterType(type);
if (mt == MeterType::UNKNOWN) error("Not a valid meter type \"%s\"\n", type.c_str());
mt = toMeterDriver(type);
if (mt == MeterDriver::UNKNOWN) error("Not a valid meter type \"%s\"\n", type.c_str());
modes = parseLinkModes(modess);
LinkModeSet default_modes = toMeterLinkModeSet(type);
if (!default_modes.hasAll(modes))
@ -580,9 +580,9 @@ shared_ptr<Configuration> parseCommandLine(int argc, char **argv) {
modes = toMeterLinkModeSet(type);
}
mt = toMeterType(type);
mt = toMeterDriver(type);
if (mt == MeterType::UNKNOWN) error("Not a valid meter type \"%s\"\n", type.c_str());
if (mt == MeterDriver::UNKNOWN) error("Not a valid meter type \"%s\"\n", type.c_str());
if (!isValidMatchExpressions(id, true)) error("Not a valid id nor a valid meter match expression \"%s\"\n", id.c_str());
if (!isValidKey(key, mt)) error("Not a valid meter key \"%s\"\n", key.c_str());
vector<string> no_meter_shells, no_meter_jsons;

Wyświetl plik

@ -51,7 +51,7 @@ void parseMeterConfig(Configuration *c, vector<char> &buf, string file)
auto i = buf.begin();
string bus;
string name;
string type = "auto";
string driver = "auto";
string id;
string key = "";
string linkmodes;
@ -98,7 +98,9 @@ void parseMeterConfig(Configuration *c, vector<char> &buf, string file)
}
}
else
if (p.first == "type") type = p.second;
if (p.first == "type") driver = p.second;
else
if (p.first == "driver") driver = p.second;
else
if (p.first == "id") id = p.second;
else
@ -128,44 +130,46 @@ void parseMeterConfig(Configuration *c, vector<char> &buf, string file)
debug("(config) %s=%s\n", p.first.c_str(), p.second.c_str());
}
}
MeterType mt = toMeterType(type);
bool use = true;
LinkModeSet modes;
size_t colon = type.find(':');
if (colon != string::npos)
MeterDriver mt = toMeterDriver(driver);
size_t colon = driver.find(':');
if (colon == string::npos)
{
// The config can be supplied after the type, like this:
// No suffixes to control the driver.
modes = toMeterLinkModeSet(driver);
}
else
{
// The config can be supplied after the driver, like this:
// apator162:c1
// or
// pith:mainbus:2400
string modess = type.substr(colon+1);
type = type.substr(0, colon);
mt = toMeterType(type);
if (mt == MeterType::UNKNOWN) {
warning("Not a valid meter type \"%s\"\n", type.c_str());
string modess = driver.substr(colon+1);
driver = driver.substr(0, colon);
mt = toMeterDriver(driver);
if (mt == MeterDriver::UNKNOWN) {
warning("Not a valid meter driver \"%s\"\n", driver.c_str());
use = false;
}
modes = parseLinkModes(modess);
LinkModeSet default_modes = toMeterLinkModeSet(type);
if (!default_modes.hasAll(modes))
LinkModeSet default_modes = toMeterLinkModeSet(driver);
if (!modes.empty() && !default_modes.hasAll(modes))
{
string want = modes.hr();
string has = default_modes.hr();
error("(cmdline) cannot set link modes to: %s because meter %s only transmits on: %s\n",
want.c_str(), type.c_str(), has.c_str());
want.c_str(), driver.c_str(), has.c_str());
}
string modeshr = modes.hr();
debug("(cmdline) setting link modes to %s for meter %s\n",
modeshr.c_str(), name.c_str());
}
else {
modes = toMeterLinkModeSet(type);
}
if (mt == MeterType::UNKNOWN) {
warning("Not a valid meter type \"%s\"\n", type.c_str());
if (mt == MeterDriver::UNKNOWN) {
warning("Not a valid meter driver \"%s\"\n", driver.c_str());
use = false;
}
if (!isValidMatchExpressions(id, true)) {
@ -660,7 +664,7 @@ LinkModeCalculationResult calculateLinkModes(Configuration *config, WMBus *wmbus
{
meters_union.unionLinkModeSet(m.link_modes);
string meter = m.link_modes.hr();
debug("(config) meter %s link mode(s): %s\n", toMeterDriver(m.type).c_str(), meter.c_str());
debug("(config) meter %s link mode(s): %s\n", toMeterDriver(m.driver).c_str(), meter.c_str());
}
string metersu = meters_union.hr();
debug("(config) all possible link modes that the meters might transmit on: %s\n", metersu.c_str());

Wyświetl plik

@ -606,14 +606,14 @@ void find_specified_device_and_mark_as_handled(Configuration *c, Detected *d)
}
}
void list_shell_envs(Configuration *config, string meter_type)
void list_shell_envs(Configuration *config, string meter_driver)
{
string ignore1, ignore2, ignore3;
vector<string> envs;
Telegram t;
t.about.device = "?";
MeterInfo mi;
mi.type = toMeterType(meter_type);
mi.driver = toMeterDriver(meter_driver);
shared_ptr<Meter> meter = createMeter(&mi);
meter->printMeter(&t,
&ignore1,
@ -631,10 +631,10 @@ void list_shell_envs(Configuration *config, string meter_type)
}
}
void list_fields(Configuration *config, string meter_type)
void list_fields(Configuration *config, string meter_driver)
{
MeterInfo mi;
mi.type = toMeterType(meter_type);
mi.driver = toMeterDriver(meter_driver);
shared_ptr<Meter> meter = createMeter(&mi);
int width = 0;

Wyświetl plik

@ -42,7 +42,7 @@ private:
};
MeterAmiplus::MeterAmiplus(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::AMIPLUS)
MeterCommonImplementation(mi, MeterDriver::AMIPLUS)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -44,7 +44,7 @@ shared_ptr<WaterMeter> createApator08(MeterInfo &mi)
}
MeterApator08::MeterApator08(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::APATOR08)
MeterCommonImplementation(mi, MeterDriver::APATOR08)
{
// manufacturer 0x8614 is not compliant with flags encoding.
// forced decode will decode to APT.

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<WaterMeter> createApator162(MeterInfo &mi)
}
MeterApator162::MeterApator162(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::APATOR162)
MeterCommonImplementation(mi, MeterDriver::APATOR162)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

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

Wyświetl plik

@ -36,7 +36,7 @@ private:
};
MeterCMa12w::MeterCMa12w(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::CMA12W)
MeterCommonImplementation(mi, MeterDriver::CMA12W)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<HeatMeter> createCompact5(MeterInfo &mi)
}
MeterCompact5::MeterCompact5(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::COMPACT5)
MeterCommonImplementation(mi, MeterDriver::COMPACT5)
{
// media 0x04 is used for C telegrams
// media 0xC3 is used for T telegrams

Wyświetl plik

@ -45,7 +45,7 @@ private:
};
MeterEBZWMBE::MeterEBZWMBE(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EBZWMBE)
MeterCommonImplementation(mi, MeterDriver::EBZWMBE)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_NO_IV);

Wyświetl plik

@ -43,7 +43,7 @@ private:
};
MeterEHZP::MeterEHZP(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EHZP)
MeterCommonImplementation(mi, MeterDriver::EHZP)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_NO_IV);

Wyświetl plik

@ -69,7 +69,7 @@ private:
};
MeterEI6500::MeterEI6500(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EI6500)
MeterCommonImplementation(mi, MeterDriver::EI6500)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -50,7 +50,7 @@ private:
};
MeterElf::MeterElf(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::ELF)
MeterCommonImplementation(mi, MeterDriver::ELF)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -70,7 +70,7 @@ shared_ptr<ElectricityMeter> createEM24(MeterInfo &mi)
}
MeterEM24::MeterEM24(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EM24)
MeterCommonImplementation(mi, MeterDriver::EM24)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterEMerlin868::MeterEMerlin868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EMERLIN868)
MeterCommonImplementation(mi, MeterDriver::EMERLIN868)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

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

Wyświetl plik

@ -42,7 +42,7 @@ private:
};
MeterEurisII::MeterEurisII(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EURISII)
MeterCommonImplementation(mi, MeterDriver::EURISII)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterEV200::MeterEV200(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EV200)
MeterCommonImplementation(mi, MeterDriver::EV200)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -59,7 +59,7 @@ shared_ptr<WaterMeter> createEVO868(MeterInfo &mi)
}
MeterEvo868::MeterEvo868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::EVO868)
MeterCommonImplementation(mi, MeterDriver::EVO868)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -56,7 +56,7 @@ shared_ptr<HeatCostAllocationMeter> createFHKVDataIII(MeterInfo &mi)
MeterFHKVDataIII::MeterFHKVDataIII(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::FHKVDATAIII)
MeterCommonImplementation(mi, MeterDriver::FHKVDATAIII)
{
// media 0x80 T telegrams
addLinkMode(LinkMode::T1);

Wyświetl plik

@ -46,7 +46,7 @@ private:
};
MeterFHKVDataIV::MeterFHKVDataIV(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::FHKVDATAIV)
MeterCommonImplementation(mi, MeterDriver::FHKVDATAIV)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -41,7 +41,7 @@ using namespace std;
#define INFO_CODE_BURST_SHIFT (4+9)
struct MeterFlowIQ2200 : public virtual WaterMeter, public virtual MeterCommonImplementation {
MeterFlowIQ2200(MeterInfo &mi, MeterType mt);
MeterFlowIQ2200(MeterInfo &mi, MeterDriver mt);
// Total water counted through the meter
double totalWaterConsumption(Unit u);
@ -104,7 +104,7 @@ private:
string target_datetime_;
};
MeterFlowIQ2200::MeterFlowIQ2200(MeterInfo &mi, MeterType mt) :
MeterFlowIQ2200::MeterFlowIQ2200(MeterInfo &mi, MeterDriver mt) :
MeterCommonImplementation(mi, mt)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);
@ -269,7 +269,7 @@ bool MeterFlowIQ2200::hasExternalTemperature()
shared_ptr<WaterMeter> createFlowIQ2200(MeterInfo &mi)
{
return shared_ptr<WaterMeter>(new MeterFlowIQ2200(mi, MeterType::FLOWIQ2200));
return shared_ptr<WaterMeter>(new MeterFlowIQ2200(mi, MeterDriver::FLOWIQ2200));
}
void MeterFlowIQ2200::processContent(Telegram *t)
@ -316,7 +316,7 @@ void MeterFlowIQ2200::processContent(Telegram *t)
(flowiq2200) 4c: 67 vif (External temperature °C)
(flowiq2200) 4d: * 13 external temperature (19.000000 °C)
*/
string meter_name = toMeterDriver(type()).c_str();
string meter_name = toMeterDriver(driver()).c_str();
int offset;
string key;
@ -473,7 +473,7 @@ string MeterFlowIQ2200::statusHumanReadable()
string MeterFlowIQ2200::decodeTime(int time)
{
if (time>7) {
string meter_name = toMeterDriver(type()).c_str();
string meter_name = toMeterDriver(driver()).c_str();
warning("(%s) warning: Cannot decode time %d should be 0-7.\n", meter_name.c_str(), time);
}
switch (time) {

Wyświetl plik

@ -83,7 +83,7 @@ shared_ptr<ElectricityMeter> createCCx01(MeterInfo &mi)
}
MeterGransystemsCCx01::MeterGransystemsCCx01(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::CCx01)
MeterCommonImplementation(mi, MeterDriver::CCx01)
{
addLinkMode(LinkMode::T1);

Wyświetl plik

@ -51,7 +51,7 @@ private:
};
MeterHydrocalM3::MeterHydrocalM3(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::HYDROCALM3)
MeterCommonImplementation(mi, MeterDriver::HYDROCALM3)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -44,7 +44,7 @@ shared_ptr<WaterMeter> createHydrodigit(MeterInfo &mi)
}
MeterHydrodigit::MeterHydrodigit(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::HYDRODIGIT)
MeterCommonImplementation(mi, MeterDriver::HYDRODIGIT)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -63,7 +63,7 @@ private:
};
MeterHydrus::MeterHydrus(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::HYDRUS)
MeterCommonImplementation(mi, MeterDriver::HYDRUS)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterIperl::MeterIperl(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::IPERL)
MeterCommonImplementation(mi, MeterDriver::IPERL)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -81,7 +81,7 @@ shared_ptr<WaterMeter> createIzar(MeterInfo &mi)
}
MeterIzar::MeterIzar(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::IZAR)
MeterCommonImplementation(mi, MeterDriver::IZAR)
{
initializeDiehlDefaultKeySupport(meterKeys()->confidentiality_key, keys);
addLinkMode(LinkMode::T1);

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<WaterMeter> createIzar3(MeterInfo &mi)
}
MeterIzar3::MeterIzar3(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::IZAR3)
MeterCommonImplementation(mi, MeterDriver::IZAR3)
{
// We do not know how to decode the IZAR r3 aka Diehl AQUARIUS!
addLinkMode(LinkMode::T1);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterLansenDW::MeterLansenDW(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::LANSENDW)
MeterCommonImplementation(mi, MeterDriver::LANSENDW)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -39,7 +39,7 @@ private:
};
MeterLansenPU::MeterLansenPU(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::LANSENPU)
MeterCommonImplementation(mi, MeterDriver::LANSENPU)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MeterLansenSM::MeterLansenSM(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::LANSENSM)
MeterCommonImplementation(mi, MeterDriver::LANSENSM)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -40,7 +40,7 @@ private:
};
MeterLansenTH::MeterLansenTH(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::LANSENTH)
MeterCommonImplementation(mi, MeterDriver::LANSENTH)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -39,7 +39,7 @@ private:
};
MeterLSE_08::MeterLSE_08(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::LSE_08)
MeterCommonImplementation(mi, MeterDriver::LSE_08)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -45,7 +45,7 @@ private:
};
MKRadio3::MKRadio3(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::MKRADIO3)
MeterCommonImplementation(mi, MeterDriver::MKRADIO3)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -41,7 +41,7 @@ private:
};
MKRadio4::MKRadio4(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::MKRADIO4)
MeterCommonImplementation(mi, MeterDriver::MKRADIO4)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -39,7 +39,7 @@ using namespace std;
#define INFO_CODE_BURST_SHIFT (4+9)
struct MeterMultical21 : public virtual WaterMeter, public virtual MeterCommonImplementation {
MeterMultical21(MeterInfo &mi, MeterType mt);
MeterMultical21(MeterInfo &mi, MeterDriver mt);
// Total water counted through the meter
double totalWaterConsumption(Unit u);
@ -89,7 +89,7 @@ private:
bool has_external_temperature_ {};
};
MeterMultical21::MeterMultical21(MeterInfo &mi, MeterType mt) :
MeterMultical21::MeterMultical21(MeterInfo &mi, MeterDriver mt) :
MeterCommonImplementation(mi, mt)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);
@ -207,9 +207,9 @@ bool MeterMultical21::hasExternalTemperature()
return has_external_temperature_;
}
shared_ptr<WaterMeter> createMulticalWaterMeter(MeterInfo &mi, MeterType mt)
shared_ptr<WaterMeter> createMulticalWaterMeter(MeterInfo &mi, MeterDriver mt)
{
if (mt != MeterType::MULTICAL21 && mt != MeterType::FLOWIQ3100) {
if (mt != MeterDriver::MULTICAL21 && mt != MeterDriver::FLOWIQ3100) {
error("Internal error! Not a proper meter type when creating a multical21 style meter.\n");
}
return shared_ptr<WaterMeter>(new MeterMultical21(mi,mt));
@ -217,12 +217,12 @@ shared_ptr<WaterMeter> createMulticalWaterMeter(MeterInfo &mi, MeterType mt)
shared_ptr<WaterMeter> createMultical21(MeterInfo &mi)
{
return createMulticalWaterMeter(mi, MeterType::MULTICAL21);
return createMulticalWaterMeter(mi, MeterDriver::MULTICAL21);
}
shared_ptr<WaterMeter> createFlowIQ3100(MeterInfo &mi)
{
return createMulticalWaterMeter(mi, MeterType::FLOWIQ3100);
return createMulticalWaterMeter(mi, MeterDriver::FLOWIQ3100);
}
void MeterMultical21::processContent(Telegram *t)
@ -287,7 +287,7 @@ void MeterMultical21::processContent(Telegram *t)
// 2d: 0F vife (?)
// 2e: * 0D external temperature (13.000000 °C)
string meter_name = toMeterDriver(type()).c_str();
string meter_name = toMeterDriver(driver()).c_str();
int offset;
string key;
@ -423,7 +423,7 @@ string MeterMultical21::statusHumanReadable()
string MeterMultical21::decodeTime(int time)
{
if (time>7) {
string meter_name = toMeterDriver(type()).c_str();
string meter_name = toMeterDriver(driver()).c_str();
warning("(%s) warning: Cannot decode time %d should be 0-7.\n", meter_name.c_str(), time);
}
switch (time) {

Wyświetl plik

@ -52,7 +52,7 @@ private:
};
MeterMultical302::MeterMultical302(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::MULTICAL302)
MeterCommonImplementation(mi, MeterDriver::MULTICAL302)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -61,7 +61,7 @@ private:
};
MeterMultical403::MeterMultical403(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::MULTICAL403)
MeterCommonImplementation(mi, MeterDriver::MULTICAL403)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -64,7 +64,7 @@ private:
};
MeterMultical603::MeterMultical603(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::MULTICAL603)
MeterCommonImplementation(mi, MeterDriver::MULTICAL603)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -63,7 +63,7 @@ private:
};
MeterMultical803::MeterMultical803(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::MULTICAL803)
MeterCommonImplementation(mi, MeterDriver::MULTICAL803)
{
setExpectedELLSecurityMode(ELLSecurityMode::AES_CTR);

Wyświetl plik

@ -72,7 +72,7 @@ shared_ptr<ElectricityMeter> createOmnipower(MeterInfo &mi)
}
MeterOmnipower::MeterOmnipower(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::OMNIPOWER)
MeterCommonImplementation(mi, MeterDriver::OMNIPOWER)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -40,7 +40,7 @@ private:
};
MeterPIIGTH::MeterPIIGTH(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::PIIGTH)
MeterCommonImplementation(mi, MeterDriver::PIIGTH)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -48,7 +48,7 @@ shared_ptr<WaterMeter> createQ400(MeterInfo &mi)
}
MeterQ400::MeterQ400(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::Q400)
MeterCommonImplementation(mi, MeterDriver::Q400)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -46,7 +46,7 @@ private:
};
MeterQCaloric::MeterQCaloric(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::QCALORIC)
MeterCommonImplementation(mi, MeterDriver::QCALORIC)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -59,7 +59,7 @@ private:
};
MeterRfmAmb::MeterRfmAmb(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::RFMAMB)
MeterCommonImplementation(mi, MeterDriver::RFMAMB)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -44,7 +44,7 @@ shared_ptr<WaterMeter> createRfmTX1(MeterInfo &mi)
}
MeterRfmTX1::MeterRfmTX1(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::RFMTX1)
MeterCommonImplementation(mi, MeterDriver::RFMTX1)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<HeatMeter> createSensostar(MeterInfo &mi)
}
MeterSensostar::MeterSensostar(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::SENSOSTAR)
MeterCommonImplementation(mi, MeterDriver::SENSOSTAR)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -49,7 +49,7 @@ private:
};
MeterSharky::MeterSharky(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::SHARKY)
MeterCommonImplementation(mi, MeterDriver::SHARKY)
{
addLinkMode(LinkMode::T1);

Wyświetl plik

@ -54,7 +54,7 @@ private:
};
MeterSontex868::MeterSontex868(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::SONTEX868)
MeterCommonImplementation(mi, MeterDriver::SONTEX868)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<WaterMeter> createSupercom587(MeterInfo &mi)
}
MeterSupercom587::MeterSupercom587(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::SUPERCOM587)
MeterCommonImplementation(mi, MeterDriver::SUPERCOM587)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -72,7 +72,7 @@ shared_ptr<WaterMeter> createTopasEsKr(MeterInfo &mi)
}
MeterTopasEsKr::MeterTopasEsKr(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::TOPASESKR)
MeterCommonImplementation(mi, MeterDriver::TOPASESKR)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -43,7 +43,7 @@ private:
};
MeterTSD2::MeterTSD2(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::TSD2)
MeterCommonImplementation(mi, MeterDriver::TSD2)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -50,7 +50,7 @@ shared_ptr<WaterMeter> createUltrimis(MeterInfo &mi)
}
MeterUltrimis::MeterUltrimis(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::ULTRIMIS)
MeterCommonImplementation(mi, MeterDriver::ULTRIMIS)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

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

Wyświetl plik

@ -46,7 +46,7 @@ shared_ptr<HeatMeter> createVario451(MeterInfo &mi)
}
MeterVario451::MeterVario451(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::VARIO451)
MeterCommonImplementation(mi, MeterDriver::VARIO451)
{
// media 0x04 C telegrams
// media 0xC3 T telegrams

Wyświetl plik

@ -52,7 +52,7 @@ shared_ptr<WaterMeter> createWaterstarM(MeterInfo &mi)
}
MeterWaterstarM::MeterWaterstarM(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::WATERSTARM)
MeterCommonImplementation(mi, MeterDriver::WATERSTARM)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -43,7 +43,7 @@ shared_ptr<WaterMeter> createWEH_07(MeterInfo &mi)
}
MeterWEH_07::MeterWEH_07(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::WEH_07)
MeterCommonImplementation(mi, MeterDriver::WEH_07)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -50,7 +50,7 @@ private:
};
MeterWhe46x::MeterWhe46x(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::WHE46X)
MeterCommonImplementation(mi, MeterDriver::WHE46X)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -42,7 +42,7 @@ private:
};
MeterWhe5x::MeterWhe5x(MeterInfo &mi) :
MeterCommonImplementation(mi, MeterType::WHE5X)
MeterCommonImplementation(mi, MeterDriver::WHE5X)
{
setExpectedTPLSecurityMode(TPLSecurityMode::AES_CBC_IV);

Wyświetl plik

@ -165,11 +165,11 @@ public:
tmp.ids = tmp_ids;
tmp.idsc = t.ids.back();
if (tmp.type == MeterType::AUTO)
if (tmp.driver == MeterDriver::AUTO)
{
// Look up the proper meter driver!
tmp.type = pickMeterDriver(&t);
if (tmp.type == MeterType::UNKNOWN)
tmp.driver = pickMeterDriver(&t);
if (tmp.driver == MeterDriver::UNKNOWN)
{
warnForUnknownDriver(mi.name, &t);
}
@ -183,7 +183,7 @@ public:
verbose("(meter) used meter template %s %s %s to match %s\n",
mi.name.c_str(),
mi.idsc.c_str(),
toMeterDriver(mi.type).c_str(),
toMeterDriver(mi.driver).c_str(),
idsc.c_str());
if (is_daemon_)
@ -192,7 +192,7 @@ public:
meter->index(),
mi.name.c_str(),
tmp.idsc.c_str(),
toMeterDriver(mi.type).c_str());
toMeterDriver(mi.driver).c_str());
}
else
{
@ -200,7 +200,7 @@ public:
meter->index(),
mi.name.c_str(),
tmp.idsc.c_str(),
toMeterDriver(mi.type).c_str());
toMeterDriver(mi.driver).c_str());
}
bool match = false;
@ -211,7 +211,7 @@ public:
// but it still did not match! This is probably an error in wmbusmeters!
warning("(meter) newly created meter (%s %s %s) did not match telegram! ",
"Please open an issue at https://github.com/weetmuts/wmbusmeters/\n",
meter->name().c_str(), meter->idsc().c_str(), toMeterDriver(meter->type()).c_str());
meter->name().c_str(), meter->idsc().c_str(), toMeterDriver(meter->driver()).c_str());
}
else if (!h)
{
@ -219,7 +219,7 @@ public:
// but it still did not handle it! This can happen if the wrong
// decryption key was used.
warning("(meter) newly created meter (%s %s %s) did not handle telegram!\n",
meter->name().c_str(), meter->idsc().c_str(), toMeterDriver(meter->type()).c_str());
meter->name().c_str(), meter->idsc().c_str(), toMeterDriver(meter->driver()).c_str());
}
else
{
@ -255,8 +255,8 @@ shared_ptr<MeterManager> createMeterManager(bool daemon)
}
MeterCommonImplementation::MeterCommonImplementation(MeterInfo &mi,
MeterType type) :
type_(type), name_(mi.name)
MeterDriver driver) :
driver_(driver), name_(mi.name)
{
ids_ = mi.ids;
idsc_ = toIdsCommaSeparated(ids_);
@ -301,9 +301,9 @@ vector<string> &MeterCommonImplementation::additionalJsons()
return jsons_;
}
MeterType MeterCommonImplementation::type()
MeterDriver MeterCommonImplementation::driver()
{
return type_;
return driver_;
}
void MeterCommonImplementation::addLinkMode(LinkMode lm)
@ -388,20 +388,20 @@ string MeterCommonImplementation::datetimeOfUpdateRobot()
return string(datetime);
}
string toMeterDriver(MeterType mt)
string toMeterDriver(MeterDriver mt)
{
#define X(mname,link,info,type,cname) if (mt == MeterType::type) return #mname;
#define X(mname,link,info,type,cname) if (mt == MeterDriver::type) return #mname;
LIST_OF_METERS
#undef X
return "unknown";
}
MeterType toMeterType(string& t)
MeterDriver toMeterDriver(string& t)
{
#define X(mname,linkmodes,info,type,cname) if (t == #mname) return MeterType::type;
#define X(mname,linkmodes,info,type,cname) if (t == #mname) return MeterDriver::type;
LIST_OF_METERS
#undef X
return MeterType::UNKNOWN;
return MeterDriver::UNKNOWN;
}
LinkModeSet toMeterLinkModeSet(string& t)
@ -417,7 +417,7 @@ bool MeterCommonImplementation::isTelegramForMeter(Telegram *t, Meter *meter, Me
string name;
vector<string> ids;
string idsc;
MeterType type;
MeterDriver driver;
assert((meter && !mi) ||
(!meter && mi));
@ -427,14 +427,14 @@ bool MeterCommonImplementation::isTelegramForMeter(Telegram *t, Meter *meter, Me
name = meter->name();
ids = meter->ids();
idsc = meter->idsc();
type = meter->type();
driver = meter->driver();
}
else
{
name = mi->name;
ids = mi->ids;
idsc = mi->idsc;
type = mi->type;
driver = mi->driver;
}
debug("(meter) %s: for me? %s\n", name.c_str(), idsc.c_str());
@ -448,13 +448,13 @@ bool MeterCommonImplementation::isTelegramForMeter(Telegram *t, Meter *meter, Me
return false;
}
bool valid_driver = isMeterDriverValid(type, t->dll_mfct, t->dll_type, t->dll_version);
bool valid_driver = isMeterDriverValid(driver, t->dll_mfct, t->dll_type, t->dll_version);
if (!valid_driver && t->tpl_id_found)
{
valid_driver = isMeterDriverValid(type, t->tpl_mfct, t->tpl_type, t->tpl_version);
valid_driver = isMeterDriverValid(driver, t->tpl_mfct, t->tpl_type, t->tpl_version);
}
if (!valid_driver && type != MeterType::AUTO)
if (!valid_driver && driver != MeterDriver::AUTO)
{
// Are we using the right driver? Perhaps not since
// this particular driver, mfct, media, version combo
@ -479,7 +479,7 @@ bool MeterCommonImplementation::isTelegramForMeter(Telegram *t, Meter *meter, Me
warning("(meter) %s: meter detection did not match the selected driver %s! correct driver is: %s\n"
"(meter) Not printing this warning agin for id: %02x%02x%02x%02x mfct: (%s) %s (0x%02x) type: %s (0x%02x) ver: 0x%02x\n",
name.c_str(),
toMeterDriver(type).c_str(),
toMeterDriver(driver).c_str(),
possible_drivers.c_str(),
t->dll_id_b[3], t->dll_id_b[2], t->dll_id_b[1], t->dll_id_b[0],
manufacturerFlag(t->dll_mfct).c_str(),
@ -911,21 +911,21 @@ ELLSecurityMode MeterCommonImplementation::expectedELLSecurityMode()
void detectMeterDrivers(int manufacturer, int media, int version, vector<string> *drivers)
{
#define X(TY,MA,ME,VE) { if (manufacturer == MA && (media == ME || ME == -1) && (version == VE || VE == -1)) { drivers->push_back(toMeterDriver(MeterType::TY)); }}
#define X(TY,MA,ME,VE) { if (manufacturer == MA && (media == ME || ME == -1) && (version == VE || VE == -1)) { drivers->push_back(toMeterDriver(MeterDriver::TY)); }}
METER_DETECTION
#undef X
}
bool isMeterDriverValid(MeterType type, int manufacturer, int media, int version)
bool isMeterDriverValid(MeterDriver type, int manufacturer, int media, int version)
{
#define X(TY,MA,ME,VE) { if (type == MeterType::TY && manufacturer == MA && (media == ME || ME == -1) && (version == VE || VE == -1)) { return true; }}
#define X(TY,MA,ME,VE) { if (type == MeterDriver::TY && manufacturer == MA && (media == ME || ME == -1) && (version == VE || VE == -1)) { return true; }}
METER_DETECTION
#undef X
return false;
}
MeterType pickMeterDriver(Telegram *t)
MeterDriver pickMeterDriver(Telegram *t)
{
int manufacturer = t->dll_mfct;
int media = t->dll_type;
@ -938,10 +938,10 @@ MeterType pickMeterDriver(Telegram *t)
version = t->tpl_version;
}
#define X(TY,MA,ME,VE) { if (manufacturer == MA && (media == ME || ME == -1) && (version == VE || VE == -1)) { return MeterType::TY; }}
#define X(TY,MA,ME,VE) { if (manufacturer == MA && (media == ME || ME == -1) && (version == VE || VE == -1)) { return MeterDriver::TY; }}
METER_DETECTION
#undef X
return MeterType::UNKNOWN;
return MeterDriver::UNKNOWN;
}
shared_ptr<Meter> createMeter(MeterInfo *mi)
@ -950,10 +950,10 @@ shared_ptr<Meter> createMeter(MeterInfo *mi)
const char *keymsg = (mi->key[0] == 0) ? "not-encrypted" : "encrypted";
switch (mi->type)
switch (mi->driver)
{
#define X(mname,link,info,type,cname) \
case MeterType::type: \
#define X(mname,link,info,driver,cname) \
case MeterDriver::driver: \
{ \
newm = create##cname(*mi); \
newm->addConversions(mi->conversions); \

Wyświetl plik

@ -88,7 +88,7 @@
X(weh_07, C1_bit, WaterMeter, WEH_07, WEH_07) \
enum class MeterType {
enum class MeterDriver {
#define X(mname,linkmode,info,type,cname) type,
LIST_OF_METERS
#undef X
@ -96,7 +96,7 @@ LIST_OF_METERS
struct MeterMatch
{
MeterType driver;
MeterDriver driver;
int manufacturer;
int media;
int version;
@ -106,9 +106,9 @@ struct MeterMatch
void detectMeterDrivers(int manufacturer, int media, int version, std::vector<std::string> *drivers);
// When entering the driver, check that the telegram is indeed known to be
// compatible with the driver(type), if not then print a warning.
bool isMeterDriverValid(MeterType type, int manufacturer, int media, int version);
bool isMeterDriverValid(MeterDriver type, int manufacturer, int media, int version);
// Return the best driver match for a telegram.
MeterType pickMeterDriver(Telegram *t);
MeterDriver pickMeterDriver(Telegram *t);
using namespace std;
@ -120,7 +120,8 @@ struct MeterInfo
// A bus can be an mbus or a wmbus dongle.
// The bus can be the empty string, which means that it will fallback to the first defined bus.
string name; // User specified name of this (group of) meters.
MeterType type {}; // Driver
MeterDriver driver {}; // Requested driver for decoding telegrams from this meter.
string extras; // Extra driver specific settings.
vector<string> ids; // Match expressions for ids.
string idsc; // Comma separated ids.
string key; // Decryption key.
@ -134,11 +135,11 @@ struct MeterInfo
{
}
MeterInfo(string b, string n, MeterType t, vector<string> i, string k, LinkModeSet lms, int baud, vector<string> &s, vector<string> &j)
MeterInfo(string b, string n, MeterDriver d, vector<string> i, string k, LinkModeSet lms, int baud, vector<string> &s, vector<string> &j)
{
bus = b;
name = n;
type = t;
driver = d;
ids = i;
idsc = toIdsCommaSeparated(ids);
key = k;
@ -177,7 +178,7 @@ struct Meter
virtual vector<Print> prints() = 0;
virtual string meterDriver() = 0;
virtual string name() = 0;
virtual MeterType type() = 0;
virtual MeterDriver driver() = 0;
virtual string datetimeOfUpdateHumanReadable() = 0;
virtual string datetimeOfUpdateRobot() = 0;
@ -324,9 +325,9 @@ struct PulseCounter : public virtual Meter
struct Generic : public virtual Meter {
};
string toMeterDriver(MeterType mt);
MeterType toMeterType(string& type);
LinkModeSet toMeterLinkModeSet(string& type);
string toMeterDriver(MeterDriver driver);
MeterDriver toMeterDriver(string& driver);
LinkModeSet toMeterLinkModeSet(string& driver);
#define X(mname,linkmode,info,type,cname) shared_ptr<info> create##cname(MeterInfo &m);
LIST_OF_METERS

Wyświetl plik

@ -33,7 +33,7 @@ struct MeterCommonImplementation : public virtual Meter
vector<string> fields();
vector<Print> prints();
string name();
MeterType type();
MeterDriver driver();
ELLSecurityMode expectedELLSecurityMode();
TPLSecurityMode expectedTPLSecurityMode();
@ -51,11 +51,11 @@ struct MeterCommonImplementation : public virtual Meter
double getRecordAsDouble(std::string record);
uint16_t getRecordAsUInt16(std::string record);
MeterCommonImplementation(MeterInfo &mi, MeterType type);
MeterCommonImplementation(MeterInfo &mi, MeterDriver driver);
~MeterCommonImplementation() = default;
string meterDriver() { return toMeterDriver(type_); }
string meterDriver() { return toMeterDriver(driver_); }
protected:
@ -91,7 +91,7 @@ protected:
private:
int index_ {};
MeterType type_ {};
MeterDriver driver_ {};
MeterKeys meter_keys_ {};
ELLSecurityMode expected_ell_sec_mode_ {};
TPLSecurityMode expected_tpl_sec_mode_ {};

Wyświetl plik

@ -267,7 +267,7 @@ int test_linkmodes()
vector<string> ids = { "12345678" };
apator_config.meters.push_back(MeterInfo("", // bus
"m1", // name
MeterType::APATOR162, // driver/type
MeterDriver::APATOR162, // driver/type
ids, // ids
"", // Key
toMeterLinkModeSet(apator162), // link mode set
@ -308,12 +308,12 @@ int test_linkmodes()
string multical21 = "multical21";
string supercom587 = "supercom587";
multical21_and_supercom587_config.meters.push_back(MeterInfo("", "m1", MeterType::MULTICAL21, ids, "",
multical21_and_supercom587_config.meters.push_back(MeterInfo("", "m1", MeterDriver::MULTICAL21, ids, "",
toMeterLinkModeSet(multical21),
0,
no_meter_shells,
no_meter_jsons));
multical21_and_supercom587_config.meters.push_back(MeterInfo("", "m2", MeterType::SUPERCOM587, ids, "",
multical21_and_supercom587_config.meters.push_back(MeterInfo("", "m2", MeterDriver::SUPERCOM587, ids, "",
toMeterLinkModeSet(supercom587),
0,
no_meter_shells,

Wyświetl plik

@ -741,15 +741,15 @@ string toIdsCommaSeparated(std::vector<std::string> &ids)
return cs;
}
bool isValidKey(string& key, MeterType mt)
bool isValidKey(string& key, MeterDriver mt)
{
if (key.length() == 0) return true;
if (key == "NOKEY") {
key = "";
return true;
}
if (mt == MeterType::IZAR ||
mt == MeterType::HYDRUS)
if (mt == MeterDriver::IZAR ||
mt == MeterDriver::HYDRUS)
{
// These meters can either be OMS compatible 128 bit key (32 hex).
// Or using an older proprietary encryption with 64 bit keys (16 hex)

Wyświetl plik

@ -25,7 +25,7 @@
#include<map>
#include<vector>
enum class MeterType;
enum class MeterDriver;
void onExit(std::function<void()> cb);
void restoreSignalHandlers();
@ -113,7 +113,7 @@ std::string toIdsCommaSeparated(std::vector<std::string> &ids);
bool isValidId(std::string id, bool accept_non_compliant);
bool isValidKey(std::string& key, MeterType mt);
bool isValidKey(std::string& key, MeterDriver mt);
bool isFrequency(std::string& fq);
bool isNumber(std::string& fq);

Wyświetl plik

@ -1,4 +1,4 @@
name=Smokey
type=ei6500
driver=ei6500
id=00012811
key=

Wyświetl plik

@ -1,4 +1,4 @@
name=myomnipower
type=omnipower
driver=auto
id=32666857
key=