How to Setup ThingsBoard IOT Platform on Cloud VM [Ubuntu/Debian]

ThingsBoard-IOT-Platform

Making a Production grade IOT project is not just sending data from Device to Cloud and vice-versa, but it requires many other functionalities like

  • Proper Security Standards
  • Device Provisioning and management
  • Storing and Visualizing telemetry data
  • Rules to be implemented on the data
  • User Management with RBA (Role Based Access)

Thankfully we already have an Open-Source IOT Platform – ThingsBoard which cater’s to all the mentioned needs and is free of cost.

ThingsBoard comes in 2 different editions:

  1. ThingsBoard Community Edition
  2. ThingsBoard Professional Edition

The Community edition is Open-Source and it’s free of cost. On the other hand, the Professional edition offers additional features but comes with a cost attached. Also, both of these Editions can be Self-Managed or can be subscribed via ThingsBoard Cloud.

Here in this Article we will learn how to setup an Instance of the Open-Sourced ThingsBoard Community Edition on a cloud VM

ThingsBoard CE on Ubuntu Virtual Machine

Step 1 : Provision and Configure a VM as follows
  • 1 vCPU
  • 1GB RAM
  • 25GB Hard Disk
  • Ports Open : 8080(platform), 1883(mqtt), 5683(coap)
Step 2 : SSH into the VM and update the repo
sudo apt update
Step 3 : Install Java 11 (OpenJDK)
sudo apt install openjdk-11-jdk
sudo update-alternatives --config java
java -version
Step 4 : ThingsBoard service installation
# Download installation package
wget https://github.com/thingsboard/thingsboard/releases/download/v3.2.2/thingsboard-3.2.2.deb

# Install ThingsBoard as a service
sudo dpkg -i thingsboard-3.2.2.deb
Step 5 : Configure PostgreSQL for ThingsBoard database
# import the repository signing key and add repository contents to your system
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
RELEASE=$(lsb_release -cs)
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee  /etc/apt/sources.list.d/pgdg.list

# install and start the postgresql service
sudo apt update
sudo apt -y install postgresql-12
sudo service postgresql start

Change password for the main postgres user

sudo su - postgres
psql
\password
\q

Ctrl+D to logout from postgres user

Create ThingsBoard Database

psql -U postgres -d postgres -h 127.0.0.1 -W
CREATE DATABASE thingsboard;
\q
Step 6 : Modify the ThingsBoard config file with PostgreSQL info
sudo nano /etc/thingsboard/conf/thingsboard.conf

Add the following lines to the configuration file. Don’t forget to replace “PUT_YOUR_POSTGRESQL_PASSWORD_HERE” with your real postgres user password:

# DB Configuration 
export DATABASE_ENTITIES_TYPE=sql
export DATABASE_TS_TYPE=sql
export SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect
export SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
export SPRING_DATASOURCE_USERNAME=postgres
export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE
export SPRING_DATASOURCE_MAXIMUM_POOL_SIZE=5
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
Step 7 : Setup the Queue Service

By Default we use built-in and default – In-Memory queue service. For more options check this LINK

Step 8 : [OPTIONAL] make JAVA use fixed amount of RAM

Edit ThingsBoard configuration file

sudo nano /etc/thingsboard/conf/thingsboard.conf

Add the following lines to the configuration file and save it.

# Update ThingsBoard memory usage and restrict it to 256MB in /etc/thingsboard/conf/thingsboard.conf
export JAVA_OPTS="$JAVA_OPTS -Xms256M -Xmx256M"
Step 9 : Run Installation Script

The –loadDemo flag will load sample data for tenants, customers and users.

# --loadDemo option will load demo data: users, devices, assets, rules, widgets.
sudo /usr/share/thingsboard/bin/install/install.sh --loadDemo
Step 10 : Start ThingsBoard service
sudo service thingsboard start

Now you can access your ThingsBoard instance at http://[YOUR-IP-ADDRESS]:8080

The default system admin username and password will be : sysadmin@thingsboard.org / sysadmin

Bonus: Docker Installation

Another faster deployment strategy for quickly come up with ThingsBoard Instance is using Docker Container. Just execute the below commands and your instance will be up and running.

Install Docker first : Docker for Ubuntu

mkdir -p ~/.mytb-data && sudo chown -R 799:799 ~/.mytb-data
mkdir -p ~/.mytb-logs && sudo chown -R 799:799 ~/.mytb-logs
docker run -it -p 8080:9090 -p 1883:1883 -p 5683:5683/udp -v ~/.mytb-data:/data -v ~/.mytb-logs:/var/log/thingsboard --name mytb --restart always thingsboard/tb-postgres

Now we have installed the ThingsBoard platform, but there is a whole universe to be explored about how to use ThingsBoard to make your IOT application. Read the official and well put ThingsBoard documentation.

RESIN.IO – Update your IOT Devices Remotely

Resin.io is a web server which helps to deploy our code on a variety of Linux devices connected to the platform. You can also monitor, manage and update your fleet of devices from anywhere around the world.

Resin.io can also be regarded as fleet management and remote update solution – DevOps over IOT ; So the idea is to provide tools similar to what developers use in the cloud but to make them adaptable to the embedded scenario.

Moreover, the Switch between the older and the latest version will be extremely fast (no message displaying your software is being updated)

resin.io platform

Resin.io works in 3 basic steps

1. Develop

2. Deploy

3. Manage

Lets dig deeper and find out how these things works

Here is a the DFD(data flow diagram) which shows how Resin.io platform works

resin.io data flow diagram