Новаком
IOT

ThingsBoard: пошаговый гайд по IoT-платформе — от установки до дашборда

Полное руководство по ThingsBoard на русском: установка, подключение устройств, телеметрия, правила, дашборды, интеграции. Сравнение CE vs PE, Docker-деплой, REST API.

Н
Новаком
2026-05-22 · 14 минут чтения

Зачем нужна IoT-платформа

Устройства собирают данные — температуру, вибрацию, уровень жидкости, GPS-координаты. Без платформы каждый проект превращается в набор самописных скриптов: MQTT-брокер здесь, база там, Grafana сбоку. Это работает на 10 устройствах, но ломается на 1 000.

IoT-платформа берёт на себя:

  • Подключение устройств — MQTT, CoAP, HTTP, LwM2M, Modbus, OPC-UA
  • Хранение телеметрии — time-series БД с автоматическим TTL
  • Визуализацию — дашборды без фронтенд-разработки
  • Правила и алерты — Rule Engine с цепочкой обработки
  • Управление устройствами — RPC-команды, OTA, конфигурация
  • Мультитенантность — изоляция данных между клиентами

ThingsBoard — одна из самых зрелых open-source платформ, которая закрывает все эти задачи.

ThingsBoard: обзор архитектуры

ThingsBoard — open-source IoT-платформа, разрабатываемая с 2016 года. Написана на Java (Spring Boot), работает на Linux, Windows, Docker, Kubernetes.

Основные компоненты

КомпонентНазначениеТехнология
TransportПриём данных от устройствMQTT, CoAP, HTTP, LwM2M
Rule EngineОбработка сообщений, маршрутизация, обогащениеЦепочки нод (node chains)
CoreУправление сущностями, REST API, WebSocketSpring Boot, gRPC
База данныхХранение сущностей и телеметрииPostgreSQL + Cassandra/TimescaleDB
UIДашборды, администрированиеAngular

Иерархия сущностей

ThingsBoard оперирует иерархией:

TenantCustomerDevice / Asset / Dashboard

  • Tenant — арендатор платформы (компания или проект)
  • Customer — клиент тенанта (подрядчик, филиал, конечный пользователь)
  • Device — физическое или виртуальное устройство
  • Asset — логическая группировка (здание, цех, участок)
  • Dashboard — визуализация данных

Такая модель подходит и для одного проекта, и для SaaS-платформы с сотнями клиентов.

Community Edition vs Professional Edition

КритерийCE (бесплатная)PE (платная)
ЛицензияApache 2.0Коммерческая
УстройстваБез ограниченийБез ограничений
Rule EngineПолныйПолный + дополнительные ноды
ДашбордыБазовые виджетыРасширенные виджеты (SCADA, карты, графики)
White-labelingНетДа (логотип, домен, цвета)
ИнтеграцииMQTT, HTTP, CoAP+ Sigfox, LoRaWAN Network Server, OPC-UA, TCP/UDP
SchedulerНетДа (расписания команд, отчётов)
CSV/XLS exportБазовыйРасширенный с шаблонами
Группы устройствСтатическиеСтатические + динамические
ПоддержкаСообщество, GitHubSLA, приоритетная поддержка
Стоимость0 ₽от $10/устройство/месяц (cloud) или лицензия

Рекомендация: начинайте с CE — её функциональности хватает для 90% проектов. PE нужна, когда требуется white-labeling для конечных клиентов или готовые интеграции с LoRaWAN Network Server.

Установка ThingsBoard: три сценария

Сценарий 1: Docker Compose (рекомендуется для старта)

Самый быстрый способ — Docker Compose. Один файл, одна команда.

# Клонируем конфигурацию
git clone https://github.com/thingsboard/thingsboard.git
cd thingsboard/docker

# Создаём .env файл
cat > .env << 'EOF'
TB_QUEUE_TYPE=in-memory
SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard
EOF

# Запускаем
docker compose up -d

После запуска: http://localhost:8080

Логин по умолчанию:

РольЛогинПароль
Системный администраторsysadmin@thingsboard.orgsysadmin
Тенант-администраторtenant@thingsboard.orgtenant

Сценарий 2: Ubuntu / Debian (продакшен)

# Java 17
sudo apt install -y openjdk-17-jdk

# PostgreSQL 15
sudo apt install -y postgresql-15

# ThingsBoard CE
wget https://github.com/thingsboard/thingsboard/releases/download/v3.7/thingsboard-3.7.deb
sudo dpkg -i thingsboard-3.7.deb

