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