Add energy MWh VIF 7b00-7b01 and improve kamheat driver.

pull/1146/head
Fredrik Öhrström 2024-01-15 15:29:43 +01:00
rodzic 295053ebd6
commit 866df740ad
6 zmienionych plików z 33 dodań i 15 usunięć

Wyświetl plik

@ -159,7 +159,7 @@ namespace
VifScaling::None,
FieldMatcher::build()
.set(DifVifKey("04FFA015")),
Unit::FACTOR
Unit::NUMBER
);
addNumericFieldWithExtractor(
@ -170,7 +170,7 @@ namespace
VifScaling::None,
FieldMatcher::build()
.set(DifVifKey("04FFA115")),
Unit::FACTOR
Unit::NUMBER
);
addNumericFieldWithExtractor(
@ -181,7 +181,7 @@ namespace
VifScaling::None,
FieldMatcher::build()
.set(DifVifKey("04FFA215")),
Unit::FACTOR
Unit::NUMBER
);
addNumericFieldWithExtractor(
@ -192,7 +192,7 @@ namespace
VifScaling::None,
FieldMatcher::build()
.set(DifVifKey("04FFA315")),
Unit::FACTOR
Unit::NUMBER
);
addStringFieldWithExtractorAndLookup(
@ -1569,7 +1569,7 @@ namespace
addNumericFieldWithExtractor(
"vts",
"Number of VT:s.",
"Number of voltaget transformers VT:s.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,
@ -1578,7 +1578,7 @@ namespace
addNumericFieldWithExtractor(
"vt_primary",
"Primary VT.",
"Primary voltage transformer VT.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,
@ -1588,7 +1588,7 @@ namespace
addNumericFieldWithExtractor(
"vt_secondary",
"Secondary VT.",
"Secondary voltage transformer VT.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,
@ -1598,7 +1598,7 @@ namespace
addNumericFieldWithExtractor(
"cts",
"Number of CT:s.",
"Number of current transformers CT:s.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,
@ -1607,7 +1607,7 @@ namespace
addNumericFieldWithExtractor(
"ct_primary",
"Primary CT.",
"Primary current transformer CT.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,
@ -1617,7 +1617,7 @@ namespace
addNumericFieldWithExtractor(
"ct_secondary",
"Secondary CT.",
"Secondary current transformer CT.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,
@ -1627,7 +1627,7 @@ namespace
addNumericFieldWithExtractor(
"vt_connection_type",
"VT connection type.",
"Voltage transformer connection type.",
DEFAULT_PRINT_PROPERTIES,
Quantity::Dimensionless,
VifScaling::None,

Wyświetl plik

@ -50,8 +50,8 @@ namespace
di.addDetection(MANUFACTURER_KAM, 0x0c, 0x34); // 403
di.addDetection(MANUFACTURER_KAM, 0x0d, 0x34); // 403
di.addDetection(MANUFACTURER_KAM, 0x04, 0x1c); // 602
di.addDetection(MANUFACTURER_KAM, 0x04, 0x35); // 603
di.addDetection(MANUFACTURER_KAM, 0x0c, 0x35); // 603
di.addDetection(MANUFACTURER_KAM, 0x04, 0x35); // 603
di.addDetection(MANUFACTURER_KAM, 0x0c, 0x35); // 603
di.addDetection(MANUFACTURER_KAM, 0x04, 0x39); // 803
di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr<Meter>(new Driver(mi, di)); });
@ -59,7 +59,8 @@ namespace
Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di)
{
addOptionalCommonFields("on_time_h");
addOptionalCommonFields("fabrication_no,meter_datetime,on_time_h,on_time_at_error_h");
addOptionalFlowRelatedFields("flow_return_temperature_difference_c");
// Technical Description Multical 603 page 116 section 7.7.2 Information code types on serial communication.
addStringFieldWithExtractorAndLookup(
@ -348,3 +349,8 @@ namespace
// telegram=|40442D2C0650216219048D2083A4E1162306FF78_040F2C3F000004FF07DBA40D0004FF08860B0D000414BA33140002FD170000043B620000000259A21E025DFA1B|
// {"media":"heat","meter":"kamheat","name":"Kamstrup_402_wmbus","id":"62215006","forward_energy_m3c":894171,"return_energy_m3c":854918,"t1_temperature_c":78.42,"t2_temperature_c":71.62,"total_energy_consumption_kwh":44922.222222,"total_volume_m3":13239.62,"volume_flow_m3h":0.098,"status":"OK","timestamp":"1111-11-11T11:11:11Z"}
// |Kamstrup_402_wmbus;62215006;44922.222222;13239.62;OK;1111-11-11 11:11.11
// Test: Kamstrup_MC603_mbus kamheat 32323232 NOKEY
// telegram=|68c9c96808e672323232322d2c35041900000004fB006083000004ff074006010004ff08299400000416984e010084401400000000848040140000000004225043000034221c0000000259c91f025d4f1102617a0e042e30020000142e65030000043c24050000143ce308000004ff2200000000046d2e2B0f3144fB00007d000044ff07Bdf9000044ff08308d00004416B73f0100c4401400000000c480401400000000542ed9020000543ce8090000426c013102ff1a011B0c783032858404ff16e5841e0004ff17c1d5B400a516|
// {"fabrication_no": "84853230", "flow_return_temperature_difference_c": 37.06, "forward_energy_m3c": 67136, "id": "32323232", "max_flow_m3h": 22.75, "max_power_kw": 869, "media": "heat", "meter": "kamheat", "meter_datetime": "2024-01-15 11:46", "name": "Kamstrup_MC603_mbus", "on_time_at_error_h": 28, "on_time_h": 17232, "power_kw": 560, "return_energy_m3c": 37929, "status": "OK", "t1_temperature_c": 81.37, "t2_temperature_c": 44.31, "target_date": "2024-01-01", "target_energy_kwh": 3200000, "target_volume_m3": 81847, "timestamp": "1111-11-11T11:11:11Z", "total_energy_consumption_kwh": 3363200, "total_volume_m3": 85656, "volume_flow_m3h": 13.16}
// |Kamstrup_MC603_mbus;32323232;3363200;85656;OK;1111-11-11 11:11.11

Wyświetl plik

@ -123,7 +123,8 @@ bool isInsideVIFRange(Vif vif, VIFRange vif_range)
{
return
isInsideVIFRange(vif, VIFRange::EnergyWh) ||
isInsideVIFRange(vif, VIFRange::EnergyMJ);
isInsideVIFRange(vif, VIFRange::EnergyMJ) ||
isInsideVIFRange(vif, VIFRange::EnergyMWh);
}
if (vif_range == VIFRange::AnyPowerVIF)
{

Wyświetl plik

@ -47,6 +47,7 @@
X(ActualityDuration,0x74,0x77, Quantity::Time, Unit::Hour) \
X(FabricationNo,0x78,0x78, Quantity::Text, Unit::TXT) \
X(EnhancedIdentification,0x79,0x79, Quantity::Text, Unit::TXT) \
X(EnergyMWh,0x7B00,0x7B01, Quantity::Energy, Unit::KWH) \
X(RelativeHumidity,0x7B1A,0x7B1B, Quantity::RH, Unit::RH) \
X(AccessNumber,0x7D08,0x7D08, Quantity::Counter, Unit::COUNTER) \
X(Medium,0x7D09,0x7D09, Quantity::Text, Unit::TXT) \

Wyświetl plik

@ -2652,6 +2652,9 @@ string vifType(int vif)
case 0x7E: return "Any VIF";
case 0x7F: return "Manufacturer specific";
case 0x7B00: return "Active Energy 0.1 MWh";
case 0x7B01: return "Active Energy 1 MWh";
case 0x7B1A: return "Relative humidity 0.1%";
case 0x7B1B: return "Relative humidity 1%";
@ -2826,6 +2829,12 @@ double vifScale(int vif)
case 0x76: return 1.0; // Actuality duration hours
case 0x77: return (1.0/24.0); // Actuality duration days
// Active energy 0.1 or 1 MWh normalize to 100 KWh or 1000 KWh
// 7b00 33632 -> 3363.2 MWh -> 3363200 KWh
// 7b01 33632 -> 33632 MWh -> 33632000 KWh
case 0x7b00:
case 0x7b01: { double exp = (vif & 0x1)+2; return pow(10.0, -exp); }
// relative humidity is a dimensionless value.
case 0x7b1a: return 10.0; // Relative humidity 0.1 %
case 0x7b1b: return 1.0; // Relative humidity 1 %

Wyświetl plik

@ -438,6 +438,7 @@ PowerW
ActualityDuration
FabricationNo
EnhancedIdentification
EnergyMWh
RelativeHumidity
AccessNumber
Medium