AI

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 CEChirpStackEclipse Mosquitto
プロトコルMQTT/HTTP/CoAPLoRaWANMQTT専用
UIダッシュボード✅(組込)✅❌
ルールエンジン✅❌❌
農業・物流向き△✅△
スケーラビリティ✅(Cluster)✅★★★
GitHub Stars17k+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 AssistantEclipse Mosquitto

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。