コンテンツにスキップ

Protocol Translatorコネクタ

Protocol Translatorコネクタは、ペイロードをある構造化形式からフラットなキー・バリューマップにデコードし、オプションでキーの名前を変更し、結果を別のターゲット形式にエンコードします。産業プロトコルとJSONネイティブのダウンストリームステージ間の正規ブリッジです。

コネクタタイプ: MeddleProtocolTranslator

  • flat-json — プレーンなキー/値マップ({ "temp": 25.5, "press": 101.3 }
  • nested-json — ネストオブジェクト。ドットフラット化によりデコードされ、ドットアンフラット化によりエンコードされます({ "sensor": { "temp": 25.5 } }{ "sensor.temp": 25.5 }
  • sparkplugb — Eclipse Sparkplug B形式:{ "name": "...", "value": ... }エントリのmetrics配列
  • opcua-json — ノードごとのOPC-UA JSON:各トップレベルキーは{ "value": ..., "sourceTimestamp": ... }にマップ

sourceFormattargetFormatは異なる必要があります。

{
"type": "MeddleProtocolTranslator",
"config": {
"sourceFormat": "sparkplugb",
"targetFormat": "flat-json",
"keyMappings": {
"Temperature/Zone1": "temperature_zone_1",
"Pressure/Main": "pressure_main"
}
}
}

コネクタはまずSparkplug Bメトリクスを{ "Temperature/Zone1": 25.5, "Pressure/Main": 101.3 }にデコードし、次にkeyMappingsに従ってキーをリネームし、最後にフラットJSONを発行します。

  • sourceFormat(必須):flat-jsonnested-jsonsparkplugbopcua-jsonのいずれか
  • targetFormat(必須):flat-jsonnested-jsonsparkplugbopcua-jsonのいずれか(sourceFormatと異なる必要があります)
  • keyMappings: oldKey -> newKeyのオプションマップ。マップに存在しないキーは変更されずにパススルーされます。
  1. デコード — ソースペイロードはフラットなmap[string]anyに正規化されます。
    • flat-jsonはペイロードをそのままコピー
    • nested-json.を区切り文字としてネストオブジェクトをフラット化
    • sparkplugbは各metrics[i].valuemetrics[i].nameをキーとして抽出
    • opcua-jsonは各トップレベルノードのvalueフィールドを抽出
  2. リネームkeyMappingsを適用してキーをリネーム。
  3. エンコード — フラットマップをターゲット形式に再構成。
    • flat-jsonはマップを直接書き込み
    • nested-json.区切りキーをネストオブジェクトにアンフラット化
    • sparkplugbは各キー/値をmetrics配列内の{ "name": k, "value": v }としてラップ
    • opcua-jsonは各値を{ "value": v, "sourceTimestamp": null }としてラップ
  1. シンプルなキーを期待するデータベースへの取り込みのためのSparkplug Bからフラット JSONへ
  2. アラート前にノードメタデータを削除するためのOPC-UA JSONからフラット JSONへ
  3. Sparkplug準拠のMQTTブローカーへのパブリッシュ時のフラット JSONからSparkplug Bへ
  4. フラットキースペースを期待するダウンストリームコネクタのためのネストJSONのフラット化
{
"type": "MeddleProtocolTranslator",
"config": {
"sourceFormat": "opcua-json",
"targetFormat": "flat-json"
}
}

入力:

{
"ns=2;s=Temp": { "value": 25.5, "sourceTimestamp": "2025-01-01T12:00:00Z" },
"ns=2;s=Press": { "value": 101.3, "sourceTimestamp": "2025-01-01T12:00:00Z" }
}

出力:

{
"ns=2;s=Temp": 25.5,
"ns=2;s=Press": 101.3
}

例: フラットJSONからネストJSONへ

Section titled “例: フラットJSONからネストJSONへ”
{
"type": "MeddleProtocolTranslator",
"config": {
"sourceFormat": "flat-json",
"targetFormat": "nested-json",
"keyMappings": {
"temp": "sensor.temperature",
"press": "sensor.pressure"
}
}
}

入力: { "temp": 25.5, "press": 101.3 }

出力: { "sensor": { "temperature": 25.5, "pressure": 101.3 } }

  • keyMappingsを使用して、上流のタグ名をダウンストリームのスキーマ規約と1ステップで整合
  • キーリネームを超える値レベルの変更(数式、型変換)にはTransformと組み合わせる
  • Sparkplug Bペイロードはnamevalueフィールドを持つオブジェクトのmetrics配列を含む必要があります — ソースが信頼できない場合は上流で検証
  • flat-json -> opcua-json -> flat-jsonのラウンドトリッピングはサポートされていますが、エンコード時にsourceTimestampnullに設定されます
  • Transform - JSONPath、テンプレート、静的値抽出
  • Reshape - 形式変更なしの直接キーリネーム
  • File Format - CSVおよびXMLパース