コンテンツにスキップ

On Changeコネクタ

On Changeコネクタは、監視対象フィールドの少なくとも1つが最後に観測された値と異なる場合にのみペイロードを転送します。同じ読み取り値を変更なく繰り返す冗長なストリームを折りたたむための標準ツールです。

コネクタタイプ: MeddleOnChange

前のペイロード以降に監視対象キーのいずれかが変化した場合に発行します。

{
"type": "MeddleOnChange",
"config": {
"keys": ["temperature", "pressure"],
"mode": "any",
"tolerance": 0.1,
"emitFirst": true
}
}

temperatureまたはpressureのいずれかが0.1を超えて異なる場合、ペイロードが発行されます。

すべての監視対象キーがペイロードに存在し、それらすべてが変化した場合にのみ発行します。

{
"type": "MeddleOnChange",
"config": {
"keys": ["x", "y", "z"],
"mode": "all",
"tolerance": 0,
"emitFirst": false
}
}

ペイロードがアトミックなスナップショットを運び、部分的な変更が伝播してはならない場合に有用です。

  • keys(必須、一意):監視するペイロードキーの配列
  • mode(必須):any(少なくとも1つのキーが変化した時に発行)またはall(すべてのキーが変化した時にのみ発行)
  • tolerance: 数値比較の絶対許容範囲(デフォルト 0)。|a - b| <= toleranceの場合、2つの数値は等しいと見なされます。
  • emitFirst: trueの場合、最初に観測されたペイロードが発行されます(そしてベースラインをシードします)。falseの場合、最初のペイロードは静かに消費されます。
  • 数値はfloat64に強制変換され、設定された許容範囲と比較されます
  • 非数値は厳密な等価性を使用します
  • ペイロードに存在しないキーは変化としてカウントされず、ベースラインを更新しません
  • ベースラインは、発行を引き起こしたかどうかに関係なく、受信ペイロードに存在するすべてのキーに対して更新されます
  1. 同一の繰り返しテレメトリをドロップすることでMQTT/Kafkaトラフィックを削減
  2. ステータスフィールドのエッジオブステート検出(例:statusがフリップした時のみ転送)
  3. 時系列データベースへのストレージ書き込みのスロットル
  4. ノイズの多いアナログ読み取りの許容範囲ベースのデバウンス
{
"type": "MeddleOnChange",
"config": {
"keys": ["status"],
"mode": "any",
"tolerance": 0,
"emitFirst": true
}
}

ソースがどれくらいの頻度でパブリッシュするかに関係なく、statusが前の観測値と異なるペイロードのみがダウンストリームに伝播します。

例: アナログセンサーの許容範囲

Section titled “例: アナログセンサーの許容範囲”
{
"type": "MeddleOnChange",
"config": {
"keys": ["temperature"],
"mode": "any",
"tolerance": 0.5,
"emitFirst": true
}
}

±0.5以内のセンサーノイズは無視されます。本物の動きのみがダウンストリームの発行をトリガーします。

  • 本物の遷移を見逃さずにノイズを抑制するために、toleranceをセンサーの既知のジッターより少し高く設定
  • ペイロードが本当に首尾一貫したスナップショットを含む場合のみmode: "all"を使用。それ以外の場合はanyが安全なデフォルト
  • 重複排除されたストリームの定期的な要約も必要な場合は、Aggregationと組み合わせる
  • keysリストを小さく保つ — 監視されるキーごとにペイロードあたり1回の比較コストがかかります
  • Filter - 重複排除前に不要なキーをドロップ
  • Aggregation - ウィンドウベースの要約
  • Rate Limiter - 変更に関係なくスループットを制限