diff --git a/mbus/mbus-protocol-aux.c b/mbus/mbus-protocol-aux.c index 6fd052c..aa0cf39 100644 --- a/mbus/mbus-protocol-aux.c +++ b/mbus/mbus-protocol-aux.c @@ -1367,6 +1367,8 @@ mbus_disconnect(mbus_handle * handle) int mbus_recv_frame(mbus_handle * handle, mbus_frame *frame) { + int result = 0; + if (handle == NULL) { MBUS_ERROR("%s: Invalid M-Bus handle for receive.\n", __PRETTY_FUNCTION__); @@ -1375,13 +1377,20 @@ mbus_recv_frame(mbus_handle * handle, mbus_frame *frame) if (handle->is_serial) { - return mbus_serial_recv_frame(handle->m_serial_handle, frame); + result = mbus_serial_recv_frame(handle->m_serial_handle, frame); } else { - return mbus_tcp_recv_frame(handle->m_tcp_handle, frame); + result = mbus_tcp_recv_frame(handle->m_tcp_handle, frame); } - return 0; + + if (frame != NULL) + { + /* set timestamp to receive time */ + time(&(frame->timestamp)); + } + + return result; } int diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index f7fff71..3289ac6 100644 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -2563,6 +2563,9 @@ mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data) // clean up... return (-2); } + + // copy timestamp + memcpy((void *)&(record->timestamp), (void *)&(frame->timestamp), sizeof(time_t)); // read and parse DIB (= DIF + DIFE) @@ -3275,6 +3278,8 @@ mbus_data_variable_record_xml(mbus_data_record *record, int record_cnt, int fram static char buff[8192]; char str_encoded[768]; size_t len = 0; + struct tm * timeinfo; + char timestamp[21]; int val; if (record) @@ -3314,6 +3319,11 @@ mbus_data_variable_record_xml(mbus_data_record *record, int record_cnt, int fram mbus_str_xml_encode(str_encoded, mbus_data_record_value(record), sizeof(str_encoded)); len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); + + timeinfo = gmtime ( &(record->timestamp) ); + strftime(timestamp,20,"%Y-%m-%dT%H:%M:%S",timeinfo); + len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", timestamp); + len += snprintf(&buff[len], sizeof(buff) - len, " \n\n"); return buff; diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index 70b6847..6a7d515 100644 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -83,6 +83,7 @@ typedef struct _mbus_frame { size_t data_size; int type; + time_t timestamp; //mbus_frame_data frame_data; @@ -145,6 +146,8 @@ typedef struct _mbus_data_record { u_char data[234]; size_t data_len; + time_t timestamp; + void *next; } mbus_data_record;