Integration overview
ioThings devices send their alarms, heartbeats and sensor data over either LoRaWAN (ioButton, ioTracker) or the cellular LTE network (ioButton LTE). Before a message reaches your application, it goes through a radio network and a backend that receives and decodes it.
For both technologies you can choose who runs that backend:
- ioThings: ioThings runs the backend and forwards decoded messages to your application. This takes the least integration work.
- You or a third party: you connect the devices to infrastructure you choose yourself and decode the messages with the tools ioThings provides.
The diagrams below show each option, from device to your application.
Legend
- Blue, solid border: managed by you
- Green, solid border: managed by ioThings, with SLA
- Purple, solid border: managed by the cellular provider, with SLA
- Dotted line: wireless radio link
- Solid line: internet, HTTPS/API
LoRaWAN
Option A: via ioThings
The ioButton or ioTracker sends its uplinks over LoRaWAN gateways to TTI, the LoRaWAN network server ioThings uses. TTI passes them on to the ioThings cloud, which forwards each message to your application. The whole path up to your application is managed by ioThings, with an SLA.
flowchart LR
device["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioButton / ioTracker</b></span><span>LoRaWAN device</span></div>"]
gw["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LoRaWAN gateways</b></span></div>"]
lns["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>TTI</b></span><span>LoRaWAN network server</span></div>"]
iot["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioThings cloud</b></span><span>Device platform</span></div>"]
app["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>Your application</b></span></div>"]
device -. LoRaWAN .-> gw
gw -- HTTPS/API --> lns
lns -- HTTPS/API --> iot
iot -- HTTPS/API --> app
classDef customer fill:#E8EFF8,stroke:#2F5D9A,stroke-width:1.5px,color:#14212B
classDef iothings fill:#E4F3EC,stroke:#1E7A55,stroke-width:1.5px,color:#14212B
class device,app customer
class gw,lns,iot iothings
Option B: your own LoRaWAN network
You manage the LoRaWAN gateways and the LoRaWAN network server yourself. This is the most common setup. The devices follow the LoRaWAN 1.0.3 specification, so they work with any compliant network server, such as The Things Stack or ChirpStack. Your network server forwards the uplinks to your own application, where you decode them yourself.
flowchart LR
device["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioButton / ioTracker</b></span><span>LoRaWAN device</span></div>"]
gw["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LoRaWAN gateways</b></span><span>yours</span></div>"]
lns["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LoRaWAN network server</b></span><span>yours</span></div>"]
app["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>Your application</b></span><span>with decoder</span></div>"]
device -. LoRaWAN .-> gw
gw -- HTTPS/API --> lns
lns -- HTTPS/API --> app
classDef customer fill:#E8EFF8,stroke:#2F5D9A,stroke-width:1.5px,color:#14212B
class device,gw,lns,app customer
Instead of running them yourself, you can also use gateways and a network server from a public or community network, such as The Things Network or Helium. The alarm path then depends on infrastructure that nobody guarantees for you. Take this into account for alarm use cases such as panic buttons.
More detail:
- LoRaWAN introduction
- Self-hosted decoder: the JavaScript decoder for the uplink payload
- Uplink specification: the payload format, if you write your own decoder
- LoRaWAN connectivity: classes, spreading factor, confirmed uplinks and keys
LTE
LTE devices send their uplinks over the cellular network to a Middleware, which validates and decodes them and forwards a readable message to your application. The two options differ only in who runs the Middleware.
Option A: via ioThings
ioThings runs the Middleware, Key Service and Downlink Service in the ioThings cloud. Your application only has to receive the decoded messages.
flowchart LR
device["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioButton LTE</b></span><span>Cellular device</span></div>"]
cell["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LTE network</b></span><span>Cellular provider</span></div>"]
iot["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioThings cloud</b></span><span>Middleware</span></div>"]
app["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>Your application</b></span></div>"]
device -. LTE .-> cell
cell -- HTTPS/API --> iot
iot -- HTTPS/API --> app
classDef customer fill:#E8EFF8,stroke:#2F5D9A,stroke-width:1.5px,color:#14212B
classDef iothings fill:#E4F3EC,stroke:#1E7A55,stroke-width:1.5px,color:#14212B
classDef cellular fill:#F8EAF4,stroke:#9C3D88,stroke-width:1.5px,color:#14212B
class device,app customer
class cell cellular
class iot iothings
Option B: self-hosted middleware
You run the Middleware in your own environment, so device traffic stays in your infrastructure. You can also self-host the Key Service and Downlink Service, or keep using the ones from ioThings.
flowchart LR
device["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioButton LTE</b></span><span>Cellular device</span></div>"]
cell["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LTE network</b></span><span>Cellular provider</span></div>"]
mw["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>Your Middleware</b></span><span>self-hosted</span></div>"]
app["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>Your application</b></span></div>"]
device -. LTE .-> cell
cell -- HTTPS/API --> mw
mw -- HTTPS/API --> app
classDef customer fill:#E8EFF8,stroke:#2F5D9A,stroke-width:1.5px,color:#14212B
classDef cellular fill:#F8EAF4,stroke:#9C3D88,stroke-width:1.5px,color:#14212B
class device,mw,app customer
class cell cellular
More detail:
- LTE introduction: both options and the message flow, step by step
- Self-hosted middleware: what the Middleware does and where to find the setup guide
- Cellular connectivity
Combining LoRaWAN and LTE
If you use both LoRaWAN and LTE devices, choose Option A for both. All messages then reach your application through the ioThings cloud, with an SLA on the whole path. You build a single integration instead of one per technology.
flowchart LR
lte["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioButton LTE</b></span><span>Cellular device</span></div>"]
lora["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioButton LoRa</b></span><span>LoRaWAN device</span></div>"]
cell["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LTE network</b></span><span>Cellular provider</span></div>"]
gw["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>LoRaWAN gateways</b></span><span>+ TTI</span></div>"]
iot["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>ioThings cloud</b></span><span>Device platform</span></div>"]
app["<div style='width:190px;height:60px;display:flex;flex-direction:column;justify-content:center;align-items:center'><span><b>Your application</b></span></div>"]
lte -. LTE .-> cell
lora -. LoRaWAN .-> gw
cell -- HTTPS/API --> iot
gw -- HTTPS/API --> iot
iot -- HTTPS/API --> app
classDef customer fill:#E8EFF8,stroke:#2F5D9A,stroke-width:1.5px,color:#14212B
classDef iothings fill:#E4F3EC,stroke:#1E7A55,stroke-width:1.5px,color:#14212B
classDef cellular fill:#F8EAF4,stroke:#9C3D88,stroke-width:1.5px,color:#14212B
class lte,lora,app customer
class cell cellular
class gw,iot iothings
Questions
Not sure which option fits your project? Contact us via the contact form on our website or by e-mail at info@iothings.nl.