Error: device-session does not exist or invalid fcnt or mic

Dear LoraServer

I finally connect arduino+lorahat device as end node to loraserver using LMIC Libarary,

now i got the problem, when i try restart/reset the arduino, i cant connect again to loraserver
i got error message like this :
Nov 14 05:28:29 server loraserver[1794]: time=“2017-11-14T05:28:29-05:00” level=error msg=“processing rx packet error: get node-session error: node-session does not exist or invalid fcnt or mic” data_base64=QBER3QCALAAB1OtpIs8eqDXYSh7kiDdp

i read some source, that i have to delete the node from appserver and add it again, after that the device connect again, but when i try to restart the device, the problem came back with the same error,
can anyone help me to solve this?

there is a timestamp when i restart device and add it again later,

Are you using ABP? Then probably the issue is that by restart/resetting the Arduino, you also reset the frame-counters at the device. Because of this, LoRa Server rejects these frames as it could as well be a replay-attack. To work around this, you could check the Disable frame-counter validation box (on ABP activation).

1 Like

Thanks @brocaar, I solve this problem… :slight_smile:

What need to be step to solve this kind of issue if we are using OTAA node?

Same issue here. Using ABP too. Disabled frame counter, created a new node…

I always get device session error :frowning:

Probably then your keys are setup incorrectly. A common mistake is the byte order of the keys. E.g. in some cases you have to configure them in the reverse order.

Yes I have already tried to reverse the order of my keys, still emits device-session error. Not too sure where else to look at.

Can you help in my case?
I’m using a simulation of a gateway to send packages.
I’m using the VirtualBox Machine which send me to my loraserver(my local machine) with my pc IP address in MQTT, but I also see the same error:

jul 18 10:36:28 diogo loraserver[3971]: time=“2018-07-18T10:36:28+01:00” level=info msg=“backend/gateway: rx packet received”
jul 18 10:36:29 diogo loraserver[3971]: time=“2018-07-18T10:36:29+01:00” level=error msg=“processing rx packet error: get device-session error: device-session does not exist or invalid fcnt or mic” data_base64=“QIMrJgcAAAAByP/0r6/DmDEfUWU=”


teste@teste:~/loraserver-device-sim/example$ go run uplink_example.go
Connection established.

1 Like

Hi Brocaar, I have already checked the “Disable frame-counter validation” but still getting this error, I am using the latest test release. I am using LoPy as node. Any other workaround ?

Thank you,


You can split the error in three parts:

  • device-session does not exist: no such activation exists for the used DevAddr
  • invalid fcnt: the frame-counter did not increment (e.g. replay attack)
  • invalid […] mic: the message integrity code was invalid, meaning that your session-keys are setup incorrect

In the latest case, make sure that some devices use different byte orders when entering the keys. For the LoPy, you can find some examples here:


Hi brocaar, thank you for your answer, I found my issue, it was the selected LoRaWAN version for my device that was incorrect, how dumb of me.

Hello everyone !

