diff --git a/src/driver_dynamic.cc b/src/driver_dynamic.cc index a95f74f..618efaa 100644 --- a/src/driver_dynamic.cc +++ b/src/driver_dynamic.cc @@ -237,7 +237,14 @@ 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->addOptionalLibraryFields(name); + bool ok = dd->addOptionalLibraryFields(name); + if (!ok) + { + warning("(driver) error in %s, unknown library field: %s \n", + dd->fileName().c_str(), + name.c_str()); + } + return XMQ_CONTINUE; } diff --git a/src/meters.cc b/src/meters.cc index 2bb5a3c..3ec4e6b 100644 --- a/src/meters.cc +++ b/src/meters.cc @@ -2679,7 +2679,7 @@ bool checkIf(set &fields, const char *s) return false; } -void checkFieldsEmpty(set &fields, string name) +bool checkFieldsEmpty(set &fields, string driver_name) { if (fields.size() > 0) { @@ -2687,12 +2687,14 @@ void checkFieldsEmpty(set &fields, string name) for (auto &s : fields) { info += s+" "; } warning("(meter) when adding common fields to driver %s, these fields were not found: %s\n", - name.c_str(), + driver_name.c_str(), info.c_str()); + return false; } + return true; } -void MeterCommonImplementation::addOptionalLibraryFields(string field_names) +bool MeterCommonImplementation::addOptionalLibraryFields(string field_names) { set fields = splitStringIntoSet(field_names, ','); @@ -3095,6 +3097,12 @@ void MeterCommonImplementation::addOptionalLibraryFields(string field_names) .set(VIFRange::HeatCostAllocation) ); } + + if (!checkFieldsEmpty(fields, name())) + { + return false; + } + return true; } const char *toString(VifScaling s) diff --git a/src/meters_common_implementation.h b/src/meters_common_implementation.h index 79ea2a5..c1c87cd 100644 --- a/src/meters_common_implementation.h +++ b/src/meters_common_implementation.h @@ -204,7 +204,7 @@ protected: std::string decodeTPLStatusByte(uchar sts); - void addOptionalLibraryFields(string fields); + bool addOptionalLibraryFields(string fields); vector &selectedFields() { return selected_fields_; } void setSelectedFields(vector &f) { selected_fields_ = f; } diff --git a/src/wmbus_rtlwmbus.cc b/src/wmbus_rtlwmbus.cc index a6ce02a..13e8d51 100644 --- a/src/wmbus_rtlwmbus.cc +++ b/src/wmbus_rtlwmbus.cc @@ -168,7 +168,7 @@ shared_ptr openRTLWMBUS(Detected detected, args.push_back("-h"); invokeShellCaptureOutput(rtl_wmbus, { "-h" }, {}, &out, true); debug("(rtlwmbus) help %s\n", out.c_str()); - if (out.find("-f exit if flow") != string::npos) + if (out.find("-f exit") != string::npos) { add_f = " -f"; }