67 lines
1.9 KiB
C
67 lines
1.9 KiB
C
#include <mbus/mbus-protocol.h>
|
|
#include <mbusParserExt.h>
|
|
#include <logger.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
static parsedVIB_t parseVIB_FB(mbus_value_information_block vib) {
|
|
parsedVIB_t parsedVIB = { .name = "FB unknown", .unit = "?", .exponent = 1 };
|
|
|
|
coloredMsg(LOG_RED, true, "mpe pvd_fb unknown vife 0x%02x", vib.vife[0]);
|
|
|
|
return parsedVIB;
|
|
}
|
|
|
|
static parsedVIB_t parseVIB_FD(mbus_value_information_block vib) {
|
|
parsedVIB_t parsedVIB = { .name = "FD unknown", .unit = "?", .exponent = 1 };
|
|
|
|
if ((vib.vife[0] & 0b01110000) == 0b01000000) {
|
|
strcpy(parsedVIB.name, "Voltage");
|
|
strcpy(parsedVIB.unit, "V");
|
|
parsedVIB.exponent = (vib.vife[0] & 0b01111) - 9;
|
|
} else if ((vib.vife[0] & 0b01110000) == 0b01010000) {
|
|
strcpy(parsedVIB.name, "Current");
|
|
strcpy(parsedVIB.unit, "A");
|
|
parsedVIB.exponent = (vib.vife[0] & 0b01111) - 12;
|
|
} else {
|
|
coloredMsg(LOG_RED, true, "mpe pvd_fd unknown vife 0x%02x", vib.vife[0]);
|
|
}
|
|
|
|
return parsedVIB;
|
|
}
|
|
|
|
static parsedVIB_t parseVIB_default(mbus_value_information_block vib) {
|
|
parsedVIB_t parsedVIB = { .name = "default unknown", .unit = "?", .exponent = 1 };
|
|
|
|
if ((vib.vif & 0b01111000) == 0b00000000) {
|
|
strcpy(parsedVIB.name, "Energy");
|
|
strcpy(parsedVIB.unit, "Wh");
|
|
parsedVIB.exponent = (vib.vif & 0b0111) - 3;
|
|
} else if ((vib.vif & 0b01111000) == 0b00101000) {
|
|
strcpy(parsedVIB.name, "Power");
|
|
strcpy(parsedVIB.unit, "W");
|
|
parsedVIB.exponent = (vib.vif & 0b0111) - 3;
|
|
} else {
|
|
coloredMsg(LOG_RED, true, "mpe pvd unknown vif 0x%02x", vib.vif);
|
|
}
|
|
|
|
return parsedVIB;
|
|
}
|
|
|
|
|
|
parsedVIB_t parseVIB(mbus_value_information_block vib) {
|
|
parsedVIB_t parsedVIB;
|
|
|
|
if (vib.vif == 0xfb) {
|
|
parsedVIB = parseVIB_FB(vib);
|
|
} else if (vib.vif == 0xfd) {
|
|
parsedVIB = parseVIB_FD(vib);
|
|
} else {
|
|
parsedVIB = parseVIB_default(vib);
|
|
}
|
|
|
|
return parsedVIB;
|
|
}
|
|
|