Unfortunately, I got the same error: e[31mERROe[0m[3402] processing rx packet error: get device-session error: device-session does not exist or invalid fcnt or mic e[31mdata_base64e[0m=gIMaASaAAQAEbtljyaCtnLD5.

I think it is related to the session keys.

Can you help me to understand if I filled them correctly? Thanks a lot !

Hi ,

Does any one get the same error after leave the node(device) for long time(about two month) without power then restart it ? I meet this situation for many times, every time I need to delete this device(Using ABP. Disabled frame counter) and recreate it again.Does any one know how to fix this issue?Thanks a lot!

If you are in ABP, FCnt are not synchronized between node and server. It is normal (security reason : replay attack). So yeah, you have to delete and recreate the node each time. Or use OTAA.

Hello, @Clement @shuangcai_huang @lcer93 @Bnjroos
Anyone can help me for simulation message of device join

Join Request Payload
gateway/48b4866ad7b06b20/rx: {"phyPayload":"AAAAAAAAAAAA4J3O73Hi6w0CEie8sdw=","rxInfo":{"board":0,"antenna":0,"channel":2,"codeRate":"4/5","crcStatus":1,"dataRate":{"bandwidth":125,"modulation":"LORA","spreadFactor":12},"frequency":869525000,"loRaSNR":7,"mac":"48b4866ad7b06b20","rfChain":1,"rssi": -57,"size":23,"time":"2018-10-16T16:24:00.222434Z","timestamp":3036224484}}

gateway/48b4866ad7b06b20/tx : {"token":45812,"txInfo":{"mac":"48b4866ad7b06b20","immediately":false,"timestamp":3041224484,"frequency":869525000,"power":14,"dataRate":{"modulation":"LORA","spreadFactor":12,"bandwidth":125},"codeRate":"4/5","iPol":true,"board":0,"antenna":0},"phyPayload":"ICkFg+QuoPiouhpFcihHK6s="}

LoraServer Logs

time="2018-10-17T11:19:11+05:30" level=info msg="gateway/mqtt: uplink frame received"
time="2018-10-17T11:19:11+05:30" level=info msg="packet(s) collected" dev_eui=0debe271efce9de0 gw_count=1 gw_ids=48b4866ad7b06b20 mtype=JoinRequest
time="2018-10-17T11:19:11+05:30" level=info msg="device-queue flushed" dev_eui=0debe271efce9de0
time="2018-10-17T11:19:11+05:30" level=info msg="device-session saved" dev_addr=0157e777 dev_eui=0debe271efce9de0
time="2018-10-17T11:19:11+05:30" level=info msg="device-activation created" dev_eui=0debe271efce9de0 id=32
time="2018-10-17T11:19:11+05:30" level=info msg="gateway/mqtt: publishing downlink frame" qos=0 topic=gateway/48b4866ad7b06b20/tx
time="2018-10-17T11:19:11+05:30" level=info msg="downlink-frames saved" dev_eui=0debe271efce9de0 token=45812

Lora App Server Log

time="2018-10-17T11:19:11+05:30" level=info msg="js: request received" message_type=JoinReq receiver_id=0000000000000000 sender_id=000000 transaction_id=4044979917
time="2018-10-17T11:19:11+05:30" level=info msg="device-keys updated" dev_eui=0debe271efce9de0
time="2018-10-17T11:19:11+05:30" level=info msg="js: sending response" message_type=JoinAns receiver_id=000000 result_code=Success sender_id=0000000000000000 transaction_id=4044979917

First payload
gateway/48b4866ad7b06b20/rx : {"phyPayload":"QNLjGAEgAwEBdGVzdO7u7u4=","rxInfo":{"board":0,"antenna":0,"channel":1,"codeRate":"4/5", "crcStatus": 1,"dataRate":{"bandwidth":125,"modulation":"LORA","spreadFactor":12,"bitrate":0},"frequency":868300000,"loRaSnr":7,"mac":"48b4866ad7b06b20","rfChain":1,"rssi":-57,"size":23,"time":"2018-10-17T10:42:13+05:30","timestamp":1539772933}}

LoraServer logs shows invalid fcnt or mic

time="2018-10-17T11:22:51+05:30" level=info msg="gateway/mqtt: uplink frame received"
time="2018-10-17T11:22:52+05:30" level=error msg="processing uplink frame error" data_base64="QNLjGAEgAwEBdGVzdO7u7u4=" error="get device-session error: device-session does not exist or invalid fcnt or mic"

I am trying to Join Device.

Anyone can help me please for simulation message…


1 Like

I do not know if it already been discussed, but since I have not found anything, I think that it is worth to mention that the keys that you insert on the web page are case sensitive, even though they are always reported as lowercase once you click on “(RE)Activate Device”

For example if your network session key is “2B7E151628AEA2A6ABF7158809CF4F4C” (stored in your endnode) you have to insert it with uppercase letters. Later, the loraserver web page will show you the same key but lowercase.

So, if you reactivate the device (i.e., to reset frame counter), remember to change the key to uppercase.

Hope this helps :slight_smile:

Hello, I built it with docker-compose, and now I want to ask, I use a third-party client connection MQTT data is reported every minute, the data is normal, but on the appserver data is sometimes normal, sometimes abnormal, because the following figure:

device-session does not exist or invalid fcnt or mic

I have tested it according to your method, but there are still problems, so can you help me?

That is not an error. You’ll see the activation as soon as the device sends the first uplink. The network-server signals the application-session key on the first uplink to the application-server.

This is intended as in LoRaWAN 1.1 there is also a rejoin-request after which the network-server keeps using the old security context until the device sends the first uplink using the new keys.

First of all, thank you for your reply, but the data on the web interface is intermittent, as long as the “get device-session error: device-session does not exist or invalid fcnt or mic” appears, the data will be one less.


are you simulating payload?