diff --git a/Makefile b/Makefile index 2053be1..f448b94 100644 --- a/Makefile +++ b/Makefile @@ -455,8 +455,8 @@ collect_copyrights: 3rdparty/xmq/build/default/release/xmq: $(wildcard 3rdparty/xmq/src/main/c/* 3rdparty/xmq/src/main/c/parts/*) @mkdir -p 3rdparty - @(cd 3rdparty; git clone https://github.com/libxmq/xmq.git; cd xmq; ./configure) - @if [ "$(cat build/default/spec.mk | grep CC)" = "CC:=gcc" ]; then (cd 3rdparty/xmq; make) ; else rm -f $@ ; mkdir -p $$(dirname $@); touch $@ ; echo "Could not build xmq." ; fi + @(cd 3rdparty; git clone --depth 1 https://github.com/libxmq/xmq.git; cd xmq; ./configure) + @if [ "$$(cat 3rdparty/xmq/build/default/spec.mk | grep CC)" = "CC:=gcc" ]; then (cd 3rdparty/xmq; make) ; else rm -f $@ ; mkdir -p $$(dirname $@); touch $@ ; echo "Could not build xmq." ; fi build/xmq: 3rdparty/xmq/build/default/release/xmq @cp $< $@ diff --git a/src/driver_dynamic.cc b/src/driver_dynamic.cc index 22e3c7d..9149635 100644 --- a/src/driver_dynamic.cc +++ b/src/driver_dynamic.cc @@ -114,6 +114,14 @@ DriverDynamic::DriverDynamic(MeterInfo &mi, DriverInfo &di) : di.name().str().c_str(), fileName().c_str()); + try + { + xmqForeach(doc, NULL, "/driver/use", (XMQNodeCallback)add_use, this); + } + catch (...) + { + } + try { xmqForeach(doc, NULL, "/driver/field", (XMQNodeCallback)add_field, this); @@ -226,6 +234,13 @@ XMQProceed DriverDynamic::add_detect(XMQDoc *doc, XMQNode *detect, DriverInfo *d return XMQ_CONTINUE; } +XMQProceed DriverDynamic::add_use(XMQDoc *doc, XMQNode *field, DriverDynamic *dd) +{ + string name = xmqGetString(doc, field, "."); + dd->addOptionalCommonFields(name); + return XMQ_CONTINUE; +} + XMQProceed DriverDynamic::add_field(XMQDoc *doc, XMQNode *field, DriverDynamic *dd) { // The field name must be supplied without a unit ie total (not total_m3) since units are managed by wmbusmeters. diff --git a/src/driver_dynamic.h b/src/driver_dynamic.h index 83f8668..cc72acb 100644 --- a/src/driver_dynamic.h +++ b/src/driver_dynamic.h @@ -26,6 +26,7 @@ struct DriverDynamic : public virtual MeterCommonImplementation ~DriverDynamic(); static bool load(DriverInfo *di, const string &name, const char *content); static XMQProceed add_detect(XMQDoc *doc, XMQNode *detect, DriverInfo *di); + static XMQProceed add_use(XMQDoc *doc, XMQNode *field, DriverDynamic *dd); static XMQProceed add_field(XMQDoc *doc, XMQNode *field, DriverDynamic *dd); static XMQProceed add_match(XMQDoc *doc, XMQNode *match, DriverDynamic *dd); diff --git a/src/generated_database.cc b/src/generated_database.cc index f967763..ce58562 100644 --- a/src/generated_database.cc +++ b/src/generated_database.cc @@ -15,11 +15,11 @@ along with this program. If not, see . */ -// Generated 2024-02-11_23:16 +// Generated 2024-02-12_00:51 BuiltinDriver builtins_[] = { - { "elster", "driver{name=elster meter_type=GasMeter default_fields=name,id,total_m3,timestamp detect{mvt=ELS,81,03}field{name=total quantity=Volume match{measurement_type=Instantaneous vif_range=Volume}}test{args='Gas elster 05105025 NOKEY'telegram=3644A511640010253837722550100593158103E70020052F2F_0374E602000C137034220302FD74EE0F2F2F2F2F2F2F2F2F2F2F2F2F2F2F json='{\"media\":\"gas\",\"meter\":\"elster\",\"name\":\"Gas\",\"id\":\"05105025\",\"total_m3\":3223.47,\"timestamp\":\"1111-11-11T11:11:11Z\"}'fields='Gas;05105025;3223.47;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.'}}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 }, }; diff --git a/tests/generated_tests.xmq b/tests/generated_tests.xmq index 047b14c..31fe854 100644 --- a/tests/generated_tests.xmq +++ b/tests/generated_tests.xmq @@ -1,8 +1,8 @@ -//2024-02-11_23:16 +//2024-02-12_00:51 test { args = 'Gas elster 05105025 NOKEY' telegram = 3644A511640010253837722550100593158103E70020052F2F_0374E602000C137034220302FD74EE0F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - json = '{"media":"gas","meter":"elster","name":"Gas","id":"05105025","total_m3":3223.47,"timestamp":"1111-11-11T11:11:11Z"}' + 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' } test { diff --git a/tests/testit.sh b/tests/testit.sh index 89b0f6b..175a695 100755 --- a/tests/testit.sh +++ b/tests/testit.sh @@ -48,7 +48,7 @@ fi if [ "$OK" = "true" ] then - echo "OK: $ARGS" + echo "OK: db test $(echo "$ARGS" | cut -f 1,2 -d ' ')" else echo "ERROR: $ARGS $TELEGRAM" fi