I finally solved it. I was facing the same issue where the gateway status in TTN would never change from “disconnected.”
Just to share and possibly help anyone in the same situation, I’ll explain what I did.
My setup: WM1302 module + SenseCAP M1 board + RPi Zero 2W.
The solution was to correctly configure the ‘gateway_ID’ variable in my gateway’s JSON (in my case, ‘global_conf.json.sx1250.us915’).
It turns out that in TTN, there are two fields: ‘Gateway ID’ and ‘Gateway EUI’. Logically, I was copying the ‘Gateway ID’ and pasting it into the ‘gateway_ID’ variable. BUT THIS IS WRONG. For some reason, in order for it to work, I had to copy the value from the ‘Gateway EUI’. them it works… to verify, in TTN, on your gateway’s screen, click on the hamburger button and select ‘download conf_json’, and you’ll see the value used by TTN as “gateway_ID.”
This has been widely called out on the Forum for many years, usually in instances where registering/connecting GW’s fails as above. (Search is your friend). Simply put GW EUI is a ‘unique’ identifier assigned to a specific piece of hardware - often derived (Search again) from host device MAC - especially in the case of e.g. RPi based implementations - or assigned by the producer of the Concentrator card used. In many cases s/w implementors and manufacturers take a lazy approach of describing this as the GW ID - it can be but isnt guaranteed to be such. A lot of early GW firmware builds included this (again esp in case of RPi builds) and it is a common description on the GW side. In the context of TTI/TTN and others GW ID is intented to be an easy to read (by human) GW ‘name’ that allows it to be easily identified when viewing a list of GW’s in a NOC setting - try spotting a specific troublesome or targeted GW in a list where they all show something like EUI-B827EBFFFEABCD, and you have 10, 20, 50, 100 of them! Whereas the TTN Console allows for free form text (with some limits inc character types) limited by your imagination or use case. So a list of GW ID’s where you see GW ID = fredsfarmwestfield, fredsfarmsouthpaddock, sheilassheepshed, forestgwhigh,forestgwvalley, officepark1, officepark2, officepark3, officeparkhq, etc. gets a lot easier! Again discussed at length over the years. My default for community GW’s is usually sponsor-testgwxyz-gwtype-partialpostcode, e.g. g-s3-testgw497-ttig-bl6 etc. (latter not real!)
When Registering the GW each major field has an explanatory ‘help’ bubble (?) as show below which is always worth reading/checking if unsure…
One wrinkle is that if you provide a GW EUI (say jklmnopq) when registering the Console will ‘helpfully’ suggest a GW ID of the form “eui-jklmnopq” which many just accept not realising they can override/overtype with their own choice (often a problem when folk delete a gw and re-instate same (no usually needed and generally to be avoided if posible - another story!)).