diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 475a203..f7fff71 100644 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -748,6 +748,173 @@ mbus_decode_manufacturer(u_char byte1, u_char byte2) return m_str; } +const char * +mbus_data_product_name(mbus_data_variable_header *header) +{ + static char buff[128]; + unsigned int manufacturer; + + if (header) + { + manufacturer = (header->manufacturer[1] << 8) + header->manufacturer[0]; + + if (manufacturer == MBUS_VARIABLE_DATA_MAN_ACW) + { + switch (header->version) + { + case 0x09: + strcpy(buff,"Itron CF Echo 2"); + break; + case 0x0A: + strcpy(buff,"Itron CF 51"); + break; + case 0x0B: + strcpy(buff,"Itron CF 55"); + break; + case 0x0E: + strcpy(buff,"Itron BM +m"); + break; + case 0x0F: + strcpy(buff,"Itron CF 800"); + break; + case 0x14: + strcpy(buff,"Itron CYBLE M-Bus 1.4"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SLB) + { + switch (header->version) + { + case 0x02: + strcpy(buff,"Allmess Megacontrol CF-50"); + break; + case 0x06: + strcpy(buff,"CF Compact / Integral MK MaXX"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_HYD) + { + switch (header->version) + { + case 0x02: + strcpy(buff,"ABB F95 Typ US770"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_LUG) + { + switch (header->version) + { + case 0x02: + strcpy(buff,"Landis & Gyr Ultraheat 2WR5"); + break; + case 0x03: + strcpy(buff,"Landis & Gyr Ultraheat 2WR6"); + break; + case 0x04: + strcpy(buff,"Landis & Gyr Ultraheat UH50"); + break; + case 0x07: + strcpy(buff,"Landis & Gyr Ultraheat T230"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_ZRM) + { + switch (header->version) + { + case 0x81: + strcpy(buff,"Minol Minocal C2"); + break; + case 0x82: + strcpy(buff,"Minol Minocal WR3"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SVM) + { + switch (header->version) + { + case 0x08: + strcpy(buff,"Elster F2"); + break; + case 0x09: + strcpy(buff,"Kamstrup SVM F22"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SON) + { + switch (header->version) + { + case 0x0D: + strcpy(buff,"Sontex Supercal 531"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_LSE) + { + switch (header->version) + { + case 0x99: + strcpy(buff,"Siemens WFH21"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SPX) + { + switch (header->version) + { + case 0x31: + strcpy(buff,"Sensus PolluTherm"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_ELS) + { + switch (header->version) + { + case 0x02: + strcpy(buff,"Elster TMP-A"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_NZR) + { + switch (header->version) + { + case 0x01: + strcpy(buff,"NZR DHZ 5/63"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_KAM) + { + switch (header->version) + { + case 0x08: + strcpy(buff,"Kamstrup Multical 601"); + break; + } + } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_EMH) + { + switch (header->version) + { + case 0x00: + strcpy(buff,"EMH DIZ"); + break; + } + } + + return buff; + } + + return ""; +} + //------------------------------------------------------------------------------ // // FIXED-LENGTH DATA RECORD FUNCTIONS @@ -2172,6 +2339,7 @@ mbus_data_record_function(mbus_data_record *record) return NULL; } + /// /// For fixed-length frames, return a string describing the type of value (stored or actual) /// @@ -3079,6 +3247,10 @@ mbus_data_variable_header_xml(mbus_data_variable_header *header) mbus_decode_manufacturer(header->manufacturer[0], header->manufacturer[1])); len += snprintf(&buff[len], sizeof(buff) - len, " %d\n", header->version); + mbus_str_xml_encode(str_encoded, mbus_data_product_name(header), sizeof(str_encoded)); + + len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); + mbus_str_xml_encode(str_encoded, mbus_data_variable_medium_lookup(header->medium), sizeof(str_encoded)); len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index d21adc9..70b6847 100644 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -459,6 +459,25 @@ typedef struct _mbus_data_secondary_address { #define MBUS_VARIABLE_DATA_MEDIUM_PRESSURE 0x18 #define MBUS_VARIABLE_DATA_MEDIUM_ADC 0x19 +#define MBUS_VARIABLE_DATA_MAN_ACW 0x0477 +#define MBUS_VARIABLE_DATA_MAN_ABB 0x0442 +#define MBUS_VARIABLE_DATA_MAN_AMT 0x05B4 +#define MBUS_VARIABLE_DATA_MAN_ELS 0x1593 +#define MBUS_VARIABLE_DATA_MAN_EMH 0x15A8 +#define MBUS_VARIABLE_DATA_MAN_HYD 0x2324 +#define MBUS_VARIABLE_DATA_MAN_KAM 0x2C2D +#define MBUS_VARIABLE_DATA_MAN_LSE 0x3265 +#define MBUS_VARIABLE_DATA_MAN_LUG 0x32A7 +#define MBUS_VARIABLE_DATA_MAN_NZR 0x3B52 +#define MBUS_VARIABLE_DATA_MAN_PAD 0x4024 +#define MBUS_VARIABLE_DATA_MAN_QDS 0x4493 +#define MBUS_VARIABLE_DATA_MAN_SLB 0x4D82 +#define MBUS_VARIABLE_DATA_MAN_SON 0x4DEE +#define MBUS_VARIABLE_DATA_MAN_SPX 0x4E18 +#define MBUS_VARIABLE_DATA_MAN_SVM 0x4ECD +#define MBUS_VARIABLE_DATA_MAN_TCM 0x5068 +#define MBUS_VARIABLE_DATA_MAN_ZRM 0x6A4D + // // Event callback functions // @@ -564,6 +583,7 @@ void mbus_hex_dump(const char *label, const char *buff, size_t len); // int mbus_data_manufacturer_encode(u_char *m_data, u_char *m_code); const char *mbus_decode_manufacturer(u_char byte1, u_char byte2); +const char *mbus_data_product_name(mbus_data_variable_header *header); int mbus_data_bcd_encode(u_char *bcd_data, size_t bcd_data_size, int value); int mbus_data_int_encode(u_char *int_data, size_t int_data_size, int value);