I am using a RAK811 and RAK7249 gatway with built in server. I am just curious,on my sent/receive, why does my transmission always states it is ‘unconfirmed’? What is the difference if it is ‘confirmed’ or ‘unconfirmed’? How does the transmission be classified as confirmed?
Unconfirmed data is just “thrown out there to hope for the best” - it might be received, or it might not.
In contrast a confirmed uplink requests that the network server send an acknowledgement back through the gateway. If the ack is not received, the packet will be sent again, up to several times.
But there are two problems with this idea:
First, downlinks are very “expensive” in that while a gateway can be receiving up to eight signals at once, once it starts transmitting it entirely ceases receiving at all.
Additional there are some design issues with the acknowledgement protocol. If a gateway actually does hear an uplink, the network server will tell it to send an ack in reply. But if the node for some reason doesn’t hear that ack, it will think the uplink was not received, and resend it - with the same value of the frame counter. Because the network has already seen that value of the frame counter, it will ignore this re-send and not send an ack - ever. The result is that if you ever miss an ack, you’ll re-send that packet until giving up. This is very inefficient, especially as the data you are trying to send to a network server now determined to ignore it is probably becoming more and more out-of-date anyway.
For most purposes, instead of using confirmed uplinks, it is much better to just send newer measurement data in place of the old. If your network is small, you may be able to afford to have something plugged in on the application side of the server that generates application level replies.
But generally speaking, LoRaWAN only works when operated “uplink-mostly” - if the rate of downlinks becomes anywhere close to that of uplinks, the system will start to perform poorly as a result of interfering with itself.
A followup question, I am trying to interface arduino and RAK811 to send data. Regarding the payload sent by RAK811, in what format is the data sent? is it HexString? So if I want to send my decimal value 10 (hex A), should first convert the decimal value 10 to Hex A at my arduino, then attach the Hex value in the command at+send?
Sorry for late reply.
Actually, RAK811 send LoRa packet in Hex format, if you use AT command to send the data from UART into RAK811, it must be a string and looks like a “Hexstring”, then it will be transmitted to Hex data automatically by default.
For example, if you send “at+send=lora:2:1234567890” to RAK811 through UART, RAK811 will send out a Hex packet who’s payload is 0x1234567890.
So I need to encode the data to be send by converting it to the hex format in my arduino then send it using RAK811. Then the data will be received by the gateway and should be decoded to get the actual data. Am i right? Also, I am using RAK7249 built in server, is it possible to decode the hex data there?
RAK7249 built in lora server can receive hex data surely.
For example if you want the lora server receive a value 0x1234567890 in LoRaWAN port 2, you should send the following AT command from your Arduino:
at+send=lora:2:1234567890
Please note, this AT command is a String.
You can transmit the data from built-in loraserver to another application platform for decoding through MQTT. For loraserver, it can only check the receive packet in the webpage.