diff --git a/cube/User/Inc/mbusParserExt.h b/cube/User/Inc/mbusParserExt.h index 93be2d0..2d45c0b 100644 --- a/cube/User/Inc/mbusParserExt.h +++ b/cube/User/Inc/mbusParserExt.h @@ -3,11 +3,14 @@ #include +#include +#include typedef struct { char name[32]; char unit[16]; int8_t exponent; + bool found; } parsedVIB_t; parsedVIB_t parseVIB(mbus_value_information_block vib); diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index d55485c..57057cb 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -180,6 +181,12 @@ static void parseAndPrintFrame(t_mbusCommHandle *localMbusCommHandle) { coloredMsg(LOG_YELLOW, true, "mbc papf [%d] parsed VIB N: %s, U: %s, E: %d", localMbusCommHandle->requestId, parsedVIB.name, parsedVIB.unit, parsedVIB.exponent); + if (parsedVIB.found) { + uint8_t value = strtol(mbus_data_record_value(record), NULL, 10); + float weightedValue = ((float) value) * powf(10.0, ((float) parsedVIB.exponent)); + coloredMsg(LOG_YELLOW, true, "mbc papf [%d] result: %s is %d %s", + localMbusCommHandle->requestId, parsedVIB.name, weightedValue, parsedVIB.unit); + } } } } diff --git a/cube/User/Src/mbusParserExt.c b/cube/User/Src/mbusParserExt.c index 8fd5ffd..a5678fc 100644 --- a/cube/User/Src/mbusParserExt.c +++ b/cube/User/Src/mbusParserExt.c @@ -3,10 +3,12 @@ #include #include +#include +#include static parsedVIB_t parseVIB_FB(mbus_value_information_block vib) { - parsedVIB_t parsedVIB = { .name = "FB unknown", .unit = "?", .exponent = 1 }; + parsedVIB_t parsedVIB = { .name = "FB unknown", .unit = "?", .exponent = 1, .found = false }; coloredMsg(LOG_RED, true, "mpe pvd_fb unknown vife 0x%02x", vib.vife[0]); @@ -14,16 +16,18 @@ static parsedVIB_t parseVIB_FB(mbus_value_information_block vib) { } static parsedVIB_t parseVIB_FD(mbus_value_information_block vib) { - parsedVIB_t parsedVIB = { .name = "FD unknown", .unit = "?", .exponent = 1 }; + parsedVIB_t parsedVIB = { .name = "FD unknown", .unit = "?", .exponent = 1, .found = false }; if ((vib.vife[0] & 0b01110000) == 0b01000000) { strcpy(parsedVIB.name, "Voltage"); strcpy(parsedVIB.unit, "V"); parsedVIB.exponent = (vib.vife[0] & 0b01111) - 9; + parsedVIB.found = true; } else if ((vib.vife[0] & 0b01110000) == 0b01010000) { strcpy(parsedVIB.name, "Current"); strcpy(parsedVIB.unit, "A"); parsedVIB.exponent = (vib.vife[0] & 0b01111) - 12; + parsedVIB.found = true; } else { coloredMsg(LOG_RED, true, "mpe pvd_fd unknown vife 0x%02x", vib.vife[0]); } @@ -32,16 +36,18 @@ static parsedVIB_t parseVIB_FD(mbus_value_information_block vib) { } static parsedVIB_t parseVIB_default(mbus_value_information_block vib) { - parsedVIB_t parsedVIB = { .name = "default unknown", .unit = "?", .exponent = 1 }; + parsedVIB_t parsedVIB = { .name = "default unknown", .unit = "?", .exponent = 1, .found = false }; if ((vib.vif & 0b01111000) == 0b00000000) { strcpy(parsedVIB.name, "Energy"); strcpy(parsedVIB.unit, "Wh"); parsedVIB.exponent = (vib.vif & 0b0111) - 3; + parsedVIB.found = true; } else if ((vib.vif & 0b01111000) == 0b00101000) { strcpy(parsedVIB.name, "Power"); strcpy(parsedVIB.unit, "W"); parsedVIB.exponent = (vib.vif & 0b0111) - 3; + parsedVIB.found = true; } else { coloredMsg(LOG_RED, true, "mpe pvd unknown vif 0x%02x", vib.vif); }