kopia lustrzana https://github.com/weetmuts/wmbusmeters
Add iem3000 driver.
rodzic
c08bf05521
commit
cddcc9ae26
2
Makefile
2
Makefile
|
@ -192,7 +192,7 @@ ifeq ($(DRIVER),)
|
|||
DRIVER_OBJS:=$(wildcard src/meter_*.cc) $(wildcard src/driver_*.cc)
|
||||
else
|
||||
$(info Building a single driver $(DRIVER))
|
||||
DRIVER_OBJS:=src/driver_auto.cc src/driver_unknown.cc $(wildcard src/meter_*.cc) src/driver_$(DRIVER).cc
|
||||
DRIVER_OBJS:=src/driver_auto.cc src/driver_unknown.cc src/driver_dynamic.cc $(wildcard src/meter_*.cc) src/driver_$(DRIVER).cc
|
||||
endif
|
||||
DRIVER_OBJS:=$(patsubst src/%.cc,$(BUILD)/%.o,$(DRIVER_OBJS))
|
||||
|
||||
|
|
|
@ -468,8 +468,8 @@ namespace
|
|||
);
|
||||
|
||||
addNumericFieldWithExtractor(
|
||||
"voltage_l3_l2",
|
||||
"Instantaneous voltage between L3 and L2.",
|
||||
"voltage_l3_l1",
|
||||
"Instantaneous voltage between L3 and L1.",
|
||||
DEFAULT_PRINT_PROPERTIES,
|
||||
Quantity::Voltage,
|
||||
VifScaling::AutoSigned,
|
||||
|
|
|
@ -101,6 +101,12 @@ DriverDynamic::DriverDynamic(MeterInfo &mi, DriverInfo &di) :
|
|||
catch (...)
|
||||
{
|
||||
}
|
||||
|
||||
xmqFreeDoc(doc);
|
||||
}
|
||||
|
||||
DriverDynamic::~DriverDynamic()
|
||||
{
|
||||
}
|
||||
|
||||
XMQProceed DriverDynamic::add_detect(XMQDoc *doc, XMQNode *detect, DriverInfo *di)
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
struct DriverDynamic : public virtual MeterCommonImplementation
|
||||
{
|
||||
DriverDynamic(MeterInfo &mi, DriverInfo &di);
|
||||
~DriverDynamic();
|
||||
static bool load(DriverInfo *di, const string &name);
|
||||
static XMQProceed add_detect(XMQDoc *doc, XMQNode *detect, DriverInfo *di);
|
||||
static XMQProceed add_field(XMQDoc *doc, XMQNode *field, DriverDynamic *dd);
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -256,6 +256,16 @@ bool parseDV(Telegram *t,
|
|||
t->addExplanationAndIncrementPos(data, datalen, KindOfData::CONTENT, Understanding::NONE, "%02X manufacturer specific data %s", dif, value.c_str());
|
||||
break;
|
||||
}
|
||||
if (dif == 0x1f)
|
||||
{
|
||||
DEBUG_PARSER("(dvparser) reached dif %02x more records in next telegram.\n", dif);
|
||||
datalen = std::distance(data,data_end);
|
||||
string value = bin2hex(data+1, data_end, datalen-1);
|
||||
t->mfct_0f_index = 1+std::distance(data_start, data);
|
||||
assert(t->mfct_0f_index >= 0);
|
||||
t->addExplanationAndIncrementPos(data, datalen, KindOfData::CONTENT, Understanding::FULL, "%02X more data in next telegram %s", dif, value.c_str());
|
||||
break;
|
||||
}
|
||||
DEBUG_PARSER("(dvparser) reached unknown dif %02x treating remaining data as manufacturer specific, parsing is done.\n", dif);
|
||||
datalen = std::distance(data,data_end);
|
||||
string value = bin2hex(data+1, data_end, datalen-1);
|
||||
|
|
|
@ -49,6 +49,8 @@
|
|||
X(EnhancedIdentification,0x79,0x79, Quantity::Text, Unit::TXT) \
|
||||
X(RelativeHumidity,0x7B1A,0x7B1B, Quantity::RH, Unit::RH) \
|
||||
X(AccessNumber,0x7D08,0x7D08, Quantity::Counter, Unit::COUNTER) \
|
||||
X(Medium,0x7D09,0x7D09, Quantity::Text, Unit::TXT) \
|
||||
X(Manufacturer,0x7D0A,0x7D0A, Quantity::Text, Unit::TXT) \
|
||||
X(ParameterSet,0x7D0B,0x7D0B, Quantity::Text, Unit::TXT) \
|
||||
X(ModelVersion,0x7D0C,0x7D0C, Quantity::Text, Unit::TXT) \
|
||||
X(HardwareVersion,0x7D0D,0x7D0D, Quantity::Text, Unit::TXT) \
|
||||
|
|
|
@ -2491,6 +2491,8 @@ bool FieldInfo::extractString(Meter *m, Telegram *t, DVEntry *dve)
|
|||
matcher_.vif_range == VIFRange::FabricationNo ||
|
||||
matcher_.vif_range == VIFRange::HardwareVersion ||
|
||||
matcher_.vif_range == VIFRange::FirmwareVersion ||
|
||||
matcher_.vif_range == VIFRange::Medium ||
|
||||
matcher_.vif_range == VIFRange::Manufacturer ||
|
||||
matcher_.vif_range == VIFRange::ModelVersion ||
|
||||
matcher_.vif_range == VIFRange::SoftwareVersion ||
|
||||
matcher_.vif_range == VIFRange::Customer ||
|
||||
|
@ -2686,6 +2688,18 @@ void MeterCommonImplementation::addOptionalCommonFields(string field_names)
|
|||
);
|
||||
}
|
||||
|
||||
if (checkIf(fields,"manufacturer"))
|
||||
{
|
||||
addStringFieldWithExtractor(
|
||||
"manufacturer",
|
||||
"Meter manufacturer.",
|
||||
DEFAULT_PRINT_PROPERTIES,
|
||||
FieldMatcher::build()
|
||||
.set(MeasurementType::Instantaneous)
|
||||
.set(VIFRange::Manufacturer)
|
||||
);
|
||||
}
|
||||
|
||||
if (checkIf(fields,"model_version"))
|
||||
{
|
||||
addStringFieldWithExtractor(
|
||||
|
@ -2698,6 +2712,18 @@ void MeterCommonImplementation::addOptionalCommonFields(string field_names)
|
|||
);
|
||||
}
|
||||
|
||||
if (checkIf(fields,"firmware_version"))
|
||||
{
|
||||
addStringFieldWithExtractor(
|
||||
"firmware_version",
|
||||
"Meter firmware version.",
|
||||
DEFAULT_PRINT_PROPERTIES,
|
||||
FieldMatcher::build()
|
||||
.set(MeasurementType::Instantaneous)
|
||||
.set(VIFRange::FirmwareVersion)
|
||||
);
|
||||
}
|
||||
|
||||
if (checkIf(fields,"parameter_set"))
|
||||
{
|
||||
addStringFieldWithExtractor(
|
||||
|
|
Ładowanie…
Reference in New Issue