I think the subject is already the complete question:
Who sets the powe value in a packet forwarder JSON downstream data packet?
See here:
Is it the node or the gateway that received the join request or the TTN backend?
In my case it’s probably the response to a join request which sets a value not supported by the gateway (Packet REJECTED, unsupported RF power for TX - 24), and therefore the node never joins.
The packet forwarder config files contain the list of the supported tx power values. There should be a sequence of the records like this one:
“tx_lut_13”: {
/* TX gain table, index 13 */
“pa_gain”: 3,
“mix_gain”: 11, “rf_power”: 25,
“dig_gain”: 0
},
So you can either edit these records or change the value of antenna gain field.
Some packet forwarders require an exact match for power (keep in mind the real power also uses antenna gain in a calculation). Others will match to the nearest lower value configured.
I have spent the last week tracking down why a packet forwarder was dropping packets, leading to unreliable operation and just came across this discussion
I was using code that expected a match and believe this is unintended
The Packet Forwarder performs the first level of error checking and drops a packet if the requested power does not match one of the Tx_lut entries in global_conf.json
if it passes that test the packet is sent to the Lora_HAL code to transmit the packet using the SX1301 chip. Now this code works another way, it steps down the Tx_lut table until it finds a power setting =< the requested power.
So in the resultant compiled code we have two different sets of logic.
I came across this as the TTN server was requesting powe = +24dBm and this value is not in the table, there is an entry for +23dBm and the next for +25dBm but nothing at +24dBm.
(@dermatthias - this is exactly the problem you reported and why its dropping the packet)
Also found problem can be made worse depending on the Antenna Gain set in the config file
Take a look at the sources for MP forwarder and you will see it addresses the issue by finding the closest match with lower power to avoid exceeding the requested power. The same (or equivalent) code might be in the semtech reference implementation these days, I haven’t checked recently.
I was working on the understanding the ETSI limit is +27dBm and the LoraWan specification, as outlined in the Regional Parameters document, limited power to +16dBm.
One thing that I still could not research is how the “powe” value is set. I know that the answer can be found in the source of of TTN (v2), but it’s not easy to wade through an unknown code base.
Someone with knowlegde on this topic can help out?
The power is set based on the region and the receive window used. Again, use the source and spend 5 minutes searching for the word “Power”. You are looking at downlink packets so it is not exactly hard to find.
After re-reading the specification a couple of times I am under the impression the 16dBm limit is meant for nodes (uplink), not for gateways. However the specification does not clearly state this and might be read to mean gateways need to limit to 16dBm as well.
The TTN code is quite clean and uses 27 for EU RX2.
I’m having also issues with different gateways using the Semtech packet forwarder due to a missing LUT entry for 24 dBm. How to solve this issue? Change the entry for 25 dBm to 24 dBm or decrease all entries above 23 dBm by 1 dBm? Or is it possible to add one more LUT entry or is it limited to 16 entries?
Possible solution: Update the software to a packet forwarder that handles these cases.
Patching the Semtech reference forwarder is simple if you are able to build the software yourself. In other cases, complain at your vendor that the software can’t handle this properly.