The Things Stack Network Server and Application Server can use LoRaWAN Backend Interfaces 1.0 and 1.1 with LoRaWAN Join Servers.
The Things Stack reads configuration from a file system. The root should contain
config.yml, which contains Join Servers.
join-servers: - file: './path/js.yml' # relative path to a file containing Join Server configuration components: ['as', 'ns'] # optional selector for components (new in 3.21.0) join-euis: # list of Join EUI prefixes the Join Server should handle - '11AA000000000000/16' # in this example, the first 16 bits, so all JoinEUIs starting with 11AA
All paths are relative to the
config.yml file they are defined in.
The Things Stack Network Server always first tries the cluster-local Join Server. If the cluster-local Join Server does not accept the join-request, a Join Server is contacted via the LoRaWAN Backend Interfaces interoperability.
JoinEUI prefixes overlap, the most specific prefix takes precedence.
0000000000000000/0 prefix matches all
JoinEUIs. Use this prefix if you wish to define a Join Server interoperability configuration for all other join-requests. For example:
join-servers: - file: './fallback/js.yml' join-euis: - '0000000000000000/0'
The Join Server configuration provides means to configure how the components interact with the Join Server. The configuration supports multiple options:
scheme: 'https' # URL scheme. Defaults to https fqdn: 'thethings.example' # FQDN of the Join Server port: 443 # port to connect at. Defaults to 443 protocol: 'BI1.0' # Backend Interfaces protocol to use (BI1.0 or BI1.1) paths: # custom URI paths to use for various requests. Defaults to / join: 'some/path' # the URI path to use for JoinReq rejoin: 'some/other/path' # the URI path to use for RejoinReq app-s-key: 'other/path' # the URI path to use for AppSKeyReq home-ns: 'somepath' # the URI path to use for HomeNSReq sender-ns-id: '1122334455667788' # Backend Interfaces 1.1 NSID basic-auth: # HTTP Basic Authentication (optional) username: 'user' # HTTP Basic username password: 'secret' # HTTP Basic password tls: # TLS configuration to use (optional) source: 'file' # TLS client certificate source (file or key-vault) root-ca: 'path/to/clientca.pem' # path to CA file to verify TLS server certificate (optional) certificate: 'path/to/clientcert.pem' # path to TLS client certificate key: 'path/to/clientkey.pem' # path to TLS client key headers: # HTTP headers to send, defined as key-value map Some-Header: 'SomeValue'
tls.source is set to
key-vault, The Things Stack uses its Key Vault configuration to load the TLS client certificate.
Interoperability with The Things Join Server
The Things Join Server is a stand-alone LoRaWAN Join Server that can be deployed by device makers, distributors and integrators.
An example interoperability repository supporting The Things Join Server operated by The Things Industries could look like this:
# config.yml join-servers: ... - file: './tti/ns-js.yml' components: ['ns'] join-euis: - 'EC656E0000000000/24' - file: './tti/as-js.yml' components: ['as'] join-euis: - 'EC656E0000000000/24' ...
# tti/ns-js.yml fqdn: 'join.cloud.thethings.industries' protocol: 'BI1.1' sender-ns-id: 'ABCDEF0000000001' tls: source: 'key-vault'
# tti/as-js.yml fqdn: 'join.cloud.thethings.industries' protocol: 'BI1.1' tls: source: 'key-vault'
Interoperability with Semtech Join Server
Semtech Join Server is a hosted LoRaWAN Join Server by Semtech for use with pre-provisioned LoRa Edge modems.
An example interoperability repository supporting Semtech Join Server could look like this:
# config.yml join-servers: ... - file: './semtech/js.yml' join-euis: - '0016C00000000000/24' ...
# semtech/js.yml fqdn: 'js.loracloud.com' port: 7009 protocol: 'BI1.0' paths: join: 'api/v1/rens/rens-1::2/lbi_joinreq' # replace 'rens-1::1' by the RENS issued by Semtech tls: source: 'file' root-ca: './ca.pem' # path to the CA issued by Semtech certificate: './cert.pem' # path to the TLS client certificate issued by Semtech key: './key.pem' # path to the TLS client key issued by Semtech