, ,

thethings.iO IoT Blinders Retailer Manager

If you sell your digital product via distributors and retailers, thethings.iO’s Blinders are for you. The Blinders tool provides privacy and security to your retailers and suppliers and all their network of sub-retailers. Let’s learn more!

What is thethings.iO Blinders?

Imagine you are a thethings.iO customer with smart lightbulbs you wish to sell to retailers such as Walmart and Amazon. You sell 1 million lightbulbs to Walmart and Amazon. People then buy them and set them up with your app, giving you their email.

Now, when you will sell another product in the future, you will not need your retailers any more probably. You will sell directly to the customers through their emails and with marketing campaigns tailored to the clients of your current solutions.

This is obviously a problem for your retailers, who just lost customers, a lot. Most likely, your retailers would have realized this could happen and never would have made a deal with you in the first place. That means you never would have had any business to begin with either. So now what? How can you ensure privacy and security for your retailers? 

At thethings.iO, we have created a tool to solve this problem: the Blinders Retailer Manager. This tool “closes the blinds on you” to protect the retailer’s customers’ information and also lets you give the retailers a dashboard for them to manage your products. The Blinders tool also allows retailers to have a network of sub-retailers, each with their own dashboard.

For example:

Now imagine you are Amazon. You have two branches, Amazon US and Amazon Europe. You have 50 products, 25 for each location, but you want Amazon US to see their only 25 and Amazon Europe to see their only 25. With thethings.iO’s 

Blinders, you can make them each their own separate login where they can only see their products.  Now, you are Amazon Europe and you want to give 10 products to Spain for only them to view. You can do the same thing, creating a tree like this one:

The thethings.iO Blinders solution for retailers is a very complete solution to empower your retailers and partners with a top-notch IoT solution.

Do you want to try it? Just contact us at hello at thethings.iO.

IoT retailers need better privacy and security? Meet thethings.iO blinder for retailers

Let me tell you a true story. We have a client connecting their products to the Internet with thethings.iO IoT platform. Let’s say that they are manufacturing fridges. And they are the second-best company in the world. Nevertheless, they do not sell directly to clients, they sell through retailers. Some of them are industrial retailers, others are brick and mortar stores, among others. And they sell a lot of connected fridges.

The fact that the fridge is connected enables their final clients to install a mobile application and get added value. Then with the app, the manufacturer is getting a lot of information about their clients, plus their e-mail, phone number, and address; even more information and better classified than that which is available to the retailers.

The manufacturer decided that with the information of thousands of their clients, they do not need retailers anymore. They are going to create an installation team for all the countries where they have a presence, and work through on-line campaigns and others. As a result, they will go to the final customer directly getting rid of the retailers and distributors: the uberization of the retailers.

Do you know that some hardware manufacturers have uberized their vendors? Certainly, we are seeing more and more retailers out of business with the digitalization.

The manufacturer that couldn’t find retailers

Let me tell you a second story. A thethings.iO IoT platform customer contacted us because none of their current retailers wanted to sell (or resell) their digital newest product. Even with the value proposition and the market demand for their product, they didn’t want to give to the manufacturer all the market information; they needed a warranty of privacy.

The solution for the IoT retailers

At thethings.iO we think that this is an important topic on the IoT security and privacy. And we handle this IoT security issue with an innovative tool in the market.

thethings.iO has a solution for the IoT retailers. Imagine an IoT solution that makes sure that your data sits secure and you are not going to be by-passed by your current partners in the future.

If you are not being protected today, meet thethings.iO Retailer Solution and separate the market information from your clients from your vendors, make it impossible to get uberized.

And if you are an IoT manufacturer who suffered at some point of these types of problems, find at thethings.iO your solution to enable your retailers to keep safe and offer a double added value digital product to their clients.

Welcome to the new generation of IoT security and privacy methods for retailers and manufacturers. Welcome to thethings.iO blinders feature.

Create alerts with thethings.iO IoT platform

At thethings.iO IoT platform we love to give power to the IoT developers. This is the reason why since the very beginning we created the Cloud Code framework. The Cloud Code framework enables anyone to apply any algorithm on the top of the data, in real-time, every hour, every day or whenever. Nevertheless, a lot of clients requested a more simple solution to create alerts, set up thresholds, and get e-mails or SMS.

