diff --git a/.github/workflows/close_stale_issues.yml b/.github/workflows/close_stale_issues.yml index bfc7652..a37df4a 100644 --- a/.github/workflows/close_stale_issues.yml +++ b/.github/workflows/close_stale_issues.yml @@ -17,6 +17,6 @@ jobs: days-before-stale: 60 days-before-close: 30 operations-per-run: 1000 - exempt-issue-labels: 'enhancement, Work in progress, Planned' + exempt-issue-labels: 'enhancement, work in progress, planned, keep open' days-before-pr-stale: -1 days-before-pr-close: -1 diff --git a/src/driver_cma12w.cc b/src/driver_cma12w.cc index 9664973..8c4288d 100644 --- a/src/driver_cma12w.cc +++ b/src/driver_cma12w.cc @@ -39,7 +39,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("software_version"); + addOptionalLibraryFields("software_version"); addStringField( "status", diff --git a/src/driver_dynamic.cc b/src/driver_dynamic.cc index 9149635..a95f74f 100644 --- a/src/driver_dynamic.cc +++ b/src/driver_dynamic.cc @@ -237,7 +237,7 @@ XMQProceed DriverDynamic::add_detect(XMQDoc *doc, XMQNode *detect, DriverInfo *d XMQProceed DriverDynamic::add_use(XMQDoc *doc, XMQNode *field, DriverDynamic *dd) { string name = xmqGetString(doc, field, "."); - dd->addOptionalCommonFields(name); + dd->addOptionalLibraryFields(name); return XMQ_CONTINUE; } diff --git a/src/driver_ehzp.cc b/src/driver_ehzp.cc index a6c3920..0b5cb48 100644 --- a/src/driver_ehzp.cc +++ b/src/driver_ehzp.cc @@ -40,7 +40,7 @@ namespace "Meter status. Includes both meter error field and tpl status field.", PrintProperty::STATUS | PrintProperty::INCLUDE_TPL_STATUS); - addOptionalCommonFields("on_time_h"); + addOptionalLibraryFields("on_time_h"); addNumericFieldWithExtractor( "total_energy_consumption", diff --git a/src/driver_enercal.cc b/src/driver_enercal.cc index b2eab2a..4faae22 100644 --- a/src/driver_enercal.cc +++ b/src/driver_enercal.cc @@ -237,7 +237,7 @@ namespace .set(StorageNr(1)) ); - addOptionalCommonFields("operating_time_h,on_time_h,meter_datetime"); + addOptionalLibraryFields("operating_time_h,on_time_h,meter_datetime"); } } diff --git a/src/driver_esyswm.cc b/src/driver_esyswm.cc index d6fc009..46dbf37 100644 --- a/src/driver_esyswm.cc +++ b/src/driver_esyswm.cc @@ -37,7 +37,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("fabrication_no,enhanced_id,location"); + addOptionalLibraryFields("fabrication_no,enhanced_id,location"); addStringFieldWithExtractor( "location_hex", diff --git a/src/driver_evo868.cc b/src/driver_evo868.cc index a17c2c8..b36d67a 100644 --- a/src/driver_evo868.cc +++ b/src/driver_evo868.cc @@ -59,8 +59,8 @@ namespace }, }); - addOptionalCommonFields("fabrication_no"); - addOptionalFlowRelatedFields("total_m3"); + addOptionalLibraryFields("fabrication_no"); + addOptionalLibraryFields("total_m3"); addNumericFieldWithExtractor( "consumption_at_set_date", diff --git a/src/driver_gwfwater.cc b/src/driver_gwfwater.cc index dc11df1..c4c429b 100644 --- a/src/driver_gwfwater.cc +++ b/src/driver_gwfwater.cc @@ -38,8 +38,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("actuality_duration_s"); - addOptionalFlowRelatedFields("total_m3,target_m3,target_date"); + addOptionalLibraryFields("actuality_duration_s"); + addOptionalLibraryFields("total_m3,target_m3,target_date"); addStringField( "status", diff --git a/src/driver_hydrus.cc b/src/driver_hydrus.cc index f1ddd25..e88e42c 100644 --- a/src/driver_hydrus.cc +++ b/src/driver_hydrus.cc @@ -44,8 +44,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("operating_time_h,actuality_duration_s,meter_datetime,customer"); - addOptionalFlowRelatedFields("flow_temperature_c,external_temperature_c"); + addOptionalLibraryFields("operating_time_h,actuality_duration_s,meter_datetime,customer"); + addOptionalLibraryFields("flow_temperature_c,external_temperature_c"); addStringField( "status", diff --git a/src/driver_iem3000.cc b/src/driver_iem3000.cc index 01dbe20..d520a07 100644 --- a/src/driver_iem3000.cc +++ b/src/driver_iem3000.cc @@ -38,7 +38,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("firmware_version,manufacturer,meter_datetime,model_version"); + addOptionalLibraryFields("firmware_version,manufacturer,meter_datetime,model_version"); addStringField( "status", diff --git a/src/driver_itron.cc b/src/driver_itron.cc index ab05696..38cfc3b 100644 --- a/src/driver_itron.cc +++ b/src/driver_itron.cc @@ -45,8 +45,8 @@ namespace addLinkMode(LinkMode::T1); - addOptionalCommonFields("enhanced_id,meter_datetime"); - addOptionalFlowRelatedFields("total_m3,total_backward_m3,volume_flow_m3h"); + addOptionalLibraryFields("enhanced_id,meter_datetime"); + addOptionalLibraryFields("total_m3,total_backward_m3,volume_flow_m3h"); addStringFieldWithExtractorAndLookup( "status", diff --git a/src/driver_iwmtx5.cc b/src/driver_iwmtx5.cc index 7dd6391..68677fc 100644 --- a/src/driver_iwmtx5.cc +++ b/src/driver_iwmtx5.cc @@ -38,8 +38,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_datetime"); - addOptionalFlowRelatedFields("total_m3"); + addOptionalLibraryFields("meter_datetime"); + addOptionalLibraryFields("total_m3"); addStringField( "status", diff --git a/src/driver_kamheat.cc b/src/driver_kamheat.cc index 94a12bf..8c77357 100644 --- a/src/driver_kamheat.cc +++ b/src/driver_kamheat.cc @@ -59,8 +59,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("fabrication_no,meter_datetime,on_time_h,on_time_at_error_h"); - addOptionalFlowRelatedFields("flow_return_temperature_difference_c"); + addOptionalLibraryFields("fabrication_no,meter_datetime,on_time_h,on_time_at_error_h"); + addOptionalLibraryFields("flow_return_temperature_difference_c"); // Technical Description Multical 603 page 116 section 7.7.2 Information code types on serial communication. addStringFieldWithExtractorAndLookup( diff --git a/src/driver_lansenth.cc b/src/driver_lansenth.cc index c2dd701..a14e38f 100644 --- a/src/driver_lansenth.cc +++ b/src/driver_lansenth.cc @@ -36,7 +36,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("on_time_h"); + addOptionalLibraryFields("on_time_h"); setMfctTPLStatusBits( Translate::Lookup() .add(Translate::Rule("TPL_STS", Translate::Type::BitToString) diff --git a/src/driver_microclima.cc b/src/driver_microclima.cc index 668ac9a..070e00b 100644 --- a/src/driver_microclima.cc +++ b/src/driver_microclima.cc @@ -36,8 +36,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_datetime,model_version,parameter_set"); - addOptionalFlowRelatedFields("flow_temperature_c,return_temperature_c"); + addOptionalLibraryFields("meter_datetime,model_version,parameter_set"); + addOptionalLibraryFields("flow_temperature_c,return_temperature_c"); addStringFieldWithExtractorAndLookup( "status", diff --git a/src/driver_minomess.cc b/src/driver_minomess.cc index 55ab9a6..6a73d1c 100644 --- a/src/driver_minomess.cc +++ b/src/driver_minomess.cc @@ -39,8 +39,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_date,fabrication_no,operating_time_h,on_time_h,on_time_at_error_h,meter_datetime"); - addOptionalFlowRelatedFields("total_m3,total_backward_m3,volume_flow_m3h"); + addOptionalLibraryFields("meter_date,fabrication_no,operating_time_h,on_time_h,on_time_at_error_h,meter_datetime"); + addOptionalLibraryFields("total_m3,total_backward_m3,volume_flow_m3h"); /* If the meter is recently commissioned, the target water consumption value is bogus. The bits store 0xffffffff. Should we deal with this? Now a very large value is printed in the json. diff --git a/src/driver_piigth.cc b/src/driver_piigth.cc index 8273ca9..4fcfd9a 100644 --- a/src/driver_piigth.cc +++ b/src/driver_piigth.cc @@ -36,7 +36,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("fabrication_no,software_version"); + addOptionalLibraryFields("fabrication_no,software_version"); addStringField( "status", diff --git a/src/driver_pollucomf.cc b/src/driver_pollucomf.cc index 64259eb..d76a24e 100644 --- a/src/driver_pollucomf.cc +++ b/src/driver_pollucomf.cc @@ -179,7 +179,7 @@ namespace .set(StorageNr(1)) ); - addOptionalCommonFields("operating_time_h,on_time_h,on_time_at_error_h,meter_datetime"); + addOptionalLibraryFields("operating_time_h,on_time_h,on_time_at_error_h,meter_datetime"); } } diff --git a/src/driver_q400.cc b/src/driver_q400.cc index 8870f6f..0699924 100644 --- a/src/driver_q400.cc +++ b/src/driver_q400.cc @@ -36,8 +36,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_datetime"); - addOptionalFlowRelatedFields("total_m3,total_forward_m3,total_backward_m3,flow_temperature_c,volume_flow_m3h"); + addOptionalLibraryFields("meter_datetime"); + addOptionalLibraryFields("total_m3,total_forward_m3,total_backward_m3,flow_temperature_c,volume_flow_m3h"); addStringField( "status", diff --git a/src/driver_qualcosonic.cc b/src/driver_qualcosonic.cc index 599d1dd..96d4aef 100644 --- a/src/driver_qualcosonic.cc +++ b/src/driver_qualcosonic.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2022 Fredrik Öhrström (gpl-3.0-or-later) + Copyright (C) 2022-2024 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 @@ -38,8 +38,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("fabrication_no,operating_time_h,on_time_h,meter_datetime,meter_datetime_at_error"); - addOptionalFlowRelatedFields("total_m3,flow_temperature_c,return_temperature_c,flow_return_temperature_difference_c,volume_flow_m3h"); + addOptionalLibraryFields("fabrication_no,on_time_h,operating_time_h,on_time_h,meter_datetime,meter_datetime_at_error"); + addOptionalLibraryFields("total_m3,flow_temperature_c,return_temperature_c,flow_return_temperature_difference_c,volume_flow_m3h"); addStringFieldWithExtractorAndLookup( "status", @@ -135,6 +135,17 @@ namespace .set(StorageNr(16)) ); + addNumericFieldWithExtractor( + "battery", + "Percentage of battery remaining.", + DEFAULT_PRINT_PROPERTIES, + Quantity::Dimensionless, + VifScaling::None, + FieldMatcher::build() + .set(DifVifKey("01FD74")), + Unit::PERCENTAGE + ); + } } @@ -152,3 +163,8 @@ namespace // telegram=|9A440907859449980C0D7A8C000000_046D3201E122346D0000010134FD17000000000420BB776802042490776802048E3BF2190000048E3C00000000041329860100042B6A010000043B0B0000000259F615025D1E0B0261D80A0C788594499884086D3B17FF21820859BC1382085D720B840824915D680284088E3BED19000084088E3C00000000840813028601008408BE5800000000027F00AD| // {"media":"heat/cooling load","meter":"qualcosonic","name":"qualcoe4long","id":"98499485","fabrication_no":"98499485","operating_time_h":11222.44,"on_time_h":11222.451944,"meter_datetime":"2023-02-01 01:50","meter_datetime_at_error":"2000-01-01 00:00","total_m3":99.881,"flow_temperature_c":56.22,"return_temperature_c":28.46,"flow_return_temperature_difference_c":27.76,"volume_flow_m3h":0.011,"status":"OK","total_heat_energy_kwh":1845,"total_cooling_energy_kwh":0,"power_kw":0.362,"target_datetime":"2023-01-31 23:59","target_heat_energy_kwh":1843.611111,"target_cooling_energy_kwh":0,"timestamp":"1111-11-11T11:11:11Z"} // |qualcoe4long;98499485;OK;1845;0;0.362;2023-01-31 23:59;1843.611111;0;1111-11-11 11:11.11 + +// Test: M qualcosonic 05829163 NOKEY +// telegram=|544409076391820510077ABF100000046D2A0DC62C0420E80F430104130000000004933B0000000004933C00000000023B00000259F0D8446D0000C12C44130000000044933B0000000044933C0000000001FD7461| +// {"flow_temperature_c": 555.36,"id": "05829163","media": "water","meter": "qualcosonic","meter_datetime": "2022-12-06 13:42","name": "M","on_time_h": 5881.166667,"status": "TEMPORARY_ERROR","timestamp": "1111-11-11T11:11:11Z","total_m3": 0,"volume_flow_m3h": 0,"battery_pct": 97} +// |M;05829163;TEMPORARY_ERROR;null;null;null;null;null;null;1111-11-11 11:11.11 diff --git a/src/driver_qwater.cc b/src/driver_qwater.cc index acaf5aa..9f2141b 100644 --- a/src/driver_qwater.cc +++ b/src/driver_qwater.cc @@ -52,8 +52,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_datetime"); - addOptionalFlowRelatedFields("total_m3"); + addOptionalLibraryFields("meter_datetime"); + addOptionalLibraryFields("total_m3"); addStringField( "status", diff --git a/src/driver_sharky.cc b/src/driver_sharky.cc index c40e6e8..a61ff5b 100644 --- a/src/driver_sharky.cc +++ b/src/driver_sharky.cc @@ -41,7 +41,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("operating_time_h"); + addOptionalLibraryFields("operating_time_h"); addStringFieldWithExtractorAndLookup( "status", diff --git a/src/driver_supercom587.cc b/src/driver_supercom587.cc index 9e5af8f..dfa29ef 100644 --- a/src/driver_supercom587.cc +++ b/src/driver_supercom587.cc @@ -37,8 +37,8 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("software_version"); - addOptionalFlowRelatedFields("total_m3"); + addOptionalLibraryFields("software_version"); + addOptionalLibraryFields("total_m3"); addStringFieldWithExtractorAndLookup( "status", diff --git a/src/driver_topaseskr.cc b/src/driver_topaseskr.cc index 3f6de28..bfafc8c 100644 --- a/src/driver_topaseskr.cc +++ b/src/driver_topaseskr.cc @@ -60,7 +60,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalFlowRelatedFields("total_m3,access_counter"); + addOptionalLibraryFields("total_m3,access_counter"); addNumericFieldWithExtractor( "temperature", diff --git a/src/driver_ultraheat.cc b/src/driver_ultraheat.cc index 4678373..676efc6 100644 --- a/src/driver_ultraheat.cc +++ b/src/driver_ultraheat.cc @@ -35,7 +35,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_datetime,fabrication_no"); + addOptionalLibraryFields("meter_datetime,fabrication_no"); addNumericFieldWithExtractor( "heat", diff --git a/src/driver_unismart.cc b/src/driver_unismart.cc index 141c5b6..f378ded 100644 --- a/src/driver_unismart.cc +++ b/src/driver_unismart.cc @@ -37,7 +37,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("fabrication_no"); + addOptionalLibraryFields("fabrication_no"); addStringFieldWithExtractorAndLookup( "status", diff --git a/src/driver_watertech.cc b/src/driver_watertech.cc index 8114647..e5b4039 100644 --- a/src/driver_watertech.cc +++ b/src/driver_watertech.cc @@ -36,7 +36,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("software_version,meter_datetime"); + addOptionalLibraryFields("software_version,meter_datetime"); addStringFieldWithExtractorAndLookup( "status", diff --git a/src/driver_wme5.cc b/src/driver_wme5.cc index c513cd1..3b47a8b 100644 --- a/src/driver_wme5.cc +++ b/src/driver_wme5.cc @@ -39,7 +39,7 @@ namespace Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) { - addOptionalCommonFields("meter_datetime,model_version"); + addOptionalLibraryFields("meter_datetime,model_version"); addNumericField( "total", diff --git a/src/generated_database.cc b/src/generated_database.cc index ce58562..1faf253 100644 --- a/src/generated_database.cc +++ b/src/generated_database.cc @@ -15,12 +15,12 @@ along with this program. If not, see . */ -// Generated 2024-02-12_00:51 +// Generated 2024-02-12_01:46 BuiltinDriver builtins_[] = { - { "elster", "driver{name=elster meter_type=GasMeter default_fields=name,id,total_m3,timestamp detect{mvt=ELS,81,03}use=actuality_duration_s field{name=total quantity=Volume match{measurement_type=Instantaneous vif_range=Volume}about{de='Der Gesamtwasserverbrauch.'en='The total water consumption.'fr='''La consommation totale d'eau.'''sv='Den totala vattenförbrukningen.'}}test{args='Gas elster 05105025 NOKEY'telegram=3644A511640010253837722550100593158103E70020052F2F_0374E602000C137034220302FD74EE0F2F2F2F2F2F2F2F2F2F2F2F2F2F2F json='{\"media\":\"gas\",\"meter\":\"elster\",\"name\":\"Gas\",\"id\":\"05105025\",\"actuality_duration_s\":742,\"total_m3\":3223.47,\"timestamp\":\"1111-11-11T11:11:11Z\"}'fields='Gas;05105025;3223.47;1111-11-11 11:11.11'}}", false }, - { "iperl", "driver{name=iperl meter_type=WaterMeter default_fields=name,id,total_m3,max_flow_m3h,timestamp detect{mvt=SEN,68,06 mvt=SEN,68,07 mvt=SEN,7c,07}field{name=total quantity=Volume match{measurement_type=Instantaneous vif_range=Volume}about{de='Der Gesamtwasserverbrauch.'en='The total water consumption.'fr='''La consommation totale d'eau.'''sv='Den totala vattenförbrukningen.'}}field{name=max_flow quantity=Flow match{measurement_type=Instantaneous vif_range=VolumeFlow}about{en='The maximum flow recorded during previous period.'}}test{args='MoreWater iperl 12345699 NOKEY'coment='Test iPerl T1 telegram, that after decryption, has 2f2f markers.'telegram=1E44AE4C9956341268077A36001000_2F2F0413181E0000023B00002F2F2F2F json='{\"media\":\"water\",\"meter\":\"iperl\",\"name\":\"MoreWater\",\"id\":\"12345699\",\"total_m3\":7.704,\"max_flow_m3h\":0,\"timestamp\":\"1111-11-11T11:11:11Z\"}'fields='MoreWater;12345699;7.704;0;1111-11-11 11:11.11'}test{args='WaterWater iperl 33225544 NOKEY'comment='Test iPerl T1 telegram not encrypted, which has no 2f2f markers.'telegram=1844AE4C4455223368077A55000000_041389E20100023B0000 json='{\"media\":\"water\",\"meter\":\"iperl\",\"name\":\"WaterWater\",\"id\":\"33225544\",\"total_m3\":123.529,\"max_flow_m3h\":0,\"timestamp\":\"1111-11-11T11:11:11Z\"}'fields='WaterWater;33225544;123.529;0;1111-11-11 11:11.11'}}", false }, + { "elster", "driver{name=elster meter_type=GasMeter default_fields=name,id,total_m3,timestamp detect{mvt=ELS,81,03}use=actuality_duration_s field{name=total quantity=Volume match{measurement_type=Instantaneous vif_range=Volume}about{de='Der Gesamtwasserverbrauch.'en='The total water consumption.'fr='''La consommation totale d'eau.'''sv='Den totala vattenförbrukningen.'}}}", false }, + { "iperl", "driver{name=iperl meter_type=WaterMeter default_fields=name,id,total_m3,max_flow_m3h,timestamp detect{mvt=SEN,68,06 mvt=SEN,68,07 mvt=SEN,7c,07}field{name=total quantity=Volume match{measurement_type=Instantaneous vif_range=Volume}about{de='Der Gesamtwasserverbrauch.'en='The total water consumption.'fr='''La consommation totale d'eau.'''sv='Den totala vattenförbrukningen.'}}field{name=max_flow quantity=Flow match{measurement_type=Instantaneous vif_range=VolumeFlow}about{en='The maximum flow recorded during previous period.'}}}", false }, }; MapToDriver builtins_mvts_[] = diff --git a/src/meters.cc b/src/meters.cc index 84d196c..2bb5a3c 100644 --- a/src/meters.cc +++ b/src/meters.cc @@ -2692,7 +2692,7 @@ void checkFieldsEmpty(set &fields, string name) } } -void MeterCommonImplementation::addOptionalCommonFields(string field_names) +void MeterCommonImplementation::addOptionalLibraryFields(string field_names) { set fields = splitStringIntoSet(field_names, ','); @@ -2923,13 +2923,6 @@ void MeterCommonImplementation::addOptionalCommonFields(string field_names) ); } - checkFieldsEmpty(fields, name()); -} - -void MeterCommonImplementation::addOptionalFlowRelatedFields(string field_names) -{ - set fields = splitStringIntoSet(field_names, ','); - if (checkIf(fields,"total_m3")) { addNumericFieldWithExtractor( @@ -3087,12 +3080,7 @@ void MeterCommonImplementation::addOptionalFlowRelatedFields(string field_names) .set(MeasurementType::Instantaneous) .set(VIFRange::AccessNumber) ); - } -} - -void MeterCommonImplementation::addHCARelatedFields(string field_names) -{ - set fields = splitStringIntoSet(field_names, ','); + } if (checkIf(fields,"consumption_hca")) { diff --git a/src/meters_common_implementation.h b/src/meters_common_implementation.h index 1765959..79ea2a5 100644 --- a/src/meters_common_implementation.h +++ b/src/meters_common_implementation.h @@ -204,9 +204,7 @@ protected: std::string decodeTPLStatusByte(uchar sts); - void addOptionalCommonFields(string fields); - void addOptionalFlowRelatedFields(string fields); - void addHCARelatedFields(string fields); + void addOptionalLibraryFields(string fields); vector &selectedFields() { return selected_fields_; } void setSelectedFields(vector &f) { selected_fields_ = f; } diff --git a/src/units.h b/src/units.h index 356645c..35670a6 100644 --- a/src/units.h +++ b/src/units.h @@ -121,6 +121,7 @@ LIST_OF_QUANTITIES X(COUNTER,counter,"counter",Dimensionless,"counter") \ X(FACTOR,factor,"factor",Dimensionless,"factor") \ X(NUMBER,nr,"number",Dimensionless,"number") \ + X(PERCENTAGE,pct,"percentage",Dimensionless,"percentage") \ enum class Unit { diff --git a/tests/generated_tests.xmq b/tests/generated_tests.xmq index 31fe854..27a0639 100644 --- a/tests/generated_tests.xmq +++ b/tests/generated_tests.xmq @@ -1,4 +1,4 @@ -//2024-02-12_00:51 +// Generated 2024-02-12_08:58 test { args = 'Gas elster 05105025 NOKEY' telegram = 3644A511640010253837722550100593158103E70020052F2F_0374E602000C137034220302FD74EE0F2F2F2F2F2F2F2F2F2F2F2F2F2F2F