EMQX Fleetsの始め方
このガイドでは、デバイスモデルの定義、デバイスの登録、Device Shadowを使った状態の同期、リアルタイムコマンドの送信までの一連のワークフローを説明します。最後まで進めることで、動作するFleetsのデプロイメントが完成し、コアコンセプトを明確に理解できます。
前提条件
- 有効なプロジェクトを持つEMQX Cloudアカウント
- Running状態のEMQX Fleetsデプロイメント。EMQX Fleetsは現在パブリックベータ版として提供されています。EMQX Fleetsデプロイメントの作成を参照してください。
- Fleetsデプロイメントと同じプロジェクト内にあるRunning状態のEMQX ブローカーのデプロイメント。EMQX Fleetsはすべてのデバイス通信を関連付けられたブローカー経由でルーティングします。
- Fleetsデプロイメントと同じプロジェクト内にあるRunning状態のEMQX Tablesのデプロイメント。EMQX Fleetsはテレメトリイベントやシャドウ履歴などの時系列データを関連付けられたTablesに保存します。
- MQTT経由でEMQX ブローカーに接続できるデバイスまたはアプリケーション
概要
以下の手順を完了します:
- Thing Typeを作成してデバイススキーマを定義する。
- Thing(デバイスインスタンス)を登録する。
- デバイスをEMQX ブローカーに接続する。
- コンソールからDesiredシャドウ状態を更新する。
- リアルタイムコマンドを送信し、結果を確認する。
このガイド全体で使用する例のデバイスは、温度を報告し、setTemperatureコマンドを受け付けるスマートサーモスタットです。
ステップ1: Thing Typeの作成
Thing Typeは、デバイスのカテゴリごとに報告するプロパティや受け付けるコマンドを含むスキーマを定義します。詳細はThing Typesを参照してください。
- EMQX CloudコンソールでFleetsデプロイメントを開きます。
- 左メニューのDevice Management > Thing Typesに移動します。
- + New Typeをクリックします。
- 名前を入力します:
com.example.thermostat - (任意)説明を入力します:
Thermostat device type for quick start - Confirmをクリックします。
新しいThing Typeがリストに表示されます。com.example.thermostat (default)という名前のデフォルトThing Groupが自動的に作成されます。
次に、ステップ5でコマンド送信時にsetTemperatureが使えるようにコマンド定義を追加します:
com.example.thermostatをクリックして開き、Edit Typeをクリックします。- Commandsセクションで**+ Add**をクリックします。
- Add Commandダイアログで以下を入力します:
- Name:
setTemperature - Type:
sync - Input:+ Addをクリックし、名前
value、タイプfloatのパラメータを追加
- Name:
- Confirmをクリックしてダイアログを閉じ、Saveをクリックします。
ステップ2: Thingの登録
ThingはFleetsに登録された個々のデバイスIDです。詳細はThingsを参照してください。
- 左メニューのDevice Management > Thingsに移動します。
- + Register Thingをクリックします。
- 以下の項目を入力します:
- Name:
thermostat-001 - MQTT Client ID:
thermostat-001 - Thing Type:
com.example.thermostat
- Name:
- Confirmをクリックします。
デバイスは現在offline状態で登録されます。上記のMQTT Client IDを使ってデバイスが接続するとonlineに変わります。
ステップ3: デバイスの接続
Fleetsデプロイメントと同じプロジェクト内のEMQX ブローカーにデバイスを接続します。物理デバイスがない場合はクライアントツールでシミュレーション可能です。
EMQX ブローカーのOverviewページに移動し、Connection Informationセクションで接続情報(ホスト、ポート、認証情報)を確認します。
以下のパラメータでデバイスを接続します:
- Client ID:Thing登録時に設定した値(このガイドでは
thermostat-001) - Host / Port:ブローカーのMQTT Connection Informationから取得
- Username / Password:ブローカーのAccess Control -> Authentication設定で構成されたもの

- Client ID:Thing登録時に設定した値(このガイドでは
接続後、以下のトピックをサブスクライブします:
シャドウのデルタトピック(デバイスがDesired状態の変更を受信するため):
text$emqx/things/thermostat-001/shadow/update/deltaコマンドリクエストトピック(デバイスがリアルタイムコマンドを受信するため):
text$emqx/commands/things/thermostat-001/executions/+/request
接続してサブスクライブが完了すると、Thingsリストのデバイス状態がonlineに変わります。
必要なトピックのサブスクライブやメッセージフォーマットの詳細はMQTT Integrationを参照してください。
ステップ4: Desiredシャドウ状態の更新
Device Shadowは、デバイスがオンラインでなくても到達してほしい状態を宣言できます。詳細はDevice Shadowを参照してください。
左メニューのShadow Syncに移動します。
Thingsリストから
thermostat-001を選択します。**Target state (Desired)**パネルに以下を入力します:
json{ "targetTemperature": 22 }Update Desiredをクリックします。

Fleetsは現在のReported状態と新しいDesired状態のデルタを計算し、以下のトピックでデバイスにパブリッシュします:
$emqx/things/thermostat-001/shadow/update/deltaデバイスはデルタトピックでメッセージを受信します:
{
"version": 1,
"timestamp": 1780298203,
"state": {
"targetTemperature": 22
},
"metadata": {
"targetTemperature": {
"timestamp": 1780298203
}
}
}デバイスはデルタを読み取り、変更を適用し、新しいReported状態を以下のトピックにパブリッシュします。MQTTクライアントを使って次の内容をパブリッシュしてください:
- Topic:
$emqx/things/thermostat-001/shadow/update - Payload:json
{"state": {"reported": {"targetTemperature": 22, "temperature": 21.5}}}
パブリッシュ後、FleetsデプロイメントのShadow Syncに戻り、ページを更新すると**Current state (Reported)**が更新されていることが確認できます。

ステップ5: リアルタイムコマンドの送信
コマンドは接続されたデバイスに直接送信されるリクエスト・レスポンスのやり取りです。詳細はCommands & Jobsを参照してください。
- 左メニューのCommands & Jobsに移動します。
- + Send Commandをクリックします。
- 以下の項目を入力します:
- Thing:
thermostat-001 - Action:
setTemperature - Parameters:
valueを24に設定
- Thing:
- Send Commandをクリックします。
Fleetsは以下のトピックにコマンドをパブリッシュします:
$emqx/commands/things/thermostat-001/executions/{executionId}/requestデバイスはリクエストを受信し、アクションを実行後、以下のトピックにレスポンスをパブリッシュすることが期待されます:
$emqx/commands/things/thermostat-001/executions/{executionId}/responseこのガイドではMQTTクライアントでデバイスをシミュレートしているため、自動的にレスポンスは送信されません。レスポンスがパブリッシュされるまで実行ステータスはSENTのままです。実際のデバイス統合では、デバイスコードがレスポンスをパブリッシュし、ステータスはSUCCEEDEDまたはFAILEDに更新されます。
コマンドが送信されたことを確認するには、Commands & Jobs > Commandsタブに移動し、thermostat-001の実行レコードがあるか確認してください。実行IDをクリックすると詳細を表示できます。

次にやること
これで、登録済みデバイス、シャドウ状態、送信済みコマンドを持つ動作するFleetsデプロイメントが完成しました。ここからは以下を行えます:
- Thing Typesの管理で実際のデバイスをモデリング
- デバイスをグループに整理し、タグで動的メンバーシップを活用
- Device Queryインターフェースを使ったデバイスフリートのクエリ
- MQTTまたはHTTPSを使った実デバイスの統合
- ジョブの作成で複数デバイスへの一括操作を実行