From now, you are ready to create alerts on thethings.iO. Furthermore, any of your clients (with apps or with retailers feature) is going to be able to do it by themselves. That’s awesome right?

How to create an Alert?

Let’s imagine that you want to create an Alert when the temperature is lower than 10. That means that every time the temperature of a device gets lower than 10 you want to send an e-mail to the manager of that device.

Set up the marketplace e-mail system credentials

First of all, we need to introduce another new awesome feature of thethings.iO, the Marketplace. The marketplace is a market where you will find all the available integrations with thethings.iO IoT platform. From mailing systems, to SMS integrations or with a ticketing system.

First step to create an Alert is that you need to set up a mailing system. At the moment at the marketplace we support Sendgrid or Mailchimp (in the future we will support more, or contact us in order to integrate more e-mail services). Once the credentials are set up, you are ready to create an alert.

Create the IoT Alert

After that go to the Alerts section. Select the e-mail notification system that you are going to use to send e-mails to the people you need to alert.

In this case, we set up Sendgrid credentials, so Sendgrid will be our alerting system client (by e-mail). Take into account that, all the alerts by e-mail will use the same e-mail client.

At this point you are ready to add a new Alert. Click the button “Create new Alert” and fill the form.

First you need to define if this alert affects all the Product or just one thing.

In case of a Product Alert, take into account that you will be able to group things for clients. The idea is similar as the tags concept but just for alerts. Then select the Product. After that, it’s time to define the conditions. Remember that you will need to type the resource name (no selector available yet).

The Alerts enable you to define the Check Time of the Alerts. The Check Time means the time that a certain value needs to be out of parameters to generate the first Alert. For example, imagine that the temperature below 10 will launch an alert when during 3 hours the temperature is below 10. If you introduce Zero, it means that the Alert will be activated immediately in real-time.

Then, you will need to introduce the time needed to create a reminder. Once the first Alert gets launched, this time is the time needed to send a reminder if the value is still out of parameters. Zero means no reminder. So, let’s imagine that after launching the first alarm of 3 hours with the temperature below 10, we want to send maximum one message every day.

Finally, you can define the alert that you will send. Choose among e-mail or SMS. In this case you will send an e-mail. Introduce the To, in case there is only one person who is going to receive the e-mail, or check the checkbox in case all your things have the property $settings.email with the e-mail of the manager of each thing. Then introduce a Subject and Body.

That’s how simple is to create an Alert with thethings.iO IoT platform. What do you need more? Just let us know!

Tracking the coffee from production to the cup with Blockchain, IoT and thethings.iO

At thethings.iO IoT platform, we love to work with students. In this case, Carles was doing his engineering thesis at Universitat Politècnica de Catalunya (UPC) on a very exciting topic, Blockchain on the asset tracking coffee world.

The necessity to improve the working conditions of coffee exporting countries combined with the high demand of this product in the world opens a great opportunity to work hand in hand with technology. In the case of the high quality coffee, where production, field and manufacturers need to be tracked, it’s the perfect scenario to bring up state of the art technologies. The goal is to improve the trust and transparency on the chain. And this is the context of the bachelor final project, developed at thethings.iO during the last 5 months.

So, the goal of the project is not only to track coffee manufacturers, exportation and further steps. Moreover, also to show all of this with transparency and traceability to the high quality coffee drinkers.

The project pretends to connect coffee production towards the consumption. From the farmers with the final client. The espresso client should be able to know each step of the production line, starting at the very beginning, when the farmer collects the grain or even previously, until the cup of espresso is on the table, ready to be tasted. Moreover, we do a transparency exercise: The farmer is flesh and blood and we want the client to know the names and surnames who made it possible.

Challenge: Blockchain and IoT

This challenge has brought us the opportunity to implement a solution with a technology widely used these days: Blockchain and IoT. Blockchain is massive replicated ledger formed by blocks where each other is linked by hashes. Nobody can delete neither modify transactions. That way, when a client checks the steps of the production line he or she has the certainty that the coffee comes from the field, manufacturer and country that the distributor says and with a certain working conditions for the farmer. And the Internet of Things (IoT) to automatize, in some parts of the flows, the data acquisition from sensors, trackers and coffee machines, among others.

