OSS IoTプラットフォーム比較:ThingsBoard vs ChirpStack vs Eclipse Mosquitto
オープンソースラボ編集部 ・ 2026年9月27日
OSS IoTプラットフォーム比較:ThingsBoard vs ChirpStack vs Eclipse IoT でAWS IoT Coreを脱却する
AWS IoT Core(月$1/100万メッセージ〜)・Azure IoT Hub(月$10/ユニット〜)・Google Cloud IoT Core(2023年廃止)に対して、ThingsBoard(デバイス管理・ダッシュボード一体型)・ChirpStack(LoRaWAN特化・エッジ対応)・Eclipse Mosquitto(MQTT ブローカー単体OSS)はIoT基盤をセルフホストできます。
OSS IoT プラットフォームを使う理由
- コスト: AWS IoT Core(月1億メッセージ = $1,000)→ ThingsBoard + VPS で$60/月
- データ主権: デバイスデータ・センサー値を自社サーバーに保持(工場・病院・インフラ)
- オフライン動作: クラウドとの接続が切れてもエッジで動作継続
- カスタムプロトコル: MQTT・HTTP・CoAP・LwM2M・LoRaWAN・OPC-UAを単一プラットフォームで対応
主要ツールの概要
ThingsBoard CE
2016年公開、Java/TypeScript製のOSSです。GitHubスター17k+。デバイス管理・データ収集・リアルタイムダッシュボード・ルールエンジン・アラームを統合したフルスタックIoTプラットフォームです。MQTT・HTTP・CoAP・LwM2Mプロトコルに対応し、SensorデータをPostgreSQL+TimescaleDBまたはCassandraに保存します。
# docker-compose.yml - ThingsBoard CE + PostgreSQL + TimescaleDB
version: '3.8'
services:
thingsboard:
image: thingsboard/tb-postgres:3.8.0
restart: unless-stopped
ports:
- "8080:9090" # HTTP/WebSocket (UIとREST API)
- "1883:1883" # MQTT
- "5683:5683/udp" # CoAP
- "7070:7070" # Edge RPC
environment:
TB_QUEUE_TYPE: in-memory
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/thingsboard
SPRING_DATASOURCE_USERNAME: thingsboard
SPRING_DATASOURCE_PASSWORD: ${TB_DB_PASSWORD}
TB_SERVICE_ID: tb-node-0
volumes:
- thingsboard_data:/data
- thingsboard_logs:/var/log/thingsboard
depends_on:
- postgres
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: thingsboard
POSTGRES_USER: thingsboard
POSTGRES_PASSWORD: ${TB_DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
thingsboard_data:
thingsboard_logs:
postgres_data:
# ThingsBoard REST API でデバイス管理を自動化(Python)
import requests
import os
import json
TB_URL = os.environ.get('THINGSBOARD_URL', 'http://localhost:8080')
def get_token() -> str:
resp = requests.post(
f'{TB_URL}/api/auth/login',
json={'username': os.environ['TB_ADMIN_EMAIL'],
'password': os.environ['TB_ADMIN_PASSWORD']},
)
resp.raise_for_status()
return resp.json()['token']
token = get_token()
auth_headers = {'X-Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
def create_device(name: str, device_type: str = 'Sensor',
label: str = '') -> dict:
resp = requests.post(
f'{TB_URL}/api/device',
headers=auth_headers,
json={'name': name, 'type': device_type, 'label': label},
)
resp.raise_for_status()
return resp.json()
def get_device_credentials(device_id: str) -> str:
resp = requests.get(
f'{TB_URL}/api/device/{device_id}/credentials',
headers=auth_headers,
)
return resp.json()['credentialsId'] # MQTTアクセストークン
def get_latest_telemetry(device_id: str, keys: list) -> dict:
resp = requests.get(
f'{TB_URL}/api/plugins/telemetry/DEVICE/{device_id}/values/timeseries',
headers=auth_headers,
params={'keys': ','.join(keys)},
)
return {k: v[0]['value'] for k, v in resp.json().items()}
# デバイスを一括登録(工場のセンサー100台)
for i in range(1, 101):
device = create_device(f'Sensor-Floor1-{i:03d}', 'Temperature Sensor', f'1階センサー{i}号機')
token_id = get_device_credentials(device['id']['id'])
print(f'Device: {device["name"]} | MQTT Token: {token_id}')
# MQTT でThingsBoardにセンサーデータを送信(ESP32/Raspberry Piシミュレーション)
import paho.mqtt.client as mqtt
import json
import time
import random
BROKER = 'localhost'
PORT = 1883
ACCESS_TOKEN = 'your-device-access-token'
def on_connect(client, userdata, flags, rc):
print(f'Connected with result code {rc}')
client = mqtt.Client()
client.username_pw_set(ACCESS_TOKEN)
client.on_connect = on_connect
client.connect(BROKER, PORT, 60)
client.loop_start()
# センサーデータを5秒ごとに送信
while True:
telemetry = {
'temperature': round(20 + random.uniform(-5, 15), 2), # 摂氏
'humidity': round(60 + random.uniform(-20, 20), 1), # %
'co2': round(400 + random.uniform(0, 600)), # ppm
'pressure': round(1013 + random.uniform(-10, 10), 1), # hPa
}
client.publish('v1/devices/me/telemetry', json.dumps(telemetry))
print(f'Sent: {telemetry}')
time.sleep(5)
ChirpStack
2017年公開、Go製のOSSです。GitHubスター4k+。LoRaWAN(Long Range Wide Area Network)に特化したオープンソースネットワークサーバーです。農業・スマートシティ・物流・ユーティリティ(電力・ガス・水道)でのバッテリー駆動センサーの広域無線通信(最大15km)に対応します。
# docker-compose.yml - ChirpStack v4
version: '3.8'
services:
chirpstack:
image: chirpstack/chirpstack:4
restart: unless-stopped
ports:
- "8080:8080" # Web UI
volumes:
- ./chirpstack.toml:/etc/chirpstack/chirpstack.toml
environment:
- POSTGRESQL_DSN=postgres://chirpstack:${DB_PASSWORD}@postgres/chirpstack?sslmode=disable
- REDIS_URL=redis://redis:6379
depends_on:
- postgres
- redis
- mosquitto
chirpstack-gateway-bridge:
image: chirpstack/chirpstack-gateway-bridge:4
restart: unless-stopped
ports:
- "1700:1700/udp" # Semtech UDP パケットフォワーダー
volumes:
- ./chirpstack-gateway-bridge.toml:/etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge.toml
mosquitto:
image: eclipse-mosquitto:2
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: chirpstack
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: chirpstack
redis:
image: redis:7-alpine
機能比較表
| 比較項目 | ThingsBoard CE | ChirpStack | Eclipse Mosquitto |
|---|---|---|---|
| プロトコル | MQTT/HTTP/CoAP | LoRaWAN | MQTT専用 |
| UIダッシュボード | ✅(組込) | ✅ | ❌ |
| ルールエンジン | ✅ | ❌ | ❌ |
| 農業・物流向き | △ | ✅ | △ |
| スケーラビリティ | ✅(Cluster) | ✅ | ★★★ |
| GitHub Stars | 17k+ | 4k+ | 9k+ |
IoTプラットフォームはDevOpsカテゴリ/categories/devopsのGrafana+Prometheusと連携してセンサーデータの可視化・異常値アラートを設定します。Knowledge管理カテゴリ/categories/knowledgeのメタデータカタログと組み合わせてデバイス台帳・センサー仕様書をGit管理することでIoT資産を一元管理できます。
FAQ
Q. AWS IoT CoreからThingsBoardへの移行手順を教えてください。
A. ①デバイス台帳のエクスポート: AWS IoT Core → 管理 → モノ → CSVエクスポートでデバイス一覧を取得②ThingsBoardにデバイスを一括登録: ThingsBoard REST API(POST /api/device)またはインポートCSVでデバイスとMQTTアクセストークンを一括作成③ファームウェアのMQTTエンドポイント変更: デバイスのMQTT接続先をxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com→thingsboard.yourcompany.com:1883に変更④ルール・アラームの移植: AWS IoT Rulesをローカルに移植してThingsBoardのルールエンジン(Node: Message Type Switch→Save Telemetry/Create Alarm)で再実装⑤ダッシュボード移行: AWS IoT SiteWiseのダッシュボードをThingsBoardのビルダーで再構築。注意: X.509証明書認証(AWS IoT Core)からMQTTトークン認証(ThingsBoard CE)への変更が必要です。ThingsBoard ProfessionalはX.509対応あり。
Q. ThingsBoardのルールエンジンで何ができますか?
A. ThingsBoardのルールエンジン(ビジュアルフロー設計)でできること: ①テレメトリ処理: デバイスから受信したJSONデータのフィールド抽出・変換・正規化②アラーム生成: 温度が30℃を超えたら「高温警報」アラームを生成・クリア③通知: メール(SendGrid)・Slack Webhook・SMS(Twilio)・Telegramへの通知④外部API連携: REST API Callノードで外部システム(ERP・SCADA)にデータを転送⑤デバイスRPC: クラウドからデバイスにコマンドを送信(LEDオン・設定変更・再起動)⑥データ永続化: PostgreSQL・TimescaleDB・InfluxDB・Kafkaへの書き出し。具体例: 「冷蔵庫の温度センサーが5℃以上になったら→アラームを作成→Slackに通知→10分後もアラームが続いていたら管理者にメール」のような条件付きルールをノーコードで設計できます。
Q. LoRaWANとMQTTの違いは何ですか?IoTではどちらを使うべきですか?
A. LoRaWANとMQTTは比較対象ではなく、組み合わせて使う技術です。LoRaWAN: 無線通信の物理プロトコル(変調方式)。特徴: ①超低消費電力(単三電池2本で10年動作)②長距離通信(農村部15km・都市部2〜5km)③低データレート(0.3〜50kbps、センサー値の送信のみ)。MQTT: TCP/IP上のメッセージングプロトコル。特徴: ①WiFi・LTE・イーサネット接続前提②低遅延・双方向通信③より大きなデータ(画像・大量テレメトリ)に対応。使い分け: ①農場・ダム・ガス配管など広域でバッテリー駆動センサー → LoRaWAN(ChirpStack)②工場・倉庫内でWiFi/LAN接続センサー・アクチュエーター → MQTT(Mosquitto + ThingsBoard)③組み合わせ: LoRaWANゲートウェイ(ChirpStack)でLoRaデバイスのデータをMQTTに変換してThingsBoardに転送。
Q. Eclipse MosquittoはどんなIoTシナリオで適していますか?
A. シンプルなMQTTブローカーのみが必要で、管理UI・ルールエンジン・ダッシュボードは既存ツールで賄える場合にMosquittoが最適です。適したシナリオ: ①ホームオートメーション(Home Assistant + Mosquitto: スマートコンセント・照明・温度センサー)②製造ラインのPLC・SCADAシステムがMQTTを直接サポートしていてデータ収集のみが目的③GrafanaでInfluxDB/TimescaleDBのデータを可視化する既存構成がありMQTTブローカーだけを追加したい④学習・プロトタイプ: Raspberry Pi + Mosquitto で低コストなIoT実験環境。Mosqittoの設定(mosquitto.conf): 認証(password_file)・TLS(certfile/keyfile)・ACL(トピックごとのread/write権限)をテキスト設定ファイルで管理します。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| フルスタック・ダッシュボード・ルールエンジン | ThingsBoard CE |
| LoRaWAN・農業・スマートシティ・広域センサー | ChirpStack |
| シンプルMQTTブローカー・Home Assistant | Eclipse Mosquitto |