Skip to main content
Home
for DLMS smart meters
Open source solutions for DLMS smart metering

Main navigation

  • Home
  • Products
  • About us
  • Open Source
  • Community
  • Forum
  • Downloads
User account menu
  • Log in

Breadcrumb

  1. Home
  2. Facing Issue While Reading Meter Data Using DLMS C Application

Facing issue while reading meter data using DLMS C application

By srikanthj , 29 January, 2025
Forums
Gurux DLMS for ANSI C

Hii Mikko,

I successfully compiled Gurux Dlms C application and got binary and tried to run the binary and i got below logs:

root@arm:~/Gurux-reading/GuruxDLMS.c/GuruxDLMSClientExample/bin# ./gurux.dlms.client.bin -S /dev/ttymxc2 -i WRAPPER -t Verbose
InitializeConnection

TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

Data send failed. Try to resend 1/3

Data send failed. Try to resend 2/3

Data send failed. Try to resend 3/3

AARQRequest failed Data receive failed.
Data receive failed.

but same credentials i used in DLMS python sdk i got response and able to read meter profiles that is below
python3 main.py -S /dev/ttymxc2:19200:8None1 -i WRAPPER -d India -t Verbose

Note: In python SDK we have given baudrate also . But in C application if i am given baudrate it is not accepting.

So kindly please help regarding this issue as soon as possible.

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi, Your serial port baud…

Hi,

Your serial port baud rate is different. You need to change it from 9600 to 19200.

BR,
Mikko

srikanthj

1 year 4 months ago

Hi Mikko, I have changed…

Hi Mikko,

I have changed baudrate to 19200 in below files

root@arm:~/Gurux-reading/GuruxDLMS.c/development# grep -inr "19200"
grep: lib/libgurux_dlms_c.a: binary file matches
src/cosem.c:641: ((gxIecHdlcSetup*)object)->communicationSpeed = DLMS_BAUD_RATE_19200;

root@arm:~/Gurux-reading/GuruxDLMS.c/GuruxDLMSClientExample# grep -inr "19200"
grep: bin/gurux.dlms.client.bin: binary file matches
src/communication.c:336: dcb.BaudRate = 19200;
src/communication.c:372: cfsetospeed(&options, B19200);
src/communication.c:373: cfsetispeed(&options, B19200);
src/communication.c:493: baudRate = 19200;
src/communication.c:495: baudRate = B19200;

But same thing happening i am not able to read meter.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi Srikanth, I believe that…

Hi Srikanth,

I believe that you should remove -i WRAPPER.
Can you add the first line from Python trace as a hex? I'll check that your settings are the same.

BR,
MIkko

srikanthj

1 year 4 months ago

Hi Mikko, I didn't…

Hi Mikko,

I didn't understand exactly what you want "Can you add the first line from Python Hex?".
Could you explain me in detail, So i can send that.

Regards,
Srikanth

srikanthj

1 year 4 months ago

Hi Mikko, i removed -i…

Hi Mikko,

i removed -i WRAPPER and executed the binary. You can see in below logs.

root@arm:~/Gurux-reading/GuruxDLMS.c/GuruxDLMSClientExample/bin# ./gurux.dlms.client.bin -S /dev/ttymxc2 -t Verbose
InitializeConnection
Request

TX: 7E A0 07 03 21 93 0F 01 7E

Data send failed. Try to resend 1/3

Data send failed. Try to resend 2/3

Data send failed. Try to resend 3/3

SNRMRequest failed Data receive failed.
Data receive failed.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi Srikanth, I need the…

Hi Srikanth,

I need the first line from Python trace. It's something like this:
TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

BR,
Mikko

srikanthj

1 year 4 months ago

Hi Mikko, Below are python…

Hi Mikko,

Below are python trace logs:

root@arm:~/dlms-source-22-11-2024/Gurux.DLMS.Python/Gurux.DLMS.Client.Example.python# python3 read-obis.py -S /dev/ttymxc2:19200:8None1 -i WRAPPER -d India -t Verbose
gurux_dlms version: 1.0.161
gurux_net version: 1.0.19
gurux_serial version: 1.0.20
Authentication: 0
ClientAddress: 0x10
ServerAddress: 0x1
Standard: 1
TX: 10:42:04 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 5D FF FF

