Hello,
I am currently facing an issue with generating the correct AARQ request for a DLMS ciphered meter. Despite my efforts, I am not receiving an AARE response from the meter side. Below are the details of my configuration:
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 79 33 06 0C 5E 49 17 3C 79 2E 55 70 39 64 1B 37 BE 23 04 21 21 1F 30 00 00 00 05 13 EA 91 CE 46 32 B5 35 5C 2A D5 5A F5 F8 02 FD A5 BF D0 39 8F 59 C5 34 8E 22 9E 80 7E
Hi, Your value looks correct…
Hi,
Your value looks correct. You must send SNRM before AARQ. Check your serial port settings (baud rate) if you are not receiving any reply from the meter.
BR,
Mikko
Sir, I am currently facing…
Sir,
I am currently facing an issue where I am unable to receive an AARE response from the meter after sending an SNRM command followed by an AARQ request. Although I am able to send the AARQ request and receive the AARE response using the GXDLMSDirector application, I am unable to do so from my
mobile application.
In GXDLMSDirector, everything works perfectly, and I can communicate with the ciphered meter without any issues. However, from my mobile application, I am unable to send the AARQ request successfully and thus cannot communicate with the meter.
I suspect that the issue might be related to the invocation counter and frame counter. Since I am new to understanding the DLMS protocol, I am unsure if I need to add these counters to the AARQ request.
please help me, identify what might be missing or incorrect in my AARQ request process on the mobile application?
Log from GXDLMSDirector system Application
11.49.20 Initializing serial connection.
11.49.21 AM Send SNRM request.
7E A0 07 03 21 93 0F 01 7E
11.49.21 AM
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
11.49.21 Parsing UA reply succeeded.
11.49.21 AM Send AARQ request.
7E A0 2B 03 21 10 FB AF E6 E6 00 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 00 1E 5D FF FF B3 E2 7E
11.49.21 AM
7E A0 37 21 03 30 6C 7C E6 E7 00 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 0C 00 07 04 53 7E
11.49.21 Parsing AARE reply succeeded.
11.49.21 AM Reading object 0.0.43.1.3.255, interface Data
7E A0 19 03 21 32 6F D8 E6 E6 00 C0 01 C1 00 01 00 00 2B 01 03 FF 02 00 B0 AA 7E
11.49.22 AM
7E A0 15 21 03 52 5D 8A E6 E7 00 C4 01 C1 00 06 00 01 A1 CE F4 DB 7E
11.49.22 Disconnect request
11.49.22 AM Disconnect request
7E A0 07 03 21 53 03 C7 7E
11.49.22 AM
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
11.49.22 AM Send SNRM request.
7E A0 07 03 61 93 69 47 7E
11.49.22 AM
7E A0 1E 61 03 73 B5 7C 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
11.49.22 Parsing UA reply succeeded.
11.49.22 AM Send AARQ request.
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 1A 6C 6A 64 6F 44 3E 6F 37 4D 6F 6F 79 33 02 54 BE 23 04 21 21 1F 30 00 01 A1 CF 6B AB A3 82 D3 62 88 1A C5 B6 58 E7 BC 59 B9 78 6C D5 28 0E 87 B8 5C A7 74 4A A3 1A 7E
11.49.22 AM
7E A0 77 61 03 30 AD 6C E6 E7 00 61 69 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 4C 4E 54 41 00 35 F2 E3 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 23 04 21 28 1F 30 00 00 19 CC D1 78 92 6B AE FD 5A 12 70 43 D4 E4 98 F0 50 49 05 52 E4 0E C7 B2 E4 2F A3 17 22 6E 7E
11.49.22 Parsing AARE reply succeeded.
11.49.22 AM Authenticating.
7E A0 3E 03 61 32 7B 46 E6 E6 00 CB 30 30 00 01 A1 D0 87 D4 80 15 6A F5 BC 0F F6 D1 9A 4C 7C 16 F4 3D 84 1B D4 96 E9 4F 6C 5F 91 84 3E C0 47 23 5B 7B 72 18 9A F0 80 2C A8 7C BC 35 86 63 B2 7E
11.49.22 AM
7E A0 37 61 03 52 0E 3A E6 E7 00 CF 29 30 00 00 19 CD 4C 36 13 81 5A 0F 2A C7 08 91 72 A3 FB 35 45 90 7A D8 6B DA 06 2E B6 A9 63 0B D8 17 C8 6A E6 42 A9 91 87 00 63 95 7E
11.49.42 AM Send Keep Alive
7E A0 2C 03 61 54 9C BA E6 E6 00 C8 1E 30 00 01 A1 D1 E6 87 64 96 94 F8 CF 90 D6 8E C9 40 46 CD 63 8C 1D 25 CD B1 D4 8E B1 25 8D AF A7 7E
11.49.42 AM
7E A0 2B 61 03 74 AF 2A E6 E7 00 CC 1D 30 00 00 19 CE E0 3A 35 44 F8 E2 EE A2 73 EC DF 1A 87 A6 80 74 91 29 03 E7 AC CB 9B 77 EF 7B 7E
11.50.02 AM Send Keep Alive
7E A0 2C 03 61 76 8C B8 E6 E6 00 C8 1E 30 00 01 A1 D2 F7 76 E6 F5 16 C7 F0 E2 E9 74 DA 96 B3 2E 38 32 6B 44 D0 97 04 C9 00 C1 E2 FF 9C 7E
Log from mobile Application
SNRM request
7EA0070321930F017E
Response
7EA01E210373C37A81801205018006018007040
0000001080400000001533B7E
Total Packet Received!!
count4 is 1
invocationCounterValueDLMS is 6
AARQ
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 79 33 06 0C 5E 49 17 3C 79 2E 55 70 39 64 1B 37 BE 23 04 21 21 1F 30 00 00 00 05 13 EA 91 CE 46 32 B5 35 5C 2A D5 5A F5 F8 02 FD A5 BF D0 39 8F 59 C5 34 8E 22 9E 80 7E
count1 is 2
invocationCounterValueDLMS is 7
7E A0 2C 03 61 32 AC BC E6 E6 00 C8 1E 30 00 00 00 07 48 DE 82 5A 0E FB 66 6D BF BD 9E 1B A3 6E 36 F6 BC F8 BD 1A 3D D3 10 2D 59 A0 CA 7E
count1 is 10
No Response Received
Downloaded Failure3!!
Hi, You are establishing the…
Hi,
You are establishing the secured connection when you are reading the invocation counter. Set Security to none and read IC. Start to use secured connection after you have read the IC.
Check this:
https://github.com/Gurux/gurux.dlms.java/blob/e4f0c6fcf52a71beb829c9710…
BR,
Mikko
Hi Sir, I am developing…
Hi Sir,
I am developing application using Android Studio, and I couldn't find the updateCounter() function in the Android DLMS stack.
Hi, You need to read the…
Hi,
You need to read the invocation counter and then update it. You do this in MainFragment.java
BR,
Mikko
Hi Sir, I am trying to read…
Hi Sir,
I am trying to read the invocation counter and getting a response with an invalid HDLC Frame.
LOG :
Tx - 7E A0 19 03 21 32 6F D8 E6 E6 00 C0 01 C1 00 01 00 00 2B 01 03 FF 02 00 B0 AA 7E
Rx - 7E A0 15 21 03 52 5D 8A E6 E7 00 C4 01 C1 00 06 00 01 A2 D0 63 08 7E
Invalid HDLC Frame: 52 Expected: 30
While debugging the code, I am not getting any response from the client here:
invocationCounterValueDLMS = (long) ((GXUInt32) reply.getValue()).longValue();
invocationCounterValueDLMS++;
Could you please help me to resolve this issue?
Hi, You are reading the…
Hi,
You are reading the invocation counter, but not using it.
dlms.getCiphering().setInvocationCounter(invocationCounterValueDLMS);
BR,
Mikko
Hi sir, Thank you for your…
Hi sir,
Thank you for your reply.
I am facing issue while reading invocation counter, Please see the code below
case 1:
fetchedData.clear();
reply.clear();
disconnectCommandsent = 0;
client = new GXDLMSSecureClient(true, 16, 1, Authentication.NONE, "", InterfaceType.HDLC);
command_obtained = client.snrmRequest();
break;
case 2:
fetchedData.clear();
reply.clear();
client = new GXDLMSSecureClient(true, 16, 1, Authentication.NONE, "", InterfaceType.HDLC);
for (byte[] it : client.aarqRequest()) {
command_obtained = Arrays.copyOfRange(it, 0, it.length);
break;
}
break;
case 3:
fetchedData.clear();
reply.clear();
client = new GXDLMSSecureClient(true, 16, 1, Authentication.NONE, "", InterfaceType.HDLC);
byte[][] tempS21 = client.read(readInvocationCounter, 2);
for (byte[] it : tempS21) {
command_obtained = Arrays.copyOfRange(it, 0, it.length);
break;
}
case 4:
fetchedData.clear();
invocationCounterValueDLMS = (long) ((GXUInt32) reply.getValue()).longValue();
invocationCounterValueDLMS++;
System.out.printf("invocationCounterValueDLMS is %d\n", invocationCounterValueDLMS);
reply.clear();
if (issueDisconnectCommand == 1)
command_obtained = Arrays.copyOfRange(Disconnect_meter, 0, Disconnect_meter.length);
else
command_obtained = client.disconnectRequest();
disconnectCommandsent = 1;
break;
-- For Receving Data from Meter
public void onReceive(Context context, Intent intent) {
Log.d("Responsechunk ", now(0) + rcvdstring_data);
RX_stringbuffer = RX_stringbuffer + rcvdstring_data;
if (rcvd_data != null) {
for (int j = 0; j < (rcvd_data.length); j++) {
received_rxbuffer.add(rcvd_data[j]);
}
bytesreceived = (byte) (bytesreceived + rcvd_data.length);
final byte[] responseFinal = new byte[received_rxbuffer.size()];
int index = 0;
for (byte b : received_rxbuffer) {
responseFinal[index++] = b;
}
try {
if (client.getData(responseFinal, reply)) {
Log.e(TAG, "Total Packet Received!!");
stoptimertask();
if (mMeterCipherStatus.equals("0"))
processDataSendNextCommand();
else
processDataSendNextCommandCiphered();
if (disconnectCommandsent != 1)
startTimer();
}
} catch (Exception e) {
stoptimertask();
unbindService(mServiceConnection);
// mBluetoothLeService = null;
intentAction = ACTION_DOWNLOADDATA_FAILURE;
downloadSuccess = 0;
if (ProcessLifecycleOwner.get().getLifecycle().getCurrentState() == Lifecycle.State.CREATED)
scheduleNotification(getNotification("Download Failure"), 1);
broadcastUpdateDownloadStatus(intentAction, gcycleid, e.getMessage());
Log.e(TAG, e.getMessage());
stopSelf();
}
}
I am getting error like this when i try to read invocation counter and try to use invocation counter
-- Log
2024-07-13 15:56:20.656 30153-30473/gurux.dlms.android D/Command sent: 2024-07-13 15:56:20:651 7EA0070321930F017E
2024-07-13 15:56:20.663 30153-30473/gurux.dlms.android E/ContentValues: Start Timer!!
2024-07-13 15:56:20.825 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:20:821 7EA01E210373C37A818012050180060180070400
2024-07-13 15:56:20.840 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:20:836 000001080400000001533B7E
2024-07-13 15:56:20.845 30153-30153/gurux.dlms.android E/ContentValues: Total Packet Received!!
2024-07-13 15:56:20.846 30153-30153/gurux.dlms.android E/ContentValues: stoptimertask
2024-07-13 15:56:20.879 30153-30153/gurux.dlms.android D/Response Received1: 2024-07-13 15:56:20:877 7EA01E210373C37A818012050180060180070400000001080400000001533B7E
2024-07-13 15:56:20.886 30153-30153/gurux.dlms.android I/System.out: bytesreceived1 is 20
2024-07-13 15:56:20.887 30153-30153/gurux.dlms.android I/System.out: count4 is 1
2024-07-13 15:56:20.888 30153-30153/gurux.dlms.android I/System.out: invocationCounterValueDLMS is 4
2024-07-13 15:56:20.934 30153-30153/gurux.dlms.android D/Command sent: 2024-07-13 15:56:20:932 7EA02B032110FBAFE6E600601DA109060760857405080101BE10040E01000000065F1F0400001E1DFFFFC5E47E
2024-07-13 15:56:20.940 30153-30153/gurux.dlms.android E/ContentValues: Start Timer!!
2024-07-13 15:56:21.487 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:21:484 7EA0372103306C7CE6E7006129A1090607608574
2024-07-13 15:56:21.510 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:21:507 05080101A203020100A305A103020100BE10040E
2024-07-13 15:56:21.526 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:21:524 0800065F1F0400000010030C000704537E
2024-07-13 15:56:21.528 30153-30153/gurux.dlms.android E/ContentValues: Total Packet Received!!
2024-07-13 15:56:21.528 30153-30153/gurux.dlms.android E/ContentValues: stoptimertask
2024-07-13 15:56:21.564 30153-30153/gurux.dlms.android D/Response Received1: 2024-07-13 15:56:21:562 7EA0372103306C7CE6E7006129A109060760857405080101A203020100A305A103020100BE10040E0800065F1F0400000010030C000704537E
2024-07-13 15:56:21.572 30153-30153/gurux.dlms.android I/System.out: bytesreceived1 is 39
2024-07-13 15:56:21.576 30153-30153/gurux.dlms.android I/ContentValues: Parsing AARE reply succeeded!!
2024-07-13 15:56:21.577 30153-30153/gurux.dlms.android I/System.out: count4 is 2
2024-07-13 15:56:21.578 30153-30153/gurux.dlms.android I/System.out: invocationCounterValueDLMS is 5
2024-07-13 15:56:21.599 30153-30153/gurux.dlms.android D/Command sent: 2024-07-13 15:56:21:597 7EA0190321326FD8E6E600C001C1000100002B0103FF0200B0AA7E
2024-07-13 15:56:21.604 30153-30153/gurux.dlms.android E/ContentValues: Start Timer!!
2024-07-13 15:56:21.885 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:21:884 7EA0152103525D8AE6E700C401C10006000189B9
2024-07-13 15:56:21.890 30153-30153/gurux.dlms.android D/Responsechunk: 2024-07-13 15:56:21:888 3F317E
2024-07-13 15:56:21.891 30153-30153/gurux.dlms.android I/System.out: Invalid HDLC Frame: 52 Expected: 30
2024-07-13 15:56:24.605 30153-30477/gurux.dlms.android I/System.out: Timer Expired
2024-07-13 15:56:24.606 30153-30477/gurux.dlms.android I/System.out: count1 is 3
2024-07-13 15:56:24.617 30153-30477/gurux.dlms.android D/Response Received3: 2024-07-13 15:56:24:615 7EA0152103525D8AE6E700C401C10006000189B93F317E
2024-07-13 15:56:24.622 30153-30477/gurux.dlms.android I/System.out: bytesreceived2 is 17
2024-07-13 15:56:24.623 30153-30477/gurux.dlms.android I/System.out: Invalid HDLC Frame: 52 Expected: 30
2024-07-13 15:56:24.624 30153-30477/gurux.dlms.android I/System.out: invocationCounterValueDLMS is 6
2024-07-13 15:56:24.626 30153-30477/gurux.dlms.android E/AndroidRuntime: FATAL EXCEPTION: Timer-5
Process: gurux.dlms.android, PID: 30153
java.lang.NullPointerException: Attempt to invoke virtual method 'long gurux.dlms.GXUInt32.longValue()' on a null object reference
at gurux.dlms.android.DownloadData.compose_next_command_nameplateCiphered(DownloadData.java:4174)
Hi Sir, I recently posted a…
Hi Sir,
I recently posted a question on the forum regarding set invocation counter. As I have not yet received a response.
I would greatly appreciate any guidance or feedback you could provide.
Thank You.
Hi, You can read the IC like…
Hi,
You can read the IC like this:
GXDLMSData d = new GXDLMSData(invocationCounter);
read(d, 2);
long iv = ((Number) d.getValue()).longValue();
iv += 1;
dlms.getCiphering().setInvocationCounter(iv);
BR,
Mikko
Hi Sir, I am successfully…
Hi Sir,
I am successfully receiving responses from the meter for SNRM and AARQ commands, but I am not getting a response for the read invocation command. I am getting invalid HDLC frame in mobile, but if i try it in gurux windows tool getting correct response. Is there anything specific I need to enable or set to gain access to the meter in android studio code for the read invocation?
Here is the communication log:
SNRM
7EA0070321930F017E
7EA01E210373C37A818012050180060180070400000001080400000001533B7E
AARQ
7EA02B032110FBAFE6E600601DA109060760857405080101BE10040E01000000065F1F0400001E5DFFFFB3E27E
AARE
7EA0372103306C7CE6E7006129A109060760857405080101A203020100A305A103020100BE10040E0800065F1F0400000010030C000704537E
READ INVOCATION
7EA0190321326FD8E6E600C001C1000100002B0103FF0200B0AA7E
7EA0152103525D8AE6E700C401C100060001A3C597567E
Hi, It seems like you have…
Hi,
It seems like you have created a new instance from the client object and reset the HDLC counter. You must use the same client object for whole connection or the counter value is incorrect.
BR,
Mikko
Hi Sir, Thank you for your…
Hi Sir,
Thank you for your previous response. I am currently able to receive responses from the meter (windows application and android application). However, while processing the invocation counter in the DLMS stack (specifically in GXDLMSSettings.java), I am encountering an "Invalid HDLC Frame" error in mobile application.
12:39:03 Send SNRM request.
7E A0 07 03 21 93 0F 01 7E
12:39:03
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E -- windows tool
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E -- Android App
12:39:03 Parsing UA reply succeeded.
12:39:04 Send AARQ request.
7E A0 2B 03 21 10 FB AF E6 E6 00 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 00 1E 5D FF FF B3 E2 7E
12:39:04
7E A0 37 21 03 30 6C 7C E6 E7 00 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 0C 00 07 04 53 7E -- windows tool
7E A0 37 21 03 30 6C 7C E6 E7 00 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 0C 00 07 04 53 7E -- Android App
12:39:04 Parsing AARE reply succeeded.
12:39:04 Reading object 0.0.43.1.3.255, interface Data
7E A0 19 03 21 32 6F D8 E6 E6 00 C0 01 C1 00 01 00 00 2B 01 03 FF 02 00 B0 AA 7E -- windows tool
7E A0 19 03 21 32 6F D8 E6 E6 00 C0 01 C1 00 01 00 00 2B 01 03 FF 02 00 B0 AA 7E -- Android App
12:39:04
7E A0 15 21 03 52 5D 8A E6 E7 00 C4 01 C1 00 06 00 01 87 9C 80 DD 7E -- windows tool
7E A0 15 21 03 52 5D 8A E6 E7 00 C4 01 C1 00 06 00 01 87 9F 1B EF 7E -- Android App
2024-09-23 15:55:19.947 12781-13110/gurux.dlms.android I/System.out: bytesreceived2 is 17
2024-09-23 15:55:19.948 12781-13110/gurux.dlms.android I/gurux.dlms.GXDLMS: Invalid HDLC Frame: 52 Expected: 30
Hi, It seems like you have…
Hi,
It seems like you have created a new instance from GXDLMSClient. Check that.
BR,
Mikko
Hi Sir, Thank you for your…
Hi Sir,
Thank you for your response, The "Invalid HDLC Frame" issue has been resolved, but there seems to be an issue with the AARQ exchange with password, block cipher key and Authentication and Encryption ,which is crucial for establishing the communication session between the client( Android app) and the meter (not getting response from meter for access) .
Logs:-
SNRM :
7E A0 07 03 61 93 69 47 7E
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
AARQ :
7E A0 2B 03 21 10 FB AF E6 E6 00 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 00 1E 5D FF FF B3 E2 7E
AARE:
7E A0 37 21 03 30 6C 7C E6 E7 00 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 0C 00 07 04 53 7E
Reading invocation:
7E A0 19 03 21 32 6F D8 E6 E6 00 C0 01 C1 00 01 00 00 2B 01 03 FF 02 00 B0 AA 7E
7E A0 15 21 03 52 5D 8A E6 E7 00 C4 01 C1 00 06 00 01 A3 8C 52 89 7E
Disconnect:
7E A0 07 03 21 53 03 C7 7E
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
SNRM :-
7E A0 07 03 61 93 69 47 7E
7E A0 1E 61 03 73 B5 7C 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
invocationCounterValueDLMS is 100384
AARQ:
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 64 0B 1A 77 41 1D 01 50 6B 0C 6B 3E 45 67 2C 0B BE 23 04 21 21 1F 30 00 01 88 20 A5 51 51 AD 58 D7 B2 B4 D2 07 05 8E A4 CE 6E 3A 36 AD 8D 43 28 14 B9 57 02 C0 BC AC 7E -- Android App
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 64 0B 1A 77 41 1D 01 50 6B 0C 6B 3E 45 67 2C 0B BE 23 04 21 21 1F 30 00 01 88 20 A5 51 51 AD 58 D7 B2 B4 D2 07 05 8E A4 CE 6E 3A 36 AD 8D 43 28 14 B9 57 02 C0 BC AC 7E
<HDLC len="6A" >
<TargetAddress Value="1" />
<SourceAddress Value="30" />
<!-- AARQ frame. -->
<FrameType Value="10" />
<PDU>
<AssociationRequest>
<ApplicationContextName Value="LN_WITH_CIPHERING" />
<CallingAPTitle Value="6C6E743030303030" />
<SenderACSERequirements Value="1" />
<MechanismName Value="High" />
<CallingAuthentication Value="640B1A77411D01506B0C6B3E45672C0B" />
<!-- Decrypted data:
Security: AuthenticationEncryption
Invocation Counter: 100384
<InitiateRequest>
<ProposedDlmsVersionNumber Value="06" />
<ProposedConformance>
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="Action" />
</ProposedConformance>
<ProposedMaxPduSize Value="FFFF" />
</InitiateRequest>
-->
<glo_InitiateRequest Value="3000018820A55151AD58D7B2B4D207058EA4CE6E3A36AD8D432814B95702C0" />
</AssociationRequest>
</PDU>
</HDLC>
other response from android app:-
AARQ:
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 2A 07 12 5E 48 37 27 03 10 79 0E 34 2A 0C 0A 10 BE 23 04 21 21 1F 30 00 01 88 42 FD 53 13 41 F1 52 B9 0D 3C 8F 14 0D 03 12 92 24 EF AD 72 72 FE 6D EB 05 4D 27 DA 2B 7E
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 2A 07 12 5E 48 37 27 03 10 79 0E 34 2A 0C 0A 10 BE 23 04 21 21 1F 30 00 01 88 42 FD 53 13 41 F1 52 B9 0D 3C 8F 14 0D 03 12 92 24 EF AD 72 72 FE 6D EB 05 4D 27 DA 2B 7E
<HDLC len="6A" >
<TargetAddress Value="1" />
<SourceAddress Value="30" />
<!-- AARQ frame. -->
<FrameType Value="10" />
<PDU>
<AssociationRequest>
<ApplicationContextName Value="LN_WITH_CIPHERING" />
<CallingAPTitle Value="6C6E743030303030" />
<SenderACSERequirements Value="1" />
<MechanismName Value="High" />
<CallingAuthentication Value="2A07125E4837270310790E342A0C0A10" />
<!-- Decrypted data:
Security: AuthenticationEncryption
Invocation Counter: 100418
<InitiateRequest>
<ProposedDlmsVersionNumber Value="06" />
<ProposedConformance>
<ConformanceBit Name="GeneralProtection" />
<ConformanceBit Name="DeltaValueEncoding" />
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Access" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="Action" />
</ProposedConformance>
<ProposedMaxPduSize Value="FFFF" />
</InitiateRequest>
-->
<glo_InitiateRequest Value="3000018842FD531341F152B90D3C8F140D03129224EFAD7272FE6DEB054D27" />
</AssociationRequest>
</PDU>
</HDLC>
AARQ:
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 03 40 0A 0F 38 03 72 28 03 5F 47 35 01 44 6F 56 BE 23 04 21 21 1F 30 00 01 88 19 C1 A2 E0 AA 21 20 88 64 6B B3 B8 1D 85 A6 69 17 8B BD E8 8B DE 4D E6 C1 02 AA 68 1B 7E -- Windows Application
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 60 59 30 27 62 6F 4C 10 25 68 4B 5E 3C 00 59 79 BE 23 04 21 21 1F 30 00 01 88 1F 6A C8 38 E5 D6 58 CF 0C B2 8A 6A B6 C7 A2 B8 27 5C 57 15 FC 7D 51 40 33 C3 C5 6B 00 7E
<HDLC len="6A" >
<TargetAddress Value="1" />
<SourceAddress Value="30" />
<!-- AARQ frame. -->
<FrameType Value="10" />
<PDU>
<AssociationRequest>
<ApplicationContextName Value="LN_WITH_CIPHERING" />
<CallingAPTitle Value="6C6E743030303030" />
<SenderACSERequirements Value="1" />
<MechanismName Value="High" />
<CallingAuthentication Value="60593027626F4C1025684B5E3C005979" />
<!-- Decrypted data:
Security: AuthenticationEncryption
Invocation Counter: 100383
<InitiateRequest>
<ProposedDlmsVersionNumber Value="06" />
<ProposedConformance>
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Access" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="Action" />
</ProposedConformance>
<ProposedMaxPduSize Value="FFFF" />
</InitiateRequest>
-->
<glo_InitiateRequest Value="300001881F6AC838E5D658CF0CB28A6AB6C7A2B8275C5715FC7D514033C3C5" />
</AssociationRequest>
</PDU>
</HDLC>
Hi, I need the block cipher…
Hi,
I need the block cipher key to decrypt the ciphered data. Can you add it here?
BR,
Mikko
Hi Sir, Thank you for the…
Hi Sir,
Thank you for the reply!
Security Suite - Suite 0
Security - Authentication Encryption
System title - lnt00000
Block Cipher key -1234567890123456
Authentication key - 1234567890123456
Hi, Your meter doesn't set…
Hi,
Your meter doesn't set IsAuthenticationRequired flag. Change this line:
if (mClient.getIsAuthenticationRequired())
to this:
if (mClient.getAuthentication().getValue() > Authentication.LOW.getValue())
Now getApplicationAssociationRequest is called when High Level Security is used.
This is also updated to the example because some other meters don't set this flag.
BR,
Mikko
Hi Sir, Thank you for your…
Hi Sir,
Thank you for your response, but i am not getting AARE from meter side
here is my log after adding this code - if (mClient.getAuthentication().getValue() > Authentication.LOW.getValue()) and i have doubt that the below code is correct for reading aarq and authenticating with meter?
SNRM: 7EA00703619369477E
Response : 7EA01E610373B57C818012050180060180070400000001080400000001533B7E
invocationCounterValueDLMS is 100418
AARQ: 7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC128010044F030C62024E0D0C4E0E03790F143DBE230421211F3000018842FD531341F152B90D3CCD144D0312C57765BCA9E5E49216FE8FE097EC7E
2024-10-03 15:47:09.819 6582-6804/gurux.dlms.android E/ContentValues: stoptimertask
2024-10-03 15:47:09.827 6582-6804/gurux.dlms.android E/ContentValues: No Response Received
2024-10-03 15:47:09.829 6582-6582/gurux.dlms.android E/DeviceControlActivity: Downloaded Failure3!!
Code :-
case 5:
client.setUseLogicalNameReferencing(true);
client.setInterfaceType(InterfaceType.HDLC);
client.setClientAddress(48);
client.setServerAddress(1);
client.setAuthentication(Authentication.HIGH);
client.setPassword("1234567890123456");
client.getCiphering().setSecurity(Security.AUTHENTICATION_ENCRYPTION)
try {
client.getCiphering().setSystemTitle("lnt00000".getBytes("ASCII"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
client.getCiphering().setBlockCipherKey(GXCommon.hexToBytes("31323334353637383930313233343536"));
client.getCiphering().setAuthenticationKey(GXCommon.hexToBytes("31323334353637383930313233343536"));
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS++);
System.out.printf("invocationCounterValueDLMS is %d\n", invocationCounterValueDLMS);
client.setAutoIncreaseInvokeID(true);
command_obtained = client.snrmRequest();
}
break;
case 6:
if (client.getAuthentication().getValue() > Authentication.LOW.getValue()) {
//invocationCounterValueDLMS_temp = client.getCiphering().getInvocationCounter();
System.out.printf("invocationCounterValueDLMS is %d\n", invocationCounterValueDLMS);
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS++);
for (byte[] it : client.aarqRequest()) {
command_obtained = Arrays.copyOfRange(it, 0, it.length);
break;
}
}
break;
case 7:
if (client.getIsAuthenticationRequired()==true)
{
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS++);
//invocationCounterValueDLMS_temp = client.getCiphering().getInvocationCounter();
//System.out.printf("invocationCounterValueDLMS is %d\n", invocationCounterValueDLMS_temp);
System.out.printf("client.getIsAuthenticationRequired()==true\n");
for (byte[] it : client.getApplicationAssociationRequest()) {
command_obtained = Arrays.copyOfRange(it, 0, it.length);
break;
}
}
else {
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS++);
System.out.printf("client.getIsAuthenticationRequired()==false\n");
byte[][] tempS2 = client.read(serialnoFetchedMeter, 2);
for (byte[] it : tempS2) {
command_obtained = Arrays.copyOfRange(it, 0, it.length);
break;
}
}
break;
Hi, I believe that your…
Hi,
I believe that your invocation counter is not correct and meter rejects your request.
Forget invocationCounterValueDLMS and read invocation counter value from the meter.
https://www.gurux.fi/comment/28515#comment-28515
BR,
Mikko
Hi Sir, I checked invocation…
Hi Sir,
I checked invocation counter value from windows application and android app, i getting correct values. but not getting AARE from meter
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 72 60 60 0E 17 58 4E 53 72 2B 0D 47 1A 21 19 06 BE 23 04 21 21 1F 30 00 01 88 41 21 9C BB A1 D1 DE 9A 18 E7 05 E1 56 FE B0 0D A6 18 FC 32 BF AF AD 7C 29 94 A0 43 87 7E -- windows app
7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC1280105A6337611C5E14630726631712194612BE230421211F300001885730FD24B29078C7C07D8A569475CFFF71A206D3D3939D5A06ED3BEDF47E -- android app (In this
<ConformanceBit Name="Access" /> is missing)
7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC1280105406066B1F453178256055000D405D21BE230421211F300001886203AFAF544B79084362F7F0EE2C9B2D6FC61EE789C03C081DB7BE5FA07E -- android app (In this
<ConformanceBit Name="GeneralProtection" />
<ConformanceBit Name="DeltaValueEncoding" /> getting extra)
For reading invocation counter
GXDLMSSecureClient client = new GXDLMSSecureClient();
GXReplyData reply = new GXReplyData();
GXDLMSData readInvocationCounter = new GXDLMSData("0.0.43.1.3.255");
byte[][] tempS21 = client.read(readInvocationCounter, 2);
for (byte[] it : tempS21)
command_obtained = Arrays.copyOfRange(it, 0, it.length);
break;
}
For setting invocation counter
invocationCounterValueDLMS = (long) ((GXUInt32) reply.getValue()).longValue();
invocationCounterValueDLMS++;
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS);
Hi, The value of invocation…
Hi,
The value of invocation counter is increased every time the client reads anything from the meter. So it's never the same and if it's too small, the meter doesn't accept the client data.
It should be OK if the Access conformance is missing.
Don't add General protection or Delta value encoding conformance because in your trace GXDLMSDirector doesn't use them. Those conformance bits might cause problems.
BR,
Mikko
Hi Sir, Thank you for…
Hi Sir,
Thank you for replying,
I've made some progress on receiving the correct invocation counter value (100491) from the meter, but I'm still not getting an AARE response after sending the AARQ request. I tested the same process with a Windows tool, and it successfully returned the AARE response with the same invocation counter (100491).
I've also removed both the General Protection and Delta value encoding conformance bits as part of the changes. Below is the AARQ request sent from my Android app and the one from the Windows tool. Could you help me identify why the Android app isn't getting the AARE response?
below is my log
1.
7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC128010230B075E0006253116363B5651271406BE230421211F300001888B7F14002F5F4BC8A25FEF9289BD5AAD6A7A1062B1CA886D2E09AE9BEF7E -- android App
BlockCipher key: 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36
Authentication Key:31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36
1: 7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 23 0B 07 5E 00 06 25 31 16 36 3B 56 51 27 14 06 BE 23 04 21 21 1F 30 00 01 88 8B 7F 14 00 2F 5F 4B C8 A2 5F EF 92 89 BD 5A AD 6A 7A 10 62 B1 CA 88 6D 2E 09 AE 9B EF 7E
<HDLC len="6A" >
<TargetAddress Value="1" />
<SourceAddress Value="30" />
<!-- AARQ frame. -->
<FrameType Value="10" />
<PDU>
<AssociationRequest>
<ApplicationContextName Value="LN_WITH_CIPHERING" />
<CallingAPTitle Value="6C6E743030303030" />
<SenderACSERequirements Value="1" />
<MechanismName Value="High" />
<CallingAuthentication Value="230B075E0006253116363B5651271406" />
<!-- Decrypted data:
Security: AuthenticationEncryption
Invocation Counter: 100491
<InitiateRequest>
<ProposedDlmsVersionNumber Value="06" />
<ProposedConformance>
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Access" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="Action" />
</ProposedConformance>
<ProposedMaxPduSize Value="030C" />
</InitiateRequest>
-->
<glo_InitiateRequest Value="300001888B7F14002F5F4BC8A25FEF9289BD5AAD6A7A1062B1CA886D2E09AE" />
</AssociationRequest>
</PDU>
</HDLC>
2. 7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 1E 36 52 52 74 0F 05 01 73 63 1E 45 23 31 01 54 BE 23 04 21 21 1F 30 00 01 88 8B 7F 14 00 2F 5F 4B C8 A2 5F EF 92 89 41 A9 E7 78 65 72 94 21 88 1B D0 83 6F 4F DF 68 7E -- windows tool
7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 1E 36 52 52 74 0F 05 01 73 63 1E 45 23 31 01 54 BE 23 04 21 21 1F 30 00 01 88 8B 7F 14 00 2F 5F 4B C8 A2 5F EF 92 89 41 A9 E7 78 65 72 94 21 88 1B D0 83 6F 4F DF 68 7E
<HDLC len="6A" >
<TargetAddress Value="1" />
<SourceAddress Value="30" />
<!-- AARQ frame. -->
<FrameType Value="10" />
<PDU>
<AssociationRequest>
<ApplicationContextName Value="LN_WITH_CIPHERING" />
<CallingAPTitle Value="6C6E743030303030" />
<SenderACSERequirements Value="1" />
<MechanismName Value="High" />
<CallingAuthentication Value="1E365252740F050173631E4523310154" />
<!-- Decrypted data:
Security: AuthenticationEncryption
Invocation Counter: 100491
<InitiateRequest>
<ProposedDlmsVersionNumber Value="06" />
<ProposedConformance>
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Access" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="Action" />
</ProposedConformance>
<ProposedMaxPduSize Value="FFFF" />
</InitiateRequest>
-->
<glo_InitiateRequest Value="300001888B7F14002F5F4BC8A25FEF928941A9E77865729421881BD0836F4F" />
</AssociationRequest>
</PDU>
</HDLC>
Hi Sir, I recently posted a…
Hi Sir,
I recently posted a question on the forum regarding invocation counter. As I have not yet received a response.
I would greatly appreciate any guidance or feedback you could provide.
Thank You.
Hi, Your AARQ messages are…
Hi,
Your AARQ messages are the same with Android and Windows. Even the Invocation Counter value is the same, but it can be if you have tried to connect with Android app first and it failed.
Have you send the SNRM message before you send the AARQ?
BR,
Mikko
Hi Sir, I am sending an SNRM…
Hi Sir,
I am sending an SNRM message to the meter before sending the AARQ message. Initially, I send the message without using authentication, a block cipher key, or any security. After sending the disconnect command, I apply the block cipher key, authentication key, and password, while incrementing the invocation counter by 1
SNRM
7EA0070321930F017E
Response
7EA01E210373C37A818012050180060180070400000001080400000001533B7E
AARQ
7EA02B032110FBAFE6E600601DA109060760857405080101BE10040E01000000065F1F0400001E5DFFFFB3E27E
AARE
7EA0372103306C7CE6E7006129A109060760857405080101A203020100A305A103020100BE10040E0800065F1F0400000010030C000704537E
Parsing AARE reply succeeded!!
Read Invocation Counter
7EA0190321326FD8E6E600C001C1000100002B0103FF0200B0AA7E
Response
7EA0152103525D8AE6E700C401C10006000188B799C17E
invocationCounterValueDLMS is 100536
Disconnect Command
7EA00703215303C77E
Response
7EA01E210373C37A818012050180060180070400000001080400000001533B7E
Added Athenticaction and Blockcipher key and password and incrementing invocation with 1
invocationCounterValueDLMS is 100537
SNRM
7EA00703619369477E
Response
7EA01E610373B57C818012050180060180070400000001080400000001533B7E
AARQ
7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC128010164C45796F0018192606142420446123BE230421211F30000188B95207188A949CFFD7C9EF3DE89ED811F041E14D3B029F2139B31B83237E
Hi, You are increasing the…
Hi,
You are increasing the Invocation counter value twice. You read the IC from the meter and the meter sends the value 100535, but you use value 100537.
This should be OK if the IC value is bigger, but it seems like your meter expects that the IC value must be exact one bigger than the read value.
Check this.
BR,
Mikko
Hi Sir, Thank you for the…
Hi Sir,
Thank you for the response, now I am incrementing invocation counter only one time but not getting AARE , I have a doubt that should I create a new instance for adding authentication key and block cipher key and password ?
If i create new instance i get wrong AARE response,
Log file
Invocation counter response:
7EA0152103525D8AE6E700C401C1000600018AB11F977E
value :- 18AB1
Read invocationCounterValueDLMS is 101041
invocationCounterValueDLMS += 1;
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS);
System.out.printf("Set invocationCounterValueDLMS is ", 101042 );
Disconnect Command:
7EA00703215303C77E
7EA01E210373C37A818012050180060180070400000001080400000001533B7E
SNRM
7EA00703619369477E
7EA01E610373B57C818012050180060180070400000001080400000001533B7E
AARQ
7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC12801072724A2F54620D01353635151F0D022EBE230421211F3000018AB222A25BFFC876DEB2E96F63F7591B41A62C104691739337B45595DE437E
Hi, Don't create a new…
Hi,
Don't create a new instance. Just set the correct keys, change the client address, authentication and security level.
BR,
Mikko
Hi Sir, Thank you for your…
Hi Sir,
Thank you for your response ,When using High Authentication (HLS) with the password, I am not receiving an AARE response from the meter. However, if I remove both the authentication level and password, I receive an AARE response, but the message seems incorrect or invalid.
This is the code I am currently using after reading the invocation counter in the SNRM part:
GXDLMSSecureClient client = new GXDLMSSecureClient();
client.getCiphering().setSystemTitle(lSystemTitleDLMS);
client.getCiphering().setBlockCipherKey(lBlockCipherKeyDLMS);
client.getCiphering().setAuthenticationKey(lAuthenticationKeyDLMS);
invocationCounterValueDLMS += 1;
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS);
client.setUseLogicalNameReferencing(true);
client.setInterfaceType(InterfaceType.HDLC);
client.setClientAddress(48);
client.setServerAddress(1);
client.getCiphering().setSecurity(Security.AUTHENTICATION_ENCRYPTION);
// client.setAuthentication(Authentication.HIGH);
// client.setPassword("1234567890123456");
client.setAutoIncreaseInvokeID(true);
AARQ without Authentication level and password :
7EA06B0361102AFFE6E600605DA109060760857405080103A60A04086C6E7430303030308A0207808B0760857405080202AC12801030265B1F7813296359402370452B3911BE230421211F3000018B348EE541DAD096E42931416ECBE8FECAD29BDED5C84250F18AB58A62117E
AARE without Authentication level and password :
7EA02D6103301565E6E700611FA109060760857405080103A203020101A305A10302010DBE0604040E0106003D0E7E
Hi Sir, I recently posted a…
Hi Sir,
I recently posted a question on the forum regarding the AARE response, authentication level, and password, but I have not yet received a reply.
I have another observation. I downloaded the Java code from GitHub and ran it from the command prompt, where I was able to authenticate and successfully read the OBIS code from the meter. However, when I copied the same Java code (DLMS stack) into an Android app, I was unable to authenticate with the meter from the Android app.
I have attached the Java logs below for your reference. Could you please clarify which parameters need to be sent after the AARQ to receive an AARE from the meter in the Android implementation? I following these steps in android:
Without Authentication:
SNRM
SNRM Response
AARQ
AARE
Read Invocation Counter
Set Invocation Counter
Disconnect Command
Disconnect Response
With HLS Authentication (High Level Security):
SNRM
SNRM Response
AARQ
Can you please help verify if these steps are correct, especially for the Android setup?
Thank you.
C:\Users\User1\Desktop\gurux.dlms.java\gurux.dlms.client.example.java>java -jar target\gurux.dlms.client.example.java-0.0.1-SNAPSHOT.jar -S COM31 -c 48 -s 1 -a High -P 1234567890123456 -v 0.0.43.1.3.255 -T 6C6E743030303030 -A 31323334353637383930313233343536 -B 31323334353637383930313233343536 -C AuthenticationEncryption -V Suite0 -d India -t Verbose
Connect using serial port connection gurux.serial.GXSerial@711f39f9
Authentication: High
ClientAddress: 0x30
ServerAddress: 0x1
Standard: INDIA
Security: AUTHENTICATION_ENCRYPTION
System title: 6C 6E 74 30 30 30 30 30
Authentication key: 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36
Block cipher key 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36
TX: 16:55:03.778 7E A0 07 03 21 93 0F 01 7E
Data send failed. Try to resend 1/3
TX: 16:56:03.795 7E A0 07 03 21 93 0F 01 7E
RX: 16:56:03.854 7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
TX: 16:56:03.857 7E A0 2B 03 21 10 FB AF E6 E6 00 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 62 1E 5D FF FF 88 55 7E
RX: 16:56:03.980 7E A0 37 21 03 30 6C 7C E6 E7 00 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 0C 00 07 04 53 7E
TX: 16:56:03.984 7E A0 19 03 21 32 6F D8 E6 E6 00 C0 01 C1 00 01 00 00 2B 01 03 FF 02 00 B0 AA 7E
RX: 16:56:04.045 7E A0 15 21 03 52 5D 8A E6 E7 00 C4 01 C1 00 06 00 01 8E A0 77 F1 7E
Invocation counter: 102049
DisconnectRequest
TX: 16:56:04.051 7E A0 07 03 21 53 03 C7 7E
RX: 16:56:04.108 7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
TX: 16:56:04.109 7E A0 07 03 61 93 69 47 7E
RX: 16:56:04.156 7E A0 1E 61 03 73 B5 7C 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
TX: 16:56:04.196 7E A0 6B 03 61 10 2A FF E6 E6 00 60 5D A1 09 06 07 60 85 74 05 08 01 03 A6 0A 04 08 6C 6E 74 30 30 30 30 30 8A 02 07 80 8B 07 60 85 74 05 08 02 02 AC 12 80 10 5D 26 4B 1D 10 57 0B 14 52 49 38 78 2A 60 74 42 BE 23 04 21 21 1F 30 00 01 8E A1 B2 85 35 9C 17 61 DE 35 9D C1 A6 22 D8 A2 4A 24 A7 3C 67 69 A4 33 66 BA AD EC B1 D4 7E
RX: 16:56:04.460 7E A0 77 61 03 30 AD 6C E6 E7 00 61 69 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 4C 4E 54 41 00 2C 39 75 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 23 04 21 28 1F 30 00 00 07 2C 8A DB 6C 0E 2B 21 BB 79 2D 34 10 F4 2B 93 E9 DC ED 1B 59 5C 59 3F 68 74 D0 B9 60 D0 7E
----------------------------
Proposed conformance:
[SET, ACTION, BLOCK_TRANSFER_WITH_GET_OR_READ, SELECTIVE_ACCESS, GET, BLOCK_TRANSFER_WITH_ACTION, GENERAL_PROTECTION, MULTIPLE_REFERENCES, ACCESS, BLOCK_TRANSFER_WITH_SET_OR_WRITE, DELTA_VALUE_ENCODING, GENERAL_BLOCK_TRANSFER]
Negotiated conformance:
[SET, ACTION, BLOCK_TRANSFER_WITH_GET_OR_READ, SELECTIVE_ACCESS, GET, BLOCK_TRANSFER_WITH_SET_OR_WRITE, GENERAL_BLOCK_TRANSFER]
MaxReceivePDUSize: 780
TX: 16:56:04.472 7E A0 3E 03 61 32 7B 46 E6 E6 00 CB 30 30 00 01 8E A2 33 CC 6F EB 4C 16 0F 54 A9 11 83 30 30 4A F7 3E 5F 25 87 82 4F 1A 5F 90 E7 03 75 32 C5 93 BF B0 3D DA 76 3C 54 EF 3C D2 44 79 FC B8 38 7E
RX: 16:56:04.620 7E A0 37 61 03 52 0E 3A E6 E7 00 CF 29 30 00 00 07 2D 60 B0 B4 9C 55 00 04 76 B9 41 0D 79 A2 76 2A 3B CC D2 06 D2 33 C8 E7 77 4A 3B 91 17 EC C2 19 C7 EB 79 C9 28 34 9E 7E
TX: 16:56:04.626 7E A0 2C 03 61 54 9C BA E6 E6 00 C8 1E 30 00 01 8E A3 7E A5 A5 31 36 F9 BC 35 AE 7A B0 1D 95 1A C9 94 AD F1 96 D1 7D A7 10 29 FD 14 7C 7E
RX: 16:56:04.924 7E A8 89 61 03 74 C4 EB E6 E7 00 CC 82 03 02 30 00 00 07 2E 51 03 7A A8 5A A6 7E 58 33 22 2F CC CF 6B A5 FB E9 49 36 0A 76 5A 96 95 E0 FB D4 7E 58 99 DB CE FF 77 D3 B0 91 E7 72 7B DA 64 73 BA 6A 25 04 59 26 1B 6A DD DA 16 B6 E8 0A 28 2F 72 44 EC 83 8E 7D 1C 02 22 F3 9C E6 5A 83 7B 7A DD 46 94 E6 6E 7E AD 0F 82 01 65 BC 7F 69 E7 A8 2A 71 BE 0D C5 A9 F3 43 DA 17 2A 75 0F 29 4F 4B 81 9E 88 D2 8A 38 D5 5C 9F 38 5C 7E
TX: 16:56:04.927 7E A0 07 03 61 71 75 83 7E
RX: 16:56:05.099 7E A8 89 61 03 76 D6 C8 BF DD 20 86 2F FC B1 7D BF 41 49 7C FA 12 FC FA A2 86 88 D9 E0 53 49 FC 46 89 2A 7C 7B 8F EE 29 A7 DA 04 EF 65 12 7A 6D E6 16 75 C7 D6 F2 0E CC EF 2D 20 2D FC 21 C1 FC 5E AF 60 F0 61 60 7C 74 A4 6D 34 6C 4D C3 4B 33 B1 B2 B2 AA 2B 96 7B BD 02 F5 CF 41 97 C9 D2 FA 74 B6 BF F1 EF 4B 34 4A 84 07 78 0A B3 03 8E 94 DB AA 78 55 8B 0B 45 F0 7A E5 F6 C1 6D 83 75 5C AD AC 0C FA 91 DF 9F B1 C9 11 7E
TX: 16:56:05.102 7E A0 07 03 61 91 7B 64 7E
RX: 16:56:05.275 7E A8 89 61 03 78 A8 21 A1 FE AF 5A 34 96 11 9B 5A CC 6E CC 35 94 DD A6 B8 80 F0 FB F9 68 A6 9C 7E 75 71 C8 5A D7 7F F6 4E 3C BF 5F FB F6 B1 D0 68 AF 50 BB 86 0B 45 D9 1E E8 B5 F2 5A 4A D5 48 65 90 D7 20 02 86 FB 90 B1 43 77 3C C5 50 A6 5C B7 B5 EC 77 DF 2A 8B B3 04 F5 41 51 5A 7D 35 19 84 E4 3B 9A F7 3C 7D 5C F6 3F A6 BD 9E 89 86 C2 FB 6B D3 5E 28 B4 28 58 76 20 12 F7 AC 14 2F DE A7 47 89 FF 55 19 AB B0 C1 D8 7E
TX: 16:56:05.278 7E A0 07 03 61 B1 79 45 7E
RX: 16:56:05.452 7E A8 89 61 03 7A BA 02 81 67 36 37 69 29 B1 3A 0D 37 1A 65 B7 B7 AC D6 6E 6D 6A 5D 7A 78 C8 FB 7B 1B 09 E2 55 95 35 C0 39 12 E6 3F 90 92 85 0B B7 08 F4 6F 88 06 47 2E 10 F6 F1 A9 09 EE 5F 8E FA 72 E9 7B 32 C6 9B 3F 19 02 5B 7D FF D8 97 49 DF 12 FE D3 16 AA DD 06 48 F4 50 94 B8 F9 F3 08 08 B7 1E A0 34 FE 07 69 BE D9 9B 0A 4A 67 9F 43 94 78 8B 0E 3E EE A5 6C CD 7F 94 38 5A 2F 5C 77 54 B1 2F 8C 18 EA FF 9A B4 38 7E
TX: 16:56:05.455 7E A0 07 03 61 D1 7F 26 7E
RX: 16:56:05.627 7E A8 89 61 03 7C 8C 67 BB 60 BF A5 97 F4 C8 30 7D 49 10 40 11 99 DD B1 AC 7B FB 8F 02 A2 59 8B 9D B5 72 45 D6 A1 FB 7D 4C 03 E1 53 C3 B9 FA C0 2D 1C CE AB 0C 36 BE C9 30 A1 11 C1 AC 44 7A FD DD 02 57 68 F5 B4 09 7C 5B 91 CA 41 B9 1A DA 93 1D FD 1C 60 B5 7C CC 41 9E C3 60 10 BD 48 71 95 EB 30 7A 2A 96 71 9B D4 7B 66 E7 E4 68 52 8C D3 A1 40 66 ED F0 C9 F2 BB 1C C1 E9 26 1A 9E 99 8E 24 E3 4E 0F 83 8D E3 E5 C5 49 7E
TX: 16:56:05.630 7E A0 07 03 61 F1 7D 07 7E
RX: 16:56:05.804 7E A8 89 61 03 7E 9E 44 3E 18 A6 B9 E9 D4 6C 8B 9D 87 0F D9 71 1E FD 13 18 B7 59 96 19 1B 40 05 BB FB BB 7F A0 B6 40 F8 87 4B 75 40 43 ED 2B 52 5E F8 6E 59 6F E7 24 ED CF A6 99 38 2A DB DD 22 93 F8 74 DC 64 FC 80 81 83 53 F5 54 A7 3B B5 6C BD AE BF AC 5F B5 D2 B5 FB 19 28 14 BE A9 76 BC 51 37 6B FC C7 FF BC C6 41 6F 5E 85 CE BF 12 B1 2C 1C 26 2C 1E 5A 6A E5 98 A8 CB 44 B1 96 75 34 72 C8 DC 6A A9 E7 F6 E6 BC 5B 7E
TX: 16:56:05.806 7E A0 07 03 61 11 73 E0 7E
RX: 16:56:05.853 7E A0 12 61 03 70 1A D9 3A A6 DD 5C FD 6F 2F 8A 7C 86 61 7E
TX: 16:56:05.854 7E A0 26 03 61 36 26 26 E6 E6 00 C8 18 30 00 01 8E A4 04 45 2D B7 36 3D DF 87 B7 3B 4A 06 B6 B5 E4 79 59 52 03 4C 05 7E
RX: 16:56:06.139 7E A8 89 61 03 92 FC 69 E6 E7 00 CC 82 02 DF 30 00 00 07 2F 89 B7 3E 55 EE 97 53 73 19 86 70 3D C7 E6 F2 D2 AC CC 78 AB 59 DC A1 09 49 21 E1 F7 40 83 F4 63 25 35 30 A7 7B A2 47 77 3A 9D 0E FE 18 33 BD 4E EC 93 AD 2C 9D B9 78 14 52 30 BF 52 4E 82 8B 32 76 52 4D 02 7F 23 0E 96 29 BB 58 16 36 43 01 6A DE A2 23 ED C7 13 32 74 B0 06 47 3D A5 2E 09 2F 68 D3 9A 9E A5 04 B2 0F CD 05 E2 E5 ED 15 EB DE 51 3A 42 96 49 4F 7E
TX: 16:56:06.142 7E A0 07 03 61 51 77 A2 7E
RX: 16:56:06.315 7E A8 89 61 03 94 CA 0C CF 35 BF 36 2E A2 FF B6 51 C9 DD C8 91 F6 F5 09 50 46 44 4C 45 E8 52 0A 07 59 66 01 00 43 C9 27 E3 DE DE CE 5F 33 35 1F 54 4D AD 8D F7 CC 97 D6 D9 9B 65 8F 74 15 A5 F1 5A AE 2E D1 72 35 71 05 74 0C 63 18 16 A4 21 F9 34 4D D1 67 A2 44 34 54 5E C1 A3 D9 7F 58 A9 57 5F 87 8B 9F B9 78 68 AB 31 73 8E 34 E6 A7 80 16 5C 62 BC 0D F0 48 00 23 25 6C 85 69 E7 D9 0F 4A F8 31 94 A5 03 81 D5 0A 79 8A 7E
TX: 16:56:06.317 7E A0 07 03 61 71 75 83 7E
RX: 16:56:06.492 7E A8 89 61 03 96 D8 2F D1 D7 E2 84 25 11 A9 B9 1C 7B C2 A2 E9 F6 15 83 23 59 59 56 82 5D 18 69 F7 AC 06 FE 18 45 27 DE CD BE 8C 86 F8 06 81 4B CE AD 32 37 0F 83 06 A2 6B 15 0D 1D 70 DD 11 F9 A8 BC 11 BA 78 4D D1 2D DC 30 1C 46 B0 6B 4F 07 3B 44 F5 A0 A0 2F E7 68 B1 9E C1 6B 00 4C 6D 01 92 4D A4 D1 5F 89 58 17 E3 6D 37 00 08 2E 71 CF 81 66 D9 04 41 C9 EA 14 C8 AB 27 61 58 3F 40 95 15 25 EF 46 F9 ED 88 58 65 91 7E
TX: 16:56:06.494 7E A0 07 03 61 91 7B 64 7E
RX: 16:56:06.667 7E A8 89 61 03 98 A6 C6 CB 46 C1 10 A2 C8 6B 35 7B A2 DD 1B 69 01 77 E2 8C 85 96 FC ED DE 53 DC E7 B2 02 47 26 87 BD 26 AF B9 7C 1D 43 40 C5 F4 69 57 6A 8E 43 D9 5E 1F 2C B4 C4 CB BC CE 90 63 1B 05 51 08 DF 03 21 9A F0 AD 61 B8 6A DB C9 53 4B 54 76 0E AC CA 59 12 3D 53 73 17 8A 08 EB 49 0A C1 86 06 97 84 77 28 1F A9 BF EC 7E 06 C4 AA D5 76 51 13 B0 82 00 42 CA EC 7E 93 8A 7B 08 22 4E CA 8A AE 53 DB F0 82 31 4F 7E
TX: 16:56:06.669 7E A0 07 03 61 B1 79 45 7E
RX: 16:56:06.828 7E A8 89 61 03 9A B4 E5 1A 1D 6A 86 CB B0 A4 16 4A A4 9D 8B 9D 3C BA 88 DA 5F 5B 0B 03 C3 F6 63 31 7E 91 D4 7C 9F B8 F7 C6 39 51 72 F4 9C 3B 11 9E EC 74 A2 BE 34 E2 22 BF 95 81 8F 37 A6 EE 35 9F EA 1A 1A F7 B8 3F B0 24 C5 5C 2F 82 05 3A 52 07 89 BF BF AC 1A E8 9A BF 08 F3 F9 52 52 75 FB 76 85 68 9E 6C 14 D8 C5 2C 5D 32 A5 B0 06 84 B9 04 C5 A5 EE 95 9E 41 C7 07 BA 7A AE CA 61 EB 92 89 99 8D 8A 90 63 1F 55 EF DD 7E
TX: 16:56:06.830 7E A0 07 03 61 D1 7F 26 7E
RX: 16:56:06.972 7E A0 6F 61 03 9C B2 25 15 6E D5 57 F4 FE F6 B1 30 9E 32 EF 9C FF 50 2A 14 21 60 68 09 32 83 DC C0 87 4C C3 68 79 5B 36 0C 1F 03 19 97 E3 EE 70 BD 7F 20 80 37 AF 95 79 F7 EF 35 64 A1 A8 7D EE 46 8B FC CE 7E AB CC 62 33 BA 23 25 C3 62 C3 7A D5 08 45 B7 02 23 34 2E E0 D2 DD 2B 17 07 51 D9 B4 1C 90 8A B2 13 B9 6D C3 D2 92 BF 6B D9 57 99 7E
TX: 16:56:06.975 7E A0 26 03 61 F8 54 09 E6 E6 00 C8 18 30 00 01 8E A5 CD 5C B9 5A 8A 71 6A 32 D5 FC 5A C7 B6 69 BE 91 50 20 F6 3F 5E 7E
RX: 16:56:07.259 7E A8 89 61 03 BE 92 82 E6 E7 00 CC 82 02 C9 30 00 00 07 30 7F 9F 48 4A AB 62 DB 55 B9 5F F6 BE 8B 5E 29 8D 85 41 9E BB D5 F5 58 D7 D4 DF 30 AF 79 D4 DF 67 41 32 3B F6 7B B1 85 5F B8 AF 59 C3 0F CD EB B3 E7 67 0D 78 92 7E E5 E2 4D 41 5F 82 22 CF 8A 3A 23 74 C2 B0 2B 43 4C 8A 10 33 29 9E 86 C1 86 72 34 8E 0F BB E5 CF F4 85 FC EA 68 38 98 62 FC 2F 0A 1A EF 0F 09 46 79 B3 B5 0E 56 4F 77 DD 3F 24 5D 5F DF B8 20 F8 7E
TX: 16:56:07.261 7E A0 07 03 61 11 73 E0 7E
RX: 16:56:07.419 7E A8 89 61 03 B0 EC 6B 83 51 3B 34 FF 60 F3 19 E5 B1 F6 68 8C 3B 63 54 7D 3D C9 E4 08 85 47 0C 11 40 22 CC 0C A4 D3 16 9C 08 E1 6C 9C 2F 72 D5 44 DC 9D F7 7E 3B 45 EF 24 F9 06 AC 44 FB 6E 6E 00 52 20 1D 43 C4 6C 92 F2 67 0F A6 9D FF 55 50 6A 6D DC B2 4E 03 51 6F 0E 09 10 BE 83 1A 6C CA A5 E5 F2 2C A3 1E 83 75 FD B8 FE AC 94 AC 18 F5 E8 88 D3 30 23 BA 9B 56 05 6B 35 EF D6 99 53 58 A2 27 B1 6A F4 8E EB 0B 48 15 7E
Hi, Make sure you change the…
Hi,
Make sure you change the client address to 48 and the authentication level to High and set the password. You also need set the block cipher key and authentication key and change Security to AUTHENTICATION_ENCRYPTION.
BR,
Mikko
Hi Sir, Thank you for…
Hi Sir,
Thank you for replying and i am sending the parameters like this below and what ever i am passing the parameter is correct way or not.
byte[] lSystemTitleDLMS = {(byte)0x6C,(byte)0x6E,(byte)0x74,(byte)0x30,(byte)0x30,(byte)0x30,(byte)0x30,(byte)0x30};
client.setClientAddress(48);
client.setServerAddress(1);
client.setAuthentication(Authentication.HIGH);
client.setPassword("1234567890123456");
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS);
System.out.printf("Incremented invocationCounterValueDLMS is %d\n", invocationCounterValueDLMS);
client.getCiphering().setSystemTitle(lSystemTitleDLMS);
client.getCiphering().setAuthenticationKey(GXCommon.hexToBytes("31323334353637383930313233343536"));
client.getCiphering().setBlockCipherKey(GXCommon.hexToBytes("31323334353637383930313233343536"));
client.getCiphering().setSecurity(Security.AUTHENTICATION_ENCRYPTION);
mdevice.setManufacturer("India");
mdevice.setWaitTime(1000);
String aa = mdevice.getManufacturer();
System.out.println("Manufacturer : " + client.getAuthentication());
client.setInterfaceType(InterfaceType.HDLC);
client.setUseLogicalNameReferencing(true);
client.setAutoIncreaseInvokeID(true);
System.out.println("client.getAuthentication().getValue() : " + client.getAuthentication().getValue());
Hi, Have you read the…
Hi,
Have you read the invocation counter from the meter? Is the meter returning an error or what is the problem now?
BR,
Mikko
Sir I am reading WIthout…
Sir I am reading
WIthout authentication and password first sending
SNRM
Response
AARQ
AARE
Read invocation
increment invocation and disconnect
after adding authentication and password below
byte[] lSystemTitleDLMS = {(byte)0x6C,(byte)0x6E,(byte)0x74,(byte)0x30,(byte)0x30,(byte)0x30,(byte)0x30,(byte)0x30};
client.setClientAddress(48);
client.setServerAddress(1);
client.setAuthentication(Authentication.HIGH);
client.setPassword("1234567890123456");
client.getCiphering().setInvocationCounter(invocationCounterValueDLMS);
System.out.printf("Incremented invocationCounterValueDLMS is %d\n", invocationCounterValueDLMS);
client.getCiphering().setSystemTitle(lSystemTitleDLMS);
client.getCiphering().setAuthenticationKey(GXCommon.hexToBytes("31323334353637383930313233343536"));
client.getCiphering().setBlockCipherKey(GXCommon.hexToBytes("31323334353637383930313233343536"));
client.getCiphering().setSecurity(Security.AUTHENTICATION_ENCRYPTION);
mdevice.setManufacturer("India");
mdevice.setWaitTime(1000);
String aa = mdevice.getManufacturer();
System.out.println("Manufacturer : " + client.getAuthentication());
client.setInterfaceType(InterfaceType.HDLC);
client.setUseLogicalNameReferencing(true);
client.setAutoIncreaseInvokeID(true);
System.out.println("client.getAuthentication().getValue() : " + client.getAuthentication().getValue());
SNRM
Response
AARQ
not getting AARE
Hi Sir, I recently posted a…
Hi Sir,
I recently posted a question on the forum regarding ciphered meter authentication. As I have not yet received a response.
I would greatly appreciate any guidance or feedback you could provide because I am new to android development and to understanding the DLMS protocol.
Thank You.
Hi, Get the latest version…
Hi,
Get the latest version. updateFrameCounter is added to Android. You need just set the logical name of invocation counter.
mDevice.setInvocationCounter(LOGICAL_NAME);
BR,
Mikko