# EMQX Fleets

EMQX Fleetsは、EMQX Cloud上のフルマネージドIoTデバイス管理サービスです。EMQX ブローカーを基盤に構築されており、メッセージブローカーを完全なデバイスフリート管理プラットフォームに変えるアプリケーションレイヤーを追加しています。これにより、デバイスレジストリ、状態同期、リモートコマンド、バッチジョブの配信をカバーします。

## なぜEMQX Fleetsなのか？

MQTTブローカーはメッセージの輸送問題を解決しますが、どのデバイスがオンラインか、各デバイスの状態はどうか、設定変更をどのようにプッシュしてデバイスが適用したことを確認するか、あるいは数百台のデバイスにわたるファームウェアの展開をどのように追跡するかといった課題には答えません。

Fleetsがなければ、EMQX Cloud上に構築する各チームはこれらのレイヤーを自分たちで構築する必要があります。つまり、自分たちのデータベースにデバイスレジストリを作り、MQTTの上に状態同期プロトコルを構築し、デバイスごとの追跡が可能なジョブスケジューリングシステムを作る必要があります。Fleetsはこれらをマネージドサービスとして提供するため、アプリケーション開発に集中できます。

## 主な機能

- **デバイスレジストリ**：Thing Typesでデバイススキーマを定義し、個々のデバイスをThingsとして登録、タグを使ってThing Groupsに整理できます。

- **デバイスシャドウ**：報告済み（reported）、希望状態（desired）、差分（delta）の3状態モデルで、クラウドの意図とデバイスの実際の状態を切断時も含めて同期します。クラウドは希望状態を書き込み、デバイスはそれに収束し報告します。

- **デバイスクエリ**：SQLライクなクエリ言語でフリート全体を検索可能です。接続状態、シャドウのプロパティ値、タグ、グループでフィルタリングできます。

- **コマンド**：個々のデバイスにリアルタイムのリクエスト・レスポンスコマンドを送信（例：ロック、アンロック、温度設定）し、実行状況を追跡します。

- **ジョブ**：デバイスグループに対してバッチ操作を配信し、キューイング、進行中、成功、失敗、タイムアウトなどのライフサイクルを通じてデバイスごとの実行進捗を追跡します。

## 動作の仕組み

デバイスはMQTT経由でEMQX ブローカーに接続するか、HTTPSでデータを送信します。EMQXのルールエンジンがデバイスのメッセージをFleetsバックエンドにルーティングします。Fleetsサービスはデバイスのメタデータと最新のシャドウ状態をPostgreSQLに保存し、時系列データ（イベント、シャドウ履歴）をEMQX Tablesに保存します。クラウドからデバイスへの通信（シャドウ更新、コマンド、ジョブ通知）はEMQX ブローカー経由で配信されます。

```text
Device  <──MQTT──>  EMQX Broker  <──>  Fleets Backend
  │                     │                    │
  └──HTTPS──────────────┘               PostgreSQL
                                         EMQX Tables
```

FleetsはMQTTトピックに直接サブスクライブしません。すべてのダウンリンク通信はEMQX v5 REST APIを使用します。

各Fleetsのデプロイメントは1つのEMQX ブローカーのデプロイメントに紐づいています。両方のデプロイメントは同じプロジェクト内である必要があります。

## EMQX Fleetsを使うべき場面

EMQX Fleetsはメッセージ輸送以上の機能を必要とするIoTアプリケーション開発者向けに設計されています。以下のような場合にFleetsを検討してください。

- スキーマベースのデバイスモデルを持つ永続的なデバイスレジストリが必要な場合
- デバイスが断続的に接続される場合も含め、クラウドとデバイス間の設定や状態を確実に同期したい場合
- デバイスにコマンドを送信し、実行結果を確認したい場合
- フリートに対してファームウェア更新や設定変更を展開し、デバイスごとの進捗を追跡したい場合
- ステータス、プロパティ、タグでデバイスフリートを検索・フィルタリングしたい場合

### 一般的なユースケース

- **スマートハードウェア管理**：どのデバイスがオンラインかを追跡し、設定更新をプッシュして適用を確認する。
- **産業用IoT**：設備の状態をリモートで監視し、制御コマンドを送り、コンプライアンスや診断のためにイベントを記録する。
- **ビルオートメーション**：サーモスタット、ドアロック、センサーを大規模に管理し、信頼性の高い状態同期とコマンドのアックを実現する。
- **ファームウェア展開**：ジョブを使ってデバイスグループにファームウェア更新を配信し、デバイスごとの成功・失敗を監視する。

## EMQX Fleetsと他のEMQX Cloud製品の比較

|  | EMQX ブローカー | EMQX Tables | EMQX Fleets |
|---|---|---|---|
| 主な機能 | MQTTメッセージ輸送 | 時系列データストレージ | IoTデバイス管理 |
| 管理対象 | メッセージルーティング | テレメトリ・時系列データ | デバイス識別、状態、コマンド、ジョブ |
| 主なユーザー | MQTTを使う全ユーザー | データエンジニア、分析チーム | IoTアプリケーション開発者 |

## プランと料金

EMQX Fleetsは**スタータープラン**で従量課金制にて利用可能です。

| 仕様 | 内容 |
|---|---|
| 課金モデル | 従量課金制 |
| クラウドプラットフォーム | Google Cloud |
| リージョン | Iowa (us-central1), Oregon (us-west1) |

料金の詳細については、EMQX Cloudサポートまたは担当アカウントにお問い合わせください。

## 次のステップ

- [EMQX Fleetsのはじめ方](./emqx_fleets_quick_start.md)
- [EMQX Fleetsのデプロイメント作成](./deployment/emqx_fleets_create_deployment.md)