# Настройка БД
sudo -u postgres psql -c "CREATE DATABASE thingsboard;"
sudo -u postgres psql -c "CREATE USER tb WITH PASSWORD 'your_password';"
sudo -u postgres psql -c "GRANT ALL ON DATABASE thingsboard TO tb;"

# Конфигурация
sudo nano /etc/thingsboard/conf/thingsboard.conf
# SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
# SPRING_DATASOURCE_USERNAME=tb
# SPRING_DATASOURCE_PASSWORD=your_password

# Инициализация схемы и запуск
sudo /usr/share/thingsboard/bin/install/install.sh
sudo systemctl start thingsboard
sudo systemctl enable thingsboard

Сценарий 3: Kubernetes (масштабирование)

Для кластеров от 10 000 устройств ThingsBoard предоставляет Helm Chart:

helm repo add thingsboard https://thingsboard.github.io/helm-charts
helm install tb thingsboard/thingsboard \
  --set cassandra.enabled=true \
  --set kafka.enabled=true \
  --namespace iot

В Kubernetes-деплое компоненты (Transport, Rule Engine, Core) масштабируются независимо. Transport можно масштабировать горизонтально для обработки миллионов подключений.

СценарийУстройстваРекомендация
Разработка / PoCдо 100Docker Compose, in-memory queue
Продакшен (малый)100–5 000Ubuntu + PostgreSQL + Kafka
Продакшен (средний)5 000–50 000Docker Compose + Cassandra + Kafka
Продакшен (крупный)50 000+Kubernetes + Cassandra + Kafka

Подключение первого устройства

Шаг 1: Создание устройства в UI

  1. Войдите как Tenant Administrator
  2. Devices → Add new device
  3. Укажите имя: temperature-sensor-01
  4. Тип устройства: temperature-sensor
  5. Скопируйте Access Token — он понадобится для отправки данных

Шаг 2: Отправка телеметрии по MQTT

# Установка mosquitto-клиента
sudo apt install -y mosquitto-clients

# Отправка телеметрии
mosquitto_pub -h localhost -p 1883 \
  -t "v1/devices/me/telemetry" \
  -u "YOUR_ACCESS_TOKEN" \
  -m '{"temperature": 23.5, "humidity": 61.2}'

Шаг 3: Отправка по HTTP (альтернатива)

curl -X POST http://localhost:8080/api/v1/YOUR_ACCESS_TOKEN/telemetry \
  -H "Content-Type: application/json" \
  -d '{"temperature": 23.5, "humidity": 61.2}'

Шаг 4: Проверка в UI

Devices → temperature-sensor-01 → Latest telemetry — здесь появятся ключи temperature и humidity с последними значениями.

Типы данных в ThingsBoard

ТипОписаниеПример
TelemetryВременные ряды (метрики)temperature, humidity, voltage
Attributes (client)Атрибуты устройства, которые оно само сообщаетfirmware_version, ip_address
Attributes (shared)Атрибуты, которые задаёт серверconfig_interval, threshold
Attributes (server)Атрибуты, вычисляемые на сервереlast_activity_time

Телеметрия — time-series с таймстемпом. Атрибуты — key-value без истории (перезаписываются).

Rule Engine: обработка данных

Rule Engine — сердце ThingsBoard. Каждое входящее сообщение проходит через цепочку нод (Rule Chain).

Структура Rule Chain

[Device] → Message → [Input Node] → [Filter] → [Enrichment] → [Transform] → [Action]

Основные типы нод

КатегорияНодаЧто делает
FilterScriptJavaScript-фильтр: пропускает или отклоняет сообщение
FilterMessage TypeФильтр по типу сообщения (telemetry, attribute, RPC)
EnrichmentOriginator AttributesДобавляет атрибуты устройства в метаданные
EnrichmentRelated AttributesДобавляет атрибуты связанных сущностей
TransformScriptJavaScript-трансформация payload
TransformTo EmailФормирует email из шаблона
ActionSave TimeseriesСохраняет телеметрию в БД
ActionCreate AlarmСоздаёт алерт
ActionREST API CallВызывает внешний API
ActionSend EmailОтправляет email через SMTP
ActionRPC CallОтправляет команду на устройство

Пример: алерт при превышении температуры

  1. Input Node → принимает сообщение
  2. Script Filter — проверяем условие:
return msg.temperature > 50;
  1. Create Alarm — если true, создаём алерт типа High Temperature
  2. Send Email — уведомляем оператора

Rule Engine работает асинхронно. В кластерном деплое Rule Engine ноды распределяются по серверам — это обеспечивает горизонтальное масштабирование обработки.

Дашборды: визуализация без кода

