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.
Hi, Your serial port baud…
Hi,
Your serial port baud rate is different. You need to change it from 9600 to 19200.
BR,
Mikko
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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, ¶m);
BR,
Mikko
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
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
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
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