Container - ThingsBoard
Container - ThingsBoard
Section titled “Container - ThingsBoard”Summary
Section titled “Summary”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
Use Cases
Section titled “Use Cases”On-Premises IoT Gateway
Section titled “On-Premises IoT Gateway”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.
Device Management Platform
Section titled “Device Management Platform”Manage thousands of IoT devices from a central dashboard. ThingsBoard provides device provisioning, credentials management, and remote configuration capabilities.
Data Processing Pipeline
Section titled “Data Processing Pipeline”Use ThingsBoard’s rule engine to transform, filter, and route telemetry data to external systems or trigger actions based on sensor readings.
Prerequisites
Section titled “Prerequisites”Container Requirements
Section titled “Container Requirements”ThingsBoard requires substantial resources compared to other Containers:
| Resource | Minimum | Recommended |
|---|---|---|
| RAM | 1GB | 2GB+ |
| CPU | 1 core | 2+ cores |
| Storage | 500MB | 2GB+ |
| Architecture | arm64, x86 | arm64, x86 |
ThingsBoard will not run on devices with limited memory. Verify available resources before deployment.
Container Network
Section titled “Container Network”Configure a virtual ethernet interface for the ThingsBoard Container:
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1Storage
Section titled “Storage”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/thingsboardBasic Configuration
Section titled “Basic Configuration”Step 1: Enable Container Mode
Section titled “Step 1: Enable Container Mode”Before using Containers, enable container mode on your RouterOS device:
/system/device-mode/update container=yesStep 2: Create Network Interface
Section titled “Step 2: Create Network Interface”/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/24Step 3: Create Environment Variables
Section titled “Step 3: Create Environment Variables”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"Step 4: Pull ThingsBoard Image
Section titled “Step 4: Pull ThingsBoard Image”/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=thingsboardStep 5: Start ThingsBoard
Section titled “Step 5: Start ThingsBoard”/container start thingsboardInitial startup takes several minutes while ThingsBoard initializes the database. Monitor progress with:
/log print followVerification
Section titled “Verification”Accessing ThingsBoard UI
Section titled “Accessing ThingsBoard UI”After startup, access the ThingsBoard web interface:
- Open browser to
http://172.17.0.2:8080(or your container IP) - Default login:
[email protected]/sysadmin
MQTT Test
Section titled “MQTT Test”Verify MQTT connectivity by publishing a test message:
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}"Check Container Status
Section titled “Check Container Status”/container/print detailVerify ThingsBoard is fully started by checking logs for:
ThingsBoard Application started!Configuration
Section titled “Configuration”Environment Variables Reference
Section titled “Environment Variables Reference”| Variable | Description | Default |
|---|---|---|
JAVA_OPTS | JVM memory settings | -Xms512M -Xmx1024M |
_DATABASE_URL | PostgreSQL/HSQLDB connection | hsqldb file |
TB_QUEUE_TYPE | Queue implementation | in-memory |
TB_SERVICE_TYPE | ThingsBoard service type | monolith |
Memory Configuration
Section titled “Memory Configuration”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"PostgreSQL Database (Advanced)
Section titled “PostgreSQL Database (Advanced)”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_passwordEnabling HTTPS
Section titled “Enabling HTTPS”Create Certificates
Section titled “Create Certificates”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=pemConfigure HTTPS Port
Section titled “Configure HTTPS Port”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=8443SSL MQTT
Section titled “SSL MQTT”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=8883Self-signed certificates will cause SSL connection warnings in clients. For production, obtain certificates from a trusted CA.
Troubleshooting
Section titled “Troubleshooting”Container Fails to Start
Section titled “Container Fails to Start”- Verify sufficient RAM:
/system/resource/print- Check storage space:
/disk/print- Review logs for errors:
/log print where message~"thingsboard"Slow Performance
Section titled “Slow Performance”ThingsBoard requires significant resources. If experiencing slowness:
- Increase JVM heap size in environment variables
- Use PostgreSQL instead of embedded HSQLDB
- Ensure adequate RAM (minimum 2GB recommended)
- Consider using a dedicated SSD/USB3 storage device
Cannot Access Web Interface
Section titled “Cannot Access Web Interface”- Verify container IP is reachable:
/tool/ping 172.17.0.2- Check NAT rules:
/ip/firewall/nat/print- Verify ThingsBoard is running:
/container/printMQTT Connection Refused
Section titled “MQTT Connection Refused”- Verify MQTT port is not blocked:
/ip/firewall/filter/print where port~"1883"- Check ThingsBoard logs for MQTT startup:
/log print where message~"mqtt"Database Initialization Fails
Section titled “Database Initialization Fails”If using external PostgreSQL:
- Verify database exists and is accessible
- Check credentials in environment variables
- Ensure network connectivity to database server
Security Considerations
Section titled “Security Considerations”Firewall Configuration
Section titled “Firewall Configuration”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=dropRegular Updates
Section titled “Regular Updates”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