diff --git a/src/driver_supercom587.cc b/src/driver_supercom587.cc index 11a30db..6c1478e 100644 --- a/src/driver_supercom587.cc +++ b/src/driver_supercom587.cc @@ -17,51 +17,50 @@ #include"meters_common_implementation.h" -using namespace std; - -struct MeterSupercom587 : public virtual MeterCommonImplementation +namespace { - MeterSupercom587(MeterInfo &mi, DriverInfo &di); + struct Driver : public virtual MeterCommonImplementation + { + Driver(MeterInfo &mi, DriverInfo &di); + }; -private: + static bool ok = registerDriver([](DriverInfo&di) + { + di.setName("supercom587"); + di.setDefaultFields("name,id,total_m3,timestamp"); + di.setMeterType(MeterType::WaterMeter); + di.addLinkMode(LinkMode::T1); + di.addDetection(MANUFACTURER_SON, 0x06, 0x3c); + di.addDetection(MANUFACTURER_SON, 0x07, 0x3c); + di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr(new Driver(mi, di)); }); + }); - double total_water_consumption_m3_ {}; -}; + Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) + { + addOptionalCommonFields("software_version"); + addOptionalFlowRelatedFields("total_m3"); -static bool ok = registerDriver([](DriverInfo&di) -{ - di.setName("supercom587"); - di.setMeterType(MeterType::WaterMeter); - di.addLinkMode(LinkMode::T1); - di.addDetection(MANUFACTURER_SON, 0x06, 0x3c); - di.addDetection(MANUFACTURER_SON, 0x07, 0x3c); - di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr(new MeterSupercom587(mi, di)); }); -}); - -MeterSupercom587::MeterSupercom587(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di) -{ - addNumericFieldWithExtractor( - "total", - Quantity::Volume, - NoDifVifKey, - VifScaling::Auto, - MeasurementType::Instantaneous, - VIFRange::Volume, - StorageNr(0), - TariffNr(0), - IndexNr(1), - PrintProperty::JSON | PrintProperty::FIELD | PrintProperty::IMPORTANT, - "The total water consumption recorded by this meter.", - SET_FUNC(total_water_consumption_m3_, Unit::M3), - GET_FUNC(total_water_consumption_m3_, Unit::M3)); + addStringFieldWithExtractorAndLookup( + "status", + "Status of meter.", + PrintProperty::JSON | PrintProperty::IMPORTANT | PrintProperty::STATUS | PrintProperty::JOIN_TPL_STATUS, + FieldMatcher::build() + .set(MeasurementType::Instantaneous) + .set(VIFRange::ErrorFlags), + Translate::Lookup() + .add(Translate::Rule("ERROR_FLAGS", Translate::Type::BitToString) + .set(MaskBits(0x000f)) + .set(DefaultMessage("OK")) + )); + } } // Test: MyWarmWater supercom587 12345678 NOKEY -// telegram=|A244EE4D785634123C067A8F000000|0C1348550000426CE1F14C130000000082046C21298C0413330000008D04931E3A3CFE3300000033000000330000003300000033000000330000003300000033000000330000003300000033000000330000004300000034180000046D0D0B5C2B03FD6C5E150082206C5C290BFD0F0200018C4079678885238310FD3100000082106C01018110FD610002FD66020002FD170000| -// {"media":"warm water","meter":"supercom587","name":"MyWarmWater","id":"12345678","total_m3":5.548,"timestamp":"1111-11-11T11:11:11Z"} -// |MyWarmWater;12345678;5.548000;1111-11-11 11:11.11 +// telegram=|A244EE4D785634123C067A8F000000_0C1348550000426CE1F14C130000000082046C21298C0413330000008D04931E3A3CFE3300000033000000330000003300000033000000330000003300000033000000330000003300000033000000330000004300000034180000046D0D0B5C2B03FD6C5E150082206C5C290BFD0F0200018C4079678885238310FD3100000082106C01018110FD610002FD66020002FD170000| +// {"media":"warm water","meter":"supercom587","name":"MyWarmWater","id":"12345678","total_m3":5.548,"software_version":"010002","status":"OK","timestamp":"1111-11-11T11:11:11Z"} +// |MyWarmWater;12345678;5.548;1111-11-11 11:11.11 // Test: MyColdWater supercom587 11111111 NOKEY -// telegram=|A244EE4D111111113C077AAC000000|0C1389490000426CE1F14C130000000082046C21298C0413010000008D04931E3A3CFE0100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000001600000031130000046D0A0C5C2B03FD6C60150082206C5C290BFD0F0200018C4079629885238310FD3100000082106C01018110FD610002FD66020002FD170000| -// {"media":"water","meter":"supercom587","name":"MyColdWater","id":"11111111","total_m3":4.989,"timestamp":"1111-11-11T11:11:11Z"} -// |MyColdWater;11111111;4.989000;1111-11-11 11:11.11 +// telegram=|A244EE4D111111113C077AAC000000_0C1389490000426CE1F14C130000000082046C21298C0413010000008D04931E3A3CFE0100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000001600000031130000046D0A0C5C2B03FD6C60150082206C5C290BFD0F0200018C4079629885238310FD3100000082106C01018110FD610002FD66020002FD170000| +// {"media":"water","meter":"supercom587","name":"MyColdWater","id":"11111111","total_m3":4.989,"software_version":"010002","status":"OK","timestamp":"1111-11-11T11:11:11Z"} +// |MyColdWater;11111111;4.989;1111-11-11 11:11.11