ThingsBoard предоставляет визуальный редактор дашбордов. Виджеты добавляются drag-and-drop, данные подтягиваются из телеметрии устройств.

Основные виджеты

ВиджетНазначениеПример использования
Timeseries Line ChartГрафик временных рядовТемпература за 24 часа
Digital GaugeКруговой индикаторТекущая влажность
Map (OpenStreetMap)Карта с маркерами устройствGPS-трекеры
Alarm TableТаблица активных алертовСписок аварий
Entity TableТаблица устройств с атрибутамиСписок датчиков с последними значениями
HTML CardПроизвольный HTMLКастомный UI-элемент
Control WidgetКнопка / переключательВключить реле, открыть клапан

Создание дашборда: пошагово

  1. Dashboards → Add new dashboard → укажите имя
  2. Open dashboard → Edit mode (карандаш)
  3. Add widget → Charts → Timeseries Line Chart
  4. В настройках виджета выберите Entity: temperature-sensor-01
  5. Добавьте ключи: temperature, humidity
  6. Настройте период: Last 24 hours
  7. Save dashboard

Дашборды можно расшаривать через публичные ссылки или назначать конкретным Customer.

REST API: интеграция с внешними системами

ThingsBoard предоставляет полноценный REST API. Все операции, доступные в UI, доступны через API.

Аутентификация

# Получение JWT-токена
TOKEN=$(curl -s -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"tenant@thingsboard.org","password":"tenant"}' \
  | jq -r '.token')

Получение телеметрии

# Последние значения
curl -s http://localhost:8080/api/plugins/telemetry/DEVICE/$DEVICE_ID/values/timeseries \
  -H "X-Authorization: Bearer $TOKEN"

# Исторические данные за период
curl -s "http://localhost:8080/api/plugins/telemetry/DEVICE/$DEVICE_ID/values/timeseries?keys=temperature&startTs=1716300000000&endTs=1716386400000" \
  -H "X-Authorization: Bearer $TOKEN"

Отправка RPC-команды на устройство

curl -X POST http://localhost:8080/api/rpc/oneway/$DEVICE_ID \
  -H "X-Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"method": "setRelay", "params": {"state": true}}'

Основные эндпоинты

МетодEndpointОписание
POST/api/auth/loginАутентификация
GET/api/tenant/devicesСписок устройств тенанта
POST/api/deviceСоздание устройства
GET/api/plugins/telemetry/DEVICE/:id/values/timeseriesПоследняя телеметрия
POST/api/rpc/oneway/:idОдносторонняя RPC-команда
POST/api/rpc/twoway/:idДвусторонняя RPC-команда
GET/api/alarm/:entityType/:entityIdСписок алертов
POST/api/dashboardСоздание дашборда

Интеграции: подключение внешних источников

MQTT-интеграция (стороннего брокера)

Если устройства уже отправляют данные на внешний MQTT-брокер (например, Mosquitto), ThingsBoard может подписаться на его топики:

Integration → MQTT → Broker: mqtt://external-broker:1883
Topic: sensors/+/telemetry
Uplink converter: парсит payload в формат ThingsBoard

Интеграция с Telegram (через Rule Engine)

  1. Создайте REST API Call ноду в Rule Chain
  2. URL: https://api.telegram.org/botYOUR_TOKEN/sendMessage
  3. Body:
{
  "chat_id": "YOUR_CHAT_ID",
  "text": "Alarm: ${alarmType} on device ${deviceName}"
}

Популярные интеграции

ИнтеграцияСпособНазначение
GrafanaREST API + плагинРасширенная визуализация
KafkaTB Kafka IntegrationСтриминг телеметрии в data pipeline
Node-REDMQTT / RESTСложные сценарии автоматизации
TelegramREST API Call (Rule Engine)Уведомления в чат
AWS S3REST API CallАрхивирование данных
PostgreSQL (внешняя)JDBC ActionДублирование данных в аналитическую БД

Масштабирование и производительность

Архитектура для высоких нагрузок

НагрузкаАрхитектураРесурсы
1 000 msg/sMonolith + PostgreSQL4 CPU, 8 GB RAM
10 000 msg/sMicroservices + Kafka + PostgreSQL3 ноды по 8 CPU, 16 GB
100 000 msg/sMicroservices + Kafka + Cassandra5+ нод, Cassandra-кластер

Оптимизация PostgreSQL

-- Партиционирование таблицы телеметрии по месяцам
-- ThingsBoard CE делает это автоматически через TTL-настройки