The result of these months of hard work has been a prototype implemented on thethings.iO IoT platform with a Blockchain platform. On the other hand, we have designed the network, the chaincode (smart contracts for all the actors of the workflows) and deployed a development and production environment.

This final work was presented on July 2019 at the University with a demo where the Blockchain and thethings.iO IoT platform were connected to sensors on the coffee farmlands.

From now, thethings.iO IoT Platform can bring Blockchain systems to you. Contact us if you need to connect any of your assets with a inmutable and secure database for you and all the actors of the project.

, ,

Using Geofencing with thethings.iO

What is geofencing?

Geofencing is a technology that allows you to create geographical boundaries and set up triggers based on location information.

For example, you could send a message to someone when a “thing” has entered or left a specific area defined by your geofence.

Some of the great uses of geofencing include location tracking, monitoring assets, alerts when assets enter/leave, monitoring turnaround time, and more!

Setting up geofences with thething.iO’s IoT platform

Creating geofences

To create a geofence, go to “things” in the sidebar, then click on details next to one of your products (it does not matter what product, the geofence made under one will show up under the others). Then scroll down to the bottom of the page and (1)click the tab “Geofencing.”

Once there, you can (2)click either the polygon or the square to draw your geofence. If you choose polygon, remember to click the first point again to close the shape.

(3)If you select one of the shapes you have already drawn, you have the option to “update geofence” or “delete geofencing”.

(4)You also have the option to change the look of the map to best suit your needs.

When you are finished drawing your geofence, you will be prompted to give it a Name and Tag. You can make the Name whatever you choose, but make sure the Tag is “geo_” followed by the location. For example, “geo_barcelona” (This format will make execution easier later).

Putting tags on a “thing”

Now that you have a geofence, you will want to tag some of your “things” to that geofence. To do this, click back over to the (1)“things” tab, and (2)click details next to one of your things.

Next, click “+Add Tag”. Give this tag the same tag name as you gave to the geofence. For example, I will give this tag the name “geo_barcelona”, to tie this “thing” to my Barcelona geofence.


Making your geofences execute a Job

In order to use your new geofences, you will want to create a Job. Jobs are Javascript code that can be executed once every hour or once a day depending on what you set their Frequency to.

Creating a new Job

To create a new Job, go to “Cloud Code” in the sidebar, then find the section that says “Jobs” and click the “add job” button in the upper right. Give it a name, assign it to the correct product and set its frequency. Now, let’s talk about the code.

Understanding this Job

Here, I have provided an example and explanation of what your Job could look like to get your geofences working.

Overview: This Job goes through all of your “things” under a product and compares their “geo_” tags to the geofences you have made to check if your “thing” is inside/outside one or more geofences. If it is inside/outside one or more geofences, it will send an email to you saying what geofences your thing is inside/outside and it will update any widgets that are using the “alert_inside-outside” resource we will talk about later.

This Job has four functions: job, getGeofences, checkPosition, and checkInsiders.

job: Makes all your “things” under this product available to work with in the rest of the helper functions and calls the helper functions

getGeofences: Makes your geofences avaliable to work with

checkPosition: First, checks to see if a “thing’s” tag matches any of the geofences’ tags. For every match, it checks to see if the “thing” is inside/outisde that geofence. If so, it writes that to the geofencesInside/geofencesOutiside array, respectivaly. It does this for every “thing” under this product.

checkInsidersOutsiders: checks to see if a thing is inside/outside a geofence using the geofencesInside and geofencesOutside arrays you just created. If so, creates a resource that says what geofences the “thing” is inside/outside, and creates a strings of all the geofences a thing is inside/outside and sends this string in an email. It does this for every “thing” under this product.


