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を使った実デバイスの統合
- ジョブの作成で複数デバイスへの一括操作を送信