Skip to content

Container - ThingsBoard

ThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management. Running ThingsBoard as a Container on RouterOS enables you to build IoT solutions without external cloud services, keeping all data on-premises.

ThingsBoard supports multiple communication protocols including MQTT, HTTP, CoAP, and LwM2M, making it compatible with a wide range of IoT devices. The platform provides:

  • Device connectivity and management
  • Data collection and telemetry
  • Rule engine for data processing
  • Dashboard visualization
  • Alarm and event management

Deploy ThingsBoard locally to collect data from sensors and devices without relying on cloud services. This is ideal for applications requiring data sovereignty or operating in environments without internet connectivity.

Manage thousands of IoT devices from a central dashboard. ThingsBoard provides device provisioning, credentials management, and remote configuration capabilities.

Use ThingsBoard’s rule engine to transform, filter, and route telemetry data to external systems or trigger actions based on sensor readings.

ThingsBoard requires substantial resources compared to other Containers:

ResourceMinimumRecommended
RAM1GB2GB+
CPU1 core2+ cores
Storage500MB2GB+
Architecturearm64, x86arm64, x86

ThingsBoard will not run on devices with limited memory. Verify available resources before deployment.

Configure a virtual ethernet interface for the ThingsBoard Container:

/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1

ThingsBoard requires persistent storage for its database and configuration. Create a mount point for data persistence:

/container/mounts/add name=thingsboard_data src=disk1/thingsboard/data dst=/data
/container/mounts/add name=thingsboard_logs src=disk1/thingsboard/logs dst=/var/log/thingsboard

Before using Containers, enable container mode on your RouterOS device:

/system/device-mode/update container=yes
/interface/bridge/add name=containers
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1
/interface/bridge/port add bridge=containers interface=veth1
/ip/address/add address=172.17.0.1/24 interface=containers
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24

ThingsBoard requires specific environment variables for operation:

/container/envs/add list=TB key=LOADING_ATTRS value="-XX:+UseG1GC -XX:+UseLargePages -XX:+UseStringDeduplication -Xms1024M -Xmx2048M"
/container/envs/add list=TB key=JAVA_OPTS value="-XX:+UseG1GC -XX:+UseLargePages -XX:+UseStringDeduplication -Xms1024M -Xmx2048M"
/container/envs/add list=TB key=_DATABASE_URL value="jdbc:hsqldb:file:/data/db/thingsboard;dburl.encoding=UTF8"
/container/envs/add list=TB key=CONF_DATABASE_URL value="jdbc:hsqldb:file:/data/db/thingsboard;dburl.encoding=UTF8"
/container/envs/add list=TB key=SQL_JDBC_URL value="jdbc:hsqldb:file:/data/db/thingsboard;dburl.encoding=UTF8"
/container/config/set registry-url=https://registry-1.docker.io
/container/add remote-image=thingsboard/tb-postgres:latest interface=veth1 root-dir=disk1/images/thingsboard name=thingsboard
/container start thingsboard

Initial startup takes several minutes while ThingsBoard initializes the database. Monitor progress with:

/log print follow

After startup, access the ThingsBoard web interface:

  1. Open browser to http://172.17.0.2:8080 (or your container IP)
  2. Default login: [email protected] / sysadmin

Verify MQTT connectivity by publishing a test message:

Terminal window
mosquitto_pub -h 172.17.0.2 -p 1883 -t "v1/devices/me/telemetry" -m '{"temperature": 25.5, "humidity": 60}'

Or using an MQTT client:

/tool/mqtt/publish broker-address=172.17.0.2 topic="v1/devices/me/telemetry" message="{\"temperature\": 25.5}"
/container/print detail

Verify ThingsBoard is fully started by checking logs for:

ThingsBoard Application started!
VariableDescriptionDefault
JAVA_OPTSJVM memory settings-Xms512M -Xmx1024M
_DATABASE_URLPostgreSQL/HSQLDB connectionhsqldb file
TB_QUEUE_TYPEQueue implementationin-memory
TB_SERVICE_TYPEThingsBoard service typemonolith

Adjust JVM heap size based on available RAM:

/container/envs/add list=TB key=JAVA_OPTS value="-XX:+UseG1GC -Xms512M -Xmx1024M"

For devices with more RAM:

/container/envs/add list=TB key=JAVA_OPTS value="-XX:+UseG1GC -XX:+UseLargePages -Xms1536M -Xmx3072M"

For production deployments, use an external PostgreSQL database:

/container/envs/add list=TB key=TB_SERVICE_TYPE value=monolith
/container/envs/add list=TB key=TB_QUEUE_TYPE value=postgres
/container/envs/add list=TB key=DATABASE_URL value="jdbc:postgresql://192.168.1.100:5432/thingsboard"
/container/envs/add list=TB key=DATABASE_DRIVER_NAME value=org.postgresql.Driver
/container/envs/add list=TB key=DATABASE_DRIVER_URL value="jdbc:postgresql://192.168.1.100:5432/thingsboard"
/container/envs/add list=TB key=DATABASE_USERNAME value=thingsboard
/container/envs/add list=TB key=DATABASE_PASSWORD value=your_password

Generate self-signed certificates for testing:

/certificate add name=thingsboard-common days-valid=365 common-name=thingsboard
/certificate sign [find name=thingsboard-common]

Export the certificate:

/certificate export-certificate thingsboard-common type=pem

ThingsBoard listens on port 8443 for HTTPS. Create firewall rules:

/ip/firewall/nat/add chain=dstnat dst-address=192.168.88.1 dst-port=8443 protocol=tcp to-addresses=172.17.0.2 to-ports=8443

ThingsBoard supports MQTT over SSL on port 8883:

/ip/firewall/nat/add chain=dstnat dst-address=192.168.88.1 dst-port=8883 protocol=tcp to-addresses=172.17.0.2 to-ports=8883

Self-signed certificates will cause SSL connection warnings in clients. For production, obtain certificates from a trusted CA.

  1. Verify sufficient RAM:
/system/resource/print
  1. Check storage space:
/disk/print
  1. Review logs for errors:
/log print where message~"thingsboard"

ThingsBoard requires significant resources. If experiencing slowness:

  1. Increase JVM heap size in environment variables
  2. Use PostgreSQL instead of embedded HSQLDB
  3. Ensure adequate RAM (minimum 2GB recommended)
  4. Consider using a dedicated SSD/USB3 storage device
  1. Verify container IP is reachable:
/tool/ping 172.17.0.2
  1. Check NAT rules:
/ip/firewall/nat/print
  1. Verify ThingsBoard is running:
/container/print
  1. Verify MQTT port is not blocked:
/ip/firewall/filter/print where port~"1883"
  1. Check ThingsBoard logs for MQTT startup:
/log print where message~"mqtt"

If using external PostgreSQL:

  1. Verify database exists and is accessible
  2. Check credentials in environment variables
  3. Ensure network connectivity to database server

Restrict access to ThingsBoard:

/ip/firewall/filter/add chain=input src-address=192.168.1.0/24 protocol=tcp dst-port=8080,8443,1883,8883 action=accept
/ip/firewall/filter/add chain=input protocol=tcp dst-port=8080,8443,1883,8883 action=drop

Pull updated images regularly:

/container/remove thingsboard
/container/add remote-image=thingsboard/tb-postgres:latest interface=veth1 root-dir=disk1/images/thingsboard name=thingsboard
/container start thingsboard