function job(params, callback)
 ], function(err, res) {
    if (err) return callback(err);
    callback(null, res);

function getGeofences(things, callback)
 async.eachLimit(things, 10, (thing, next) => {
    thethingsAPI.getGeofences(thing.thingToken, (err, geofences) => { 
       if(err) return next();
       thing.geofences = geofences;
 }, (err) => {
 callback(null, things);

function checkPosition(things, callback)
 console.log("======== CHECK POSITION =========");

 async.eachLimit(things, 10, (thing, next) => { 
    thing.geofencesInside = [];
    thing.geofencesOutside = [];

    if(!thing.hasOwnProperty('tags') || !thing.hasOwnProperty('geofences')) return next(); 
    if(!thing.description.hasOwnProperty('geo')) return next(); 
    for(let i=0; i<thing.tags.length; i++){ 
       if(thing.tags[i]._id.startsWith("geo_")) { 
          for(let j=0; j<thing.geofences.length; j++){ 
             if(thing.tags[i]._id === thing.geofences[j].tag.toLowerCase()){ 
                if(geolib.isPointInside({latitude: thing.description.geo.lat, longitude: thing.description.geo.long}, thing.geofences[j].points)){ 
                   console.log("INSIDE --> "+thing.geofences[j]);
                   console.log("OUTSIDE --> "+thing.geofences[j]);

 }, (err) => {
 callback(null, things);

function checkInsidersOutsiders(things, callback)
 let resultInside = [];
 let resultOutside = [];

 console.log("##### CHECK INSIDERS & OUTSIDERS #####");
 async.eachLimit(things, 10, (thing, next) => {

    if (thing.geofencesInside.length > 0)
    console.log("this thing is inside of a geofence");
       var txt_geofenceInside = "";
       for (let i=0; i<thing.geofencesInside.length; i++){
          if (txt_geofenceInside!= "") txt_geofenceInside +=", ";
          txt_geofenceInside += thing.geofencesInside[i].name;
       thing.insideFences = txt_geofenceInside;
       console.log("WRITE RESOURCE");
          key : 'alert_inside-outside',
          value : "Inside: "+txt_geofenceInside
       thethingsAPI.thingWrite(thing.thingToken, { values: resultInside }, {lib:'panel'}, next);
    if (thing.geofencesOutside.length > 0)
       console.log("this thing is outside of a geofence");
       var txt_geofenceOutside = "";
       for (let i=0; i<thing.geofencesOutside.length; i++)
          if (txt_geofenceOutside!= "") txt_geofenceOutside +=", ";
          txt_geofenceOutside += thing.geofencesOutside[i].name;
       thing.outsideFences = txt_geofenceOutside;
       console.log("WRITE RESOURCE");
          key : 'alert_inside-outside',
          value : "Outside: "+txt_geofenceOutside
       thethingsAPI.thingWrite(thing.thingToken, { values: resultOutside }, {lib:'panel'}, next);
    if (txt_geofenceInside !== undefined || txt_geofenceOutside !== undefined) {
       console.log("thingToken: " + thing.thingToken + ", Inside: " + thing.insideFences + ", Outside: " + thing.outsideFences);
 }, (err) => {
 callback(null, things);

Testing your Job

If you want to run some tests manually, you can click on Developers in the sidebar>Developer’s Console. Now on the edit screen for your Job, scroll down and find the button “Preview“.

Click this, and all of your logs will show up in your Developer’s Console. You will also see new data on your geofencing widget in your Insight Dashboard which we will set up next.

Geofencing with your Dashboards

Your geofences will automatically show up on the maps in your main dashboard.

You can create a map by doing the following:



If you have an Insight Dashboard set up with your map widget, you can click on one of the “things” to get a closer look.

For more information on the magic of Insight Dashboards, check out this blog post.

Now, let’s make a widget on our Insight Dashboard that shows us where this “thing” has been.

Once in the Insight Dashboard you wish to edit, click the add widget “+” icon, and do the following:

Note: you don’t need to click Realtime, because the widget will update automatically every hour or every day depending on what you set the Frequency to in your Job.

Under Custom Parameters, you may want to set a limit to the number of entries you will see in the widget. For example, I set mine to 10 values.


Don’t worry if the data looks odd; the data you see when editing an InsightDshboard is randomly generated because you are building a template.

Now save your Insight Dashboard and you are ready to use it!

When on your Main Dashboard, click on one of the “things” in the widget connected to this Insight Dashboard and you should see the results of where this thing has been in terms of the geofences you connected it to.


I hope you enjoyed this tutorial! Feel free to contact us if you have any questions on thethings.iO IoT platform.

, ,

How to Setup your Insight Dashboard

When you log into your thethings.iO IoT platform, the first thing that you see is your Main Dashboard. This dashboard is here to give you the main overview of all of your things. However, sometimes you need to see more specific information about your things. For this reason, we’ve created the Insight Dashboard feature. If you need to see a high level vision of all your IoT project but then deep-dive into the details of one specific thing don’t miss this tutorial. Let’s see what it’s all about!

Main Dashboard and Insight Dashboards in more detail

The Main Dashboard is where you can see broad information about all of your products.

You can create widgets that give your information about a product. However, if you want a dashboard that gives you a closer look into something, you can create an Insight Dashboard. For example, you may want to set up an Insight Dashboard that gives you a closer look at errors. Say you have a table on your Main Dashboard with errors. Now with your Insight Dashboard built, you can click on the “thing” with the error in the Main Dashboard and it will take you directly to that “thing’s” Insight Dashboard. You can create Insight Dashboards under each product.

The difference between products and things

For the purposes of thethings.iO, “Products” are the categories and “things” are the actual things that you have. For example, if you had a set of GPS trackers that would be the “product”, and each GPS tracker would be a “thing”.

The Insight Dashboard is a template, and the template can be used for whatever “things” you choose. This means you can specialize as much or as little you want, pulling up every “thing” under one template or pulling each “thing” up under its very own template.

Example: You have a bunch of buttons with different data, either gsm cell data or gps data. Here, your product is “buttons” and each button is one “thing.” Let’s say you wanted to use a different Insight Dashboard depending on the source of data the button uses. Then you need two Insight Dashboard templates, one for gsm cell data and one for gps data, so that you can customize each Insight Dashboard template by data type. Then when you click on each thing, the thing (which knows by what it’s tag tells it) will go to its specific Insight Dashboard.

Creating Insight Dashboards

To create an Insight Dashboard, go to “things” in the sidebar and then click details on one of the products you see there. Once there, midway down the page, you will see a section that says “Insight Dashboards”. There, you can click “+Create Dashboard, and don’t worry, you can have as many Insight Dashboards as you want!

Adding widgets to your Insight Dashboard

Next click action>edit on the Insight Dashboard you want to edit.

An alert like this will probably pop up here reminding you that this dashboard is a template, thus whatever you change will affect how you view every “thing” using this template. 

When you first open your brand new Insight Dashboard, it will have autogenerated a sample for you(with sample data as well) to show you many of the features available. You can go through and delete these if you like. In addition, when editing or creating your Insight Dashboard, all the data you see is sample data.

Now, let’s create a map to show you how you can personalize your dashboard.

Remember your “Resource” is what you see here under “things” in the side bar>details>a thing at the bottom of the page>details. For example, ctm_payload, geolocation, and msg are my options for resources for this “thing”:

When you’re done editing your Insight Dashboard, don’t forget to save!

Connecting an Insight Dashboard to a widget on the Main Dashboard

Get the Insight Dashboard’s ID

Once you have created the dashboard, you will see it along with its unique ID appear there in the table of Insight Dashboards(things in the sidebar>details next to the product you would like>find the Insight Dashboard table midway down the page>copy the id next to the Insight Dashboard you would like to use). We will use this ID to link a widget on the Main Dashboard to your new Insight Dashboard.

Add The Insight Dashboard’s ID to a widget in the Main Dashboard

In the Main Dashboard that you can get to from the sidebar. Click the “edit dashboard” icon, then the wrench icon in the top, right corner of your widget. Then, click “customize it” and scroll to the bottom. There you will see a spot to set the Insight Dashboard ID. Just paste the ID there, and click done!

Try it out!

Now when you click on a thing in this widget, you will have the option to view more about this thing under the template of your Insight Dashboard. For example, I clicked on the white marker above, and now when I click on Insight Dashboard, it will take me to this following screen, which shows this “thing’s” data under the Insight Dashboard template we just created. Magic!

I hope you enjoyed this tutorial! Feel free to contact us if you have any questions on thethings.iO IoT platform.

, ,

How to connect Thingstream with thethings.iO

In this tutorial, we will set up a Thingstream Button with thethings.iO IoT platform so that when we click the button, it’s GPS location will be sent to thethings.iO and can easily be seen on a map! This tutorial will walk you through setting up your button, creating a flow in Thingstream, sending data to thethings.iO, and then visualizing your data with your thethings.iO insight dashboard.

Find here the video tutorial or scroll down in order to read the step-by-step.

Let’s get started!

First steps

Go to Thingstream and activate your button. Make sure your button says active next to it.

If it doesn’t say “active”, you can follow the steps here in a video on activating your button.

Then, click on the button and look at the “IMSI” number and the “identity” number, these are what we will use in the future to send the button’s specific id with it to thethings.iO.

Creating a thing on thethings.iO IoT platform

First, we must create a “thing” so that we can have a way to listen to our button.

Go to “things” on the sidebar(1) and then click “Create new ioT product”(2). For this project, we will be using the JSON format.

Once your thing is created, click details and let’s take note of some things. In the top left corner, we see “Product ID” and “Hash”.

These are what we will use in the http request to tell Thingstream to send the information to this “thing” on thethings.iO.

You can learn more about http/s and JSON here in a past blog post.

Creating a flow on Thingstream

For this project, it will be best to begin with a template so, within Thingstream’s site, click on flows > create flow > from flow library > Thingstream button > Email CSDK Tracker Lctn. This flow will give us a starting point. You can change the name if you want, and then click edit to personalizing it!

Make the flow look like the following by putting “http request” where “location mail” is and adding “msg.payload” to help you with troubleshooting later. 

Understanding the flow

Now, let’s take a closer look at the flow. What kind of data the “GPS or GSM” node takes in, either GPS data or GSM cell data, will affect which path the flow takes. In each path, we are going to organize our data with a msg.payload that we can send with our http request to thethings.iO.

Organizing the data

Next, let’s change the “Prepare GPS…” node. We will add in “externalId”, “identity”, and “timePushed”. The first two will identify what button was pushed and the later will tell when it was pushed. You can also delete the addition of the url if you choose because thethings.iO will offer you with an even better, more functional map :).

Tip: If you are extra curious and want to see what values are available to you in “msg”, you can change your Id value(here “externalId”) to msg and see what it prints when it comes up in thethings.iO.

var gps = msg.payload['gps-location'];
var lon = gps.lon;
var lat = gps.lat;
var source = 'GPS';
msg.payload = {
return msg;

We will make similar changes to the “prepare GSM…” node.

var lon = msg.payload.longitude;
var lat = msg.payload.latitude;
var source = 'GSM cell data';
msg.payload = {
return msg;

Making the http request

Finally, that leaves the “http request” node. For this one, make sure the method is set to POST and the return is “a parsed JSON object”. For the url, we will follow this pattern:


Remember your productId and hash will come from your thing on thethings.iO site. The “idname” we will set to “externalId” and the fname will be the name of our function (which we will write next); let’s call it “thingstream-parser”. Thus, your url should look something like this:


You can learn more about http/s and JSON here in a past blog post.

Creating a function for your “thing”

To create a function, go to thethings.iO site, and click “cloud code” in the sidebar. Then click “Add Function”.

Once here, give the function a name. It must be the same one as you used in your http request so in our case, that’s “thingstream-parser”. Then, assign your function to a “thing”, this should be whatever “thing” you have been using to represent your button on thethings.iO site.

Now, change the code to look like this:

function main(params, callback){

var result = [
 "key": "geolocation",
 "value": params.payload.source,
 "lat": params.payload.lat,
 "long": params.payload.long
 "key": "$geo",
 "value" : {
 "type": "Point",
 "coordinates": [params.payload.long, params.payload.lat]
callback(null, result);



More on the $geo and geo keys can be found here in one of our previous blog posts about how to geolocalize things on a map.

You can also include a console.log of the payload which you will be able to see in the “developer’s console” (“developers” in thethings.iO sidebar > “developer’s console”) every time you click your button.

Testing your button

Deploying the flow for your button

We’re almost ready to click the button! Let’s deploy our flow. Make sure you are looking at your flow on the Thingstream site, then in the upper right corner find and click Deploy > Deploy Test > A Thing > then your button > Deploy.

Click the button!

We’re now ready to click the button! It may take some time for the button to send the http request after being clicked so be patient and let it do it’s thing :). Usually you will see the color green when it is first clicked, then yellow when it is trying to make a connecting, blue when it has made then connection and finally pink when it is talking to the server. If all goes well it will let out a cheerful “beep!” and flash green to tell you that it’s done. At this point, you should see the message


in the debug window of your flow.

Reading your data on the thethings.iO site

To get to your data, click on “things” in the sidebar, find your “thing” and then click “details”. Towards the bottom of the page, you should see your IMSI number from the button there under “Names”. Click “details”. Now you should see a screen like this.

Under “ctm_payload”, you can see all the payload messages you sent with your button.

Under “geolocation”, you can view the map, or view the list view.

Personalizing your button data with thethings.iO dashboard

First, let’s create a map of all of our buttons under our Button “thing”.

On “Customize It”, you may want to change map-type and enable polygons(this will make the map have arrows that show you in what direction the button has traveled).

Now, let’s create a table that shows when each button was last pressed.

Here’s what we have so far! These are just a few examples of all the cool things you can do with your insight dashboard. Feel free to explore some more!

Here are a couple link’s to some tutorials for customizing your dashboard even more:

I hope you enjoyed this tutorial! Feel free to contact us if you have any questions on thethings.iO IoT platform.


Connect anything to thethings.iO IoT platform with HTTP/S and your JSON

On this post we would like to show you how to connect anything using HTTP/S and your JSON. We used to get contacted by IoT developers and companies who were having devices already connected with their own JSON structures. Usually they wanted to move to thethings.iO IoT platform, so this is the reason why we created the HTTP subscription gateways.

The HTTP subscription gateways enables developers to send data to a unique URL without need to deal with thingTokens, activations among others. We provision automagically all the devices identified with an ID or name to thethings.iO in a simple way.

Find below the video tutorial with an example or find here the HTTP subscription documentation.

Step by Step tutorial

First of all, create a thethings.iO IoT platform account. Go to https://thethings.io and follow the steps. In addition, try to fill the information during the first session so we will be able to help you more.

After that, go to create a Product at the Things Manager. Select JSON as a type of product. Once created, then click on Details of the created Product.

Now it’s important to learn to create the subscription URL. The base path for the subscription is:


Get the Product ID and the Hash defined on the Details box of your recently created Product at thethings.iO. With these values you will be able to generate the correct HTTP subscription URL. The subscription URL will be followed by the parameters idname and fname. The idname parameter will define the name that the ID of the device will have inside the JSON coming in the body (e.g. in LoRa dev_id, in Sigfox idname, etc). The fname parameter will define the name of the function developed on Cloud Code that will parse the JSON sent in the body (e.g. http_parser). The final URL should be something like this:


After that, this is the moment to create the function on Cloud Code to parse the JSON sent to thethings.iO. Let’s imagine that you are going to send the JSON file:

{"id": "1234", "temperature": "10"}

For that type of JSON you will need a function on Cloud Code like this:

function main(params, callback){

var result = [
"key": "temp",
"value": params.payload.temperature

callback(null, result);

All the data coming at the JSON is coming into the object params.payload. That means that if you have a complex JSON, just use the object params.payload to find all your data and store it at thethings.iO with the key-value JSON needed at thethings.iO.

From now, you will be receiving the temperature and store it as temp, so you are ready to create a dashboard and more with thethings.iO. BTW at the video we used Postman to simulate a device sending data. Nevertheless we have clients using this technique to connect LoRa connectivity services, Sigfox, BLE gateways and others.

Use thethings.iO the most simple enterprise IoT platform. And feel free to send us questions and contact us in case we have to help you more!