arrow-left

Only this pageAll pages
gitbookPowered by GitBook
triangle-exclamation
Couldn't generate the PDF for 155 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

KPN Things Portal

KPN THINGS USER GUIDE

GETTING STARTED

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

GENERAL FUNCTIONS

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

THE PORTAL EXPLAINED

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

BUILDING BLOCKS

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Quick reference videos

Learn more about the general functionality

hashtag
User interface

This video explains how the User Interface and main navigation works.

hashtag
Tables

This video explains how Tables work.

hashtag
Bulk by multiselect

This video explains how Bulk by multiselect works in the User Interface.

hashtag
Bulk by file

This video explains how Bulk by file works in the User Interface.

Look for the icon in the menu for more Quick reference videos.

Tables

An introduction about how tables work

hashtag
Tables

This video explains how Tables work.

Connect a HTTPS destination

Learn how to connect your application through HTTPS

You can use to forward your device data to any supported platform or destination. The tool Webhook.site is used for this tutorial. Although we have good experience with this tool, KPN is not responsible for the proper working of the tool.

hashtag
1. Create test HTTPS endpoint

Go to . Webhook.site is a service with which you can easily inspect incoming HTTP requests. When vising the site it will automatically create a unique HTTPS endpoint for you. Use the Copy to clipboard button that is highlighted in the screenshot below to copy the URL of your new endpoint.

Configure a flow

Learn how to forward the data from your device to your application

Now your Device is linked to the Flow!

With a Flow you configure the way your IoT data should flow through KPN Things, from device to destination. Learn more about .

hashtag
1. Your first Flow

We have already created a first empty flow for you named My first flow. You can create new flows using the Add flow button on the top right.

Device Simulator Web app

Our KPN Things Device Simulator Web app allows you to test KPN Things with your own mobile phone/laptop as a device. If you do not yet have a suitable device, you can use the Web app to still build a working data flow.

hashtag
Features

  • Mobile/laptop as a device - Easily add the Web app as a Device in your KPN Things account.

All videos

A list of all reference videos in one overview

hashtag
KPN Things Portal Introduction

Learn why we built Things Portal and how it will benefit your IoT Business

hashtag

Quickstart

Build your first IoT Solution in KPN Things

Our KPN Things platform is your environment to start working on IoT Solutions and manage in a single environment. This guide will help you get started. Before we dive in, make sure you have a subscription and you're able to sign in.

hashtag
Account types

There are two types of accounts. For both types the authentication is managed in our GRIP platform developed by KPN. This provides you with a secure and easy access to your KPN applications. With the GRIP portal you can manage your subscriptions and perform user management.

KPN Things Freemium

Bulk actions

An introduction about how bulk actions work

hashtag
Bulk by multiselect

This video explains how Bulk by multiselect works in the User Interface.

hashtag

Devices

Manage and view all details of your devices

Oops, you’re a bit early. We’re still working on updating the documentation to reflect the new layout in Things Manager.

Tutorials

Our quick and easy explinations of various topics

We are happy to help you on your way as best as possible. Nothing is more fun than seeing a visible result in your account quick. Follow our tutorials to get of to a good start.

hashtag
2. Create your first Destination

Go to the Flows > My first flow and click Link destination

Choose Create a new Destination.

Select HTTPS endpoint as destination type.

hashtag
3. Fill in your Destination Information

After selecting HTTPS Endpoint, fill in the following information:

  • Destination name: you can think of a good recognisable name for your first destination, like My First Destination.

  • URL: this should be the URL you just copied from webhook.site.

  • Shared secret: this is a kind of password that an application should use to verify that KPN Things sent the data to the endpoint. It should be at least 32 characters long and should contain at least an uppercase character, lowercase character, digit, and special character.

hashtag
4. Test connection with test message

Send a test message, e.g. by using the Device simulator app. You should see incoming information on your webhook.

hashtag
Congratulations! 🎉

You successfully set up your first IoT solution!

To continue learning you can continue with:

KPN Things Destinations
https://webhook.sitearrow-up-right

hashtag
2. Link Device to Flow

Click on Add Devices in the Flow overview page.

Now you see all Devices you can add to this Flow. Click on your Device to link it to the Flow.

Now your Device is linked to the Flow!

hashtag
3. Activate a Decoder

Open your Project, open your Flow, and then click Data Processing.

Click on the Device type for which you want to activate a decoder (#1 in the screenshot below). At this moment you probably have only one type of device linked to the Flow, so open that one. All available decoders are now shown (#2 in the screenshot below).

Here you can toggle on and off what (decoded) data you want to receive in your application (like indicated with #3 in the screenshot below). If you want to know more about the decoder, click on the link in the description.

Note that the "Add new Decoder" button and "Edit" button are only visibleif this is your own device type. Own Device Types and Decoders can be created using the Things Creator app.

flows

Choose sensors - The app allows you to choose which metrics to use as Device data.

Device simulator app features

hashtag
Add the Device Simulator Web app

Follow the steps to add the Device Simulator Web app as a device.

1

hashtag
Register your Web app in KPN Things

On your computer go to the KPN Things portal.

  1. Click on Devices to show the device overview on the Things Manager tab

  2. Click on Add new Device to add the Device Simulator

  1. Click on Device Simulator Web app

  2. Give your device a recognizable name

  3. You can add a description, this is useful when you have multiple devices and want to provide context. This is not a mandatory field.

2

hashtag
Open the Device Simulator Web app

You can open the Device Simulator Web app in three ways:

  1. In your internetbrowser on your computer or laptop

3

hashtag
Send your first measurement

Select which measurements you want to be send.

  1. Click the corresponding

4

hashtag
Check the incoming message

In KPN Things portal refresh the page. You now see a value next to Last message, indicating that the measurement is recieved from your Device simulator app.

5

hashtag
Ready to build your data flow

You are now ready to setup your first data Flow in KPN Things.

Or connect your own test devices with our other device templates.

circle-exclamation-checkConfigure a flowchevron-right
circle-exclamation-checkConnect deviceschevron-right
User interface

This video explains how the User Interface and main navigation works.

hashtag
Tables

This video explains how Tables work.

hashtag
Bulk by multiselect

This video explains how Bulk by multiselect works in the User Interface.

hashtag
Bulk by file

This video explains how Bulk by file works in the User Interface.

Once you have registered you have a developer account. With this account you get a Freemium project. Here you can test LoRa and M2M connectivity for a limited number of devices for free.

Follow our step-by-step guide to further set up the environment.

circle-info

Of course we offer solutions for both small and large applications within the account types below. We do recommend to start testing our Freemium subscription first to get a good idea of ​​the possibilities.


KPN Things Explorer

You can easily upgrade this registration to a paid subscription later. This is our low threshold Explorer solution and suitable for even a couple of devices.

KPN Things Modular

An account will be created for you and you will receive an email to create a password. This is out dynamic solutions based on standard building blocks suitable for high-volumes.

KPN Things or Tailored

Accounts will be created for you and you will receive an email to create a password. This is our customized connectivity focussed solutions suitable for high-volumes.

hashtag
Want to learn more about our propositions

KPN Things is available in four distinct propositions.

Registration and setupchevron-right
Bulk by file

This video explains how Bulk by file works in the User Interface.

Customer management

circle-info

💎 Add-on feature This feature is only available when purchased the Customer Management add-on. Please contact [email protected]envelope if your are interested!

With Customer Management, you get the possibility to manage your own customers using separate customer environment in KPN Things. It is an extra administrative layer in the KPN Things Portal.

If you have Customer Management enabled in your KPN Things license, you will have an additional link in your side menu: All Customers (as indicated in the screenshot below). Click on it to open your customer list.

hashtag
All Customers page

After clicking All Customers in the side menu, you will get an overview of all your customers.

In the screenshot the following elements are highlighted:

  1. The number of Customers in your current view and your total number of Customers.

  2. The company name of your Customer.

  3. The name of the primary contact of your Customer.

hashtag
Switching to Customer environment

After opening one of your Customers, your submenu will change. The top part will stay the same and will provide you a way back to your own Customer environment (#1 in the screenshot below). The bottom part of the side menu will now show you navigation for the environment of your Customer (#2 in the screenshot below), allowing you to open and/or manage the objects in the environment of your Customer.

hashtag
Add new Customer

Adding new Customers will be added later. For now, if you want to add a new Customer, you should contact our .

hashtag
Customer overview

The Customer overview page provides you with a quick overview of the environment of your customer.

On this page you find:

  1. A summary of the properties of your Customer.

  2. A link to the .

  3. The number of Projects of your Customer and a link to those Projects.

hashtag
Customer details

After switching to the Customer environment, you see the Customer details page. This page gives you a quick overview of the Customer details, like name and email address.

Downlink communication

When data is sent to the device

All downlink communication is requested on and managed by the Actuator API. Optionally a Destination can request and manage downlink communication as well. See Destination types to learn which destinations can support downlink communication.

After a downlink is requested on the Actuator API it is encoded. Meaning the downlink is translated to a message the device will understand. After encoding the downlink is send over the selected network to your device.

The network (and the device) will report feedback about the delivery of the downlink to the Actuator API. This information can be retrieved by the application, or the Things Connector fetches this information into your system.

hashtag
Actuator API

Using the KPN Things Portal, you can request downlinks, and check their progress.

Since December 2020 it is also possible to directly call the Actuator API. Head on over to the for more information!

hashtag
Encoder

Using our encoders the downlink request is translated to a device specific message. All available encoders are listed on the Supported devices page.

hashtag
Network support

Currently the following networks are supported for downlink communication:

  • LoRa downlink

  • HTTP response downlink for M2M devices

  • HTTP response downlink for Internet-connected devices

hashtag
Downlink via Destinations

Some also support sending downlinks.

Create a simple IoT web application

Showing your data in an application

circle-exclamation

Note that this sample IoT web application is for testing purposes only and not a secure solution for processing data

With this tutorial you will create a simple web application showing a map showing your tracked LoRa data. This runs an in-memory data store, so on restart the store will be reset and all recorded data will be lost. The application runs on Next.JSarrow-up-right

As an optional step the IoT web application can be deployed to Azure Web App.

hashtag
1. Install the IoT web application

  1. Get all the files needed for this tutorial at and save these in a local folder

  2. Go to the folder 'c3y' and install: npm i

  3. Build: npm run build

hashtag
2. Redirect your webhook to localhost

Enable XHR Redirect in your webhook (tested in Firefox & Chrome, does NOT work in Safari):

  • Target:

  • Content Type: application/json

  • HTTP Method: POST

hashtag
3. Test connection with test message

  1. Send a location message using the device simulator.

  2. Go to and click UPDATE.

You should see the location update with the location you have sent via the device simulator.

hashtag
4. (optional) Deploy as Azure web application

  1. Install azcli: brew install azure-cli (()

  2. Log into Azure, where ??? is the tenant ID from Azure Active Directory: az login --tenant ???

  3. Deploy: az webapp up --sku B1 --location westeurope

Accounts and projects

Each company has a Customer Account. You can create multiple users within this Customer Account.

Projects describe your commercial plan and available features. One Customer Account can have multiple projects.

Each Customer Account has at least one User and at least one Project

hashtag
Manage your customers

Upon request we can create a 'Reseller account' account for you, so that you can manage IoT solutions for your customers. Learn more about Customer management

Registration and setup

Let's get started

Follow the steps to create your Freemium account.

1

hashtag
Choose to register

Open https://portal.kpnthings.com/arrow-up-right and click on Register for free.

2

hashtag
Enter your account details

  1. Please enter a valid E-mail you like to create your account on

3

hashtag
Create a password

After registration you receive an activation E-mail. This may take some time. Click the Set your password now link in the email and create a password.

You will recieve a confirmation that the password change is succesful.

4

hashtag
Log in to KPN Things

As soon as you created your password you will be forwarded to the KPN Things portal.

When visiting the KPN Things Portal in the future, you can access the portal via .

5

hashtag
Ready to start

You are now ready to set up your solution and go to the next step.

circle-info

We would like to advice you to start testing using our free Device Simulator app. This way you know for sure that you have configured the portal correctly.

circle-info

You know how to start and want to use an actual device? Perhaps one of the explanation pages about some of the most used test devices will be useful to you.

Things Manager

Manage your IoT devices and the connectivity of your IoT solutions in the Things Manager

The Things Manager includes the following menu items

Uplink communication

When data is sent from device to KPN Things

KPN Things Data Management is a data processing platform that enables you to connect all your KPN Things devices to all supported destinations through one standard way of data processing. This principle is visualized in the diagram below:

hashtag
Device support

Read more on device support:

circle-exclamation-checkSupported devices and KPN Deviceschevron-right

hashtag
Network support

KPN Things Data Management supports multiple forms of connectivity to receive data from devices. When you have a KPN Things device it is already configured to work with KPN Things Data Management.

Read more on connectivity support here:

hashtag
Processing

hashtag
Decode

During the optional decoding phase the device specific data protocol is transformed to the universal language of . This is called decoding. Decoding for KPN Things devices and custom devices that use the KPN Things client libraries is taken care of automatically. Therefor there is automatic compatibility with the enrichment phase.

hashtag
Enrich

In future releases KPN will introduce data enrichment functionality in KPN Things Data Management.

hashtag
Destination support

After processing your data will be forwarded to one or more Destinations you have configured.

User Interface

An introduction to the user interface

hashtag
User interface

This video explains how the User Interface and main navigation works.

Device Groups

Download the specificationarrow-up-right.

Device Groups provide a way to organize and manage devices within a project. Each group represents a subset of the project’s registered devices, and a device may belong to multiple groups in the same project. Beyond simple grouping, a Device Group also defines the project’s “processing plan” for incoming device data—known as a flow in the Things Manager. A flow brings together four elements: the devices it applies to, the decoders used to interpret their uplinks, encoders used to encode downlinks, and the destinations where decoded messages are forwarded.

At present, the Device Groups API focuses on device membership, allowing you to add or remove devices from a group. Configuration of flows themselves—such as managing decoders, encoders, or destinations—remains available through the Things Manager web interface.

News

We keep you updated about our platform and connectivity and planned maintenance

The news page provides you with all relevant information.

  1. Click on News in the menu to see all news items under All News

  2. Click on the title of a news item to open and read the full article

  3. Use the search field to look for specific topics

  4. This is the date the article is published, in case of maintenance check for the execution date in the full article

circle-info

Scroll down on the News page to check for a comprehensive list of older articles.

Projects

Download the specificationarrow-up-right

SIM cards

hashtag
1. Check contents of the delivery

First, let us check if you received everything correctly. There should be two KPN Things SIM cards in the package.

hashtag

Technical overview

The KPN Things Platform is the bridge between IoT Devices and IoT Applications. It offers a unified way of connecting Devices at the one side, and applications at the other side, making Devices and applications completely interchangeable in every IoT solution that uses KPN Things.

hashtag
Device integration

Devices can communicate with the platform using one of our networks, or , or a Device using another network can get its data to and from KPN Things over the .

Introduction

Get a grip on your IoT solutions, so you can focus on your customers

KPN Things offers flexible building blocks with which you can easily build complete IoT solutions. You can build a solution for virtually any use case. Do you want to know how full a waste container is, or where it is physically located? You can connect your Solution with our KPN Things platform.

Building blocks are available for each part of the chain that can easily be used together.

Thanks to standard connections, you can also use your own Device or Data platform. And with the KPN Things Portal, you have full control over your solutions.

hashtag

Devices

Download the

In addition to the standard create, retrieve, update, delete, and list actions, devices expose two important sub-collections.

The device-groups sub-resource allows you to view and manage the groups a device belongs to, complementing the platform’s top-level resource.

The network-adapters sub-resource provides access to the physical connectivity interfaces of a device—such as cellular (IMEI-based), LoRa (DevEUI-based), or generic internet adapters—which determine how the device connects to the platform.

Management data model

Explaining the data model of the platform.

  • Green bordered blocks are objects provided to you.

  • Green filled blocks are objects you can create and manage.

  • Grey bordered blocks are objects globally managed by the system.

APIs

This API allows you to programmatically manage your IoT solutions on the KPN Things platform, including projects, devices, flows and downlinks.

circle-exclamation

Important Update

The fully supported API is under development and will be extended in the coming weeks and months.

The previous beta API is now deprecated. While it remains operational for the time being, we recommend transitioning to the new API as soon as possible to take advantage of new features, improved performance, and long-term support.

Location data

One of the main use cases in the Internet of Things is tracking of assets. Therefore KPN Things has location data at the core of its design, especially if you take into account the wide variety of .

We consider two different types of determining the location of your Device:

  • : really determining the absolute location of your Device on the world.

Costs overview and contract

Users with an Explorer or Modular contract can view their contract and costs per billing cycle in the KPN Things Portal. To view the costs and contract, enable access by assigning the Finance Read-only role to your users in GRIP. See Roles and Access Levels on the Customer accounts & users page.

hashtag
Starting point

To see an overview of the costs per billing cycle, click on your Customer name in the menu on the left. The Account card shows an item called Costs overview, if at least one of your projects has an Explorer or Modular contract.

Organization

On the Organization page, you’ll find all your company information, a cost overview details and user settings.

hashtag
My Organization

hashtag
Organization details

Documents

All documents and manuals in one overview

The documents page provides you with documentation and manuals about our services.

  1. Click on Knowledge Base in the menu for an overview of the available documentation

  2. The highlighted documents contain important information and are shown in tiles

Support

All help and resources in one place

The support page provides access to all service related items. Here you can submit a request for information of report a service disruption.

circle-info

The options shown differ based on the subscription type.

  1. These support items are available for everyone

Connector Bindings

Connector Bindings define the configuration that enables a device to communicate with the Things platform through a specific connector.

While connectors provide the communication interfaces themselves, a device typically needs connector-specific settings—such as credentials, shared secrets, or protocol parameters—to authenticate and exchange uplinks or downlinks. This per-device configuration is captured in a Connector Binding.

The Things platform supports multiple binding types aligned with the available connectors:

  • http for devices sending SenML or Streamline-protocol uplinks over HTTP(S)

Flows tab

The Flows tab provides a visual and interactive overview of the complete data flow of your device. This view is designed to give you immediate insight into how data from your IoT device is processed and routed. You find this tab on the Device & Connectivity detail page.

hashtag
What you see in the Flows tab

The schematic overview shows the following components of the flow:

Things Creator

In the Things Creator, it is possible to define your own device type including decoder scripts. This guide describes how this is done.

hashtag
Guide: Adding a New Device Type and Creating a New Decoder

hashtag
Step 1: Adding a New Device Type

Release notes

Access all release notes for our platforms in the Things Portal

The Release Notes page provides you with all new features and items we fixed or improved.

  1. Click on the Release Notes links on the News page

  1. All releases come with a version number as reference in case you have questions

Service level report

Is our service up to standards

The Service reports page provides in an overview of the availability of our service per month.

  1. Click on SLA Reports in the menu for an overview of the availability of our services

  2. Click on the calendar icon to choose another month to see report history

Open the Things Creator Application: Log in to the KPN Things application with your credentials and using the top-level menu, navigate to Things Creator. If you don't see this menu option, you're not authorized to access the Things Creator. Access is provided via the roles in KPN Grip. In order to gain access, send a request to the administrator of your Grip tenant.

hashtag
Device Type Overview

Within the Things Creator application navigate to Device-Type Management: Click on the new main menu item "All Device Types". View the overview of all available device types.

hashtag
Create New Device Type

Click on the "Add new Device Type" button. Fill in the required information for the new device type, such as name, description, and any specific properties. Click "Add Device Type" to add the new device type.

hashtag
Edit or Delete Device Type

If needed, you can edit or delete your own device types through the device type overview. Select the device type from the list and in the device type detail page, click Edit or Delete.

After creating your own device-type, this device-type can be selected in the Things Manager when adding new devices to your project.

hashtag
Step 2: Creating a New Decoder

hashtag
Decoder Overview

Navigate to Decoder Management: Click on the menu item "All Decoders". View the overview of all available decoders.

hashtag
Create New Decoder

Click on the "Add new Decoder" button. Select the device type for which you want to create the decoder. Note that you can only add a decoder for one of your own device types. Be sure to create your own device type first. Fill in the required information for the new decoder, such as name and description. Click "Add Decoder" to add the new decoder.

You can add as many decoders as you like for your device-type.

For more information on creating your own decoders, please refer to this page.

hashtag
Edit or Delete Decoder

If needed, you can edit or delete your decoder through the decoder overview. Select the decoder from the list and in the decoder detail page, click Edit or Delete.

hashtag
Create and Test Decoder Script

After creating a decoder, the decoder script must be created. In the decoder detail page, click the "Create" button in the Script section. Write and test the script using the designated editors. Click "Save" to save the script.

The decoder scripts can be tested using the provided sample payloads, or you can create your own test payload. The Click "Run script with test payload" to test your decoder script. The output and log can be used to validate your script.

For more information on creating your own decoder scripts, please refer to this page.

hashtag
Edit or Delete Decoder Script

If needed, you can edit or delete your own decoder scripts through the decoder detail page. Click "Edit" to edit the script and in the edit script dialogue: Click "Delete" to the delete the script. Click "Save" to store any changes to your script.

hashtag
Step 3: Activating the Decoder in Flow

You have successfully created your own device type and one or more devices of this type have been added to your project. Then the decoder of your choice must be activated in your flow. This is done in the Things Manager application.

hashtag
Activate Decoder

Select the flow in which you want to activate the decoder and click "Data Processing". In the Data Processing overview, select the device type for wich the decoder shall be activated and toggle the decoder of your choice. Alternatively, you can click the "Add new Decoder" to create a new decoder in the Things Creator application.

Detection: detecting the presence of your Device with an anchor in the world which has a known location. With this you can safely say your Device is close to the anchor.

hashtag
Localization

Using multiple measurements in a single domain to try to approximate the location of the device.

The following measurement values are outputted by KPN Things:

  • latitude

  • longitude

  • radius (if available)

  • source

hashtag
GPS

The device determines location using GPS. An implementation works for a given device and decoder.

  • Device: Should have a GPS module and send GPS location.

  • Decoder: A decoder for each device type that sends GPS data (unless a Things protocol is used)

hashtag
LoRa Geolocation

The LoRa network determines the approximate location of the device using three or more fine timestamps calculated by the gateways. An implementation works for all LoRa devices.

  • Network: Should be KPN LoRa with a geo-enabled connectivity plan

  • Decoder: LoRa Geolocation decoder should be enabled.

hashtag
Wifi localization

There should be WiFi infrastructure, dense enough for a device to pick up multiple access points. A device should scan for available WiFi access points and send their MAC-address and received signal strength to Things DM. Things DM should then decode the payload whereafter an external service can be called to resolve the measurements to a latitude and longitude.

  • Device: Device should be able to scan for WiFi access points

  • Decoder: A decoder for each device type that scans for WiFi access points (unless a Things protocol is used)

  • Processing: A WiFi Localization processor should translate incoming WiFi MAC+RSSI measurements to a latitude, longitude and radius using an external service.

hashtag
Detection

Trying to detect another identifiable object with a known location and using the location of that object as approximate location of the device.

  • detectedBeacon

  • source

hashtag
LoRa On Premises Gateway detection

The LoRa network forwards the identifier of the best receiving gateway. Using the user-administrated location of this gateway the general location of the device is determined.

  • Network: Should be KPN LoRa.

  • Decoder: Metadata embedded in the DevEUI_uplink message from Thingpark should be accepted as information to be processed in Things DM.

  • Processing: One LoRa Metadata decoder for location detection using LoRa Gateway ID

hashtag
Bluetooth beaconing

There should be managed infrastructure of Bluetooth beacons that transmit their identifier in a known manner. The locations of these beacons should be administrated in an (out-of-scope) application. There should be devices being able to detect the beacon and send the beacon identifier to Things.

  • Device: There should be a beacon device transmitting a Bluetooth beacon. There should be another device picking up the beacon and sending its identifier to Things.

  • Decoder: A decoder for each device type that sends a bluetooth beacon ID (unless a Things protocol is used)

  • Processing: trancelate beacon to coordinates.

tracking hardware we sell
Localization
News
hashtag
Customer

If you have an account on KPN Things Data Management, it belongs to a Customer account. All main objects in the KPN Things Data Management belong to a Customer: Projects, Devices, Destination and Network subscriptions.

A Network subscription contains information for network types for a specific client. Learn more about connectivity types.

hashtag
Project

Each Project defines a solution you buy or build in KPN Things. Learn more about Projects.

hashtag
Flow

With a Flow you link one or more devices to one or more plugs. So, if data is received from a device in a device group, its data will be forwarded to the plugs that are in the same device group.

A project has one or multiple activated decoders and encoders. These decoders prescribe which decoders should be used when data is received by a device that is in a device group that belongs to this project. Learn more about Flows.

hashtag
Device

A Device represents a single physical device that can send data to the platform. When creating a device you tell the system the device specification it belongs to.

A Device specification has one or multiple supported network types. For all our supported device types, go to Devicesarrow-up-right.

For a device, you can create a Network info for each supported network type of the given device specification.

hashtag
Destination

A Destination allows you to forward the data from your devices to an external system. For detailed information go to Destinations.

Let's get started

Create your Freemium KPN Things Portal account

Freemium

Experience the core functionalities

Explorer

Expand your connectivity and grow your solution

Modular

Build a solution using standard building blocks

Tailored

For customized connectivity focussed solutions

Cover
Cover
Cover
Cover
Cover
API access documentation
Destination types

Projects

Select the project you want to work to show only the information relevant to that project

IoT Devices

Add and configure new devices, monitor device status, manage device settings, process and interpret data from devices

Connectivity

Manage and control your connectivity for your IoT solutions across all connectivity options

Processing

Select the data processing options for your data flow and organize your decoders and encoders

Destinations

Connect your IoT data to the location where you want to use it using our destinations options

Activity

Track the status and progress of your activities and verify that everything has been processed correctly

Cover
Cover
Cover
Cover
Cover
Cover
LoRa connectivity configurationchevron-right
SenML
circle-exclamation-checkDecoders and encoderschevron-right
Destinationschevron-right
Click Add Device to finish this step
  • On your phone with the QR code

  • Share the URL and open the Device Simulator Web app

  • checkboxes
    by selecting or deselecting to choose measurements
  • Click Send data now to send your first measurement

  • The number of Projects your Customer has.
  • The number of Devices your Customer has.

  • The number of Destinations your Customer has.

  • A quick link to the All Devices page of your Customer.

  • Clicking on a row in the table will direct you to the Customer details page of the selected Customer.

  • A search bar to search for a specific Customer name.

  • The number of Devices of your Customer and a link to those Devices.
  • The number of Destinations of your Customer and a link to those Destinations.

  • Quick links to add new objects to your Customer (buttons are disabled if you do not have rights)

  • service deskarrow-up-right
    Customer details

    Start server in production mode: npm start

  • (optional) Seed with dummy data: ./postDummyData.sh

  • (takes about 5 minutes)
  • After deployment the URL is logged

  • Modify the URL in the HTTPS destination created in Connect a HTTPS destination to the URL returned by Azure CLI:[generated URL]/api/lora

  • Inspect logs: az webapp log tail

  • Open [generated URL] in the browser to see the web app

  • https://github.com/kpn-iot/c3yarrow-up-right
    http://localhost:3000/api/loraarrow-up-right
    http://localhost:3000/arrow-up-right
    https://learn.microsoft.com/en-us/cli/azure/install-azure-cliarrow-up-right

    Please enter your First Name. No special characters allowed

  • Please enter your Last Name. No special characters allowed

  • Please enter your Company Name. The company name cannot contain a hyphen character (-) or a question mark (?)

  • Please enter a valid Phone Number. Make sure the country code is included. A phone number is not mandatory

  • Please check the box to agree with the general Terms and Conditions

  • Please check the box when you would like to stay informed. This is not mandatory

  • Click on Register to create your account

  • circle-info

    If you intend to upgrade your account later, it is advised to enter the company name correctly and use your business email address. This way you have an account that can be upgraded later with the same data.

    In some cases you land in the KPN Developer Portal or in the MijnKPN Zakelijk portal. In this case you can go to the KPN Things Portal by clicking on the KPN Things icon.

    https://portal.kpnthings.comarrow-up-right
    Device Simulator Web appchevron-right
    circle-exclamation-checkConnect deviceschevron-right
    2. Check KPN Things Portal

    Then, the SIM cards should be visible in your KPN Things Portal on the All Connectivity page.

    circle-exclamation

    If you don't see your SIM cards, please contact us on [email protected] and we will check if everything is correctly configured.

    hashtag
    3. Obtain a Device

    You now have a KPN Things SIM card in your possession, a SIM card that can be put in a programmable device to grant it direct access to KPN Things through a secure channel.

    This SIM card supports connection to the following networks of KPN:

    • LTE-M

    • 2G

    • 3G

    • 4G

    • 5G

    Don't you have a programmable M2M Device yet? You should get one! We have some tips for you:

    1. We have the most elaborate documentation on getting the SODAQ SARA AFF R412M to work with KPN Things, so getting such a device will provide you the best getting started guide that we have.

    2. Other SODAQ SARA devices, like the SFF R412M or devices with a different modem should also work with our developer kit guide. You should only take into account some different settings.

      • For instance for SARA SFF devices, you should use Board type SODAQ SFF.

    3. Our also contains example code for the Arduino MKR GSM 1400, laying the basics for all Arduino based M2M devices.

    4. If you want to use non-Arduino based devices, you would need to write your own code to interface with KPN Things. This M2M interface is explained in the .

    Communication from your Device is called uplink communication. When data or instructions are sent to your Device, it is called downlink communication. The communication within KPN Things Platform uses the SenML data protocol. Devices using other languages can be translated from and to SenML using decoders and encoders.

    hashtag
    Application integration

    KPN Things will connect to your application through a dedicated connection layer. To connect your application to KPN Things you can use one of the available Destination types. We support connecting plain HTTPS endpoints to KPN Things, but if you are developing in Microsoft Azure, you can connect directly to the Azure Event Hub.

    The Destination types that support 'management'arrow-up-right connect on a platform level and can also manage objects in the application. The Cumulocity destination for instance will create Device objects in the Cumulocity tenant for each Device that KPN Things sends data of.

    hashtag
    KPN Things Portal

    The KPN Things Portalarrow-up-right is the web application through which you can manage and monitor almost all parts of the KPN Things solutions. You can manage each part of the KPN Things solution, from Device to Destination, to bring your IoT data from the real world to the digital world. You are also able to use KPN Things API's directly to manage your IoT solutions.

    The KPN Things Portal is the visual interface with which you configure your solutions on the KPN Things Data Management platform.

    *) Customer management is only available when the add-on is purchased.

    hashtag
    IoT solution in KPN Things Portal

    To manage your IoT solution you use Flowsarrow-up-right and in a Flow you link Devices, configure Data Processing and set up Destinations together. See how these components relate to each other in the Management Data model. Since network configuration, or Connectivity, is part of the Device in KPN Things, a Flow expresses the complete way how IoT data should be received, processed and forwarded, from the Device to the Destination and vice versa.

    LoRa
    M2M (2G/3G/4G/LTE-M)
    Internet
    Solid line = IoT data. Dashed line = configuration/metadata
    KPN Things Portal Introduction

    Learn why we built Things Portal and how it will benefit your IoT business

    hashtag
    Quick reference instructional videos

    circle-check

    For a kickstart, watch our instructional videos. They say more than a thousand words!

    Look for the icon in the menu for more Quick reference videos.

    explains about Getting started by creating an account and logging in for the first time.

    hashtag
    Flexible Building Blocks

    KPN Things offers you a flexible package of building blocks that you put together yourself. This allows you to set up and manage all your IoT solutions quickly and easily. You manage these building blocks in our KPN Things Portal.

    hashtag
    Device Management

    With KPN Things Device Management you have the insights and control over all your devices. ​

    • Manage all your devices in one overview - From sensors to complex IP gateways and routers

    • Device Twin - Insight in the status of every device

    • Bulk actions - Manage solutions in bulk to control solution of any size​

    • Firmware over the air - Update your devices remotely

    hashtag
    Connectivity Management

    Manage all your LoRa, LTE-M and M2M connectivity in a single platform.

    • All your connectivity in one view - Manage LoRa, LTE-M and M2M connectivity in one view

    • Manage connectivity for your device - Provide your devices with a connection

    • Extensive network information - Have insights in your solutions all the time

    • HTTP and MQTT protocols for M2M devices - You decide how to connect your devices

    hashtag
    Destinations

    A seamless integration of IoT data with any platform for maximum value.

    • Platform Independence - Easily connect any data platform to the KPN Things environment, regardless of which platform you use or want to use

    • Easy-to-Use Tools - We provide simple tools and extensive documentation to help customers create links and modify data.

    • Extensive Functionalities - Access to a wide range of functionalities and additional services, allowing customers to use a platform that directly suits their specific use case

    Destination Management

    hashtag
    Customer and User Management

    Provide your customers and users with a easy access to IoT solutions.

    • Customer Management ​​- Manage IoT solutions of your customers

    • Data Segregation - We provide in secure separation of data between your customers

    • Customer Insight Overview - Have an overview of the different IoT solutions per customer

    • Self Service - Provide your customers access to the Things Portal to manage their own solutions

    • User Management - ​​Decide which users have access and to what functionality

    circle-info

    Curious if our KPN Things fits your needs?

    Then click on the link below to go the the Getting started page and build your first solution.

    You don't have a device yet? No problem!

    You can start testing using our free Device Simulator app.

    rocketQuickstartchevron-right

    hashtag
    Getting Started

    To start using the API, you will need to:

    • Obtain an access token to authenticate requests.

    • Learn how to navigate error handling, pagination, filtering and sorting to efficiently retrieve data.

    See the Getting Started guide for details.

    hashtag
    Resources:

    The API is organized around key resources. Each resource has its own dedicated reference page generated from the OpenAPI specification:

    • Connector Bindings

    • Devices

    • Device Groups

    hashtag
    Additional information

    • Getting Started (authentication, pagination, filtering, sorting)

    • Beta API (Deprecated)

    hashtag
    SSL certificate information

    The SSL server certificates of KPN Things and GRIP are signed by Sectigo and Certsign respectively.

    Both certificate providers are trusted by default by most operating systems. If required for your security implementation, all certificate files of the chain can be downloaded here:

    • Sectigo R46 root CA: https://crt.sh/?d=4256644734arrow-up-right

    • Sectigo R36 intermediate CA: https://crt.sh/?d=4267304690arrow-up-right

    • certSIGN ROOT CA G2: https://crl.certsign.ro/certsign-rootg2.crtarrow-up-right

    • certSIGN Public Web CA:

    hashtag
    Costs overview

    Click on the item Costs overview to navigate to the Costs Overview page. This page shows the costs that will appear on your invoices, presented in both a table and a chart. The costs are categorized by type; recurring costs, usage-based costs and one time costs (such as hardware). Any applicable discounts are already subtracted from the displayed amounts.

    hashtag
    Costs details

    Click on a row in the Costs table or on one of the bars in the chart to navigate to the Cost Details page for that billing cycle.

    Under Base details information about the billing cycle, the rating period and the contract is shown. The items and discounts are shown under Items. The costs for the current month are a forecast of the upcoming invoice and are updated periodically throughout the billing cycle. Please not that the actual invoice may include additional costs and/or discounts that are not visible on this page. You can find all your previous invoices in MijnKPN Zakelijk.

    The Previous and Next buttons above the card on the right allow you to navigate to the previous or next billing cycle.

    hashtag
    Contract

    To view your contract, go to the Project Overview page. To do this, click on the company name in the menu and then on the desired (Explorer of Modular) project. There you will see an item with the name of the contract.

    hashtag
    Contract details

    Click on the contract line to navigate to the Contract Details. Under Base details information about the contract, contract type and the activation date is shown.

    Under Implementation, the project to which the contract is linked is shown. Items and discounts are shown per charge type, which can be recurring, one time or usage. These items are then grouped per product family. The regular price of each item is shown in the Unit price column of each row with a bold item name. If applicable, optional tiered discounts are shown below the corresponding row. The actual discount depends on the quantity, with the applicable range shown in the From and To columns . These columns are only visible if the contract includes at least one item with tiered discounts.

    On this page, you’ll find an overview of the company details linked to your account and the number of existing user profiles. Additionally, you can navigate from here to the Costs Overview to gain insight into expenses per billing cycle (if you have the necessary permissions).

    hashtag
    Costs overview

    Users with an Explorer or Modular contract can view their costs per billing cycle in the KPN Things Portal. To view the costs overview, enable access by assigning the Finance Read-only role to your users in GRIP. If you need help with how manage your users, check the next page.

    hashtag
    Starting point

    The Organization details card shows an item called Costs overview (as shown in the image above), if at least one of your projects has an Explorer or Modular contract.

    hashtag
    Costs overview

    Click on the item Costs overview to navigate to the Costs Overview page. This page shows the costs that will appear on your invoices, presented in both a table and a chart. The costs are categorized by type; recurring costs, usage-based costs and one time costs (such as hardware). Any applicable discounts are already subtracted from the displayed amounts.

    hashtag
    Costs details

    Click on a row in the Costs table or on one of the bars in the chart to navigate to the Cost Details page for that billing cycle.

    Under Base details information about the billing cycle, the rating period and the contract is shown. The items and discounts are shown under Items. The costs for the current month are a forecast of the upcoming invoice and are updated periodically throughout the billing cycle. Please not that the actual invoice may include additional costs and/or discounts that are not visible on this page. You can find all your previous invoices in MijnKPN Zakelijk.

    The Previous and Next buttons above the card on the right allow you to navigate to the previous or next billing cycle.

    hashtag
    Users

    On this page, you will find an overview of the users under this account. Insight into the user details and which roles have been assigned to the user.

    user-gearUser Managementchevron-right
    All other documentations about a topic are listed below the tiles
  • Every header indicates another topic, scroll down to check for more subjects

  • Use the search field to look for specific topics

  • This online KPN Things User Guide can be accessed through this link

  • circle-info

    Scroll down on the Documents page to check for all documentation grouped by topic.

    Documents

    Support tooling avaible for Modular and Tailored subscriptions

  • We will always be there to help you, contact us if you have any questions

  • Support Home

    hashtag
    Contact Support

    When support is needed, click on the Contact Support tile. This opens the General inquiries form.

    1

    hashtag
    About you

    Provide your name and email address so we can reach you.

    2

    hashtag
    Subject

    Choose the subject so that your question will be directed to someone who knows the subject.

    General Inquiry

    Any general question, you can ask us anything about the product.

    Technical Inquiry

    Having trouble setting up the environment, or have a deep technical question? Please ask us and our support team will help you getting up to speed

    Sales Inquiry

    Do you have any questions about prices or upgrading a subscription? We will help you find the right solution.

    Suggestion

    The product is built with the user in mind! Do you have any suggestions that will help us further improve the platform? Let us know.

    3

    hashtag
    Your Question

    Please describe your question. Be as specific as possible.

    4

    hashtag
    Done. Send it out.

    Have you finished filling out the form? Then press Done. Send it out. We will contact you as soon as possible.

    General inquiries form

    lora for devices using ThingPark LoRaWAN

  • mqtt for devices exchanging messages via MQTT

  • Connector Bindings let you precisely define how each device connects and communicates through the Things platform.


    hashtag
    Lora Bindings

    Download the specificationarrow-up-right.


    hashtag
    HTTP Bindings

    Download the specificationarrow-up-right.


    hashtag
    MQTT Bindings

    Download the specificationarrow-up-right.

    Device: your IoT device sending data
  • Decoders: Convert the raw payload from the device into readable data

  • Encoders: Translate the data into a specific format for the Destination

  • Destinations: The endpoints where the data is sent, such as a webhook, MQTT broker, or cloud platform

  • The components are visually connected, allowing you to see at a glance how the flow is structured and if/how each element is linked.

    hashtag
    Interactive editing

    The Flows tab is not just a visual representation, it is also an editable interface. You can:

    • Enable or disable components using toggle switches

    • Edit components by clicking on the link, which takes you directly to the configuration page

    • Remove a link, for example the Destination, by clicking the 'X' in the link

    hashtag
    Error detection and warnings

    If something goes wrong in the flow the affected component will be highlighted in orange. The visual cue helps you quickly identify where the issue lies. Clicking in the highlighted component (i) provides more details about the problem and suggestions how to fix it. The links in the highlighted component brings you to the configuration page, so you can fix it right away.

    Examples of possible issues are:

    • A required decoder is disabled or missing

    • A destination is missing or misconfigured

    • There's an incompatability between components

    The items of changes and fixes in the according release are stated below every version number

  • This is the date the article is published

  • Use the search field to look for specific topics

  • In case Cisco Control Center is used you have the option to select for Release notes Cisco to see the information related to the platform

  • circle-info

    Scroll down on the Release Notes page to check for a comprehensive list of earlier releases.

    Release Notes

    Release Notes link
    Click on the info icon for a brief explanation of the key performance indicator (KPI)
  • Click on a specific service for more report details on performance history

  • Shows the service level of a specific service for the selected month

  • circle-info

    Do you have a Modular or Tailored subscription? See your Service Level Agreement for the agreed availability.

    Service Reports

    hashtag
    Report details

    The report details show more report details on performance history.

    1. Choose a from date and to date to present the graphs for a certain period

    2. The KPI Value is the measurement of an availability for the specific month

    3. The KPI Norm is the standard we strive for and use as minimum availability standard

    4. Click SLA Report overview to go back to the Service reports page

    Report details
    specificationarrow-up-right
    /device-groups

    Multi Factor Authentication

    Enhance the security of your KPN Services account

    All KPN services use the GRIP authentication solution. By default, users log in with a username and password. However, for added security, you can enable two-factor (2FA) or multi-factor (MFA) autentication.

    Changes made to authentication settings will apply to all users.

    circle-exclamation

    Before enabling multi-factor authentication, ensure that every user has a valid mobile number entered in their user profile. This is essential for successful authentication using SMS.

    hashtag
    How to configure MFA

    These settings can be adjusted by an admin user in the MijnKPN portal:

    1. Go to Directories in the menu

    2. Select GRIP

    3. Open the Authentication tab

    You are now in the Authentication settings of your GRIP environment.

    hashtag
    Standard setting

    Scroll down in the Authentication menu to find the Authentication Level settings.

    • The Required Authentication Level score determines the points you need to reach before you can log in successfully

    • In this example (standard settings), the points for Credentials (username/password) equal the required score (20), so you can log in without additional authentication methods

    hashtag
    Multi Factor setting

    Scroll down in the Authentication menu to find the Authentication Level settings.

    1. The Required Authentication Level score must be higher than the points for Credentials (username/password) alone.

    • In this example (standard settings), Credentials (username/password) provide 20 points, but the required score is 25. This means you need an extra authentication method.

    • To enable SMS authentication, assign more than 0 points. Add 5 points so that SMS + Credentials reach the required 25 points.

    • To enable Email authentication, assign more than 0 points. Add 5 points so that Email + Credentials reach the required 25 points.

    circle-check

    The settings below are a best practice to correctly setup multi factor authentication. In this case the combination of either SMS or Email together with the point of the credentials create the level of points needed to successfully login.

    triangle-exclamation

    It is also possible to add Ubiqu Authentication as an authentication method. This does require to install a mobile app to be able to login with a password numerical code.

    Ubiqu Authentication is available in the Google and Apple App store.

    hashtag
    Multi Factor login

    The login interface for all users has been updated to the view shown below. Simply choose your preferred option to log in successfully.

    Device Data

    circle-info

    Can't find a tab called "Device graph"?

    It shows up automatically if keeping Device data history has been turned on in your Customer settings. You can also contact supportarrow-up-right or create a ticket via 'mijnkpnzakelijk' if you have any questions.

    hashtag
    How to read the graph

    If data history is enabled for your account and device type, you can find a graph of the configured metrics on the Data graph tab of your devices details page. If available, two metrics can be selected to show 2 graphs simultaneously.

    The "Zoom" button can be used to focus more on the range of the metric values. The "Table View" button gives access to the underlying data of the graph:

    The displayed data can be filtered, sorted, and exported according to your needs, just like all other data tables in KPN Things.

    The data-graph is configured for most device types to show battery related characteristics, like batteryVoltage and batteryLevel.

    hashtag
    Typical Battery Voltage levels behavior

    In the current portfolio KPN uses 2 types non rechargeable batteries, 3.0 Volt and 3.6 Volt. There is 1 type rechargeable battery, the 3.7 Volt.

    Non rechargeable batteries 3.0V and 3.6V Both the 3.0 and 3.6 type battery will be around the voltage of 3.0V or 3.6 Volt for a long time during their lifespan.

    The course has a stable behaviour during the discharge process.

    Slight fluctuations in voltage are caused by changes in the internal impedance of the battery which arise when the battery is in rest and becomes active when transmitting data and the power consumption by sensor readings. The ambient temperature is also a factor of importance in these fluctuations.

    In the final phase of the battery life, the fluctuations to lower values will be more severe because the battery has more difficulty recovering from the passive to active state when the internal impedance of the battery is increasing.

    In the final phase also the stable character will disappear and once the decline has started, it will proceed relatively faster.

    How long a device will be able to work on a battery at the end of its lifespan depends on the number and current use of messages and sensor readings initiated by the device per day.

    And here too, the ambient temperature is an important factor. Rechargeable LiPo The rechargeable battery has a voltage range from 3.7 Volts to fully charged around 4.2 Volts.

    During consumption, the voltage will decrease and with this rechargeable type the degree of discharge is also influenced by the load and the ambient temperature.

    A rechargeable battery has a slightly greater drop in voltage in the first phase of the discharge process and more as the battery reaches the end of its lifespan. Between those two phases the drop will be gradual.

    If the battery reaches a voltage below 3.6 Volts, it is advisable to charge the battery to ensure proper functioning of the device.

    Service status

    Check the operational status of our platforms in case of issues

    The Service status page provides you with the current operational status of our platforms.

    1. Click on Incidents in the menu for an overview of the status of our platforms

    2. If Overall status is OPERATIONAL all underlaying items are functional

    3. All major incidents are shown in the overview with one of the statuses below


    Investigating

    Under investigation but no cause has yet been found

    Identified

    We found the cause, we are going to apply a fix

    Monitoring

    We applied a fix and monitor if the platform remains stable

    Resolved

    Everything is working fine again

    Closed

    All operational actions are done, we have taken up the learnings to improve our services


    1. This is the date and time of the last update of the incident

    2. The information on this page is also available on in case the Things Portal itself is inaccessible and also more detailed updates on the incident are available

    circle-info

    Scroll down on the Real-time status page to check what subsystem is impacted.

    hashtag
    Subsytem details

    Below the KPN Things Incidents overview more details are available to show which service has been affected.


    Cisco Control Center API

    There is a disruption to the API, please use Cisco Control Center as a workaround when possible

    Cisco Control Center Portal

    There is a disruption at the Cisco Control Center portal, please use Things Portal as a workaround when possible

    KPN Things API

    There is a disruption to the API, please use KPN Things Portal as a workaround when possible

    KPN Things Engine

    There is a disruption of the KPN Things backend that results in not receiving data for customers that use Flows

    circle-info

    There is no workaround available for Freemium, Explorer and Modular subscriptions. In this case M2M data will be lost. LoRa data will be buffered and forwarded after the incident is resolved.

    KPN Things Portal

    There is a disruption to the user interface of Things Portal, please use the KPN Things API when possible or wait with making changes until the incident is resolved

    LoRa Connectivity

    There is a disruption of the whole or a large part of the LoRa network

    circle-info

    There is no workaround available for LoRa network interuptions. Depending on the type of disruption, it may be possible that data will still be delivered after the incident is resolved.

    M2M Connectivity

    There is a disruption of the whole or a large part of the M2M networks of KPN in the Netherlands

    M2M Roaming Connectivity

    There is a disruption in the roaming domain or with a roaming partner.

    circle-info

    There is no workaround. We are aware of the impact of disruptions in the domain of our roaming partners for you as a user. We report this as an incident to our partner to solve the issue.

    hashtag
    RSS feed

    The RSS feed (Really Simple Syndication) makes it possible to automatically receive status updates. You will need an RSS-feed reader or plugin in applications like Slack or Mattermost to be able to recieve the updates.

    The RSS feed for status updates is located at the following URL:

    Contact info

    All methods to get in touch with us

    The Contact info page provides you with all methods to contact us for questions and in case of an incident.

    1. Click on Contact info in the menu to see all options to get in touch with us

    2. We will always be there to help you, contact us if you have any questions

    3. Support methods avaible for Modular and Tailored subscriptions

    circle-info

    Best method in case of a high priority issue for Modular and Tailored subscriptions is to first create a support ticket and then call us to discuss the impact and help us to start the investigation as soon as possible.

    circle-info

    The options shown differ based on the subscription type.

    Release notes

    Stay up to date with the latest features and improvements in the Things Portal, in addition to the regular bug fixes and technical improvements.

    hashtag
    Latest releases

    hashtag
    Release 08-12-2025: Costs overview and Contract

    In addition to the release of the Organization tab, we have also introduced the Costs Overview and contract.

    The Costs Overview gives you more insight into the costs of your IoT contract and what your upcoming invoice will look like. The cost overview and contract are only visible to customers with an Explorer and/or Modular contract. In addition, it is only available to users with the appropriate role (managed by Admin users). Customers with a Tailored contract can't make use of this feature.

    For more information, go to and .

    hashtag
    Release 03-12-2025: Menu 2.0

    We have made several improvements to the KPN Things Portal to enhance usability, streamline navigation and make the interface more clearer. Below is an overview of what's new in this release.

    New Sidemenu

    • The sidemenu now follows the IoT building blocks, making it easier to find what you need with fewer clicks. You'll find section headers such as 'IoT Devices', 'Connectivity', 'Data Processing', and 'Destinations'.

    • Easily add devices, a flow, or a destination using the + button (hover next to the section header).

    • Devices and Connectivity are shown in seperate tables, each displaying only the most relevant data.

    Main Menu Enhancements

    • The main menu has been redesigned to maximize space for page content, allowing more data to be visible at once.

    • The KPN IoT logo has been updated.

    • We've added a new tab: Organization.

    New 'Organization' tab in Main Menu

    • A new "Organization" tab where you can find all your organization information.

    • Go to 'Users' to manage the users of your organization and navigate from here to .

    hashtag
    Release 01-12-2025: Zone List Roaming partners

    The provides information about the available roaming partners around the world. Check the map for an overview and filter on one of the two zones. The page also offers a table with specific information per country and the operators available there. The Zone list replaces the separate roaming operator list documents. You can find the Zone List via the side menu on the Support page.

    For more information, go to the .

    Projects

    Manage your projects

    When you open Things Manager, you’ll start with an overview of your projects. The first step is to select the project you want to work with.

    We’ll show you how this works

    hashtag
    Project overview

    Once you select the desired project, the Project Picker field will automatically display the project name (see image below).

    You are now on the Project Overview page. Here you can view everything included in this project, including the contract linked to it.

    hashtag
    Contract

    To view the contract, first enable access by assigning the Finance Read-only role to your users in GRIP.

    Need help managing your users in GRIP? Go to .

    circle-exclamation

    For now, this option is only available for Explorer and Modular contracts. This feature is currently not available for customers with a Tailored contract.

    hashtag
    Contract details

    You are now on the Contract Details page.

    This page is divided into several sections. First, you’ll see Base Details. This section shows key information about the contract, including the contract type and activation date.

    Under Implementation, you’ll see the project linked to the contract.

    Next, you’ll find the different items included in the contract. Items and discounts are shown by charge type: recurring, one-time, or usage. These items are grouped by product family. The regular price for each item appears in the Unit Price column next to the bold item name.

    If applicable, optional tiered discounts are listed below the corresponding row. The actual discount depends on the quantity, with the applicable range shown in the From and To columns. These columns only appear if the contract includes at least one item with tiered discounts.

    Support tickets

    Create a support ticket to request for information, changes or report an issue

    The Support tickets page provides you with an interface to our IoT Service Desk. This is a click out to ServiceNow to allow you to raise and edit tickets.

    circle-info

    Support Tickets do provide Modular and Tailored subscriptions with an interface to our IoT Service Desk.

    For Freemium and Explorer subscriptions we would like to refer you to Contact Support as described on the Support page via the link below.

    If you have non-urgent technical questions and want to contact a specialist directly, this method can also be used by Modular and Tailored users.

    circle-info

    To open the link and create a ticket you need the permission as shown below. Do you not have these rights? Then ask an administrator within your organization to assign this to your account in MijnKPN Zakelijk.

    hashtag
    Need support now?

    Click the method that matches your subscription below to contact us right away.

    Like to read the Contact Support manual first? Click on the Support link below.

    hashtag
    Support tickets

    Support tickets can be accessed via the following options.

    1. Click on Support Tickets in the menu

    2. Click on the Support Tickets tile

    circle-info

    All items with the click out icon below will be opened in a new tab in another application. Don't worry, we use Single Sign On so you can continue working without logging in.

    Send your data to Azure SQL

    Get your KPN Things device data in a Azure SQL database. This QuickStart will help you set up a KPN Things flow towards an Azure Eventhub. The Azure Eventhub is used to ingest data in to the Azure platform. An Azure Streamanalytics job will process incoming data. The data will be stored in an Azure SQL database. For this QuickStart you’ll need a KPN Things account with an active device (or download the ) and an active Azure subscription.

    In this QuickStart you’ll learn how to:

    • Create and configure the necessary Azure resources

    Edit email subscriptions

    Change your preferences for receiving operational updates

    We aim to keep you well-informed. You’ll receive relevant updates based on your email subscriptions. However, some content may not apply to you, or you might prefer not to receive updates at all. You can adjust your preferences anytime in the Things Portal.

    To change email subscriptions, you need to have a Things Manager role.

    circle-exclamation

    Changing mail subscriptions is not available for Freemium and Explorer users. If there are issues with the KPN Things Portal, Explorer customers will always be informed by email.

    LoPy5

    This is an old development board which is no longer available for purchase and should not be used for new designs.

    The LoPy4 is a quadruple bearer MicroPython enabled development board (LoRa, Sigfox, WiFi, Bluetooth) perfect enterprise grade IoT platform for your connected Things. With the latest Espressif chipset the LoPy4 offers a perfect combination of power, friendliness and flexibility.

    hashtag
    1. Setup your LoPy4 device

    Use the from the Pycom documentation to get started with your LoPy4. Make sure you setup both the

    Supported devices and KPN Devices

    For more information about the devices that are supported in Things portal head over to . Would you like to add your own device, head over to the .

    hashtag
    1. Add new Device

    Head to the Devices in the left menu. Click the Add new device button in the left top corner. This is the place where you register new Devices and add them to KPN Things and our networks.

    Downlinks

    Downlinks are messages sent from KPN Things to a device. The API provides two main approaches to sending downlinks:

    1. Actuator-style downlinks (recommended for most cases)

      • Use the /downlinks resource.

    User Management

    Configure users, roles and permissions

    Managing access to your IoT services is essential for maintaining control, security and efficiency. We offer a range of IoT , each designed to meet different business needs. For each service, there is a need for clear and effective user management.

    User Management ensures that the right people in your organization have the appropriate access to the tools and data they need.

    hashtag
    Tips for effective user management

    Invoices

    Find a copy of your invoices

    The Invoices page provides you with a copy of your invoices. This is a click out to MijnKPN Zakelijk portal to allow you to download invoices as Adobe PDF files.

    circle-info

    Invoices do provide Modular and Tailored subscriptions with the option of a invoice history overview.

    For Freemium and Explorer subscriptions we would like to refer you to Contact Support as described on the Support page via the link below in case an invoice must be provided again.

    Zone list

    circle-info

    The Zone list replaces the separate roaming operator list documents.

    The Zone list page provides a comprehensive view of available mobile technologies across the globe. It consists of two main components:

    • An interactive world map for visual exploration

    Sensors

    circle-info

    hashtag
    Things devices

    Interested in buying some of these KPN Things devices? Head on over to for more information!

    In KPN Things the Device type is used to express the connectivity and data capabilities of a Device, like whether it is a LoRa or an M2M device, and its compatibility to Data Processing components such as decoders and encoders.

    IoT Devices

    Analyse and manage your devices

    The Devices Landing Page in the KPN Things platform provides an overview and management interface for all your registered devices.

    hashtag
    Device Management

    • Search and Filter: At the top, there’s a search bar that allows you to quickly find specific devices by name or other attributes. You can also apply filters to narrow down the devices based on type, status, or other criteria.

    Send instruction to LoRa Device page

    Learn how to send an instruction (downlink) to your LoRa Device

    Note that for this tutorial you need to use a LoRa device.

    hashtag
    1. Request downlink

    Go to the All Devices page and click on the device you want to send a downlink to.

    Open the Send Instruction

    Downlinks
    Projects
    https://crl.certsign.ro/certsign-webca.crtarrow-up-right
    status.kpnthings.comarrow-up-right
    https://kpnthings.statuspage.io/history.rssarrow-up-right
    Contact info

    The settings below show best practice for multi-factor authentication: combining SMS or Email with Credentials creates the required score for a successful login.

    circle-questionSupportchevron-right
    Cover

    Contact a specialist

    Ask for support when you have a Freemium or Explorer subscription

    Cover

    Contact our Support Desk

    Raise a ticket when you have a Modular of Tailored subscription

    Support Tickets
    User Management
    The project picker shows which project's information you are currently viewing. If no project has been selected yet, it will display 'Project'.
    Costs overviewarrow-up-right
    Contractarrow-up-right
    User Management
    Zone list arrow-up-right
    Zone list pagearrow-up-right
    Create and configure Azure Eventhub
  • Create an Azure SQL database with appropriate data tables

  • Create and configure a Stream Analytics job

  • Setup a KPN Things Flow with Azure Eventhub destination

  • hashtag
    Prerequisites

    • KPN Things Account with active device

      • If you don’t have an KPN Things account create a free developer accountarrow-up-right.

    • Azure subscription

      • If you don't have an Azure subscription, create a .

    hashtag
    Step 1: Setting up the Azure environment

    In this section you’ll be guided through the creation and configuration of an Azure event hub, a stream analytics job and an Azure SQL database. It’s advised to create a new resource group in which to bundle these newly created resources.

    hashtag
    Creating and configuring Azure event hub

    The Azure EventHub is used for the ingestion of data. Don't have an Azure Event Hub yet? Head on over to the Microsoft documentation to learn to create an Azure Event Hub:

    From this point, when following the link, you’ve created everything to ingest data to Azure. You have created a resource group, an Event Hubs namespace, and an event hub.

    hashtag
    Create an Azure SQL database with appropriate data tables

    Now we have prepared the input data by creating the Event Hub. We can now proceed to the creation of the Azure SQL database for the data output. Don't have an Azure SQL database yet? Head on over to the Microsoft documentation to learn how to create an Azure SQL database:

    At creation, remember to select the resource group created earlier. This way all resources for this quick start will be grouped together. Furthermore, make sure to write down the ‘Server admin login’ and ‘Password’. Under additional settings don’t select sample as we want to create our own data table later on.

    hashtag
    Query the database

    When the creation of the database is complete we can create the necessary table. Go to the query editor in the Azure portal as described in the documentation link:

    In the query window run the query underneath to create a new data table in the database:

    When completed a new data table called eventhub will be created. Additionally, two indexes will be created to enable quick searches on ‘bn’ and ‘bt’. These columns will hold the KPN Things device identifier and measurement timestamp. The newly created data table will be visible in the left view under tables.

    At this point you’ve created the data input and the data output by leveraging an Event Hub and an Azure SQL database. In the next step we’ll set up the data stream from input to output by using Azure Streamanalytics.

    hashtag
    Create and configure a Stream Analytics job

    Now we have prepared the input data by creating the Event Hub and the data output by creating an Azure SQL data store. Now let’s set up Streamanalytics to tie it all together.

    The following Microsoft quickstart will guide you through the creation of an streamanalytics job. The entire article describes the usage of an iothub for input data and blob storage for output. Remember in this quickstart we will be using Eventhub for input and Azure SQL database as output.

    At ‘Configure job input’ select Event Hub and point to the Eventhub created earlier. Use ‘eventhubinput’ as alias.

    At ‘Configure job output’ select SQL database and point to the Azure SQL database created earlier. Set the database table to ‘eventhub’ to match the table created during the previous step. Use ‘sqloutput’ as alias.

    At ‘Define the transformation query’ select Query and update with the query underneath. Make sure you are using the input and output aliases as created under input and output

    Now Save your input and start the Stream Analytics job.

    At this point you’ve created a data ingestion point (Event Hub) a streaming data processor (Stream analytics job) and data storage (Azure SQL database) . In the next step we’ll connect KPN Things to Azure!

    hashtag
    Step 2: Setup a KPN Things Flow with Azure Event Hub destination

    Let’s put things together! Now everything is set up in Azure all we need to do is setup a data flow in KPN Things. This Flow will send device data towards an Azure Event Hub destination.

    • Go to KPN Things and add a flow and give it a name and description

    • Link new or existing device(s)

    • Now go back to the flow and set up the data processing by enabling the decoders for the selected device

    • Add a destination for the flow. Select ‘Create new Destination’. Fill in all necessary details related to the Azure event hub created in Step 1. Don’t know where to find all the required parameters? Follow the instructions here.

    When all parameters are set the destination should be active. You should now have a working KPN Things Flow towards Azure Event hub.

    hashtag
    Congratulations!

    You’ve created your first flow towards Azure. All Data produced by the devices in the flow will now be sent to Azure, get processed by the Stream Analytics Job and will be stored in the Azure SQL database.

    device simulator app
    hashtag
    Access email subscriptions

    You can access email subscriptions in two ways.

    1. Via My Things User Details (personal settings only)

    2. Via Things Manager tab (change settings of all users, admin only)

    hashtag
    Via My Things User Details

    1

    Click your name in the top-right corner in the KPN Things Portal.

    Click My Things user details

    2

    Under the Operational Email Subscriptions section, select Edit Subscriptions.

    3
    1. Select only the update types you want.

    2. Click Save to apply your settings.

    hashtag
    Via Things Manager Tab

    hashtag
    Before you start

    To manage email subscriptions of other users, you need the Things Manager - Admin role.

    • Already an admin? Great! Let’s get started!

    • Not an admin yet? Ask your organization’s administrator to grant you admin rights Not sure who that is? Contact us and we’ll help you out

    1
    1. Click the Things Manager tab in the KPN Things Portal

    2. Click your Company in the menu

    3. Select User Profiles under Account

    2

    Click the button at the end of the selected user.

    circle-info

    Your own account is marked with 'you' in the First name column.

    3

    Under the Operational Email Subscriptions section, select Edit Subscriptions.

    4
    1. Select only the update types you want.

    2. Click Save to apply your settings.

    circle-check

    Service Updates – Stay informed about new features that enhance your services.

    Planned Maintenance – Get notified about scheduled maintenance so downtime never catches you off guard.

    Incidents – If an incident occurs, we’ll let you know immediately.

    and
    . You should be able to
    when continuing this getting started.

    hashtag
    2. Determine device identifiers

    The LoPy4 is a LoRa device, and to register a LoRa-device to a network you need three values: DevEUI, AppEUI and AppKey. These values must be registered in KPN Things and in the device. For more information on these three values you can read Device Identificationarrow-up-right in the LoRa documentation.

    Value

    How to get it

    DevEUI

    Use from the Pycom documentation to retrieve the pre-programmed EUI from your LoPy4. You can use that one as DevEUI.

    AppEUI

    You can use this general purpose AppEUI: 0059AC00000FFFFF

    AppKey

    Every device should have its own unique AppKey, since it is the root security key of your device. You can generate a unique AppKey here: .

    hashtag
    3. Register your LoPy4 to KPN Things

    hashtag
    Open the KPN Things Portal

    Open the KPN Things Portalarrow-up-right. Go to the All Devices page and click on Add new Device.

    hashtag
    Fill in your device information

    1. Select the Own LoRa device (preset connectivity) device type

    2. Enter a name for your LoPy4

    3. Click Add Device to continue

    hashtag
    Provide Network Information

    Fill in the three values you determined in the previous step Determine device identifiers. Then click Add Network Info to save the network information and then Finish to continue.

    hashtag
    Check your newly created Device

    You are now on the Device Detail Page. In the LoRa tab you will see the network status. This can temporarily be Pending creation, but if you refresh the page it should switch to Active. This means your device is correctly registered to the network.

    If the network status sticks to Pending creation, you could try to delete the Device and register the device again.

    triangle-exclamation

    If the Network Status ended up in Failed, something has gone wrong. Most likely the DevEUI is already registered through another application like Thingpark or the LoRa Developer Portal. Please make sure you remove the device registration from the other application and re-add the device in the Things Portal. For more information consult our FAQ.

    hashtag
    5. Program your device

    Use the LoRaWAN with OTAAarrow-up-right example from Pycom to get your device connected with our LoRa network and have it send data to KPN Things.

    hashtag
    Check incoming data in the Portal

    Now your LoPy4 has joined and is sending data, you could visit the LoRa data tab on your Device Detail Page in the Portal. You should see your Join request and Join accept appear like in the screenshot below and at this point you will see more data as well.

    Read more information about what you see on the LoRa Data Historyarrow-up-right tab.

    hashtag
    Setup data flow in KPN Things

    You now successfully connected your LoPy5 device to KPN Things! To further setup your data flow in KPN Things, you can go to the next step:

    getting startedarrow-up-right
    hardware arrow-up-right
    softwarearrow-up-right
    program the modulearrow-up-right
    If you have more than one Project, you will have to select to which Project you would like to add your Device.

    hashtag
    2. Select your Device type

    circle-info

    Depending on your Project subscription, available Device types may vary.

    You can select an existing device-type offered by KPN Things, or create a new device type using the Things Creator app.

    hashtag
    3. Fill in Device Information

    • Name: Typically can be a Device ID or the name of a physical asset which the device is linked to.

    • Barcode (optional): Barcode or serial number used to identify a device.

    • Description (optional): Any additional device information.

    When done, click Add Device to continue.

    hashtag
    4. Provide or get Network information

    This step will look differently, depending on the type of network information.

    • Generated LoRa network information (programmable device)

    • Provided LoRa network information (device with preset connectivity)

    • M2M network information

    hashtag
    Generated LoRa network information (programmable device)

    If you selected Own LoRa device (programmable) device type in the previous step, the Portal will give you the OTAA join information (DevEUI, AppEUI and AppKey). Make sure to copy-paste or write down the provided identifiers. For security reasons the secret values will not be retrievable through the Portal after closing this page.

    Click Finish to continue.

    hashtag
    Provided LoRa network information (device with preset connectivity)

    If you selected Own LoRa device (preset connectivity) or a supported device type, you should provide the LoRa network information for your device in this step.

    Click Add network info to save the network information and then Finish to continue.

    hashtag
    M2M network information

    1. IMEI of your Device.

    2. ICCID of your SIM-card - select the correct SIM card from the drop down. If you have an Early access SIM, you choose the option "Add early access SIM" and enter the ICCID of the SIM manually in the newly appeared input field (see A in the screenshot below).

    3. Shared secret

    After entering the values, click Add network info to save the information, or click Finish without adding Network to continue without adding network information to your Device object.

    hashtag
    Internet network information

    1. DvnUUID - the unique number to identify incoming data from your Device. Your Device UUID is prefilled, but you can enter any UUID you like.

    2. Shared secret

    hashtag
    5. Check incoming data in the Portal

    You can visit the LoRa data or M2M data tab on your Device Detail Page in the Portal. You should see messages here as soon as the device has activity on the network.

    You're ready for the next step:

    IoT devices
    Things Creator section

    You provide a high-level command, and KPN Things translates it into the correct low-level protocol format using the configured encoder for your device.

  • This approach is safer and easier to use, since KPN Things handles protocol-specific details.

  • Connection-specific downlinks (advanced usage)

    • Use protocol-specific APIs such as /http/downlinks, /mqtt/downlinks, /sms/downlinks, /lora/downlinks, or /digitalmatter/downlinks.

    • You send downlink payloads in the native format of the underlying connection type.

    • This allows greater flexibility but comes with risks: you may send commands that disrupt device operation (for example, disabling communication). Use these APIs only when actuator-style downlinks do not meet your requirements.

  • hashtag
    Choosing the Right API

    • Use actuator-style downlinks whenever possible. They are protocol-agnostic, simpler, and safer.

    • Use connection-specific APIs if you need full control over the payload format or protocol-specific features.


    hashtag
    Actuator-Style Downlinks

    Download the /downlinks specificationarrow-up-right


    hashtag
    HTTP Downlinks

    Download the /http/downlinks specificationarrow-up-right


    hashtag
    LoRa downlinks

    Download the /lora/downlinks specificationarrow-up-right

    hashtag
    SMS Downlinks

    Download the /sms/downlinks specificationarrow-up-right


    hashtag
    MQTT Downlinks

    Download the /mqtt/downlinks specificationarrow-up-right

    Define clear roles and responsibilities - Assign roles based on actual responsibilities. Avoid giving users more access than they need, this helps reduce security risks and keeps your environment organized.

  • Regularly review User Access - Periodically check who has access to the services. Remove inactive users and adjust permissions when their roles changes.

  • Train your users - Make sure users understand their roles and how to use the platform securely and effectively. A little training goes a long way in preventing mistakes.

  • Ask for KPN support - If you're unsure about how to structure your user access or need help, don’t hesitate to reach out to for guidance.

  • hashtag
    Next Step

    To learn more about how to manage users within your specific IoT service, please select the page that matches your KPN IoT solution. Each section provides tailored guidance to help you manage users effectively within your environment.

    propositions
    circle-info

    To open the link and check invoices you need the permission as shown below. Do you not have these rights? Then ask an administrator within your organization to assign this to your account in MijnKPN Zakelijk.

    hashtag
    Need your invoices now?

    Click the tile below to open MijnKPN Zakelijk right away.

    hashtag
    Invoices

    Invoices can be accessed via the following options.

    1. Click on Invoices in the menu

    2. Click on the Invoices tile

    circle-info

    All items with the click out icon below will be opened in a new tab in another application. Don't worry, we use Single Sign On so you can continue working without logging in.

    A detailed Zone list table for in-depth analyses

    hashtag
    Interactive Map

    The Zone list map offers a global overview of operator availability by country. Key features include:

    1. Zone filtering: toggle between Premium and Economy zones

    2. Color Legend: easily identify zone types using the map legend

    3. Country details: click on a country to view available operators

    4. Dynamic updates: the map shows the filtered countries and their operators from the Zone list table, divided/shown by economy or premium maps

    hashtag
    Zone list Table

    The Zone list table provides detailed, country-specific information about available mobile technologies. Users can:

    • Apply Filters: Narrow down results by country, zone type, technology and more

    • Check Technology status:

      • Live: the technology is currently active and available

      • Ending: the technology is still available but is being phased out

    This table is designed to support decision-making by offering granular insights into global technology availability. Click the information button (next to 'Zone list' at the top of the table) for tips on how to use the table and additional details about the displayed data.

    hashtag
    Tips for use

    • Use the Zone toggle on the top to toggle the map view between Premium & Economy zones

    • Use Alt (Windows) or Command (Mac) + Scrollwheel to zoom in on the map, drag it to pan the map

    • Use the toggle above the legend to make the map reflect what you filtered in the table

    • Click a county to pin the data in the information field, click unpin to show data on hover again

    • Use the right mouse button on the table to export to your spreadsheet software

    • Hover on the link on the bottom of the table to see when the table was last updated

    hashtag
    Zone information

    In the list the 2 standard sets of zones are represented: the Premium zones (also known as full zones) and the Economy zones. The list contains as well a column with the name of the zone as a separate column for each zone.

    Note: The Premium Zones are based on countries. All for KPN IoT available networks are accessible for usage within that zone. Each higher zone actually also contains the countries (and operators) in the earlier zone. If a Rate Plan doesn't contain one of the first zones, the countries will be included in the first next mentioned zone.

    Note: The Economy Zones are based on a selected set of operators within a country. KPN IoT tries to make the best balance between coverage, quality and price. This means that not all for KPN IoT available networks are accessible for usage within that zone. Note as well that each higher zone doesn't contains the operators (and countries) in the earlier zone. This means that if a Rate Plan doesn't contain one of the first zones, the usage on those operators (in those countries) will NOT be included in the first next mentioned zone, but will be stated as usage in 'Other' (which is most of the times highly priced). Always make sure that when a Rate Plan containing these zones is connected to a subscription (SIM), that also the Communication Plan is related and handles the roaming restriction set that belongs to the economy zones.

    KPN Things supports the devices as shown in the subpages of this page.

    hashtag
    KPN Things Devices versus Supported Devices

    We have two categories of Device types, namely KPN Things Devices, when you buy a Device from us, and Supported Devices, when you bring your own Device to KPN Things. Each categorie has its own set of Device Management features in the Portal.

    KPN Things Devices

    Supported Devices

    Can be recognized by the 🔒 symbol in the Device list.

    Bring or Buy

    Buy

    Bring yourself

    Add to / remove from Portal

    ❌

    ✅

    Edit name and description

    Legenda ✅ - Available for this device type. 🟡* - Configurable for your own device, coming soon. ❌ - Not available for this device type.

    https://www.kpn.com/zakelijk/internet-of-things/hardware.htmarrow-up-right
  • Add a New Device: You can manually add a new device by clicking on the "Add new Device" button. This will guide you through the process of registering a new device with details such as its type, unique ID, and configurations.

  • Bulk Management Options:

    • Bulk by CSV File: This is a key feature that allows you to upload multiple devices at once using a CSV file. You can use this feature to save time when you need to add or manage large numbers of devices at once.

    • Firmware Management: This option lets you add new firmware version on your devices. Keeping firmware updated is important for security and functionality improvements.

  • hashtag
    Bulk actions

    Next to the device list, you will see options for bulk actions, like activating or deactivating your M2M devices, or editing device settings in batches. These actions can be initiated by selecting multiple devices from the list or by uploading a CSV file that contains the necessary device information.

    hashtag
    Exporting to CSV

    You can easily download the Devices - Data result set by clicking the Download icon just below the Search icon.

    This will generate CSV file, containing all devices in the current selection. The CSV file will contain the measurements accompanied with the timestamp of that specific measurement.

    Devices overview

    Click on the Bulk by CSV file button.

    This step opens the process for uploading multiple devices at once via a CSV file. This saves time since you don’t need to add each device individually.

    Upload bulk file

    You are asked to upload a CSV file with the device data. Ensure that the structure of the file matches the template exactly, which you can download. Use a comma (,) as the CSV separator.

    After uploading the CSV file, it will be validated.

    Bulk file validation

    This screen gives you feedback on the validation. All devices with valid data are displayed, and devices with errors won’t be processed. The system checks fields such as IMEI, ICCID, and other required fields.

    After validation, choose the target project and flow where the new devices should be added. You can also specify the device details, such as the device type.

    Bulk upload target location

    Here, you define the project and flow in which the new devices will be processed. You can also choose the type of devices being added, for example, M2M devices or another type.

    Click on Add new M2M Devices to start adding the devices.

    Bulk upload execution

    The system will now begin adding the devices. You can monitor the process by following the progress in the Bulk reports where you can see if all devices were successfully created.

    tab. There you will find the input fields to send a downlink to your LoRa device:
    • FPort: is the LoRa application port on which to send the data. If you don't use application ports on your device, you can just use 1.

    • Payload: is the data you want to send to your device, written in hexadecimal characters. You could use for instance 010203.

    Click Submit to request the downlink to be sent to the device.

    hashtag
    2. Check status of downlink

    After requesting the downlink, under Status Downlink your downlink will have appeared. Maybe you first see your downlink with the PENDING status, meaning it is still being processed, but if you hit the refresh button (#2 in the screenshot) you should see it switching to EXECUTING.

    Queuing At most one downlink can be in EXECUTING at a time. When you submit more downlinks, they will stay in the PENDING state and they will be processed "first in first out". You can have at most 5 downlinks in PENDING. As long as a downlink is in PENDING mode, you can cancel it. If you do so, it will not be send anymore and the status will change to CANCELLED.

    Learn more about downlink statusesarrow-up-right. LoRa Downlinks sent through KPN Things are always Confirmed downlinks. That way we trigger an Acknowledgement (ACK) from the device in the next uplink, and with that information we can determine whether a downlink was received or not.

    Click on the refresh button (#1 in the screenshot) to refresh your Data History table. There should now be an uplink record following your downlink record that contains an ACK (#2 in the screenshot).

    • If the uplink containing the ACK was not received by the network, you will see your downlink is still in EXECUTING. When a next uplink is received we conclude the downlink as FAILED, since we do not know for sure whether the downlink has been received. You could state that the quality of service for downlinks through KPN Things is "at least once".

    If you switch back to the Send Instruction tab, you should see that the status of your requested downlink has switched to DELIVERED. That means the acknowledgement has been received by the network.

    circle-info

    You can also send downlinks by API calls

    Are you interested in sending downlinks to your Devices through API calls? That is also possible! Head on over to our API access to learn how.

    hashtag
    Optional: send your data to Azure SQL

    Device SDKarrow-up-right
    Things M2M documentation
    This page

    Smartrak

    The Smartrak M2M GPS tracker is a device produced by Streamline and used for demo purposes. When you push the button the device will send its location to KPN Things.

    Smartrak M2M tracker

    hashtag
    Check contents of the test device box

    The first step is to check if everything is present in the box:

    Contents:

    • Battery (1)

    • Logic board (2)

    • Bottom part of the casing (3)

    • Top part of the casing (4)

    • KPN M2M SIM card (5)

    • Wireless Charger (not shown)

    hashtag
    1. Insert SIM and assemble device

    hashtag
    Assemble the device

    Step 1: Insert the SIM-card and write down the IMEI (1), we need that later.

    Step 2: Connect the battery.

    Step 3: Connect the vibration motor. This can be a bit of challenge, but you can do this. The connector has to be pushed on the terminal from above instead of sliding

    Step 4: Connect the bottom part. This is the wireless charging circuit.

    Step 5: Put everything together.

    Step 6: Rotate the two parts as shown. The on/off button has to be on the side of the vibration motor.

    Step 7: Click two parts of the casing together.

    hashtag
    Charge the device

    1. Plug in your QI charging device.

    2. Place the device on the QI charging device and allow it to charge for a few hours.

    3. You should hear a beep when the device starts charging.

    hashtag
    2. Configure the device in the KPN Things Portal

    hashtag
    Open the KPN Things Portal

    Open the , and log in with the credentials you received in the mail. Go to the All Devices page and click on Add new Device.

    hashtag
    Fill in your device information

    1. Select the Streamline M2M device device type

    2. Enter a name for your test device

    3. Click Add Device to continue

    hashtag
    Provide Network Information

    Now enter the Streamline M2M specific information of your Device.​‌

    1. IMEI of your Device. This value is printed on the logic board. If you followed the , you have written this value down.

    2. ICCID of your SIM card. This value is printed on your SIM card. Select the correct SIM card from the drop down.‌

    3. Click Add Network Info to save the network information and then Finish to continue.‌

    If you want, you can .

    hashtag
    Check incoming data in the Portal

    Push the button on the device and it will send its location to KPN Things! After the push the LEDs start blinking:

    1. Lightning icon: GPS location is being searched

    2. Battery icon: Device is turned on / charging

    3. Waving person icon: indicates the button is pressed

    The first time after connecting the battery it can take up to 5 minutes to receive a message. If the LEDs do not start blinking try to push and hold the on / off button for 10 seconds. The battery LED in the middle should start blinking. If still nothing happens, try to charge the device for at least 2 hours.

    You should now visit the in the Portal of this Device. In the connectivity block, you should see that the last message time indicates that KPN Things just received a message from your Device!

    Continue to the next step:

    Connectivity

    Manage and control your connectivity for your IoT solutions

    The Connectivity page gives you a clear overview of all your connections. Here, you gain insight into their status and settings. We distinguish between LoRa and M2M connectivity.

    hashtag
    Connectivity menu

    hashtag
    Show all or narrow down

    1. At the top left you see the project picker. Leave the project picker empty and the side menu allows you to work accross all your projects

    2. Pick a project and both the menu and the data will narrow down to just that specific project, just like the filters you can use in your

    3. To open all connectivity items click one of the seperate tables for M2M and LoRa

    hashtag
    Open the connectivity view

    1. Once you’ve selected a project, you can choose the connectivity overview in the project’s detail view

    2. You can also use the side menu to open the same view

    hashtag
    View options and filters

    Below the table we show.

    1. number of ICCIDs shown per page

    2. total number of ICCID's

    3. current page and total number of pages

    Use the filter options in the top-right corner to refine your overview.

    1. Save your filter after making changes, you can store up to 10 different layouts

    2. Expand the table to full screen, then click the ie to return to the standard view

    3. Open the view options menu

    In the view options menu under the icon, you’ll find tools to tailor the view to your needs.

    1. Open the columns selector

    2. Click an item and hold the left mouse button to drag it to your preferred position

    3. Click a header and hold the left mouse button to drag it to your preferred position

    It is possible to filter on multiple variables to create a cross-section of the data. The filters applied to the overview are shown at the top in light blue boxes.

    1. Open the filter selector

    2. Click an item and select the desired check boxes, or enter part of the value to search

    3. Click the icon at the top of the overview or by using Reset in the filter selector

    circle-check

    Don’t forget to save your created overviews and filters using the icon, so you can easily reuse them later.

    Want to learn everything about using tables in the Things Portal? Watch the under tables for more details.

    hashtag
    Manage connectivity

    When you choose the connectivity variant, you’ll see an overview of connections, based on whether you selected a specific project or all connectivity.

    Things Manager includes the following menu items

    Connect devices

    Connect your device to KPN Things

    Choose one of the below device types to continue setting up your IoT solution.

    hashtag
    Sim card

    You can request KPN M2M sim cards at https://portal.kpnthings.comarrow-up-right. Register for free and find the link in the M2M is now available notification to order your SIM cards.

    Continue configuring your SIM cardsarrow-up-right.

    hashtag
    Device Simulator Web app

    We recommend starting with connecting the KPN Things device simulator app. You can use this app to simulate a device and send messages whenever your want.

    Continue with the .

    hashtag
    Supported devices & KPN devices

    KPN Things supports commonly used IoT devices out of the box. If you want to get started with one of these devices, continue with .

    hashtag
    Developer devices

    Start experimenting and discover the wide range of possibilities with these developer devices.​

    hashtag
    Old developer devices

    These development boards are no longer available for purchase and should not be used for new designs.​

    hashtag
    Other devices

    To connect other devices head over to the .

    Continue to the next step:

    Generic Device (Internet connected)

    Generic Device (Internet connected)

    Connect your (virtual) Internet-connected device to KPN Things.

    • Supported network type(s): INTERNET

    • Device Specification ID: own-internet

    • Device Specification UUID: b2c5c303-4f74-4b58-95f5-b80455fdafbc

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    › Decoded ThingsML and raw SenML data

    • UUID: 16799a1c-9dea-4fc9-83b1-03d4562aba69

    • Description: One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    • Exchange: decoder.thingsml.json.exchange

    hashtag
    Expected SenML outputs

    Unknown

    hashtag
    › Decoded ThingsML and raw SenML data (v2)

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    hashtag
    Example SenML

    This is completely dependent on the SenML or ThingsML input and could output almost any SenML. The decoded ThingsML below is just illustrative of what is possible.

    hashtag
    = SenML data encoding

    • Protocol: HTTP response

    • Description: Send SenML data to your device.

    • Multiple commands in one downlink: No

    LoRa connectivity configuration

    Change your connectivity profile

    The LoRa Connectivity configuration page gives you the opportunity to choose the connectivity profile that best suits your application.

    The Devices overview provide you with a list of all devices als the connectivity used.

    1. Click on Devices to show the device overview on the Things Manager tab

    2. Search for a device Name of DevEUI to find the device and click the icon to open the Device and Connectivity details

    3. Or click on the icon to open the Device and Connectivity directly in your device overview list

    1. Click on the Connectivy Plan name to go to the LoRa Connectivity configuration section

    2. Or open the LoRa tab and scroll down to the LoRa Connectivity configuration section

    1. Click Edit LoRa Connectivity configuration

    2. The page show an overview of the current connecivity settings for this device

    3. Want to learn more about the different settings how they work then click the link to go to the about LoRa connectivity configuration

    hashtag
    Edit configuration

    The connectivity plan can be updated here, by selecting the Connectivity plan selection box a new dialog opens In this dialog all available connectivity plans are shown, it shows per connectivity plan if it includes geolocation.

    1

    hashtag
    Configure Connectivity plan

    Click on the Connectivity plan selector

    2

    Device Simulator (Mobile Phone app)

    Device Simulator (Mobile Phone app)

    A device specification for the Things Device phone App.

    • Supported network type(s): INTERNET

    • Device Specification ID: own-phone-qr

    • Device Specification UUID: 3f77934a-2310-4504-89d7-08f40a25c2b8

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    › Decoded ThingsML and raw SenML data

    • UUID: 55e10f0f-23e6-40c3-a1f0-1e468f9cca1c

    • Description: One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    • Exchange: decoder.thingsml.json.exchange

    hashtag
    Expected SenML outputs

    Unknown

    hashtag
    › Decoded ThingsML and raw SenML data (v2)

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    circle-info

    This decoder also decodes data.

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    Example SenML

    This is completely dependent on the SenML or ThingsML input and could output almost any SenML. The decoded ThingsML below is just illustrative of what is possible.

    hashtag
    = SenML data encoding

    • Protocol: HTTP response

    • Description: Send SenML data to your device.

    • Multiple commands in one downlink: No

    Generic M2M device (with Internet connection)

    Generic M2M device (with Internet connection)

    Connect your own M2M Device that communicates over the Internet. Useful when only Device management data is sent to KPN Things. Part of the Device Management + Connectivity only proposition.

    • Supported network type(s): MQTT,INTERNET,KPNM2M

    • Device Specification ID: own-m2m-with-internet

    • Device Specification UUID: cf872c9e-9343-47db-b972-35dc4df340c8

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    › Decoded ThingsML and raw SenML data

    • UUID: c876bac7-c664-4297-a954-2666eb6aae54

    • Description: One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    • Exchange: decoder.thingsml.json.exchange

    hashtag
    Expected SenML outputs

    Unknown

    hashtag
    › Decoded ThingsML and raw SenML data (v2)

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    hashtag
    Example SenML

    This is completely dependent on the SenML or ThingsML input and could output almost any SenML. The decoded ThingsML below is just illustrative of what is possible.

    hashtag
    = SenML data encoding

    • Protocol: HTTP response

    • Description: Send SenML data to your device.

    • Multiple commands in one downlink: No

    Trackers

    circle-info

    hashtag
    Things devices

    Interested in buying some of these KPN Things devices? Head on over to https://www.kpn.com/zakelijk/internet-of-things/hardware.htmarrow-up-right for more information!

    In KPN Things the Device type is used to express the connectivity and data capabilities of a Device, like whether it is a LoRa or an M2M device, and its compatibility to Data Processing components such as decoders and encoders.

    KPN Things supports the devices as shown in the subpages of this page.

    hashtag
    KPN Things Devices versus Supported Devices

    We have two categories of Device types, namely KPN Things Devices, when you buy a Device from us, and Supported Devices, when you bring your own Device to KPN Things. Each categorie has its own set of Device Management features in the Portal.

    Legenda ✅ - Available for this device type. 🟡* - Configurable for your own device, coming soon. ❌ - Not available for this device type.

    Generic M2M device

    Generic M2M device

    Connect your own M2M device to KPN Things.

    • Supported network type(s): KPNM2M

    • Device Specification ID: own-m2m

    • Device Specification UUID: 7748b913-3901-4cbd-be66-96d366e85539

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    › Decoded ThingsML and raw SenML data

    One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    hashtag
    › Decoded ThingsML and raw SenML data (v2)

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    Example SenML

    This is completely dependent on the SenML or ThingsML input and could output almost any SenML. The decoded ThingsML below is just illustrative of what is possible.

    hashtag
    = SenML data encoding

    • Protocol: HTTP response

    • Description: Send SenML data to your device.

    • Multiple commands in one downlink: No

    Projects

    hashtag
    Project types

    The Project type determines what you can and may do in KPN Things Portal. Some KPN Things Projects provide you with more features in the Portal than others.

    Depending on the subscription of your Project, one or more of the following restrictions can apply:

    CREATE TABLE [dbo].[eventhub](
      [Id] [int] IDENTITY(1,1) NOT NULL,
      [EventProcessedUtcTime] [datetime] NULL, 
      [bn] nvarchar NULL, 
      [bt] [float] NULL, 
      [EventEnqueuedUtcTime] [datetime] NULL, 
      [n] nvarchar NULL, 
      [u] nvarchar NULL, 
      [v] [numeric](18, 2) NULL, 
      [vs] nvarchar NULL, 
      [PartitionId] datetime2 NULL, 
      PRIMARY KEY CLUSTERED
      ( 
        [Id] ASC 
      )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] 
    GO
    
    CREATE INDEX eventhubbn 
    ON eventhub (bn) 
    GO
    
    CREATE INDEX eventhubbt 
    ON eventhub (bt) 
    GO
    --Saving the measurements to SQL
    SELECT
        CASE
          WHEN bn IS NULL THEN  LAG(bn) OVER (PARTITION BY EventEnqueuedUtcTime LIMIT DURATION(second, 1)WHEN bn IS NOT NULL)
          ELSE bn
        END as bn,
        CASE
          WHEN bt IS NULL THEN  LAG(bt) OVER (PARTITION BY EventEnqueuedUtcTime LIMIT DURATION(second, 1)WHEN bt IS NOT NULL)
          ELSE bt
        END as bt,
        EventProcessedUtcTime,
        EventEnqueuedUtcTime,
        n,
        u,
        v,
        vs,
        PartitionId
    INTO
        [sqloutput]  
    FROM 
        [eventhubinput]

    ✅

    ✅

    Activate / deactivate in Portal

    ✅

    ✅

    Send / receive raw payload

    ❌

    ✅

    Send commands

    ✅

    🟡 *

    Device Twin - Reported state

    ✅

    ✅

    Device Twin - Clear measurements

    ❌

    ✅

    Device Twin - Desired state

    ✅

    🟡 *

    Device Twin - Metadata

    ❌

    ✅

    Freemium

    Manage your personal Things Portal user account

    Explorer

    Manage multiple Things Portal user accounts

    Modular

    Manage multiple user accounts for all your KPN IoT services

    Tailored

    Manage multiple user accounts for all your

    KPN IoT services including Cisco Control Center

    Cover
    Cover
    Cover
    Cover

    Download your invoice

    Go to the Invoices module in MijnKPN Zakelijk and open or download your copy

    Cover

    ✅

    Activate / deactivate in Portal

    ✅

    ✅

    Send / receive raw payload

    ❌

    ✅

    Send commands

    ✅

    🟡 *

    Device Twin - Reported state

    ✅

    ✅

    Device Twin - Clear measurements

    ❌

    ✅

    Device Twin - Desired state

    ✅

    🟡 *

    Device Twin - Metadata

    ❌

    ✅

    KPN Things Devices

    Supported Devices

    Can be recognized by the 🔒 symbol in the Device list.

    Bring or Buy

    Buy

    Bring yourself

    Add to / remove from Portal

    ❌

    ✅

    Edit name and description

    ✅

    connectivity without selecting a project first.

    Open the columns and filters editor for advanced options to customize your view

  • You can always return to the default setting by clicking Back to main view

  • Export your current overview as a CSV file based on the selected layout

  • Export your current overview as an Excel file based on the selected layout

  • Click on the check boxes to show or hide an item

    Click the icon to clear filters to clear all filters

  • Click Apply to activate a filter or refresh it after making changes

  • tables
    instruction video
    Select connectivity overview
    Select connectivity view
    View details
    Filter menu
    Columns selector
    Filter selector
    Cover

    M2M and eSIM connectivity configuration

    Learn more about managing your M2M and eSIM connectivity configuration

    Cover

    LoRa connectivity configuration

    Learn more about managing your LoRa connectivity configuration

    No input mapping

    › Decoded ThingsML and raw SenML data

    16799a1c-9dea-4fc9-83b1-03d4562aba69

    One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    › Decoded ThingsML and raw SenML data (v2)

    4a8f1ec7-df52-5a57-a281-422e000d3b1d

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    = SenML data

    86805e45-c394-4ebc-a2e1-a47079a57999

    Send SenML data to your device.

    hashtag
    Select Connectivity plan

    Select the preferred connectivity plan

    3

    hashtag
    Change the profile and motion indicator

    The device profile and motion indicator of a LoRa device can also be updated

    circle-info

    If the device profile is changed the motion indicator is automatically updated, but it can be changed if required afterwards.

    4

    hashtag
    Save the settings

    Select Save to apply the change. The connectivity plan of the LoRa device is now updated.

    Of course you can also click Cancel to keep your current setting.

    documentation
    Devices overview
    Configuration section
    LoRa Connectivity configuration
    No input mapping

    › Decoded ThingsML and raw SenML data

    55e10f0f-23e6-40c3-a1f0-1e468f9cca1c

    One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    › Decoded ThingsML and raw SenML data (v2)

    9bbb7980-b08b-5902-8d10-1fe68f2c64f7

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    = SenML data

    e83cf205-3ef5-44c3-979a-fa7dd3e132c8

    Send SenML data to your device.

    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    No input mapping

    › Decoded ThingsML and raw SenML data

    c876bac7-c664-4297-a954-2666eb6aae54

    One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    › Decoded ThingsML and raw SenML data (v2)

    45b27e02-8136-540b-a4e1-509d7a2c2aa2

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    = SenML data

    cc35ab44-01d3-4086-885a-a30cb37c0a12

    Send SenML data to your device.

    No input mapping

    › Decoded ThingsML and raw SenML data

    755d9cc5-e5cf-4a42-88dc-bb17458c58fe

    One decoder to forward raw SenML data and decoded ThingsML data sent by the device.

    › Decoded ThingsML and raw SenML data (v2)

    52a80810-0225-5831-9596-c07d8a746f10

    Decoder that forwards raw SenML data and decoded ThingsML data sent by the device.

    = SenML data

    58e00104-d1ce-4a8f-acc0-8fe860b9ba88

    Send SenML data to your device.

    Understanding and Interpreting SenML Data

    End date

    The moment your project will expire. Make sure to extend your Project before this date to prevent loss of data.

    Device limit

    The maximum number of unique devices allowed in your Project. Devices that are linked to multiple Flows in the Project only count as one.

    Flow limit

    The maximum number of Flows allowed in your Project.

    Destination limit

    The maximum number of Destinations allowed in your Project. Destinations that are linked to multiple Flows.

    will count for the number of links they have in this Project.

    Allowed Device types

    The device types that are available in your project. .

    Allowed Network types

    The type of networks that are available in this Project.

    You can find applicable restrictions on the Project detail page of a Project.

    hashtag
    Project attributes

    A project has the following attributes:

    • UUID - the technical identifier of your project.

    • Name - the name you give to your project.

    • Description (optional) - further explanation of your project.

    • Creation date - the moment your project was created.

    • Subscription - the type of project you have, determined by what product you bought.

    hashtag
    Freemium project

    The Freemium Project gives you free limited access to the KPN Things Portal:

    • One Project in KPN Things Portal.

    • Access to our Device SDK to get you started with programming your Device.

    • Integrated KPN LoRa functionality:

      • Free registration of up to 3 devices to KPN's nationwide LoRaWAN network.

      • Free use of .

      • Insight in LoRaWAN network communication.

    • Additionally, you can order KPN Things SIM cards to connect M2M devices to KPN Things:

      • Connect up to 2 M2M devices to KPN Things for free.

      • Data communication over HTTP (MQTT will be available in the future).

    • Optional payload decoding for supported device types.

    • Forward your data to up to 3 different .

    • KPN Things access is subject to your .

    hashtag
    Your Projects

    You can find your Projects by clicking on your Customer name in the left menu. If you are a free user, you will get one project named My first project.

    Do you want to upgrade one of your Projects? Click on Upgrade.

    hashtag
    Project overview

    When clicking a project you go to the Project overview page. It gives you an overview of a selected Project:

    • You can see the name, description and type of subscription of the selected project.

    • Link to the Project details.

    • You can also see which Flows, Devices and Destinations are part of this project.

    hashtag
    Project details

    On this page you will find technical details of your project. At the project details page, you can edit the name and description of your project yourself.

    Limit

    Description

    free accountarrow-up-right
    Internet network information
    KPN Things Portalarrow-up-right
    assembly instructions in step 1
    learn more about M2M in KPN Things
    Device Detail Pagearrow-up-right
    Box contents
    Step 3: Connect the vibration motor
    Step 4: Connect the wireless charging circuit
    Step 5: Stack the components as shown
    Rotate the two parts a shown.
    Step 7: Click two parts together, and done! 🥳
    Device Simulator Web app
    Supported devices & KPN devices
    Device SDK
    circle-exclamation-checkConfigure a flowchevron-right

    ​​​

    Arduino MKR NB 1500

    a LTE-M device

    ​

    Arduino MKR WAN 1300/1310

    a An Arduino device for LoRa

    SODAQ R412M

    a LTE-M device

    Smartrak GPS Tracker

    a M2M location tracker

    Marvin dev board

    a Arduino device for LoRa

    LoPy4

    Micropython development board with LoRa​

    this code snippet arrow-up-right
    https://www.loratools.nl/#/keysarrow-up-right

    Arduino MKR WAN 1300/1310

    Arduino MKR WAN 1300/1310 is the fastest start with LoRa and the Internet of Things. It’s the perfect introduction to IoT for your organization, and is also used in education. Arduino MKR WAN 1300/1310 uses its LoRa connectivity to connect to the internet from anywhere in the world where there is LoRa coverage.

    circle-info

    When ordering the Arduino MKR WAN 1300/1310 make sure that an antenna is included in the order since it's not delivered with the board

    hashtag
    1. Setup your Arduino MKR WAN 13X0

    To connect the Arduino MKR WAN 13X0 to the computer you must use a USB cable.

    hashtag
    Setup your Arduino environment

    • Download the and follow the installer. We'll use it later on to program the Arduino MKR WAN 13X0.

    • Connect your Arduino MKR WAN 13X0 to your computer.

    • From the Tools menu, under Board, under Arduino SAMD boards (32-bits ARM Cortex M0+), select Arduino MKR WAN 1300 or 1310.

    • If the board is not available go to Tool menu, under Board select Board Manager and search for the Arduino SAMD boards (32-bits ARM Cortex M0+). Click install to install the board.

    • Also from the Tools menu, under Port, make sure the correct COM port is selected. If you have multiple options, select the one stating Arduino MKR WAN 13X0. If nonee of your ports is labelled that way, disconnect your Arduino MKR WAN 13X0, reopen the menu, check which COM port disappeared, reconnect the Arduino MKR WAN 13X0 and choose the previously identified COM port.

    hashtag
    Test your Arduino MKR WAN 13X0 device

    We will now test whether the Arduino MKR WAN 13X0 device is working by letting a LED blink.

    • In the Arduino IDE go to File, under Examples, under 01. Basics, select Blink

    • From the Sketch menu, click Upload or select the big arrow on the left of the Arduio IDE to send the software to the Arduino MKR WAN 13X0. If all went well it will say Uploading complete in the bottom of the Arduino IDE and the LED on the Arduino MKR WAN 13X0 board will blink!

    hashtag
    Test the LoRa module on the Arduino MKR WAN 13X0

    The LoRa connectivity on your Arduino MKR WAN 13X0 device is managed by the Murata CMWX1ZZABZ module. With the following steps we check whether this module works correctly.

    • In the Arduino IDE select from the sketch menu, under Include Library select Manage Libraries. Search for MKRWAN and select the 1.1.0 version.

    • After the library is downloaded go to File, under Examples, under MKRWAN select FirstConfiguration.

    • Upload the sketch to the Arduio MKR WAN 13X0

    • Meanwhile, from the Tools menu, open the Serial Monitor. Here we will find the unique Device EUI. Store the value in a text file. You'll need it when adding the device to KPN Things.

    • If your device has not the latest firmware version you can load the MKRWANFWUpdate_standalone.ino sketch via File, under Examples, MKRWAN to update the device firmware.

    hashtag
    2. Register your Arduino MKR WAN 13X0 to KPN Things

    hashtag
    Add device

    Open the . Go to the All Devices page and click on Add new Device.

    1. Select the Own LoRa device (preset connectivity) device type

    2. Enter a name for your Arduino MKR WAN 13X0 device

    3. Click Add Device to continue

    hashtag
    Provide network information

    1. DevEUI: the value you retrieved from the LoRa module in the step

    2. AppEUI: you can use the following value: 0059AC00000FFFFF

    3. AppKey: Every device should have its own unique AppKey, since it is the root security key of your device. You can generate a unique AppKey here:

    circle-info

    Store these three values somewhere, because you will be needing them to program your device later on.

    hashtag
    Check your newly created Device

    You are now on the Device Detail Page. In the LoRa tab you will see the network status. This can temporarily be Pending creation, but if you refresh the page it should switch to Active. This means your device is correctly registered to the network.

    If the network status sticks to Pending creation, you could try to delete the Device and and provision again (Restart at step )

    If the Network Status ended up in Failed, something has gone wrong. Most likely the DevEUI is already registered through another application or account. Please make sure you remove the device registration from the other application or account and re-add the device in the Things Portal.

    hashtag
    3. Program your device to send a LoRa message

    hashtag
    Download the ThingsML library

    • From the Sketch menu in your Arduino IDE click on Include Library, Manage Libraries...

    • Now, in the Library Manager, search for ThingsML and click Install. When the installation is finished, click on the Library manager icon to close the left window.

    hashtag
    Make a sketch

    From the File menu, click on Examples.

    • Now find ThingsML, then select Arduino, MKR_WAN_1300, and within that choose Arduino_mkr_wan_1300_example.

    • A sketch will open. Now update the values for the variables AppEUI, and AppKey in the code with the values you entered earlier in the Portal. The DevEUI is automatically filled in on the background.

    hashtag
    Run the sketch

    Upload the sketch to your Arduino MKR WAN 13X0 and open the Serial Monitor. You will see your module version and if your device is successfully connected and joined the network. At some point you will see the following:

    If you see something else instead of connected , move closer to your window or walk out into the garden to improve reception from the LoRa network. Then disconnect and reconnect the Arduino MKR WAN 13X0 to your computer. You probably need some more coverage to be able to join the network.

    After joining, your Arduino MKR WAN 13X0 will send a message every 300 seconds containing a fixed temperature “measurement” in ThingsML format. Read more about .

    hashtag
    4. Check incoming data in the Portal

    Now your Arduino MKR WAN 13X0 has joined and is sending data, you could visit the LoRa Data tab on your Device Detail Page in the Portal. You should see your Join request and Join accept appear like in the screenshot below and at this point you will see more data as well.

    You now successfully connected your Arduino MKR WAN 1300/1310.

    Marvin development board

    This is an old development board which is no longer available for purchase and should not be used for new designs.

    Marvin is the fastest start with LoRa and the Internet of Things. It’s the perfect introduction to IoT for your organization, and is also used in education. Marvin uses its LoRa connectivity to connect to the internet from anywhere in the world where there is LoRa coverage.

    hashtag
    1. Setup your Marvin

    Arduino MKR NB 1500

    Arduino MKR NB 1500 is the fastest start with LTE-M and the Internet of Things. It’s the perfect introduction to IoT for your organization, and is also used in education. Arduino MKR NB 1500 uses its LTE-M connectivity to connect to the internet from anywhere in the world where there is LTE-M coverage.

    circle-info

    When ordering the Arduino MKR NB 1500 make sure that an antenna is included in the order since it's not delivered with the board

    Before you can start you need a KPN simcard. You can order 2 free cards via

    On this page you will find the window below to order a simcard.

    Frequently asked

    See if your question has already been asked

    hashtag
    General questions

    hashtag
    The Portal does not look very nice in my browser

    [
        {
            "bn": "urn:dev:DEVEUI:fe782a953c642aeb:",
            "bt": 1693136532.83,
            "n": "latitude",
            "u": "lat",
            "v": 51.90717
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.48940
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29.75
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "extTemp",
            "u": "Cel",
            "v": 17.22
        },
        {
            "n": "io",
            "vb": false
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:fe782a953c642aeb:",
            "bt": 1693136532.83,
            "n": "latitude",
            "u": "lat",
            "v": 51.90717
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.48940
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29.75
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "extTemp",
            "u": "Cel",
            "v": 17.22
        },
        {
            "n": "io",
            "vb": false
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:fe782a953c642aeb:",
            "bt": 1693136532.83,
            "n": "latitude",
            "u": "lat",
            "v": 51.90717
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.48940
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29.75
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "extTemp",
            "u": "Cel",
            "v": 17.22
        },
        {
            "n": "io",
            "vb": false
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:fe782a953c642aeb:",
            "bt": 1693136532.83,
            "n": "latitude",
            "u": "lat",
            "v": 51.90717
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.48940
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29.75
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "extTemp",
            "u": "Cel",
            "v": 17.22
        },
        {
            "n": "io",
            "vb": false
        }
    ]
    Access to our LTE-M, 2G, 3G, 4G, and 5G networks.
  • European roaming included.

  • LoRa Geolocationarrow-up-right
    Destinations
    Terms of Use
    Learn more about device typesarrow-up-right

    Click Add Network Info to save the network information and then Finish to continue.

    Arduino IDEarrow-up-right
    KPN Things Portalarrow-up-right
    https://www.loratools.nl/#/keysarrow-up-right
    ThingsML
    Test your Arduino MKR WAN 13X0 device
    Add device
    This part of the getting started is based on the Getting Started by the IoT Academyarrow-up-right.

    hashtag
    Setup your Arduino environment

    • Download the Arduino IDEarrow-up-right and follow the installer. We'll use it later on to program the Marvin.

    • Connect your Marvin to your computer.

    hashtag
    Test your Marvin device

    We will now test whether the Marvin device is working by letting a LED blink.

    • Download blinky.inoarrow-up-right and open it in the Arduino IDE, or copy-paste the code into an empty Arduino IDE sketch.

    • From the Tools menu, under Board, select Arduino Leonardo

    • Also from the Tools menu, under Port, make sure the correct COM port is selected. If you have multiple options, select the one stating Arduino Leonardo. If non of your ports is labelled that way, disconnect your Marvin, reopen the menu, check which COM port disappeared, reconnect the Marvin and choose the previously identified COM port.

    • From the Sketch menu, click Upload to send the software to the Marvin. If all went well it will say Uploading complete in the bottom of the Arduino IDE and the second LED on the Marvin board will blink!

    hashtag
    Test the LoRa module on the Marvin

    The LoRa connectivity on your Marvin device is managed by the Microchip RN2483 module. With the following steps we check whether this module works correctly.

    • Download MarvinMultiSerial.inoarrow-up-right and open it in the Arduino IDE, or copy-paste the code into an empty Arduino IDE sketch. With this program we can communicate directly with the LoRa module.

    • Upload the sketch to your Marvin.

    • Meanwhile, from the Tools menu, open the Serial Monitor

    • In the Serial Monitor, set the baud rate to 57600 baud (same as detailed in the sketch) and select Both NL & CR (#1 in the screenshot below).

    Now you can directly speak to the LoRa module and get a response! #2 in the screenshot above shows you where to enter commands you want to send, and #3 highlights where answers from the module will be shown.

    • If you for instance send sys get ver, the module will return its firmware version back. This will be 1.0.1 with some historic date.

    • Now execute the command sys get hweui to retrieve the DevEUI that is stored in the module. Store the value in a text file. You'll need it when adding the device to KPN Things.

    Possible other commands can be find in the module data sheetarrow-up-right or in one of the manyarrow-up-right examplesarrow-up-right by othersarrow-up-right.

    hashtag
    2. Register your Marvin to KPN Things

    hashtag
    Open the KPN Things Portal

    Open the KPN Things Portalarrow-up-right. Go to the All Devices page and click on Add new Device.

    hashtag
    Fill in your device information

    1. Select the Own LoRa device (preset connectivity) device type

    2. Enter a name for your Marvin device

    3. Click Add Device to continue

    hashtag
    Provide Network Information

    1. DevEUI: the value you retrieved from the LoRa module in the step Test the LoRa module on the Marvin.

    2. AppEUI: you can use the following value: 0059AC00000FFFFF

    3. AppKey: Every device should have its own unique AppKey, since it is the root security key of your device. You can generate a unique AppKey here: https://www.loratools.nl/#/keysarrow-up-right

    Store these three values somewhere, because you will be needing them to program your device later on.

    4. Click Add Network Info to save the network information and then Finish to continue.

    hashtag
    Check your newly created Device

    You are now on the Device Detail Page. In the LoRa tab you will see the network status. This can temporarily be Pending creation, but if you refresh the page it should switch to Active. This means your device is correctly registered to the network.

    If the network status sticks to Pending creation, you could try to delete the Device and and provision again (Restart at step Register your Marvin to KPN Things).

    triangle-exclamation

    If the Network Status ended up in Failed, something has gone wrong. Most likely the DevEUI is already registered through another application like Thingpark or the LoRa Developer Portal. Please make sure you remove the device registration from the other application and re-add the device in the Things Portal. For more information consult our FAQ.

    hashtag
    3. Program your device to send a LoRa message

    hashtag
    Download the ThingsML library

    • From the Tools menu in your Arduino IDE click on Manage Libraries...

    • Now, in the Library Manager, search for ThingsML and click Install. When the installation is finished, click Close.

    hashtag
    Make a sketch

    From the File menu, click on Examples.

    • Now find ThingsML, then select marvin, and within that choose marvin_example, as such:

    • A sketch will open. Now update the values for the variables DevEUI, AppEUI, and AppKey in the code with the values you entered earlier in the Portal.

    hashtag
    Run the sketch

    • Upload the sketch to your Marvin and open the Serial Monitor. You will see a lot of commands being send to the LoRa module to configure it and to join the network. At some point you will see the following:

    This means your Marvin is trying to join the network. After some seconds the following line will appear

    This means the device has joined our network!

    If you see denied instead of accepted , move closer to your window or walk out into the garden to improve reception from the LoRa network. Then disconnect and reconnect the Marvin to your computer. You probably need some more coverage to be able to join the network.

    After joining, your Marvin will send a message every 30 seconds containing an empty temperature measurement in ThingsML format. Read more about ThingsML.

    hashtag
    4. Check incoming data in the Portal

    Now your Marvin has joined and is sending data, you could visit the LoRa Data tab on your Device Detail Page in the Portal. You should see your Join request and Join accept appear like in the screenshot below and at this point you will see more data as well. Learn more about LoRa data historyarrow-up-right.

    hashtag
    Setup data flow in KPN Things

    You now successfully connected your Marvin device to KPN Things! To further setup your data flow in KPN Things, you can go to the next step:

    hashtag
    1. Setup your Arduino MKR NB 1500

    To connect the Arduino MKR NB 1500 to the computer you must use a USB cable.

    hashtag
    Setup your Arduino environment

    • Download the Arduino IDEarrow-up-right and follow the installer. We'll use it later on to program the Arduino MKR NB 1500.

    • Connect your Arduino MKR NB 1500 to your computer.

    • From the Tools menu, under Board, under Arduino SAMD boards (32-bits ARM Cortex M0+), select Arduino MKR NB 1500.

    • If the board is not available go to Tool menu, under Board select Board Manager and search for the Arduino SAMD boards (32-bits ARM Cortex M0+). Click install to install the board.

    • Also from the Tools menu, under Port, make sure the correct COM port is selected. If you have multiple options, select the one stating Arduino MKR NB 1500. If non of your ports is labelled that way, disconnect your Arduino MKR NB 1500, reopen the menu, check which COM port disappeared, reconnect the Arduino MKR NB 1500 and choose the previously identified COM port.

    hashtag
    Test your Arduino MKR NB 1500 device

    We will now test whether the Arduino MKR NB 1500 device is working by letting a LED blink.

    • In the Arduino IDE go to File, under Examples, under 01. Basics, select Blink.

    • From the Sketch menu, click Upload or select the big arrow on de left of the Arduio IDE to send the software to the Arduino MKR NB 1500. If all went well it will say Uploading complete in the bottom of the Arduino IDE and the LED on the Arduino MKR NB 1500 board will blink!

    hashtag
    Test the LTE-M module on the Arduino MKR NB 1500

    The LTE-M connectivity on your Arduino MKR NB 1500 device is managed by the uBlox SARA-R410M-02B module. With the following steps we check whether this module works correctly.

    • In the Arduino IDE select from the sketch menu, under Include Library select Manage Libraries or click on the library icon on the left side of the IDE. Search for MKRNB and select the 1.6.0 version.

    • After the library is downloaded go to File, under Examples, under MKRNB select Tools and select TestModem.

    • Upload the sketch to the Arduio MKR NB 1500.

    • Meanwhile, from the Tools menu, open the Serial Monitor. Here we will find the unique IMEI. Store the value in a text file. You'll need it when adding the device to KPN Things.

    hashtag
    2. Register your Arduino MKR NB 1500 to KPN Things

    hashtag
    Add device

    Open the KPN Things Portalarrow-up-right. Go to the All Devices page and click on Add new Device.

    1. Select the Own M2M device device type

    2. Enter a name for your Arduino MKR NB 1500 device

    3. Click Add Device to continue

    hashtag
    Provide network information

    1. IMEI: the value you retrieved from the Ublox module in the step Test the LTE-M module on the Arduino MKR NB 1500

    2. ICCID: you must use the ICCID form the simcard you ordered via KPNThings:

    3. Shared secret: Every device should have its own unique shared secret You can generate a unique secret by pressing Generate:

    circle-info

    Store these three values somewhere, because you will be needing them to program your device later on.

    hashtag
    Check your newly created Device

    You are now on the Device Detail Page. On this page you can see the network status. If everything is done the status should be Activated. This means your device is correctly registered to the network.

    hashtag
    Create a flow

    To receive data in the KPNThings portal you must create a flow. Click on Flows and then on Link to another Flow.

    Select My first Flow.

    hashtag
    Enable the ThingsML decoder

    The flow is now created and you must add a decoder to the flow to decode the payloads from the device.

    Click on My first flow.

    Click on Data Processing

    Enable the switch Decoded ThingsML and raw SenML data (v2).

    The decoder is now enabled and device data send by the Arduino MKR NB 1500 will be decoded and visible in the Device twin.

    hashtag
    Add a destination

    The decoded data can be send to a destination. For testing you can use the KPN Test Endpoint destination.

    Click on Destination on the left side on the screen, next click on Add new Destination in the upper right side of the screen.

    Select the Test Endpoint destination. Give it a name and click on Create Test Endpoint. The endpoint is created and there is a button and link to view the destination. Later the endpoint can always be accessed via the destination menu option on the left side of the main screen.

    hashtag
    Program your device to send a message

    hashtag
    Install the ThingsML and TemperatureZero library

    · From the Sketch menu in your Arduino IDE click on Include Library, Manage Libraries... or click on the library icon on the left side of the IDE.

    Now, in the Library Manager, search for ThingsML and click Install.

    Search for TemperatureZero and click install. When the installation is finished, click on the Library manager icon to close the left window.

    hashtag
    Upload a sketch

    From the File menu, click on Examples.

    Now find ThingsML, then select Arduino, MKR_NB_1500, and within that choose mkr_nb_1500_uplink_example.

    A sketch will open. Now update the values for the variables IMEI, and shared secret in the code with the values you get earlier from the device and the KPNThings.

    hashtag
    Run the sketch

    Upload the sketch to your Arduino MKR NB 1500 and open the Serial Monitor. You will see the AT commands and some other information. Check incoming data in the Portal.

    Now your Arduino MKR NB 1500 is sending data, you could visit the Device twin tab on your Device Detail Page in the Portal. You should see the measured temperature.

    If the Test endpoint was setup the data from de device is also visible there.

    https://portal.kpnthings.com/homearrow-up-right
    For security reasons our platform uses the latest browser technologies for the KPN Things Portal. This means that the Portal will not work optimally in not-up-to-date browsers and underdeveloped browsers. Please use an up-to-date version of Google Chrome or Mozilla Firefox for the best user experience.

    hashtag
    Registration and logging in

    hashtag
    I get the error "Registration failed" when registering for a new KPN Developer account

    When you get this error, first check whether you already have registered a KPN Developer account with the email address you are using. Do this by trying to login. If you reach a page where you can enter your password, you do already have an account. You can use the forgot password link to reset your password in case you forgot.

    hashtag
    I have forgotten my password

    To reset your password, execute the following steps:

    1. Go to https://portal.kpnthings.comarrow-up-right

    2. Click Login

    3. Enter your Email address and click Doorgaan

    4. Click Wachtwoord vergeten

    5. Enter your Email address again in the field for Gebruikersnaam and click Doorgaan

    6. Choose E-mail naar ****@*****

    7. Check your email for the authentication code, enter it in the field for Code in and click Doorgaan

    8. Enter a new password and click Doorgaan

      1. It should be between 10 and 100 characters

      2. It should contain at least three of the following types of characters: capital letter, small letter, number, and special character

    9. Your password has now been reset

    hashtag
    Device administration

    hashtag
    I get the error "The network identifier already exists for this network type" when adding a device.

    When adding a device you can get the error "The network identifier already exists for this network type". This means the network identifier, DevEUI for LoRa or IMEI for M2M, you are using to register your device is already known in our systems.

    You should delete the device record from the device table page using the three dot menu on the right side of the column.

    When you are sure you did not register the same device earlier, please contact our support through our contact formarrow-up-right and state the network identifier with which you got the problems. If you are trying to register a device that was also registered in the LoRa Developer Portal, please state the account name in your question to our support as well. We could transfer your keys from the LoRa Developer Portal to the Things Portal.

    hashtag
    I get the error "Device could not be created: The maximum amount of devices for this product has been reached"

    This means you try to add more devices to your account than is allowed by your subscription. You could try to remove another device from your registrations or you can contact our commercial support on [email protected]envelope to get more information on upgrading your subscription.

    hashtag
    After adding my LoRa device, the Network status of my LoRa Network Details says "FAILED"

    This means your LoRa device could not be registered to our LoRa network. Probably the DevEUI is already in use in another application on our network like Thingpark or the LoRa Developer Portal. If you want to register your device in the Things Portal, first remove the device registration from the other application. Then you can re-add the devices in the Things Portal.

    circle-info

    After (re-)registering the device in the Things Portal, you should rejoin your Device to the network.

    hashtag
    I get this error when I am trying to register my LoRa Developer Portal DevEUI's

    Since the DevEUI's you are trying to register are still registered in the LoRa Developer Portal, they cannot be registered in the Things Portal. DevEUI's can only be registered once in our network.

    Please send an email to [email protected]envelope stating your account name (email address) and the DevEUI's you want to be able to move. We will remove them from the LoRa Developer Portal and our network and we will answer you when we did it. From then on you can register your device in the Things Portal.

    hashtag
    What should I do when I lost the AppEUI or AppKey of my registered device?

    If you have a device with pre-programmed identifiers and key that you cannot change, you should contact your supplier to get the information.

    If you registered a device and got the identifiers from KPN Things, then there is no way to reset your AppEUI or AppKey for your device at the moment. You should delete your device from your account and add it again, get new identifiers and program the device with the new identifiers.

    In time you will be able to view the AppEUI in the Portal and you will be able to generate a new AppKey for your device without having to delete and re-add it.

    hashtag
    Device communication

    hashtag
    My LoRa device won't join the network

    Head on over to the What to expect on first use of the LoRa data historyarrow-up-right part of our documentation to find the solution to this problem.

    hashtag
    I do not receive any data from my device in my application

    The data from your device travels the following path to your application:

    Device → Network → Processing (Decoder, etc.) → Destination (your endpoint or application)

    You can check the following configuration items in the Portal to verify whether the path is correctly set up:

    hashtag
    Device's connection to the Network

    • Does your device have (the correct) connectivity information configured?

      → Visit the device detail page and go to the Connectivity tab. You can check the information and if necessary add connectivity information.

    • Is the connectivity indeed activated?

      → Visit, on the device detail page, the Connectivity tab and verify that Network Status is set to ACTIVE. If not, read this FAQ.

    • Can you see data coming in from your device in the Data History?

      → Visit, on the device detail page, the Data History tab to verify incoming data. If you do not see your device joining, you could get more info in . Else you should use your device documentation to get it to send data.

    hashtag
    Destination's configuration

    • Is your destination configuration correct? E.g. the URL, etc.

      → Visit, on the destination detail page, the Destination Specification tab to check your destination configuration.

      →We are working on giving you more insight into the logs of a destination, stay tuned!

    • Is your destination status Active?

      → Visit the destination detail page. The Processing status in the top right card should say Active. If this is not the case, click the Activate button in the top right of the card to activate the destination again.

    hashtag
    Flow's configuration

    • Is your Device linked to the Flow?

      →Visit, on the Device detail page, the Flows tab to check to which Flows your Device is linked. If the correct Flow is missing, go to Devices in Flow page, click Add Device, click Link an existing Device, and select your Device from the list.

    • Is your Destination linked to the Flow?

      → Visit, on the Destination detail page, the to check to which Flows your Destination is linked. If the Flow is missing, go to Destinations in Flow page, click Add Destination, click Link an existing Device, select your Destination from the drop down and click Add Destination.

    hashtag
    Decoder activation

    • Is the correct decoder activated?

      → Go to the Data Processing page of your Flow. Click on the Device type of your Device. Verify that one or more Decoders are enabled (The device type can be found in the main card of the Device detail pagearrow-up-right).

      → If no correct Decoder is activated, click on the toggle of the desired Decoder(s) to enable it.

    hashtag
    Other technical in depth documentation

    Firmware over the airarrow-up-right - Documentation on the FoTa tool

    LoRa networkarrow-up-right - In depth documentation on KPN's LoRa network

    Remote SIM provisioningarrow-up-right - Technical documentation on Remote SIM provisioning

    hashtag
    How can I get in touch if I have a question not answered in the FAQ?

    Do you have a question that is not answered here? Ask for support via our contact formarrow-up-right. The support team is available to provide guidance, ensuring you have the assistance you need along your IoT journey.

    Explorer user management

    Configure users, roles and permissions

    You and your team want secure and sustainable access to your IoT solution, with full insight and control. To achieve this, assigning the right roles and permissions is essential.

    To achieve this, assinging the right roles and permissions is done in GRIP. This Identity and Access Management platform is developed by KPN, specifically designed for Business Users. It enables organizations to securely and efficiently manage access to their applications and services.

    To assign roles, you must be an admin of the account. As an administrator, you can add or remove users and configuratie roles and permissions for your services.

    hashtag
    Before you start

    To manage users and roles, you need admin rights

    • Already an admin? Great! Let’s get started!

    • Not an admin yet? Ask your organization’s administrator to grant you admin rights Not sure who that is? us and we’ll help you out

    hashtag
    Access the User Management section

    As a Freemium user, you always access the user management section through the Things Portal.

    1

    Go to or go to and click on My KPN user details the account details menu in the top right corner to display the Services and Roles menu

    2

    Click on your name in the account details menu in the top right corner to display the management overview page

    hashtag
    Managing Users in GRIP

    The information below explains how to manage users, including adding and removing users, and managing roles and permissions.

    Once you have accessed the User Management section in GRIP, you can perform several actions to control access within your organization.

    hashtag
    What functionalities do you have

    Review existing users, add and delete users View the list of all users in your organization, including their roles and assigned services. Invite new team members by creating users accounts or deleting users who no longer need access to your services.

    Edit or give permissions to an added or existing user Modify user information, roles and permissions to ensure they have the correct level of access to your services.

    circle-info

    Why this matters Managing users and permissions in GRIP ensures that only authorized individuals can access your applications and IoT services. This helps maintain security and compliance across your organization.

    hashtag
    Review existing users, add and delete users

    In the User Management table, you can see all current users along with their assigned roles and permissions. This overview helps you quickly check who has access to which services.

    Add, Remove or Modify Users

    1. To add a new user, click Add User at the top of the page

    2. To modify a user, click the three dots ⋮ and select Edit

    3. To remove a user, click the three dots ⋮ and select Deactivate or Delete

    circle-info

    To give you the opportunity to reactivate an account without having to create it again, a deleted user will remain visible in the overview for 10 days before it is completely removed.

    hashtag
    Edit or give permissions to an added or existing user

    For a New User you click on the Add User at the top of the page and provide the general information.

    1

    hashtag
    Provide the general information

    1. Fill in the general details of the new user

    hashtag
    Assigning Services and Roles

    1

    hashtag
    Select Services and Roles

    1. Navigate to the Services and Roles tab

    hashtag
    Services and Roles explained

    The below list shows the available roles for services that are used within the KPN IOT solution and describes what levels of access each of the roles gives to the user in KPN Things portal.

    Provides the user with an Admin account to access and give assigned services.

    Role
    Description
    Access

    The starting point for your IoT service and manage the IoT solution.

    We advise that every user has a Things Manager and Things Support role.

    circle-exclamation

    Make sure to select only one role per item If you choose multiple roles - such as Thing Manager - Admin and Thing Manager - Read Only - the lowest role will override the highest.

    In this example, you would only have Read Only access.

    hashtag
    Things Creator

    These roles are only needed if you manage your devices, decoders and scripts via KPN Things. If only connectivity features are used, these roles are not required.

    Role
    Description
    Access

    hashtag
    Things Manager

    We recommend granting the user at least KPN Things - Read Only access. This ensures insights into the IoT solution and enables options such as making exports of connectivity items available.

    Role
    Description
    Access

    hashtag
    Things Support

    We advise that every user has access to this role in order to see documents and access to links to contact information. Assigning this role also subscribes you to service emails.

    Role
    Description
    Access

    KPN FillTag I

    KPN FillTag I

    First FillTag device for Waste Control application, also known as Streamline Waste device.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-filltag-i

    • Device Specification UUID: 5064c9de-36c8-4a69-8edd-636c6df94332

    Decoders
    decoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    › Decoded payload for Waste Control application

    Decoder for Streamline LoRa message type 0xD282.

    Expected SenML records

    name
    type
    unit

    hashtag
    Decoded payload for Waste Control application

    Decodes fields from a Streamline LoRa payload, specifically for waste control application.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    Freemium user management

    Configure users, roles and permissions

    You and your team want secure and sustainable access to your IoT solution, with full insight and control. To achieve this, assigning the right roles and permissions is essential.

    To achieve this, assinging the right roles and permissions is done in GRIP. This Identity and Access Management platform is developed by KPN, specifically designed for Business Users. It enables organizations to securely and efficiently manage access to their applications and services.

    To assign roles, you must be an admin of the account. As an administrator, you can add or remove users and configuratie roles and permissions for your services.

    circle-check

    If you’re the one who created the Freemium account, you automatically become the account admin.

    hashtag
    Access the User Management section

    As a Freemium user, you always access the user management section through the Things Portal.

    1

    Go to or go to and click on My KPN user details the account details menu in the top right corner to display the Services and Roles menu

    2

    Click on your name in the account details menu in the top right corner to display the management overview page

    hashtag
    Managing Users in GRIP

    The information below explains how to manage users, including adding and removing users, and managing roles and permissions.

    Once you have accessed the User Management section in GRIP, you can perform several actions to control access within your organization.

    hashtag
    What functionalities do you have

    Review existing users, add and delete users View the list of all users in your organization, including their roles and assigned services. Invite new team members by creating users accounts or deleting users who no longer need access to your services.

    Edit or give permissions to an added or existing user Modify user information, roles and permissions to ensure they have the correct level of access to your services.

    circle-info

    Why this matters Managing users and permissions in GRIP ensures that only authorized individuals can access your applications and IoT services. This helps maintain security and compliance across your organization.

    hashtag
    Review existing users, add and delete users

    In the User Management table, you can see all current users along with their assigned roles and permissions. This overview helps you quickly check who has access to which services.

    Add, Remove or Modify Users

    1. To add a new user, click Add User at the top of the page

    2. To modify a user, click the three dots ⋮ and select Edit

    3. To remove a user, click the three dots ⋮ and select Deactivate or Delete

    circle-info

    To give you the opportunity to reactivate an account without having to create it again, a deleted user will remain visible in the overview for 10 days before it is completely removed.

    hashtag
    Edit or give permissions to an added or existing user

    For a New User you click on the Add User at the top of the page and provide the general information.

    1

    hashtag
    Provide the general information

    1. Fill in the general details of the new user

    hashtag
    Assigning Services and Roles

    1

    hashtag
    Select Services and Roles

    1. Navigate to the Services and Roles tab

    hashtag
    Services and Roles explained

    The below list shows the available roles for services that are used within the KPN IOT solution and describes what levels of access each of the roles gives to the user in KPN Things portal.

    Provides the user with an Admin account to access and give assigned services.

    Role
    Description
    Access

    The starting point for your IoT service and manage the IoT solution.

    We advise that every user has a Things Manager and Things Support role.

    circle-exclamation

    Make sure to select only one role per item If you choose multiple roles - such as Thing Manager - Admin and Thing Manager - Read Only - the lowest role will override the highest.

    In this example, you would only have Read Only access.

    hashtag
    Things Creator

    These roles are only needed if you manage your devices, decoders and scripts via KPN Things. If only connectivity features are used, these roles are not required.

    Role
    Description
    Access

    hashtag
    Things Manager

    We recommend granting the user at least KPN Things - Read Only access. This ensures insights into the IoT solution and enables options such as making exports of connectivity items available.

    Role
    Description
    Access

    hashtag
    Things Support

    We advise that every user has access to this role in order to see documents and access to links to contact information. Assigning this role also subscribes you to service emails.

    Role
    Description
    Access
    Create a Stream Analytics Job using Azure portal - Azure Stream AnalyticsMicrosoftLearnchevron-right
    Create Azure Event Hubs instance Using Portal - Azure Event HubsMicrosoftLearnchevron-right

    M2M connectivity configuration

    Change your communication and rate plans

    The M2M Connectivity configuration page gives you the opportunity to choose the communication and rate plan that best suits your application.

    hashtag
    Cisco synchronisations

    For M2M connectivity, the information is synchronised with the source system, Cisco Control Center. This sync is performed daily. If you’ve made changes directly in Cisco Control Center, the list may show outdated information. However, when you view an individual connection, the latest data for that item is always retrieved.

    hashtag
    Retrieve a project by ID

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:

    hashtag
    Retrieve projects, filtered by search term and / or client ID

    get

    Retrieve all projects that match the query parameters given. If a search parameter is provided, projects whose name or description (partially) match are returned.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    Authorization
    Your module version is: ARD-078 1.2.3
    Your device EUI is: a8610a………….
    Connected!
    Sending message...
    Message sent correctly!
    Sending message...
    Message sent correctly!
    > mac join otaa
    < ok
    < accepted
    Step 3: Connect the vibration motor
    3

    For documentation about how to manage users read the next section.

    Select the Send email to set password option to send a password email immediately. This can also be done at a later time, for example after you’ve configured all roles and permissions.

  • Click the Add User button

  • circle-info

    For Freemium users a phone number is optional.

    After adding the user, the next screen opens where you can optionally enter additional information about the user. This information is not required for using your account, but it can be used for your own administration.

    1. Add additional general details (optional)

    2. Add even more information like job title or office location (optional)

    3. Select the preferred language setting

    4. Click the Save Changes button

    If the user should be able to manage other users, enable the Admin role

  • Click Save Changes

  • Click + Assign services and roles button to add specific services

  • Select the appropriate services and roles based on the user’s responsibilities. The example below grants the user full access to the features within the KPN Things Portal.

    triangle-exclamation

    The admin is responsible for assigning the correct permissions to the user. Please note that someone with admin rights can also grant themselves additional permissions.

    Admin

    Full user management, including own account.

    View and manage services and roles of other users; add, modify or remove users.

    Things Creator - Admin

    Full access to Things Creator tab.

    Add modify or remove devices types, decoders and scripts.

    Things Creator - Read Only

    Read-only access to Things Creator tab.

    View device types, decoders, and scripts.

    Things Manager - Admin

    Full access to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity.

    Things Manager - Editor

    Full access except for deleting to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity except the right to delete.

    Things Manager - Read Only

    Read only access to Things Manager tab.

    View devices, flows, destinations and connectivity.

    Things Support - User

    Access to the Things Support tab.

    View news, release notes, documents, service status, reports and contact info and recieve service emails.

    Contact
    portal.kpnthings.com/managerarrow-up-right
    KPN Things Portalarrow-up-right
    Modify users
    The central identity solution behind every account
    The foundation for your IoT applications

    distance

    number

    m

    distanceMeasurementIsValid

    boolean

    /

    lidOpenedSincePreviousTransmission

    boolean

    /

    temperature

    number

    Cel

    number

    1

    number of times the bin lid has been opened

    detectedBeacon

    string

    "a1e2093368d4e7b8"

    DevEUI of the last detected beacon

    distance

    number

    m

    0.684

    distance to the detected object from the fill sensor

    distanceMeasurementIsValid

    boolean

    true

    lidOpenedSincePreviousTransmission

    boolean

    true

    temperature

    number

    Cel

    18.875

    timeOrigin

    string

    NETWORK

    the source of time information for measurements

    + LoRa Geolocation data

    4c0bf70f-cde5-4f5a-aac2-8480a875ec86

    Add LoRa Geolocation data to messages where location could be calculated.

    › Decoded payload for Waste Control application

    0a56df75-1b4d-407b-b534-a20cf22cd13e

    Decoder for Streamline LoRa message type 0xD282.

    › Decoded payload for Waste Control application (v2)

    41fdc428-12cb-52b0-9e0c-e160b97bdcd5

    Decodes fields from a Streamline LoRa payload, specifically for waste control application.

    batteryLevelLow

    boolean

    /

    batteryLevelLow_beacon

    boolean

    /

    count_LidOpen

    number

    detectedBeacon

    string

    batteryLevelLow

    boolean

    true

    batteryLevelLow_beacon

    boolean

    false

    the battery level low indication of the detected beacon

    LoRa Geolocation
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    count_LidOpen

    3

    For documentation about how to manage users read the next section.

    Select the Send email to set password option to send a password email immediately. This can also be done at a later time, for example after you’ve configured all roles and permissions.

  • Click the Add User button

  • circle-info

    For Freemium users a phone number is optional.

    After adding the user, the next screen opens where you can optionally enter additional information about the user. This information is not required for using your account, but it can be used for your own administration.

    1. Add additional general details (optional)

    2. Add even more information like job title or office location (optional)

    3. Select the preferred language setting

    4. Click the Save Changes button

    If the user should be able to manage other users, enable the Admin role

  • Click Save Changes

  • Click + Assign services and roles button to add specific services

  • Select the appropriate services and roles based on the user’s responsibilities. The example below grants the user full access to the features within the KPN Things Portal.

    triangle-exclamation

    The admin is responsible for assigning the correct permissions to the user. Please note that someone with admin rights can also grant themselves additional permissions.

    Admin

    Full user management, including own account.

    View and manage services and roles of other users; add, modify or remove users.

    Things Creator - Admin

    Full access to Things Creator tab.

    Add modify or remove devices types, decoders and scripts.

    Things Creator - Read Only

    Read-only access to Things Creator tab.

    View device types, decoders, and scripts.

    Things Manager - Admin

    Full access to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity.

    Things Manager - Editor

    Full access except for deleting to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity except the right to delete.

    Things Manager - Read Only

    Read only access to Things Manager tab.

    View devices, flows, destinations and connectivity.

    Things Support - User

    Access to the Things Support tab.

    View news, release notes, documents, service status, reports and contact info and recieve service emails.

    portal.kpnthings.com/managerarrow-up-right
    KPN Things Portalarrow-up-right
    Modify users
    The central identity solution behind every account
    The foundation for your IoT applications

    You can check when the last synchronisation took place by clicking the icon.

    Last Cisco sync

    hashtag
    Search by ICCID

    Use the search field to look up the ICCID number of the simcard. If you enter part of the number, you’ll get a list of all ICCIDs containing those digits.

    Search field

    hashtag
    Open ICCID details

    In the Things Portal, we can show you all M2M details for an ICCID, such as activation dates, usage, and technical information.

    1. Click anywhere on the line or the icon at the end of the row

    2. When the Cisco button is available, you can open the ICCID information in Cisco Control Center directly from the Things Portal

    circle-exclamation

    If you are not logged in to Cisco Control Center, you will first see a login screen when you click the Cisco button.

    If you are already logged in, clicking this button will immediately open the ICCID in Cisco Control Center.

    Open ICCID details

    In the M2M detail overview, you will find all the information and can adjust settings:

    1. Device Summary Summary of the device linked to the SIM card (optional)

    2. M2M Summary Summary of the ICCID reference and status

    3. M2M Details Change the Communication and Rate Plan

    4. View device details and change the device linked to the ICCID

    5. Show the billing details for the ICCID

    6. View the project and linked account details

    ICCID details

    hashtag
    Device Summary

    In the Connectivity Details overview, you can also see the device linked to an ICCID. When you click on the device properties, you are automatically redirected to Device Details. A more detailed explanation of how this works can be found in IoT Devices.

    circle-info

    For connectivity in a Tailored project, linking a device is optional. It can be used to keep track of which connectivity is associated with which device. However, the data is handled outside the Things Portal, and device management is not mandatory for Tailored projects.

    Below is a brief description of the fields displayed:

    1. Label This is the name of the device

    2. Barcode This is the unique identifier of the device, such as a barcode or serial number

    3. Device type This defines the type of device and determines which decoder is applied

    4. Processing This shows whether the data is processed and delivered to an endpoint

    5. Flows This shows which data flow the device is linked to

    Device Summary

    hashtag
    M2M Summary

    In the M2M Summary Details overview, you see an overview of the current settings of the simcard.

    Below is a brief description of the fields displayed:

    circle-info

    For a Tailored project, the clickout button to Cisco Control may be available.

    1. Cisco Clickout button to Cisco Control Center

    2. ICCID This is the unique identifier of the simcard

    3. Connection This is the status of the simcard

    4. Comm Plan This shows the current communication plan setting

    5. Rate Plan This shows the current rate plan setting

    M2M Summary

    hashtag
    M2M Details

    You can change the simcard settings in the this section. If you are a Tailored user and also use Cisco for simcard management, you’ll notice that this information is synchronized automatically.

    circle-exclamation

    When you change simcard settings directly in Cisco, the updated information will be visible in Things Portal after the daily Cisco synchronization.

    M2M Details

    1. Connection

    This hows the current status of the SIM card. You can change this status in this menu. Below is an overview of the available statuses, their meaning, and when to use them.

    Status
    Description
    When to use

    Activated

    simcard is live and ready for data, voice, or sms services

    for simcards actively in use by a customer or device

    Activation Redy

    simcard is configured and ready for quick activation after exceeding a minimum data threshold

    for simcards prepared for deployment or large rollouts

    Deactivated

    simcard was active but is now turned off

    for simcards that are temporarily not in use but reusable later

    Retired

    simcard is permanently disabled and cannot be reactivated

    2. Last message

    The Last Message field shows when data was last received from the SIM card. It provides an indication of whether the SIM is functioning correctly or when it was last used.

    3. Edit Communication and Rate Plan

    You can use the pull-down menus to change the SIM card settings. The available options may vary. If you are a tailored customer, there might be custom options designed specifically for your environment.

    Communication and Rate Plan

    4. Communication and Rate Plan information

    These are the current settings for this simcard. When you change the communication and rate plan, the new settings will appear here.

    5. APN(s)

    The Access Point Name (APN) determines which gateway delivers your data traffic. This value cannot be set separately. It is linked to your communication plan. When you change the communication plan, the APN shown here may also change. For customers without a Tailored subscription, the APN is always kpnthings2m2m, ensuring that traffic is delivered to the Things Portal.

    hashtag
    M2M Connectivity Configuration

    In this section, you can disconnect a SIM card from a device or link it to one. If there are issues with a SIM card, you can insert a different SIM card into the device and confirm the swap in the Things Portal.

    M2M Connectivity Configuration

    1. M2M Connectivity Configuration details

    Here you can view the hard configured details of the SIM card.

    2. M2M Device Configuration

    The IMEI number (International Mobile Equipment Identity) is a unique 15-digit code that identifies your device. This number is linked to the device, not to the SIM card.

    hashtag
    Billing

    -

    hashtag
    Ownership

    -

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    projectIdstring · uuidRequired

    Project identifier

    Responses
    chevron-right
    200

    The project

    application/json

    Project in KPN Things that serves as a container for devices, destinations, flows and metadata

    idstring · uuidRead-onlyRequired

    The entity ID

    Example: 99086060-b099-416e-a321-53220f4edf99
    clientIdstring · uuidRequired

    ID of owning client

    Example: b7b953c9-b137-4d28-8d29-d266c720bc78
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the project is created in the system.

    Example: 2024-12-31T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the project.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the project is last modified in the system.

    Example: 2024-12-31T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the project.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    nameall ofRequired
    string · min: 1Optional

    Must not be empty or contain only whitespace.

    Pattern: .*\S.*
    and
    stringOptional

    The project name

    Example: My first project
    descriptionall ofOptional
    string · min: 1Optional

    Must not be empty or contain only whitespace.

    Pattern: .*\S.*
    and
    stringOptional

    A short description of the project

    Example: Project to explore KPN Things
    get
    /projects/{projectId}
    200

    The project

    No content

    string
    Required
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    qstring · min: 1Optional

    Include only projects whose name or description contain the search term. Matching is done case-insensitively.

    clientIdstring · uuidOptional

    Include only projects owned by the client matching clientId.

    createdBeforestring · date-timeOptional

    Include only projects created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only projects created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only projects modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only projects modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    Page of filtered projects. Only projects that are accessible to the caller are returned.

    application/json

    A paginated list of projects

    and
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /projects

    No content

    this FAQ
    Flows tab
    Logo
    Logo

    Beta API (Deprecated)

    This describes the Beta API that is now deprecated. We recommend transitioning to the new API as soon as possible to take advantage of new features, improved performance, and long-term support.

    hashtag
    List devices

    GET https://api.kpnthings.com/api/devices

    KPN FillTag II

    FillTag device for Waste Control applications, also known as Syren II-L Waste device.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-filltag-ii

    [
        {
            "bn": "urn:dev:DEVEUI:4227c7e44ee76d1e:",
            "bt": 1693136532.83,
            "n": "detectedBeacon",
            "vs": "a1e2093368d4e7b8"
        },
        {
            "n": "count_LidOpen",
            "v": 1
        },
        {
            "n": "batteryLevelLow",
            "vb": true
        },
        {
            "n": "batteryLevelLow_beacon",
            "vb": false
        },
        {
            "n": "distance",
            "u": "m",
            "v": 0.684
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 18.875
        },
        {
            "n": "lidOpenedSincePreviousTransmission",
            "vb": true
        },
        {
            "n": "distanceMeasurementIsValid",
            "vb": true
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    GET /projects/{projectId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    

    for simcards that are lost, damaged, or no longer needed

    M2M Connectivity Configuration
    Billing
    Ownership
    GET /projects HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    hashtag
    Query Parameters
    Name
    Type
    Description

    currentPage

    number

    0

    pageSize

    number

    20

    search

    string

    (case sensitive partial string search)

    sortBy

    string

    name

    hashtag
    Headers

    Name
    Type
    Description

    Authorization

    string

    Bearer {accessToken}

    Accept

    string

    application/vnd.kpnthings.device.v1.response+json

    {
        "content": [
            {
    

    hashtag
    Response codes

    Code

    Description

    🟢 200 OK

    Your request was correct.

    🟢 201 Created

    You created an object with your request.

    🟢 204 No Content

    Your request was correct, but there is no information to return, for instance after deleting an object.

    🟡 302 Found

    Your access token is incorrect or does not have access to KPN Things. Please check your API Key in GRIP.

    🔴 400 Bad Request

    Something in your request is not correctly formatted. For instance your body structure, your accept header or a query parameter.

    hashtag
    Send downlink to device

    POST https://api.kpnthings.com/api/actuator/downlinks

    Body: [{"bn":"urn:dev:DEVEUI:{devEUI}:", "n":"payloadHex", "vs": "{payload}"}]

    hashtag
    Query Parameters

    Name
    Type
    Description

    externalReference

    string

    Optional reference for you to choose

    port

    integer

    LoRa FPort to send data on

    hashtag
    Headers

    Name
    Type
    Description

    Accept

    string

    application/vnd.kpnthings.actuator.v1.response+json

    Content-Type

    string

    application/json

    hashtag
    Full documentation of KPN Things APIs

    Currently the APIs of KPN Things are documented using Postman. Postman arrow-up-rightis an easy to use API development tool.

    hashtag
    Postman API Collection

    hashtag
    Postman environment variables

    To get the Postman collection working, you need to create a Postman environmentarrow-up-right with the following variables:

    Variable

    Value

    gripBaseUrl

    https://auth.grip-on-it.com

    tenantId

    Your grip tenant id

    applicationId

    4dc82561-f65f-523g-dek9-6c79ec314f02

    keyId

    Your key id

    keySecret

    Your key secret

    hashtag
    ⚠️Deprecated: performing API call in sub-customer environment

    triangle-exclamation

    This API is deprecated: use the KPN-Things-Security-Contextheader instead.

    💎 Add-on feature This feature is only available if you have the add-on feature Customer Management.

    If you have Customer Management in your account, you can manage Things accounts for your own customers. These customers of you, let's call them sub-customers, have their own customer account in KPN Things. But you have access rights with your API Key to perform actions in their account.

    hashtag
    The principle

    To perform an API call in a sub-customer environment, there are two requirements:

    1. You should have requested the access rights to the individual sub-customer environment

    2. For all API calls you perform, you should add the following HTTP header:

    hashtag
    Step 1: Request access rights

    This only has to be one once per API Key per sub-customer.

    1. Find the Customer ID from the sub-customer you want to perform an action on. You can use the All Customers page to search in your Customers and then open the Customer details page of the concerning Customer to find its Customer ID.

    2. Perform the Request KPN Things access token through GRIP API call.

    3. Perform the following API call:

    hashtag
    ⚠️Deprecated: request access rights to a sub-customer

    triangle-exclamation

    This API is deprecated: use the KPN-Things-Security-Contextheader instead.

    GET https://api.kpnthings.com/api/v1/lifecycle/clients/:clientId/context-switch

    hashtag
    Path Parameters

    Name
    Type
    Description

    clientId

    string

    Customer ID of your sub-customer

    hashtag
    Headers

    Name
    Type
    Description

    Content-Type

    string

    application/json

    Accept

    string

    application/json

    hashtag
    Step 2: Perform API call in sub-customer environment

    Now you have access rights to the sub-customer environment with your API key. Now you can perform any API call you have the rights for in the sub-customer environment by simply adding the x-client-id header to the API call when you execute it.

    Device Specification UUID: c2a13e2e-6aba-4932-9499-97ae3e825de9

    Decoders
    decoderSpecificationUUID
    Description

    Syren II-L hex based decoder (v2)

    590af144-3a1b-5742-b06d-0d187ea954a2

    Decoder for Syren II-L payloads.

    › Syren II-L hex based decoder

    d1d4fafd-315c-439a-a6ea-fcfb33bff701

    Syren II-L hex based decoder

    hashtag
    Syren II-L hex based decoder (v2)

    Decoder for Syren II-L payloads.

    circle-info

    This decoder also decodes Geolocation and Local Gateway data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    distance

    number

    m

    2.33

    interval

    number

    s

    14400

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    hashtag
    › Syren II-L hex based decoder

    Syren II-L hex based decoder

    Expected SenML records

    name
    type
    unit

    codeIncident

    number

    distance

    number

    m

    interval

    number

    s

    measurementInterval

    number

    s

    KPN FillTag II

    Modular user management

    Configure users, roles and permissions

    You and your team want secure and sustainable access to your IoT solution, with full insight and control. To achieve this, assigning the right roles and permissions is essential.

    To achieve this, assinging the right roles and permissions is done in GRIP. This Identity and Access Management platform is developed by KPN, specifically designed for Business Users. It enables organizations to securely and efficiently manage access to their applications and services.

    To assign roles, you must be an admin of the account. As an administrator, you can add or remove users and configuratie roles and permissions for your services.

    hashtag
    Before you start

    To manage users and roles, you need admin rights

    • Already an admin? Great! Let’s get started!

    • Not an admin yet? Ask your organization’s administrator to grant you admin rights Not sure who that is? us and we’ll help you out

    hashtag
    Access the User Management section

    You can access GRIP in three ways.

    1. Via

    2. Via

    3. Via

    hashtag
    Via KPN Things Portal

    1
    1. Go to or go to and click on Things Manager

    2. Click on your Company in the menu

    hashtag
    Via MijnKPN Zakelijk

    1

    Go to

    2

    Log in and select Company Details in the menu and click on User Management

    3

    hashtag
    Via direct link

    1

    Go to

    2

    Log in and select Users

    3

    hashtag
    Managing Users in GRIP

    The information below explains how to manage users, including adding and removing users, and managing roles and permissions.

    Once you have accessed the User Management section in GRIP, you can perform several actions to control access within your organization.

    hashtag
    What functionalities do you have

    Review existing users, add and delete users View the list of all users in your organization, including their roles and assigned services. Invite new team members by creating users accounts or deleting users who no longer need access to your services.

    Edit or give permissions to an added or existing user Modify user information, roles and permissions to ensure they have the correct level of access to your services.

    circle-info

    Why this matters Managing users and permissions in GRIP ensures that only authorized individuals can access your applications and IoT services. This helps maintain security and compliance across your organization.

    hashtag
    Review existing users, add and delete users

    In the User Management table, you can see all current users along with their assigned roles and permissions. This overview helps you quickly check who has access to which services.

    Add, Remove or Modify Users

    1. To add a new user, click Add User at the top of the page

    2. To modify a user, click the three dots ⋮ and select Edit

    3. To remove a user, click the three dots ⋮ and select Deactivate or Delete

    circle-info

    To give you the opportunity to reactivate an account without having to create it again, a deleted user will remain visible in the overview for 10 days before it is completely removed.

    hashtag
    Edit or give permissions to an added or existing user

    For a New User you click on the Add User at the top of the page and provide the general information.

    1

    hashtag
    Provide the general information

    1. Fill in the general details of the new user

    hashtag
    Assigning Services and Roles

    1

    hashtag
    Select Services and Roles

    1. Navigate to the Services and Roles tab

    hashtag
    Services and Roles explained

    The below list shows the available roles for services that are used within the KPN IOT solution and describes what levels of access each of the roles gives to the user in KPN Things portal.

    Provides the user with an Admin account to access and give assigned services.

    Role
    Description
    Access

    The starting point for your IoT service and manage the IoT solution.

    We advise that every user has a Things Manager and Things Support role.

    circle-exclamation

    Make sure to select only one role per item If you choose multiple roles - such as Thing Manager - Admin and Thing Manager - Read Only - the lowest role will override the highest.

    In this example, you would only have Read Only access.

    hashtag
    Things Creator

    These roles are only needed if you manage your devices, decoders and scripts via KPN Things. If only connectivity features are used, these roles are not required.

    Role
    Description
    Access

    hashtag
    Things Manager

    We recommend granting the user at least KPN Things - Read Only access. This ensures insights into the IoT solution and enables options such as making exports of connectivity items available.

    Role
    Description
    Access

    hashtag
    Things Support

    We advise that every user has access to this role in order to see important documents and access to links to contact information and ServiceNow be able to log tickets. Assigning this role also subscribes you to service emails.

    triangle-exclamation

    To be able to log tickets in ServiceNow also the ICT Manager role must be granted in Self Service Portal.

    Role
    Description
    Access

    The Self Service Portal allows users to register and track tickets for incidents, information requests, change requests, and complaints. We recommend granting access to all users and ensuring each user profile includes the correct phone number and language setting (found under the Location section in User Settings).

    circle-exclamation

    The 'Things Support - User' role must be assigned to access the Self Service Portal via in the KPN Things Portal.

    Role
    Description
    Access

    Grants the user access to the KPN Webshop. If any of the webshop-related roles are assigned, the Shop tab will automatically become visible and accessible in the KPN Things Portal.

    Role
    Description
    Access
    circle-exclamation

    Please note that you must have at least the Quotation role assigned to be able to place orders.

    This provides the user with access to the MijnKPN Zakelijk service portal. It gives access to the available services.

    Role
    Description
    Access

    KPN Global Tracker Wired

    KPN Global Tracker Wired

    A wired 2G/LTE-M Tracking device with GPS.

    • Supported network type(s): KPNSTREAMLINEM2M

    • Device Specification ID: kpn-global-tracker-wired

    • Device Specification UUID: 7c81c9a6-02e3-46f2-ac68-a300927b5535

    Decoders
    decoderSpecificationUUID
    Description

    hashtag
    Decoded M2M Data for GlobalTracker Wired

    Decoder for M2M KPN Global Tracker Wired devices.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    Detail level 1 (SV_CountersUser)

    Detail level 2 (SV_Network)

    Detail level 3 (SV_Position)

    KPN LocationTag I

    Also known as Viloc Tag.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-locationtag-i

    KPN Global Tracker Autonomous

    A battery powered 2G/LTE-M device with GPS.

    • Supported network type(s): KPNSTREAMLINEM2M

    • Device Specification ID: kpn-global-tracker-autonomous

    hashtag
    Retrieve device groups filtered and sorted by specified search and sort criteria

    get

    Retrieve all device groups that match the query parameters given. If a search parameter is provided, device groups whose name or description (partially) match are returned.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    Authorization

    hashtag
    Create a new device group

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    hashtag
    Retrieve a device group by its ID

    get

    Retrieve a device group by its ID. The device group must be accessible to the caller.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    Authorization

    hashtag
    Update an existing device group

    put
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Delete a device group by its ID

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Retrieve the devices linked to a device group

    get

    Retrieve all devices linked to a device group. The device group must be accessible to the caller.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations

    hashtag
    Link a device to a device group

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Unlink a device from a device group

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Retrieve HTTP bindings, filtered by query parameters.

    get

    Retrieve all HTTP bindings that match the query parameters given.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    Authorizationstring

    hashtag
    Create a new HTTP binding.

    post

    Create a new HTTP binding.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired

    hashtag
    Retrieve a HTTP binding by ID.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Update a HTTP binding.

    put
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Delete a HTTP binding.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    x-client-id: {{customerID}}
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "serialNumber",
            "v": 18173
        },
        {
            "n": "productId",
            "v": 12802
        },
        {
            "n": "type",
            "v": 1
        },
        {
            "n": "version",
            "v": 49
        },
        {
            "n": "measurementInterval",
            "u": "s",
            "v": 900
        },
        {
            "n": "interval",
            "u": "s",
            "v": 14400
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 16
        },
        {
            "n": "rfu",
            "v": 0
        },
        {
            "n": "numberOfMeasurements",
            "v": 12
        },
        {
            "n": "distance",
            "u": "m",
            "v": 0.61
        },
        {
            "n": "distance",
            "t": -900,
            "u": "m",
            "v": 0.61
        },
        {
            "n": "distance",
            "t": -1800,
            "u": "m",
            "v": 0.62
        },
        {
            "n": "distance",
            "t": -2700,
            "u": "m",
            "v": 2.33
        },
        {
            "n": "distance",
            "t": -3600,
            "u": "m",
            "v": 2.33
        },
        {
            "n": "distance",
            "t": -4500,
            "u": "m",
            "v": 1.42
        },
        {
            "n": "distance",
            "t": -5400,
            "u": "m",
            "v": 1.43
        },
        {
            "n": "distance",
            "t": -6300,
            "u": "m",
            "v": 1.44
        },
        {
            "n": "distance",
            "t": -7200,
            "u": "m",
            "v": 1.42
        },
        {
            "n": "distance",
            "t": -8100,
            "u": "m",
            "v": 1.43
        },
        {
            "n": "distance",
            "t": -9000,
            "u": "m",
            "v": 1.42
        },
        {
            "n": "distance",
            "t": -9900,
            "u": "m",
            "v": 1.43
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    Click on User Profiles under Account

    2

    Click on the Manage Users link shown above the users overview.

    3

    For documentation about how to manage users click here

    For documentation about how to manage users click here
    For documentation about how to manage users click here

    Select the Send email to set password option to send a password email immediately. This can also be done at a later time, for example after you’ve configured all roles and permissions.

  • Click the Add User button

  • circle-check

    If the user is a contact person for operational matters, it is advisable to provide a phone number and the correct language setting so that our service desk can reach you when needed.

    After adding the user, the next screen opens where you can optionally enter additional information about the user. This information is not required for using your account, but it can be used for your own administration.

    1. Add additional general details (optional)

    2. Add even more information like job title or office location (optional)

    3. Select the preferred language setting

    4. Click the Save Changes button

    If the user should be able to manage other users, enable the Admin role

  • Click Save Changes

  • Click + Assign services and roles button to add specific services

  • Select the appropriate services and roles based on the user’s responsibilities. The example below grants the user full access to the features within the KPN IoT solution.

    triangle-exclamation

    The admin is responsible for assigning the correct permissions to the user. Please note that someone with admin rights can also grant themselves additional permissions.

    Admin

    Full user management, including own account.

    View and manage services and roles of other users; add, modify or remove users.

    Things Creator - Admin

    Full access to Things Creator tab.

    Add modify or remove devices types, decoders and scripts.

    Things Creator - Read Only

    Read-only access to Things Creator tab.

    View device types, decoders, and scripts.

    Things Manager - Admin

    Full access to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity.

    Things Manager - Editor

    Full access except for deleting to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity except the right to delete.

    Things Manager - Read Only

    Read only access to Things Manager tab.

    View devices, flows, destinations and connectivity.

    Things Support - User

    Access to the Things Support tab.

    View news, release notes, documents, service status, reports and contact info and recieve service emails.

    ICT Manager

    Access to Self Service Portal.

    Register and track tickets for incidents, information requests, change requests and complaints.

    Forecasting

    Enables forecasting functionality.

    Enables product forecasting for specific calendar periods, allowing KPN to align stock levels with expected demand

    Quotation

    Enables ordering and requesting quotations.

    Enables to order products and request quotations for items that are not currently covered by an existing contract. Additionally, user can view the status and history of their orders.

    Read Only

    Read only access of products and prices.

    View product details and prices, order status and order history.

    Voucher Manager

    Manage discount vouchers.

    Process discount vouchers.

    Facturen (Invoices)

    View invoices in PDF format.

    Allows user to view all invoices in PDF format that are linked to the same KPN Reference Number (KRN), which is your company’s unique identifier within KPN.

    Contact
    KPN Things Portal
    MijnKPN Zakelijk
    direct link
    portal.kpnthings.com/managerarrow-up-right
    KPN Things Portalarrow-up-right
    https://mijnkpnzakelijk.kpn.comarrow-up-right
    grip-on-it.comarrow-up-right
    Support tab
    Modify users
    The central identity solution behind every account
    The foundation for your IoT applications
    Provides access to the Service Portal for reporting incidents and service request
    Provides access to te KPN Webshop
    Provide access to MijnKPN Zakelijk functions

    string

    Not present in detail level 1 messages

    gpsTime

    number

    s

    Unix EPOCH time in seconds

    gsmNetworkId

    string

    eventDescription

    string

    • "Start moving"

    • "Stop moving"

    • "While moving"

    Description of the device event. Not present in detail level 1 messages.

    eventId

    string

    • "40" (Stop moving)

    • "41" (Start moving)

    • "44" (While moving)

    Id of the device event. Not present in detail level 1 messages

    gpsStatus

    string

    • "0" (OK)

    • "1" (Speed/heading invalid)

    • "32" (Accuracy not met)

    Identifier indicating the GPS Status

    gpsNotes

    string

    • "OK"

    • "Accuracy not met"

    • "Speed/heading invalid"

    Description of the GPS Status

    heading

    number

    rad

    Direction in radials. Not present in detail level 1 messages

    latitude

    number

    lat

    Latitude of the device. Not present in detail level 1 messages

    longitude

    number

    lon

    Longitude of the device. Not present in detail level 1 messages

    radius

    number

    m

    Radius indicating the precision of the positition. Not present in detail level 1 messages

    switch

    string

    • "0" (Position)

    • "53" (SV_CountersUser)

    • "64" (SV_Network)

    Identifier indicating the record-type. In case Switch=77, there has been no GPS Fix and the Geo coordinates belong to the previous GPS Fix.

    switchName

    string

    • "SV_Position"

    • "SV_CountersUser"

    • "SV_Network"

    Name of this record-type.

    temperature

    number

    Cel

    The measured temperature

    velocity

    number

    m/s

    Velocity of the device. Not present in detail level 1 messages

    Decoded M2M Data for GlobalTracker Wired

    58a31b2d-05f1-5e4b-a531-18d4f896dbd7

    Decoder for M2M KPN Global Tracker Wired devices.

    altitude

    m

    The measured altitude

    batteryVoltage

    number

    V

    3.59

    Understanding and Interpreting SenML Data

    firmwareVersion

    "uuid": "xxxxxx",
    "name": "My first own device",
    "description": "",
    "metadata": null,
    "deviceSpecificationUUID": "d2723e99-1fe4-4d60-9b6d-8061f7414b24",
    "barcode": null
    },
    ...
    ],
    "last": true,
    "totalPages": 1,
    "totalElements": 2,
    "sort": [
    {
    "direction": "ASC",
    "property": "name",
    "ignoreCase": false,
    "nullHandling": "NATIVE",
    "ascending": true,
    "descending": false
    }
    ],
    "first": true,
    "numberOfElements": 2,
    "size": 20,
    "number": 0
    }

    sortOrder

    string

    ASC

    🔴 403 Forbidden

    Your access token is correct, but you do not have the authorization to access that resource.

    baseUrl

    https://api.kpnthings.com

    Device Specification UUID: 00338b9a-25f8-43e5-ba36-7555bc00ad83

    Decoders
    decoderSpecificationUUID
    Description

    › Decoded payload

    84e9d55d-28b3-43c2-9b2d-80ebce35222f

    Decoder outputting sabotage flag and temperature reading.

    + Location by LoRa On Premises Gateway reception

    8ae50706-4ad1-4823-90c8-4db166180846

    Add location data to messages that are received by known .

    + LoRa Geolocation data

    c2f529b3-a1e2-417e-a1f8-2269f4245af1

    Add data to messages where location could be calculated.

    Encoders
    encoderSpecificationUUID
    Description

    ‹ Encoded device modes or send interval

    15575b9a-4a5f-4445-9417-4b7a56080f20

    Send device modes for Asset Recovery: Active (5h interval), Missing (5min interval), or change send interval.

    hashtag
    › Decoded payload

    • UUID: 84e9d55d-28b3-43c2-9b2d-80ebce35222f

    • Description: Decoder outputting sabotage flag and temperature reading.

    • Exchange: decoder.lora.viloc.exchange

    hashtag
    Expected SenML outputs

    name
    type/unit
    description
    example

    temperature

    Cel

    21.0

    sabotaged

    boolean

    indicates if the device has been sabotaged

    false

    batteryLevelLow

    hashtag
    Example Message

    Note: batteryLevelLow is sent only once per day

    hashtag
    + Location by LoRa On Premises Gateway reception

    • UUID: 8ae50706-4ad1-4823-90c8-4db166180846

    • Description: Add location data to messages that are received by known LoRa On Premise Gateways.

    • Exchange: decoder.lora.lrr.exchange

    hashtag
    Expected SenML outputs

    See below. Output is comparable to LoRa Geolocation data.

    hashtag
    + LoRa Geolocation data

    • UUID: c2f529b3-a1e2-417e-a1f8-2269f4245af1

    • Description: Add LoRa Geolocation data to messages where location could be calculated.

    • Exchange: decoder.location.data.kpn.actility.exchange

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    locOrigin

    string

    KPNLORA

    indicates the origin of the location data

    latitude

    numeric

    51.79

    longitude

    hashtag
    Example SenML-message

    This location info can be merged with the payload of the device

    hashtag
    › Decoded payload v2

    Decoder for Viloc payloads.

    circle-info

    This decoder also decodes Geolocation and Local Gateway data.

    name
    type
    description
    example

    sabotaged

    boolean

    indicates if the device has been sabotaged

    false

    temperature

    number

    the temperature measured by the device

    14

    batteryLevelLow

    boolean

    indicates if the battery voltage has been below the threshold

    hashtag
    Example SenML-message

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    The batteryLevelLow field in the example below is optional and will not be present in every uplink.

    hashtag
    › Encoded payload

    hashtag
    = Raw LoRa payload

    • Protocol: LoRa downlink

    • Description: Send raw LoRa payload to your device.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: payloadHex (raw input)

    hashtag
    ‹ Encoded device modes or send interval

    • Protocol: LoRa downlink

    • Description: Send device modes for Asset Recovery: Active (5h interval), Missing (5min interval), or change send interval.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: mode

      • Value: Active (translates into → 010000646400D100C700DADA, 02D180AA00C40784038405840484060A14)

      • Value: Missing (translates into → 010000646400E1008600DADA, 02E180AA00C0077B0380057B047B060A147B0214091F0C1F0E010088)

    • Name: interval

      • Value: 1h (translates into → 010000646400E1008600DADA, 02E180AA00C0077B0380057B047B060A147B0214091F0C1F0E010088)

    KPN LocationTag I

    Device Specification UUID: e60e392e-c738-49ae-839e-54363638ae88

    Decoders
    decoderSpecificationUUID
    Description

    Decoded M2M Data for GlobalTracker Autonomous

    d1f88fc7-cb8c-56ad-8f51-abd3d68e130c

    Decoder for M2M KPN Global Tracker Autonomous devices.

    hashtag
    Decoded M2M Data for GlobalTracker Autonomous

    Decoder for M2M KPN Global Tracker Autonomous devices.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    altitude

    m

    The measured altitude

    batteryVoltage

    number

    V

    3.59

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    Detail level 1 (SV_Network)

    Detail level 2 (SV_TimeAliveTripMeters)

    Detail level 3 (SV_Position)

    KPN Global Tracker Autonomous
    string
    Required
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    qstringOptional

    Include only device groups whose names or descriptions contain the search term. Matching is done case-insensitively.

    clientIdstring · uuidOptional

    Include only device groups owned by the client with the provided clientId. If clientId is omitted, all device groups are included that are accessible to the caller.

    projectIdstring · uuidOptional

    Include only device groups associated with the project with the provided projectId. If projectId is omitted, all device groups are included that are accessible to the caller.

    createdBeforestring · date-timeOptional

    Include only device groups created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only device groups created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only device groups modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only device groups modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    A list of device groups matching the search criteria.

    application/json

    A paginated list of device groups

    and
    get
    /device-groups
    200

    A list of device groups matching the search criteria.

    No content

    A group of devices.

    idstring · uuidRead-onlyOptional

    The unique identifier of the device group.

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    namestring · min: 1 · max: 255Required

    The name of the device group.

    Example: Parking sensors device group
    descriptionstring · max: 255Optional

    A description of the device group.

    Example: This is a group of devices containing parking sensor devices.
    projectIdstring · uuidRequired

    The project identifier to which this device group belongs.

    Example: 12345678-1234-1234-1234-123456789012
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is created in the system.

    Example: 2025-07-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is last modified in the system.

    Example: 2025-07-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    Responses
    chevron-right
    201

    Device group has been created successfully.

    application/json
    post
    /device-groups
    201

    Device group has been created successfully.

    No content

    string
    Required
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    deviceGroupIdstring · uuidRequired

    The ID of the device group to retrieve.

    Responses
    chevron-right
    200

    The requested device group.

    application/json

    A group of devices.

    idstring · uuidRead-onlyOptional

    The unique identifier of the device group.

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    namestring · min: 1 · max: 255Required

    The name of the device group.

    Example: Parking sensors device group
    descriptionstring · max: 255Optional

    A description of the device group.

    Example: This is a group of devices containing parking sensor devices.
    projectIdstring · uuidRequired

    The project identifier to which this device group belongs.

    Example: 12345678-1234-1234-1234-123456789012
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is created in the system.

    Example: 2025-07-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is last modified in the system.

    Example: 2025-07-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    get
    /device-groups/{deviceGroupId}
    200

    The requested device group.

    No content

    Path parameters
    deviceGroupIdstring · uuidRequired

    The ID of the device group to update.

    Body

    A group of devices.

    idstring · uuidRead-onlyOptional

    The unique identifier of the device group.

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    namestring · min: 1 · max: 255Required

    The name of the device group.

    Example: Parking sensors device group
    descriptionstring · max: 255Optional

    A description of the device group.

    Example: This is a group of devices containing parking sensor devices.
    projectIdstring · uuidRequired

    The project identifier to which this device group belongs.

    Example: 12345678-1234-1234-1234-123456789012
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is created in the system.

    Example: 2025-07-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is last modified in the system.

    Example: 2025-07-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    Responses
    chevron-right
    200

    Device group has been updated successfully.

    application/json

    A group of devices.

    idstring · uuidRead-onlyOptional

    The unique identifier of the device group.

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    namestring · min: 1 · max: 255Required

    The name of the device group.

    Example: Parking sensors device group
    descriptionstring · max: 255Optional

    A description of the device group.

    Example: This is a group of devices containing parking sensor devices.
    projectIdstring · uuidRequired

    The project identifier to which this device group belongs.

    Example: 12345678-1234-1234-1234-123456789012
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is created in the system.

    Example: 2025-07-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device group is last modified in the system.

    Example: 2025-07-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device group.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    put
    /device-groups/{deviceGroupId}
    200

    Device group has been updated successfully.

    No content

    Path parameters
    deviceGroupIdstring · uuidRequired

    The ID of the device group to delete.

    Responses
    chevron-right
    204

    Device group has been deleted successfully.

    delete
    /device-groups/{deviceGroupId}
    204

    Device group has been deleted successfully.

    No content

    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    deviceGroupIdstring · uuidRequired

    The ID of the device group for which to retrieve linked devices.

    Query parameters
    createdBeforestring · date-timeOptional

    Include only links created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only links created at or after the provided date and time. The date-time must be in ISO 8601 format.

    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    Responses
    chevron-right
    200

    Page of devices linked to the specified device group.

    application/json

    A paginated list of device group to device links

    and
    get
    /device-groups/{deviceGroupId}/devices
    200

    Page of devices linked to the specified device group.

    No content

    Path parameters
    deviceGroupIdstring · uuidRequired

    The ID of the device group for which to retrieve linked devices.

    Body

    A link between a device group and a device.

    deviceGroupIdstring · uuidRead-onlyOptional

    The identifier of the device group.

    Example: aacaf415-a800-4adb-9258-3e3b671d6492
    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device link was created in the system.

    Example: 2025-07-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device link.

    Example: principal/fe288bc5-8652-4ecc-806b-7cf0c7db085e
    Responses
    chevron-right
    200

    Device has been linked to the device group successfully.

    application/json

    A link between a device group and a device.

    deviceGroupIdstring · uuidRead-onlyOptional

    The identifier of the device group.

    Example: aacaf415-a800-4adb-9258-3e3b671d6492
    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device link was created in the system.

    Example: 2025-07-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device link.

    Example: principal/fe288bc5-8652-4ecc-806b-7cf0c7db085e
    post
    /device-groups/{deviceGroupId}/devices
    200

    Device has been linked to the device group successfully.

    No content

    Path parameters
    deviceGroupIdstring · uuidRequired

    The ID of the device group to unlink the device from.

    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Responses
    chevron-right
    204

    Device has been unlinked from the device group successfully.

    delete
    /device-groups/{deviceGroupId}/devices/{deviceId}
    204

    Device has been unlinked from the device group successfully.

    No content

    Required
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    clientIdstring · uuidOptional

    Include only HTTP bindings for devices that are owned by the provided clientId. If clientId is omitted, bindings from all devices owned by the calling client are included.

    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    typestringOptional

    Include only HTTP bindings of the specified type. Currently supported values are http-streamline and http-senml.

    createdBeforestring · date-timeOptional

    Include only HTTP bindings created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only HTTP bindings created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only HTTP bindings modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only HTTP bindings modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    Page of filtered HTTP bindings. Only bindings that are accessible to the caller are returned.

    application/json

    A paginated list of HTTP bindings

    and
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /http/bindings

    No content

    Bearer authentication header of the form Bearer <token>.
    Body

    A binding of a device to the HTTP connector, which configures that the device can connect to the Things Platform using HTTP

    or
    Responses
    chevron-right
    201

    The newly created HTTP binding'.

    application/json
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    post
    /http/bindings

    No content

    bindingIdstring · uuidRequired

    HTTP binding identifier.

    Responses
    chevron-right
    200

    The HTTP binding.

    application/json

    A binding of a device to the HTTP connector, which configures that the device can connect to the Things Platform using HTTP

    or
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /http/bindings/{bindingId}

    No content

    bindingIdstring · uuidRequired

    HTTP binding identifier.

    Body

    A binding of a device to the HTTP connector, which configures that the device can connect to the Things Platform using HTTP

    or
    Responses
    chevron-right
    200

    The updated HTTP binding.

    application/json

    A binding of a device to the HTTP connector, which configures that the device can connect to the Things Platform using HTTP

    or
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    put
    /http/bindings/{bindingId}

    No content

    Path parameters
    bindingIdstring · uuidRequired

    HTTP Binding identifier.

    Responses
    chevron-right
    204

    HTTP binding has been deleted successfully.

    delete
    /http/bindings/{bindingId}
    204

    HTTP binding has been deleted successfully.

    No content

    hashtag
    Retrieve MQTT bindings, filtered by query parameters.

    get

    Retrieve all MQTT bindings that match the query parameters given.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    Authorizationstring

    hashtag
    Create a new MQTT binding.

    post

    Create a new MQTT binding.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired

    hashtag
    Retrieve a MQTT binding by ID.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Update a MQTT binding.

    put
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Delete a MQTT binding.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    measurementInterval

    number

    s

    900

    Based on numberOfMeasurements, additional distance records with n times the measurementInterval negative t might be present

    numberOfMeasurements

    number

    12

    The n amount of distance measurements

    productId

    number

    12802

    rfu

    number

    0

    serialNumber

    number

    18173

    temperature

    number

    Cel

    16

    type

    number

    1

    version

    number

    49

    numberOfMeasurements

    number

    productId

    number

    rfu

    number

    serialNumber

    number

    temperature

    number

    Cel

    type

    number

    version

    number

    SODAQ R412M

    This is an old development board which is no longer available for purchase and should not be used for new designs.

    A nifty, industry standard IoT developer board that allows you to utilize LTE-M networks with integrated GPS, Accelerometer and Magnetometers, Grove Connectors, JST connectors and Arduino compatible open source software that allows for low-power applications.

    This getting started targets the SODAQ SARA Arduino Form Factor (AFF) R412Marrow-up-right device. Probably other AFF and SFF SODAQs with an R41xM module will work, but we did not test them (yet). If you share your experiences with one of these devices, we can update this manual!

    This getting started will give you step by step instructions to get your KPN Things M2M developer kit connected to KPN Things!

    hashtag
    1. Get everything you need

    Before we start, you should check if have all necessary components:

    1. KPN Things SIM card

    2. SODAQ SARA AFF R412M Board

    3. PCB Antenna

    4. LiPo Battery

    hashtag
    Request test SIM cards

    After registration there is another step in order to receive test SIM cards, since we don't know your home address yet to send them to! After registering and logging in for the first time, click on the link in the M2M is now available in KPN Things! notification box on the home page and follow the directions.

    You will receive your test SIM cards in a couple of days. The SIM cards will be added to your Portal account already, ready to go!

    hashtag
    2. Prepare your development environment (Arduino IDE)

    This part of the manual is based on the .

    hashtag
    Setup your Arduino IDE

    With the Arduino IDE we will write our code and program it on the Device.

    • Download the and follow the installer.

    • Open your freshly installed Arduino IDE.

    hashtag
    Download the board configuration files for Sodaq boards

    When your IDE is all started, execute the following steps to install the Sodaq board configuration files.

    • Click on File > Preferences

    • At the bottom you should see Additional Boards Manager URLs. This is where you need to paste the following URL:

    After adding the URL, your preferences screen should look like this:

    • Close the preferences screen with OK

    • Click on Tools > Board:… > Boards Manager…

    • Search for SODAQ.

    hashtag
    3. Prepare your Device

    hashtag
    Assemble your Device

    Step 1: Insert the KPN Things SIM card.

    Step 2: Connect the antenna. Push the connector straight on the board.

    Step 3: Connect the battery to the right terminal on the board, the one stating BATT.

    Step 4: Connect the USB cable to the left USB port, the one next to the SIM card slot.

    circle-exclamation

    Make sure you connect your battery when using the board, else the module won't work correctly!

    hashtag
    Configure your Arduino IDE

    • From the Tools menu, under Board, select the correct board type:

    • Also from the Tools menu, under Port, make sure the correct COM port is selected. If you have multiple options, select the one stating SODAQ SARA.

    circle-exclamation

    If none of your ports is labelled that way, disconnect your SODAQ, reopen the menu, check which COM port disappeared, reconnect the SODAQ and choose the previously identified COM port.

    hashtag
    Upload test sketch

    With this test sketch we are going to check whether your Device works.

    • Copy the passthrough example code from the following SODAQ documentation page:

    • Paste the passthrough example code in you Arduino IDE.

    • Uncomment the third line, since you have a u-blox R4xx module

    • From the Sketch menu, click Upload to send the software to your SODAQ.

    If all went well it will say the following in the bottom of the Arduino IDE:

    • Meanwhile, from the Tools menu, open the Serial Monitor

    • In the Serial Monitor, select Both NL & CR and set the baud rate to 115200 baud (#1 in the screenshot below).

      • #2 in the screenshot above illustrates where you can enter commands to be sent to the u-blox module that sits on your Development board.

      • #3 shows where you will see the responses from the module.

    • Use the command AT+GSN to get the IMEI of your module.

      • You will be needing this value when registering your Device in the next step of this getting started.

    • Additionally, with the command ATI9 you can check your firmware version.

    The latest firmware version for the R412 is M0.10.00,A.02.14 (as of November 2020)

    hashtag
    Available commands

    The gives some more available commands. All available commands can be found in the of u-blox.

    hashtag
    4. Register your Device to KPN Things

    hashtag
    Open the KPN Things Portal

    Open the . Go to the All Devices page and click on Add new Device.

    hashtag
    Fill in your device information

    1. Select the Own M2M device device type.

    2. Enter a name for your SODAQ device.

    3. Click Add Device to continue.

    hashtag
    Provide Network Information

    Now enter the M2M specific information of your Device.

    1. IMEI of your Device. This value is printed on your u-blox module:

    2. ICCID of your SIM card. This value is printed on your SIM card. Select the correct SIM card from the drop down.

    If you have an Early access SIM, you choose the option "Add early access SIM" and enter the ICCID of the SIM manually in the newly appeared input field.

    3. Shared secret - a kind of password for the future data coming from your Device. Here you should come up with a unique password containing at least:

    • One lower case character.

    • One upper case character.

    • One number.

    • One special character.

    The shared secret should also be programmed into your Device in step 5.

    4. Click Add Network Info to save the network information and then Finish to continue.

    .

    hashtag
    5. Program your device to send a message

    In this step we are going to flash the Device with a program to send data to KPN Things.

    hashtag
    Download the ThingsML and Sodaq libraries

    The ThingsML library will provide code for your Device to communicate with KPN Things. The SODAQ libraries will provide code to interface with the components on the development board.

    • From the Tools menu in your Arduino IDE click on Manage Libraries...

    • Now, in the Library Manager, wait for all libraries to load.

    • Then search and install the following libraries:

      • ThingsML

    • When the installations are finished, click Close.

    hashtag
    Upload the example sketch

    This example will read the board temperature from the onboard thermometer and send it to KPN Things every 60 seconds.

    From the File menu, click on Examples. Now find ThingsML, then select sodaq, and within that choose sara_aff_temperature.

    hashtag
    Fill device identifiers in example code

    Look for the following part in the example code and fill in the missing values:

    • Device URN should be completed with the IMEI of your Device.

      • Make sure you leave the trailing colon : in place in the DEVICE_URN variable!

    Roughly: If you received your SIM card after June 2023, it's most likely an M2M Advantage.

    hashtag
    Run the sketch

    • Upload the sketch to your Device and open the Serial Monitor. The device will report some of the setup steps it will perform:

    This means your Device is trying to connect to our LTE-M network. After some seconds the following lines will appear:

    This means your Device has join our network and has sent its first uplink message to KPN Things!

    hashtag
    Check incoming data in the Portal

    Now your Device has connected to the network and is sending data, you should visit the in the Portal of the Device you created in step 4.

    In the connectivity block, you should see that the last message time indicates that KPN Things just received a message from your Device!

    hashtag
    6. Setup data flow in KPN Things

    You now successfully connected your M2M device to KPN Things! To further setup your data flow in KPN Things, you should can go to the next step:

    hashtag
    More information

    Interested in expanding the example sketch to make the Device do exactly what you want? Use the following references to find more information on Things code and SODAQ code:

    • The ThingsML library contains another SODAQ example that reads out the GPS module and sends latitude and longitude to KPN Things.

    • The SODAQ Support pages contain several examples to read out the sensors you can find on the SODAQ boards: .

    • Additional documentation on the ThingsML library can be found in Github:

    Shop

    Order your devices and simcards

    The KPN Webshop for IoT products has been combined with the KPN Webshop for other business market products. When multiple products are purchased, they will be displayed in this single environment.

    You can only start if you have a MijnKPN account with the correct permissions to access the KPN Webshop.

    hashtag
    No account yet!

    Then ask your administrator to create an account. If case you don't know who is the administrator for your organization is, please us.

    [
      {
        "bn": "urn:dev:IMEI:999999999000090:",
        "bt": 1664818024.4,
        "n": "batteryVoltage",
        "u": "V",
        "v": 0.8
      },
      {
        "n": "gpsTime",
        "u": "s",
        "v": 1696501006.08
      },
      {
        "n": "switch",
        "vs": "53"
      },
      {
        "n": "switchName",
        "vs": "SV_CountersUser"
      }
    ]
    [
      {
        "bn": "urn:dev:IMEI:863740069987078:",
        "bt": 1664818024.4,
        "n": "batteryVoltage",
        "u": "V",
        "v": 15.68
      },
      {
        "n": "firmwareVersion",
        "vs": "564"
      },
      {
        "n": "gpsTime",
        "u": "s",
        "v": 1696582683.52
      },
      {
        "n": "gsmNetworkId",
        "vs": "20408"
      },
      {
        "n": "switch",
        "vs": "64"
      },
      {
        "n": "switchName",
        "vs": "SV_Network"
      }
    ]
    [
      {
        "bn": "urn:dev:IMEI:863740062764946:",
        "bt": 1664818024.4,
        "n": "altitude",
        "u": "m",
        "v": 63
      },
      {
        "n": "batteryVoltage",
        "u": "V",
        "v": 3.87
      },
      {
        "n": "eventDescription",
        "vs": "?1?"
      },
      {
        "n": "eventId",
        "vs": "1"
      },
      {
        "n": "firmwareVersion",
        "vs": "69"
      },
      {
        "n": "gpsNotes",
        "vs": "OK"
      },
      {
        "n": "gpsStatus",
        "vs": "0"
      },
      {
        "n": "gpsTime",
        "u": "s",
        "v": 1696499003.04
      },
      {
        "n": "heading",
        "u": "rad",
        "v": 0
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 52.04044
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.40817
      },
      {
        "n": "radius",
        "u": "m",
        "v": 9.5
      },
      {
        "n": "switch",
        "vs": "0"
      },
      {
        "n": "switchName",
        "vs": "SV_Position"
      },
      {
        "n": "temperature",
        "u": "Cel",
        "v": 22.5
      },
      {
        "n": "velocity",
        "u": "m/s",
        "v": 0
      }
    ]
    [
    	{
    		"bn": "urn:dev:DEVEUI:B12363D23123C123:",
    		"bt": 1678778493
    	},
    	{
    		"n": "temperature",
    		"u": "Cel",
    		"v": 21.0
    	},
    	{
    		"n": "sabotaged",
    		"vb": false
    	},
    	{
    		"n": "batteryLevelLow",
    		"vb": false
    	}
    ]
    [
      {
        "bn": "urn:dev:DEVEUI:A41163C212345678:",
        "bt": 1637165561
      },
      {
        "n": "locOrigin",
        "vs": "KPNLORA"
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 51.794884
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.687986
      },
      {
        "n": "radius",
        "u": "m",
        "v": 319.730194
      },
      {
        "n": "locAccuracy",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locPrecision",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locTime",
        "vs": "1637165561192"
      }
    ]
    [
        {
            "bn": "6E5E267F2E6FB3BF",
            "bt": 1693136532.0,
            "n": "sabotaged",
            "vb": false
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29
        },
        {
            "n": "batteryLevelLow",
            "vb": true
        }
    ]
    [
      {
        "bn": "urn:dev:IMEI:863740062764946:",
        "bt": 1664818024.4,
        "n": "batteryVoltage",
        "u": "V",
        "v": 3.87
      },
      {
        "n": "firmwareVersion",
        "vs": "69"
      },
      {
        "n": "gpsTime",
        "u": "s",
        "v": 1696499019.6799998
      },
      {
        "n": "gsmNetworkId",
        "vs": "0"
      },
      {
        "n": "switch",
        "vs": "64"
      },
      {
        "n": "switchName",
        "vs": "SV_Network"
      }
    ]
    [
      {
        "n": "batteryVoltage",
        "u": "V",
        "v": 4.16,
        "bn": "urn:dev:IMEI:863740069962824:",
        "bt": 1664818024.4
      },
      {
        "n": "eventDescription",
        "vs": "Start moving"
      },
      {
        "n": "eventId",
        "vs": "41"
      },
      {
        "n": "firmwareVersion",
        "vs": "564"
      },
      {
        "n": "gpsNotes",
        "vs": "OK"
      },
      {
        "n": "gpsStatus",
        "vs": "0"
      },
      {
        "n": "gpsTime",
        "u": "s",
        "v": 1696854457.92
      },
      {
        "n": "heading",
        "u": "rad",
        "v": 5.897816608339239
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 52.0405
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.40833
      },
      {
        "n": "radius",
        "u": "m",
        "v": 9.5
      },
      {
        "n": "switch",
        "vs": "36"
      },
      {
        "n": "switchName",
        "vs": "SV_TimeAliveTripMeters"
      },
      {
        "n": "velocity",
        "u": "m/s",
        "v": 0
      }
    ]
    [
      {
        "bn": "urn:dev:IMEI:863740062764946:",
        "bt": 1664818024.4,
        "n": "altitude",
        "u": "m",
        "v": 63
      },
      {
        "n": "batteryVoltage",
        "u": "V",
        "v": 3.87
      },
      {
        "n": "eventDescription",
        "vs": "?1?"
      },
      {
        "n": "eventId",
        "vs": "1"
      },
      {
        "n": "firmwareVersion",
        "vs": "69"
      },
      {
        "n": "gpsNotes",
        "vs": "OK"
      },
      {
        "n": "gpsStatus",
        "vs": "0"
      },
      {
        "n": "gpsTime",
        "u": "s",
        "v": 1696499003.04
      },
      {
        "n": "heading",
        "u": "rad",
        "v": 0
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 52.04044
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.40817
      },
      {
        "n": "radius",
        "u": "m",
        "v": 9.5
      },
      {
        "n": "switch",
        "vs": "0"
      },
      {
        "n": "switchName",
        "vs": "SV_Position"
      },
      {
        "n": "temperature",
        "u": "Cel",
        "v": 22.5
      },
      {
        "n": "velocity",
        "u": "m/s",
        "v": 0
      }
    ]
    POST /device-groups HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /device-groups/{deviceGroupId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    PUT /device-groups/{deviceGroupId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /device-groups/{deviceGroupId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /device-groups/{deviceGroupId}/devices HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /device-groups/{deviceGroupId}/devices HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /device-groups/{deviceGroupId}/devices/{deviceId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /http/bindings HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /http/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    PUT /http/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /http/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /device-groups HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    Value: 2h (translates into → 010000646400CD00CD00DADA, 02CD80AA00C20781038105810481060A14)
  • Value: 5h (translates into → 010000646400D100C700DADA, 02D180AA00C40784038405840484060A14)

  • Value: 11h (translates into → 010000646400D3005600DADA, 02D380AA00C4078A038A058A048A061914)

  • › Decoded payload v2

    fa85c8cb-0f64-58c5-beea-69c94c55fc0e

    Decoder for Viloc payloads.

    boolean

    indicates if the battery voltage has been below the threshold

    false

    numeric

    4.68

    radius

    m

    319

    together with latitude and longitude this defines the area where the device is expected to be located

    locAccuracy

    %

    locPrecision

    %

    locTime

    timestamp

    1637165561

    unix timestamp (in s) of the localization

    false

    LoRa On Premise Gateways
    LoRa Geolocation
    Click on SODAQ SAMD Boards and an install button will appear.
  • Click Install to install the latest version of your selected board collection.

  • When the installation is done, click Close.

  • 32 characters in total.

  • Sodaq_LSM303AGR
  • Sodaq_R4X

  • Sodaq_wdt

  • Device Key should be filled with the Shared secret of your Device.
  • APN should be filled with one the following value two values. Your SIM card is one of two types, which you can see in the Connectivity list in KPN Things.

    1. For M2M Easy use kpnthings.iot

    2. For M2M Advantage use kpnthings2.m2m

  • Device

    Board type

    SODAQ SARA Arduino Form Factor (AFF) R412M

    SODAQ SARA

    Command

    Description

    Expected response

    AT

    Communication test

    OK

    ATI9

    Firmware version

    Some ID.

    AT+CSQ

    Check signal quality

    No connection: +CSQ: 99,99

    Good connection: value around 20

    AT+GSN

    Getting Started of SODAQarrow-up-right
    Arduino IDEarrow-up-right
    SODAQ passthrough documentationarrow-up-right
    SARA-R4 AT commands manualarrow-up-right
    KPN Things Portalarrow-up-right
    Learn more about M2M in KPN Things
    Device Detail Pagearrow-up-right
    circle-exclamation-checkConfigure a flowchevron-right
    https://support.sodaq.com/Boards/Sara_SFF/examples/arrow-up-right
    https://kpn-iot.github.io/thingsml-c-library/arrow-up-right

    Fetch IMEI of module

    "While not moving"

  • "45" (While not moving)

  • "33" (Accuracy not met + Speed/heading invalid)

  • "Accuracy not met + Speed/heading invalid"

    "77" (TimeAlive)

    "SV_TimeAlive"

    hashtag
    You have receIved an account?

    Let's get started!

    There are two ways to log in to the KPN IoT Webshop. This can be done via the MijnKPN or directly from the KPN Things Portal.

    hashtag
    Log in with MijnKPN

    1

    hashtag
    Open MijnKPN

    Open MijnKPN via https://mijnkpnzakelijk.kpn.comarrow-up-right

    2

    hashtag
    Open the KPN Hardwareshop

    Click on the KPN Hardwareshop link in the menu-item Products

    3

    hashtag
    Log in with Grip

    The KPN IoT Webshop is a separate module, click on Log in with Grip to log in with your Single Sign On account

    4

    hashtag
    You are now in the webshop

    You are now in the KPN Webshop where you can choose the desired product group

    hashtag
    Log in with KPN Things Portal

    1

    hashtag
    Open the shop tab

    Open the KPN Things Portal via https://portal.kpnthings.com/shoparrow-up-right or click on the Shop tab in the KPN Things Portalarrow-up-right

    In the shop tab, the available product groups are shown based on the IoT solutions used

    2

    hashtag
    Select product group

    To go directly to the desired product group select

    circle-info

    Fewer items may be visible on your shop. More items will be only shown when an additional connectivity type is activated in the portal.

    3

    hashtag
    You are now in the webshop

    You are now in the KPN Webshop directly in the product group you selected in the KPN Things Portal

    hashtag
    Search and select

    hashtag
    Search for an item

    Do you know the name of the item? Then you can search directly via the button.

    If you want to view the products per product group, click on.

    1. The desired product group

    2. The desired type of product

    3. View the specifications for a product

    Search and Select

    hashtag
    Add an item to the shopping cart

    If you have checked the desired items and would like to order them, click on.

    1. The or buttons to select the desired quantity

    2. Add to shopping cart

    Add to cart

    hashtag
    Multiple articles in a single order

    Once you have added an item, it can be ordered via Continue to order. You can also include multiple items in one order and choose Continue shopping. It is also possible to add a non-KPN IoT product such as a mobile phone or accessory to the Shopping Cart. Please note that this will be processed as a separate delivery. These items are shipped separately and are not charged via the KPN IoT invoice.

    Order or continue shopping

    hashtag
    Order simcards

    When ordering SIM cards, it is possible to immediately choose additional options to ensure that they are delivered with the desired settings in Cisco Control Center.

    Of course it is possible to change this afterwards in the KPN Things Portal or Cisco Control Center.

    If more than one Account ID is in use, it is possible to indicate which account you want, cick on.

    1. Select the Account ID

    Select Account-ID

    If you want to immediately select the desired communication plan and rate plan, click on.

    1. default rate plan no

    2. fill in the desired comm plan name

    3. fill in the desired rate plan name

    4. click on continue ordering

    Select comm plan and rate plan

    hashtag
    Place an order

    hashtag
    Check your order

    If you have chosen to place the order, check the Shopping Cart for the desired quantities and products. If the order is correct, click Continue ordering.

    Shopping Cart

    hashtag
    Shipping details

    Based on the company details the company address is available. This information cannot be changed. In the next step you can choose to deliver the order to this address. If you want to have the order delivered somewhere else, you can choose a different address.

    Shipping details

    hashtag
    Contact details

    Because you are the one who places the order, we will inform you about the status. You do not have to adjust the information. If someone else is our Contact Person for this order, then please adjust the information here.

    triangle-exclamation

    A phone number must not contain spaces.

    So add the number as +5511912345678 and not +55 11 91234 5678.

    Contact details

    hashtag
    Delivery adress

    Choose here to use the company address as the delivery address. Or enter a different address.

    1. Use the company address as the delivery address

    2. Select a previously entered different address

    3. Manually enter a different address

    4. Save the entered address as a new address to select from the list later

    triangle-exclamation

    It is very important that the delivery address is complete. The information is necessary to prevent packages from getting lost or being held up by customs authorities because informatie is not clear.

    Information needed:

    • name, phone and email information of the receiver

    • full adress including district of state information

    • additional information like docking station or gates on location

    In case an adress is saved as a new adress our team is able to check if the information is complete and correct the information if nessacary before sending the order to logistics. When an order is placed using a one-time address, we are forced to reject the order and will contact you to ensure the order is placed correctly, in order to prevent the mentioned issues.

    Delivery address

    hashtag
    Reference details and confirmation

    Reference details can be added for your own use, please fill in the following information.

    1. Add an internal Purchase Order

    2. Enter a Reference text

    Reference details

    hashtag
    Requested delivery data and payment method

    If there is a desired delivery date, please indicate it here.

    The payment method cannot be changed. By default, the costs are included on the upcoming invoice as one-off costs.

    Requested delivery date
    circle-exclamation

    We do our best to meet the requested delivery date. If the date is not feasible, we will contact you.

    hashtag
    Your order has been placed

    You're done! Your order is now being processed.

    Thanks for ordering

    hashtag
    Confirmation and order status

    Click on View my order. You will then receive an overview of all the order information.

    Order details

    hashtag
    Track your order status

    You will receive a confirmation with the order number by e-mail. This is your reference if you have any questions about the order. You can track the status of your order in the KPN IoT Webshop. Click on the Track and Trace link in the email to open your order to follow its status.

    Order e-mail

    Do you have any questions about the status of your order?

    Is any information incorrect or is the desired delivery date very important? Please contact us stating your order number and your question. We will always provide personal support.

    hashtag
    Current prices and forecasting

    hashtag
    Current prices via quotation

    It may be indicated in the ordering process for items that daily prices apply. These items are subject to price fluctuations of the components used. We immediately request a quote from the supplier for the ordered products.

    After you have placed an order, you will first see it in the quotation overview.

    Quotation overview

    When we receive the current prices we will contact you to determine whether the order can be processed. The order may always be adjusted or cancelled at that time.

    hashtag
    Indicating order expectations

    If you expect to place order in large numbers in the coming period, you can provide a forecast. Deviating from the expectations later is permitted. But informing our suppliers in advance helps in anticipating planning and purchasing.

    Would you like to provide a forecast? Then click on forecast in the menu.

    Forcast menu

    Now provide a forecast of quantities for the products you expect to order.

    1. Filter when needed by entering part of the product name, such as Business Grade, or a product code like K019

    2. Enter the quantities per product in the month in which you expect to place the orde

    3. Press ENTER to save the value

    circle-exclamation

    If there is no input field for a month in question, it is no longer possible to provide a forecast for it. In case an order is placed for that month, the products are shipped according to the standard delivery times that apply to the product.

    triangle-exclamation

    Once you have entered a forecast value in a field, don't forget press ENTER to save it! If you want to change the value, simply enter a new number and press ENTER again to overwrite the previous one.

    SIM Card Forecasts
    circle-check

    A reliable and up-to-date forecast helps us to deliver your order as quickly as possible.

    If you have new information, please adjust the forecast.

    1. Click Configure Forecast to adjust the previous forecast

    In this way you help us to prepare upcoming orders and ensure that our suppliers can respond to them on time.

    Configure forcast

    hashtag
    Make a list of favorite items

    Only the items for which your price is included in the contract can be ordered directly. You may want to include these in a favorite list for quick access.

    hashtag
    Search an item

    If you have checked the desired items and would like to order them, click on.

    1. The search icon

    2. Type a part of the product name

    3. Click on Look to open the item

    Search favorite

    hashtag
    Add an item to your favorite list

    If you found the desired item and would like to order them, click on.

    1. The heart shaped favorite icon

    Add favorite

    hashtag
    Order or remove a favorite

    If you want to view your selected items, open Favorite from the menu.

    Open list

    To order or remove an item from your favorite list, click on.

    1. The In cart button to order the item

    2. The heart shaped favorite icon to remove the item from your list

    Order or remove a favorite

    hashtag
    Show an overview of your orders

    You can find all orders in the menu under Orders.

    Open list

    Open the order to show the order details.

    1. The search field search for the order number you recieved by Email

    2. Click on the order number to open for the order details

    Search order

    hashtag
    Order details and attached files

    The order details give an overview of the order including the track and trace information and attached files.

    1. Click the link for Track & Trace information

    2. Download attached files like the packing slip

    3. Resend the order delivery Email including the Track & Trace link

    Order details
    contact
    Required
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    clientIdstring · uuidOptional

    Include only MQTT bindings for devices that are owned by the provided clientId. If clientId is omitted, bindings from all devices owned by the calling client are included.

    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    usernamestringOptional

    Include only MQTT bindings where the username equals the provided username.

    createdBeforestring · date-timeOptional

    Include only MQTT bindings created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only MQTT bindings created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only MQTT bindings modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only MQTT bindings modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    Page of filtered MQTT bindings. Only bindings that are accessible to the caller are returned.

    application/json

    A paginated list of MQTT bindings

    and
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /mqtt/bindings

    No content

    Bearer authentication header of the form Bearer <token>.
    Body

    A binding of a device to the MQTT connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the MQTT connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    usernamestringRead-onlyOptional

    The username the device uses when authenticating with the MQTT connector. This value is set to the device URN by the system when the binding is created.

    Example: urn:dev:IMEI:357292748642776:
    passwordstring · min: 24Write-onlyOptional

    The password the device uses when authenticating with the MQTT connector. Must be at least 24 characters, with at least one lower case letter, upper case letter, number and special character.

    Example: G6sdt9{4R8QmORTPt%zW.*:yr@}vRLzc
    Responses
    chevron-right
    201

    The newly created MQTT binding'.

    application/json
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    post
    /mqtt/bindings

    No content

    bindingIdstring · uuidRequired

    MQTT binding identifier.

    Responses
    chevron-right
    200

    The MQTT binding.

    application/json

    A binding of a device to the MQTT connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the MQTT connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    usernamestringRead-onlyOptional

    The username the device uses when authenticating with the MQTT connector. This value is set to the device URN by the system when the binding is created.

    Example: urn:dev:IMEI:357292748642776:
    passwordstring · min: 24Write-onlyOptional

    The password the device uses when authenticating with the MQTT connector. Must be at least 24 characters, with at least one lower case letter, upper case letter, number and special character.

    Example: G6sdt9{4R8QmORTPt%zW.*:yr@}vRLzc
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /mqtt/bindings/{bindingId}

    No content

    bindingIdstring · uuidRequired

    MQTT binding identifier.

    Body

    A binding of a device to the MQTT connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the MQTT connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    usernamestringRead-onlyOptional

    The username the device uses when authenticating with the MQTT connector. This value is set to the device URN by the system when the binding is created.

    Example: urn:dev:IMEI:357292748642776:
    passwordstring · min: 24Write-onlyOptional

    The password the device uses when authenticating with the MQTT connector. Must be at least 24 characters, with at least one lower case letter, upper case letter, number and special character.

    Example: G6sdt9{4R8QmORTPt%zW.*:yr@}vRLzc
    Responses
    chevron-right
    200

    The updated MQTT binding.

    application/json

    A binding of a device to the MQTT connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the MQTT connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    usernamestringRead-onlyOptional

    The username the device uses when authenticating with the MQTT connector. This value is set to the device URN by the system when the binding is created.

    Example: urn:dev:IMEI:357292748642776:
    passwordstring · min: 24Write-onlyOptional

    The password the device uses when authenticating with the MQTT connector. Must be at least 24 characters, with at least one lower case letter, upper case letter, number and special character.

    Example: G6sdt9{4R8QmORTPt%zW.*:yr@}vRLzc
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    put
    /mqtt/bindings/{bindingId}

    No content

    Path parameters
    bindingIdstring · uuidRequired

    MQTT Binding identifier.

    Responses
    chevron-right
    204

    MQTT binding has been deleted successfully.

    delete
    /mqtt/bindings/{bindingId}
    204

    MQTT binding has been deleted successfully.

    No content

    firmwareVersion

    string

    not present in detail level 1 messages

    gpsTime

    number

    s

    Unix EPOCH time in seconds

    gsmNetworkId

    number

    eventDescription

    number

    • Start moving

    • Stop moving

    • While moving

    • While not moving

    Description of the device event. Not present in detail level 1 messages.

    eventId

    number

    • 40 (Stop moving)

    • 41 (Start moving)

    • 44 (While moving)

    • 45 (While not moving)

    Id of the device event. Not present in detail level 1 messages

    gpsStatus

    number

    • 0 (OK)

    • 1 (Speed/heading invalid)

    • 32 (Accuracy not met)

    • 33 (Accuracy not met + Speed/heading invalid)

    Identifier indicating the GPS Status

    gpsNotes

    number

    • OK

    • Accuracy not met

    • Speed/heading invalid

    • Accuracy not met + Speed/heading invalid

    Description of the GPS Status

    heading

    number

    rad

    Direction in radials. Not present in detail level 1 messages

    latitude

    number

    lat

    Latitude of the device. Not present in detail level 1 messages

    longitude

    number

    lon

    Longitude of the device. Not present in detail level 1 messages

    radius

    number

    m

    Radius indicating the precision of the positition. Not present in detail level 1 messages

    switch

    number

    • 0 (Position)

    • 53 (SV_CountersUser)

    • 64 (SV_Network)

    • 77 (TimeAlive)

    Identifier indicating the record-type. In case Switch=77, there has been no GPS Fix and the Geo coordinates belong to the previous GPS Fix.

    switchName

    number

    • SV_Position

    • SV_CountersUser

    • SV_Network

    • SV_TimeAlive

    Name of this record-type.

    temperature

    number

    Cel

    The measured temperature

    velocity

    number

    m/s

    Velocity of the device. Not present in detail level 1 messages

    Generic LoRa device (programmable)

    Generic LoRa device (programmable)

    Connect a LoRa device for which you currently do not have LoRa connectivity credentials (DevEUI, AppEUI, and AppKey). These credentials will be provided during registration of the device in KPN Things.

    • Supported network type(s): KPNLORA

    • Device Specification ID: own-lora

    • Device Specification UUID: 1e7f596c-6eb4-44d2-bec6-0d93181d4330

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    = Raw LoRa payload

    Forward the raw LoRa payload and port number without decoding.

    Expected SenML records

    name
    type
    unit

    hashtag
    = Raw LoRa payload (v2)

    Forward the raw LoRa payload and port number without decoding.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    = Raw LoRa payload Extended

    Forward the raw LoRa payload and lora network metadata without decoding.

    Expected SenML records

    name
    type
    unit

    hashtag
    Raw LoRa payload Extended (v2)

    Forward the raw LoRa payload and lora network metadata without decoding.

    Fixes from '= Raw LoRa payload Extended':

    • LrrRSSI is changed to a number.

    • LrrSNR is changed to a number.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    › Decoded ThingsML for LoRa payload

    Decoder for , a generic LoRa payload protocol by KPN.

    hashtag
    › Decoded ThingsML for LoRa payload (v2)

    Decoder for , a generic LoRa payload protocol by KPN.

    circle-info

    This decoder also decodes data.

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    The resulting SenML completely depends on the ThingsML input and can produce almost any type of SenML output. The decoded ThingsML provided below is just an illustration of what is possible.

    hashtag
    = Raw LoRa payload encoding

    • Protocol: LoRa downlink

    • Description: Send raw LoRa payload to your device.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: payloadHex (raw input)

    hashtag
    Retrieve HTTP downlinks filtered and sorted by specified search and sort criteria

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdBeforestring · date-timeOptional

    Include only HTTP downlinks created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only HTTP downlinks created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only HTTP downlinks modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only HTTP downlinks modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    statusstring · enumOptional

    Include only HTTP downlinks whose status matches the provided status. The status must match exactly.

    Possible values:
    Responses
    chevron-right
    200

    Page of filtered HTTP downlinks. Only downlinks that are accessible to the caller are returned.

    application/json

    A paginated list of HTTP downlinks.

    and
    get
    /http/downlinks

    hashtag
    Create a new HTTP downlink

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    A downlink that is sent to an HTTP device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    messageone ofRequired

    The message of the HTTP downlink.

    or
    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    deviceIdone ofRequired

    The device identifier which this downlink is targeting.

    Example: 1dca2857-da8c-4e47-991f-f7d13a563e45
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-01-02T12:04:32.982Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-01-02T12:04:32.982Z
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the HTTP downlink. Known values include: CANCELLED, TIMEOUT and EVICTED

    Responses
    chevron-right
    201

    HTTP downlink has been successfully created.

    application/json
    post
    /http/downlinks

    hashtag
    Retrieve a specific HTTP downlink by its ID

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    The ID of the HTTP downlink to retrieve.

    Responses
    chevron-right
    200

    The requested HTTP downlink.

    application/json

    A downlink that is sent to an HTTP device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    messageone ofRequired

    The message of the HTTP downlink.

    or
    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    deviceIdone ofRequired

    The device identifier which this downlink is targeting.

    Example: 1dca2857-da8c-4e47-991f-f7d13a563e45
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-01-02T12:04:32.982Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-01-02T12:04:32.982Z
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the HTTP downlink. Known values include: CANCELLED, TIMEOUT and EVICTED

    get
    /http/downlinks/{downlinkId}
    200

    The requested HTTP downlink.

    hashtag
    Accepts and schedules full or partial cancellation of a HTTP downlink for further downstream handling.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    HTTP downlink identifier.

    Query parameters
    forcedbooleanOptional

    Whether to force the cancellation of the HTTP downlink or not.

    Default: false
    Responses
    chevron-right
    202

    HTTP downlink cancellation has been accepted and scheduled for further downstream processing.

    chevron-right
    409

    HTTP downlink does not permit cancellation.

    application/problem+json
    delete
    /http/downlinks/{downlinkId}

    hashtag
    Retrieve MQTT downlinks filtered and sorted by specified search and sort criteria

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdBeforestring · date-timeOptional

    Include only MQTT downlinks created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only MQTT downlinks created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only MQTT downlinks modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only MQTT downlinks modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    Responses
    chevron-right
    200

    Page of filtered MQTT downlinks. Only downlinks that are accessible to the caller are returned.

    application/json

    A paginated list of MQTT downlinks.

    and
    get
    /mqtt/downlinks

    hashtag
    Create a new MQTT downlink

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    A downlink that is sent to an MQTT device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    deviceIdone ofRequired

    The device identifier which this downlink is targeting.

    Example: 7f97ccf0-2ae1-4e1f-bd3e-d901f31d801b
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-01-01T11:22:33.456Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-01-01T11:22:33.456Z
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Whether or not this is a 'test' downlink that should not be delivered. If true the system will prevent actual delivery of the downlink to the MQTT account and pretend instead that successful delivery has occurred. This mode may be used to test your configuration within KPN Things without requiring a fully functional MQTT device.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the MQTT downlink. Known values include: CANCELLED, FEEDBACK_TIMEOUT, FAILED_TO_TRANSMIT_TO_DEVICE

    Responses
    chevron-right
    201

    MQTT downlink has been successfully created.

    application/json
    post
    /mqtt/downlinks

    hashtag
    Retrieve a MQTT downlink by ID

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    MQTT downlink identifier.

    Responses
    chevron-right
    200

    The created MQTT downlink.

    application/json

    A downlink that is sent to an MQTT device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    deviceIdone ofRequired

    The device identifier which this downlink is targeting.

    Example: 7f97ccf0-2ae1-4e1f-bd3e-d901f31d801b
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-01-01T11:22:33.456Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-01-01T11:22:33.456Z
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Whether or not this is a 'test' downlink that should not be delivered. If true the system will prevent actual delivery of the downlink to the MQTT account and pretend instead that successful delivery has occurred. This mode may be used to test your configuration within KPN Things without requiring a fully functional MQTT device.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the MQTT downlink. Known values include: CANCELLED, FEEDBACK_TIMEOUT, FAILED_TO_TRANSMIT_TO_DEVICE

    get
    /mqtt/downlinks/{downlinkId}
    200

    The created MQTT downlink.

    hashtag
    Cancel a MQTT downlink for further downstream handling.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    MQTT downlink identifier.

    Query parameters
    forcedbooleanOptional

    Whether to force the cancellation of the MQTT downlink or not.

    Default: false
    Responses
    chevron-right
    202

    MQTT downlink cancellation has been accepted and scheduled for further downstream processing.

    chevron-right
    409

    MQTT downlink status does not permit cancellation.

    application/problem+json
    delete
    /mqtt/downlinks/{downlinkId}

    hashtag
    Retrieve SMS downlinks filtered and sorted by specified search and sort criteria

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    deviceIdstring · uuidOptional

    Include only downlinks for the device with the provided deviceId. The deviceId must match exactly.

    createdBeforestring · date-timeOptional

    Include only SMS downlinks created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only SMS downlinks at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only SMS downlinks modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only SMS downlinks modified at of after the provided date and time. The date-time must be in ISO 8601 format.

    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    Responses
    chevron-right
    200

    Page of filtered SMS downlinks. Only downlinks that are accessible to the caller are returned.

    application/json

    A paginated list of SMS downlinks.

    and
    get
    /sms/downlinks

    hashtag
    Create a new SMS downlink

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    A downlink that is sent to a mobile device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    iccIdstringRead-onlyOptional

    The ICCID of the SIM card in the mobile device.

    Example: 8901234567890123456
    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    deviceIdstringRequired

    The device identifier which this downlink is targeting.

    Example: 4fa05eed-4db6-4fe5-8cb1-744893286db1
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-01-02T12:04:32.982Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-01-02T12:04:32.982Z
    retryLimitintegerOptional

    The maximum number of retries that should be performed for the downlink.

    Default: 0Example: 3
    retryCountintegerRead-onlyOptional

    The number of retries that have been performed for the downlink.

    Example: 0
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the SMS downlink. Known values include: CANCELLED, FAILURE_TO_TRANSMIT_TO_DEVICE, FAILURE_TO_ENQUEUE_FOR_TRANSMISSION, FEEDBACK_TIMEOUT and EVICTED

    Responses
    chevron-right
    201

    SMS downlink has been successfully created.

    application/json
    post
    /sms/downlinks

    hashtag
    Retrieve an SMS downlink by ID

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    SMS downlink identifier.

    Responses
    chevron-right
    200

    The SMS downlink.

    application/json

    A downlink that is sent to a mobile device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    iccIdstringRead-onlyOptional

    The ICCID of the SIM card in the mobile device.

    Example: 8901234567890123456
    statusstringRead-onlyOptional

    The status of the downlink. Known values include: PENDING, EXECUTING and DONE

    deviceIdstringRequired

    The device identifier which this downlink is targeting.

    Example: 4fa05eed-4db6-4fe5-8cb1-744893286db1
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-01-02T12:04:32.982Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-01-02T12:04:32.982Z
    retryLimitintegerOptional

    The maximum number of retries that should be performed for the downlink.

    Default: 0Example: 3
    retryCountintegerRead-onlyOptional

    The number of retries that have been performed for the downlink.

    Example: 0
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the SMS downlink. Known values include: CANCELLED, FAILURE_TO_TRANSMIT_TO_DEVICE, FAILURE_TO_ENQUEUE_FOR_TRANSMISSION, FEEDBACK_TIMEOUT and EVICTED

    get
    /sms/downlinks/{downlinkId}
    200

    The SMS downlink.

    hashtag
    Accepts and schedules full or partial cancellation of a SMS downlink for further downstream handling.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    SMS downlink identifier.

    Query parameters
    forcedbooleanOptional

    Whether to force the cancellation of the SMS downlink or not.

    Default: false
    Responses
    chevron-right
    202

    SMS downlink cancellation has been accepted and scheduled for further downstream processing.

    chevron-right
    409

    SMS downlink status does not permit cancellation.

    application/problem+json
    delete
    /sms/downlinks/{downlinkId}

    hashtag
    Retrieve downlinks filtered and sorted by specified search and sort criteria

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    qstring · min: 1Optional

    Include only downlinks whose tagValue, networkId or message match the search term. The tagValue must match exactly. The networkId and message may match partially. Matching for every query parameter is done case-sensitively.

    createdBeforestring · date-timeOptional

    Include only downlinks created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only downlinks created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only downlinks modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only downlinks modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    Page of filtered downlinks. Only downlinks that are accessible to the caller are returned.

    application/json

    A paginated list of downlinks

    and
    get
    /downlinks

    hashtag
    Create a new downlink

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    A request to create a downlink to be sent to an IoT device.

    externalReferencestringOptional

    Optional external identifier that can be provided by API caller to reference the downlink with. Must be unique for the client that owns the device.

    Example: someExternalReference123
    methodone ofRequired
    or
    or
    or
    retryLimitintegerOptional

    The maximum number of retries that should be performed for the downlink.

    Default: 0Example: 3
    feedbackTimeoutall ofOptional
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    Responses
    chevron-right
    201

    Downlink has been successfully created.

    application/json
    post
    /downlinks
    201

    hashtag
    Retrieve a downlink by ID.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstringRequired

    Downlink identifier

    Responses
    chevron-right
    200

    Downlink has been successfully fetched.

    application/json

    A message that is sent to an IoT device.

    idstringRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    networkIdstringRequired

    An identifier for a device that is on an activated network.

    Example: urn:dev:DEVEUI:1234567890abcded:
    externalReferencestringOptional

    Optional external identifier that can be provided by API caller to reference the downlink with. Must be unique for the client that owns the device.

    Example: someExternalReference123
    statusstringRequired

    Status of the downlink message. Known values include: PENDING, EXECUTING, SENT_TO_CARRIER, CANCELLED, RETRY, DELIVERED and FAILED

    messagestringOptional

    SenML message to send to the device

    Example: [{"bn":"urn:dev:ow:10e2073a01080063:"},{"n":"temperature","u":"Cel","v":23.1},{"n":"heating","u":"/","v":1},{"n":"fan","u":"/","v":0}]
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink is created in the system.

    Example: 2025-01-10T10:59:12.821Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink is last modified in the system.

    Example: 2025-01-11T09:27:26.272Z
    get
    /downlinks/{downlinkId}
    200

    Downlink has been successfully fetched.

    hashtag
    Accepts and schedules full or partial cancellation of downlink for further downstream handling.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstringRequired

    Downlink identifier

    Query parameters
    forcedbooleanOptional

    Whether to force the cancellation of the downlink or not.

    Default: false
    Responses
    chevron-right
    202

    Downlink cancellation has been accepted and scheduled for further downstream processing.

    chevron-right
    409

    Downlink status does not permit cancellation.

    application/problem+json
    delete
    /downlinks/{downlinkId}

    KPN Conditionsensor CO2 III

    Also known as Streamline CO2 sensor. A Smart Building Sensor for indoor environment monitoring.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-conditionsensor-co2-iii

    Generic LoRa device (preset connectivity)

    Connect a LoRa device which has built in LoRa connectivity that came with the device. You will need to enter the DevEUI, AppEUI, and AppKey of this device during registration in KPN Things.

    • Supported network type(s): KPNLORA

    • Device Specification ID: own-lora-with-keys

    Postmanwww.getpostman.comchevron-right
    http://downloads.sodaq.net/package_sodaq_samd_index.json
    Verify XXX bytes of flash with checksum.
    Verify successful
    done in XXX seconds
    CPU reset.
    
    /*
     * Configuration
     */
    #define DEVICE_URN      "urn:dev:IMEI:--fill-me--:"
    #define DEVICE_KEY      "--fill-me--"
    
    /* ... */
    #define APN             "--fill-me--"
    Console open
    Turning on modem...
    Connecting to network...
    
    Network connected
    Sending message...
    Receiving message...
    Message response length: 97
    Message response:
    HTTP/1.1 202 
    Date: Tue, 03 Nov 2020 13:42:47 GMT
    Content-Length: 0
    Connection: keep-alive
    
    
    Message sending finished.
    Modem off
    
    ------------
    
    POST /mqtt/bindings HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /mqtt/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    PUT /mqtt/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /mqtt/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /http/bindings HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    

    = Raw LoRa payload Extended (v2)

    71910f65-a9d6-587e-9148-c01ec440fdd2

    Forward the raw LoRa payload and lora network metadata without decoding.

    › Decoded ThingsML for LoRa payload

    bdf13a5d-95f2-4595-baf0-cd807ff796b1

    Decoder for , a generic LoRa payload protocol by KPN.

    › Decoded ThingsML for LoRa payload (v2)

    174b8034-70c9-545a-9dfc-2e8353c5301d

    Decoder for , a generic LoRa payload protocol by KPN.

    FCntUp

    number

    LrrESP

    string

    LrrRSSI

    string

    LrrSNR

    string

    SpFact

    number

    SubBand

    string

    payload

    string

    port

    number

    LrrESP is changed to a number.

    number

    0

    Amount of gateways that received the message

    FCntDn

    number

    21725

    The downlink framecounter

    FCntUp

    number

    30117

    The uplink framecounter

    LrrRSSI

    number

    0

    Received Signal Strength Indicator

    LrrSNR

    number

    0

    Signal to Noise Ratio

    payload

    string

    "4D985C495AC4D8C9682CFD"

    raw hex payload string

    port

    number

    1

    LoRa port used

    SpFact

    number

    9

    Spreading factor used

    SubBand

    string

    "G0"

    Lora band of the transmission

    + LoRa Geolocation data

    aa2a1fa0-2613-4309-9ed6-72de96047d7d

    Add LoRa Geolocation data to messages where location could be calculated.

    = Raw LoRa payload

    6da609d1-0ec4-4f07-89e6-2acad60b7cdf

    Forward the raw LoRa payload and port number without decoding.

    = Raw LoRa payload (v2)

    1c0f77b0-2947-5e08-a5a8-d311cb094c3c

    Forward the raw LoRa payload and port number without decoding.

    = Raw LoRa payload Extended

    f087f4f5-f603-47d3-be94-790e99b150cf

    = Raw LoRa payload

    30fdeedd-69e6-4ab5-8a90-2d58af7b3b2f

    Send raw LoRa payload to your device.

    payload

    string

    port

    number

    payload

    string

    "4D985C495AC4D8C9682CFD"

    The LoRa hex payload

    port

    number

    200

    The LoRa port used to send this uplink

    ADRbit

    number

    Channel

    string

    DevLrrCnt

    number

    FCntDn

    number

    ADRbit

    number

    0

    Adaptive Data Rate indicator

    Channel

    string

    LC255

    Lora channel of the transmission

    LoRa Geolocation
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    ThingsML for LoRa
    ThingsML for LoRa
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    Forward the raw LoRa payload and lora network metadata without decoding.

    DevLrrCnt

    200

    Page of filtered HTTP downlinks. Only downlinks that are accessible to the caller are returned.

    No content

    201

    HTTP downlink has been successfully created.

    No content

    No content

    No content

    200

    Page of filtered MQTT downlinks. Only downlinks that are accessible to the caller are returned.

    No content

    201

    MQTT downlink has been successfully created.

    No content

    No content

    No content

    200

    Page of filtered SMS downlinks. Only downlinks that are accessible to the caller are returned.

    No content

    201

    SMS downlink has been successfully created.

    No content

    No content

    No content

    200

    Page of filtered downlinks. Only downlinks that are accessible to the caller are returned.

    No content

    Downlink has been successfully created.

    No content

    No content

    No content

    Device Specification UUID: 7a7c579f-8ce7-4667-bbd6-280902a55948

    Decoders
    decoderSpecificationUUID
    Description

    › Decoded payload for environment monitoring

    aa611ae0-cb5d-44bc-bac7-ca6c48885ae1

    Decoder for Streamline LoRa message type 0xB0 with CO2 data.

    › Decoded payload for environment monitoring (v2)

    b7f9d5b8-3d4c-5b07-888f-15f67e972277

    Decoder for Streamline LoRa message type 0xB0 and 0xB1 with CO2 data.

    hashtag
    › Decoded payload for environment monitoring

    • UUID: aa611ae0-cb5d-44bc-bac7-ca6c48885ae1

    • Description: Decoder for Streamline LoRa message type 0xB0 with CO2 data.

    • Exchange: decoder.lora.streamline.exchange

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    batteryVoltage

    V

    3.5

    The battery voltage of the device

    VOC

    ppm

    The concentration of Volatile Organic Compounds in parts per million

    CO2Concentration

    hashtag
    Example SenML-message

    hashtag
    › Decoded payload for environment monitoring (v2)

    Decoder for Streamline LoRa message type 0xB0 and 0xB1 with CO2 data.

    circle-info

    This decoder also decodes Geolocation and Local Gateway data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    batteryVoltage

    number

    V

    3.46

    The battery voltage of the device

    CO2Concentration

    number

    ppm

    689

    CO2 Concentration in parts per million

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    0xB0 payload

    0x1B payload

    KPN Conditionsensor CO2 III
  • Device Specification UUID: c11ef507-293f-4f04-ad82-e2f1c777c339

  • Decoders
    decoderSpecificationUUID
    Description

    + LoRa Geolocation data

    af9e394d-6c1d-4d46-9a29-73ac77be64b7

    Add data to messages where location could be calculated.

    = Raw LoRa payload

    c17e2392-bb83-4e79-b854-ed72196857ee

    Forward the raw LoRa payload and port number without decoding.

    = Raw LoRa payload (v2)

    bc523b60-1b3f-5f33-b041-3afbe29d13e0

    Forward the raw LoRa payload and port number without decoding.

    = Raw LoRa payload Extended

    b7557a3d-4222-43e5-8b19-98706b1302f7

    Encoders
    encoderSpecificationUUID
    Description

    = Raw LoRa payload

    1abb958a-d85a-4d6a-a44f-521f7e52adcd

    Send raw LoRa payload to your device.

    hashtag
    + LoRa Geolocation data

    Add LoRa Geolocation data to messages where location could be calculated.

    hashtag
    = Raw LoRa payload

    Forward the raw LoRa payload and port number without decoding.

    Expected SenML records

    name
    type
    unit

    payload

    string

    port

    number

    hashtag
    = Raw LoRa payload (v2)

    Forward the raw LoRa payload and port number without decoding.

    circle-info

    This decoder also decodes Geolocation and Local Gateway data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    payload

    string

    "4D985C495AC4D8C9682CFD"

    The LoRa hex payload

    port

    number

    200

    The LoRa port used to send this uplink

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    hashtag
    = Raw LoRa payload Extended

    Forward the raw LoRa payload and lora network metadata without decoding.

    Expected SenML records

    name
    type
    unit

    ADRbit

    number

    Channel

    string

    DevLrrCnt

    number

    FCntDn

    number

    hashtag
    Raw LoRa payload Extended (v2)

    Forward the raw LoRa payload and lora network metadata without decoding.

    Fixes from '= Raw LoRa payload Extended':

    • LrrRSSI is changed to a number.

    • LrrSNR is changed to a number.

    • LrrESP is changed to a number.

    circle-info

    This decoder also decodes Geolocation and Local Gateway data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    ADRbit

    number

    0

    Adaptive Data Rate indicator

    Channel

    string

    LC255

    Lora channel of the transmission

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    hashtag
    › Decoded ThingsML for LoRa payload

    Decoder for ThingsML for LoRa, a generic LoRa payload protocol by KPN.

    hashtag
    › Decoded ThingsML for LoRa payload (v2)

    Decoder for ThingsML for LoRa, a generic LoRa payload protocol by KPN.

    circle-info

    This decoder also decodes Geolocation and Local Gateway data.

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    The resulting SenML completely depends on the ThingsML input and can produce almost any type of SenML output. The decoded ThingsML provided below is just an illustration of what is possible.

    hashtag
    = Raw LoRa payload encoding

    • Protocol: LoRa downlink

    • Description: Send raw LoRa payload to your device.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: payloadHex (raw input)

    Generic LoRa device (preset connectivity)

    KPN Conditionsensor CO2 III motionPage 1

    KPN Conditionsensor CO2 III motion

    Also known as Streamline CO2 sensor with rechargeable battery. A Smart Building Sensor for indoor environment monitoring.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-conditionsensor-co2-iii-motion

    • Device Specification UUID: 9629ddf1-b1c0-410b-b6a1-5003afd6e26c

    Decoders
    decoderSpecificationUUID
    Description

    hashtag
    › Decoded payload for environment monitoring

    • UUID: 2bb53ece-d857-458c-9218-614f98cd34bf

    • Description: Decoder for Streamline LoRa message type 0xB0 with CO2 data.

    • Exchange: decoder.lora.streamline.exchange

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML-message

    hashtag
    › Decoded payload for environment monitoring (v2)

    Decoder for Streamline LoRa message type 0xB0 and 0xB1 with CO2 data.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    0xB0 payload

    0x1B payload

    KPN LocationTag II

    KPN LocationTag II

    Also known as Security Tag.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-locationtag-ii

    • Device Specification UUID: 2f16485d-1301-4d11-9fb8-1b74b5a8909f

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML-message

    This location info can be merged with the payload of the device

    hashtag
    + Location by LoRa On Premises Gateway reception

    Add location data to messages that are received by known .

    hashtag
    Expected SenML outputs

    See above. Output is comparable to LoRa Geolocation data.

    hashtag
    › Decoded payload for Device Management

    Decoder for Streamline LoRa short payloads, containing firmware version, mode, and battery status.

    hashtag
    Expected SenML output attributes

    name
    type/unit
    example
    description

    hashtag
    Example SenML messages

    The first 10 messages after boot of a device contain firmware information attributes:

    hashtag
    › Decoded payload for Device Management (v2)

    Decoder for Streamline LoRa short payloads, containing firmware version, mode, and battery status.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    › Decoded payload for Medical Tracker application

    Decoder for Streamline LoRa message type 0xD282 containing only temperature and movement bit.

    Expected SenML records

    name
    type
    unit

    hashtag
    › Decoded payload for Medical Tracker application (v2)

    Decoder for Streamline LoRa message type 0xD282 containing only temperature and movement bit.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    ‹ Encoded device modes for Asset Recovery application

    • Protocol: LoRa downlink

    • Description: Send device modes for Asset Recovery: Presales (24h interval), Active (2h interval), Missing (5min interval + BLE), or Inactive.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: mode

      • Value: Presales (translates into → 150098078051010080510115013F01001501FB018016)

    Getting Started with the API

    The Getting Started guide provides everything you need to begin using the KPN Things API.

    hashtag
    Base URL

    All API requests are made to the following base URL:

    The API currently has a single version. All changes are backward-compatible.

    Requests use standard HTTP methods (GET, POST, PUT, DELETE), and both requests and responses are in JSON format.

    hashtag
    Authentication

    Access to the KPN Things API is secured through GRIP, KPN’s identity and access management platform. API keys and tokens are managed in GRIP, independently of individual user accounts.

    Every request to the KPN Things API must be authenticated with a bearer token (an access token) obtained from GRIP using an API key.

    hashtag
    API Keys in GRIP

    • An API Key is a standalone entity within a GRIP tenant (your customer environment).

    • API Keys are not user-bound; they are service credentials that can be used by applications or systems.

    • Best practice: create separate API keys for each system or integration that needs access.

    hashtag
    Access Tokens

    To call the KPN Things API, you must exchange your API Key for a short-lived access token:

    • Tokens are valid for 1 hour.

    • Include the token in every API request via the Authorization header:

    • There are no refresh tokens. When a token expires, simply request a new one from GRIP.

    More background on the authentication model used is available in the under Machine Authentication:

    hashtag
    Required Values

    When requesting an access token from GRIP, you will need the following:

    Value
    Description

    hashtag
    Step 1: Find your GRIP Tenant ID

    1. Log in to .

    2. Hover over your name in the top right corner.

    3. In the overflow menu your GRIP Tenant ID is displayed right above your name.

    hashtag
    Step 2: Create an API Key in GRIP

    To create an API key, you need administrator access to the GRIP portal.

    • If you have a KPN Developer account, you are automatically an administrator.

    • If you have a MijnKPN Zakelijk account, you may need to request access from your local administrator.

    hashtag
    2.1 Open API Key Management

    • Log in to the GRIP Portal.

    • Open the Admin panel from the role dropdown.

    • In the left-hand menu, go to Identity → API Keys.

    hashtag
    2.2. Create new API Key

    • Enter a Display name and Description for your API Key.

    • Click Add to create it.

    hashtag
    2.3. Grant access to KPN Things

    • On the API Key details page, open the Services and Roles tab.

    • Click Add a service.

    • Select KPN Things Portal from the list and click Add.

    • Assign the desired role and access level to the API Key.

    • Click Save to apply.

    hashtag
    2.4 Retrieve the Credentials

    • Go back to the General Information tab of your new API Key.

    • Copy the ID (Client ID) and Secret (Client Secret).

    • Store them securely — you will use them to request access tokens.

    hashtag
    Step 3: Request an Access Token

    With your Tenant ID, Application ID, Client ID, and Client Secret, you can now request an access token from GRIP.

    Example Response:

    Use this token in the Authorization header for all subsequent API requests.

    hashtag
    API access to customer environments as a reseller

    As a reseller of KPN Things, you can use the KPN Things APIs to manage your customers’ environments on their behalf. To do this, you must specify the customer context for each API call by including the following header:

    Here, {{customerID}} is the UUID that identifies the customer whose environment you want to manage.

    When this header is provided, KPN Things validates its syntax and confirms that your account is authorized as a reseller for the specified customer.

    If either validation fails, the API request will be rejected. Please note that only one KPN-Things-Security-Context header can be included per request; multiple values are not supported.

    circle-exclamation

    💎 Add-on feature To get started as a reseller and set up environments within KPN Things for your own customers, you will need the add-on feature.

    hashtag
    Pagination

    The API uses cursor-based pagination. This approach ensures consistent performance when navigating large datasets.

    When requesting a list of resources, the response may contain next and prev links. These links contain an opaque cursor that identifies the next or previous page.

    • Use the next link to load the following page.

    • Use the prev link to load the previous page.

    • The API does not provide the total number of results or pages.

    You can control the maximum number of results per page using the limit query parameter:

    hashtag
    Filtering

    You can filter results by adding query parameters. The most common filters are:

    Parameter
    Description

    Example:

    hashtag
    Sorting

    Use the sort parameter to order results. Multiple attributes can be combined in a comma-separated list. Prefix an attribute with - to sort in descending order.

    Examples:

    • sort=createdAt,id → sort by createdAt ascending, then id ascending

    • sort=-createdAt,id → sort by createdAt descending, then id ascending

    Example Request:

    hashtag
    Error Handling

    The KPN Things API uses the format (application/problem+json) to return error information. This provides a consistent structure for all error responses.

    hashtag
    Response Format

    An error response includes standard fields defined by RFC 7807, as well as optional details when available.

    Example Error Response:

    hashtag
    Standard Fields

    Field
    Description

    hashtag
    Common Error Codes

    • 400 Bad Request — The request is invalid (e.g., malformed parameters, invalid values).

    • 401 Unauthorized — The request is missing a valid access token.

    • 403 Forbidden — The token is valid, but you do not have permission to perform this action.

    hashtag
    Handling Errors in Clients

    When consuming the API, clients should:

    1. Check the HTTP status code to determine the general error category.

    2. Inspect the title field for programmatic handling of known error types.

    3. Display or log the detail field to help users or developers troubleshoot.

    Passthrough - SODAQ Support pagessupport.sodaq.comchevron-right
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "payload",
            "vs": "4D985C495AC4D8C9682CFD"
        },
        {
            "n": "port",
            "v": 1
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "payload",
            "vs": "8ca683bd93124178afc5ff"
        },
        {
            "n": "port",
            "v": 1
        },
        {
            "n": "FCntUp",
            "v": 30117
        },
        {
            "n": "FCntDn",
            "v": 21725
        },
        {
            "n": "LrrRSSI",
            "v": 0
        },
        {
            "n": "LrrSNR",
            "v": 0
        },
        {
            "n": "DevLrrCnt",
            "v": 0
        },
        {
            "n": "SpFact",
            "v": 9
        },
        {
            "n": "SubBand",
            "vs": "G0"
        },
        {
            "n": "Channel",
            "vs": "LC255"
        },
        {
            "n": "ADRbit",
            "v": 0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:6E5E267F2E6FB3BF:",
            "bt": 1693136532.83,
            "n": "latitude",
            "u": "lat",
            "v": 51.90717
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.48940
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29.75
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "extTemp",
            "u": "Cel",
            "v": 17.22
        },
        {
            "n": "io",
            "vb": false
        }
    ]
    POST /http/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /http/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    DELETE /http/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /mqtt/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /mqtt/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    DELETE /mqtt/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /sms/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /sms/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    DELETE /sms/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    DELETE /downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /http/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /mqtt/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /sms/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    [
      { bn: 'urn:dev:DEVEUI:7CC6C40512345678:', bt: 1.701114926e9 },
      { n: 'temperature', u: 'Cel', v: 18.8 },
      { n: 'humidity', u: '%RH', v: 42.0 },
      { n: 'CO2Concentration', u: 'ppm', v: 567.0 },
      { n: 'pressure', u: 'Pa', v: 99200.0 },
      { n: 'VOC', u: 'ppm', v: 0.0 },
      { n: 'batteryVoltage', u: 'V', v: 3.8 },
      { n: 'movementSensorActiveDuration', u: 's', v: 1200.0 },
      { n: 'motion', u: 'count', v: 0.0 },
      { n: 'movementDetected', vb: false },
      { n: 'movementDetected', t: -60.0, vb: false },
      { n: 'movementDetected', t: -120.0, vb: false },
      { n: 'movementDetected', t: -180.0, vb: false },
      { n: 'movementDetected', t: -240.0, vb: false },
      { n: 'movementDetected', t: -300.0, vb: false },
      { n: 'movementDetected', t: -360.0, vb: false },
      { n: 'movementDetected', t: -420.0, vb: false },
      { n: 'movementDetected', t: -480.0, vb: false },
      { n: 'movementDetected', t: -540.0, vb: false },
      { n: 'movementDetected', t: -600.0, vb: false },
      { n: 'movementDetected', t: -660.0, vb: false },
      { n: 'movementDetected', t: -720.0, vb: false },
      { n: 'movementDetected', t: -780.0, vb: false },
      { n: 'movementDetected', t: -840.0, vb: false },
      { n: 'movementDetected', t: -900.0, vb: false },
      { n: 'movementDetected', t: -960.0, vb: false },
      { n: 'movementDetected', t: -1020.0, vb: false },
      { n: 'movementDetected', t: -1080.0, vb: false },
      { n: 'movementDetected', t: -1140.0, vb: false },
      { n: 'movementDetected', t: -1200.0, vb: false },
      { n: 'movementDetected', t: -1260.0, vb: false },
      { n: 'movementDetected', t: -1320.0, vb: false },
      { n: 'movementDetected', t: -1380.0, vb: false },
      { n: 'movementDetected', t: -1440.0, vb: false },
      { n: 'movementDetected', t: -1500.0, vb: false },
      { n: 'movementDetected', t: -1560.0, vb: false },
      { n: 'movementDetected', t: -1620.0, vb: false },
      { n: 'movementDetected', t: -1680.0, vb: false },
      { n: 'movementDetected', t: -1740.0, vb: false },
      { n: 'movementDetected', t: -1800.0, vb: false },
      { n: 'movementDetected', t: -1860.0, vb: false },
      { n: 'TIME_ORIGIN', vs: 'THINGSENGINE' },
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "temperature",
            "u": "Cel",
            "v": 25.9
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 50
        },
        {
            "n": "CO2Concentration",
            "u": "ppm",
            "v": 504
        },
        {
            "n": "pressure",
            "u": "Pa",
            "v": 101100
        },
        {
            "n": "VOC",
            "u": "ppm",
            "v": 8
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 4.08
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "temperature",
            "u": "Cel",
            "v": 27.3
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 68
        },
        {
            "n": "CO2Concentration",
            "u": "ppm",
            "v": 563
        },
        {
            "n": "pressure",
            "u": "Pa",
            "v": 101500
        },
        {
            "n": "VOC",
            "u": "ppm",
            "v": 1
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 7.53
        },
        {
            "n": "movementSensorActiveDuration",
            "u": "s",
            "v": 5940
        },
        {
            "n": "motion",
            "u": "count",
            "v": 29
        },
        {
            "n": "movementDetected",
            "t": 0,
            "vb": false
        },
        {
            "n": "movementDetected",
            "t": -60,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -120,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -180,
            "vb": false
        },
        {
            "n": "movementDetected",
            "t": -240,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -300,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -360,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -420,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -480,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -540,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -600,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -660,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -720,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -780,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -840,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -900,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -960,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1020,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1080,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1140,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1200,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1260,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1320,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1380,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1440,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1500,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1560,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1620,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1680,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1740,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1800,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1860,
            "vb": false
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "payload",
            "vs": "4D985C495AC4D8C9682CFD"
        },
        {
            "n": "port",
            "v": 1
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "payload",
            "vs": "8ca683bd93124178afc5ff"
        },
        {
            "n": "port",
            "v": 1
        },
        {
            "n": "FCntUp",
            "v": 30117
        },
        {
            "n": "FCntDn",
            "v": 21725
        },
        {
            "n": "LrrRSSI",
            "v": 0
        },
        {
            "n": "LrrSNR",
            "v": 0
        },
        {
            "n": "DevLrrCnt",
            "v": 0
        },
        {
            "n": "SpFact",
            "v": 9
        },
        {
            "n": "SubBand",
            "vs": "G0"
        },
        {
            "n": "Channel",
            "vs": "LC255"
        },
        {
            "n": "ADRbit",
            "v": 0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:6E5E267F2E6FB3BF:",
            "bt": 1693136532.83,
            "n": "latitude",
            "u": "lat",
            "v": 51.90717
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.48940
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 29.75
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "extTemp",
            "u": "Cel",
            "v": 17.22
        },
        {
            "n": "io",
            "vb": false
        }
    ]
    GET /mqtt/bindings HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    https://api.kpnthings.com
    Logo
    Logo
    ThingsML for LoRa
    ThingsML for LoRa
    Click Add to create a new API Key.
    404 Not Found — The requested resource does not exist.
  • 409 Conflict — A conflicting operation is already in progress, or resource constraints prevent the request.

  • 429 Too Many Requests — You have hit a rate limit.

  • 500 Internal Server Error — An unexpected error occurred.

  • GRIP Tenant ID

    The unique identifier of your GRIP environment.

    Application ID

    The ID of the service you want to access.

    For KPN Things, always use: 4dc82561-f65f-523g-dek9-6c79ec314f02

    Client ID

    The ID of your API Key.

    Client Secret

    The secret associated with your API Key.

    Error

    Solution

    Feature user does not exist anymore.

    Check your API Key ID or Secret, they may be incorrect.

    Feature service does not exist anymore.

    Add the KPN Things Portal service to your API Key through the GRIP Portal.

    SAML request error: "idpId" not found.

    Your tenantId (which is a path variable) is incorrect.

    createdBefore

    Items created before this timestamp

    createdSince

    Items created at or after this timestamp

    modifiedBefore

    Items modified before this timestamp

    modifiedSince

    Items modified at or after this timestamp

    q

    Free-text search across common fields

    title

    A short, human-readable summary of the problem type.

    status

    The HTTP status code of the error response.

    detail

    A human-readable explanation specific to this occurrence of the error.

    instance

    The request URI where the error occurred.

    GRIP Knowledge Basearrow-up-right
    Machine Authentication Introductionarrow-up-right
    Machine Authentication OAutharrow-up-right
    MijnKPN Zakelijkarrow-up-right
    Customer Managementarrow-up-right
    Problem Details for HTTP APIsarrow-up-right
    Authorization: Bearer <accessToken>
    POST https://auth.grip-on-it.com/v2/{tenantId}/oidc/idp/c1/token
    Content-Type: application/json
    
    {
      "grant_type": "client_credentials",
      "audience": "4dc82561-f65f-523g-dek9-6c79ec314f02",
      "client_id": "<your-api-key-id>",
      "client_secret": "<your-api-key-secret>"
    }
    {
      "accessToken": "<your-access-token>",
      "token_type": "Bearer",
      "expiresIn": 3600
    }
    KPN-Things-Security-Context: client:uuid:{{customerID}
    {
      "items": [ ... ],
      "next": "https://api.kpnthings.com/devices?cursor=abc123",
      "prev": "https://api.kpnthings.com/devices?cursor=xyz789"
    }
    GET /downlinks?limit=50
    GET /downlinks?modifiedSince=2025-09-01T00:00:00Z
    GET /downlinks?modifiedSince=2025-09-01T00:00:00Z&limit=100&sort=-modifiedAt
    {
      "title": "Invalid request",
      "status": 400,
      "detail": "The field 'limit' must be greater than zero.",
      "instance": "/downlinks?limit=-1"
    }

    CO2 Concentration in parts per million

    pressure

    Pa

    The air pressure in Pascal

    humidity

    %HR

    The humidity percentage

    temperature

    Cel

    The measured temperature in Celcius

    motion

    count

    Number of times motion has been detected?

    movementSensorActiveDuration

    s

    Number of seconds the movement sensor has been active

    movementDetected

    boolean

    Boolean indicating whether movement was detected or not

    number

    %RH

    58.33

    The humidity percentage

    motion

    number

    count

    29

    Number of times motion has been detected?

    movementDetected

    boolean

    true

    Boolean indicating whether movement was detected or not

    movementSensorActiveDuration

    number

    s

    20

    Number of seconds the movement sensor has been active

    pressure

    number

    Pa

    101100

    The air pressure in Pascal

    temperature

    number

    Cel

    21.34

    The measured temperature in Celcius

    VOC

    number

    ppm

    0.065

    The concentration of Volatile Organic Compounds in parts per million

    › Decoded payload for environment monitoring

    2bb53ece-d857-458c-9218-614f98cd34bf

    Decoder for Streamline LoRa message type 0xB0 with CO2 data.

    › Decoded payload for environment monitoring (v2)

    a1685635-9e45-5b84-ad2a-4af7d18e15b2

    Decoder for Streamline LoRa message type 0xB0 and 0xB1 with CO2 data.

    batteryVoltage

    V

    3.5

    The battery voltage of the device

    VOC

    ppm

    The concentration of Volatile Organic Compounds in parts per million

    CO2Concentration

    batteryVoltage

    number

    V

    3.46

    The battery voltage of the device

    CO2Concentration

    number

    ppm

    689

    CO2 Concentration in parts per million

    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    ppm

    humidity

    › Decoded payload for Medical Tracker application

    9e8b2100-537d-46f8-ab21-4fad11d04bc9

    Decoder for Streamline LoRa message type 0xD282 containing only temperature and movement bit.

    › Decoded payload for Medical Tracker application (v2)

    6a7a4ef4-e7a3-5eab-90ba-6901cf360d08

    Decoder for Streamline LoRa message type 0xD282 containing only temperature and movement bit.

    4.68

    radius

    m

    319

    locAccuracy

    %

    locPrecision

    %

    locTime

    timestamp

    1637165561

    false

    indicates if the battery voltage has been below the threshold

    timeOrigin

    string

    NETWORK

    indicates the origin of the timestamp

    firmwareVersion

    string

    firmware info, only sent after device boot

    firmwareCRC

    string

    firmware info, only sent after device boot

    settingsCRC

    string

    settings info, only sent after device boot

    string

    Firmware info, only sent after device boot

    firmwareVersion

    string

    Firmware info, only sent after device boot

    mode

    string

    "active"

    Operation modus. Either "production", "active", "presales" or "missing")

    settingsCRC

    string

    Settings info, only sent after device boot

    Value: Active (translates into → 15009807201C0000201C0015013F01001501FB014016)
  • Value: Missing (translates into → 15009807F0000000F0000015013907000000000000001501FB01C1150402010115040E010015042C02050516)

  • Value: Inactive (translates into → 14009808FFFFFFFFFFFFFFFF110000000001000000)

  • + LoRa Geolocation data

    d2593092-bc42-4b84-a053-2301f499bbc4

    Add LoRa Geolocation data to messages where location could be calculated.

    + Location by LoRa On Premises Gateway reception

    71703178-038d-4ea9-b865-00819fb42417

    Add location data to messages that are received by known LoRa On Premise Gateways.

    › Decoded payload for Device Management

    aec28f98-7e78-4eb9-a314-04f435219bc5

    Decoder for Streamline LoRa short payloads, containing firmware version, mode, and battery status.

    › Decoded payload for Device Management (v2)

    c0d1ea0f-2470-5f88-897c-c1ec25f360d6

    ‹ Encoded device modes for Asset Recovery application

    9e2a47a3-a239-4f1f-b14b-f16fa70fe99d

    Send device modes for Asset Recovery: Presales (24h interval), Active (2h interval), Missing (5min interval + BLE), or Inactive.

    locOrigin

    string

    KPNLORA

    indicates the origin of the location data

    latitude

    numeric

    51.79

    longitude

    mode

    string

    active

    operation modus (production, active, presales, missing)

    batteryVoltage

    V

    3.58

    batteryLevelLow

    batteryLevelLow

    boolean

    false

    Indicates if the battery voltage has been below the threshold

    batteryVoltage

    number

    V

    hasMovedSincePreviousTransmission

    boolean

    /

    temperature

    number

    Cel

    hasMovedSincePreviousTransmission

    boolean

    true

    temperature

    number

    Cel

    18.875

    LoRa Geolocation
    LoRa On Premise Gateways
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    Decoder for Streamline LoRa short payloads, containing firmware version, mode, and battery status.

    numeric

    boolean

    firmwareCRC

    ppm

    CO2 Concentration in parts per million

    pressure

    Pa

    The air pressure in Pascal

    humidity

    %HR

    The humidity percentage

    temperature

    Cel

    The measured temperature in Celcius

    motion

    count

    Number of times motion has been detected?

    movementSensorActiveDuration

    s

    Number of seconds the movement sensor has been active

    movementDetected

    boolean

    Boolean indicating whether movement was detected or not

    humidity

    number

    %RH

    58.33

    The humidity percentage

    motion

    number

    count

    29

    Number of times motion has been detected?

    movementDetected

    boolean

    true

    Boolean indicating whether movement was detected or not

    movementSensorActiveDuration

    number

    s

    20

    Number of seconds the movement sensor has been active

    pressure

    number

    Pa

    101100

    The air pressure in Pascal

    temperature

    number

    Cel

    21.34

    The measured temperature in Celcius

    VOC

    number

    ppm

    0.065

    The concentration of Volatile Organic Compounds in parts per million

    Forward the raw LoRa payload and lora network metadata without decoding.

    = Raw LoRa payload Extended (v2)

    bc9628e5-2c18-5f4b-9baf-5023d8b4a37b

    Forward the raw LoRa payload and lora network metadata without decoding.

    › Decoded ThingsML for LoRa payload

    0d7b7295-287e-4908-878d-00d667f6f923

    Decoder for ThingsML for LoRa, a generic LoRa payload protocol by KPN.

    › Decoded ThingsML for LoRa payload (v2)

    5c03dd6b-42a6-5cf4-8790-8db27551431a

    Decoder for ThingsML for LoRa, a generic LoRa payload protocol by KPN.

    FCntUp

    number

    LrrESP

    string

    LrrRSSI

    string

    LrrSNR

    string

    SpFact

    number

    SubBand

    string

    payload

    string

    port

    number

    DevLrrCnt

    number

    0

    Amount of gateways that received the message

    FCntDn

    number

    21725

    The downlink framecounter

    FCntUp

    number

    30117

    The uplink framecounter

    LrrRSSI

    number

    0

    Received Signal Strength Indicator

    LrrSNR

    number

    0

    Signal to Noise Ratio

    payload

    string

    "4D985C495AC4D8C9682CFD"

    raw hex payload string

    port

    number

    1

    LoRa port used

    SpFact

    number

    9

    Spreading factor used

    SubBand

    string

    "G0"

    Lora band of the transmission

    LoRa Geolocation

    hashtag
    Retrieve LoRa bindings, filtered by query parameters.

    get

    Retrieve all LoRa bindings that match the query parameters given.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    clientIdstring · uuidOptional

    Include only LoRa bindings for devices that are owned by the provided clientId. If clientId is omitted, bindings from all devices owned by the calling client are included.

    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdBeforestring · date-timeOptional

    Include only LoRa bindings created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only LoRa bindings created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only LoRa bindings modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only LoRa bindings modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    Page of filtered LoRa bindings. Only bindings that are accessible to the caller are returned.

    application/json

    A paginated list of LoRa bindings

    and
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /lora/bindings

    hashtag
    Create a new LoRa binding.

    post

    Create a new LoRa binding.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    A binding of a device to the LoRa connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the LoRa connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    appEuistringRequired

    A globally unique identifier of the target application server. Must be a hex value with size 16 (8 bytes)

    Example: 51b5a651b5a32b51Pattern: ^[0-9a-fA-F]{16}$
    appKeystringWrite-onlyOptional

    The encryption key used for messages during every over the air activation.

    Example: abe284ec8f8a063a0790d782b7b4f7ccPattern: ^[0-9a-fA-F]{32}$
    statusstringRequired

    The status of a LoRa binding. Known values include: INVENTORY and ACTIVE

    Responses
    chevron-right
    201

    The newly created LoRa binding'.

    application/json
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    post
    /lora/bindings

    hashtag
    Retrieve a LoRa binding by ID.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    bindingIdstring · uuidRequired

    LoRa binding identifier.

    Query parameters
    refreshbooleanOptional

    When true, synchronizes the latest state from Actility ThingPark to the binding

    Responses
    chevron-right
    200

    The LoRa binding.

    application/json

    A binding of a device to the LoRa connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the LoRa connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    appEuistringRequired

    A globally unique identifier of the target application server. Must be a hex value with size 16 (8 bytes)

    Example: 51b5a651b5a32b51Pattern: ^[0-9a-fA-F]{16}$
    appKeystringWrite-onlyOptional

    The encryption key used for messages during every over the air activation.

    Example: abe284ec8f8a063a0790d782b7b4f7ccPattern: ^[0-9a-fA-F]{32}$
    statusstringRequired

    The status of a LoRa binding. Known values include: INVENTORY and ACTIVE

    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /lora/bindings/{bindingId}

    hashtag
    Update a LoRa binding.

    put
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    bindingIdstring · uuidRequired

    LoRa binding identifier.

    Body

    A binding of a device to the LoRa connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the LoRa connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    appEuistringRequired

    A globally unique identifier of the target application server. Must be a hex value with size 16 (8 bytes)

    Example: 51b5a651b5a32b51Pattern: ^[0-9a-fA-F]{16}$
    appKeystringWrite-onlyOptional

    The encryption key used for messages during every over the air activation.

    Example: abe284ec8f8a063a0790d782b7b4f7ccPattern: ^[0-9a-fA-F]{32}$
    statusstringRequired

    The status of a LoRa binding. Known values include: INVENTORY and ACTIVE

    Responses
    chevron-right
    200

    The updated LoRa binding.

    application/json

    A binding of a device to the LoRa connector.

    idstring · uuidRead-onlyOptional

    The id of the binding.

    Example: 224ecc46-291d-482b-993f-c8b508adb0da
    deviceIdone ofRequired

    The id of the device that is bound to the LoRa connector by the binding.

    Example: 11fb8757-c3a7-4a53-96e8-8d6b5a2f3b05
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is created in the system.

    Example: 2025-09-01T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the binding is last modified in the system.

    Example: 2025-09-01T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the binding.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    appEuistringRequired

    A globally unique identifier of the target application server. Must be a hex value with size 16 (8 bytes)

    Example: 51b5a651b5a32b51Pattern: ^[0-9a-fA-F]{16}$
    appKeystringWrite-onlyOptional

    The encryption key used for messages during every over the air activation.

    Example: abe284ec8f8a063a0790d782b7b4f7ccPattern: ^[0-9a-fA-F]{32}$
    statusstringRequired

    The status of a LoRa binding. Known values include: INVENTORY and ACTIVE

    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    put
    /lora/bindings/{bindingId}

    hashtag
    Delete a LoRa binding.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    bindingIdstring · uuidRequired

    LoRa Binding identifier.

    Responses
    chevron-right
    204

    LoRa binding has been deleted successfully.

    delete
    /lora/bindings/{bindingId}
    204

    LoRa binding has been deleted successfully.

    Devices

    A Device represents a single physical device that can send data to the platform. You can find all your devices when clicking Devices in the menu.

    hashtag
    Devices page

    On the Device page, you have an overview of all your Devices.

    Elements on the page are:

    hashtag
    Retrieve devices, filtered by search term and / or client ID.

    get

    Retrieve all devices that match the query parameters given. If a search parameter is provided, devices whose name or description (partially) match are returned.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    Authorizationstring

    hashtag
    Create a new device.

    post

    Create a new device.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Retrieve a device by ID.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Update a device.

    put
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Delete a device.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters

    hashtag
    Retrieve the device groups a device is linked to.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Retrieve the link between a device and a device group.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Retrieve the network adapters attached to a device.

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Add a network adapter to a device

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.

    hashtag
    Update a network adapter.

    put

    The CellularNetworkAdapter.imei, GenericNetworkAdapter.dvnUuid and LoraNetworkAdapter.devEui properties may not be updated. Attempting an update with a value identical to the existing network adapter is a no-op and results in a 200 OK response returning the existing network adapter. Update attempts with different values will result in a 400 Bad Request response.

    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:

    hashtag
    Delete a network adapter.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    [
      { bn: 'urn:dev:DEVEUI:7CC6C40512345678:', bt: 1.701114926e9 },
      { n: 'temperature', u: 'Cel', v: 18.8 },
      { n: 'humidity', u: '%RH', v: 42.0 },
      { n: 'CO2Concentration', u: 'ppm', v: 567.0 },
      { n: 'pressure', u: 'Pa', v: 99200.0 },
      { n: 'VOC', u: 'ppm', v: 0.0 },
      { n: 'batteryVoltage', u: 'V', v: 3.8 },
      { n: 'movementSensorActiveDuration', u: 's', v: 1200.0 },
      { n: 'motion', u: 'count', v: 0.0 },
      { n: 'movementDetected', vb: false },
      { n: 'movementDetected', t: -60.0, vb: false },
      { n: 'movementDetected', t: -120.0, vb: false },
      { n: 'movementDetected', t: -180.0, vb: false },
      { n: 'movementDetected', t: -240.0, vb: false },
      { n: 'movementDetected', t: -300.0, vb: false },
      { n: 'movementDetected', t: -360.0, vb: false },
      { n: 'movementDetected', t: -420.0, vb: false },
      { n: 'movementDetected', t: -480.0, vb: false },
      { n: 'movementDetected', t: -540.0, vb: false },
      { n: 'movementDetected', t: -600.0, vb: false },
      { n: 'movementDetected', t: -660.0, vb: false },
      { n: 'movementDetected', t: -720.0, vb: false },
      { n: 'movementDetected', t: -780.0, vb: false },
      { n: 'movementDetected', t: -840.0, vb: false },
      { n: 'movementDetected', t: -900.0, vb: false },
      { n: 'movementDetected', t: -960.0, vb: false },
      { n: 'movementDetected', t: -1020.0, vb: false },
      { n: 'movementDetected', t: -1080.0, vb: false },
      { n: 'movementDetected', t: -1140.0, vb: false },
      { n: 'movementDetected', t: -1200.0, vb: false },
      { n: 'movementDetected', t: -1260.0, vb: false },
      { n: 'movementDetected', t: -1320.0, vb: false },
      { n: 'movementDetected', t: -1380.0, vb: false },
      { n: 'movementDetected', t: -1440.0, vb: false },
      { n: 'movementDetected', t: -1500.0, vb: false },
      { n: 'movementDetected', t: -1560.0, vb: false },
      { n: 'movementDetected', t: -1620.0, vb: false },
      { n: 'movementDetected', t: -1680.0, vb: false },
      { n: 'movementDetected', t: -1740.0, vb: false },
      { n: 'movementDetected', t: -1800.0, vb: false },
      { n: 'movementDetected', t: -1860.0, vb: false },
      { n: 'TIME_ORIGIN', vs: 'THINGSENGINE' },
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "temperature",
            "u": "Cel",
            "v": 25.9
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 50
        },
        {
            "n": "CO2Concentration",
            "u": "ppm",
            "v": 504
        },
        {
            "n": "pressure",
            "u": "Pa",
            "v": 101100
        },
        {
            "n": "VOC",
            "u": "ppm",
            "v": 8
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 4.08
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "temperature",
            "u": "Cel",
            "v": 27.3
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 68
        },
        {
            "n": "CO2Concentration",
            "u": "ppm",
            "v": 563
        },
        {
            "n": "pressure",
            "u": "Pa",
            "v": 101500
        },
        {
            "n": "VOC",
            "u": "ppm",
            "v": 1
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 7.53
        },
        {
            "n": "movementSensorActiveDuration",
            "u": "s",
            "v": 5940
        },
        {
            "n": "motion",
            "u": "count",
            "v": 29
        },
        {
            "n": "movementDetected",
            "t": 0,
            "vb": false
        },
        {
            "n": "movementDetected",
            "t": -60,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -120,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -180,
            "vb": false
        },
        {
            "n": "movementDetected",
            "t": -240,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -300,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -360,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -420,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -480,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -540,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -600,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -660,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -720,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -780,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -840,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -900,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -960,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1020,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1080,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1140,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1200,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1260,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1320,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1380,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1440,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1500,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1560,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1620,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1680,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1740,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1800,
            "vb": true
        },
        {
            "n": "movementDetected",
            "t": -1860,
            "vb": false
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
      {
        "bn": "urn:dev:DEVEUI:A41163C212345678:",
        "bt": 1637165561
      },
      {
        "n": "locOrigin",
        "vs": "KPNLORA"
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 51.794884
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.687986
      },
      {
        "n": "radius",
        "u": "m",
        "v": 319.730194
      },
      {
        "n": "locAccuracy",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locPrecision",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locTime",
        "vs": "1637165561192"
      }
    ]
    [
    	{
    		"n": "mode",
    		"u": "enum",
    		"bn": "urn:dev:DEVEUI:7CC6C40512345678:",
    		"bt": 1678778462,
    		"vs": "active"
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 3.58
    	},
    	{
    		"n": "batteryLevelLow",
    		"vb": false
    	},
    	{
    		"n": "timeOrigin",
    		"u": "enum",
    		"vs": "NETWORK"
    	}
    ]
    [
    	{
    		"n": "mode",
    		"u": "enum",
    		"bn": "urn:dev:DEVEUI:7CC6C40512345678:",
    		"bt": 1678864786,
    		"vs": "active"
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 3.37
    	},
    	{
    		"n": "batteryLevelLow",
    		"vb": false
    	},
    	{
    		"n": "firmwareVersion",
    		"vs": "0443"
    	},
    	{
    		"n": "firmwareCRC",
    		"vs": "397f"
    	},
    	{
    		"n": "settingsCRC",
    		"vs": "a3e5"
    	},
    	{
    		"n": "timeOrigin",
    		"u": "enum",
    		"vs": "NETWORK"
    	}
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "mode",
            "vs": "active"
        },
        {
            "n": "batteryLevelLow",
            "vb": false
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.59
        },
        {
            "n": "firmwareVersion",
            "vs": "0443"
        },
        {
            "n": "firmwareCRC",
            "vs": "397F"
        },
        {
            "n": "settingsCRC",
            "vs": "A3E5"
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1633896968.04,
            "n": "temperature",
            "u": "Cel",
            "v": 18.875
        },
        {
            "n": "hasMovedSincePreviousTransmission",
            "vb": true
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]

    No content

    No content

    No content

    No content

    No content

    POST /lora/bindings HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /lora/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    PUT /lora/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /lora/bindings/{bindingId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /lora/bindings HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    

    Total number of Devices you have and see on the current page.

  • Device list of all your Devices with some information:

    1. The Device name.

    2. The Device type.

    3. The primary identifier of your Device.

      • For LoRa this is the DevEUI

      • For M2M the IMEI

      • For internet the DvnUUID

    4. The moment Things last received a message from the Device.

    5. The Project the Device belongs to.

    6. The number of Flows your Device is in. Hover over the number to get a popup with a list of Flow names.

    7. Clicking on a row will open the of that Device.

  • Search element to search for your specific Devices. You can search by Name and Primary identifier.

  • Link to Add a new Device.

  • Bulk manipulation options. Select some or all Devices and choose the bulk action from the action bar at the bottom of the page.

  • Sorting options, by clicking on a specific table header the table will sorted by the selected value.

  • A lock 🔒 icon for KPN Things devices. For such devices fewer editing options are available. See Device typesarrow-up-right for a comparison of what you can do with KPN Things devices and Supported devices.

  • hashtag
    Deactivate or delete Device

    The most important difference is that: Device deactivation can be used temporarily and is necessary when you want stop data from devices being send to devices. As an example: a customer has not paid his invoice and in response this customer receives no data. Deletion is permanent. After the deletion, you can't onboard this device again. You can delete the device via the Bulk manipulation options. KPN Things devices can only be deleted by KPN. Contact the IoT Service desk arrow-up-rightfor this.

    In the table below you can read about the differences between deleting a Device and deactivating a Device.

    Deactivate Device

    Delete Device

    Why use it?

    Temporarily disable data from Device. (example: disable data for sub customers)

    The device is end of life and should be tossed out.

    Can customers do it themselves?

    Yes, in bulk and for individual devices.

    No

    Is it permanent?

    No, you can easily Activate the Device again in the Portal in bulk and individually.

    Yes, the Device is removed from all KPN systems. You can not use this the device again.

    Does it influence billing?

    hashtag
    Device detail page

    This page offers you all detailed information about your Device and its connectivity.

    The elements on this page are:

    1. General Device information card

    2. Connectivity information card for your Device, depending on your network type:

      1. LoRa information card for devices with LoRa connectivity.

      2. for devices with M2M connectivity.

      3. for devices with Internet connectivity.

    3. tab showing you more details about the Connectivity configuration of your Device.

      1. tab for devices with LoRa connectivity.

      2. tab for devices with M2M connectivity.

    4. tab showing you the Digital twin of your Device.

    5. showing you more details about your Device.

    6. allowing you to send data to your Device.

    7. Connectivity data tabshowing you detailed data history to and from your Device.

      1. tab for devices with LoRa connectivity.

      2. M2M data tab for devices with M2M connectivity.

    8. tab showing you detailed information about the Flows your Device is linked to.

    9. A button to your Device. This will completely remove your Device from KPN Things! (Not available for KPN Things devices).

    hashtag
    Device information card

    The Device information card contains general information about your Device:

    1. The name of your Device.

    2. The Device type.

    3. The processing status of your Device, which you may be able to update.

    4. The Flows linked to your Device.

    Clicking on the Device name or Device type will open the Device tab with more information about your Device.

    hashtag
    LoRa information card (only for devices with LoRa connectivity)

    The LoRa information card contains more LoRa specific information of your Device.

    1. The DevEUI of your Device.

    2. The connectivity status.

    3. The moment KPN Things last received data from your Device.

    Clicking on the DevEUI or the Type = LoRa part of the card will open the LoRa tab with all LoRa specific information of your Device.

    hashtag
    M2M information card (only for devices with M2M connectivity)

    The M2M information card contains more M2M specific information of your Device.

    1. The IMEI of your Device.

    2. The ICCID of the SIM card linked to your Device.

    3. The MSISDN of the subscription linked to the SIM card in your Device.

    4. The with the possibility to change its value.

    5. The moment KPN Things last received data from your Device.

    6. The moment your SIM card has been activated.

    7. The rate plan of the subscription linked to your SIM card.

    8. Button to unlink the current SIM card from your Device. (Not available for KPN (managed) devices).

    Clicking on the IMEI or the white part of the card will open the M2M tab with all M2M specific information of your Device.

    hashtag
    Internet information card (only for devices with Internet connectivity)

    The Internet information card contains more Internet specific information of your Device.

    1. The SenML base name

    2. The connectivity status.

    3. The moment KPN Things last received data from your Device.

    Clicking on the base name or the white part of the card will open the Internet tab with all Internet specific information of your Device.

    hashtag
    "LoRa data" tab (only for devices with LoRa connectivity)

    LoRa data history will show you all data and mac traffic sent to and from your Device up to one month ago. Learn more about LoRa data history.

    hashtag
    "Send instruction" tab

    circle-exclamation

    Currently you can only send data to your Device if your Device is linked to at least one Flow!

    On this tab you can send data or instructions to your Device, and you can see the status of requested data/instructions. Data to LoRa devices is also called a downlink.

    Depending on your device type, different ways of sending data/instructions to your Device will be available. These could be:

    1. Raw LoRa data - for own LoRa devices and supported LoRa devices.

    2. Raw SenML - for any Things M2M or Internet device.

    3. Predefined commands - for KPN devices. Learn more about KPN Things Devicesarrow-up-right.

    4. - for devices that do not support downlink communication.

    To see which methods are available for your device type, you can check the available encoders for your device type.

    hashtag
    1. Raw LoRa data

    Some Device types allow you to send raw LoRa data to your Device. To do this, you need to enter two values in the form as shown below:

    • FPort - the LoRa application port you want to send the data on.

    • Payload - the data you want to send to your Device in hexadecimal characters.

    hashtag
    2. Raw SenML

    Things M2M devices and Internet devices can communicate with SenML. So downlinks to these devices should also be SenML.

    The input form in the Portal should be filled in with a valid SenML measurement list formatted as JSON. Learn more about SenML. The entered SenML measurement list does not have to contain base values, KPN Things will add those before sending the downlink to the Device.

    hashtag
    3. Predefined commands

    For KPN Devices we provide a predefined list of human readable commands that you can send to the Device. Simply select the desired command to send by clicking on the radio button (if multiple commands are available), select the desired value for the command from the drop down, and click submit.

    hashtag
    4. No downlink available

    If downlink is not available for your Device, you will see the following:

    If your Device is not yet linked to a Flow, doing this could enable Downlink for your device. A Flow is required to enable an encoder that is required for downlink communication. Learn more about downlink communication.

    hashtag
    Downlink status

    Often data or an instruction sent to your Device is not received immediately. Often the Device is in sleep mode and will be able to receive the data when it wakes up again. So to monitor the status of the requested data/instructions to your Device, you can check the downlink status table on this tab.

    There are five downlink statuses, illustrated in the diagram below and further explained in the table below.

    Status

    Description

    Pending

    When a downlink is requested on the Actuator API the command will get the status Pending. This means the downlink is accepted by Things and will be processed shortly. If there is another downlink of the device already in Executing, the downlink will stay in Pending until the other downlink reaches a final status. Downlinks will be processed by KPN Things in order of request date, so FIFO.

    After the previous downlink has been finalized, it can take up to an hour or so for the next pending downlink to be taken into execution. We are working on it to shorten this period.

    Cancelled

    Pending downlinks can be cancelled. Since a pending downlink is not yet being processed by network systems, KPN Things can safely remove the downlink from its queue. Cancelled downlinks will not be processed any further and will get the final status Cancelled.

    It is not possible to cancel a downlink that is in Executing, since we cannot guarantee the withdrawal of a downlink request that is already being executed by the network system.

    Executing

    When there is at least one downlink in the queue for a device, so with status Pending, it will be processed further by the system. It will then be de-normalized and sent to the device. During de-normalization, sending and waiting for feedback on delivery, the downlink is in Executing.

    Only one downlink per device can be in Executing.

    Failed

    When KPN Things does not receive acknowledgement of the successful delivery of the downlink, or if KPN Things receives a timeout on sending the downlink, the downlink will get the final state Failed.

    Delivered

    When the delivery of the downlink is acknowledged by the device, the downlink will be set on final state Delivered.

    circle-info

    More information on sending data to your Device can be found in the Send instruction to LoRa Device.

    hashtag
    "Device" tab

    This tab shows you detailed information about your Device configuration:

    • Network info - The information required to register the Device to the correct network.

    • Device type - What type of Device it is.

    • Description (optional) - More information about your Device.

    • Barcode (optional) - The serial number of other code that is visible on the outside of the Device.

    • Name - A descriptive name of the Device.

    hashtag
    "LoRa" tab (only for devices with LoRa connectivity)

    You can read more about the LoRa Connectivity information that you can find on this tab.

    hashtag
    Register on Network

    If your LoRa Device is not yet registered on the LoRa network, you can click Register Device on Network here. This will open a modal for you to enter the LoRa network information for this Device.

    hashtag
    "M2M" tab (only for devices with M2M connectivity)

    The M2M tab shows you detailed information about your M2M connectivity. You can read more about the M2M Connectivity arrow-up-rightyou can find on this tab.

    Additionally, you can perform some M2M specific actions:

    2. Edit M2M Device Configuration - allows you to generate a new shared secret for your M2M device. 3. Switch SIM card - allows you to administratively switch the SIM card of your M2M device. 4. Unlink SIM card- allows you to administratively remove the SIM card from your M2M device.

    hashtag
    Link connectivity (only available when M2M device is not yet linked to a SIM card)

    If your M2M Device is not linked to a SIM card, you can click Link Connectivity here. This will open a new page to allow you to link your Device to a SIM card. The steps you take for this action are the same as for linking your SIM card to a Device.

    hashtag
    "Flows" tab

    In the Flows tab you can see:

    1. A list of all the Flows your Device is linked to and the Project this Flow is in.

    2. You can click on a Flow to open it.

    3. You can click on Unlink from this Flow to remove the Device from that Flow.

    4. Also you can add your Device to another Flow.

    Available information and actions on Flow tab

    hashtag
    Flow warning labels

    If there is a possible issue with one of the Flows your Device is in, a warning icon is shown on the Flow tab link and in the row of the concerning Flow. By clicking on the warning icon of a Flow, you will continue to the Flow detail page displaying more information about the warning.

    Flow warning

    hashtag
    Link Device to Flow

    After you click on Link to another Flow in the Flows tab, a modal will open.

    In this modal you can:

    1. Select the Project to which you want to add the Device, if you have more than 1 Project.

    2. Select the Flow to which to link your Device.

    3. Optionally create a new Flow to which to link your Device.

    hashtag
    Processing status

    Each Device in KPN Things will have a processing status. This will tell you whether data from and to that Device will be processed by KPN Things.

    Status
    Description

    🟢 Active

    Data coming from and going to your Device will be processed.

    ⚫ Deactivated

    Data coming from your Device will not be processed or forwarded by KPN Things. Also downlinks will not be sent to your Device. Data history will still be available, since Things will still accept data from your Device. The network connection is not denied.

    ⚫ Not yet linked

    Your Device is not connected to a Flow, so data will not be processed in KPN Things.

    hashtag
    Network info

    To connect a Device to KPN Things it needs either to be registered to our LoRa or M2M network, or it needs to be an Internet-connected device running our SDKs or other KPN Things compatible software.

    Separate pages will explain more about the supported network types:

    • LoRa

    • M2Marrow-up-right

    • Internetarrow-up-right

    hashtag
    Connectivity status

    Status

    Description

    ⚪ Not yet linked to a network

    Your Device is added to KPN Things, but Network information is still missing in able to register your Device to the network.

    🔵 Pending create

    Your Device is being registered to the network.

    🟢 Active

    Your Device or SIM card is registered to the network and should be able to join and send data.

    ⚫ Deactivated

    Your Device or SIM card is registered to the network, but labeled as Inactive, meaning incoming connections will not be accepted.

    🔴 Failed

    The Device could not be registered to the network. Probably the Network info you entered to register your Device was incorrect or already in use.

    Required
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    qstring · min: 1Optional

    Include only devices whose name or description contain the search term. Matching is done case-insensitively.

    clientIdstring · uuidOptional

    Include only owned devices that match the provided clientId. If clientId is omitted, all owned devices are included.

    barcodestringOptional

    Include only devices owned by the client partially matching barcode.

    deviceSpecificationIdstring · uuid[]Optional

    Filter devices by their device specification.

    Example: null
    createdBeforestring · date-timeOptional

    Include only devices created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only devices created at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only devices modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only devices modified at or after the provided date and time. The date-time must be in ISO 8601 format.

    Responses
    chevron-right
    200

    Page of filtered devices. Only devices that are accessible to the caller are returned.

    application/json

    A paginated list of devices

    and
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /devices

    No content

    Body
    idstring · uuidRead-onlyOptional

    The id of the device

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device is created in the system.

    Example: 2024-12-31T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device is last modified in the system.

    Example: 2024-12-31T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    namestring · min: 1 · max: 255Required

    Name of this device

    Example: My first devicePattern: ^(?!\s*$).+
    statusstringOptional

    Status of the device. Known values include: ACTIVE and INACTIVE

    barcodestringOptional

    Barcode of the device

    Example: 123456789
    descriptionstring · max: 255Optional

    Description of this device

    Example: Device to explore KPN Things
    clientIdstring · uuidRequired

    ID of owning client

    Example: 7098dc22-fed5-4d9e-8e68-6c6f853eac0c
    projectIdstring · uuidRequired

    ID of the project the device belongs to

    Example: b6a883a8-41f9-428e-a8a1-4597de54fec6
    deviceSpecificationIdstring · uuidRequired

    ID of the device specification of the device

    Example: 9c359e94-ace1-448c-8ac9-443a7d3d963f
    Responses
    chevron-right
    201

    The newly created device.

    application/json
    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    post
    /devices

    No content

    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Query parameters
    Responses
    chevron-right
    200

    The device.

    application/json

    Device with optional embedded entities

    chevron-right
    400

    Request is missing required information or invalid

    application/problem+json
    get
    /devices/{deviceId}

    No content

    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Body
    idstring · uuidRead-onlyOptional

    The id of the device

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device is created in the system.

    Example: 2024-12-31T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device is last modified in the system.

    Example: 2024-12-31T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    namestring · min: 1 · max: 255Required

    Name of this device

    Example: My first devicePattern: ^(?!\s*$).+
    statusstringOptional

    Status of the device. Known values include: ACTIVE and INACTIVE

    barcodestringOptional

    Barcode of the device

    Example: 123456789
    descriptionstring · max: 255Optional

    Description of this device

    Example: Device to explore KPN Things
    clientIdstring · uuidRequired

    ID of owning client

    Example: 7098dc22-fed5-4d9e-8e68-6c6f853eac0c
    projectIdstring · uuidRequired

    ID of the project the device belongs to

    Example: b6a883a8-41f9-428e-a8a1-4597de54fec6
    deviceSpecificationIdstring · uuidRequired

    ID of the device specification of the device

    Example: 9c359e94-ace1-448c-8ac9-443a7d3d963f
    Responses
    chevron-right
    200

    The updated device.

    application/json
    idstring · uuidRead-onlyOptional

    The id of the device

    Example: 36e75427-4c6e-438c-89b5-0cbdb0d4068c
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the device is created in the system.

    Example: 2024-12-31T23:00:00.000Z
    createdBystringRead-onlyOptional

    The user who created the device.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the device is last modified in the system.

    Example: 2024-12-31T23:00:00.000Z
    modifiedBystringRead-onlyOptional

    The user who last modified the device.

    Example: principal/9ebbb3b1-1b6b-46e7-8d58-bb8fe7ae24d4
    namestring · min: 1 · max: 255Required

    Name of this device

    Example: My first devicePattern: ^(?!\s*$).+
    statusstringOptional

    Status of the device. Known values include: ACTIVE and INACTIVE

    barcodestringOptional

    Barcode of the device

    Example: 123456789
    descriptionstring · max: 255Optional

    Description of this device

    Example: Device to explore KPN Things
    clientIdstring · uuidRequired

    ID of owning client

    Example: 7098dc22-fed5-4d9e-8e68-6c6f853eac0c
    projectIdstring · uuidRequired

    ID of the project the device belongs to

    Example: b6a883a8-41f9-428e-a8a1-4597de54fec6
    deviceSpecificationIdstring · uuidRequired

    ID of the device specification of the device

    Example: 9c359e94-ace1-448c-8ac9-443a7d3d963f
    put
    /devices/{deviceId}
    200

    The updated device.

    No content

    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Responses
    chevron-right
    204

    Device has been deleted successfully.

    chevron-right
    409

    Conflict - Multiple possible reasons

    application/json
    delete
    /devices/{deviceId}

    No content

    Path parameters
    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Query parameters
    createdBeforestring · date-timeOptional

    Include only links created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only links created at or after the provided date and time. The date-time must be in ISO 8601 format.

    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    Responses
    chevron-right
    200

    Page of devices groups linked to the specified device.

    application/json

    A paginated list of device to device group links

    and
    get
    /devices/{deviceId}/device-groups
    200

    Page of devices groups linked to the specified device.

    No content

    Path parameters
    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    deviceGroupIdstring · uuidRequired

    The ID of the device group for which to retrieve the link to the device.

    Query parameters
    Responses
    chevron-right
    200

    The link between the specified device and device group.

    application/json

    DeviceDeviceGroupLink with optional embedded entities

    get
    /devices/{deviceId}/device-groups/{deviceGroupId}
    200

    The link between the specified device and device group.

    No content

    Path parameters
    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Query parameters
    typestringOptional

    Include only network adapters of this type. Known values are: cellular, generic, lora.

    Responses
    chevron-right
    200

    List of network adapters attached to the specified device.

    application/json

    A list of network adapters

    get
    /devices/{deviceId}/network-adapters
    200

    List of network adapters attached to the specified device.

    No content

    Path parameters
    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    Body

    A network adapter

    or
    or
    Responses
    chevron-right
    201

    The newly created network adapter.

    application/json
    post
    /devices/{deviceId}/network-adapters
    201

    The newly created network adapter.

    No content

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    adapterIdstring · uuidRequired

    The ID of the network adapter to update.

    Body

    A network adapter

    or
    or
    Responses
    chevron-right
    200

    The updated network adapter.

    application/json

    A network adapter

    or
    or
    put
    /devices/{deviceId}/network-adapters/{adapterId}
    200

    The updated network adapter.

    No content

    Path parameters
    deviceIdone ofRequired

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    adapterIdstring · uuidRequired

    The ID of the network adapter to delete.

    Responses
    chevron-right
    204

    Network adapter has been deleted successfully.

    delete
    /devices/{deviceId}/network-adapters/{adapterId}
    204

    Network adapter has been deleted successfully.

    No content

    Tailored user management

    Configure users, roles and permissions

    You and your team want secure and sustainable access to your IoT solution, with full insight and control. To achieve this, assigning the right roles and permissions is essential.

    To achieve this, assinging the right roles and permissions is done in GRIP. This Identity and Access Management platform is developed by KPN, specifically designed for Business Users. It enables organizations to securely and efficiently manage access to their applications and services.

    To assign roles, you must be an admin of the account. As an administrator, you can add or remove users and configuratie roles and permissions for your services.

    As a Tailored customer, connectivity can be managed either in the KPN Things Portal or in Cisco Control Center. User management is handled

    Create a Single Database - Azure SQL DatabaseMicrosoftLearnchevron-right
    [{"n":"door","v":1}]
    [{"n":"door","v":1},{"n":"mode","vs":"quiet"}]
    POST /devices HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /devices/{deviceId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    PUT /devices/{deviceId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /devices/{deviceId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /devices/{deviceId}/device-groups HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /devices/{deviceId}/device-groups/{deviceGroupId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /devices/{deviceId}/network-adapters HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /devices/{deviceId}/network-adapters HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    PUT /devices/{deviceId}/network-adapters/{adapterId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    DELETE /devices/{deviceId}/network-adapters/{adapterId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /devices HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    separately
    within the respective tool.

    hashtag
    Before you start

    To manage users and roles, you need admin rights

    • Already an admin? Great! Let’s get started!

    • Not an admin yet? Ask your organization’s administrator to grant you admin rights Not sure who that is? Contact us and we’ll help you out

    hashtag
    Access the User Management section

    You can access GRIP in three ways.

    1. Via KPN Things Portal

    2. Via MijnKPN Zakelijk

    3. Via direct link

    hashtag
    Via KPN Things Portal

    1
    1. Go to portal.kpnthings.com/managerarrow-up-right or go to KPN Things Portalarrow-up-right and click on Things Manager

    2. Click on your Company in the menu

    3. Click on User Profiles under Account

    2

    Click on the Manage Users link shown above the users overview.

    3

    For documentation about how to manage users click

    hashtag
    Via MijnKPN Zakelijk

    1

    Go to https://mijnkpnzakelijk.kpn.comarrow-up-right

    2

    Log in and select Company Details in the menu and click on User Management

    3

    For documentation about how to manage users click

    hashtag
    Via direct link

    1

    Go to grip-on-it.comarrow-up-right

    2

    Log in and select Users

    3

    For documentation about how to manage users click

    hashtag
    Managing Users in GRIP

    The information below explains how to manage users, including adding and removing users, and managing roles and permissions.

    Once you have accessed the User Management section in GRIP, you can perform several actions to control access within your organization.

    hashtag
    What functionalities do you have

    Review existing users, add and delete users View the list of all users in your organization, including their roles and assigned services. Invite new team members by creating users accounts or deleting users who no longer need access to your services.

    Edit or give permissions to an added or existing user Modify user information, roles and permissions to ensure they have the correct level of access to your services.

    circle-info

    Why this matters Managing users and permissions in GRIP ensures that only authorized individuals can access your applications and IoT services. This helps maintain security and compliance across your organization.

    hashtag
    Review existing users, add and delete users

    In the User Management table, you can see all current users along with their assigned roles and permissions. This overview helps you quickly check who has access to which services.

    Add, Remove or Modify Users

    1. To add a new user, click Add User at the top of the page

    2. To modify a user, click the three dots ⋮ and select Edit

    3. To remove a user, click the three dots ⋮ and select Deactivate or Delete

    Modify users
    circle-info

    To give you the opportunity to reactivate an account without having to create it again, a deleted user will remain visible in the overview for 10 days before it is completely removed.

    hashtag
    Edit or give permissions to an added or existing user

    For a New User you click on the Add User at the top of the page and provide the general information.

    1

    hashtag
    Provide the general information

    1. Fill in the general details of the new user

    2. Select the Send email to set password option to send a password email immediately. This can also be done at a later time, for example after you’ve configured all roles and permissions.

    3. Click the Add User button

    circle-check

    If the user is a contact person for operational matters, it is advisable to provide a phone number and the correct language setting so that our service desk can reach you when needed.

    After adding the user, the next screen opens where you can optionally enter additional information about the user. This information is not required for using your account, but it can be used for your own administration.

    1. Add additional general details (optional)

    2. Add even more information like job title or office location (optional)

    3. Select the preferred language setting

    hashtag
    Assigning Services and Roles

    1

    hashtag
    Select Services and Roles

    1. Navigate to the Services and Roles tab

    2. If the user should be able to manage other users, enable the Admin role

    3. Click Save Changes

    4. Click + Assign services and roles button to add specific services

    Select the appropriate services and roles based on the user’s responsibilities. The example below grants the user full access to the features within the KPN IoT solution.

    triangle-exclamation

    The admin is responsible for assigning the correct permissions to the user. Please note that someone with admin rights can also grant themselves additional permissions.

    hashtag
    Services and Roles explained

    The below list shows the available roles for services that are used within the KPN IOT solution and describes what levels of access each of the roles gives to the user in KPN Things portal.

    The central identity solution behind every account

    Provides the user with an Admin account to access and give assigned services.

    Role
    Description
    Access

    Admin

    Full user management, including own account.

    View and manage services and roles of other users; add, modify or remove users.

    The foundation for your IoT applications

    The starting point for your IoT service and manage the IoT solution.

    We advise that every user has a Things Manager and Things Support role.

    circle-exclamation

    Make sure to select only one role per item If you choose multiple roles - such as Thing Manager - Admin and Thing Manager - Read Only - the lowest role will override the highest.

    In this example, you would only have Read Only access.

    hashtag
    Things Creator

    These roles are only needed if you manage your devices, decoders and scripts via KPN Things. If only connectivity features are used, these roles are not required.

    Role
    Description
    Access

    Things Creator - Admin

    Full access to Things Creator tab.

    Add modify or remove devices types, decoders and scripts.

    Things Creator - Read Only

    Read-only access to Things Creator tab.

    View device types, decoders, and scripts.

    hashtag
    Things Manager

    We recommend granting the user at least KPN Things - Read Only access. This ensures insights into the IoT solution and enables options such as making exports of connectivity items available.

    Role
    Description
    Access

    Things Manager - Admin

    Full access to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity.

    Things Manager - Editor

    Full access except for deleting to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity except the right to delete.

    Things Manager - Read Only

    Read only access to Things Manager tab.

    View devices, flows, destinations and connectivity.

    hashtag
    Things Support

    We advise that every user has access to this role in order to see important documents and access to links to contact information and ServiceNow be able to log tickets. Assigning this role also subscribes you to service emails.

    triangle-exclamation

    To be able to log tickets in ServiceNow also the ICT Manager role must be granted in Self Service Portal.

    Role
    Description
    Access

    Things Support - User

    Access to the Things Support tab.

    View news, release notes, documents, service status, reports and contact info and recieve service emails.

    Provides access to the Service Portal for reporting incidents and service request

    The Self Service Portal allows users to register and track tickets for incidents, information requests, change requests, and complaints. We recommend granting access to all users and ensuring each user profile includes the correct phone number and language setting (found under the Location section in User Settings).

    circle-exclamation

    The 'Things Support - User' role must be assigned to access the Self Service Portal via Support tab in the KPN Things Portal.

    Role
    Description
    Access

    ICT Manager

    Access to Self Service Portal.

    Register and track tickets for incidents, information requests, change requests and complaints.

    Provides access to te KPN Webshop

    Grants the user access to the KPN Webshop. If any of the webshop-related roles are assigned, the Shop tab will automatically become visible and accessible in the KPN Things Portal.

    Role
    Description
    Access

    Forecasting

    Enables forecasting functionality.

    Enables product forecasting for specific calendar periods, allowing KPN to align stock levels with expected demand

    Quotation

    Enables ordering and requesting quotations.

    Enables to order products and request quotations for items that are not currently covered by an existing contract. Additionally, user can view the status and history of their orders.

    Read Only

    Read only access of products and prices.

    View product details and prices, order status and order history.

    Voucher Manager

    Manage discount vouchers.

    Process discount vouchers.

    circle-exclamation

    Please note that you must have at least the Quotation role assigned to be able to place orders.

    Provide access to MijnKPN Zakelijk functions

    This provides the user with access to the MijnKPN Zakelijk service portal. It gives access to the available services.

    hashtag
    Access the User Management section

    You can access GRIP in three ways.

    1. Via KPN Things Portal

    2. Via MijnKPN Zakelijk

    3. Via direct link

    hashtag
    Via KPN Things Portal

    1
    1. Go to portal.kpnthings.com/managerarrow-up-right or go to KPN Things Portalarrow-up-right and click on Things Manager

    2. Click on your Company in the menu

    3. Click on User Profiles under Account

    2

    Click on the Manage Users link shown above the users overview.

    3

    For documentation about how to manage users click

    hashtag
    Via MijnKPN Zakelijk

    1

    Go to https://mijnkpnzakelijk.kpn.comarrow-up-right

    2

    Log in and select Company Details in the menu and click on User Management

    3

    For documentation about how to manage users click

    hashtag
    Via direct link

    1

    Go to grip-on-it.comarrow-up-right

    2

    Log in and select Users

    3

    For documentation about how to manage users click

    hashtag
    Managing Users in GRIP

    The information below explains how to manage users, including adding and removing users, and managing roles and permissions.

    Once you have accessed the User Management section in GRIP, you can perform several actions to control access within your organization.

    hashtag
    What functionalities do you have

    Review existing users, add and delete users View the list of all users in your organization, including their roles and assigned services. Invite new team members by creating users accounts or deleting users who no longer need access to your services.

    Edit or give permissions to an added or existing user Modify user information, roles and permissions to ensure they have the correct level of access to your services.

    circle-info

    Why this matters Managing users and permissions in GRIP ensures that only authorized individuals can access your applications and IoT services. This helps maintain security and compliance across your organization.

    hashtag
    Review existing users, add and delete users

    In the User Management table, you can see all current users along with their assigned roles and permissions. This overview helps you quickly check who has access to which services.

    Add, Remove or Modify Users

    1. To add a new user, click Add User at the top of the page

    2. To modify a user, click the three dots ⋮ and select Edit

    3. To remove a user, click the three dots ⋮ and select Deactivate or Delete

    Modify users
    circle-info

    To give you the opportunity to reactivate an account without having to create it again, a deleted user will remain visible in the overview for 10 days before it is completely removed.

    hashtag
    Edit or give permissions to an added or existing user

    For a New User you click on the Add User at the top of the page and provide the general information.

    1

    hashtag
    Provide the general information

    1. Fill in the general details of the new user

    2. Select the Send email to set password option to send a password email immediately. This can also be done at a later time, for example after you’ve configured all roles and permissions.

    3. Click the Add User button

    circle-check

    If the user is a contact person for operational matters, it is advisable to provide a phone number and the correct language setting so that our service desk can reach you when needed.

    After adding the user, the next screen opens where you can optionally enter additional information about the user. This information is not required for using your account, but it can be used for your own administration.

    1. Add additional general details (optional)

    2. Add even more information like job title or office location (optional)

    3. Select the preferred language setting

    hashtag
    Assigning Services and Roles

    1

    hashtag
    Select Services and Roles

    1. Navigate to the Services and Roles tab

    2. If the user should be able to manage other users, enable the Admin role

    3. Click Save Changes

    4. Click + Assign services and roles button to add specific services

    Select the appropriate services and roles based on the user’s responsibilities. The example below grants the user full access to the features within the KPN IoT solution.

    triangle-exclamation

    The admin is responsible for assigning the correct permissions to the user. Please note that someone with admin rights can also grant themselves additional permissions.

    hashtag
    Services and Roles explained

    The below list shows the available roles for services that are used within the KPN IOT solution and describes what levels of access each of the roles gives to the user in KPN Things portal.

    The central identity solution behind every account

    Provides the user with an Admin account to access and give assigned services.

    Role
    Description
    Access

    Admin

    Full user management, including own account.

    View and manage services and roles of other users; add, modify or remove users.

    The foundation for your IoT applications

    The starting point for your IoT service and manage the IoT solution.

    We advise that every user has a Things Manager and Things Support role.

    circle-exclamation

    Make sure to select only one role per item If you choose multiple roles - such as Thing Manager - Admin and Thing Manager - Read Only - the lowest role will override the highest.

    In this example, you would only have Read Only access.

    hashtag
    Things Creator

    These roles are only needed if you manage your devices, decoders and scripts via KPN Things. If only connectivity features are used, these roles are not required.

    Role
    Description
    Access

    Things Creator - Admin

    Full access to Things Creator tab.

    Add modify or remove devices types, decoders and scripts.

    Things Creator - Read Only

    Read-only access to Things Creator tab.

    View device types, decoders, and scripts.

    hashtag
    Things Manager

    We recommend granting the user at least KPN Things - Read Only access. This ensures insights into the IoT solution and enables options such as making exports of connectivity items available.

    Role
    Description
    Access

    Things Manager - Admin

    Full access to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity.

    Things Manager - Editor

    Full access except for deleting to Things Manager tab.

    Add, modify, or remove devices, flows, destinations and manage connectivity except the right to delete.

    Things Manager - Read Only

    Read only access to Things Manager tab.

    View devices, flows, destinations and connectivity.

    hashtag
    Things Support

    We advise that every user has access to this role in order to see important documents and access to links to contact information and ServiceNow be able to log tickets. Assigning this role also subscribes you to service emails.

    triangle-exclamation

    To be able to log tickets in ServiceNow also the ICT Manager role must be granted in Self Service Portal.

    Role
    Description
    Access

    Things Support - User

    Access to the Things Support tab.

    View news, release notes, documents, service status, reports and contact info and recieve service emails.

    Provides access to the Service Portal for reporting incidents and service request

    The Self Service Portal allows users to register and track tickets for incidents, information requests, change requests, and complaints. We recommend granting access to all users and ensuring each user profile includes the correct phone number and language setting (found under the Location section in User Settings).

    circle-exclamation

    The 'Things Support - User' role must be assigned to access the Self Service Portal via Support tab in the KPN Things Portal.

    Role
    Description
    Access

    ICT Manager

    Access to Self Service Portal.

    Register and track tickets for incidents, information requests, change requests and complaints.

    Provides access to te KPN Webshop

    Grants the user access to the KPN Webshop. If any of the webshop-related roles are assigned, the Shop tab will automatically become visible and accessible in the KPN Things Portal.

    Role
    Description
    Access

    Forecasting

    Enables forecasting functionality.

    Enables product forecasting for specific calendar periods, allowing KPN to align stock levels with expected demand

    Quotation

    Enables ordering and requesting quotations.

    Enables to order products and request quotations for items that are not currently covered by an existing contract. Additionally, user can view the status and history of their orders.

    Read Only

    Read only access of products and prices.

    View product details and prices, order status and order history.

    Voucher Manager

    Manage discount vouchers.

    Process discount vouchers.

    circle-exclamation

    Please note that you must have at least the Quotation role assigned to be able to place orders.

    Provide access to MijnKPN Zakelijk functions

    This provides the user with access to the MijnKPN Zakelijk service portal. It gives access to the vailable services.

    Role
    Description
    Access

    Facturen (Invoices)

    View invoices in PDF format.

    Allows user to view all invoices in PDF format that are linked to the same KPN Reference Number (KRN), which is your company’s unique identifier within KPN.

    hashtag
    Cisco Control Center User Management

    User management in Cisco Control Center is explained in detail in the Help section of the application. Below is a quick guide so you can easily find this information.

    1

    Log in and click on Help at the top of the page

    2
    1. Type Managing Users in the search field

    2. Click Managing Users

    Or select Managing Users from the index under User Guide

    3

    Click the topic you want to learn more about

    Can’t find the information or still have questions? Contact us and we’ll help you out

    No, remove from Flow to have it stop being counted (applicable to Modular customers, E2E customers are being billed by information in C8Y)

    Yes, because it is also removed from the Flow.

    Impact on battery if Device is still turned on

    Connection between Device and Network is not changed, so the Device continues operating as normal.

    Network registration of Device is removed. Depending on how the Device is programmed it may continue operating as normal, but it will probably change to a more energy consuming mode because the device will (uselessly) try to reconnect to the Network.

    Can you check the operation afterwards?

    Yes, because the Device object still exists, only has the attribute "STATUS" changed to "Deactivated". But once the Device is reactivated, you cannot see when it has been deactivated.

    No, the Device is completely removed from all systems.

    ⚫ Inventory

    Your Device and its Network information is known in the system but not yet registered to the network. If you want you can activate the network registration on the Device detail page.

    Device detail page
    M2M information card
    Internet information card
    Connectivity info
    LoRa
    M2M
    Device Twin
    Device tab
    Send Instruction tab
    arrow-up-right
    LoRa data
    Flows
    delete
    connectivity status
    No downlink available
    Logo

    Click the Save Changes button

    Click the Save Changes button

    KPN IoT Services

    User Management for KPN services in GRIP

    Cisco Control Center

    User Management for Cisco Control Center users

    here
    here
    here
    here
    here
    here
    Cover
    Cover

    hashtag
    Retrieve LoRa downlinks filtered and sorted by specified search and sort criteria

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Query parameters
    cursorstring · cursorOptional

    String that encodes all necessary information to retrieve a page.

    limitintegerOptional

    Limit the number of results (per page).

    Default: 50
    sortstringOptional

    Sorting fields separated by comma. Default order is Ascending (ASC), minus(-) should be used in front of field name for Descending (DESC) order.

    Example: createdAt,-name
    deviceIdone ofOptional

    A device identifier in one of several supported formats.

    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdBeforestring · date-timeOptional

    Include only LoRa downlinks created before the provided date and time. The date-time must be in ISO 8601 format.

    createdSincestring · date-timeOptional

    Include only LoRa downlinks at or after the provided date and time. The date-time must be in ISO 8601 format.

    modifiedBeforestring · date-timeOptional

    Include only LoRa downlinks modified before the provided date and time. The date-time must be in ISO 8601 format.

    modifiedSincestring · date-timeOptional

    Include only LoRa downlinks modified at of after the provided date and time. The date-time must be in ISO 8601 format.

    statusstring · enumOptional

    Include only LoRa downlinks whose status matches the provided status. The status must match exactly.

    Possible values:
    Responses
    chevron-right
    200

    Page of filtered LoRa downlinks. Only downlinks that are accessible to the caller are returned.

    application/json

    A paginated list of LoRa downlinks.

    and
    get
    /lora/downlinks

    hashtag
    Create a new LoRa downlink

    post
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body

    A downlink that is sent to a LoRa IoT device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    statusstringRead-onlyOptional

    The status of the LoRa downlink. Known values include: PENDING, EXECUTING and DONE

    retryLimitintegerOptional

    The maximum number of retries that should be performed for the downlink.

    Default: 0Example: 3
    retryCountintegerRead-onlyOptional

    The number of retries that have been performed for the downlink.

    Example: 0
    deviceIdone ofRequired

    The device identifier which this downlink is targeting.

    Example: 014388b0-5244-4ced-9fbf-1088c1c0d328
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-04-01T00:00:00.000Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-05-01T00:00:00.000Z
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the LoRa downlink. Known values include: CANCELLED, FEEDBACK_TIMEOUT, NOT_ACKNOWLEDGED_BY_DEVICE, FAILED_TO_TRANSMIT_TO_DEVICE, FAILED_TO_ENQUEUE_FOR_TRANSMISSION and EVICTED

    Responses
    chevron-right
    201

    LoRa downlink has been successfully created.

    application/json
    post
    /lora/downlinks

    hashtag
    Retrieve a LoRa downlink by ID

    get
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    LoRa downlink identifier.

    Responses
    chevron-right
    200

    The LoRa downlink.

    application/json

    A downlink that is sent to a LoRa IoT device.

    idstring · uuidRead-onlyOptional

    Unique identifier for the downlink.

    Example: 12345678-1234-1234-1234-123456789012
    statusstringRead-onlyOptional

    The status of the LoRa downlink. Known values include: PENDING, EXECUTING and DONE

    retryLimitintegerOptional

    The maximum number of retries that should be performed for the downlink.

    Default: 0Example: 3
    retryCountintegerRead-onlyOptional

    The number of retries that have been performed for the downlink.

    Example: 0
    deviceIdone ofRequired

    The device identifier which this downlink is targeting.

    Example: 014388b0-5244-4ced-9fbf-1088c1c0d328
    string · uuidOptional

    Things Device UUID

    or
    stringOptional

    IMEI-based device ID

    Pattern: (?i)^imei:[0-9]{15,16}$
    or
    stringOptional

    LoRaWAN DevEUI device ID

    Pattern: (?i)^deveui:[a-f0-9]{16}$
    or
    stringOptional

    DVNUUID-based device ID

    Pattern: (?i)^dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}?$
    or
    stringOptional

    IMEI-based device URN

    Pattern: (?i)^urn:dev:imei:[0-9]{15,16}:?$
    or
    stringOptional

    LoRaWAN DevEUI device URN

    Pattern: (?i)^urn:dev:deveui:[a-f0-9]{16}:?$
    or
    stringOptional

    DVNUUID-based device URN

    Pattern: (?i)^urn:dev:dvnuuid:[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}:?$
    createdAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was created in the system.

    Example: 2025-04-01T00:00:00.000Z
    modifiedAtstring · date-timeRead-onlyOptional

    The timestamp when the downlink was last modified in the system.

    Example: 2025-05-01T00:00:00.000Z
    feedbackTimeoutall ofRequired
    string · durationOptional

    Duration that supports a subset of ISO 8601, where only days, hours, minutes, and seconds can be specified. Days are treated as exactly 24 hours, thus ignoring daylight savings effects.

    Pattern: ^P(?:(\d+D)(T(?:(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)?)|T(\d+H)?(\d+M)?(\d+(\.\d{1,9})?S)?)$
    and
    anyOptional

    The duration after which feedback is expected for the downlink. Must be at least 10 minutes.

    Example: PT25H
    dryRunbooleanOptional

    Indicates if this is a dry run.

    Default: false
    lastFailureReasonstringRead-onlyOptional

    The failure reason of the LoRa downlink. Known values include: CANCELLED, FEEDBACK_TIMEOUT, NOT_ACKNOWLEDGED_BY_DEVICE, FAILED_TO_TRANSMIT_TO_DEVICE, FAILED_TO_ENQUEUE_FOR_TRANSMISSION and EVICTED

    get
    /lora/downlinks/{downlinkId}
    200

    The LoRa downlink.

    hashtag
    Accepts and schedules full or partial cancellation of a LoRa downlink for further downstream handling.

    delete
    chevron-right
    lockRequired scopes
    This endpoint requires the following scopes:
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Path parameters
    downlinkIdstring · uuidRequired

    LoRa downlink identifier.

    Query parameters
    forcedbooleanOptional

    Whether to force the cancellation of the LoRa downlink or not.

    Default: false
    Responses
    chevron-right
    202

    LoRa downlink cancellation has been accepted and scheduled for further downstream processing.

    chevron-right
    409

    LoRa downlink status does not permit cancellation.

    application/problem+json
    delete
    /lora/downlinks/{downlinkId}
    Create a Single Database - Azure SQL DatabaseMicrosoftLearnchevron-right
    Logo
    200

    Page of filtered LoRa downlinks. Only downlinks that are accessible to the caller are returned.

    No content

    201

    LoRa downlink has been successfully created.

    No content

    No content

    No content

    POST /lora/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    
    GET /lora/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    DELETE /lora/downlinks/{downlinkId} HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    GET /lora/downlinks HTTP/1.1
    Host: api.kpnthings.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    

    KPN LocationTag II v2

    KPN LocationTag II v2

    Tag for localization and movement monitoring. Revision of KPN LocationTag II. Added functionality NFC and FSK.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-locationtag-ii-v2

    • Device Specification UUID: 43d4122f-b2ce-486b-9ede-d5463d2a822d

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML-message

    This location info can be merged with the payload of the device

    hashtag
    + Location by LoRa On Premises Gateway reception

    Add location data to messages that are received by known .

    hashtag
    Expected SenML outputs

    See above. Output is comparable to LoRa Geolocation data.

    hashtag
    › Decoded payload for Asset Tracking

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML message

    hashtag
    › Decoded payload for Asset Tracking (v2)

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    Short payload

    Long payload

    hashtag
    › Decoded payload for counting rotations

    Decoder outputting general information and specific rotation and orientation data

    Expected SenML records

    name
    type
    unit

    hashtag
    › Decoded payload for counting rotations (v2)

    Decoder outputting general information and specific rotation and orientation data

    Fixes from '› Decoded payload for counting rotations':

    • For the field nfcState, the values"NFC_READ_ONLY" & "NFC_OFF" were swapped.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    ‹ Encoded device commands

    • Protocol: LoRa downlink

    • Description: Set the device mode and enabling of nfc writes.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: mode

      • Value: Missing (translates into → 118000000080000000)

    › Decoded payload for counting rotations

    10cf0159-822c-4039-a641-59d23cc38f49

    Decoder outputting general information and specific rotation and orientation data

    › Decoded payload for counting rotations (v2)

    2aeeaef5-fb56-5b07-9675-58d568dc708f

    Decoder outputting general information and specific rotation and orientation data

    4.68

    radius

    m

    319

    locAccuracy

    %

    locPrecision

    %

    locTime

    timestamp

    1637165561

    false

    movementIndication

    string

    STATIONARY

    indicates the devices movement status (STOP, STATIONARY, START, MOVING)

    alarmMode

    boolean

    false

    batteryVoltage

    V

    3.5

    motionTime

    min

    2

    temperature

    Cel

    21.0

    firmwareVersion

    only sent in long payload messages

    firmwareCRC

    only sent in long payload messages

    settingsCRC

    only sent in long payload messages

    nfcState

    only sent in long payload messages

    RESERVED, NFC_READ_ONLY, NFC_OFF, NFC_RW

    powerupTime

    min

    only sent in long payload messages

    transmissionTime

    s

    only sent in long payload messages

    nrOfLoraTransmissions

    only sent in long payload messages

    timeOrigin

    string

    NETWORK

    indicates the origin of the timestamp

    number

    V

    3.56

    firmwareCRC

    string

    "9e17"

    Only sent in long payload messages

    firmwareVersion

    string

    "0604"

    Only sent in long payload messages

    motionTime

    number

    min

    142271.0

    movementIndication

    string

    "STOP"

    Indicates the devices movement status. Either "STOP, "STATIONARY", "START" or "MOVING"

    nfcFieldDetected

    boolean

    true

    nfcState

    string

    "RESERVED"

    Only sent in long payload messages. Either "RESERVED", "NFC_READ_ONLY", "NFC_OFF", or "NFC_RW"

    nrOfLoraTransmissions

    number

    7427.0

    Only sent in long payload messages

    powerupTime

    number

    min

    1334707

    Only sent in long payload messages

    sabotaged

    boolean

    true

    settingsCRC

    string

    "a3e5"

    Only sent in long payload messages

    temperature

    number

    Cel

    23.432

    transmissionTime

    number

    s

    5180

    Only sent in long payload messages

    firmwareVersion

    string

    movementIndication

    string

    enum

    nfcFieldDetected

    boolean

    enum

    nfcState

    string

    enum

    nrOfLoraTransmissions

    number

    orientationX

    number

    orientationY

    number

    powerupTime

    number

    min

    rotationCount

    number

    rotationLeft

    number

    rotationRight

    number

    sabotaged

    boolean

    settingsCRC

    string

    temperature

    number

    Cel

    transmissionTime

    number

    s

    number

    V

    3.03

    firmwareCRC

    string

    "3407"

    Not present in detail level 1 messages

    firmwareVersion

    string

    "06b0"

    Not present in detail level 1 messages

    movementIndication

    string

    "STATIONARY"

    Indicates the devices movement status. Either "STOP", "STATIONARY", "START" or "MOVING"

    nfcFieldDetected

    boolean

    false

    nfcState

    string

    "NFC_READ_ONLY"

    Not present in detail level 1 messages. Either "RESERVED", "NFC_READ_ONLY", "NFC_OFF" or "NFC_RW"

    nrOfLoraTransmissions

    number

    27

    Not present in detail level 1 messages

    orientationX

    number

    21

    Only present in detail level 3 messages

    orientationY

    number

    7

    Only present in detail level 3 messages

    powerupTime

    number

    min

    184996

    Not present in detail level 1 messages

    rotationCount

    number

    2

    rotationLeft

    number

    1

    Only present in detail level 3 messages

    rotationRight

    number

    3

    Only present in detail level 3 messages

    sabotaged

    boolean

    false

    settingsCRC

    string

    "42b5"

    Not present in detail level 1 messages

    temperature

    number

    Cel

    24.3

    transmissionTime

    number

    s

    67

    Not present in detail level 1 messages

    Name: deviceControl
    • Value: Reset (translates into → 0200)

    • Value: NFC_Write (translates into → 1B11FA1816)

    + LoRa Geolocation data

    19e12863-ad65-4fb7-a812-e6744be290d0

    Add LoRa Geolocation data to messages where location could be calculated.

    + Location by LoRa On Premises Gateway reception

    fa3928a9-8217-48a1-a3a6-1dcc945b4bb3

    Add location data to messages that are received by known LoRa On Premise Gateways.

    › Decoded payload for Asset Tracking

    040627e5-0254-45ca-a0e1-cafab4c8b775

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    › Decoded payload for Asset Tracking (v2)

    1e530f69-1c43-54da-bc77-f3508486c21e

    ‹ Encoded device commands

    9935fa32-6915-4fe9-b864-37e9913a97f9

    Set the device mode and enabling of nfc writes.

    locOrigin

    string

    KPNLORA

    indicates the origin of the location data

    latitude

    numeric

    51.79

    longitude

    nfcFieldDetected

    boolean

    false

    acceleratorActive

    boolean

    true

    sabotaged

    acceleratorActive

    boolean

    true

    alarmMode

    boolean

    true

    acceleratorActive

    boolean

    alarmMode

    boolean

    batteryVoltage

    number

    V

    firmwareCRC

    string

    acceleratorActive

    boolean

    true

    alarmMode

    boolean

    false

    LoRa Geolocation
    LoRa On Premise Gateways
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    numeric

    boolean

    batteryVoltage

    batteryVoltage

    [
      {
        "bn": "urn:dev:DEVEUI:A41163C212345678:",
        "bt": 1637165561
      },
      {
        "n": "locOrigin",
        "vs": "KPNLORA"
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 51.794884
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.687986
      },
      {
        "n": "radius",
        "u": "m",
        "v": 319.730194
      },
      {
        "n": "locAccuracy",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locPrecision",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locTime",
        "vs": "1637165561192"
      }
    ]
    [
    	{
    		"bn": "urn:dev:DEVEUI:7CC6C43012345678:",
    		"bt": 1678778476
    	},
    	{
    		"n": "nfcFieldDetected",
    		"vb": false
    	},
    	{
    		"n": "acceleratorActive",
    		"vb": true
    	},
    	{
    		"n": "sabotaged",
    		"vb": false
    	},
    	{
    		"n": "movementIndication",
    		"vs": "STATIONARY"
    	},
    	{
    		"n": "alarmMode",
    		"vb": false
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 2.96
    	},
    	{
    		"n": "motionTime",
    		"u": "min",
    		"v": 39981.0
    	},
    	{
    		"n": "temperature",
    		"u": "Cel",
    		"v": 15.0
    	},
    	{
    		"n": "timeOrigin",
    		"u": "enum",
    		"vs": "NETWORK"
    	}
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "nfcFieldDetected",
            "vb": false
        },
        {
            "n": "acceleratorActive",
            "vb": true
        },
        {
            "n": "sabotaged",
            "vb": true
        },
        {
            "n": "movementIndication",
            "vs": "START"
        },
        {
            "n": "alarmMode",
            "vb": true
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 2.96
        },
        {
            "n": "motionTime",
            "u": "min",
            "v": 22756
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": -8
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "nfcFieldDetected",
            "vb": false
        },
        {
            "n": "acceleratorActive",
            "vb": true
        },
        {
            "n": "sabotaged",
            "vb": false
        },
        {
            "n": "movementIndication",
            "vs": "STATIONARY"
        },
        {
            "n": "alarmMode",
            "vb": false
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.01
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 1
        },
        {
            "n": "firmwareVersion",
            "vs": "06a9"
        },
        {
            "n": "firmwareCRC",
            "vs": "ac01"
        },
        {
            "n": "settingsCRC",
            "vs": "ec36"
        },
        {
            "n": "nfcState",
            "vs": "NFC_READ_ONLY"
        },
        {
            "n": "motionTime",
            "u": "min",
            "v": 18418
        },
        {
            "n": "powerupTime",
            "u": "min",
            "v": 1156219
        },
        {
            "n": "transmissionTime",
            "u": "s",
            "v": 4142
        },
        {
            "n": "nrOfLoraTransmissions",
            "v": 3255
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "nfcFieldDetected",
            "vb": false
        },
        {
            "n": "acceleratorActive",
            "vb": true
        },
        {
            "n": "sabotaged",
            "vb": false
        },
        {
            "n": "movementIndication",
            "vs": "STATIONARY"
        },
        {
            "n": "alarmMode",
            "vb": false
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.03
        },
        {
            "n": "rotationCount",
            "v": 2.0
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": -24.0
        },
        {
            "n": "firmwareVersion",
            "vs": "06b0"
        },
        {
            "n": "firmwareCRC",
            "vs": "3407"
        },
        {
            "n": "settingsCRC",
            "vs": "42b5"
        },
        {
            "n": "nfcState",
            "vs": "NFC_READ_ONLY"
        },
        {
            "n": "powerupTime",
            "u": "min",
            "v": 184996.0
        },
        {
            "n": "transmissionTime",
            "u": "s",
            "v": 67.0
        },
        {
            "n": "nrOfLoraTransmissions",
            "v": 27.0
        },
        {
            "n": "rotationLeft",
            "v": 1.0
        },
        {
            "n": "rotationRight",
            "v": 3.0
        },
        {
            "n": "orientationX",
            "v": 21.0
        },
        {
            "n": "orientationY",
            "v": 7.0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]

    KPN Conditionsensor CO2 II

    KPN Conditionsensor CO2 II

    Also known as Elsys ERS device. A Smart Building Sensor for indoor environment monitoring.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-conditionsensor-co2-ii

    • Device Specification UUID: 1dafa763-a81c-4452-a593-0517cd55e4d0

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    › Decoded payload for environment monitoring

    Decoder for v9 Elsys ERS payload.

    Expected SenML records

    name
    type
    unit

    hashtag
    › Decoded payload for environment monitoring (v2)

    Decoder for Elsys ERS payloads. Fixes bugs in '› Decoded payload for environment monitoring':

    • distance was incorrectly converted to dm instead of m. Now the containing value is in meters.

    • soundAverage was decoded incorrectly, resulting in a number that is way too large.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    Long payload

    Short payload

    hashtag
    ‹ Encoded device commands

    • Protocol: LoRa downlink

    • Description: Set the send interval and reboot, or let device calibrate CO2 Sensor.

    • Multiple commands in one downlink: Yes

    Input mapping:

    • Name: interval

      • Value: 5m (translates into → 3E06140000012CFE)

    accelerationZ

    number

    m/s2

    analog1

    number

    V

    analog2

    number

    V

    batteryVoltage

    number

    V

    digitalExternal

    boolean

    digitalIn2

    boolean

    distance

    number

    m

    grideye

    number

    Cel

    grideye0-0

    number

    Cel

    grideye0-1

    number

    Cel

    grideye0-2

    number

    Cel

    grideye0-3

    number

    Cel

    grideye0-4

    number

    Cel

    grideye0-5

    number

    Cel

    grideye0-6

    number

    Cel

    grideye0-7

    number

    Cel

    grideye1-0

    number

    Cel

    grideye1-1

    number

    Cel

    grideye1-2

    number

    Cel

    grideye1-3

    number

    Cel

    grideye1-4

    number

    Cel

    grideye1-5

    number

    Cel

    grideye1-6

    number

    Cel

    grideye1-7

    number

    Cel

    grideye2-0

    number

    Cel

    grideye2-1

    number

    Cel

    grideye2-2

    number

    Cel

    grideye2-3

    number

    Cel

    grideye2-4

    number

    Cel

    grideye2-5

    number

    Cel

    grideye2-6

    number

    Cel

    grideye2-7

    number

    Cel

    grideye3-0

    number

    Cel

    grideye3-1

    number

    Cel

    grideye3-2

    number

    Cel

    grideye3-3

    number

    Cel

    grideye3-4

    number

    Cel

    grideye3-5

    number

    Cel

    grideye3-6

    number

    Cel

    grideye3-7

    number

    Cel

    grideye4-0

    number

    Cel

    grideye4-1

    number

    Cel

    grideye4-2

    number

    Cel

    grideye4-3

    number

    Cel

    grideye4-4

    number

    Cel

    grideye4-5

    number

    Cel

    grideye4-6

    number

    Cel

    grideye4-7

    number

    Cel

    grideye5-0

    number

    Cel

    grideye5-1

    number

    Cel

    grideye5-2

    number

    Cel

    grideye5-3

    number

    Cel

    grideye5-4

    number

    Cel

    grideye5-5

    number

    Cel

    grideye5-6

    number

    Cel

    grideye5-7

    number

    Cel

    grideye6-0

    number

    Cel

    grideye6-1

    number

    Cel

    grideye6-2

    number

    Cel

    grideye6-3

    number

    Cel

    grideye6-4

    number

    Cel

    grideye6-5

    number

    Cel

    grideye6-6

    number

    Cel

    grideye6-7

    number

    Cel

    grideye7-0

    number

    Cel

    grideye7-1

    number

    Cel

    grideye7-2

    number

    Cel

    grideye7-3

    number

    Cel

    grideye7-4

    number

    Cel

    grideye7-5

    number

    Cel

    grideye7-6

    number

    Cel

    grideye7-7

    number

    Cel

    humidity

    number

    %RH

    illuminance

    number

    lx

    lattitude

    number

    lat

    longitude

    number

    lon

    motion

    number

    count

    occupancy

    number

    count

    pressure

    number

    Pa

    pulse

    number

    count

    pulseAbsolute

    number

    count

    pulseAbsolute2

    number

    count

    soundAverage

    number

    dB

    soundPeak

    number

    dB

    temperature

    number

    Cel

    temperatureExternal1

    number

    Cel

    temperatureExternal2

    number

    Cel

    temperatureIRExternal

    number

    Cel

    temperatureIRInternal

    number

    Cel

    waterLeak

    number

    count

    soundPeak was decoded incorrectly, resulting in a number that is way too large.
  • The grideye fields were decoded incorrectly, where most results would be too big.

  • Time offsets were added as positive ts instead of negative ts.

  • acceleration values were processed as unsigned values, but they should have been processed as signed values.

  • number

    m/s2

    13.231194444444442

    analog1

    number

    V

    35.124

    External analog input voltage

    analog2

    number

    V

    49.287

    batteryVoltage

    number

    V

    3.596

    CO2Concentration

    number

    ppm

    638

    CO2

    number

    ppm

    638

    contains the same value as CO2Concentration and is included for backwards compatibility

    digitalExternal

    boolean

    false

    digitalIn2

    boolean

    false

    distance

    number

    m

    261.42

    grideye0-0

    number

    Cel

    21.234

    All the grideye fields combined make up the room infrared temperature.

    grideye0-1

    number

    Cel

    grideye0-2

    number

    Cel

    grideye0-3

    number

    Cel

    grideye0-4

    number

    Cel

    grideye0-5

    number

    Cel

    grideye0-6

    number

    Cel

    grideye0-7

    number

    Cel

    grideye1-0

    number

    Cel

    grideye1-1

    number

    Cel

    grideye1-2

    number

    Cel

    grideye1-3

    number

    Cel

    grideye1-4

    number

    Cel

    grideye1-5

    number

    Cel

    grideye1-6

    number

    Cel

    grideye1-7

    number

    Cel

    grideye2-0

    number

    Cel

    grideye2-1

    number

    Cel

    grideye2-2

    number

    Cel

    grideye2-3

    number

    Cel

    grideye2-4

    number

    Cel

    grideye2-5

    number

    Cel

    grideye2-6

    number

    Cel

    grideye2-7

    number

    Cel

    grideye3-0

    number

    Cel

    grideye3-1

    number

    Cel

    grideye3-2

    number

    Cel

    grideye3-3

    number

    Cel

    grideye3-4

    number

    Cel

    grideye3-5

    number

    Cel

    grideye3-6

    number

    Cel

    grideye3-7

    number

    Cel

    grideye4-0

    number

    Cel

    grideye4-1

    number

    Cel

    grideye4-2

    number

    Cel

    grideye4-3

    number

    Cel

    grideye4-4

    number

    Cel

    grideye4-5

    number

    Cel

    grideye4-6

    number

    Cel

    grideye4-7

    number

    Cel

    grideye5-0

    number

    Cel

    grideye5-1

    number

    Cel

    grideye5-2

    number

    Cel

    grideye5-3

    number

    Cel

    grideye5-4

    number

    Cel

    grideye5-5

    number

    Cel

    grideye5-6

    number

    Cel

    grideye5-7

    number

    Cel

    grideye6-0

    number

    Cel

    grideye6-1

    number

    Cel

    grideye6-2

    number

    Cel

    grideye6-3

    number

    Cel

    grideye6-4

    number

    Cel

    grideye6-5

    number

    Cel

    grideye6-6

    number

    Cel

    grideye6-7

    number

    Cel

    grideye7-0

    number

    Cel

    grideye7-1

    number

    Cel

    grideye7-2

    number

    Cel

    grideye7-3

    number

    Cel

    grideye7-4

    number

    Cel

    grideye7-5

    number

    Cel

    grideye7-6

    number

    Cel

    grideye7-7

    number

    Cel

    humidity

    number

    %RH

    34

    illuminance

    number

    lx

    56273

    motion

    number

    count

    5

    Number of detected PIR motions

    occupancy

    number

    count

    0

    0: No detection 1: Entering/leaving 2:Occupied

    pressure

    number

    Pa

    102900

    pulse

    number

    count

    Relative value, reset every transmission

    Pulse2

    number

    count

    Relative value, reset every transmission

    pulseAbsolute

    number

    count

    Absolute value, never reset

    pulseAbsolute2

    number

    count

    Absolute value, never reset

    soundAverage

    number

    dB

    42

    soundPeak

    number

    dB

    80

    temperature

    number

    Cel

    23.5

    temperatureExternal1

    number

    Cel

    temperatureExternal2

    number

    Cel

    temperatureIRExternal

    number

    Cel

    24.9

    temperatureIRInternal

    number

    Cel

    23.3

    waterLeak

    number

    count

    Value: 10m (translates into → 3E061400000258FE)
  • Value: 15m (translates into → 3E061400000384FE)

  • Name: calibrateCO2

    • Value: nowWithABC (translates into → 3E031201FE)

    • Value: nowWithoutABC (translates into → 3E031203FE)

    • Value: autoOn (translates into → 3E031200FE)

    • Value: autoOff (translates into → 3E031202FE)

  • Name: nfcLockPrefix

    • Value: set (translates into → 3E0620)

  • Name: nfcLockPincode (raw input)

  • Name: nfcLockPostfix

    • Value: set (translates into → FE)

  • Name: nfcUnlock

    • Value: now (translates into → 3E062000000000FE)

  • + LoRa Geolocation data

    cd23156d-6b57-42fd-b6f5-ecacd6c9bcb1

    Add LoRa Geolocation data to messages where location could be calculated.

    › Decoded payload for environment monitoring

    0645c267-8879-4e5f-82ee-1aec1b57c5c3

    Decoder for v9 Elsys ERS payload.

    › Decoded payload for environment monitoring (v2)

    755d7ac5-7318-5285-95e8-e3324e17ff88

    Decoder for Elsys ERS payloads. Fixes bugs in '› Decoded payload for environment monitoring'

    ‹ Encoded device commands

    ad77f15c-5ddb-4339-8856-d3bdc4606e08

    Set the send interval and reboot, or let device calibrate CO2 Sensor.

    CO2Concentration

    number

    ppm

    Pulse2

    number

    count

    accelerationX

    number

    m/s2

    accelerationY

    number

    m/s2

    accelerationX

    number

    m/s2

    0.31132222222222217

    accelerationY

    number

    m/s2

    15.566111111111107

    LoRa Geolocation
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    accelerationZ

    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "temperature",
            "t": -16,
            "u": "Cel",
            "v": 21
        },
        {
            "n": "humidity",
            "t": -10,
            "u": "%RH",
            "v": 32
        },
        {
            "n": "accelerationX",
            "u": "m/s2",
            "v": 0.15566111111111108
        },
        {
            "n": "accelerationY",
            "u": "m/s2",
            "v": 0.31132222222222217
        },
        {
            "n": "accelerationZ",
            "u": "m/s2",
            "v": 0.46698333333333325
        },
        {
            "n": "illuminance",
            "u": "lx",
            "v": 354
        },
        {
            "n": "CO2Concentration",
            "u": "ppm",
            "v": 478
        },
        {
            "n": "CO2",
            "u": "ppm",
            "v": 478
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.245
        },
        {
            "n": "analog1",
            "u": "V",
            "v": 57.071
        },
        {
            "n": "pulse",
            "u": "count",
            "v": 61438
        },
        {
            "n": "pulseAbsolute",
            "u": "count",
            "v": 2144202751
        },
        {
            "n": "temperatureExternal1",
            "u": "Cel",
            "v": 21.7
        },
        {
            "n": "digitalExternal",
            "vb": true
        },
        {
            "n": "distance",
            "u": "m",
            "v": 4.643
        },
        {
            "n": "motion",
            "u": "count",
            "v": 255
        },
        {
            "n": "temperatureIRInternal",
            "u": "Cel",
            "v": 24.5
        },
        {
            "n": "temperatureIRExternal",
            "u": "Cel",
            "v": 23
        },
        {
            "n": "occupancy",
            "u": "count",
            "v": 2
        },
        {
            "n": "waterLeak",
            "u": "count",
            "v": 0
        },
        {
            "n": "grideye0-0",
            "u": "Cel",
            "v": 16
        },
        {
            "n": "grideye1-0",
            "u": "Cel",
            "v": 16.1
        },
        {
            "n": "grideye2-0",
            "u": "Cel",
            "v": 16.2
        },
        {
            "n": "grideye3-0",
            "u": "Cel",
            "v": 16.3
        },
        {
            "n": "grideye4-0",
            "u": "Cel",
            "v": 16.4
        },
        {
            "n": "grideye5-0",
            "u": "Cel",
            "v": 16.5
        },
        {
            "n": "grideye6-0",
            "u": "Cel",
            "v": 16.6
        },
        {
            "n": "grideye7-0",
            "u": "Cel",
            "v": 16.7
        },
        {
            "n": "grideye0-1",
            "u": "Cel",
            "v": 16.8
        },
        {
            "n": "grideye1-1",
            "u": "Cel",
            "v": 16.9
        },
        {
            "n": "grideye2-1",
            "u": "Cel",
            "v": 17
        },
        {
            "n": "grideye3-1",
            "u": "Cel",
            "v": 17.1
        },
        {
            "n": "grideye4-1",
            "u": "Cel",
            "v": 17.2
        },
        {
            "n": "grideye5-1",
            "u": "Cel",
            "v": 17.3
        },
        {
            "n": "grideye6-1",
            "u": "Cel",
            "v": 17.4
        },
        {
            "n": "grideye7-1",
            "u": "Cel",
            "v": 17.5
        },
        {
            "n": "grideye0-2",
            "u": "Cel",
            "v": 17.6
        },
        {
            "n": "grideye1-2",
            "u": "Cel",
            "v": 17.7
        },
        {
            "n": "grideye2-2",
            "u": "Cel",
            "v": 17.8
        },
        {
            "n": "grideye3-2",
            "u": "Cel",
            "v": 17.9
        },
        {
            "n": "grideye4-2",
            "u": "Cel",
            "v": 18
        },
        {
            "n": "grideye5-2",
            "u": "Cel",
            "v": 18.1
        },
        {
            "n": "grideye6-2",
            "u": "Cel",
            "v": 18.2
        },
        {
            "n": "grideye7-2",
            "u": "Cel",
            "v": 18.3
        },
        {
            "n": "grideye0-3",
            "u": "Cel",
            "v": 18.4
        },
        {
            "n": "grideye1-3",
            "u": "Cel",
            "v": 18.5
        },
        {
            "n": "grideye2-3",
            "u": "Cel",
            "v": 18.6
        },
        {
            "n": "grideye3-3",
            "u": "Cel",
            "v": 18.7
        },
        {
            "n": "grideye4-3",
            "u": "Cel",
            "v": 18.8
        },
        {
            "n": "grideye5-3",
            "u": "Cel",
            "v": 18.9
        },
        {
            "n": "grideye6-3",
            "u": "Cel",
            "v": 19
        },
        {
            "n": "grideye7-3",
            "u": "Cel",
            "v": 19.1
        },
        {
            "n": "grideye0-4",
            "u": "Cel",
            "v": 19.2
        },
        {
            "n": "grideye1-4",
            "u": "Cel",
            "v": 19.3
        },
        {
            "n": "grideye2-4",
            "u": "Cel",
            "v": 19.4
        },
        {
            "n": "grideye3-4",
            "u": "Cel",
            "v": 19.5
        },
        {
            "n": "grideye4-4",
            "u": "Cel",
            "v": 19.6
        },
        {
            "n": "grideye5-4",
            "u": "Cel",
            "v": 19.7
        },
        {
            "n": "grideye6-4",
            "u": "Cel",
            "v": 19.8
        },
        {
            "n": "grideye7-4",
            "u": "Cel",
            "v": 19.9
        },
        {
            "n": "grideye0-5",
            "u": "Cel",
            "v": 20
        },
        {
            "n": "grideye1-5",
            "u": "Cel",
            "v": 20.1
        },
        {
            "n": "grideye2-5",
            "u": "Cel",
            "v": 20.2
        },
        {
            "n": "grideye3-5",
            "u": "Cel",
            "v": 20.3
        },
        {
            "n": "grideye4-5",
            "u": "Cel",
            "v": 20.4
        },
        {
            "n": "grideye5-5",
            "u": "Cel",
            "v": 20.5
        },
        {
            "n": "grideye6-5",
            "u": "Cel",
            "v": 20.6
        },
        {
            "n": "grideye7-5",
            "u": "Cel",
            "v": 20.7
        },
        {
            "n": "grideye0-6",
            "u": "Cel",
            "v": 20.8
        },
        {
            "n": "grideye1-6",
            "u": "Cel",
            "v": 20.9
        },
        {
            "n": "grideye2-6",
            "u": "Cel",
            "v": 21
        },
        {
            "n": "grideye3-6",
            "u": "Cel",
            "v": 21.1
        },
        {
            "n": "grideye4-6",
            "u": "Cel",
            "v": 21.2
        },
        {
            "n": "grideye5-6",
            "u": "Cel",
            "v": 21.3
        },
        {
            "n": "grideye6-6",
            "u": "Cel",
            "v": 21.4
        },
        {
            "n": "grideye7-6",
            "u": "Cel",
            "v": 21.5
        },
        {
            "n": "grideye0-7",
            "u": "Cel",
            "v": 21.6
        },
        {
            "n": "grideye1-7",
            "u": "Cel",
            "v": 21.7
        },
        {
            "n": "grideye2-7",
            "u": "Cel",
            "v": 21.8
        },
        {
            "n": "grideye3-7",
            "u": "Cel",
            "v": 21.9
        },
        {
            "n": "grideye4-7",
            "u": "Cel",
            "v": 22
        },
        {
            "n": "grideye5-7",
            "u": "Cel",
            "v": 22.1
        },
        {
            "n": "grideye6-7",
            "u": "Cel",
            "v": 22.2
        },
        {
            "n": "grideye7-7",
            "u": "Cel",
            "v": 22.3
        },
        {
            "n": "pressure",
            "u": "Pa",
            "v": 27054496
        },
        {
            "n": "soundPeak",
            "u": "dB",
            "v": 64
        },
        {
            "n": "soundAverage",
            "u": "dB",
            "v": 40
        },
        {
            "n": "Pulse2",
            "u": "count",
            "v": 235
        },
        {
            "n": "pulseAbsolute2",
            "u": "count",
            "v": 122
        },
        {
            "n": "analog2",
            "u": "V",
            "v": 17.767
        },
        {
            "n": "temperatureExternal2",
            "u": "Cel",
            "v": 28.1
        },
        {
            "n": "digitalIn2",
            "vb": true
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1704798016.891,
            "v": 17,
            "n": "temperature",
            "u": "Cel"
        },
        {
            "v": 32,
            "n": "humidity",
            "u": "%RH"
        },
        {
            "v": 262,
            "n": "illuminance",
            "u": "lx"
        },
        {
            "v": 1391,
            "n": "CO2Concentration",
            "u": "ppm"
        },
        {
            "v": 1391,
            "n": "CO2",
            "u": "ppm"
        },
        {
            "v": 3.607,
            "n": "batteryVoltage",
            "u": "V"
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]

    KPN LocationTag II v2 Expert Mode

    KPN LocationTag II v2 Expert Mode

    Tag for localization and movement monitoring. Revision of KPN LocationTag II. Added functionality NFC and FSK. Expert Mode: configurable lifebeat and accelerometers sensitivity.

    • Supported network type(s): KPNLORA

    • Device Specification ID: kpn-locationtag-ii-v2-expert-mode

    • Device Specification UUID: 1a1fc7f4-e6b5-4e36-ad09-60624cae6774

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML-message

    This location info can be merged with the payload of the device

    hashtag
    + Location by LoRa On Premises Gateway reception

    Add location data to messages that are received by known .

    hashtag
    Expected SenML outputs

    See above. Output is comparable to LoRa Geolocation data.

    hashtag
    › Decoded payload for Asset Tracking

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML-message - detail level 1

    hashtag
    › Decoded payload for Asset Tracking (v2)

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    Short payload

    Long payload

    hashtag
    › Decoded payload for counting rotations

    Decoder outputting general information and specific rotation and orientation data

    hashtag
    Expected SenML outputs

    name
    type/unit
    example
    description

    hashtag
    Example SenML-message - detail level 1

    hashtag
    Example SenML-message - detail level 2

    hashtag
    Example SenML-message - detail level 3

    hashtag
    › Decoded payload for counting rotations (v2)

    Decoder outputting general information and specific rotation and orientation data

    Fixes from '› Decoded payload for counting rotations':

    • For the field nfcState, the values"NFC_READ_ONLY" & "NFC_OFF" were swapped.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    ‹ Encoded device commands

    • Protocol: LoRa downlink

    • Description: Set the device mode and enabling of nfc writes.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: mode

      • Value: Missing (translates into → 1A7A10008D2700008D27722C008D2700008D27118000000080000000)

    Digital Matter

    Digital Matter has a broad range of both wired and battery powered GPS trackers.

    circle-info

    All types are supported by the same decoder. Therefore there's no specific page per device type. However not every message and field is decoded for each type and not every device is able to generate every field.

    circle-exclamation

    › Decoded payload for counting rotations

    bd154000-0384-4bec-9e66-8edf4dcaeaf3

    Decoder outputting general information and specific rotation and orientation data

    › Decoded payload for counting rotations (v2)

    ac0b8a25-bd54-57d1-9de5-e9f2a6acb97b

    Decoder outputting general information and specific rotation and orientation data

    4.68

    radius

    m

    319

    locAccuracy

    %

    locPrecision

    %

    locTime

    timestamp

    1637165561

    false

    movementIndication

    string

    STATIONARY

    indicates the devices movement status (STOP, STATIONARY, START, MOVING)

    alarmMode

    boolean

    false

    batteryVoltage

    V

    3.5

    motionTime

    min

    2

    temperature

    Cel

    21.0

    firmwareVersion

    not present in detail level 1 messages

    firmwareCRC

    not present in detail level 1 messages

    settingsCRC

    not present in detail level 1 messages

    nfcState

    not present in detail level 1 messages

    RESERVED, NFC_READ_ONLY, NFC_OFF, NFC_RW

    powerupTime

    min

    not present in detail level 1 messages

    transmissionTime

    s

    not present in detail level 1 messages

    nrOfLoraTransmissions

    not present in detail level 1 messages

    timeOrigin

    string

    NETWORK

    indicates the origin of the timestamp

    number

    V

    3.56

    firmwareCRC

    string

    "9e17"

    Only sent in long payload messages

    firmwareVersion

    string

    "0604"

    Only sent in long payload messages

    motionTime

    number

    min

    142271.0

    movementIndication

    string

    "STOP"

    Indicates the devices movement status. Either "STOP, "STATIONARY", "START" or "MOVING"

    nfcFieldDetected

    boolean

    true

    nfcState

    string

    "RESERVED"

    Only sent in long payload messages. Either "RESERVED", "NFC_READ_ONLY", "NFC_OFF", or "NFC_RW"

    nrOfLoraTransmissions

    number

    7427.0

    Only sent in long payload messages

    powerupTime

    number

    min

    1334707

    Only sent in long payload messages

    sabotaged

    boolean

    true

    settingsCRC

    string

    "a3e5"

    Only sent in long payload messages

    temperature

    number

    Cel

    23.432

    transmissionTime

    number

    s

    5180

    Only sent in long payload messages

    false

    movementIndication

    string

    STATIONARY

    indicates the devices movement status (STOP, STATIONARY, START, MOVING)

    alarmMode

    boolean

    false

    batteryVoltage

    V

    3.5

    rotationCount

    numeric

    277

    temperature

    Cel

    21.0

    firmwareVersion

    not present in detail level 1 messages

    firmwareCRC

    not present in detail level 1 messages

    settingsCRC

    not present in detail level 1 messages

    nfcState

    string

    not present in detail level 1 messages

    RESERVED, NFC_READ_ONLY, NFC_OFF, NFC_RW

    powerupTime

    min

    not present in detail level 1 messages

    transmissionTime

    s

    not present in detail level 1 messages

    nrOfLoraTransmissions

    numeric

    not present in detail level 1 messages

    rotationLeft

    numeric

    only present in detail level 3 messages

    rotationRight

    numeric

    only present in detail level 3 messages

    orientationX

    numeric

    only present in detail level 3 messages

    orientationY

    numeric

    only present in detail level 3 messages

    timeOrigin

    string

    NETWORK

    indicates the origin of the timestamp

    number

    V

    3.03

    firmwareCRC

    string

    "3407"

    Not present in detail level 1 messages

    firmwareVersion

    string

    "06b0"

    Not present in detail level 1 messages

    movementIndication

    string

    "STATIONARY"

    Indicates the devices movement status. Either "STOP", "STATIONARY", "START" or "MOVING"

    nfcFieldDetected

    boolean

    false

    nfcState

    string

    "NFC_READ_ONLY"

    Not present in detail level 1 messages. Either "RESERVED", "NFC_READ_ONLY", "NFC_OFF" or "NFC_RW"

    nrOfLoraTransmissions

    number

    27

    Not present in detail level 1 messages

    orientationX

    number

    21

    Only present in detail level 3 messages

    orientationY

    number

    7

    Only present in detail level 3 messages

    powerupTime

    number

    min

    184996

    Not present in detail level 1 messages

    rotationCount

    number

    2

    rotationLeft

    number

    1

    Only present in detail level 3 messages

    rotationRight

    number

    3

    Only present in detail level 3 messages

    sabotaged

    boolean

    false

    settingsCRC

    string

    "42b5"

    Not present in detail level 1 messages

    temperature

    number

    Cel

    24.3

    transmissionTime

    number

    s

    67

    Not present in detail level 1 messages

    Name: deviceControl
    • Value: Reset (translates into → 0200)

    • Value: NFC_Write (translates into → 1B11FA1816)

    • Value: 8 uur lifebeat interval. Warning: only send to TAG IIv2 start/stop configurations. (translates into → 1B8108807000008070000016)

    • Value: 12 uur lifebeat interval. Warning: only send to TAG IIv2 start/stop configurations. (translates into → 1B8108C0A80000C0A8000016)

    • Value: 24 uur lifebeat interval. Warning: only send to TAG IIv2 start/stop configurations. (default) (translates into → 1B8108805101008051010016)

    • Value: Set moving sensitivity to 5. Warning: only send to TAG IIv2 start/stop configurations. (default) (translates into → 1B14470516)

    • Value: Set moving sensitivity to 6. Warning: only send to TAG IIv2 start/stop configurations. (translates into → 1B14470616)

    • Value: Set moving sensitivity to 7. Warning: only send to TAG IIv2 start/stop configurations. (translates into → 1B14470716)

    • Value: Set moving sensitivity to 8. Warning: only send to TAG IIv2 start/stop configurations. (translates into → 1B14470816)

    + LoRa Geolocation data

    f0e87fa4-49da-4433-9092-eb70ba69af82

    Add LoRa Geolocation data to messages where location could be calculated.

    + Location by LoRa On Premises Gateway reception

    d628e1d0-7ced-46da-b586-cbfb6f598a3a

    Add location data to messages that are received by known LoRa On Premise Gateways.

    › Decoded payload for Asset Tracking

    45ec6598-2abf-4fd2-afd5-b4680a97ce01

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    › Decoded payload for Asset Tracking (v2)

    0608cc3f-7136-5fde-9947-07cb11d2a60a

    ‹ Encoded device commands

    a9c437e4-cdda-4a30-911f-c359fa16b598

    Set the device mode and enabling of nfc writes.

    locOrigin

    string

    KPNLORA

    indicates the origin of the location data

    latitude

    numeric

    51.79

    longitude

    nfcFieldDetected

    boolean

    false

    acceleratorActive

    boolean

    true

    sabotaged

    acceleratorActive

    boolean

    true

    alarmMode

    boolean

    true

    nfcFieldDetected

    boolean

    false

    acceleratorActive

    boolean

    true

    sabotaged

    acceleratorActive

    boolean

    true

    alarmMode

    boolean

    false

    LoRa Geolocation
    LoRa On Premise Gateways
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    Decoder for Streamline LoRa short and long payloads containing a.o. NFC field detected flag, sabotaged flag, motion status, and battery voltage. Long payloads also contain a.o. firmware, power up, and transmission time.

    numeric

    boolean

    batteryVoltage

    boolean

    batteryVoltage

    Currently KPN does not support adding your own Digital Matter devices.
    • Supported network type(s): KPNM2M

    • Device Specification ID: digital-matter

    • Device Specification UUID: 3cd3d4cd-1eb5-42ed-8ed0-6be9160f8b6d

    Decoders
    decoderSpecificationUUID
    Description

    Digital Matter

    25179211-a3b6-567f-ad9a-f9a83ac0a17e

    Decoder for Digital Matter devices.

    Digital Matter Debugging

    48b93005-1719-599d-8f43-c56471c8c644

    Decoder for Digital Matter devices with extra debug information

    hashtag
    Decoded Data for Digital Matter

    Decoder for Digital Matter devices.

    Digital Matter devices have a flexible message layout. Depending on the device-type, the device configuration and state at a given time some SenML records may be present or not.

    The message includes blocks of SenML records that are named with a prefix. In some cases, a block of SenML records is sent multiple times within a message. When this occurs, an index is included in the record name.

    For example, in the case of a Wi-Fi scan result, the signal strength of each scanned Wi-Fi access point is sent, and the names of the records are made unique using an index (wifiscan:macs:<index>:signalStrength), with an index of 0 for the first Wi-Fi scan result. The corresponding MAC address can then be found in another SenML record with the same prefix (wifiscan:macs:<index>:mac).

    hashtag
    Implementation considerations

    • SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about Understanding and Interpreting SenML Data.

    • Devices may output different types of information depending on their type and configuration. Not all the details below may apply to every device.

    • Digital Matter devices can generate a large volume of data, which may result in the output being split across multiple messages at the destination. To handle this correctly, the receiving system may need a buffering mechanism to combine these messages into a single logical unit.

    • Devices supporting multiple localization methods (e.g., GPS and WiFi) might report both. To determine which is more recent, compare the gps:timestamp with the ts of the WiFi data. Since devices always send their last known GPS location, the gps:timestamp reflects when the GPS fix was obtained, while the message ts shows when it was sent.

    • If both GPS and WiFi data have recent timestamps, use the radius field to compare their accuracy.

    • Sometimes it's not possible to resolve the WiFi access points to a reliable location. We make this transparent through the extLocationResolveStatusCode.

    • When multiple devices scan for Bluetooth tags, they may report the same tag. If it's important to establish a relationship between a specific device and a tag, implement logic to determine which device should be associated with which tag.

    hashtag
    Generic Data

    All messages contain fields that identify the device, indicate the timestamp and the message sequence number.

    name
    type
    unit
    example
    description

    timeOrigin

    string

    Can be 'DEVICE' if the timestamp in this record is originated by the device or 'NETWORK'

    sequenceNumber

    number

    count

    Contains the messages record number that is incremented for a group of records within the message

    Example:

    hashtag
    GPS Data (gps:)

    name
    type
    unit
    example
    description

    gps:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    gps:time

    number

    1724758046

    Seconds since 1/1/1970

    Example:

    hashtag
    Digital Data (digitalData:)

    name
    type
    unit
    example
    description

    digitalData:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    digitalData:inputs

    string

    01010001...

    Bitstring of 32 bits

    Example:

    hashtag
    Analogue Data (analogueData:)

    name
    type
    unit
    example
    description

    analogueData:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    analogueData:internalBatteryVoltage

    number

    V

    3.3

    Example:

    hashtag
    WiFi Location Scan (wifiscan:)

    name
    type
    unit
    example
    description

    wifiscan:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    wifiscan:macs:<index>:mac

    string

    001122334455

    The mac address of the Wifi Access Point

    Example:

    hashtag
    Cell Tower Scan (celltowerscan:)

    Some Digital Matter devices are capable of scanning for nearby cell towers. This data can be combined with other information to approximate the current location of the device. When the device provides a cell tower scan report, the decoder will generate SenML records similar to the following:

    name
    type
    unit
    example
    description

    celltowerscan:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    celltowerscan:<index>:cellId

    string

    123456789

    Cell ID

    Example:

    hashtag
    Bluetooth Tag List (tag:)

    There are many types of Bluetooth tags (vendors of tags), and depending on the tag type, records may or may not be present in the device messages. For the following tag types, all reported records are decoded:

    • Apple iBeacon

    • Eddystone

    • EddystoneTLM

    • Generic Tag

    • Teltonika Eye Beacon / Sensor (reported as Teltonika Eye Beacon)

    • Digital Matter beacon format (reported as Guppy)

    This list may be extended in future versions of the decoder. For these tags, the following SenML records are forwarded:

    name
    type
    unit
    example
    tag-types
    description

    tag:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    tag:<index>:tagLogReason

    string

    Example:

    For the other tag types, raw data is forwarded:

    name
    type
    unit
    example
    description

    tag:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    tag:<index>:type

    string

    Ingics iBS04 Tag

    Type bluetooth tag

    Example:

    hashtag
    GNSS Location Scan (GNSSLocationScan:)

    name
    type
    unit
    example
    description

    GNSSLocationScan:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    GNSSLocationScan:data

    string

    01020304

    Undecoded data bytes, if any. Else: 'No data'

    Example:

    hashtag
    Detailed Cell Tower Scan (detailedCellTowerScan:)

    name
    type
    unit
    example
    description

    detailedCellTowerScan:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    detailedCellTowerScan:cellTowerType

    string

    CAT-M1 cell towers

    Example:

    hashtag
    WiFi resolving

    For devices that report WiFi access points, KPN Things automatically determines the corresponding geographic location. The resulting location information is then added to the SenML record. If the device is configured to fall back to cell-tower data, KPN Things will also attempt to resolve this information to a location whenever possible. In some cases, the provided data cannot be translated into a reliable position. When this occurs, the location resolution process fails, which can be identified by checking the returned status code.

    name
    type
    unit
    example
    description

    extLocationResolveStatusCode

    string

    200

    Status code of the location resolving service.

    -1 - Resolving service unavailable or insufficient input data 200 - OK 400/404 - Could not resolve location based on the input measurements 401/403/405/413/414/415/429 - Failed to resolve location, internal error 500/503 - Failed to resolve location, internal error

    latitude

    number

    lat

    Latitude as resolved

    Example:

    hashtag
    Other undecoded data

    For some fields, decoder logic has not yet been implemented but can be added in future versions. The data is forwarded as an undecoded hex string, allowing for customer-side decoding. This applies to the following fields:

    • driverOperatorID

    • sdi12DeviceIdentification

    • sdi12Measurement

    • int32AnalogueData

    • blobNotification

    • device3rdPartyAsyncMessage

    • projectCode

    • tripTypeCode

    • consoleData

    • rfTagData

    • rfTagLost

    • deviceTripTypeAndData

    • garminFmiStopResponse

    • accidentData

    • accelerometerTraceHeader

    • accelerometerTraceSamples

    • v5RFMessage

    • handHeldRadioGpsData

    • highGEvent

    • tripDistanceTripDuration

    • deviceOdometerRunHours

    • imageData

    • sdi12Measurement2

    • swarmGpsData

    • multiCellTowerScan

    • accelerometerSampleData

    • fieldId:<fieldId> (unrecognized field)

    name
    type
    unit
    example
    description

    <fieldName>:logReason

    string

    Start of trip

    Indicates a reason for reporting this data

    <fieldName>:decoded

    boolean

    false

    Flag to indicate the data has been decoded or not

    Example output for an undecoded field (specific devices only):

    [
      {
        "bn": "urn:dev:DEVEUI:A41163C212345678:",
        "bt": 1637165561
      },
      {
        "n": "locOrigin",
        "vs": "KPNLORA"
      },
      {
        "n": "latitude",
        "u": "lat",
        "v": 51.794884
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.687986
      },
      {
        "n": "radius",
        "u": "m",
        "v": 319.730194
      },
      {
        "n": "locAccuracy",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locPrecision",
        "u": "%",
        "v": 9999
      },
      {
        "n": "locTime",
        "vs": "1637165561192"
      }
    ]
    [
    	{
    		"bn": "urn:dev:DEVEUI:7CC6C43012345678:",
    		"bt": 1678779611
    	},
    	{
    		"n": "nfcFieldDetected",
    		"vb": false
    	},
    	{
    		"n": "acceleratorActive",
    		"vb": true
    	},
    	{
    		"n": "sabotaged",
    		"vb": false
    	},
    	{
    		"n": "movementIndication",
    		"vs": "STATIONARY"
    	},
    	{
    		"n": "alarmMode",
    		"vb": false
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 2.98
    	},
    	{
    		"n": "motionTime",
    		"u": "min",
    		"v": 590.0
    	},
    	{
    		"n": "temperature",
    		"u": "Cel",
    		"v": 11.0
    	},
    	{
    		"n": "timeOrigin",
    		"u": "enum",
    		"vs": "NETWORK"
    	}
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "nfcFieldDetected",
            "vb": false
        },
        {
            "n": "acceleratorActive",
            "vb": true
        },
        {
            "n": "sabotaged",
            "vb": true
        },
        {
            "n": "movementIndication",
            "vs": "START"
        },
        {
            "n": "alarmMode",
            "vb": true
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 2.96
        },
        {
            "n": "motionTime",
            "u": "min",
            "v": 22756
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": -8
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "nfcFieldDetected",
            "vb": false
        },
        {
            "n": "acceleratorActive",
            "vb": true
        },
        {
            "n": "sabotaged",
            "vb": false
        },
        {
            "n": "movementIndication",
            "vs": "STATIONARY"
        },
        {
            "n": "alarmMode",
            "vb": false
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.01
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 1
        },
        {
            "n": "firmwareVersion",
            "vs": "06a9"
        },
        {
            "n": "firmwareCRC",
            "vs": "ac01"
        },
        {
            "n": "settingsCRC",
            "vs": "ec36"
        },
        {
            "n": "nfcState",
            "vs": "NFC_READ_ONLY"
        },
        {
            "n": "motionTime",
            "u": "min",
            "v": 18418
        },
        {
            "n": "powerupTime",
            "u": "min",
            "v": 1156219
        },
        {
            "n": "transmissionTime",
            "u": "s",
            "v": 4142
        },
        {
            "n": "nrOfLoraTransmissions",
            "v": 3255
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
    	{
    		"bn": "urn:dev:DEVEUI:7CC6C43012345678:",
    		"bt": 1678779611
    	},
    	{
    		"n": "nfcFieldDetected",
    		"vb": false
    	},
    	{
    		"n": "acceleratorActive",
    		"vb": true
    	},
    	{
    		"n": "sabotaged",
    		"vb": false
    	},
    	{
    		"n": "movementIndication",
    		"vs": "STATIONARY"
    	},
    	{
    		"n": "alarmMode",
    		"vb": false
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 2.98
    	},
    	{
    		"n": "rotationCount",
    		"v": 227
    	},
    	{
    		"n": "temperature",
    		"u": "Cel",
    		"v": 11.0
    	},
    	{
    		"n": "timeOrigin",
    		"u": "enum",
    		"vs": "NETWORK"
    	}
    ]
    [
    	{
    		"bn": "urn:dev:DEVEUI:7CC6C43000010445:",
    		"bt": 1639575781
    	},
    	{
    		"n": "nfcFieldDetected",
    		"u": "enum",
    		"vb": false
    	},
    	{
    		"n": "acceleratorActive",
    		"vb": false
    	},
    	{
    		"n": "sabotaged",
    		"vb": false
    	},
    	{
    		"n": "movementIndication",
    		"u": "enum",
    		"vs": "STATIONARY"
    	},
    	{
    		"n": "alarmMode",
    		"vb": false
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 2.99
    	},
    	{
    		"n": "rotationCount",
    		"v": 227
    	},
    	{
    		"n": "temperature",
    		"u": "Cel",
    		"v": 17
    	},
    	{
    		"n": "firmwareVersion",
    		"vs": "06b0"
    	},
    	{
    		"n": "firmwareCRC",
    		"vs": "3407"
    	},
    	{
    		"n": "settingsCRC",
    		"vs": "117c"
    	},
    	{
    		"n": "nfcState",
    		"u": "enum",
    		"vs": "NFC_RW"
    	},
    	{
    		"n": "powerupTime",
    		"u": "min",
    		"v": 294794
    	},
    	{
    		"n": "transmissionTime",
    		"u": "s",
    		"v": 894
    	},
    	{
    		"n": "nrOfLoraTransmissions",
    		"v": 539
    	},
    	{
    		"n": "TIME_ORIGIN",
    		"vs": "THINGSENGINE"
    	}
    ]
    [
    	{
    		"bn": "urn:dev:DEVEUI:7CC6C43000010445:",
    		"bt": 1639571120
    	},
    	{
    		"n": "nfcFieldDetected",
    		"u": "enum",
    		"vb": false
    	},
    	{
    		"n": "acceleratorActive",
    		"vb": true
    	},
    	{
    		"n": "sabotaged",
    		"vb": false
    	},
    	{
    		"n": "movementIndication",
    		"u": "enum",
    		"vs": "STATIONARY"
    	},
    	{
    		"n": "alarmMode",
    		"vb": false
    	},
    	{
    		"n": "batteryVoltage",
    		"u": "V",
    		"v": 3
    	},
    	{
    		"n": "rotationCount",
    		"v": 227
    	},
    	{
    		"n": "temperature",
    		"u": "Cel",
    		"v": 16
    	},
    	{
    		"n": "firmwareVersion",
    		"vs": "06b0"
    	},
    	{
    		"n": "firmwareCRC",
    		"vs": "3407"
    	},
    	{
    		"n": "settingsCRC",
    		"vs": "5386"
    	},
    	{
    		"n": "nfcState",
    		"u": "enum",
    		"vs": "NFC_RW"
    	},
    	{
    		"n": "powerupTime",
    		"u": "min",
    		"v": 294725
    	},
    	{
    		"n": "transmissionTime",
    		"u": "s",
    		"v": 861
    	},
    	{
    		"n": "nrOfLoraTransmissions",
    		"v": 522
    	},
    	{
    		"n": "rotationLeft",
    		"v": 1
    	},
    	{
    		"n": "rotationRight",
    		"v": 228
    	},
    	{
    		"n": "orientationX",
    		"v": 61
    	},
    	{
    		"n": "orientationY",
    		"v": 0
    	},
    	{
    		"n": "TIME_ORIGIN",
    		"vs": "THINGSENGINE"
    	}
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "nfcFieldDetected",
            "vb": false
        },
        {
            "n": "acceleratorActive",
            "vb": true
        },
        {
            "n": "sabotaged",
            "vb": false
        },
        {
            "n": "movementIndication",
            "vs": "STATIONARY"
        },
        {
            "n": "alarmMode",
            "vb": false
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.03
        },
        {
            "n": "rotationCount",
            "v": 2.0
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": -24.0
        },
        {
            "n": "firmwareVersion",
            "vs": "06b0"
        },
        {
            "n": "firmwareCRC",
            "vs": "3407"
        },
        {
            "n": "settingsCRC",
            "vs": "42b5"
        },
        {
            "n": "nfcState",
            "vs": "NFC_READ_ONLY"
        },
        {
            "n": "powerupTime",
            "u": "min",
            "v": 184996.0
        },
        {
            "n": "transmissionTime",
            "u": "s",
            "v": 67.0
        },
        {
            "n": "nrOfLoraTransmissions",
            "v": 27.0
        },
        {
            "n": "rotationLeft",
            "v": 1.0
        },
        {
            "n": "rotationRight",
            "v": 3.0
        },
        {
            "n": "orientationX",
            "v": 21.0
        },
        {
            "n": "orientationY",
            "v": 7.0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "n": "timeOrigin",
            "vs": "NETWORK",
            "bt": 1720702306,
            "bn": "urn:dev:IMEI:981157598401234:"
        },
        { "n": "timeOrigin", "vs": "DEVICE", "bt": 1720702306.924 },
        { "n": "sequenceNumber", "u": "count", "v": 24924 },
        ...
    ]
    [
        ...
        { "n": "gps:logReason", "vs": "Start of trip" },
        { "n": "gps:time", "v": 1724758046 },
        { "n": "gps:latitude", "u": "lat", "v": 51.9071025 },
        { "n": "gps:longitude", "u": "lon", "v": 4.4891488 },
        { "n": "gps:altitude", "u": "m", "v": 54 },
        { "n": "gps:speed", "u": "m/s", "v": 1 },
        { "n": "gps:speed:accuracyEstimate", "u": "m/s", "v": 0.013000000000000001 },
        { "n": "gps:heading", "u": "rad", "v": 1.5707963267948966 },
        { "n": "gps:accuracy:positionDilutionOfPrecision", "u": "/", "v": 0.5 },
        { "n": "gps:accuracy:radius", "u": "m", "v": 65 },
        { "n": "gps:fix:valid", "vb": true },
        { "n": "gps:fix:threeDimensional", "vb": true },
        { "n": "gps:fix:reused", "vb": false }
        ...
    ]
    [
        ...
        {
            "n": "digitalData:logReason",
            "vs": "Bluetooth Tag Data (update found lost reason covered in tag data)"
        },
        { "n": "digitalData:inputs", "vs": "00000000000000000000000000000000" },
        { "n": "digitalData:outputs", "vs": "0000000000000000" },
        { "n": "digitalData:flags:tripStatus", "vb": false },
        { "n": "digitalData:flags:internalBatteryGood", "vb": false },
        { "n": "digitalData:flags:externalPowerGood", "vb": false },
        { "n": "digitalData:flags:connectedToGSM", "vb": false },
        { "n": "digitalData:flags:shuntingPowerFromBattery", "vb": false },
        { "n": "digitalData:flags:externalPowerEnabled", "vb": false },
        { "n": "digitalData:flags:magnetAbsent", "vb": false },
        { "n": "digitalData:flags:recoveryModeActive", "vb": false },
        { "n": "digitalData:flags:deviceSpecificBits", "vs": "00000000" },
        ...
    ]
    [
        ...
        {
            "n": "analogueData:logReason",
            "vs": "Bluetooth Tag Data (update found lost reason covered in tag data)"
        },
        { "n": "analogueData:internalBatteryVoltage", "u": "V", "v": 4.328 },
        { "n": "analogueData:internalTemperature", "u": "Cel", "v": 24 },
        { "n": "analogueData:gsmSignalStrength", "u": "dBW", "v": -10 },
        { "n": "analogueData:loadedBatteryVoltage", "u": "V", "v": 4.308 },
        ...
    ]
    [
        ...
        { "n": "wifiscan:logReason", "vs": "Heartbeat" },
        { "n": "wifiscan:0:mac", "vs": "11aabb334455" },
        { "n": "wifiscan:0:signalStrenth", "u": "dBW", "v": -106 },
        { "n": "wifiscan:0:channel", "vs": "1" },
        ...
    ]
    [
        ...
        { "n": "celltowerscan:logReason", "vs": "Start of trip" },
        { "n": "celltowerscan:1:cellId", "vs": "123456789" },
        { "n": "celltowerscan:1:locationAreaCode", "vs": "52224" },
        { "n": "celltowerscan:1:mobileCountryCode", "vs": "999" },
        { "n": "celltowerscan:1:mobileNetworkCode", "vs": "999" },
        ...
    ]
    [
        ...
        {
            "n": "tag:logReason",
            "vs": "Bluetooth Tag Data (update found lost reason covered in tag data)"
        },
        { "n": "tag:0:tagLogReason", "vs": "Tag Found" },
        { "n": "tag:0:type", "vs": "Eddystone" },
        { "n": "tag:0:rssi", "u": "dBW", "v": -111 },
        { "n": "tag:0:mac", "vs": "11aabb334455" },
        { "n": "tag:0:txPower", "u": "dBW", "v": -60 },
        { "n": "tag:0:namespaceId", "vs": "020430eee2bbffaaadae" },
        { "n": "tag:0:instanceId", "vs": "771234567fff" },
        ...
    ]
    [
        ...
        {
            "n": "tag:logReason",
            "vs": "Bluetooth Tag Data (update found lost reason covered in tag data)"
        },
        { "n": "tag:0:type", "vs": "Ingics iBS04 Tag" },
        { "n": "tag:0:data", "vs": "010325232" },
        ...
    ]
    [
        ...
        { "n": "GNSSLocationScan:logReason", "vs": "Heartbeat" },
        { "n": "GNSSLocationScan:data", "vs": "No data" },
        ...
    ]
    [
        ...
        { "n": "detailedCellTowerScan:logReason", "vs": "Heartbeat" },
        {
            "n": "detailedCellTowerScan:cellTowerType",
            "vs": "CAT-M1 cell towers"
        },
        { "n": "detailedCellTowerScan:cellId", "vs": "20134693" },
        { "n": "detailedCellTowerScan:locationAreaCode", "vs": "31903" },
        { "n": "detailedCellTowerScan:mobileCountryCode", "vs": "204" },
        { "n": "detailedCellTowerScan:mobileNetworkCode", "vs": "8" },
        { "n": "detailedCellTowerScan:timingAdvanceTs", "u": "count", "v": 0 },
        { "n": "detailedCellTowerScan:0:downlinkEARFCN", "vs": "1300" },
        { "n": "detailedCellTowerScan:0:physicalCellID", "vs": "197" },
        { "n": "detailedCellTowerScan:0:rsrp", "u": "dBW", "v": -106 },
        { "n": "detailedCellTowerScan:0:rsrq", "u": "dBW", "v": -37 },
        { "n": "detailedCellTowerScan:0:timingDifference", "u": "ms", "v": 0 },
        ...
    ]
    [
        ...
      {
        "bn": "urn:dev:IMEI:353760970612345:",
        "n": "extLocationResolveStatusCode",
        "vs": "200"
      } 
      {
        "n": "latitude",
        "u": "lat",
        "v": 51.00000000
      },
      {
        "n": "longitude",
        "u": "lon",
        "v": 4.00000000
      },
      {
        "n": "radius",
        "u": "m",
        "v": 48
      },
      {
        "n": "locOrigin",
        "vs": "WIFI"
      },
        ...
    ]
    [
        ...
        { "n": "multiCellTowerScan:logReason", "vs": "Heartbeat" },
        { "n": "multiCellTowerScan:decoded", "vb": false },
        { "n": "multiCellTowerScan:data", "vs": "01020304" },
        ...
    ]

    gps:latitude

    number

    lat

    51.9071025

    gps:longitude

    number

    lon

    4.4891488

    gps:altitude

    number

    m

    54

    gps:speed

    number

    m/s

    1

    gps:speed:accuracyEstimate

    number

    m/s

    0.013

    gps:heading

    number

    rad

    1.5707963267948966

    gps:accuracy:positionDilutionOfPrecision

    number

    /

    0.5

    gps:accuracy:radius

    number

    m

    65

    gps:fix:valid

    boolean

    true

    gps:fix:threeDimensional

    boolean

    true

    gps:fix:reused

    boolean

    false

    digitalData:outputs

    string

    01010001...

    Bitstring of 16 bits

    digitalData:flags:tripStatus

    boolean

    true

    digitalData:flags:internalBatteryGood

    boolean

    true

    digitalData:flags:externalPowerGood

    boolean

    true

    digitalData:flags:connectedToGsm

    boolean

    true

    digitalData:flags:shuntingPowerFromBattery

    boolean

    true

    digitalData:flags:externalPowerEnabled

    boolean

    true

    digitalData:flags:magnetAbsent

    boolean

    true

    digitalData:flags:recoveryModeActive

    boolean

    true

    digitalData:flags:deviceSpecificBits

    string

    01010001

    Bistring containing 8 device specific bits

    analogueData:externalBatteryVoltage

    number

    V

    12

    analogueData:internalTemperature

    number

    Cel

    25

    analogueData:gsmSignalStrength

    number

    dBW

    40

    analogueData:loadedBatteryVoltage

    number

    V

    11.5

    analogueData:remainingBatteryPercentage

    number

    V

    85

    analogueData:<analogueNumber>

    number

    1234

    Unknown analogue data reported by the device

    wifiscan:macs:<index>:signalStrength

    number

    dBW

    -80

    The measured signal strength

    wifiscan:macs:<index>:channel

    string

    1

    The Wifi channel

    celltowerscan:<index>:locationAreaCode

    string

    1234

    Location Area Code

    celltowerscan:<index>:mobileCountryCode

    string

    204

    Mobile Country Code (MCC)

    celltowerscan:<index>:mobileNetworkCode

    string

    69

    Mobile Network Code (MNC)

    Tag Found

    Indicates a reason for reporting this tags data

    tag:<index>:type

    string

    Eddystone

    Type bluetooth tag

    tag:<index>:type:id

    string

    Generic Tag

    Type Id for Generic Tag

    tag:<index>:data

    string

    Generic Tag

    Undecoded data bytes, if any

    tag:<index>:rssi

    number

    dBW

    -45

    All

    tag:<index>:mac

    string

    665544332211

    All

    tag:<index>:txPower

    number

    dBW

    54

    iBeacon, Eddystone, Teltonika Eye Beacon, Guppy

    tag:<index>:uuid

    string

    iBeacon

    tag:<index>:id:major

    string

    iBeacon

    tag:<index>:id:minor

    string

    iBeacon

    tag:<index>:namespaceId

    string

    001122334455667899

    Eddystone,Teltonika Eye Beacon

    tag:<index>:instanceId

    string

    889977665544

    Eddystone,Teltonika Eye Beacon

    tag:<index>:batteryVoltage

    number

    V

    EddystoneTLM,Teltonika Eye Beacon, Guppy

    tag:<index>:temperature

    number

    Cel

    EddystoneTLM,Teltonika Eye Beacon, Guppy

    In case of Teltonika only reported by the Teltonika Eye Sensor variant

    tag:<index>:advertisementFrameCount

    number

    count

    EddystoneTLM

    tag:<index>:timeSinceLastBoot

    number

    s

    EddystoneTLM

    tag:<index>:humidity

    number

    %RH

    Teltonika Eye Beacon

    Only reported by the Teltonika Eye Sensor variant

    tag:<index>:magneticFieldDetected

    boolean

    Teltonika Eye Beacon

    Only reported by the Teltonika Eye Sensor variant

    tag:<index>:movementDetected

    boolean

    Teltonika Eye Beacon

    Only reported by the Teltonika Eye Sensor variant

    tag:<index>:movementCounter

    number

    count

    Teltonika Eye Beacon

    Only reported by the Teltonika Eye Sensor variant

    tag:<index>:devicePitch

    number

    rad

    Teltonika Eye Beacon

    Only reported by the Teltonika Eye Sensor variant

    tag:<index>:deviceRoll

    number

    rad

    Teltonika Eye Beacon

    Only reported by the Teltonika Eye Sensor variant

    tag:<index>:batteryLow

    boolean

    Teltonika Eye Beacon

    tag:<index>:serial

    string

    112233

    Guppy

    tag:<index>:gps:time

    number

    Not always reported by the device

    tag:<index>:gps:latitude

    number

    lat

    Not always reported by the device

    tag:<index>:gps:longitude

    number

    lon

    Not always reported by the device

    tag:<index>:gps:accuracy:radius

    number

    m

    Not always reported by the device

    tag:<index>:data

    string

    Undecoded data bytes, if any

    detailedCellTowerScan:cellId

    string

    10517016

    detailedCellTowerScan:locationAreaCode

    string

    3190

    detailedCellTowerScan:mobileCountryCode

    string

    204

    detailedCellTowerScan:mobileNetworkCode

    string

    8

    detailedCellTowerScan:timingAdvanceTs

    number

    count

    123

    detailedCellTowerScan:<index>:downlinkEARFCN

    string

    1575

    detailedCellTowerScan:<index>:physicalCellID

    string

    513

    detailedCellTowerScan:<index>:rsrp

    number

    dBW

    153

    Received Signal Reference Power

    detailedCellTowerScan:<index>:rsrq

    number

    dBW

    -39

    Received Signal Reference Quality

    detailedCellTowerScan:<index>:timingDifference

    number

    ms

    54

    longitude

    number

    lon

    Longitude as resolved

    radius

    number

    m

    Expected accuracy of resolved location

    locOrigin

    string

    WIFI

    WIFI if only based on wlan information CELLTOWER if no wlan information is present and the location could be resolved based on celltower WIFI+CELLTOWER if a combination is used

    <fieldName>:data

    string

    01020304

    Undecoded data bytes

    1M2M ED1608

    1M2M ED1608

    For the complete 1M2M ED1608 series running default firmware, Full, Basic and Radio-Only.

    • Supported network type(s): KPNLORA

    • Device Specification ID: supported-1m2m-ed1608

    • Device Specification UUID: 0eb7379d-881a-42b2-a4d6-abe1f9fa205c

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    = Raw LoRa payload

    Forward the raw LoRa payload and port number without decoding.

    Expected SenML records

    name
    type
    unit

    hashtag
    = Raw LoRa payload (v2)

    Forward the raw LoRa payload and port number without decoding.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    › Decoded 1M2M ED16xx payload

    Decoder for all messages from devices with default 1M2M ED16xx firmware.

    Expected SenML records

    name
    type
    unit

    hashtag
    › Decoded 1M2M ED16xx payload (v2)

    Decoder for all messages from devices with default 1M2M ED16xx firmware.

    Bugfixes from '› Decoded 1M2M ED16xx payload':

    • latitude and longitude were not always decoded correctly.

    • fixAge was not decoded correctly for values above 60 minutes.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    00 payload

    01 payload

    02 payload

    03 payload

    04 payload

    06 payload

    08 payload

    09 payload

    0A payload

    0B payload

    0C payload

    0D payload

    hashtag
    = Raw LoRa payload encoding

    • Protocol: LoRa downlink

    • Description: Send raw LoRa payload to your device.

    • Multiple commands in one downlink: No

    Input mapping:

    • Name: payloadHex (raw input)

    › Decoded 1M2M ED16xx payload (v2)

    7492bd93-668a-5e15-8e28-859c2bc40e9d

    Decoder for all messages from devices with default 1M2M ED16xx firmware.

    Barom

    number

    P

    BeamX

    number

    rad

    BeamY

    number

    rad

    BeamZ

    number

    rad

    CmdAck

    number

    Count

    number

    Count

    FixAge

    number

    GravX

    number

    GravY

    number

    GravZ

    number

    MagX

    number

    MagY

    number

    MagZ

    number

    Max1Amp

    number

    Max1Freq

    number

    Hz

    Max2Amp

    number

    Max2Freq

    number

    Hz

    Max3Amp

    number

    Max3Freq

    number

    Hz

    MaxBaro

    number

    P

    MaxDx

    number

    MaxDy

    number

    MaxDz

    number

    MaxHum

    number

    %RH

    MaxTemp

    number

    Cel

    MinBaro

    number

    P

    MinHum

    number

    %RH

    MinTemp

    number

    Cel

    Mod

    number

    NumSat

    number

    Ow0

    number

    Cel

    Ow1

    number

    Cel

    Ow2

    number

    Cel

    Ow3

    number

    Cel

    Ow4

    number

    Cel

    RepMod

    number

    RunHrs

    number

    Count

    Status

    number

    Timer

    number

    Count

    VibAmp

    number

    VibFrq

    number

    Hz

    VibGai

    number

    batteryLevel

    number

    %EL

    batteryLevel

    number

    V

    distance

    number

    m

    humidity

    number

    %RH

    latitude

    number

    lat

    longitude

    number

    lon

    profile

    number

    temperature

    number

    Cel

    number

    V

    0.291

    AnIn4

    number

    V

    0

    Barom

    number

    P

    200000

    batteryLevel

    number

    %EL

    100

    batteryLevel

    number

    V

    12

    BeamX

    number

    rad

    -1.3864721044917754

    BeamY

    number

    rad

    0.90795518347249

    BeamZ

    number

    rad

    -1.1533484763028927

    CmdAck

    number

    3

    Count

    number

    Count

    55588351

    Dig1Al

    boolean

    true

    Dig2Al

    boolean

    true

    distance

    number

    m

    801000

    FixAge

    number

    4170

    GeoAl

    boolean

    true

    GravX

    number

    32

    GravY

    number

    64

    GravZ

    number

    127

    GrvRot

    boolean

    true

    humidity

    number

    %RH

    85

    latitude

    number

    lat

    47.52521

    longitude

    number

    lon

    4.49031

    MagRot

    boolean

    true

    MagX

    number

    -96

    MagY

    number

    50

    MagZ

    number

    17

    Max1Amp

    number

    164

    Max1Freq

    number

    Hz

    273

    Max2Amp

    number

    68

    Max2Freq

    number

    Hz

    464

    Max3Amp

    number

    20

    Max3Freq

    number

    Hz

    654

    MaxBaro

    number

    P

    0.00127

    MaxDx

    number

    127

    MaxDy

    number

    64

    MaxDz

    number

    32

    MaxHum

    number

    %RH

    85

    MaxTemp

    number

    Cel

    0.8

    MinBaro

    number

    P

    0.00035

    MinHum

    number

    %RH

    69

    MinTemp

    number

    Cel

    0.64

    Mod

    number

    1

    MotAl

    boolean

    true

    Move

    boolean

    false

    NumSat

    number

    7

    Ow0

    number

    Cel

    42

    Ow1

    number

    Cel

    42

    Ow2

    number

    Cel

    42

    Ow3

    number

    Cel

    42

    Ow4

    number

    Cel

    42

    profile

    number

    0

    RepMod

    number

    2

    RunHrs

    number

    Count

    291

    ShkAl

    boolean

    true

    Start

    boolean

    true

    Status

    number

    0

    Stop

    boolean

    false

    temperature

    number

    Cel

    18.92

    Timer

    number

    Count

    69616

    VibAl

    boolean

    true

    VibAmp

    number

    0

    VibFrq

    number

    Hz

    0

    VibGai

    number

    4

    Vibr

    boolean

    false

    + LoRa Geolocation data

    0e10de71-eed6-49de-8885-5afc9bfc456f

    Add LoRa Geolocation data to messages where location could be calculated.

    = Raw LoRa payload

    b2bcfe4e-b90b-451a-ad2b-ae6c9223d2a1

    Forward the raw LoRa payload and port number without decoding.

    = Raw LoRa payload (v2)

    1cef4804-79b0-5fd3-8f59-3919218d1793

    Forward the raw LoRa payload and port number without decoding.

    › Decoded 1M2M ED16xx payload

    4407fc62-a756-49bd-9e91-491c5acfa411

    = Raw LoRa payload

    f1d9c695-8fa5-4626-b55c-0bdc4bddf7dc

    Send raw LoRa payload to your device.

    payload

    string

    port

    number

    payload

    string

    "4D985C495AC4D8C9682CFD"

    The LoRa hex payload

    port

    number

    200

    The LoRa port used to send this uplink

    AnIn1

    number

    V

    AnIn2

    number

    V

    AnIn3

    number

    V

    AnIn4

    number

    V

    AnIn1

    number

    V

    4

    AnIn2

    number

    V

    2.564

    LoRa Geolocation
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    Decoder for all messages from devices with default 1M2M ED16xx firmware.

    AnIn3

    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "payload",
            "vs": "4D985C495AC4D8C9682CFD"
        },
        {
            "n": "port",
            "v": 1
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1482354922,
            "n": "batteryLevel",
            "u": "%EL",
            "v": 100
        },
        {
            "n": "profile",
            "v": 0
        },
        {
            "n": "CmdAck",
            "v": 3
        },
        {
            "n": "FixAge",
            "v": 16
        },
        {
            "n": "NumSat",
            "v": 6
        },
        {
            "n": "latitude",
            "u": "lat",
            "v": 47.52521
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 115.02578
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1482354922,
            "n": "Start",
            "vb": true
        },
        {
            "n": "Move",
            "vb": false
        },
        {
            "n": "Stop",
            "vb": false
        },
        {
            "n": "Vibr",
            "vb": false
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "FixAge",
            "v": 4170
        },
        {
            "n": "NumSat",
            "v": 7
        },
        {
            "n": "latitude",
            "u": "lat",
            "v": 51.90778
        },
        {
            "n": "longitude",
            "u": "lon",
            "v": 4.49031
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "Status",
            "v": 0
        },
        {
            "n": "Barom",
            "u": "P",
            "v": 200000
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": -39.92
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 85
        },
        {
            "n": "BeamX",
            "u": "rad",
            "v": -1.3864721044917754
        },
        {
            "n": "BeamY",
            "u": "rad",
            "v": 0.90795518347249
        },
        {
            "n": "BeamZ",
            "u": "rad",
            "v": -1.1533484763028927
        },
        {
            "n": "VibAmp",
            "v": 0
        },
        {
            "n": "VibFrq",
            "u": "Hz",
            "v": 0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "GrvRot",
            "vb": true
        },
        {
            "n": "MagRot",
            "vb": true
        },
        {
            "n": "GravX",
            "v": 32
        },
        {
            "n": "GravY",
            "v": 64
        },
        {
            "n": "GravZ",
            "v": -128
        },
        {
            "n": "MagX",
            "v": -96
        },
        {
            "n": "MagY",
            "v": 50
        },
        {
            "n": "MagZ",
            "v": 17
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "GrvRot",
            "vb": true
        },
        {
            "n": "MagRot",
            "vb": true
        },
        {
            "n": "MotAl",
            "vb": true
        },
        {
            "n": "GeoAl",
            "vb": true
        },
        {
            "n": "VibAl",
            "vb": true
        },
        {
            "n": "ShkAl",
            "vb": true
        },
        {
            "n": "Dig1Al",
            "vb": true
        },
        {
            "n": "Dig2Al",
            "vb": true
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": -39.92
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 85
        },
        {
            "n": "Barom",
            "u": "P",
            "v": 200000
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1482354922,
            "n": "Ow0",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "Ow1",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "Ow2",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "Ow3",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "Ow4",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "MaxDx",
            "v": 127
        },
        {
            "n": "MaxDy",
            "v": 64
        },
        {
            "n": "MaxDz",
            "v": 32
        },
        {
            "n": "Max1Freq",
            "u": "Hz",
            "v": 273
        },
        {
            "n": "Max1Amp",
            "v": 164
        },
        {
            "n": "Max2Freq",
            "u": "Hz",
            "v": 464
        },
        {
            "n": "Max2Amp",
            "v": 68
        },
        {
            "n": "Max3Freq",
            "u": "Hz",
            "v": 654
        },
        {
            "n": "Max3Amp",
            "v": 20
        },
        {
            "n": "VibGai",
            "v": 4
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "batteryLevel",
            "u": "V",
            "v": 12
        },
        {
            "n": "AnIn1",
            "u": "V",
            "v": 4
        },
        {
            "n": "AnIn2",
            "u": "V",
            "v": 2.564
        },
        {
            "n": "AnIn3",
            "u": "V",
            "v": 0.291
        },
        {
            "n": "AnIn4",
            "u": "V",
            "v": 0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "Status",
            "v": 0
        },
        {
            "n": "Barom",
            "u": "P",
            "v": 200000
        },
        {
            "n": "temperature",
            "u": "Cel",
            "v": 42
        },
        {
            "n": "humidity",
            "u": "%RH",
            "v": 85
        },
        {
            "n": "GravX",
            "v": 32
        },
        {
            "n": "GravY",
            "v": 64
        },
        {
            "n": "GravZ",
            "v": 127
        },
        {
            "n": "VibAmp",
            "v": 0
        },
        {
            "n": "VibFrq",
            "u": "Hz",
            "v": 0
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "Status",
            "v": 0
        },
        {
            "n": "MinTemp",
            "u": "Cel",
            "v": 0.64
        },
        {
            "n": "MaxTemp",
            "u": "Cel",
            "v": 0.8
        },
        {
            "n": "MinHum",
            "u": "%RH",
            "v": 69
        },
        {
            "n": "MaxHum",
            "u": "%RH",
            "v": 85
        },
        {
            "n": "MaxBaro",
            "u": "P",
            "v": 0.00127
        },
        {
            "n": "MinBaro",
            "u": "P",
            "v": 0.00035
        },
        {
            "n": "RunHrs",
            "u": "Count",
            "v": 291
        },
        {
            "n": "distance",
            "u": "m",
            "v": 801000
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "Mod",
            "v": 1
        },
        {
            "n": "RepMod",
            "v": 2
        },
        {
            "n": "Count",
            "u": "Count",
            "v": 55588351
        },
        {
            "n": "Timer",
            "u": "Count",
            "v": 69616
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1.482354922E9,
            "n": "Mod",
            "v": 1
        },
        {
            "n": "RepMod",
            "v": 2
        },
        {
            "n": "Count",
            "u": "Count",
            "v": 55588351
        },
        {
            "n": "Timer",
            "u": "Count",
            "v": 69616
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]

    Elsys ERS

    Elsys ERS

    Specification for Elsys ERS / ERS-lite / ERS-CO2 / ERS-sound.

    • Supported network type(s): KPNLORA

    • Device Specification ID: supported-elsys-ers

    • Device Specification UUID: 9e95ec32-cbd5-4202-b62b-1b8eb9d85a6d

    Decoders
    decoderSpecificationUUID
    Description
    Encoders
    encoderSpecificationUUID
    Description

    hashtag
    + LoRa Geolocation data

    Add data to messages where location could be calculated.

    hashtag
    = Raw LoRa payload

    Forward the raw LoRa payload and port number without decoding.

    Expected SenML records

    name
    type
    unit

    hashtag
    = Raw LoRa payload (v2)

    Forward the raw LoRa payload and port number without decoding.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    hashtag
    › Decoded Elsys ERS v9 payload

    Decoder for v9 Elsys ERS payload.

    Expected SenML records

    name
    type
    unit

    hashtag
    › Decoded Elsys ERS v9 payload (v2)

    Decoder for v9 Elsys ERS payload, fixed repeating base name and rename CO2 to CO2Concentration (updated 20-10-2020).

    Expected SenML records

    name
    type
    unit

    hashtag
    › Decoded Elsys ERS v9 payload (v3)

    Decoder for Elsys ERS payloads. Fixes bugs in '› Decoded Elsys ERS v9 payload (v2)':

    • distance was incorrectly converted to dm instead of m. Now the containing value is in meters.

    • soundAverage was decoded incorrectly, resulting in a number that is way too large.

    circle-info

    This decoder also decodes data.

    The following SenML records can be present, amongst others:

    name
    type
    unit
    example
    description

    hashtag
    Example SenML

    circle-info

    SenML can be structured in different ways, and we do not guarantee the examples below will look the same as what you will receive on your Destination. To make sure you can handle the SenML optimally, take a look at our documentation about .

    Long payload

    Short payload

    hashtag
    = Raw LoRa payload

    • UUID: 377f294c-ae4b-4249-8c74-9e8fc26209e4

    • Description: Forward the raw LoRa payload and port number without decoding.

    • Exchange: decoder.lora.passthrough.exchange

    hashtag
    Expected SenML outputs

    Unknown

    › Decoded Elsys ERS v9 payload (v2)

    0dbc06c3-0704-4ab3-8160-682bd470587b

    Decoder for v9 Elsys ERS payload, fixed repeating base name and rename CO2 to CO2Concentration (updated 20-10-2020).

    › Decoded Elsys ERS v9 payload (v3)

    43d4d3cf-e9f9-51d3-bf36-127d9778dce9

    Decoder for Elsys ERS payloads. Fixes bugs in '› Decoded Elsys ERS v9 payload (v2)'

    accelerationZ

    number

    m/s2

    analog1

    number

    V

    analog2

    number

    V

    batteryVoltage

    number

    V

    digitalExternal

    boolean

    digitalIn2

    boolean

    distance

    number

    m

    grideye

    number

    Cel

    grideye0-0

    number

    Cel

    grideye0-1

    number

    Cel

    grideye0-2

    number

    Cel

    grideye0-3

    number

    Cel

    grideye0-4

    number

    Cel

    grideye0-5

    number

    Cel

    grideye0-6

    number

    Cel

    grideye0-7

    number

    Cel

    grideye1-0

    number

    Cel

    grideye1-1

    number

    Cel

    grideye1-2

    number

    Cel

    grideye1-3

    number

    Cel

    grideye1-4

    number

    Cel

    grideye1-5

    number

    Cel

    grideye1-6

    number

    Cel

    grideye1-7

    number

    Cel

    grideye2-0

    number

    Cel

    grideye2-1

    number

    Cel

    grideye2-2

    number

    Cel

    grideye2-3

    number

    Cel

    grideye2-4

    number

    Cel

    grideye2-5

    number

    Cel

    grideye2-6

    number

    Cel

    grideye2-7

    number

    Cel

    grideye3-0

    number

    Cel

    grideye3-1

    number

    Cel

    grideye3-2

    number

    Cel

    grideye3-3

    number

    Cel

    grideye3-4

    number

    Cel

    grideye3-5

    number

    Cel

    grideye3-6

    number

    Cel

    grideye3-7

    number

    Cel

    grideye4-0

    number

    Cel

    grideye4-1

    number

    Cel

    grideye4-2

    number

    Cel

    grideye4-3

    number

    Cel

    grideye4-4

    number

    Cel

    grideye4-5

    number

    Cel

    grideye4-6

    number

    Cel

    grideye4-7

    number

    Cel

    grideye5-0

    number

    Cel

    grideye5-1

    number

    Cel

    grideye5-2

    number

    Cel

    grideye5-3

    number

    Cel

    grideye5-4

    number

    Cel

    grideye5-5

    number

    Cel

    grideye5-6

    number

    Cel

    grideye5-7

    number

    Cel

    grideye6-0

    number

    Cel

    grideye6-1

    number

    Cel

    grideye6-2

    number

    Cel

    grideye6-3

    number

    Cel

    grideye6-4

    number

    Cel

    grideye6-5

    number

    Cel

    grideye6-6

    number

    Cel

    grideye6-7

    number

    Cel

    grideye7-0

    number

    Cel

    grideye7-1

    number

    Cel

    grideye7-2

    number

    Cel

    grideye7-3

    number

    Cel

    grideye7-4

    number

    Cel

    grideye7-5

    number

    Cel

    grideye7-6

    number

    Cel

    grideye7-7

    number

    Cel

    humidity

    number

    %RH

    illuminance

    number

    lx

    lattitude

    number

    lat

    longitude

    number

    lon

    motion

    number

    count

    occupancy

    number

    count

    pressure

    number

    Pa

    pulse

    number

    count

    pulseAbsolute

    number

    count

    pulseAbsolute2

    number

    count

    soundAverage

    number

    dB

    soundPeak

    number

    dB

    temperature

    number

    Cel

    temperatureExternal1

    number

    Cel

    temperatureExternal2

    number

    Cel

    temperatureIRExternal

    number

    Cel

    temperatureIRInternal

    number

    Cel

    waterLeak

    number

    count

    accelerationZ

    number

    m/s2

    analog1

    number

    V

    analog2

    number

    V

    batteryVoltage

    number

    V

    digitalExternal

    boolean

    digitalIn2

    boolean

    distance

    number

    m

    grideye

    number

    Cel

    grideye0-0

    number

    Cel

    grideye0-1

    number

    Cel

    grideye0-2

    number

    Cel

    grideye0-3

    number

    Cel

    grideye0-4

    number

    Cel

    grideye0-5

    number

    Cel

    grideye0-6

    number

    Cel

    grideye0-7

    number

    Cel

    grideye1-0

    number

    Cel

    grideye1-1

    number

    Cel

    grideye1-2

    number

    Cel

    grideye1-3

    number

    Cel

    grideye1-4

    number

    Cel

    grideye1-5

    number

    Cel

    grideye1-6

    number

    Cel

    grideye1-7

    number

    Cel

    grideye2-0

    number

    Cel

    grideye2-1

    number

    Cel

    grideye2-2

    number

    Cel

    grideye2-3

    number

    Cel

    grideye2-4

    number

    Cel

    grideye2-5

    number

    Cel

    grideye2-6

    number

    Cel

    grideye2-7

    number

    Cel

    grideye3-0

    number

    Cel

    grideye3-1

    number

    Cel

    grideye3-2

    number

    Cel

    grideye3-3

    number

    Cel

    grideye3-4

    number

    Cel

    grideye3-5

    number

    Cel

    grideye3-6

    number

    Cel

    grideye3-7

    number

    Cel

    grideye4-0

    number

    Cel

    grideye4-1

    number

    Cel

    grideye4-2

    number

    Cel

    grideye4-3

    number

    Cel

    grideye4-4

    number

    Cel

    grideye4-5

    number

    Cel

    grideye4-6

    number

    Cel

    grideye4-7

    number

    Cel

    grideye5-0

    number

    Cel

    grideye5-1

    number

    Cel

    grideye5-2

    number

    Cel

    grideye5-3

    number

    Cel

    grideye5-4

    number

    Cel

    grideye5-5

    number

    Cel

    grideye5-6

    number

    Cel

    grideye5-7

    number

    Cel

    grideye6-0

    number

    Cel

    grideye6-1

    number

    Cel

    grideye6-2

    number

    Cel

    grideye6-3

    number

    Cel

    grideye6-4

    number

    Cel

    grideye6-5

    number

    Cel

    grideye6-6

    number

    Cel

    grideye6-7

    number

    Cel

    grideye7-0

    number

    Cel

    grideye7-1

    number

    Cel

    grideye7-2

    number

    Cel

    grideye7-3

    number

    Cel

    grideye7-4

    number

    Cel

    grideye7-5

    number

    Cel

    grideye7-6

    number

    Cel

    grideye7-7

    number

    Cel

    humidity

    number

    %RH

    illuminance

    number

    lx

    lattitude

    number

    lat

    longitude

    number

    lon

    motion

    number

    count

    occupancy

    number

    count

    pressure

    number

    Pa

    pulse

    number

    count

    pulseAbsolute

    number

    count

    pulseAbsolute2

    number

    count

    soundAverage

    number

    dB

    soundPeak

    number

    dB

    temperature

    number

    Cel

    temperatureExternal1

    number

    Cel

    temperatureExternal2

    number

    Cel

    temperatureIRExternal

    number

    Cel

    temperatureIRInternal

    number

    Cel

    waterLeak

    number

    count

    soundPeak was decoded incorrectly, resulting in a number that is way too large.
  • The grideye fields were decoded incorrectly, where most results would be too big.

  • Time offsets were added as positive ts instead of negative ts.

  • acceleration values were processed as unsigned values, but they should have been processed as signed values.

  • number

    m/s2

    13.231194444444442

    analog1

    number

    V

    35.124

    External analog input voltage

    analog2

    number

    V

    49.287

    batteryVoltage

    number

    V

    3.596

    CO2Concentration

    number

    ppm

    638

    CO2

    number

    ppm

    638

    contains the same value as CO2Concentration and is included for backwards compatibility

    digitalExternal

    boolean

    false

    digitalIn2

    boolean

    false

    distance

    number

    m

    261.42

    grideye0-0

    number

    Cel

    21.234

    All the grideye fields combined make up the room infrared temperature.

    grideye0-1

    number

    Cel

    grideye0-2

    number

    Cel

    grideye0-3

    number

    Cel

    grideye0-4

    number

    Cel

    grideye0-5

    number

    Cel

    grideye0-6

    number

    Cel

    grideye0-7

    number

    Cel

    grideye1-0

    number

    Cel

    grideye1-1

    number

    Cel

    grideye1-2

    number

    Cel

    grideye1-3

    number

    Cel

    grideye1-4

    number

    Cel

    grideye1-5

    number

    Cel

    grideye1-6

    number

    Cel

    grideye1-7

    number

    Cel

    grideye2-0

    number

    Cel

    grideye2-1

    number

    Cel

    grideye2-2

    number

    Cel

    grideye2-3

    number

    Cel

    grideye2-4

    number

    Cel

    grideye2-5

    number

    Cel

    grideye2-6

    number

    Cel

    grideye2-7

    number

    Cel

    grideye3-0

    number

    Cel

    grideye3-1

    number

    Cel

    grideye3-2

    number

    Cel

    grideye3-3

    number

    Cel

    grideye3-4

    number

    Cel

    grideye3-5

    number

    Cel

    grideye3-6

    number

    Cel

    grideye3-7

    number

    Cel

    grideye4-0

    number

    Cel

    grideye4-1

    number

    Cel

    grideye4-2

    number

    Cel

    grideye4-3

    number

    Cel

    grideye4-4

    number

    Cel

    grideye4-5

    number

    Cel

    grideye4-6

    number

    Cel

    grideye4-7

    number

    Cel

    grideye5-0

    number

    Cel

    grideye5-1

    number

    Cel

    grideye5-2

    number

    Cel

    grideye5-3

    number

    Cel

    grideye5-4

    number

    Cel

    grideye5-5

    number

    Cel

    grideye5-6

    number

    Cel

    grideye5-7

    number

    Cel

    grideye6-0

    number

    Cel

    grideye6-1

    number

    Cel

    grideye6-2

    number

    Cel

    grideye6-3

    number

    Cel

    grideye6-4

    number

    Cel

    grideye6-5

    number

    Cel

    grideye6-6

    number

    Cel

    grideye6-7

    number

    Cel

    grideye7-0

    number

    Cel

    grideye7-1

    number

    Cel

    grideye7-2

    number

    Cel

    grideye7-3

    number

    Cel

    grideye7-4

    number

    Cel

    grideye7-5

    number

    Cel

    grideye7-6

    number

    Cel

    grideye7-7

    number

    Cel

    humidity

    number

    %RH

    34

    illuminance

    number

    lx

    56273

    motion

    number

    count

    5

    Number of detected PIR motions

    occupancy

    number

    count

    0

    0: No detection 1: Entering/leaving 2:Occupied

    pressure

    number

    Pa

    102900

    pulse

    number

    count

    Relative value, reset every transmission

    Pulse2

    number

    count

    Relative value, reset every transmission

    pulseAbsolute

    number

    count

    Absolute value, never reset

    pulseAbsolute2

    number

    count

    Absolute value, never reset

    soundAverage

    number

    dB

    42

    soundPeak

    number

    dB

    80

    temperature

    number

    Cel

    23.5

    temperatureExternal1

    number

    Cel

    temperatureExternal2

    number

    Cel

    temperatureIRExternal

    number

    Cel

    24.9

    temperatureIRInternal

    number

    Cel

    23.3

    waterLeak

    number

    count

    + LoRa Geolocation data

    95197b23-49c6-4eef-b913-f3691c9c0f5d

    Add LoRa Geolocation data to messages where location could be calculated.

    = Raw LoRa payload

    377f294c-ae4b-4249-8c74-9e8fc26209e4

    Forward the raw LoRa payload and port number without decoding.

    = Raw LoRa payload (v2)

    dd25eca2-76cf-51ae-a3d9-c28352f5717f

    Forward the raw LoRa payload and port number without decoding.

    › Decoded Elsys ERS v9 payload

    997b395e-c008-42a6-8aac-5b41f1796044

    = Raw LoRa payload

    69e64131-877e-4f25-ac0b-6e04bd61f1ae

    Send raw LoRa payload to your device.

    payload

    string

    port

    number

    payload

    string

    "4D985C495AC4D8C9682CFD"

    The LoRa hex payload

    port

    number

    200

    The LoRa port used to send this uplink

    CO2

    number

    ppm

    Pulse2

    number

    count

    accelerationX

    number

    m/s2

    accelerationY

    number

    m/s2

    CO2Concentration

    number

    ppm

    Pulse2

    number

    count

    accelerationX

    number

    m/s2

    accelerationY

    number

    m/s2

    accelerationX

    number

    m/s2

    0.31132222222222217

    accelerationY

    number

    m/s2

    15.566111111111107

    LoRa Geolocation
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data
    Geolocation and Local Gateway
    Understanding and Interpreting SenML Data

    Decoder for v9 Elsys ERS payload.

    accelerationZ

    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "payload",
            "vs": "4D985C495AC4D8C9682CFD"
        },
        {
            "n": "port",
            "v": 1
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1693136532.83,
            "n": "temperature",
            "t": -16,
            "u": "Cel",
            "v": 21
        },
        {
            "n": "humidity",
            "t": -10,
            "u": "%RH",
            "v": 32
        },
        {
            "n": "accelerationX",
            "u": "m/s2",
            "v": 0.15566111111111108
        },
        {
            "n": "accelerationY",
            "u": "m/s2",
            "v": 0.31132222222222217
        },
        {
            "n": "accelerationZ",
            "u": "m/s2",
            "v": 0.46698333333333325
        },
        {
            "n": "illuminance",
            "u": "lx",
            "v": 354
        },
        {
            "n": "CO2Concentration",
            "u": "ppm",
            "v": 478
        },
        {
            "n": "CO2",
            "u": "ppm",
            "v": 478
        },
        {
            "n": "batteryVoltage",
            "u": "V",
            "v": 3.245
        },
        {
            "n": "analog1",
            "u": "V",
            "v": 57.071
        },
        {
            "n": "pulse",
            "u": "count",
            "v": 61438
        },
        {
            "n": "pulseAbsolute",
            "u": "count",
            "v": 2144202751
        },
        {
            "n": "temperatureExternal1",
            "u": "Cel",
            "v": 21.7
        },
        {
            "n": "digitalExternal",
            "vb": true
        },
        {
            "n": "distance",
            "u": "m",
            "v": 4.643
        },
        {
            "n": "motion",
            "u": "count",
            "v": 255
        },
        {
            "n": "temperatureIRInternal",
            "u": "Cel",
            "v": 24.5
        },
        {
            "n": "temperatureIRExternal",
            "u": "Cel",
            "v": 23
        },
        {
            "n": "occupancy",
            "u": "count",
            "v": 2
        },
        {
            "n": "waterLeak",
            "u": "count",
            "v": 0
        },
        {
            "n": "grideye0-0",
            "u": "Cel",
            "v": 16
        },
        {
            "n": "grideye1-0",
            "u": "Cel",
            "v": 16.1
        },
        {
            "n": "grideye2-0",
            "u": "Cel",
            "v": 16.2
        },
        {
            "n": "grideye3-0",
            "u": "Cel",
            "v": 16.3
        },
        {
            "n": "grideye4-0",
            "u": "Cel",
            "v": 16.4
        },
        {
            "n": "grideye5-0",
            "u": "Cel",
            "v": 16.5
        },
        {
            "n": "grideye6-0",
            "u": "Cel",
            "v": 16.6
        },
        {
            "n": "grideye7-0",
            "u": "Cel",
            "v": 16.7
        },
        {
            "n": "grideye0-1",
            "u": "Cel",
            "v": 16.8
        },
        {
            "n": "grideye1-1",
            "u": "Cel",
            "v": 16.9
        },
        {
            "n": "grideye2-1",
            "u": "Cel",
            "v": 17
        },
        {
            "n": "grideye3-1",
            "u": "Cel",
            "v": 17.1
        },
        {
            "n": "grideye4-1",
            "u": "Cel",
            "v": 17.2
        },
        {
            "n": "grideye5-1",
            "u": "Cel",
            "v": 17.3
        },
        {
            "n": "grideye6-1",
            "u": "Cel",
            "v": 17.4
        },
        {
            "n": "grideye7-1",
            "u": "Cel",
            "v": 17.5
        },
        {
            "n": "grideye0-2",
            "u": "Cel",
            "v": 17.6
        },
        {
            "n": "grideye1-2",
            "u": "Cel",
            "v": 17.7
        },
        {
            "n": "grideye2-2",
            "u": "Cel",
            "v": 17.8
        },
        {
            "n": "grideye3-2",
            "u": "Cel",
            "v": 17.9
        },
        {
            "n": "grideye4-2",
            "u": "Cel",
            "v": 18
        },
        {
            "n": "grideye5-2",
            "u": "Cel",
            "v": 18.1
        },
        {
            "n": "grideye6-2",
            "u": "Cel",
            "v": 18.2
        },
        {
            "n": "grideye7-2",
            "u": "Cel",
            "v": 18.3
        },
        {
            "n": "grideye0-3",
            "u": "Cel",
            "v": 18.4
        },
        {
            "n": "grideye1-3",
            "u": "Cel",
            "v": 18.5
        },
        {
            "n": "grideye2-3",
            "u": "Cel",
            "v": 18.6
        },
        {
            "n": "grideye3-3",
            "u": "Cel",
            "v": 18.7
        },
        {
            "n": "grideye4-3",
            "u": "Cel",
            "v": 18.8
        },
        {
            "n": "grideye5-3",
            "u": "Cel",
            "v": 18.9
        },
        {
            "n": "grideye6-3",
            "u": "Cel",
            "v": 19
        },
        {
            "n": "grideye7-3",
            "u": "Cel",
            "v": 19.1
        },
        {
            "n": "grideye0-4",
            "u": "Cel",
            "v": 19.2
        },
        {
            "n": "grideye1-4",
            "u": "Cel",
            "v": 19.3
        },
        {
            "n": "grideye2-4",
            "u": "Cel",
            "v": 19.4
        },
        {
            "n": "grideye3-4",
            "u": "Cel",
            "v": 19.5
        },
        {
            "n": "grideye4-4",
            "u": "Cel",
            "v": 19.6
        },
        {
            "n": "grideye5-4",
            "u": "Cel",
            "v": 19.7
        },
        {
            "n": "grideye6-4",
            "u": "Cel",
            "v": 19.8
        },
        {
            "n": "grideye7-4",
            "u": "Cel",
            "v": 19.9
        },
        {
            "n": "grideye0-5",
            "u": "Cel",
            "v": 20
        },
        {
            "n": "grideye1-5",
            "u": "Cel",
            "v": 20.1
        },
        {
            "n": "grideye2-5",
            "u": "Cel",
            "v": 20.2
        },
        {
            "n": "grideye3-5",
            "u": "Cel",
            "v": 20.3
        },
        {
            "n": "grideye4-5",
            "u": "Cel",
            "v": 20.4
        },
        {
            "n": "grideye5-5",
            "u": "Cel",
            "v": 20.5
        },
        {
            "n": "grideye6-5",
            "u": "Cel",
            "v": 20.6
        },
        {
            "n": "grideye7-5",
            "u": "Cel",
            "v": 20.7
        },
        {
            "n": "grideye0-6",
            "u": "Cel",
            "v": 20.8
        },
        {
            "n": "grideye1-6",
            "u": "Cel",
            "v": 20.9
        },
        {
            "n": "grideye2-6",
            "u": "Cel",
            "v": 21
        },
        {
            "n": "grideye3-6",
            "u": "Cel",
            "v": 21.1
        },
        {
            "n": "grideye4-6",
            "u": "Cel",
            "v": 21.2
        },
        {
            "n": "grideye5-6",
            "u": "Cel",
            "v": 21.3
        },
        {
            "n": "grideye6-6",
            "u": "Cel",
            "v": 21.4
        },
        {
            "n": "grideye7-6",
            "u": "Cel",
            "v": 21.5
        },
        {
            "n": "grideye0-7",
            "u": "Cel",
            "v": 21.6
        },
        {
            "n": "grideye1-7",
            "u": "Cel",
            "v": 21.7
        },
        {
            "n": "grideye2-7",
            "u": "Cel",
            "v": 21.8
        },
        {
            "n": "grideye3-7",
            "u": "Cel",
            "v": 21.9
        },
        {
            "n": "grideye4-7",
            "u": "Cel",
            "v": 22
        },
        {
            "n": "grideye5-7",
            "u": "Cel",
            "v": 22.1
        },
        {
            "n": "grideye6-7",
            "u": "Cel",
            "v": 22.2
        },
        {
            "n": "grideye7-7",
            "u": "Cel",
            "v": 22.3
        },
        {
            "n": "pressure",
            "u": "Pa",
            "v": 27054496
        },
        {
            "n": "soundPeak",
            "u": "dB",
            "v": 64
        },
        {
            "n": "soundAverage",
            "u": "dB",
            "v": 40
        },
        {
            "n": "Pulse2",
            "u": "count",
            "v": 235
        },
        {
            "n": "pulseAbsolute2",
            "u": "count",
            "v": 122
        },
        {
            "n": "analog2",
            "u": "V",
            "v": 17.767
        },
        {
            "n": "temperatureExternal2",
            "u": "Cel",
            "v": 28.1
        },
        {
            "n": "digitalIn2",
            "vb": true
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]
    [
        {
            "bn": "urn:dev:DEVEUI:0123456789012345:",
            "bt": 1704798016.891,
            "v": 17,
            "n": "temperature",
            "u": "Cel"
        },
        {
            "v": 32,
            "n": "humidity",
            "u": "%RH"
        },
        {
            "v": 262,
            "n": "illuminance",
            "u": "lx"
        },
        {
            "v": 1391,
            "n": "CO2Concentration",
            "u": "ppm"
        },
        {
            "v": 1391,
            "n": "CO2",
            "u": "ppm"
        },
        {
            "v": 3.607,
            "n": "batteryVoltage",
            "u": "V"
        },
        {
            "n": "timeOrigin",
            "vs": "NETWORK"
        }
    ]