コンテンツにスキップ
JelinaJelina Documentation技術ドキュメント
公式サイトに戻る

中核機能:MQTT によるクラウド・エッジ連携

MQTT チャネルは、Edge-EMS Builder のクラウド・エッジ連携を実現します。上り方向ではエッジのリアルタイムデータと判断結果をクラウドへ報告し、下り方向ではクラウドからの制御ロジックを受信してローカル設定へ自動反映します。クラウド・エッジ連携は 3 つの製品グレードに共通する基本機能であり、別途料金やカスタム開発が必要な上位オプションではありません。

MQTT 接続設定は Broker への接続方法を定義します。

パラメーター 説明
protocol mqtt / mqtts(TLS を有効にするか)
protocolVersion 3.1 / 3.1.1 / 5.0 に対応
serverHost / serverPort Broker のアドレスとポート
clientId / username / password クライアント識別子と認証情報
cleanSession / keepAliveInterval / connectTimeout セッション・接続パラメーター

1 台の Edge-EMS Builder に複数の MQTT 接続を同時設定できます(例えばクラウドとローカルゲートウェイへ同時接続)。パブリッシュ・サブスクライブ設定は、それぞれ特定の接続へ関連付けます。

2. データ配信:エッジデータを任意の形式でクラウドへ報告

Section titled “2. データ配信:エッジデータを任意の形式でクラウドへ報告”

配信設定では「送信周期、送信先 Topic、送信内容」を定義します。

パラメーター 説明
topic / qos パブリッシュ先とサービス品質レベル
uploadStrategy 配信周期を制御する CRON 式
publishContent 今回配信するメッセージ内容を返す Lua スクリプト

publishContent は 式エンジン と同じ構文を使用し、任意の JSON 構造を組み立てられます。

local payload = {}
payload.time = OffsetDateTime.now():unixMilli()
payload.power = ${PCS1_有功功率}
payload.status = ${PCS1_status}
-- 配列フィールドにも対応
payload.phaseVoltages = { ${Meter1_Ua}, ${Meter1_Ub}, ${Meter1_Uc} }
return payload

エンジンは返された Lua Table を自動的に JSON へシリアライズし、指定 Topic へ配信します。クラウドは標準 JSON メッセージを受信します。

{
"time": 1745393449910,
"power": 15.2,
"status": "Charging",
"phaseVoltages": [220.1, 219.8, 220.5]
}

3. メッセージ購読:クラウド指令をローカル書き込みアクションへ変換

Section titled “3. メッセージ購読:クラウド指令をローカル書き込みアクションへ変換”

購読設定では「購読する Topic、受信後の処理、応答の要否」を定義します。

パラメーター 説明
topic / qos 購読する Topic とサービス品質レベル
actionContent 受信メッセージを解析し、書き込み指令一覧を返す Lua スクリプト
needResponse / responseTopic / response 応答の要否、応答 Topic、応答内容(スクリプトによる組立ても可能)

メッセージを受信すると、固定変数 ${subscribe_message} から元のメッセージを取得し、解析して書き込み指令へ変換できます。

local messageMap = jsonToMap(${subscribe_message})
local strategyList = jsonToListMap(toJsonString(messageMap.params.strategy))
local resultList = {}
for i, item in ipairs(strategyList) do
local availableDate = completeDateTime(messageMap.params.date .. "T" .. item.start)
local expiredDate = completeDateTime(messageMap.params.date .. "T" .. item["end"])
table.insert(resultList, buildCommonWriteMap(
"Customization", "mode", tostring(item.mode), availableDate, expiredDate, false
))
end
return resultList

このスクリプトは、クラウドから送られた「時間帯別制御」(複数の時間帯と各時間帯のモード値を持つ JSON)を、複数の**時間帯別データ(Customization)**書き込み指令へ変換します。クラウドが合意した形式の JSON を一度送れば、エッジ側で時間帯に応じて自動適用され、追加開発は不要です。

JSON-RPC 形式など、一部のクラウドプロトコルでは、送信後に実行結果の応答が必要です。Edge-EMS Builder の購読設定では、次を同時に定義できます。

  • responseTopic:応答の送信先 Topic。スクリプトで元のメッセージから id などを取得し、動的に組み立てられます。
  • response:応答内容。固定変数 ${subscribe_result}(アクション実行の成否)と ${subscribe_result_message}(詳細な実行結果)を参照できます。

これにより、クラウドは制御ロジックを配信した後、送信しただけで成功と扱うのではなく、エッジで反映されたか確認できます。

クラウドが時間帯別制御を配信 → MQTT 購読アクションがメッセージを解析 → 時間帯別データへ書き込み(時間帯に応じて有効化) → トリガープランやフロントエンドがその設定で実行 → エッジが配信設定に従い定期的に実行結果をクラウドへ返送

これは代表的なクラウド・エッジ連携方式です。制御ロジック配信と結果報告はそれぞれ独立して設定でき、一方を変更しても他方には影響しません。

一時的な通信断で配信タスクが失敗した場合、Edge-EMS Builder は失敗したメッセージを自動的にキャッシュします(キューサイズは設定可能)。ネットワーク復旧後に再送し、通信の不安定さによる重要な報告データの損失を防ぎます。

MQTT を通じてクラウドと Edge-EMS Builder が制御設定・動作状態・結果を交換する流れ

図は、このページの設定ロジックに基づくデータと制御の流れです。具体的な操作フィールドは、本文の設定とスクリプトを参照してください。