Network Server / Application Sever Join API

Hi Folks,

When the Application server is taking the role of the Join Server (the default in Chirpstack as I understand it) is that interface also using gRPC, and if so where is the protobuf definition ?

The as/as.proto file seems to only cover the uplink / downlink type messages that come after a successful join.


No, it exposes a Join Server API endpoint as specified by the LoRaWAN Backend Interfaces specification.

1 Like

Ok Thanks. Where does the code for the Join server live within the application-server repo ?

I have a customer who’s interested in getting events from failed join requests, and I was going to do some poking to see what might be possible (I’d rather not pick this up from the log files if I can avoid it).

These are exposed in the data tab of the device as error events, or as error events through the MQTT, HTTP, … integrations.

1 Like

Oh Thanks, that’ll help - I had looked at the description of the various event types but error is described as:
"Event published in case of an error related to payload scheduling or handling. E.g. in case when a payload could not be scheduled as it exceeds the maximum payload-size.

So do other errors that might indicate a security concern (invalid MIC, invalid nonce, etc also get published as error events, even if they are things that would get picked up by the Network server rather than the Application Server ?

Correct, these are published too.

Hi Brocaar,

I’ve been trying to force error join errors so I can work on capturing the error events, but although I can make the join fail I don’t see any error events.

I get the join event when the join is successful, but per the documentation this only seems to be generated during the first uplink message. In the case of a failed join the device of course never sends an uplink, so if that’s where the join failure would be generated I don’t think I ever trigger that.

Looking through the application server source the only references I can see to ErrorType_OTAA is in the internal/api/as/as.go HandleError() method - I can;e see anything that actually generated an error event of this type.

Am I missing something obvious ?