A LoRa Server architecture consists of multiple components:
The IoT devices or “nodes” (not pictured in the image above) are the devices sending data to the LoRa network (through the LoRa gateways). These devices could be for example sensors measuring air quality, temperature, humidity, location…
The gateways are receiving data from the nodes and typically run an implementation of the packet-forwarder software. This software is responsible for the interface with the LoRa hardware on the gateway.
The LoRa Gateway Bridge component is responsible for the communication with your gateway. It “transforms” the packet-forwarder UDP protocol into JSON over MQTT. The advantages over directly working with the UDP protocol are:
The LoRa Server component is responsible for the network. It knows about active node sessions and when a new node joins the network, it will ask the application-server if the node is allowed to your the network and if so, which settings to use for this node.
For the active node-sessions, it de-duplicates the received data (which is potentially received by multiple gateways), it authenticates this data (to make sure that these are not replay-attacks), it forwards this (encrypted) data to the application-server and it will ask the application-server if it should send anything back.
Besides managing the data-flows, it also manages the state of the node through so called mac-commands (e.g. to change the data-rate, channels, …).
LoRa Server implements a gRPC API so that you could easily build your own application-server.
The LoRa App Server component implements an application-server compatible with the LoRa Server component. It offers node management per application, per organization and gateway management per organization. It also offers user management and the possibility to assign users to organizations and / or applications. Communication with the application is using JSON over MQTT and using the exposed APIs.
LoRa App Servers offers a web-interface that can be used for gateway, node and gateway management, but also offers API endpoints so that it can be integrated with your own products.
The application subscribes to the MQTT topic for receiving the data of the node(s) within the application. It is also able to send data back over MQTT. If needed, it could also interact with LoRa App Server using the gRPC or JSON REST api.