-- В thingsboard.conf:
-- SQL_TTL_TS_ENABLED=true
-- SQL_TTL_TS_EXECUTION_INTERVAL=86400000
-- SQL_TTL_TS_TS_KV_TTL=31536000000  (365 дней)

Переход на Cassandra

Для проектов с более чем 10 000 устройствами PostgreSQL как time-series хранилище становится узким местом. Переход на Cassandra:

  • Телеметрия → Cassandra (горизонтальное масштабирование записи)
  • Сущности, пользователи, дашборды → PostgreSQL (реляционные данные)
  • Очередь сообщений → Kafka (вместо in-memory)

Это гибридная схема: ThingsBoard поддерживает её из коробки через конфигурацию DATABASE_TS_TYPE=cassandra.

Безопасность

Аутентификация устройств

МетодБезопасностьПрименение
Access TokenНизкая (токен в открытом виде)PoC, внутренние сети
Basic (login + password)СредняяПростые проекты
X.509 сертификатВысокая (mTLS)Продакшен, критичные системы

Рекомендации для продакшена

  1. Включите HTTPS — TLS-терминация на Nginx / Traefik перед ThingsBoard
  2. Используйте X.509 для устройств в продакшене
  3. Ограничьте Rate Limiting — ThingsBoard поддерживает лимиты на уровне тенанта
  4. Настройте Audit Log — логирование всех действий администратора
  5. Регулярные бэкапы — PostgreSQL: pg_dump, Cassandra: nodetool snapshot
  6. Разделите сети — Transport (MQTT/CoAP) в DMZ, Core и БД во внутренней сети

ThingsBoard vs альтернативы

КритерийThingsBoardChirpstackAWS IoT CoreAzure IoT Hub
ТипOpen-source платформаOpen-source LoRaWAN серверManaged cloudManaged cloud
Self-hostedДаДаНетНет
ПротоколыMQTT, CoAP, HTTP, LwM2M, ModbusLoRaWANMQTT, HTTPMQTT, AMQP, HTTP
ДашбордыВстроенныеМинимальныеCloudWatchPower BI / Grafana
Rule EngineВизуальный, мощныйБазовыйAWS IoT Rules (SQL)Stream Analytics
Стоимость (1K устройств)0 ₽ (CE)0 ₽~$30/мес~$25/мес
Стоимость (100K устройств)Серверы (~$500/мес)Серверы~$3 000/мес~$2 500/мес
Vendor lock-inНетНетAWSAzure

ThingsBoard выигрывает по соотношению функциональности к стоимости при self-hosted деплое. Облачные решения AWS/Azure проще в эксплуатации, но дороже на масштабе.

Матрица выбора: когда ThingsBoard — правильный выбор

СценарийThingsBoard подходит?Почему
PoC на 10 устройствДаБыстрый старт через Docker
Мониторинг производства (500 датчиков)ДаCE бесплатна, Rule Engine закрывает алерты
SaaS-платформа для клиентовДа (PE)Мультитенантность, white-labeling
Только LoRaWAN-шлюзыЧастичноЛучше Chirpstack + ThingsBoard для визуализации
Реалтайм-видеоаналитикаНетThingsBoard не обрабатывает видеопотоки
Edge-вычисления на устройствеЧастичноThingsBoard Edge есть, но ограничен
Интеграция с ERP/MESДаREST API + Rule Engine для двусторонней интеграции

Типичные ошибки при внедрении

  1. Хранить всё вечно. Без TTL база растёт линейно. Настройте TTL: сырые данные — 90 дней, агрегаты — 2 года.

  2. Один Rule Chain на всё. Разделяйте цепочки по типам устройств. Один общий Rule Chain с 50 нодами — неуправляемый хаос.

  3. Access Token в продакшене. Токен передаётся в открытом виде по MQTT. Для продакшена — только X.509 или хотя бы TLS + basic auth.

  4. Игнорировать Kafka. In-memory очередь теряет сообщения при перезапуске. С 1 000+ устройств Kafka обязателен.

  5. Не тестировать нагрузку. Перед продакшеном прогоните нагрузочный тест: ThingsBoard предоставляет утилиту tb-gateway для эмуляции устройств.

Что дальше

ThingsBoard — мощная платформа, но её внедрение требует проектирования: выбор архитектуры, настройка Rule Engine под бизнес-логику, интеграция с существующими системами, обеспечение безопасности.


Нужна помощь с IoT-платформой? Мы в Новаком проектируем и внедряем IoT-решения на базе ThingsBoard, Chirpstack и облачных платформ.

РАЗРАБОТКА

Нужна похожая задача?

Обсудим вашу задачу и предложим решение за 30 минут.

Обсудить проект