Device Only Sends JoinRequest and Receives JoinAccept, No Uplink Data

My LoRaWAN devices successfully perform the “JoinRequest” and receive a “JoinAccept”, but they do not send any further uplink data. In the ChirpStack application under device events, I only see "join“ events, and each time a new devAddr is assigned to the device. What is the problem and how can it be solved?

Overview of Components

Main device: Edgebox RPI-200 (based on Raspberry Pi Compute Module 4 (CM4)) running ChirpStack v4.9.0.

LoRaWAN Gateway: Mikrotik Routerboard RBwAPR-2nD&R11e-LoRa8.

Devices: Milesight WS51x (Smart Wall Socket), WT101 (Smart Radiator Thermostat), LR210, and LR260 LoRa Relay Controllers.

Software components:

  • chirpstack 4.9.0
  • chirpstack-gateway-bridge 4.0.11
  • PostgreSQL, Redis, Mosquitto

Key Configuration Details

ChirpStack Configuration (chirpstack.toml)

[postgresql]

    dsn = "postgresql://chirpstack:chirpstack@localhost/chirpstack?sslmode=disable"

[network]

    enabled_regions = ["eu868"]

[integration]

    [integration.mqtt]

    event_topic = "eu868/application/{{application_id}}/device/{{dev_eui}}/event/{{event}}"

    command_topic = "eu868/application/{{application_id}}/device/{{dev_eui}}/command/{{command}}"

    json = true

    server = "tcp://127.0.0.1:1883/"

Region Configuration (region_eu868.toml)

[[regions]]

    id = "eu868"

    description = "EU868"

    common_name = "EU868"

    [regions.gateway.backend]

    enabled = "mqtt"

        [regions.gateway.backend.mqtt]

        topic_prefix = "eu868"

        share_name = "chirpstack"

        server = "tcp://localhost:1883"

    [regions.network]

        installation_margin = 10

        rx_window = 0

        rx1_delay = 5

        rx1_dr_offset = 0

        rx2_dr = 2

        rx2_frequency = 869525000

        downlink_tx_power = -1

        adr_disabled = false

        min_dr = 0

        max_dr = 5

ChirpStack Gateway Bridge Configuration (chirpstack-gateway-bridge.toml)

[backend]

    type = "semtech_udp"

[integration]

    marshaler = "json"

    [integration.mqtt]

        event_topic_template = "eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }}"

        state_topic_template = "eu868/gateway/{{ .GatewayID }}/state/{{ .StateType }}"

        command_topic_template = "eu868/gateway/{{ .GatewayID }}/command/#"

PosgreSQL data

postgres=# \l
                                                                 List of databases
          Name          |         Owner          | Encoding |   Collate   |    Ctype    | Locale Provider
------------------------+------------------------+----------+-------------+-------------+----------------
 chirpstack             | chirpstack             | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | lib  |
 chirpstack_integration | chirpstack_integration | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | libc |
 postgres               | postgres               | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | libc |


chirpstack=# \du
                                          List of roles
       Role name        |                         Attributes                         | Member of
------------------------+------------------------------------------------------------+-----------
 chirpstack             |                                                            | {}
 chirpstack_integration |                                                            | {}
 postgres               | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

chirpstack=# \dx
                                    List of installed extensions
  Name   | Version |   Schema   |                            Description
---------+---------+------------+-------------------------------------------------------------------
 hstore  | 1.8     | public     | data type for storing sets of (key, value) pairs
 pg_trgm | 1.6     | public     | text similarity measurement and index searching based on trigrams
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language

Mikrotik Gateway Configuration (Routerboard RBwAPR)

/iot lora servers add address=172.-.-.- name=edgebox protocol=UDP

/ip ipsec proposal set [ find default=yes ] disabled=yes

/iot lora set 0 antenna=uFL channel-plan=custom disabled=no network=private servers=edgebox

/iot lora channels set 8 spread-factor=SF10

/ip address add address=172.-.-.-/2- interface=ether1 network=172.-.-.0

/ip dhcp-client add interface=ether1

/system clock set time-zone-name=Europe/...

The Issue

  • In ChirpStack (application → device → events), I only see "join“ events, and each time a new devAddr is assigned to the device.
  • In LoRaWAN frames, I see only “JoinRequest” and “JoinAccept”, but no further uplink data.
  • The gateway successfully connects to ChirpStack, and the gateway frames also only show “JoinRequest” and “JoinAccept” (sometimes “UnconfirmedDataUp” appears).
  • Device details such as Device EUI, Join EUI, Application Key, and Gateway ID are all correctly configured.

Device Profile Settings

LoRaWAN MAC version: 1.0.3

Regional parameters revision: B

ADR: Default ADR algorithm (LoRa only)

Expected uplink interval: 300 seconds

Device-status request frequency: 0

RX1 Delay: 5 seconds

OTAA: Enabled

Class-C: Yes

Class-C confirmed downlink timeout: 4 seconds

Frame-counter validation: Disabled

Device Info

ADR Mode: Enabled

Spreading Factor: SF10-DR2

TX Power: TXPower0 (16 dBm)

RX2 Data Rate: DR0 (SF12)

RX2 Frequency: 869525000 Hz

Logs

Chirpstack Logs


Chirpstack Gateway Bridge Logs

I would be very grateful for any help. If additional information is needed, I can provide it. Thanks

Seem to be MQTT issue.
You should double check your MQTT setting.

1 Like

Not so sure but what do you put in MQTT server string?
I saw some special charaters there?

1 Like

Thanks for pointing out the error. I fixed it, but the issue is still happening. In the “Events”, I keep seeing “join” requests with different device addresses. The only change is that now I am getting the data transfer type “tx_ack”. Do you know what might be the issue?
chirpstack logs:


chirpstack-gateway-bridge logs:

Here’s what I’m getting from the gateway in Winbox:

I’m finally receiving uplink messages. In my case, the issue wasn’t with the devices or ChirpStack! The problem was that the gateway network (in Winbox) was set to private instead of public. Once I changed that, the issue was resolved. I’m sharing my current configuration below in case it helps someone else.

chirpstack.toml:

[logging]
  level = "info"
  json = false

[postgresql]
  dsn = "postgres://chirpstack:chirpstack@localhost/chirpstack?sslmode=disable"
  max_open_connections = 10
  min_idle_connections = 0

[redis]
  servers = ["redis://localhost/"]
  cluster = false

[network]
  net_id = "000000"
  enabled_regions = [
    "eu868",
  ]

[api]
  bind = "0.0.0.0:8080"
  secret = "secret-key"

[integration]
  enabled = ["mqtt"]

  [integration.mqtt]
    server="tcp://127.0.0.1:1883/"
    json=true

region_eu868.toml:

[[regions]]
  id = "eu868"
  description = "EU868"
  common_name = "EU868"
  user_info = ""

  [regions.gateway]
    force_gws_private = false

    [regions.gateway.backend]
      enabled = "mqtt"

      [regions.gateway.backend.mqtt]
        topic_prefix = "eu868"
        share_name = "chirpstack"
        server = "tcp://localhost:1883"
        username = ""
        password = ""
        qos = 0
        clean_session = false
        client_id = ""
        keep_alive_interval = "30s"
        ca_cert = ""
        tls_cert = ""
        tls_key = ""

    [[regions.gateway.channels]]
      frequency = 868100000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 868300000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 868500000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 867100000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 867300000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 867500000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 867700000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 867900000
      bandwidth = 125000
      modulation = "LORA"
      spreading_factors = [7, 8, 9, 10, 11, 12]

    [[regions.gateway.channels]]
      frequency = 868300000
      bandwidth = 250000
      modulation = "LORA"
      spreading_factors = [7, 10]

    [[regions.gateway.channels]]
      frequency = 868800000
      bandwidth = 125000
      modulation = "FSK"
      datarate = 50000

  [regions.network]
    installation_margin = 10
    rx_window = 0
    rx1_delay = 1
    rx1_dr_offset = 0
    rx2_dr = 0
    rx2_frequency = 869525000
    rx2_prefer_on_rx1_dr_lt = 0
    rx2_prefer_on_link_budget = false
    downlink_tx_power = -1
    adr_disabled = false
    min_dr = 0
    max_dr = 5

    [regions.network.rejoin_request]
      enabled = false
      max_count_n = 0
      max_time_n = 0

    [regions.network.class_b]
      ping_slot_dr = 3
      ping_slot_frequency = 0

    [[regions.network.extra_channels]]
      frequency = 867100000
      min_dr = 0
      max_dr = 5

    [[regions.network.extra_channels]]
      frequency = 867300000
      min_dr = 0
      max_dr = 5

    [[regions.network.extra_channels]]
      frequency = 867500000
      min_dr = 0
      max_dr = 5

    [[regions.network.extra_channels]]
      frequency = 867700000
      min_dr = 0
      max_dr = 5

    [[regions.network.extra_channels]]
      frequency = 867900000
      min_dr = 0
      max_dr = 5

chirpstack-gateway-bridge.toml:

[general]
log_level=4
log_json=false
log_to_syslog=false

[filters]
net_ids=[
]
join_euis=[
]

[backend]
type="semtech_udp"

  [backend.semtech_udp]
  udp_bind = "0.0.0.0:1700"
  fake_rx_time=false

  [backend.concentratord]
  event_url="ipc:///tmp/concentratord_event"
  command_url="ipc:///tmp/concentratord_command"

  [backend.basic_station]
  bind=":3001"
  tls_cert=""
  tls_key=""
  ca_cert=""
  stats_interval="30s"
  ping_interval="1m0s"
  timesync_interval="0s"
  read_timeout="1m5s"
  write_timeout="1s"
  region="EU868"
  frequency_min=863000000
  frequency_max=870000000

[integration]
marshaler="protobuf"

  [integration.mqtt]
  event_topic_template="eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }}"
  state_topic_template="gateway/{{ .GatewayID }}/state/{{ .StateType }}"
  command_topic_template="eu868/gateway/{{ .GatewayID }}/command/#"
  state_retained=true
  keep_alive="30s"
  max_reconnect_interval="1m0s"
  terminate_on_connect_error=false

  [integration.mqtt.auth]
  type="generic"

    [integration.mqtt.auth.generic]
    servers=[
      "tcp://127.0.0.1:1883",
    ]
    username=""
    password=""
    qos=0
    clean_session=true
    client_id=""
    ca_cert=""
    tls_cert=""
    tls_key=""

    [integration.mqtt.auth.gcp_cloud_iot_core]
    server="ssl://mqtt.googleapis.com:8883"
    device_id=""
    project_id=""
    cloud_region=""
    registry_id=""
    jwt_expiration="24h0m0s"
    jwt_key_file=""

    [integration.mqtt.auth.azure_iot_hub]
    device_connection_string=""
    sas_token_expiration="24h0m0s"
    device_id=""
    hostname=""
    tls_cert=""
    tls_key=""

[metrics]

  [metrics.prometheus]
  endpoint_enabled=false
  bind=""

[meta_data]

  [meta_data.static]

  [meta_data.dynamic]
  execution_interval="1m0s"
  max_execution_duration="1s"
  split_delimiter="="

  [meta_data.dynamic.commands]

[commands]

/etc/mosquitto/mosquitto.conf:

pid_file /run/mosquitto/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

listener 1883 0.0.0.0

allow_anonymous true
log_type all
connection_messages true
log_timestamp true
1 Like

Well, we dont have that screenshot.
Btw, enjoy.