ルールエンジン
EMQXは、データ処理のためのルールエンジン機能を提供しており、データ統合と連携してIoTデータの抽出、フィルタリング、強化、変換、保存を行います。これにより、アプリケーション統合の加速とビジネス革新を促進します。

EMQXのルールエンジンは、特に受信メッセージの変換やルーティングに有用です。例えば、不要なデータをフィルタリングしたり、変換を行ったり、特定のイベントや条件に基づいてアラートや通知をトリガーするルールを作成できます。
本章では、ルールエンジンとその機能について詳しく解説します。
ルールエンジンの仕組み
ルールは、データソースからデータを取得し、データ変換を行い、その結果に対して適用すべきアクションを指定します。

データソース:ルールのデータソースはメッセージ、イベント、または外部データシステムが該当します。ルールのSQLの
FROM句でデータソースを指定し、WHERE句で処理対象となるメッセージに対する追加条件を設定します。対応するデータソースの種類や
WHERE句で参照可能なフィールドの詳細は、データソースとフィールドをご参照ください。EMQX 6.0.3以降では、ネームスペースが有効な場合、ルールエンジンはデフォルトでネームスペースによるルールのトリガー制限を行います。ネームスペースに属するルールは、同じネームスペース内のクライアントからのメッセージやクライアント関連イベントによってのみトリガーされます。詳細はネームスペースをご覧ください。
データ変換:データ変換は入力メッセージの変換処理を指します。SQLの
SELECT部分で入力メッセージからデータを抽出・変換します。埋め込みSQLのサンプル文を用いて、出力メッセージにタイムスタンプを追加するなど高度な変換を実装できます。文法や組み込みSQL関数の詳細は、ルールSQLリファレンスおよび組み込みSQL関数をご参照ください。
アクション:入力が指定されたルールに従って処理された後、そのSQL実行結果に対して1つ以上のアクションを定義できます。ルールエンジンは順次対応するアクションを実行し、処理結果をデータベースに保存したり、別のMQTTトピックにパブリッシュしたりします。サポートされるアクションは以下の通りです。
- メッセージの再パブリッシュ:結果を指定のMQTTトピックにパブリッシュする。
- コンソール出力:結果をコンソールやログに出力する。
- シンクへの転送:結果をMQTTサービス、Kafka、PostgreSQLなどの外部データシステムに送信する。
EMQXダッシュボードでのルール作成手順については、ルールの作成をご覧ください。
ルールSQLの例
ルールSQLは、ルールのデータソースを指定し、データ処理の手順を定義するために使用されます。以下はSQL文の例です。
SELECT
payload.data as d
FROM
"t/#"
WHERE
clientid = 'foo'上記SQL文の内容は以下の通りです。
- データソース:トピック
t/#のメッセージ - データ処理:メッセージ送信元のクライアントIDが
fooの場合、メッセージ内容のdataフィールドを抽出し、新しい変数dに割り当てる
TIP
.構文はデータがJSONまたはMap形式であることを前提としています。別のデータ型の場合は、SQL関数を用いてデータ型変換を行う必要があります。
ルールSQL文の形式や使用方法の詳細は、SQLマニュアルをご参照ください。
ルールの典型的な適用シナリオ
- 動作監視:スマートホームのスマートロック開発において、ネットワーク障害や電源断、破壊行為によりロックがオフラインになり機能異常が発生する場合があります。ルールを用いてオフラインイベントを監視し、この障害情報をアプリケーションサービスにプッシュすることで、アクセス層での即時障害検知が可能になります。
- データフィルタリング:コネクテッドビークルのトラック車両管理では、車両センサーが大量の稼働データを収集・報告します。アプリケーションプラットフォームは、車速が40km/hを超えた場合のデータのみを重視します。この場合、ルールを使って条件付きでメッセージをフィルタリングし、関連データのみを業務用メッセージキューに書き込みます。
- メッセージルーティング:スマート請求アプリケーションでは、端末デバイスが異なるトピックで業務種別を区別します。ルールを設定することで、請求関連のメッセージを請求用メッセージキューに振り分け、端末到達時に業務システムへ確認通知を送信します。請求以外の情報は別のメッセージキューに振り分けることで、業務メッセージのルーティング設定を実現します。
- メッセージのエンコード/デコード:他のパブリック/プライベートTCPプロトコルアクセスや産業用途などのアプリケーションでは、ルール内のローカル処理機能(EMQX上でカスタム開発可能)を用いてバイナリ/特殊フォーマットのメッセージ本文をエンコード/デコードできます。また、メッセージをルール経由でサーバレス関数などの外部計算リソースに送信して処理(ユーザー開発可能)し、業務アプリケーションが扱いやすいJSON形式に変換することも可能です。これにより、プロジェクトの統合難易度を軽減し、迅速なアプリケーション開発・提供を支援します。
主なメリット
EMQXのルールエンジン機能は、以下のメリットをユーザーに提供します。
データ処理の簡素化
SQLライクな文法とストリーム処理機能により、カスタムコードや追加ツールなしでデータのフィルタリング、変換、配信を効率化します。
リアルタイムの洞察とアクション
特定条件に基づくアクションのトリガーにより、リアルタイムの洞察取得と適切な対応が可能です。
開発時間と労力の削減
豊富な組み込み機能を備え、カスタムコードやメンテナンスの負担を最小限に抑え、IoTアプリケーション開発を容易にします。
スケーラビリティと信頼性
高スループットと多数の接続デバイスに対応できる設計で、性能や信頼性を損なうことなくIoTソリューションのスケールアップを実現します。