From 4abc31d75c97a6f23f5f033acdb8ac3fd16281fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20=C3=96hrstr=C3=B6m?= Date: Sun, 17 Apr 2022 11:23:45 +0200 Subject: [PATCH] Refactor. --- simulations/simulation_dll_tpl_diff.txt | 2 +- simulations/simulation_t1.txt | 2 +- src/driver_amiplus.cc | 22 +++++------ src/driver_apator08.cc | 4 +- src/driver_aventieshca.cc | 2 +- src/driver_aventieswm.cc | 2 +- src/driver_c5isf.cc | 2 +- src/driver_itron.cc | 6 +-- src/driver_lse_07_17.cc | 2 +- src/driver_microclima.cc | 2 +- src/driver_minomess.cc | 2 +- src/driver_piigth.cc | 6 +-- src/driver_qwater.cc | 2 +- src/driver_sharky774.cc | 2 +- src/dvparser.cc | 31 ++++++++++++---- src/dvparser.h | 49 ++++++++++++++++--------- src/meter_apator162.cc | 2 +- src/meter_cma12w.cc | 4 +- src/meter_compact5.cc | 4 +- src/meter_ebzwmbe.cc | 2 +- src/meter_ehzp.cc | 4 +- src/meter_emerlin868.cc | 4 +- src/meter_esyswm.cc | 8 ++-- src/meter_eurisii.cc | 6 +-- src/meter_ev200.cc | 4 +- src/meter_fhkvdataiv.cc | 12 +++--- src/meter_flowiq2200.cc | 6 +-- src/meter_hydrodigit.cc | 4 +- src/meter_lansenth.cc | 6 +-- src/meter_lse_08.cc | 6 +-- src/meter_mkradio3.cc | 8 ++-- src/meter_mkradio4.cc | 4 +- src/meter_multical21.cc | 8 ++-- src/meter_multical302.cc | 2 +- src/meter_multical403.cc | 4 +- src/meter_multical602.cc | 4 +- src/meter_multical603.cc | 4 +- src/meter_multical803.cc | 4 +- src/meter_munia.cc | 2 +- src/meter_q400.cc | 6 +-- src/meter_qcaloric.cc | 12 +++--- src/meter_qheat.cc | 6 +-- src/meter_qsmoke.cc | 2 +- src/meter_rfmamb.cc | 6 +-- src/meter_rfmtx1.cc | 4 +- src/meter_sensostar.cc | 2 +- src/meter_sontex868.cc | 8 ++-- src/meter_topaseskr.cc | 6 +-- src/meter_ultrimis.cc | 4 +- src/meter_vario451.cc | 4 +- src/meter_waterstarm.cc | 4 +- src/meter_weh_07.cc | 2 +- src/meter_whe46x.cc | 12 +++--- src/meter_whe5x.cc | 8 ++-- src/meters.cc | 8 ++-- src/meters_common_implementation.h | 2 +- src/wmbus.cc | 1 - 57 files changed, 189 insertions(+), 158 deletions(-) diff --git a/simulations/simulation_dll_tpl_diff.txt b/simulations/simulation_dll_tpl_diff.txt index 7eebdf5..6f522d0 100644 --- a/simulations/simulation_dll_tpl_diff.txt +++ b/simulations/simulation_dll_tpl_diff.txt @@ -1,2 +1,2 @@ telegram=|6644242381818181640E7246564656A51170071F0050052F2F|15257A616F14139172137DAE3A0C000000008C2013917213000B3B0000000B26784601025AF5000266EF00046D1B08B7214C1338861200CC101300000000CC201338861200426C9F2C42EC7EBF2C| -{"media":"water","meter":"hydrus","name":"Vatten","id":"56465646","total_m3":0,"total_tariff1_m3":0,"total_tariff2_m3":137.291,"max_flow_m3h":0,"flow_temperature_c":24.5,"external_temperature_c":23.9,"current_date":"2021-01-23 08:27","total_at_date_m3":128.638,"total_tariff1_at_date_m3":0,"total_tariff2_at_date_m3":128.638,"at_date":"2020-12-31 00:00","actuality_duration_s":0,"operating_time_h":14678,"remaining_battery_life_y":0,"status":"OK","timestamp":"1111-11-11T11:11:11Z"} +{"media":"water","meter":"hydrus","name":"Vatten","id":"56465646","total_m3":114.35283,"total_tariff1_m3":0,"total_tariff2_m3":137.291,"max_flow_m3h":0,"flow_temperature_c":24.5,"external_temperature_c":23.9,"current_date":"2021-01-23 08:27","total_at_date_m3":128.638,"total_tariff1_at_date_m3":0,"total_tariff2_at_date_m3":128.638,"at_date":"2020-12-31 00:00","actuality_duration_s":0,"operating_time_h":14678,"remaining_battery_life_y":0,"status":"OK","timestamp":"1111-11-11T11:11:11Z"} diff --git a/simulations/simulation_t1.txt b/simulations/simulation_t1.txt index abedd05..c03d926 100644 --- a/simulations/simulation_t1.txt +++ b/simulations/simulation_t1.txt @@ -122,7 +122,7 @@ telegram=|5744b40988227711101b7ab20800000265a00842658f088201659f08226589081265a0 # Test Hydrus water meter telegram telegram=|4E44A5116464646470077AED004005|2F2F01FD08300C13741100007C1300000000FC101300000000FC201300000000726C00000B3B00000002FD748713025A6800C4016D3B177F2ACC011300020000| -{"media":"water","meter":"hydrus","name":"HydrusWater","id":"64646464","total_m3":1.174,"total_tariff1_m3":0,"total_tariff2_m3":0,"max_flow_m3h":0,"flow_temperature_c":10.4,"external_temperature_c":0,"current_date":"","total_at_date_m3":0.2,"total_tariff1_at_date_m3":0,"total_tariff2_at_date_m3":0,"at_date":"2019-10-31 23:59","actuality_duration_s":0,"operating_time_h":0,"remaining_battery_life_y":13.686516,"status":"OK","timestamp":"1111-11-11T11:11:11Z"} +{"media":"water","meter":"hydrus","name":"HydrusWater","id":"64646464","total_m3":1.174,"total_tariff1_m3":0,"total_tariff2_m3":0,"max_flow_m3h":0,"flow_temperature_c":10.4,"external_temperature_c":0,"current_date":"","total_at_date_m3":0,"total_tariff1_at_date_m3":0,"total_tariff2_at_date_m3":0,"at_date":"2000-00-00 00:00","actuality_duration_s":0,"operating_time_h":0,"remaining_battery_life_y":13.686516,"status":"OK","timestamp":"1111-11-11T11:11:11Z"} |HydrusWater;64646464;1.174000;0.000000;OK;1111-11-11 11:11.11 # Test Hydrus new version water meter telegram diff --git a/src/driver_amiplus.cc b/src/driver_amiplus.cc index 9a17db6..67d1b40 100644 --- a/src/driver_amiplus.cc +++ b/src/driver_amiplus.cc @@ -88,7 +88,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("0E833C"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, AnyStorageNr, AnyTariffNr, @@ -103,7 +103,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Power, DifVifKey("0BAB3C"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, @@ -118,7 +118,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Voltage, DifVifKey("0AFDC9FC01"), VifScaling::None, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, @@ -133,7 +133,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Voltage, DifVifKey("0AFDC9FC02"), VifScaling::None, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, @@ -148,7 +148,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Voltage, DifVifKey("0AFDC9FC03"), VifScaling::None, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, @@ -177,7 +177,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("8E1003"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(1), @@ -192,7 +192,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("8E2003"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(2), @@ -208,7 +208,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("8E3003"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(3), @@ -223,7 +223,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("8E10833C"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(1), @@ -239,7 +239,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("8E20833C"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(2), @@ -255,7 +255,7 @@ MeterAmiplus::MeterAmiplus(MeterInfo &mi, DriverInfo &di) : MeterCommonImplement Quantity::Energy, DifVifKey("8E30833C"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(3), diff --git a/src/driver_apator08.cc b/src/driver_apator08.cc index 47f10ac..302ef1a 100644 --- a/src/driver_apator08.cc +++ b/src/driver_apator08.cc @@ -67,10 +67,10 @@ void MeterApator08::processContent(Telegram *t) string total; strprintf(total, "%02x%02x%02x%02x", content[0], content[1], content[2], content[3]); - vendor_values["0413"] = { 25, DVEntry(MeasurementType::Instantaneous, 0x13, 0, 0, 0, total) }; + vendor_values["0413"] = { 25, DVEntry(DifVifKey("0413"), MeasurementType::Instantaneous, 0x13, 0, 0, 0, total) }; int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &vendor_values)) + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &vendor_values)) { extractDVdouble(&vendor_values, key, &offset, &total_water_consumption_m3_); // Now divide with 3! Is this the same for all apator08 meters? Time will tell. diff --git a/src/driver_aventieshca.cc b/src/driver_aventieshca.cc index 707fc23..2fdd25d 100644 --- a/src/driver_aventieshca.cc +++ b/src/driver_aventieshca.cc @@ -96,7 +96,7 @@ MeterAventiesHCA::MeterAventiesHCA(MeterInfo &mi, DriverInfo &di) : MeterCommonI "error_flags", Quantity::Text, DifVifKey("02FD17"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_aventieswm.cc b/src/driver_aventieswm.cc index a13553d..ca9c581 100644 --- a/src/driver_aventieswm.cc +++ b/src/driver_aventieswm.cc @@ -83,7 +83,7 @@ MeterAventiesWM::MeterAventiesWM(MeterInfo &mi, DriverInfo &di) : "error_flags", Quantity::Text, DifVifKey("02FD17"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_c5isf.cc b/src/driver_c5isf.cc index 8d061fd..1f407bc 100644 --- a/src/driver_c5isf.cc +++ b/src/driver_c5isf.cc @@ -94,7 +94,7 @@ MeterC5isf::MeterC5isf(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementatio "status", Quantity::Text, DifVifKey("02FD17"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_itron.cc b/src/driver_itron.cc index 2b9b8a6..2a57514 100644 --- a/src/driver_itron.cc +++ b/src/driver_itron.cc @@ -114,7 +114,7 @@ MeterItron::MeterItron(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementatio "enhanced_id", Quantity::Text, DifVifKey("0E79"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::EnhancedIdentification, StorageNr(0), TariffNr(0), @@ -128,7 +128,7 @@ MeterItron::MeterItron(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementatio "unknown_a", Quantity::Text, DifVifKey("047F"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, @@ -154,7 +154,7 @@ MeterItron::MeterItron(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementatio "unknown_b", Quantity::Text, DifVifKey("027F"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_lse_07_17.cc b/src/driver_lse_07_17.cc index 9a43bc9..cab084c 100644 --- a/src/driver_lse_07_17.cc +++ b/src/driver_lse_07_17.cc @@ -99,7 +99,7 @@ MeterLSE_07_17::MeterLSE_07_17(MeterInfo &mi, DriverInfo &di) : "error_code", Quantity::Text, DifVifKey("02BB56"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_microclima.cc b/src/driver_microclima.cc index 15c9102..10388b9 100644 --- a/src/driver_microclima.cc +++ b/src/driver_microclima.cc @@ -186,7 +186,7 @@ MeterMicroClima::MeterMicroClima(MeterInfo &mi, DriverInfo &di) : MeterCommonImp "status", Quantity::Text, DifVifKey("01FD17"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_minomess.cc b/src/driver_minomess.cc index 4b8d98e..bfd3730 100644 --- a/src/driver_minomess.cc +++ b/src/driver_minomess.cc @@ -136,7 +136,7 @@ MeterMinomess::MeterMinomess(MeterInfo &mi, DriverInfo &di) : MeterCommonImpleme "status", Quantity::Text, DifVifKey("02FD17"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_piigth.cc b/src/driver_piigth.cc index ec4b0ea..e5fabec 100644 --- a/src/driver_piigth.cc +++ b/src/driver_piigth.cc @@ -96,7 +96,7 @@ MeterPIIGTH::MeterPIIGTH(MeterInfo &mi, DriverInfo &di) : Quantity::Temperature, DifVifKey("02FB1A"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::RelativeHumidity, StorageNr(0), TariffNr(0), @@ -223,13 +223,13 @@ void MeterPIIGTH::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_1h_c_); t->addMoreExplanation(offset, " average temperature 1h (%f C))", average_temperature_1h_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 2, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 2, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_24h_c_); t->addMoreExplanation(offset, " average temperature 24h (%f C))", average_temperature_24h_c_); diff --git a/src/driver_qwater.cc b/src/driver_qwater.cc index 9d1a198..549c35a 100644 --- a/src/driver_qwater.cc +++ b/src/driver_qwater.cc @@ -129,7 +129,7 @@ MeterQWater::MeterQWater(MeterInfo &mi, DriverInfo &di) : "error_code", Quantity::Text, DifVifKey("02BB56"), - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Any, AnyStorageNr, AnyTariffNr, diff --git a/src/driver_sharky774.cc b/src/driver_sharky774.cc index 9e13d95..f59c68e 100644 --- a/src/driver_sharky774.cc +++ b/src/driver_sharky774.cc @@ -149,7 +149,7 @@ MeterSharky774::MeterSharky774(MeterInfo &mi, DriverInfo &di) : MeterCommonImpl Quantity::Time, DifVifKey("0AA618"), VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, StorageNr(0), TariffNr(0), diff --git a/src/dvparser.cc b/src/dvparser.cc index 1f71b3a..dfd89cd 100644 --- a/src/dvparser.cc +++ b/src/dvparser.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Fredrik Öhrström (gpl-3.0-or-later) + Copyright (C) 2018-2022 Fredrik Öhrström (gpl-3.0-or-later) 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 @@ -142,7 +142,7 @@ bool parseDV(Telegram *t, // Data format is: - // DIF byte (defines how the binary data bits should be decoded and how man data bytes there are) + // DIF byte (defines how the binary data bits should be decoded and howy man data bytes there are) // Sometimes followed by one or more dife bytes, if the 0x80 high bit is set. // The last dife byte does not have the 0x80 bit set. @@ -332,7 +332,8 @@ bool parseDV(Telegram *t, string value = bin2hex(data, data_end, datalen); int offset = start_parse_here+data-data_start; (*values)[key] = { offset, - DVEntry(mt, + DVEntry(key, + mt, Vif(vif&0x7f), StorageNr(storage_nr), TariffNr(tariff), @@ -383,16 +384,17 @@ bool findKeyWithNr(MeasurementType mit, VIFRange vif_range, StorageNr storagenr, for (auto& v : *values) { - MeasurementType ty = v.second.second.type; + MeasurementType ty = v.second.second.measurement_type; Vif vi = v.second.second.vif; - StorageNr sn = v.second.second.storagenr; - TariffNr tn = v.second.second.tariff; + StorageNr sn = v.second.second.storage_nr; + TariffNr tn = v.second.second.tariff_nr; + /*debug("(dvparser) match? %s type=%s vif=%02x (%s) and storagenr=%d\n", v.first.c_str(), measurementTypeName(ty).c_str(), vi, toString(toVIFRange(vi)), storagenr, sn);*/ if (isInsideVIFRange(vi, vif_range) && - (mit == MeasurementType::Unknown || mit == ty) && + (mit == MeasurementType::Instantaneous || mit == ty) && (storagenr == AnyStorageNr || storagenr == sn) && (tariffnr == AnyTariffNr || tariffnr == tn)) { @@ -936,3 +938,18 @@ bool extractDVdate(map> *values, return ok; } + +bool FieldMatcher::matches(int index, DVEntry &dv_entry) +{ + if (match_dif_vif_key) + { + return dv_entry.dif_vif_key == dif_vif_key; + } + + return + (!match_vif_range || isInsideVIFRange(dv_entry.vif, vif_range)) && + (!match_measurement_type || dv_entry.measurement_type == measurement_type) && + (!match_storage_nr || (dv_entry.storage_nr >= storage_nr_from && dv_entry.storage_nr <= storage_nr_to)) && + (!match_tariff_nr || (dv_entry.tariff_nr >= tariff_nr_from && dv_entry.tariff_nr <= tariff_nr_to)) && + (!match_subunit_nr || (dv_entry.subunit_nr >= subunit_nr_from && dv_entry.subunit_nr <= subunit_nr_to)); +} diff --git a/src/dvparser.h b/src/dvparser.h index e7b7f9b..755d395 100644 --- a/src/dvparser.h +++ b/src/dvparser.h @@ -64,7 +64,6 @@ bool isInsideVIFRange(int i, VIFRange range); enum class MeasurementType { - Unknown, Instantaneous, Minimum, Maximum, @@ -75,7 +74,7 @@ struct DifVifKey { DifVifKey(std::string key) : key_(key) {} std::string str() { return key_; } - bool useSearchInstead() { return key_ == ""; } + bool operator==(DifVifKey &dvk) { return key_ == dvk.key_; } private: @@ -99,6 +98,8 @@ struct StorageNr StorageNr(int n) : nr_(n) {} int intValue() { return nr_; } bool operator==(StorageNr s) { return nr_ == s.nr_; } + bool operator>=(StorageNr s) { return nr_ >= s.nr_; } + bool operator<=(StorageNr s) { return nr_ <= s.nr_; } private: int nr_; @@ -111,6 +112,8 @@ struct TariffNr TariffNr(int n) : nr_(n) {} int intValue() { return nr_; } bool operator==(TariffNr s) { return nr_ == s.nr_; } + bool operator>=(TariffNr s) { return nr_ >= s.nr_; } + bool operator<=(TariffNr s) { return nr_ <= s.nr_; } private: int nr_; @@ -123,6 +126,8 @@ struct SubUnitNr SubUnitNr(int n) : nr_(n) {} int intValue() { return nr_; } bool operator==(SubUnitNr s) { return nr_ == s.nr_; } + bool operator>=(SubUnitNr s) { return nr_ >= s.nr_; } + bool operator<=(SubUnitNr s) { return nr_ <= s.nr_; } private: int nr_; @@ -142,16 +147,17 @@ static IndexNr AnyIndexNr = IndexNr(-1); struct DVEntry { - MeasurementType type {}; + DifVifKey dif_vif_key { "" }; + MeasurementType measurement_type {}; Vif vif { 0 }; - StorageNr storagenr { 0 }; - TariffNr tariff { 0 }; - SubUnitNr subunit { 0 }; + StorageNr storage_nr { 0 }; + TariffNr tariff_nr { 0 }; + SubUnitNr subunit_nr { 0 }; std::string value; DVEntry() {} - DVEntry(MeasurementType mt, Vif vi, StorageNr st, TariffNr ta, SubUnitNr su, std::string &val) : - type(mt), vif(vi), storagenr(st), tariff(ta), subunit(su), value(val) {} + DVEntry(DifVifKey dvk, MeasurementType mt, Vif vi, StorageNr st, TariffNr ta, SubUnitNr su, std::string &val) : + dif_vif_key(dvk), measurement_type(mt), vif(vi), storage_nr(st), tariff_nr(ta), subunit_nr(su), value(val) {} }; struct FieldMatcher @@ -165,20 +171,23 @@ struct FieldMatcher MeasurementType measurement_type { MeasurementType::Instantaneous }; // Match the value information range. See dvparser.h - bool match_value_information = false; - VIFRange value_information { VIFRange::None }; + bool match_vif_range = false; + VIFRange vif_range { VIFRange::None }; // Match the storage nr. bool match_storage_nr = false; - StorageNr storage_nr { 0 }; + StorageNr storage_nr_from { 0 }; + StorageNr storage_nr_to { 0 }; // Match the tariff nr. bool match_tariff_nr = false; - TariffNr tariff_nr { 0 }; + TariffNr tariff_nr_from { 0 }; + TariffNr tariff_nr_to { 0 }; // Match the subunit. bool match_subunit_nr = false; - SubUnitNr subunit_nr { 0 }; + SubUnitNr subunit_nr_from { 0 }; + SubUnitNr subunit_nr_to { 0 }; // If the telegram has multiple identical difvif entries, use entry with this index nr. // First entry has nr 1, which is the default value. @@ -188,11 +197,17 @@ struct FieldMatcher static FieldMatcher build() { return FieldMatcher(); } void set(DifVifKey k) { dif_vif_key = k; } FieldMatcher &set(MeasurementType mt) { measurement_type = mt; return *this; } - FieldMatcher &set(VIFRange vi) { value_information = vi; return *this; } - FieldMatcher &set(StorageNr s) { storage_nr = s; return *this; } - FieldMatcher &set(TariffNr t) { tariff_nr = t; return *this; } - FieldMatcher &set(SubUnitNr u) { subunit_nr = u; return *this; } + FieldMatcher &set(VIFRange v) { vif_range = v; return *this; } + FieldMatcher &set(StorageNr s) { storage_nr_from = storage_nr_to = s; return *this; } + FieldMatcher &set(StorageNr from, StorageNr to) { storage_nr_from = from; storage_nr_to = to; return *this; } + FieldMatcher &set(TariffNr s) { tariff_nr_from = tariff_nr_to = s; return *this; } + FieldMatcher &set(TariffNr from, TariffNr to) { tariff_nr_from = from; tariff_nr_to = to; return *this; } + FieldMatcher &set(SubUnitNr s) { subunit_nr_from = subunit_nr_to = s; return *this; } + FieldMatcher &set(SubUnitNr from, SubUnitNr to) { subunit_nr_from = from; subunit_nr_to = to; return *this; } + FieldMatcher &set(IndexNr i) { index_nr = i; return *this; } + + bool matches(int index, DVEntry &dv_entry); }; bool loadFormatBytesFromSignature(uint16_t format_signature, std::vector *format_bytes); diff --git a/src/meter_apator162.cc b/src/meter_apator162.cc index 4641958..121e739 100644 --- a/src/meter_apator162.cc +++ b/src/meter_apator162.cc @@ -125,7 +125,7 @@ void MeterApator162::processContent(Telegram *t) // We found the register representing the total string total; strprintf(total, "%02x%02x%02x%02x", content[i+0], content[i+1], content[i+2], content[i+3]); - vendor_values["0413"] = {i-1+t->header_size, DVEntry(MeasurementType::Instantaneous, 0x13, 0, 0, 0, total) }; + vendor_values["0413"] = {i-1+t->header_size, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x13, 0, 0, 0, total) }; int offset; extractDVdouble(&vendor_values, "0413", &offset, &total_water_consumption_m3_); total = "*** 10|"+total+" total consumption (%f m3)"; diff --git a/src/meter_cma12w.cc b/src/meter_cma12w.cc index 92c5959..7d5c693 100644 --- a/src/meter_cma12w.cc +++ b/src/meter_cma12w.cc @@ -97,13 +97,13 @@ void MeterCMa12w::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 0, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_temperature_c_); t->addMoreExplanation(offset, " current temperature (%f C)", current_temperature_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_1h_c_); t->addMoreExplanation(offset, " average temperature 1h (%f C))", average_temperature_1h_c_); diff --git a/src/meter_compact5.cc b/src/meter_compact5.cc index b43d3f4..c9d48df 100644 --- a/src/meter_compact5.cc +++ b/src/meter_compact5.cc @@ -110,7 +110,7 @@ void MeterCompact5::processContent(Telegram *t) string prevs; strprintf(prevs, "%02x%02x", prev_lo, prev_hi); int offset = t->parsed.size()+3; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; Explanation pe(offset, 2, prevs, KindOfData::CONTENT, Understanding::FULL); t->explanations.push_back(pe); t->addMoreExplanation(offset, " energy used in previous billing period (%f KWH)", prev); @@ -122,7 +122,7 @@ void MeterCompact5::processContent(Telegram *t) string currs; strprintf(currs, "%02x%02x", curr_lo, curr_hi); offset = t->parsed.size()+7; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; Explanation ce(offset, 2, currs, KindOfData::CONTENT, Understanding::FULL); t->explanations.push_back(ce); t->addMoreExplanation(offset, " energy used in current billing period (%f KWH)", curr); diff --git a/src/meter_ebzwmbe.cc b/src/meter_ebzwmbe.cc index efec481..e1718a9 100644 --- a/src/meter_ebzwmbe.cc +++ b/src/meter_ebzwmbe.cc @@ -152,7 +152,7 @@ void MeterEBZWMBE::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::EnergyWh, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::EnergyWh, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_energy_kwh_); t->addMoreExplanation(offset, " total energy (%f kwh)", total_energy_kwh_); } diff --git a/src/meter_ehzp.cc b/src/meter_ehzp.cc index e92a455..2e451b4 100644 --- a/src/meter_ehzp.cc +++ b/src/meter_ehzp.cc @@ -122,13 +122,13 @@ void MeterEHZP::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::EnergyWh, 0, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::EnergyWh, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_energy_kwh_); t->addMoreExplanation(offset, " total energy (%f kwh)", total_energy_kwh_); } - if (findKey(MeasurementType::Unknown, VIFRange::PowerW, 0, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::PowerW, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_power_kw_); t->addMoreExplanation(offset, " current power (%f kw)", current_power_kw_); diff --git a/src/meter_emerlin868.cc b/src/meter_emerlin868.cc index 17cf25d..4a0f3a9 100644 --- a/src/meter_emerlin868.cc +++ b/src/meter_emerlin868.cc @@ -73,12 +73,12 @@ void MeterEMerlin868::processContent(Telegram *t) int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &actual_total_water_consumption_m3_); t->addMoreExplanation(offset, " actual total consumption (%f m3)", actual_total_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &last_total_water_consumption_m3h_); t->addMoreExplanation(offset, " last total consumption (%f m3)", last_total_water_consumption_m3h_); } diff --git a/src/meter_esyswm.cc b/src/meter_esyswm.cc index b68f2ed..f18af74 100644 --- a/src/meter_esyswm.cc +++ b/src/meter_esyswm.cc @@ -254,22 +254,22 @@ void MeterESYSWM::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::EnergyWh, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::EnergyWh, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_energy_kwh_); t->addMoreExplanation(offset, " total energy (%f kwh)", total_energy_kwh_); } - if (findKey(MeasurementType::Unknown, VIFRange::EnergyWh, 0, 1, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::EnergyWh, 0, 1, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_energy_tariff1_kwh_); t->addMoreExplanation(offset, " total energy tariff 1 (%f kwh)", total_energy_tariff1_kwh_); } - if (findKey(MeasurementType::Unknown, VIFRange::EnergyWh, 0, 2, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::EnergyWh, 0, 2, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_energy_tariff2_kwh_); t->addMoreExplanation(offset, " total energy tariff 2 (%f kwh)", total_energy_tariff2_kwh_); } - if (findKey(MeasurementType::Unknown, VIFRange::PowerW, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::PowerW, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_power_kw_); t->addMoreExplanation(offset, " current power (%f kw)", current_power_kw_); } diff --git a/src/meter_eurisii.cc b/src/meter_eurisii.cc index ef037a7..5e3d99b 100644 --- a/src/meter_eurisii.cc +++ b/src/meter_eurisii.cc @@ -210,13 +210,13 @@ void MeterEurisII::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_consumption_hca_); t->addMoreExplanation(offset, " current consumption (%f hca)", current_consumption_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); @@ -225,7 +225,7 @@ void MeterEurisII::processContent(Telegram *t) for (int i=1; i<=17; ++i) { - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, i, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, i, 0, &key, &t->dv_entries)) { string info; strprintf(info, " consumption at set date %d (%%f hca)", i); diff --git a/src/meter_ev200.cc b/src/meter_ev200.cc index 544b31f..e3d9db0 100644 --- a/src/meter_ev200.cc +++ b/src/meter_ev200.cc @@ -73,12 +73,12 @@ void MeterEV200::processContent(Telegram *t) int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &actual_total_water_consumption_m3_); t->addMoreExplanation(offset, " actual total consumption (%f m3)", actual_total_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &last_total_water_consumption_m3h_); t->addMoreExplanation(offset, " last total consumption (%f m3)", last_total_water_consumption_m3h_); } diff --git a/src/meter_fhkvdataiv.cc b/src/meter_fhkvdataiv.cc index 90ba8fe..f889ce6 100644 --- a/src/meter_fhkvdataiv.cc +++ b/src/meter_fhkvdataiv.cc @@ -154,29 +154,29 @@ void MeterFHKVDataIV::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_consumption_hca_); t->addMoreExplanation(offset, " current consumption (%f hca)", current_consumption_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); t->addMoreExplanation(offset, " set date (%s)", set_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_hca_); t->addMoreExplanation(offset, " consumption at set date (%f hca)", consumption_at_set_date_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 8, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 8, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_8_hca_); t->addMoreExplanation(offset, " consumption at set date 8 (%f hca)", consumption_at_set_date_8_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 8, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 8, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_8_ = strdate(&date); @@ -191,7 +191,7 @@ void MeterFHKVDataIV::processContent(Telegram *t) t->addMoreExplanation(offset, " error date (%s)", error_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_flowiq2200.cc b/src/meter_flowiq2200.cc index e71bdaa..d66ecb5 100644 --- a/src/meter_flowiq2200.cc +++ b/src/meter_flowiq2200.cc @@ -332,13 +332,13 @@ void MeterFlowIQ2200::processContent(Telegram *t) t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &target_water_consumption_m3_); has_target_water_consumption_ = true; t->addMoreExplanation(offset, " target consumption (%f m3)", target_water_consumption_m3_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); target_datetime_ = strdatetime(&datetime); @@ -370,7 +370,7 @@ void MeterFlowIQ2200::processContent(Telegram *t) t->addMoreExplanation(offset, " max flow temperature (%f °C)", max_flow_temperature_c_); } - if(findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, AnyStorageNr, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, AnyStorageNr, 0, &key, &t->dv_entries)) { has_external_temperature_ = extractDVdouble(&t->dv_entries, key, &offset, &external_temperature_c_); t->addMoreExplanation(offset, " external temperature (%f °C)", external_temperature_c_); } diff --git a/src/meter_hydrodigit.cc b/src/meter_hydrodigit.cc index f42b9f8..535fd0a 100644 --- a/src/meter_hydrodigit.cc +++ b/src/meter_hydrodigit.cc @@ -68,12 +68,12 @@ void MeterHydrodigit::processContent(Telegram *t) int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); meter_datetime_ = strdatetime(&datetime); diff --git a/src/meter_lansenth.cc b/src/meter_lansenth.cc index 53f1bb0..381e55f 100644 --- a/src/meter_lansenth.cc +++ b/src/meter_lansenth.cc @@ -129,19 +129,19 @@ void MeterLansenTH::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 0, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_temperature_c_); t->addMoreExplanation(offset, " current temperature (%f C)", current_temperature_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_1h_c_); t->addMoreExplanation(offset, " average temperature 1h (%f C))", average_temperature_1h_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 2, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 2, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_24h_c_); t->addMoreExplanation(offset, " average temperature 24h (%f C))", average_temperature_24h_c_); diff --git a/src/meter_lse_08.cc b/src/meter_lse_08.cc index 0cb5f25..9246bec 100644 --- a/src/meter_lse_08.cc +++ b/src/meter_lse_08.cc @@ -98,19 +98,19 @@ void MeterLSE_08::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 8, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 8, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_hca_); t->addMoreExplanation(offset, " consumption at set date (%f hca)", consumption_at_set_date_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 8, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 8, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); t->addMoreExplanation(offset, " set date (%s)", set_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_mkradio3.cc b/src/meter_mkradio3.cc index f9eb841..e254b82 100644 --- a/src/meter_mkradio3.cc +++ b/src/meter_mkradio3.cc @@ -100,7 +100,7 @@ void MKRadio3::processContent(Telegram *t) string prev_date_str; strprintf(prev_date_str, "%04x", prev_date); uint offset = t->parsed.size() + 1; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Unknown, 0x6c, 0, 0, 0, prev_date_str) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x6c, 0, 0, 0, prev_date_str) }; t->explanations.push_back(Explanation(offset, 1, prev_date_str, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " previous date (%s)", previous_date_.c_str()); @@ -112,7 +112,7 @@ void MKRadio3::processContent(Telegram *t) string prevs; strprintf(prevs, "%02x%02x", prev_lo, prev_hi); offset = t->parsed.size()+3; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; t->explanations.push_back(Explanation(offset, 2, prevs, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " prev consumption (%f m3)", prev); @@ -125,7 +125,7 @@ void MKRadio3::processContent(Telegram *t) string current_date_str; strprintf(current_date_str, "%04x", current_date); offset = t->parsed.size() + 5; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Unknown, 0x6c, 0, 0, 0, current_date_str) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x6c, 0, 0, 0, current_date_str) }; t->explanations.push_back(Explanation(offset, 1, current_date_str, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " current date (%s)", current_date_.c_str()); @@ -137,7 +137,7 @@ void MKRadio3::processContent(Telegram *t) string currs; strprintf(currs, "%02x%02x", curr_lo, curr_hi); offset = t->parsed.size()+7; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; t->explanations.push_back(Explanation(offset, 2, currs, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " curr consumption (%f m3)", curr); diff --git a/src/meter_mkradio4.cc b/src/meter_mkradio4.cc index 360d174..d66c29e 100644 --- a/src/meter_mkradio4.cc +++ b/src/meter_mkradio4.cc @@ -83,7 +83,7 @@ void MKRadio4::processContent(Telegram *t) string prevs; strprintf(prevs, "%02x%02x", prev_lo, prev_hi); int offset = t->parsed.size()+3; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; t->explanations.push_back(Explanation(offset, 2, prevs, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " prev consumption (%f m3)", prev); @@ -94,7 +94,7 @@ void MKRadio4::processContent(Telegram *t) string currs; strprintf(currs, "%02x%02x", curr_lo, curr_hi); offset = t->parsed.size()+7; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; t->explanations.push_back(Explanation(offset, 2, currs, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " curr consumption (%f m3)", curr); diff --git a/src/meter_multical21.cc b/src/meter_multical21.cc index 1a3ae13..a03dcfe 100644 --- a/src/meter_multical21.cc +++ b/src/meter_multical21.cc @@ -301,24 +301,24 @@ void MeterMultical21::processContent(Telegram *t) t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &target_water_consumption_m3_); has_target_water_consumption_ = true; t->addMoreExplanation(offset, " target consumption (%f m3)", target_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::VolumeFlow, AnyStorageNr, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::VolumeFlow, AnyStorageNr, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &max_flow_m3h_); has_max_flow_ = true; t->addMoreExplanation(offset, " max flow (%f m3/h)", max_flow_m3h_); } - if(findKey(MeasurementType::Unknown, VIFRange::FlowTemperature, AnyStorageNr, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::FlowTemperature, AnyStorageNr, 0, &key, &t->dv_entries)) { has_flow_temperature_ = extractDVdouble(&t->dv_entries, key, &offset, &flow_temperature_c_); t->addMoreExplanation(offset, " flow temperature (%f °C)", flow_temperature_c_); } - if(findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, AnyStorageNr, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, AnyStorageNr, 0, &key, &t->dv_entries)) { has_external_temperature_ = extractDVdouble(&t->dv_entries, key, &offset, &external_temperature_c_); t->addMoreExplanation(offset, " external temperature (%f °C)", external_temperature_c_); } diff --git a/src/meter_multical302.cc b/src/meter_multical302.cc index 9c197f4..49475e7 100644 --- a/src/meter_multical302.cc +++ b/src/meter_multical302.cc @@ -181,7 +181,7 @@ void MeterMultical302::processContent(Telegram *t) t->addMoreExplanation(offset, " current power consumption (%f kW)", current_power_kw_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); target_date_ = strdatetime(&datetime); diff --git a/src/meter_multical403.cc b/src/meter_multical403.cc index 3f3509d..ffc04dc 100644 --- a/src/meter_multical403.cc +++ b/src/meter_multical403.cc @@ -167,7 +167,7 @@ void MeterMultical403::processContent(Telegram *t) t->addMoreExplanation(offset, " total volume (%f m3)", total_volume_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &volume_flow_m3h_); t->addMoreExplanation(offset, " volume flow (%f m3/h)", volume_flow_m3h_); } @@ -182,7 +182,7 @@ void MeterMultical403::processContent(Telegram *t) t->addMoreExplanation(offset, " T2 flow temperature (%f °C)", t2_temperature_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); target_date_ = strdatetime(&datetime); diff --git a/src/meter_multical602.cc b/src/meter_multical602.cc index 7982256..0d1aabb 100644 --- a/src/meter_multical602.cc +++ b/src/meter_multical602.cc @@ -243,7 +243,7 @@ void MeterMultical602::processContent(Telegram *t) t->addMoreExplanation(offset, " total volume (%f m3)", total_volume_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &volume_flow_m3h_); t->addMoreExplanation(offset, " volume flow (%f m3/h)", volume_flow_m3h_); } @@ -258,7 +258,7 @@ void MeterMultical602::processContent(Telegram *t) t->addMoreExplanation(offset, " T2 flow temperature (%f °C)", t2_temperature_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); target_date_ = strdatetime(&datetime); diff --git a/src/meter_multical603.cc b/src/meter_multical603.cc index 9f64bbc..65ecd3c 100644 --- a/src/meter_multical603.cc +++ b/src/meter_multical603.cc @@ -216,7 +216,7 @@ void MeterMultical603::processContent(Telegram *t) t->addMoreExplanation(offset, " total volume (%f m3)", total_volume_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &volume_flow_m3h_); t->addMoreExplanation(offset, " volume flow (%f m3/h)", volume_flow_m3h_); } @@ -231,7 +231,7 @@ void MeterMultical603::processContent(Telegram *t) t->addMoreExplanation(offset, " T2 flow temperature (%f °C)", t2_temperature_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); target_date_ = strdatetime(&datetime); diff --git a/src/meter_multical803.cc b/src/meter_multical803.cc index efae3f0..ab4b27b 100644 --- a/src/meter_multical803.cc +++ b/src/meter_multical803.cc @@ -256,7 +256,7 @@ void MeterMultical803::processContent(Telegram *t) t->addMoreExplanation(offset, " total volume (%f m3)", total_volume_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &volume_flow_m3h_); t->addMoreExplanation(offset, " volume flow (%f m3/h)", volume_flow_m3h_); } @@ -271,7 +271,7 @@ void MeterMultical803::processContent(Telegram *t) t->addMoreExplanation(offset, " T2 flow temperature (%f °C)", t2_temperature_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); target_date_ = strdatetime(&datetime); diff --git a/src/meter_munia.cc b/src/meter_munia.cc index 20a39b0..768eb64 100644 --- a/src/meter_munia.cc +++ b/src/meter_munia.cc @@ -88,7 +88,7 @@ void MeterMunia::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 0, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_temperature_c_); t->addMoreExplanation(offset, " current temperature (%f C)", current_temperature_c_); diff --git a/src/meter_q400.cc b/src/meter_q400.cc index 775f47a..57f16ea 100644 --- a/src/meter_q400.cc +++ b/src/meter_q400.cc @@ -208,17 +208,17 @@ void MeterQ400::processContent(Telegram *t) // Find keys common to both q400 and axioma. - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_m3_); t->addMoreExplanation(offset, " consumption at set date (%f m3)", consumption_at_set_date_m3_); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); diff --git a/src/meter_qcaloric.cc b/src/meter_qcaloric.cc index cb6d618..f7c4446 100644 --- a/src/meter_qcaloric.cc +++ b/src/meter_qcaloric.cc @@ -167,29 +167,29 @@ void MeterQCaloric::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_consumption_hca_); t->addMoreExplanation(offset, " current consumption (%f hca)", current_consumption_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); t->addMoreExplanation(offset, " set date (%s)", set_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_hca_); t->addMoreExplanation(offset, " consumption at set date (%f hca)", consumption_at_set_date_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 17, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 17, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_17_hca_); t->addMoreExplanation(offset, " consumption at set date 17 (%f hca)", consumption_at_set_date_17_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 17, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 17, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_17_ = strdate(&date); @@ -204,7 +204,7 @@ void MeterQCaloric::processContent(Telegram *t) t->addMoreExplanation(offset, " error date (%s)", error_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_qheat.cc b/src/meter_qheat.cc index ce45642..897ffb3 100644 --- a/src/meter_qheat.cc +++ b/src/meter_qheat.cc @@ -156,7 +156,7 @@ void MeterQHeat::processContent(Telegram *t) t->addMoreExplanation(offset, " last year energy consumption (%f kWh)", last_year_energy_kwh_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); last_year_date_ = strdatetime(&datetime); @@ -168,14 +168,14 @@ void MeterQHeat::processContent(Telegram *t) t->addMoreExplanation(offset, " last month energy consumption (%f kWh)", last_month_energy_kwh_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 17, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 17, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); last_month_date_ = strdatetime(&datetime); t->addMoreExplanation(offset, " last month date (%s)", last_month_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_qsmoke.cc b/src/meter_qsmoke.cc index 5e86f20..79722c5 100644 --- a/src/meter_qsmoke.cc +++ b/src/meter_qsmoke.cc @@ -326,7 +326,7 @@ void MeterQSmoke::processContent(Telegram *t) t->addMoreExplanation(offset, " error date (%s)", error_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_rfmamb.cc b/src/meter_rfmamb.cc index 7e6ac6e..0d08554 100644 --- a/src/meter_rfmamb.cc +++ b/src/meter_rfmamb.cc @@ -296,13 +296,13 @@ void MeterRfmAmb::processContent(Telegram *t) minimum_temperature_24h_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_1h_c_); t->addMoreExplanation(offset, " average temperature 1h (%f C)", average_temperature_1h_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::ExternalTemperature, 2, 0, &key, &t->dv_entries)) + if (findKey(MeasurementType::Instantaneous, VIFRange::ExternalTemperature, 2, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &average_temperature_24h_c_); t->addMoreExplanation(offset, " average temperature 24h (%f C)", average_temperature_24h_c_); @@ -367,7 +367,7 @@ void MeterRfmAmb::processContent(Telegram *t) t->addMoreExplanation(offset, " relative humidity 24h (%f RH)", average_relative_humidity_24h_rh_); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_rfmtx1.cc b/src/meter_rfmtx1.cc index ce9dc18..b2a12a5 100644 --- a/src/meter_rfmtx1.cc +++ b/src/meter_rfmtx1.cc @@ -108,12 +108,12 @@ void MeterRfmTX1::processContent(Telegram *t) return; } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); meter_datetime_ = strdatetime(&datetime); diff --git a/src/meter_sensostar.cc b/src/meter_sensostar.cc index e2f21e1..a72ae8b 100644 --- a/src/meter_sensostar.cc +++ b/src/meter_sensostar.cc @@ -96,7 +96,7 @@ void MeterSensostar::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); meter_timestamp_ = strdatetime(&datetime); diff --git a/src/meter_sontex868.cc b/src/meter_sontex868.cc index add4841..74fc238 100644 --- a/src/meter_sontex868.cc +++ b/src/meter_sontex868.cc @@ -235,19 +235,19 @@ void MeterSontex868::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_consumption_hca_); t->addMoreExplanation(offset, " current consumption (%f hca)", current_consumption_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); t->addMoreExplanation(offset, " set date (%s)", set_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_hca_); t->addMoreExplanation(offset, " consumption at set date (%f hca)", consumption_at_set_date_hca_); } @@ -272,7 +272,7 @@ void MeterSontex868::processContent(Telegram *t) t->addMoreExplanation(offset, " max temperature previous period (%f °C)", max_temp_previous_period_c_); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_topaseskr.cc b/src/meter_topaseskr.cc index 58330ae..4b3ef21 100644 --- a/src/meter_topaseskr.cc +++ b/src/meter_topaseskr.cc @@ -127,15 +127,15 @@ void MeterTopasEsKr::processContent(Telegram *t) int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } - if(findKey(MeasurementType::Unknown, VIFRange::FlowTemperature, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::FlowTemperature, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &flow_temperature_); t->addMoreExplanation(offset, " water temperature (%f °C)", flow_temperature_); } - if(findKey(MeasurementType::Unknown, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::VolumeFlow, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_flow_m3h_); t->addMoreExplanation(offset, " current flow (%f m3/h)", current_flow_m3h_); } diff --git a/src/meter_ultrimis.cc b/src/meter_ultrimis.cc index e5ee7dd..1f84857 100644 --- a/src/meter_ultrimis.cc +++ b/src/meter_ultrimis.cc @@ -120,7 +120,7 @@ void MeterUltrimis::processContent(Telegram *t) int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } @@ -128,7 +128,7 @@ void MeterUltrimis::processContent(Telegram *t) extractDVuint24(&t->dv_entries, "03FD17", &offset, &info_codes_); t->addMoreExplanation(offset, " info codes (%s)", status().c_str()); - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &target_water_consumption_m3_); t->addMoreExplanation(offset, " target consumption (%f m3)", target_water_consumption_m3_); } diff --git a/src/meter_vario451.cc b/src/meter_vario451.cc index dd6c87d..e5cd4e1 100644 --- a/src/meter_vario451.cc +++ b/src/meter_vario451.cc @@ -109,7 +109,7 @@ void MeterVario451::processContent(Telegram *t) string prevs; strprintf(prevs, "%02x%02x", prev_lo, prev_hi); int offset = t->parsed.size()+3; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, prevs) }; t->explanations.push_back(Explanation(offset, 2, prevs, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " energy used in previous billing period (%f GJ)", prev); @@ -120,7 +120,7 @@ void MeterVario451::processContent(Telegram *t) string currs; strprintf(currs, "%02x%02x", curr_lo, curr_hi); offset = t->parsed.size()+7; - vendor_values["0215"] = { offset, DVEntry(MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; + vendor_values["0215"] = { offset, DVEntry(DifVifKey("0215"), MeasurementType::Instantaneous, 0x15, 0, 0, 0, currs) }; t->explanations.push_back(Explanation(offset, 2, currs, KindOfData::CONTENT, Understanding::FULL)); t->addMoreExplanation(offset, " energy used in current billing period (%f GJ)", curr); diff --git a/src/meter_waterstarm.cc b/src/meter_waterstarm.cc index d0fd4f7..3fe532e 100644 --- a/src/meter_waterstarm.cc +++ b/src/meter_waterstarm.cc @@ -139,14 +139,14 @@ void MeterWaterstarM::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); meter_timestamp_ = strdatetime(&datetime); t->addMoreExplanation(offset, " at date (%s)", meter_timestamp_.c_str()); } - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } diff --git a/src/meter_weh_07.cc b/src/meter_weh_07.cc index b841633..eb5dde0 100644 --- a/src/meter_weh_07.cc +++ b/src/meter_weh_07.cc @@ -63,7 +63,7 @@ void MeterWEH_07::processContent(Telegram *t) int offset; string key; - if(findKey(MeasurementType::Unknown, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { + if(findKey(MeasurementType::Instantaneous, VIFRange::Volume, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &total_water_consumption_m3_); t->addMoreExplanation(offset, " total consumption (%f m3)", total_water_consumption_m3_); } diff --git a/src/meter_whe46x.cc b/src/meter_whe46x.cc index 9034030..ab0c954 100644 --- a/src/meter_whe46x.cc +++ b/src/meter_whe46x.cc @@ -164,29 +164,29 @@ void MeterWhe46x::processContent(Telegram *t) // This heat cost allocator cannot even be bothered to send the HCA data according // to the wmbus protocol....Blech..... I suppose the HCA data is hidden // in the variable string vendor string at the end. Sigh. - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_consumption_hca_); t->addMoreExplanation(offset, " current consumption (%f hca)", current_consumption_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); t->addMoreExplanation(offset, " set date (%s)", set_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_hca_); t->addMoreExplanation(offset, " consumption at set date (%f hca)", consumption_at_set_date_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 17, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 17, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_17_hca_); t->addMoreExplanation(offset, " consumption at set date 17 (%f hca)", consumption_at_set_date_17_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 17, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 17, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_17_ = strdate(&date); @@ -201,7 +201,7 @@ void MeterWhe46x::processContent(Telegram *t) t->addMoreExplanation(offset, " error date (%s)", error_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meter_whe5x.cc b/src/meter_whe5x.cc index 245c387..8f2c048 100644 --- a/src/meter_whe5x.cc +++ b/src/meter_whe5x.cc @@ -112,24 +112,24 @@ void MeterWhe5x::processContent(Telegram *t) int offset; string key; - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 0, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, ¤t_consumption_hca_); t->addMoreExplanation(offset, " current consumption (%f hca)", current_consumption_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::Date, 1, 0, &key, &t->dv_entries)) { struct tm date; extractDVdate(&t->dv_entries, key, &offset, &date); set_date_ = strdate(&date); t->addMoreExplanation(offset, " set date (%s)", set_date_.c_str()); } - if (findKey(MeasurementType::Unknown, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::HeatCostAllocation, 1, 0, &key, &t->dv_entries)) { extractDVdouble(&t->dv_entries, key, &offset, &consumption_at_set_date_hca_); t->addMoreExplanation(offset, " consumption at set date (%f hca)", consumption_at_set_date_hca_); } - if (findKey(MeasurementType::Unknown, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { + if (findKey(MeasurementType::Instantaneous, VIFRange::DateTime, 0, 0, &key, &t->dv_entries)) { struct tm datetime; extractDVdate(&t->dv_entries, key, &offset, &datetime); device_date_time_ = strdatetime(&datetime); diff --git a/src/meters.cc b/src/meters.cc index d176526..3bfd47c 100644 --- a/src/meters.cc +++ b/src/meters.cc @@ -781,7 +781,7 @@ void MeterCommonImplementation::addPrint(string vname, Quantity vquantity, defaultUnitForQuantity(vquantity), NoDifVifKey, VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, AnyStorageNr, AnyTariffNr, @@ -809,7 +809,7 @@ void MeterCommonImplementation::addPrint(string vname, Quantity vquantity, Unit unit, NoDifVifKey, VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, AnyStorageNr, AnyTariffNr, @@ -835,7 +835,7 @@ void MeterCommonImplementation::addPrint(string vname, Quantity vquantity, defaultUnitForQuantity(vquantity), NoDifVifKey, VifScaling::Auto, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::None, AnyStorageNr, AnyTariffNr, @@ -910,7 +910,7 @@ void MeterCommonImplementation::addNumericField( defaultUnitForQuantity(vquantity), DifVifKey(""), VifScaling::None, - MeasurementType::Unknown, + MeasurementType::Instantaneous, VIFRange::Volume, StorageNr(0), TariffNr(0), diff --git a/src/meters_common_implementation.h b/src/meters_common_implementation.h index 4d05965..02fd901 100644 --- a/src/meters_common_implementation.h +++ b/src/meters_common_implementation.h @@ -83,7 +83,7 @@ protected: #define SET_FUNC(varname,to_unit) {[=](Unit from_unit, double d){varname = convert(d, from_unit, to_unit);}} #define GET_FUNC(varname,from_unit) {[=](Unit to_unit){return convert(varname, from_unit, to_unit);}} -#define LOOKUP_FIELD(DVKEY) NoDifVifKey,VifScaling::Auto,MeasurementType::Unknown,VIFRange::Any,AnyStorageNr,AnyTariffNr,IndexNr(1) +#define LOOKUP_FIELD(DVKEY) NoDifVifKey,VifScaling::Auto,MeasurementType::Instantaneous,VIFRange::Any,AnyStorageNr,AnyTariffNr,IndexNr(1) #define FIND_FIELD(TYPE,INFO) NoDifVifKey,VifScaling::Auto,TYPE,INFO,StorageNr(0),TariffNr(0),IndexNr(1) #define FIND_FIELD_S(TYPE,INFO,STORAGE) NoDifVifKey,VifScaling::Auto,TYPE,INFO,STORAGE,TariffNr(0),IndexNr(1) #define FIND_FIELD_ST(TYPE,INFO,STORAGE,TARIFF) NoDifVifKey,VifScaling::Auto,,TYPE,INFO,STORAGE,TARIFF,IndexNr(1) diff --git a/src/wmbus.cc b/src/wmbus.cc index f4d2405..652ffc4 100644 --- a/src/wmbus.cc +++ b/src/wmbus.cc @@ -3863,7 +3863,6 @@ string measurementTypeName(MeasurementType mt) case MeasurementType::Maximum: return "maximum"; case MeasurementType::Minimum: return "minimum"; case MeasurementType::AtError: return "aterror"; - case MeasurementType::Unknown: return "unknown"; } assert(0); }