Receiving Response from Meter
RX: 10:42:05 00 01 00 01 00 10 00 2B 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 00 10 03 40 00 07

Please enter the OBIS value (or type 'exit' to quit):

Regards,
Srikanth

srikanthj

1 year 4 months ago

Hi Mikko, Any Update…

Hi Mikko,

Any Update regarding previous isssues. With python SDK i am getting response from meter. With C application i verified dlms packet is transmitting but why i didn't receive any response. Please help regarding this ASAP.

Regards,
Srikanth

srikanthj

1 year 4 months ago

Hi Mikko, I conducted an…

Hi Mikko,

I conducted an experiment where the TX of my Linux board is connected to the meter's RX, and the meter's TX is connected to the USB-TTL RX. Based on this setup, I confirmed that the DLMS request packet is being transmitted, and I successfully received the response in HTerm.

However, DLMS C Application is not receiving the same response. Could you please help me troubleshoot this issue?

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi, Your meter is using the…

Hi,

Your meter is using the WRAPPER and the generated bytes are the same. This means that the problem is with serial port settings.

Check the baud rage.

BR,
Mikko

srikanthj

1 year 4 months ago

Hi Mikko, With the same…

Hi Mikko,

With the same settings and using python SDK i am getting response from meter. And Once again i am confirming whatever the experiment i did and mentioned in previous mail i am got response from meter in Hterm . But the same response DLMS C Application is not receiving.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi, Your DLMS settings are…

Hi,

Your DLMS settings are correct and the problem is with serial port settings. You need to check those.

BR,
Mikko

srikanthj

1 year 4 months ago

Hi Mikko, Can you suggest me…

Hi Mikko,

Can you suggest me where can i check serial port settings.Please help regarding this.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi, Sorry to say, but the…

Hi,

Sorry to say, but the reason might be anything. At first, check that your serial port (ttymxc2) is correct. Then check the baud rate.

BR,
Mikko

srikanthj

1 year 4 months ago

Hi Mikko, With same…

Hi Mikko,

With same serialport and same baudrate i am getting response when i am using DLMS Python SDK.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 4 months ago

Hi, This can't be tested…

Hi,

This can't be tested because I don't know what USB converter you are using.
If you are not getting any errors, this might be a timing problem.

Try to add a 50 ms delay after you call tcsetattr.

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko, Using DLMS.c…

Hi Mikko,

Using DLMS.c application can we read WRAPPER mode or not.Because i am able to read meter using HDLC mode but not able to read WRAPPER mode. Please clarify me regarding this and if we read WRAPPER mode then help me regarding that.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, ANSI C is supporting…

Hi,

ANSI C is supporting WRAPPER and the generated bytes are correct. You need to check your serial port settings.

WRAPPER is usually used with TCP/IP connections and HDLC is used with serial port.

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko, Using WRAPPER with…

Hi Mikko,

Using WRAPPER with serial port will work or not. And can you tell me what serial port settings i need to cross verify. Because for HDLC End packet verification is happening but for WRAPPER Frame anything we need to change or what. For 39 bytes of TX packet i am getting 51 bytes from meter response that i added uart read bytes print so where i confirmed like meter sending response but in SDK RX bytes not taking and further TX bytes not generating it. Please clarify these things.

Regards,
Srikanth

srikanthj

1 year 3 months ago

Hi Mikko , Now i am able to…

Hi Mikko ,

Now i am able to read WRAPPER using serial port. I want to read specific OBIS Profiles for example "clock" or "voltage" so can you provide example piece of code which we can customize for different different OBIS Profiles reading. Please help regarding.

Regards,
Srikanth

srikanthj

1 year 3 months ago

Hi Mikko, Can you provide…

Hi Mikko,

Can you provide any piece of code which can read "clock" or Voltage of the OBIS Profile.Please help regarding this ASAP.

regards,
Srikanth.

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, You need to read the…

Hi,

You need to read the association view and search the objects that you want to read. If all the meters are from the same manufacturer you can create the COSEM object and read it like this:

gxData d;
cosem_init(BASE(d), DLMS_OBJECT_TYPE_DATA, "OBJECT LOGICAL NAME");
if ((ret = com_read(BASE(d), 2)) == 0)
{
//Show value.
}
obj_clear(BASE(d));

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko, I integrated below…

Hi Mikko,

I integrated below piece of code to read meter serial number

int read_meter_serial(connection* conn)
{
gxData d;
int ret;
int meterSerialNo; // Variable to store the serial number

cosem_init(BASE(d), DLMS_OBJECT_TYPE_DATA, "0.0.96.1.0.255");

if ((ret = com_read(conn, BASE(d), 2)) == 0) // Pass valid connection pointer
{
// Convert to integer and store the serial number
//meterSerialNo = d.value;

// Print the stored meter serial number
gxByteBuffer ba;
BYTE_BUFFER_INIT(&ba);
int value = var_toInteger(&d.value);
printf("meter-serial-no: %d\n", value);
}
else
{
printf("Failed to read meter serial number. Error code: %d\n", ret);
}

obj_clear(BASE(d));
return DLMS_ERROR_CODE_OK;
}

but i am getting output is below

meter-serial-no: -1

I am not getting meter serial number.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, The serial number is not…

Hi,

The serial number is not sent as an integer. It's sent as an octet string. Check the value with GXDLMSDirector. It will help you to understand DLMS meters.

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko. Now i am able to…

Hi Mikko.

Now i am able to reading meter serial number using below piece of code

int read_meter_serial(connection* conn, const char* obisProfile)
{
gxData d;
int ret;
char* data = NULL;

cosem_init(BASE(d), DLMS_OBJECT_TYPE_DATA, obisProfile);
if ((ret = com_read(conn, BASE(d), 2)) == 0) // Read the serial number
{

ret = obj_toString(BASE(d), &data);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Conversion Error\n");
}
if (data != NULL)
{
printf("Meter Serial Number : %s\n", data);
free(data);
data = NULL;
}
}
obj_clear(BASE(d));
return DLMS_ERROR_CODE_OK;
}

Now, i am trying to read Name Plate Profile using below piece of code

int read_nameplate(connection* conn, const char* obisProfile)
{
gxProfileGeneric d;
//gxData d;
char* data = NULL;

cosem_init(BASE(d), DLMS_OBJECT_TYPE_PROFILE_GENERIC, obisProfile);
com_read(conn, BASE(d), 3);
com_read(conn, BASE(d), 2);
com_readRowsByEntry(conn, &d, 1, 6);
obj_toString(BASE(d), &data);
printf("Name Plate : %s\n",data);
free(data);
obj_clear(BASE(d));
return DLMS_ERROR_CODE_OK;
}

and i am getting output is below

