データソースとフィールド
EMQXのルールは、MQTTメッセージ、MQTTイベント、またはデータブリッジなど、さまざまなデータソースからのデータを処理できます。
ルールエンジン構文のセクションで説明したように、FROM句を使用してデータソースを指定し、対応するフィールドをSELECT句やwhere句で参照できます。本セクションでは、MQTTメッセージ、MQTTイベント、およびデータブリッジのフィールドについて紹介します。
MQTTメッセージ
EMQXのルールを使ってメッセージのパブリッシュを処理する場合、FROM句でメッセージのトピックを指定する必要があります。
例えば、以下のステートメントでは、トピックパターンt/#にパブリッシュされたメッセージのpayload.msg(AS句でmsgに名前変更)、clientid、username、payload、topic、qosのフィールドを選択しています。
例:
SELECT
payload.msg as msg,
clientid,
username,
payload,
topic,
qos
FROM
"t/#"出力例:
{
"username": "u_emqx",
"topic": "t/a",
"qos": 1,
"payload": "{\"msg\":\"hello\"}",
"msg": "hello",
"clientid": "c_emqx"
}EMQX 6.0.3以降、ネームスペースが有効でかつrule_engine.limit_selects_in_namespaceがtrueに設定されている場合、ネームスペースに属するルールは同じネームスペース内のクライアントからパブリッシュされたメッセージのみでトリガーされます。この設定はデフォルトで有効です。
以下の表は、受信したMQTTメッセージから選択可能なフィールドを示しています:
| フィールド | 説明 |
|---|---|
id | MQTTメッセージID |
clientid | パブリッシャーのクライアントID |
username | パブリッシャーのユーザー名 |
payload | MQTTペイロード |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | QoSレベル |
flags | フラグ |
headers | メッセージ処理に関連する内部データ |
pub_props | PUBLISHプロパティ(MQTT 5.0クライアントのみ) |
timestamp | タイムスタンプ(単位:ミリ秒) |
publish_received_at | PUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
client_attrs | クライアント属性 |
MQTTイベント
EMQXのルールを使って、クライアントのオンライン・オフラインやサブスクリプションなどのイベント通知を取得するためにイベントトピックからデータを抽出できます。イベントトピックは"$events/"で始まり、例えば"$events/client/connected"などがあり、ルールのFROM句で指定可能です。
EMQX 6.0.3以降、ネームスペースが有効でかつrule_engine.limit_selects_in_namespaceがtrueに設定されている場合、ネームスペースに属するルールは同じネームスペース内のクライアントに関連するイベントのみでトリガーされます。システムアラームイベントはクライアントネームスペースに関連付けられていません。この設定が有効な場合、"$events/sys/alarm_activated"および"$events/sys/alarm_deactivated"はルールをトリガーしません。
TIP
デフォルトでは、クライアントはMQTTイベントメッセージを直接サブスクライブできません。本セクションでは、ルールを使ってこれらのメッセージをサブスクライブする方法を説明します。MQTTイベントメッセージのデータは、システムトピックをサブスクライブすることでも取得可能です。
以下の表はサポートされているイベントトピックの一覧です。
イベントトピック一覧
| イベントトピック名 | 説明 |
|---|---|
| $events/message/delivered | メッセージ配信完了 |
| $events/message/acked | メッセージ配信アック |
| $events/message/dropped | ルーティング時のメッセージドロップ |
| $events/message/delivery_dropped | 配信時のメッセージドロップ |
| $events/client/connected | 接続完了 |
| $events/client/disconnected | 切断 |
| $events/client/connack | 接続応答 |
| $events/auth/check_authz_complete | 認可チェック完了 |
| $events/auth/check_authn_complete | 認証チェック完了 |
| $events/session/subscribed | サブスクライブ |
| $events/session/unsubscribed | アンサブスクライブ |
| $events/sys/alarm_activated | アラーム有効化 |
| $events/sys/alarm_deactivated | アラーム無効化 |
| $events/client/ping | PINGREQパケット受信 |
TIP
EMQX 5.10.0以降、イベントトピックにネームスペースが導入され、論理的で階層的な構造に再編成されました。これにより、イベントトピックの明確化、フィルタリング、管理が向上しています。
後方互換性のため、旧イベントトピックも引き続きサポートされていますが、新規設定では新しいネームスペース付きトピックの使用を推奨します。以下の表は旧トピックと新(ネームスペース付き)トピックの対応表です。
| 旧イベントトピック | 新イベントトピック |
|---|---|
$events/client_connected | $events/client/connected |
$events/client_disconnected | $events/client/disconnected |
$events/client_connack | $events/client/connack |
$events/client_check_authz_complete | $events/auth/check_authz_complete |
$events/client_check_authn_complete | $events/auth/check_authn_complete |
$events/session_subscribed | $events/session/subscribed |
$events/session_unsubscribed | $events/session/unsubscribed |
$events/message_delivered | $events/message/delivered |
$events/message_acked | $events/message/acked |
$events/message_dropped | $events/message/dropped |
$events/delivery_dropped | $events/message/delivery_dropped |
$events/message_transformation_failed | $events/message_transformation/failed |
$events/schema_validation_failed | $events/schema_validation/failed |
メッセージ配信完了イベント ("$events/message/delivered")
このイベントトピックは、メッセージがクライアントに配信された際にルールをトリガーするために使用できます。
例えば、"$events/message/delivered"イベントトピックから、パブリッシャーのIDとユーザー名、メッセージトピック、メッセージQoS、イベントがトリガーされたEMQXノード、イベント発生時刻のフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
from_clientid,
from_username,
topic,
qos,
node,
timestamp
FROM
"$events/message/delivered"出力例:
{
"topic": "t/a",
"timestamp": 1645002753259,
"qos": 1,
"node": "emqx@127.0.0.1",
"from_username": "u_emqx_1",
"from_clientid": "c_emqx_1"
}以下は各フィールドの詳細説明です。
| フィールド | 説明 |
|---|---|
id | MQTTメッセージID |
from_clientid | パブリッシャーのクライアントID |
from_username | パブリッシャーのユーザー名 |
clientid | サブスクライバーのクライアントID |
username | サブスクライバーのユーザー名 |
payload | MQTTペイロード |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | QoSレベル |
flags | フラグ |
pub_props | PUBLISHプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
publish_received_at | PUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
メッセージ配信アックイベント ("$events/message/acked")
このイベントトピックは、メッセージ配信がアックされた際にルールをトリガーするために使用できます。
TIP
QoS 1およびQoS 2のメッセージのみ利用可能です。
例えば、"$events/message/acked"イベントトピックから、パブリッシャーのIDとユーザー名、メッセージトピック、メッセージQoS、イベントがトリガーされたEMQXノード、イベント発生時刻のフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
from_clientid,
from_username,
topic,
qos,
node,
timestamp
FROM
"$events/message/acked"出力例:
{
"topic": "t/a",
"timestamp": 1645002965664,
"qos": 1,
"node": "emqx@127.0.0.1",
"from_username": "u_emqx_1",
"from_clientid": "c_emqx_1"
}以下は各フィールドの詳細説明です。
| フィールド | 説明 |
|---|---|
id | MQTTメッセージID |
from_clientid | パブリッシャーのクライアントID |
from_username | パブリッシャーのユーザー名 |
clientid | サブスクライバーのクライアントID |
username | サブスクライバーのユーザー名 |
payload | MQTTペイロード |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | QoSレベル |
flags | フラグ |
pub_props | PUBLISHプロパティ(MQTT 5.0のみ) |
puback_props | PUBACKプロパティ(MQTT 5.0のみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
publish_received_at | PUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
ルーティング時のメッセージドロップイベント ("$events/message/dropped")
このイベントトピックは、メッセージがルーティング中にドロップされた際にルールをトリガーするために使用できます。
例えば、"$events/message/dropped"イベントトピックから、ドロップ理由、メッセージトピック、メッセージQoS、イベントがトリガーされたEMQXノード、イベント発生時刻のフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
reason,
topic,
qos,
node,
timestamp
FROM
"$events/message/dropped"出力例:
{
"topic": "t/a",
"timestamp": 1645003103004,
"reason": "no_subscribers",
"qos": 1,
"node": "emqx@127.0.0.1"
}| フィールド | 説明 |
|---|---|
id | MQTTメッセージID |
reason | ドロップ理由:no_subscribers: トピックにサブスクライブするクライアントがいないreceive_maximum_exceeded: awaiting_relキューが満杯packet_identifier_inuse: 未解放のパケットIDを持つQoS 2メッセージを受信した場合 |
clientid | パブリッシャーのクライアントID |
username | パブリッシャーのユーザー名 |
payload | MQTTペイロード |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | QoSレベル |
flags | フラグ |
pub_props | PUBLISHプロパティ(MQTT 5.0のみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
publish_received_at | PUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒) |
node | イベントがトリガーされたノード |
配信時のメッセージドロップイベント ("$events/message/delivery_dropped")
このイベントトピックは、メッセージが配信中にドロップされた際にルールをトリガーするために使用できます。
例えば、"$events/message/delivery_dropped"イベントトピックから、パブリッシャーのIDとユーザー名、ドロップ理由、メッセージトピックおよびQoSのフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
from_clientid,
from_username,
reason,
topic,
qos
FROM "$events/message/delivery_dropped"出力例:
{
"topic": "t/a",
"reason": "queue_full",
"qos": 1,
"from_username": "u_emqx_1",
"from_clientid": "c_emqx_1"
}以下は各フィールドの詳細説明です。
| フィールド | 説明 |
|---|---|
id | MQTTメッセージID |
reason | ドロップ理由:queue_full: QoS>0のメッセージキューが満杯no_local: クライアント自身がパブリッシュしたメッセージの受信不可expired: メッセージまたはセッションが期限切れqos0_msg: QoS 0メッセージキューが満杯 |
from_clientid | パブリッシャーのクライアントID |
from_username | パブリッシャーのユーザー名 |
clientid | サブスクライバーのクライアントID |
username | サブスクライバーのユーザー名 |
payload | MQTTペイロード |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | メッセージのQoS |
flags | フラグ |
pub_props | PUBLISHプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
publish_received_at | PUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
接続完了イベント ("$events/client/connected")
このイベントトピックは、クライアントが正常に接続した際にルールをトリガーするために使用できます。
例えば、"$events/client/connected"イベントトピックから、クライアントID、ユーザー名、キープアライブ間隔、接続したMQTTクライアントがブリッジとして動作しているかどうかのフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
clientid,
username,
keepalive,
is_bridge
FROM
"$events/client/connected"出力例:
{
"username": "u_emqx",
"keepalive": 60,
"is_bridge": false,
"clientid": "c_emqx"
}以下の表は、受信したMQTTメッセージから選択可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
clientid | クライアントID |
username | クライアントのユーザー名 |
mountpoint | ブリッジメッセージのマウントポイント |
peername | クライアントのIPアドレスとポート |
sockname | EMQXがリッスンしているIPアドレスとポート |
proto_name | プロトコル名 |
proto_ver | プロトコルバージョン |
keepalive | MQTTキープアライブ間隔 |
clean_start | MQTTのclean_startフラグ |
expiry_interval | MQTTセッションの有効期限 |
is_bridge | クライアントがブリッジとして動作しているかどうか |
connected_at | クライアントの接続完了時刻(単位:ミリ秒) |
conn_props | CONNECTプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
client_attrs | クライアント属性 |
切断イベント ("$events/client/disconnected")
このイベントトピックは、クライアントが切断された際にルールをトリガーするために使用できます。
例えば、"$events/client/disconnected"イベントトピックから、クライアントID、ユーザー名、切断理由、接続時間、切断時間、イベントがトリガーされたEMQXノードのフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
clientid,
username,
reason,
connected_at,
disconnected_at,
node
FROM
"$events/client/disconnected"出力例:
{
"username": "u_emqx",
"reason": "normal",
"node": "emqx@127.0.0.1",
"connected_at": 1645003578036,
"disconnected_at": 1645003578536,
"clientid": "c_emqx"
}| フィールド | 説明 |
|---|---|
reason | 切断理由normal: クライアントが意図的に切断kicked: REST API経由でEMQXが強制切断keepalive_timeout: キープアライブ時間切れnot_authorized: 認可失敗tcp_closed: ピアがネットワーク接続を閉じたdiscarded: 同じClientIDでclean_start=trueの別クライアントが接続し、前の接続が切断されたtakenover: 同じClientIDでclean_start=falseの別クライアントが接続し、前の接続を引き継いだinternal_error: 不正なメッセージ形式やその他不明なエラー発生 |
clientid | クライアントID |
username | クライアントのユーザー名 |
peername | クライアントのIPアドレスとポート |
sockname | EMQXがリッスンしているIPアドレスとポート |
connected_at | クライアントの接続開始時刻(単位:ミリ秒)。このタイムスタンプは現在のセッションが確立された時刻を示し、切断イベントがどの接続セッションに属するかを識別します。遅延した切断イベントが新しい接続状態を上書きしないようにします。 |
disconnected_at | クライアントの切断完了時刻(単位:ミリ秒) |
disconn_props | DISCONNECTプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
client_attrs | クライアント属性 |
接続応答イベント ("$events/client/connack")
このイベントトピックは、EMQXがクライアントにCONNACKパケットを送信した際にルールをトリガーするために使用できます。
例:
SELECT
clientid,
username,
reason_code,
node
FROM
"$events/client/connack"出力例:
{
"username": "u_emqx",
"reason_code": "success",
"node": "emqx@127.0.0.1",
"connected_at": 1645003578536,
"clientid": "c_emqx"
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
reason_code | 理由コード* |
clientid | パブリッシャーのクライアントID |
username | パブリッシャーのユーザー名 |
peername | IPアドレスとポート |
sockname | EMQXがリッスンしているIPアドレスとポート |
proto_name | プロトコル名 |
proto_ver | プロトコルバージョン |
keepalive | MQTTキープアライブ間隔 |
clean_start | MQTTのclean_startフラグ |
expiry_interval | MQTTセッションの有効期限 |
conn_props | CONNECTプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
node | アラームがトリガーされたEMQXノード |
[^*]: MQTT v5.0プロトコルでは、リターンコードは理由コードに名称が変更され、より多様なエラータイプを示す理由コードが追加されています(Reason code and ACK - MQTT 5.0 new features)。
以下はMQTT v3.1.1とMQTT v5.0の理由コード一覧です。
認可チェック完了イベント ("$events/auth/check_authz_complete")
このイベントトピックは、クライアントの認可チェックが完了した際にルールをトリガーするために使用できます。
例:
SELECT
clientid,
username,
topic,
action,
result,
authz_source,
node
FROM
"$events/auth/check_authz_complete"出力例:
{
"username": "u_emqx",
"topic": "t/a",
"action": "publish",
"result": "allow",
"authz_source": "cache",
"node": "emqx@127.0.0.1",
"clientid": "c_emqx"
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
clientid | クライアントID |
username | ユーザー名 |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
action | パブリッシュまたはサブスクライブのアクション |
result | アクセス制御チェックの結果 |
authz_source | 認可のソース |
timestamp | タイムスタンプ(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
client_attrs | クライアント属性 |
認証チェック完了イベント ("$events/auth/check_authn_complete")
このイベントトピックは、クライアントの認証チェックが完了した際にルールをトリガーするために使用できます。
例:
SELECT
clientid,
username,
reason_code,
is_superuser,
is_anonymous
FROM
"$events/auth/check_authn_complete"出力例:
{
"clientid": "c_emqx",
"username": "u_emqx",
"reason_code": "success",
"is_superuser": true,
"is_anonymous": false
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
clientid | クライアントID |
username | ユーザー名 |
peername | クライアントのIPアドレス |
reason_code | 認証結果 |
is_superuser | スーパーユーザーかどうか |
is_anonymous | 匿名ユーザーかどうか |
client_attrs | クライアント属性 |
サブスクライバーイベント ("$events/session/subscribed")
このイベントトピックは、クライアントが正常にサブスクライブした際にルールをトリガーするために使用できます。
例:
SELECT
clientid,
username,
topic,
qos
FROM
"$events/session/subscribed"出力例:
{
"username": "u_emqx",
"topic": "t/a",
"qos": 1,
"clientid": "c_emqx"
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
clientid | クライアントID |
username | クライアントのユーザー名 |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | QoSレベル |
sub_props | SUBSCRIBEプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
client_attrs | クライアント属性 |
アンサブスクライブイベント ("$events/session/unsubscribed")
このルールは、クライアントのサブスクリプションが正常にキャンセルされた際にトリガーされます。
例:
SELECT
clientid,
username,
topic,
qos
FROM
"$events/session/unsubscribed"出力例:
{
"username": "u_emqx",
"topic": "t/a",
"qos": 1,
"clientid": "c_emqx"
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
clientid | クライアントID |
username | クライアントのユーザー名 |
peerhost | クライアントのIPアドレス |
topic | MQTTトピック |
qos | QoSレベル |
unsub_props | UNSUBSCRIBEプロパティ(MQTT 5.0クライアントのみ) |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
client_attrs | クライアント属性 |
システムアラーム有効化イベント ("$events/sys/alarm_activated")
このイベントトピックは、EMQXのシステムアラームが有効化された際にルールをトリガーするために使用できます。
例えば、"$events/sys/alarm_activated"イベントトピックから、アラーム名、詳細、説明メッセージ、有効化時刻のフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
name,
details,
message,
activated_at,
node
FROM
"$events/sys/alarm_activated"出力例:
{
"name": "too_many_processes",
"details": {
"usage": "99%",
"high_watermark": "80%"
},
"message": "99% process usage",
"activated_at": 1645003578536000,
"node": "emqx@127.0.0.1"
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
name | アラームの短い識別子(例:"too_many_processes") |
details | アラームの追加詳細を含むJSONオブジェクト(スキーマは固定されていません。例:{"usage": "99%", "high_watermark": "80%"}) |
message | アラームの説明メッセージ(例:"99% process usage") |
activated_at | アラームが有効化されたUnixタイムスタンプ(マイクロ秒) |
node | イベントがトリガーされたEMQXノード |
システムアラーム無効化イベント ("$events/sys/alarm_deactivated")
このルールは、EMQXのシステムアラームが無効化された際にトリガーされます。
例えば、"$events/sys/alarm_deactivated"イベントトピックから、アラーム名、詳細、説明メッセージ、有効化タイムスタンプ、無効化タイムスタンプのフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
name,
details,
message,
activated_at,
deactivated_at,
node
FROM
"$events/sys/alarm_deactivated"出力例:
{
"name": "too_many_processes",
"details": {
"usage": "99%",
"high_watermark": "80%"
},
"message": "99% process usage",
"activated_at": 1645003578536000,
"deactivated_at": 1645004000000000,
"node": "emqx@127.0.0.1"
}以下の表は抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
name | アラームの短い識別子(例:"too_many_processes") |
details | アラームの追加詳細を含むJSONオブジェクト(スキーマは固定されていません。例:{"usage": "99%", "high_watermark": "80%"}) |
message | アラームの説明メッセージ(例:"99% process usage") |
activated_at | アラームが有効化されたUnixタイムスタンプ(マイクロ秒) |
deactivated_at | アラームが無効化されたUnixタイムスタンプ(マイクロ秒) |
node | イベントがトリガーされたEMQXノード |
クライアントキープアライブ(PING)イベント ("$events/client/ping")
このイベントトピックは、EMQXが接続中のMQTTクライアントからPINGREQパケットを受信した際にルールをトリガーするために使用できます。これはクライアントのハートビートが正常に受信されたことを示します。
主に診断やトラブルシューティングに利用されます。$events/client/disconnectedはクライアントが切断された理由(例:keepalive_timeout)を説明しますが、"$events/client/ping"イベントはEMQXが実際にクライアントからのハートビートパケットを受信した直接的な証拠を提供し、クライアント側やネットワーク側の問題とブローカー側の問題を区別するのに役立ちます。
例えば、"$events/client/ping"イベントトピックから、クライアントID、ユーザー名、ネゴシエートされたキープアライブ間隔、イベントトリガー時刻、イベントがトリガーされたEMQXノードのフィールドを抽出するには、以下のステートメントを使用します。
例:
SELECT
clientid,
username,
keepalive,
timestamp,
node
FROM
"$events/client/ping"出力例:
{
"clientid": "c_emqx",
"username": "u_emqx",
"keepalive": 60,
"timestamp": 1645003800123,
"node": "emqx@127.0.0.1"
}以下の表はクライアントPINGイベントから抽出可能なフィールドを示しています。
| フィールド | 説明 |
|---|---|
clientid | クライアントID |
clean_start | MQTTのclean_startフラグ |
username | クライアントのユーザー名 |
peername | クライアントのIPアドレスとポート |
sockname | EMQXがリッスンしているIPアドレスとポート |
proto_name | プロトコル名 |
proto_ver | プロトコルバージョン |
keepalive | ネゴシエートされたMQTTキープアライブ間隔 |
timestamp | イベントトリガー時刻(単位:ミリ秒) |
node | イベントがトリガーされたEMQXノード |
conn_props | CONNECTプロパティ(MQTT 5.0クライアントのみ) |
expiry_interval | MQTTセッションの有効期限 |
データブリッジ
ルールは、データブリッジによってトリガーされたメッセージやイベントを、$bridges/で始まるトピックで参照します。形式は以下の通りです。
$bridges/<type>:<name>
ここで、
<type>:<name>はブリッジID、<type>はブリッジタイプ、<name>はブリッジ名です。
例えば、MQTTブリッジのイベントは"$bridges/mqtt:*"の形式で参照できます。MQTTデータブリッジmy_mqtt_bridgeが送信するすべてのメッセージに対してルールを設定するには、以下のステートメントを使用します。
例:
SELECT
*
FROM
"$bridges/mqtt:my_mqtt_bridge"出力例:
{
"id": "0005E27C1D24E44FF440000017520000",
"server": "broker.emqx.io:1883",
"payload": "hello",
"topic": "t/a",
"qos": 1,
"dup": false,
"retain": false,
"pub_props": {
"Message-Expiry-Interval": 30,
"Payload-Format-Indicator": 0,
"User-Property": {
"foo": "bar"
},
"User-Property-Pairs": [
{
"key": "foo"
},
{
"value": "bar"
}
]
},
"message_received_at": 1645002753259,
}返される各フィールドの説明は以下の通りです。
| フィールド | 説明 |
|---|---|
id | MQTTメッセージID |
server | リモートMQTTブローカーのサーバー名(例:"broker.emqx.io:1883") |
payload | MQTTペイロード |
topic | MQTTトピック |
qos | MQTTのQoS |
dup | MQTTのDUPフラグ |
retain | MQTTのRetainフラグ |
pub_props | PUBLISHプロパティ(MQTT 5.0クライアントのみ) |
message_received_at | メッセージ受信時刻のタイムスタンプ(単位:ミリ秒) |