End-node not getting join-accept from gateway

Hello, I am relatively new and have hesitated posted my questions in-case there already was an obvious answer. I have a project where we have an LoRaWAN end-node “B-L072Z-LRWAN1”, which transmits join requests (and data) towards a gateway, which is the SDR (USRP b210). Together, they communicate with a local python server that further goes to chirpstack-gateway-bridge and finally chirpstack. On LoRaWAN frames the join requests get spammed for an eternity without the node ever getting a join accept.

The issue is that we know that chirpstack returns a join accept because of the logs that chirpstack gives out:

Dec 10 16:06:07 asleirdal chirpstack[84434]: 
    2024-12-10T15:06:07.191753Z  INFO up{deduplication_id=c9c6c6bf-75d9-4508-a229-1b5464070168}:
        join_request{dev_eui="c10fa6f5f67a26fa"}: 
        chirpstack::storage::device_keys: Device-nonce validated, join-nonce incremented and stored 
        dev_eui=c10fa6f5f67a26fa dev_nonce=59102

Dec 10 16:06:07 asleirdal chirpstack[84434]: 
    2024-12-10T15:06:07.192354Z  INFO up{deduplication_id=c9c6c6bf-75d9-4508-a229-1b5464070168}:
        join_request{dev_eui="c10fa6f5f67a26fa"}: 
        chirpstack::storage::device_queue: Device queue flushed 
        dev_eui=c10fa6f5f67a26fa count=0

Dec 10 16:06:07 asleirdal chirpstack[84434]: 
    2024-12-10T15:06:07.194416Z  INFO up{deduplication_id=c9c6c6bf-75d9-4508-a229-1b5464070168}:
        join_request{dev_eui="c10fa6f5f67a26fa"}: 
        chirpstack::storage::device: Device partially updated 
        dev_eui=c10fa6f5f67a26fa

Dec 10 16:06:07 asleirdal chirpstack[84434]: 
    2024-12-10T15:06:07.194744Z  INFO up{deduplication_id=c9c6c6bf-75d9-4508-a229-1b5464070168}:
        join_request{dev_eui="c10fa6f5f67a26fa"}:
        join_accept{downlink_id=3896532843}: 
        chirpstack::storage::downlink_frame: Downlink-frame saved 
        downlink_id=3896532843

Dec 10 16:06:07 asleirdal chirpstack[84434]: 
    2024-12-10T15:06:07.194898Z  INFO up{deduplication_id=c9c6c6bf-75d9-4508-a229-1b5464070168}:
        join_request{dev_eui="c10fa6f5f67a26fa"}:
        join_accept{downlink_id=3896532843}: 
        chirpstack::gateway::backend::mqtt: Sending downlink frame 
        region_id=eu868 gateway_id=5680ea3344aeda16 
        topic=eu868/gateway/5680ea3344aeda16/command/down json=false

Dec 10 16:06:07 asleirdal chirpstack[84434]: 
    2024-12-10T15:06:07.195442Z  INFO chirpstack::integration::mqtt: Publishing event 
    topic=application/678ae5f3-9e8f-48b6-b687-5ce0f4c6af20/device/c10fa6f5f67a26fa/event/join

It sends a downlink frame, which is handled by the python server, which is pulled with zmq to the SDR, where it finally broadcasts it to the sink with this setup:

And I can see the frames being visible on the waterfall sink, and ive tried a lot of different settings from sample rate, gain to the settings from the SDR itself. But I wonder if there is something more obvious to your eyes than mine that might be the issue, I am very new to this, but we do think we have set up Chirpstack correctly, and that the final part where it is supposed to accept the join request is where it fails.

And we also do think we hit the receive window, and tried adjusting it up and down. It basically starts transmitting around the time the receive window opens up (in which is ~0.2 seconds).


(ignore the frequency numbers, they are not the real values of the frequency itself)

I apologize if this has been asked to death, but I am at my wits end and been searching and trying out different solutions for ages without coming any further. Is there any suggestions on what I should try next (if I haven’t already), I appreciate any thoughts that are given and understand if its too big of a mess to dive into to figure out the real issues. Thank you very much.

Off topic: join requests every 10 seconds are way too often.

Are you certain your device-profile is configured correctly?

Typically this issue of join-looping happens when:

  • The device profile is configured wrong
  • Your region isn’t enabled in the Chirpstack.toml
  • Your Gateway Bridge / MQTT Forwarder is sending the wrong topic-prefixes

Seeing as you are using the default eu868 the second two shouldn’t be an issue, but the device profile having the wrong MAC versions or similar could cause this.

How do you find out which MAC version is supposed to be used? Because in default, we used v1.1.0 since we saw the sameish number on the LoRaWAN expansion.

Either way, I tried all from v1.0 → v1.1.0 with both A and B revisions just to be sure, didn’t seem to help but thank you anyways. And @clavisound, yes its too often, but for now its just a testing scenario to see if we can get them to join together.

The MAC version is just whatever version of the LoRaWAN specifications your device follows. Looks like for your device it is 1.0.3, try that for MAC and RP002-1.0.3 for regional parameters revision.

I gave this a try, double checked with both SF7 and SF12 along, while also checking the receive windows just in case. It is still struggling to join together unfortunately. Thanks for the suggestion anyhow :smiley:

Does the SDR transmit a preamble and syncword?
Do you have a gw with Semtech sx130x chips to compare to?

2 Likes

I thought I already did this, but lo and behold, my sync words were set to 18 and not 0x34 and now it joins as expected. Thank you so much, this could’ve bugged me for months without me realising the core issue. It should’ve been obvious, but its hard to pinpoint these issues, especially with this setup.