On Changeコネクタ
On Changeコネクタは、監視対象フィールドの少なくとも1つが最後に観測された値と異なる場合にのみペイロードを転送します。同じ読み取り値を変更なく繰り返す冗長なストリームを折りたたむための標準ツールです。
コネクタタイプ: MeddleOnChange
Anyモード
Section titled “Anyモード”前のペイロード以降に監視対象キーのいずれかが変化した場合に発行します。
{ "type": "MeddleOnChange", "config": { "keys": ["temperature", "pressure"], "mode": "any", "tolerance": 0.1, "emitFirst": true }}temperatureまたはpressureのいずれかが0.1を超えて異なる場合、ペイロードが発行されます。
Allモード
Section titled “Allモード”すべての監視対象キーがペイロードに存在し、それらすべてが変化した場合にのみ発行します。
{ "type": "MeddleOnChange", "config": { "keys": ["x", "y", "z"], "mode": "all", "tolerance": 0, "emitFirst": false }}ペイロードがアトミックなスナップショットを運び、部分的な変更が伝播してはならない場合に有用です。
設定パラメータ
Section titled “設定パラメータ”- keys(必須、一意):監視するペイロードキーの配列
- mode(必須):
any(少なくとも1つのキーが変化した時に発行)またはall(すべてのキーが変化した時にのみ発行) - tolerance: 数値比較の絶対許容範囲(デフォルト
0)。|a - b| <= toleranceの場合、2つの数値は等しいと見なされます。 - emitFirst:
trueの場合、最初に観測されたペイロードが発行されます(そしてベースラインをシードします)。falseの場合、最初のペイロードは静かに消費されます。
比較セマンティクス
Section titled “比較セマンティクス”- 数値は
float64に強制変換され、設定された許容範囲と比較されます - 非数値は厳密な等価性を使用します
- ペイロードに存在しないキーは変化としてカウントされず、ベースラインを更新しません
- ベースラインは、発行を引き起こしたかどうかに関係なく、受信ペイロードに存在するすべてのキーに対して更新されます
ユースケース
Section titled “ユースケース”- 同一の繰り返しテレメトリをドロップすることでMQTT/Kafkaトラフィックを削減
- ステータスフィールドのエッジオブステート検出(例:
statusがフリップした時のみ転送) - 時系列データベースへのストレージ書き込みのスロットル
- ノイズの多いアナログ読み取りの許容範囲ベースのデバウンス
例: ステータス変更転送
Section titled “例: ステータス変更転送”{ "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以内のセンサーノイズは無視されます。本物の動きのみがダウンストリームの発行をトリガーします。
ベストプラクティス
Section titled “ベストプラクティス”- 本物の遷移を見逃さずにノイズを抑制するために、
toleranceをセンサーの既知のジッターより少し高く設定 - ペイロードが本当に首尾一貫したスナップショットを含む場合のみ
mode: "all"を使用。それ以外の場合はanyが安全なデフォルト - 重複排除されたストリームの定期的な要約も必要な場合は、Aggregationと組み合わせる
keysリストを小さく保つ — 監視されるキーごとにペイロードあたり1回の比較コストがかかります
関連コネクタ
Section titled “関連コネクタ”- Filter - 重複排除前に不要なキーをドロップ
- Aggregation - ウィンドウベースの要約
- Rate Limiter - 変更に関係なくスループットを制限