Skip to content

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:

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:

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.