-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Server not responding to device sending FCtrl.ADR=true, should send LinkADRReq with faster DataRate & FCtrl.ADR=true #463
Comments
Here is the console JSON converted to CSV with some extra columns |
This is a typical join sequence on TTS. The join happens on SF12, and very soon the SF gets reduced via the "Link ADR" messages eg. |
I'm making sense of this now. On The Things Stack (TTS) the device is shifted to SF7 because it first asks for ADR in the first uplink FCtrl, then the server responds with a LinkADRReq DR=SF7 in the following downlink FOpts. On Helium, I can't see the full packet to get FCtrl (#464), but I'm assuming it is the same as on TTS, note FCtrl.ADR = true In the downlink, Helium responds with FCtrl.ADR = false, FOpts = NULL So Helium simply isn't fulfilling the request by the device to have its DR adjusted. Also see my decoding here https://docs.google.com/spreadsheets/d/11D7PxIv61O-DvIyuwxCzw75WMS4yijNYqSUFjJBME6A/edit#gid=0 |
This issue is business critical for me, our product release is largely waiting on it. |
@buzzware - Check router_device_worker.erl:2027 I'm not sure how Console reconciles multiple labels with conflicting settings. Please provide your Device ID (ex. 3483050b-284d-47e2-8eda-e087fc03a753). In the spreadsheet row 14 says "uplink" but you've linked to a downlink packet. Can you double-check your packet decodes? |
I've only had one label applied at a time to my devices, and that profile has ADR on.
The devices I was using are : ec040720-d3ca-47ef-bf4c-03b48bb8a5fc
Yes, that was because I was decoding the payload, not the whole raw packet. Thanks for your attention to this. |
The end-device on the Uplink sets the ADR bit. On the Downlink Ack we must (per the spec) also set the ADR bit to mirror the setting on the Uplink. The spec allows the LNS leeway on setting the ADR bit, so this is not an entirely black & white issue fix. If the Network temporarily cannot estimate the best data rate owing to rapid changes of the radio channel, it clears the ADR bit and thus signals the end-device that the end-device should rely on it's own behavior heuristics, i.e. usually set maximum power. Our LNS code is probably not that smart yet. @buzzware - Thanks for your thorough investigation and bug report |
@mikev thanks for your attention to this. |
@buzzware - Possibly you missed my code commit. The issue should be fixed now. The change committed will set the ADR bit in all cases now. Can you please test and verify? Thanks. |
Yes, it is now returning FCtrl.ADR=true, but that is the only change and there are two things here. |
Update: Helium is sending LinkADRReq eventually. I need to test this more - it wanders around different SFs and doesn't get to SF7. I will test and raise another issue if required. |
I have a third party node which I can only configure its EUIs, OTAA/ABP and cause it to rejoin. It is in the same room, or within 50 meters of the Sensecap and TTS gateways.
It works fine on TTN/TTS, configured as AU915 sideband 2, LoRaWAN 1.0.3. It joins on SF12 then within a few messages it shifts to SF7 via ADR.
However on Helium it joins with SF7 then uplinks in SF12, which wastes energy at an unacceptable level.
Each uplink is normally repeated with a 3 second gap - perhaps a separate issue, that may be caused/made worse by SF12 and so I am focussing on fixing the SF first.
I have configured the profile for the device, with ADR and CF enabled, then caused it to rejoin. This doesn't change the behaviour.
I then tried decoding the Join-Accept packets, and found that TTS was specifying a CFList and Helium was not.
Then I tried looking into the router source, and found the following :
Please let me know if there is anything I can do to test changes. I don't have Erlang experience, but have deep experience in other more mainstream languages. This is critical for us to use Helium for our startup.
The text was updated successfully, but these errors were encountered: