Hi,
I'm running a Dragino gateway (Armbian, armv7l) with chirpstack-mqtt-forwarder 4.4.0 and a local Mosquitto 2.0.21 bridging to a remote ChirpStack v4 server over WireGuard.
Architecture:
SX1302 concentrator
↓ Semtech UDP :1700
chirpstack-mqtt-forwarder 4.4.0
↓ MQTT (localhost:1883)
Mosquitto 2.0.21 (local, bridge mode)
↓ bridge over WireGuard
Mosquitto 2.0.22 (VPS) → ChirpStack v4.18
Problem: during internet outages, roughly 33-62% of uplinks are lost and never delivered after reconnection, despite a bridge configuration built for buffering.
Bridge config:
queue_qos0_messages true
max_queued_messages 100000
cleansession false
local_cleansession false
topic eu868/# out 1
topic eu868/# in 1
max_inflight_messages 1
restart_timeout 5 30
What I verified with logs during outages:
- Frames are correctly received by the local broker: Received PUBLISH from <gw_id> (d0, q0, r0, m0, 'eu868/gateway/.../event/up', ...)
- Note the q0 — the forwarder publishes at QoS 0
- After reconnection, only a fraction of the queued frames appear as "Sending PUBLISH to local...-bridge"
What I already tested without success:
- Upgraded Mosquitto 2.0.11 → 2.0.21 (no measurable change over a 10h outage test)
- Explicit client_id in the forwarder config
- Direct connection (forwarder → remote broker, bypassing local Mosquitto) — worse, no buffering at all, only "MQTT error: Network unreachable" repeated every second with no queued replay
- AT+CFM=0 on the end device (this one did help: 59% → 33% loss)
My question: since queue_qos0_messages is documented as non-standard and QoS 0 has no delivery guarantee, is there any way to make chirpstack-mqtt-forwarder publish at QoS 1? I could not find a qos option in the configuration reference.
If not, is there a recommended approach for reliable store-and-forward on the gateway during long outages? My use case is water metering where gaps create visible artifacts in consumption graphs.
Thanks a lot for any pointers.