Name Plate : Index: 2 Value: [
2000000068 | SEE2000000068 | ELSewedy Electrometer

but using python SDK i am getting output is

[['2000000068', 'SEE2000000068', 'ELSewedy Electrometer\x00\x00\x00SEE-L', '212.92', 6, 'D1', '(5-30) A', 2024]]

So please help regarding this ASAP.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, It might be that the …

Hi,

It might be that the \x00 is causing problems for printing the cells.

Try to loop all the profile generic buffer cells and check the values.

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko, I used below piece…

Hi Mikko,

I used below piece of code in Python SDK to reconnect and disconnect the load

# Load DisConnect Control
elif obisValue == "0.0.96.3.10.255":
# Task for OBIS 0.0.96.3.10.255
dc = GXDLMSDisconnectControl(obisValue)

if request == "reconnect":
self.readDataBlock(dc.remoteReconnect(self.client), reply)
time.sleep(1)

self.close()

elif request == "disconnect":
self.readDataBlock(dc.remoteDisconnect(self.client), reply)
time.sleep(1)

self.close()

else:
print("Invalid command. Please send reconnect or disconnect.")

It's working fine. I need same load control using C application . So can you provide piece of code using which we can reconnect and disconnect the load of smart meter. Please help regarding this .

regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, Check disconnect: https:…

Hi,

Check disconnect:

https://github.com/Gurux/GuruxDLMS.c/blob/888d04dec9efc91e30b676a908b5f…

Change 3rd argument to reconnect like this.
ret = com_method(connection, &dc.base, 2, &param);

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko, Thank you for…

Hi Mikko,

Thank you for immediate response. Now i am able to connect and disconnect the load.
I need one more help i am using below piece of code to disconnect from the meter

int com_disconnect(
connection* connection)
{
int ret = DLMS_ERROR_CODE_OK;
gxReplyData reply;
message msg;
reply_init(&reply);
mes_init(&msg);
if ((ret = cl_disconnectRequest(&connection->settings, &msg)) != 0 ||
(ret = com_readDataBlock(connection, &msg, &reply)) != 0)
{
//Show error but continue close.
printf("Close failed.");
}
reply_clear(&reply);
mes_clear(&msg);
return ret;
}

i am calling this function after reading the particular obis profile . But this function not generating any DLMS TX packet. Can you help regarding this.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, Check your com…

Hi,

Check your com_readDataBlock and why it doesn't send the data.
The generated bytes are in msg.

BR,
Mikko

srikanthj

1 year 3 months ago

Hi Mikko, Small piece of…

Hi Mikko,

Small piece of line i changed in development/src/client.c now i am getting disconnect packet.

But i am facing one issue and i will explain it clearly.
Below is my piece of code:
********************************
int com_readAllObjects(connection* connection, const char* invocationCounter, const char* outputFile)
{
char obisInput[50]; // Buffer to store user input
while (1)
{
// Prompt user for OBIS profile
printf("\nEnter OBIS profile (e.g., 0.0.96.1.0.255) or 'exit' to quit: ");
if (scanf("%49s", obisInput) != 1)
{
printf("Invalid input. Try again.\n");
continue;
}

// Check for exit condition
if (strcmp(obisInput, "exit") == 0)
{
printf("Exiting...\n");
break;
}

// Split input based on comma (for reconnect/disconnect cases)
char* obisProfile = strtok(obisInput, ",");
char* action = strtok(NULL, ",");

int ret = DLMS_ERROR_CODE_OK;

// **Handle Load Reconnect/Disconnect**
if (strcmp(obisProfile, "0.0.96.3.10.255") == 0)
{
if (action != NULL) // Only proceed if there's an action
{
if (strcmp(action, "reconnect") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
printf("Performing Reconnect Operation...\n");
ret = reconnect_load(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error performing reconnect operation\n");
return ret;
}
//Close connection.
com_disconnect(connection);
continue;
}
else if (strcmp(action, "disconnect") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
printf("Performing Disconnect Operation...\n");
ret = disconnect_load(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error performing disconnect operation\n");
return ret;
}
//Close connection.
com_disconnect(connection);
continue;
}
else
{
printf("Invalid action: %s. Use 'reconnect' or 'disconnect'.\n", action);
continue;
}
}
}

// **Read Meter Serial Number**
else if (strcmp(obisProfile, "0.0.96.1.0.255") == 0)

{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
//com_getAssociationView(connection, outputFile);
ret = read_meter_serial(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading meter serial number\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read Volatge**
else if (strcmp(obisProfile, "1.0.12.7.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_voltage(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading voltage\n");
return ret;
}
//Close connection.
com_disconnect(connection);

}
// **Read Clock**
else if (strcmp(obisProfile, "0.0.1.0.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_clock(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading clock\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read Frequency**
else if (strcmp(obisProfile, "1.0.14.7.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_frequency(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading frequency\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read NamePlate Profile**
else if (strcmp(obisProfile, "0.0.94.91.10.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_nameplate(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading Nameplate\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read Instantaneous Profile**
else if (strcmp(obisProfile, "1.0.94.91.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_instantaneousData(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading instantaneous data\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read Billing Profile**
else if (strcmp(obisProfile, "1.0.98.1.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_billingProfile(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading Billing Profile\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read DailyLoad Profile**
else if (strcmp(obisProfile, "1.0.99.2.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_dailyLoad(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading Daily load\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
// **Read BlockLoad Profile**
else if (strcmp(obisProfile, "1.0.99.1.0.255") == 0)
{
com_updateInvocationCounter(connection, invocationCounter);
com_initializeConnection(connection);
ret = read_blockLoad(connection, obisProfile);
if (ret != DLMS_ERROR_CODE_OK)
{
printf("Error reading Block load\n");
return ret;
}
//Close connection.
com_disconnect(connection);
}
else
{
printf("Invalid OBIS profile entered. Please try again.\n");
}
}

return DLMS_ERROR_CODE_OK;
}

Using above piece of code it will ask user to enter the "OBIS_PROFILE" and i am entering "OBIS_PROFILE" and i am able to reading all the "OBIS_PROFILES" . But the main issue is when it asks the user to enter input if we provide immediately after reading the OBIS profiles one by one it is working fine . But after reading the OBIS Profile if you take some time and then give the input of OBIS profile it is not reading. This is the issue i am facing. And i will add working and non working condition logs below.

Working condition:
**********************
Enter OBIS profile (e.g., 0.0.96.1.0.255) or 'exit' to quit: 0.0.96.1.0.255
updateInvocationCounter
Request

TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

RX: 00 01 00 01 00 10 00 2B 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 00 10 02 00 00 07
Came inside com_read
Request

TX: 00 01 00 10 00 01 00 0D C0 01 C1 00 01 00 00 2B 01 03 FF 02 00

RX: 00 01 00 01 00 10 00 09 C4 01 C1 00 06 00 00 14 B8
Invocation counter: 5305 (0x14B9)
DisconnectRequestRequest

TX: 00 01 00 10 00 01 00 02 62 00

RX: 00 01 00 01 00 10 00 02 63 00
InitializeConnection
Request

TX: 00 01 00 30 00 01 00 53 60 51 A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 71 77 65 72 74 79 75 69 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 91 C8 E4 72 39 1C 8E 47 A3 D1 E8 74 BA DD 6E 37 BE 17 04 15 21 13 20 00 00 14 B9 CB 39 0A 17 04 31 BB 48 57 06 5E 3E C0 A4

RX: 00 01 00 01 00 30 00 5F 61 5D A1 09 06 07 60 85 74 05 08 01 03 A2 03 02 01 00 A3 05 A1 03 02 01 0E A4 0A 04 08 53 45 45 30 30 30 36 38 88 02 07 80 89 07 60 85 74 05 08 02 02 AA 12 80 10 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 BE 17 04 15 28 13 20 00 00 14 65 29 31 B3 1B A7 14 12 2E 50 18 DB 69 12 D0
Request

TX: 00 01 00 30 00 01 00 26 CB 24 20 00 00 14 BA 40 7C B3 B7 F3 62 48 FB 51 99 F4 4F 78 AE 3C E6 B2 DB 06 40 7B 78 5E D0 37 95 D8 41 8F F0 FE

RX: 00 01 00 01 00 30 00 1F CF 1D 20 00 00 14 66 C1 AA 6F 36 2D 1F F9 46 45 E1 6D E2 37 67 7B 7D 69 D3 3D 62 E9 38 DC 4B
Came inside com_read
Request

TX: 00 01 00 30 00 01 00 14 C8 12 20 00 00 14 BB C6 DC 15 BD 58 3C C3 91 BF C8 4D F7 E6

RX: 00 01 00 01 00 30 00 17 CC 15 20 00 00 14 67 DB 51 25 66 68 D0 E1 97 28 FB 3B D8 7A 74 7E A9
Meter Serial Number : 2000000068

DisconnectRequestRequest

TX: 00 01 00 30 00 01 00 02 62 00

RX: 00 01 00 01 00 30 00 02 63 07

Enter OBIS profile (e.g., 0.0.96.1.0.255) or 'exit' to quit: 1.0.12.7.0.255
updateInvocationCounter
Request

TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

RX: 00 01 00 01 00 10 00 2B 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 00 10 02 00 00 07
Came inside com_read
Request

TX: 00 01 00 10 00 01 00 0D C0 01 C1 00 01 00 00 2B 01 03 FF 02 00

RX: 00 01 00 01 00 10 00 09 C4 01 C1 00 06 00 00 14 BB
Invocation counter: 5308 (0x14BC)
DisconnectRequestRequest

TX: 00 01 00 10 00 01 00 02 62 00

RX: 00 01 00 01 00 10 00 02 63 00
InitializeConnection
Request

TX: 00 01 00 30 00 01 00 53 60 51 A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 71 77 65 72 74 79 75 69 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 1B 0D 86 43 21 10 88 C4 E2 71 B8 DC EE 77 3B 9D BE 17 04 15 21 13 20 00 00 14 BC 39 DD 85 86 B4 9B 92 49 EE 7F 42 84 94 97

RX: 00 01 00 01 00 30 00 5F 61 5D A1 09 06 07 60 85 74 05 08 01 03 A2 03 02 01 00 A3 05 A1 03 02 01 0E A4 0A 04 08 53 45 45 30 30 30 36 38 88 02 07 80 89 07 60 85 74 05 08 02 02 AA 12 80 10 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 BE 17 04 15 28 13 20 00 00 14 68 12 77 05 A9 36 8C 0B CD 2C FE 42 75 00 1F
Request

TX: 00 01 00 30 00 01 00 26 CB 24 20 00 00 14 BD E9 E8 28 F7 5D C2 31 58 34 8E 60 5F DC 75 C4 69 03 41 EE FE 84 26 A2 53 C4 83 BC E8 9A 7D 2A

RX: 00 01 00 01 00 30 00 1F CF 1D 20 00 00 14 69 B0 CC 63 E3 07 6A 73 0C 09 FF 64 6A 7C CC 0B 24 04 77 87 CC 74 08 42 B7
Came inside com_read
Request

TX: 00 01 00 30 00 01 00 14 C8 12 20 00 00 14 BE 15 B1 A3 F9 90 73 C9 F2 D2 6F 64 30 7F

RX: 00 01 00 01 00 30 00 10 CC 0E 20 00 00 14 6A 91 66 31 AA 78 A6 7B 20 FF
Voltage : 227.292892

DisconnectRequestRequest

TX: 00 01 00 30 00 01 00 02 62 00

RX: 00 01 00 01 00 30 00 02 63 07

Enter OBIS profile (e.g., 0.0.96.1.0.255) or 'exit' to quit: 1.0.14.7.0.255

Non Working Condition:
****************************
Here after reading the Meter serial number i have taken 2 or 3 min of gap to read next OBIS profile and you can see those logs.

root@arm:~/Gurux-reading/dlms-c-sdk-test/GuruxDLMS.c/GuruxDLMSClientExample/bin# ./gurux.dlms.client.bin

Enter OBIS profile (e.g., 0.0.96.1.0.255) or 'exit' to quit: 0.0.96.1.0.255
updateInvocationCounter
Request

TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

RX: 00 01 00 01 00 10 00 2B 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 00 10 02 00 00 07
Came inside com_read
Request

TX: 00 01 00 10 00 01 00 0D C0 01 C1 00 01 00 00 2B 01 03 FF 02 00

RX: 00 01 00 01 00 10 00 09 C4 01 C1 00 06 00 00 14 C1
Invocation counter: 5314 (0x14C2)
DisconnectRequestRequest

TX: 00 01 00 10 00 01 00 02 62 00

RX: 00 01 00 01 00 10 00 02 63 00
InitializeConnection
Request

TX: 00 01 00 30 00 01 00 53 60 51 A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 71 77 65 72 74 79 75 69 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 70 38 9C CE 67 B3 59 AC 56 AB 55 2A 15 8A 45 22 BE 17 04 15 21 13 20 00 00 14 C2 A3 02 81 B0 2E 18 69 96 F7 5B F3 03 28 A8

RX: 00 01 00 01 00 30 00 5F 61 5D A1 09 06 07 60 85 74 05 08 01 03 A2 03 02 01 00 A3 05 A1 03 02 01 0E A4 0A 04 08 53 45 45 30 30 30 36 38 88 02 07 80 89 07 60 85 74 05 08 02 02 AA 12 80 10 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 BE 17 04 15 28 13 20 00 00 14 6E 5A 77 4B B0 B6 C3 B4 C7 8E E8 BA E1 3A F6
Request

TX: 00 01 00 30 00 01 00 26 CB 24 20 00 00 14 C3 6A FF 3F 56 9F 3D E9 A1 8A 08 EB 3B F5 2F 68 BF D3 0C AF EE FC 43 48 A3 4B A3 AF CC 15 79 2E

RX: 00 01 00 01 00 30 00 1F CF 1D 20 00 00 14 6F 73 10 47 49 61 D6 08 7F E6 75 5A 13 C4 31 22 64 3F 13 CC 0E 6A 3D 3F CA
Came inside com_read
Request

TX: 00 01 00 30 00 01 00 14 C8 12 20 00 00 14 C4 A1 97 64 C3 83 34 8D 4E 77 2C 49 46 1F

RX: 00 01 00 01 00 30 00 17 CC 15 20 00 00 14 70 7D CF D9 B1 D6 29 9A 15 8A C8 2A 10 55 51 E2 B5
Meter Serial Number : 2000000068

DisconnectRequestRequest

TX: 00 01 00 30 00 01 00 02 62 00

RX: 00 01 00 01 00 30 00 02 63 07

Enter OBIS profile (e.g., 0.0.96.1.0.255) or 'exit' to quit: 1.0.12.7.0.255
updateInvocationCounter
Request

TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

RX: 00 01 00 01 00 40 00 79 DB 08 53 45 45 30 30 30 36 38 6E 20 00 00 00 3E E0 F4 C0 2A 1B 66 E4 95 CF 16 4A 83 0A 54 4D 77 14 5B 6A FA 82 26 88 47 81 4A DA CC 06 05 21 D2 08 65 C3 81 13 EB 92 4D BB 7C 8F F2 47 90 DB 64 62 B9 D5 A8 35 E4 99 44 6E 5B 68 E4 0B 62 08 1E F2 D7 8A C8 35 0B 41 5A 24 89 90 EC EF CB EB 11 E0 8A 27 64 AD 18 B7 09 DA FF 6E 93 C6 59 61 F3 24 E0 BD 50 DB 62 0B 9C AA
AARQRequest failed Deciphering error.
InitializeConnection
Request

TX: 00 01 00 10 00 01 00 1F 60 1D A1 09 06 07 60 85 74 05 08 01 01 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 40 1E 1D FF FF

RX: 00 01 00 01 00 10 00 2B 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 00 10 02 00 00 07
Came inside com_read
Request

TX: 00 01 00 10 00 01 00 0D C0 01 C1 00 03 01 00 0C 07 00 FF 02 00

RX: 00 01 00 01 00 10 00 05 C4 01 C1 01 0B
ReadObject failed Register 1.0.12.7.0.255:2 Access Error : Device reports a unavailable object.
DisconnectRequestRequest

TX: 00 01 00 10 00 01 00 02 62 00

RX: 00 01 00 01 00 10 00 02 63 00

So after taking some gap i am not able to read any other profile. Without any gap if i provide OBIS immediately then i am able to reading all the profiles. Please kindly explain me what could be the reason ASAP.

Regards,
Srikanth

Profile picture for user Kurumi

Kurumi

1 year 3 months ago

Hi, There is an inactivity…

Hi,

There is an inactivity timeout and the meter closes the connection if you don't read anything from the meter during that time.

https://gurux.fi/Gurux.DLMS.Objects.GXDLMSIecHdlcSetup

BR,
Mikko

  • Create new account
  • Reset your password

Hire Us!

Latest Releases

  • Tue, 06/09/2026 - 11:16
    gurux.dlms.java 4.0.95
  • Tue, 06/09/2026 - 10:03
    Gurux.DLMS.Python 1.0.199
  • Mon, 06/08/2026 - 13:39
    gurux.dlms.cpp 9.0.2606.0801
  • Mon, 06/01/2026 - 10:15
    gurux.dlms.cpp 9.0.2606.0101
  • Thu, 05/28/2026 - 16:06
    gurux.dlms.java 4.0.94

New forum topics

  • Error reading L&G Meter
  • Pass a TCP Client to GXNet
  • Australian EDMI Mk10D (Essential Energy area)
  • Strange mix of data notificiation vs get response
  • DLMS Connection
More
RSS feed
Privacy FAQ GXDN Issues Contact
Follow Gurux on Twitter Follow Gurux on Linkedin