Salta ai contenuti

Connettore On Change

Il connettore On Change inoltra un payload solo quando almeno uno dei suoi campi monitorati differisce dall’ultimo valore osservato. È lo strumento standard per comprimere stream verbosi che ripetono le stesse letture invariate.

Tipo Connettore: MeddleOnChange

Emette quando qualsiasi chiave monitorata cambia rispetto al payload precedente.

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

Se temperature o pressure differisce di più di 0.1, il payload viene emesso.

Emette solo quando ogni chiave monitorata è presente nel payload e ognuna è cambiata.

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

Utile quando i payload trasportano uno snapshot atomico e un cambiamento parziale non dovrebbe propagarsi.

  • keys (richiesto, unico): Array di chiavi del payload da monitorare
  • mode (richiesto): any (emette quando almeno una chiave cambia) o all (emette solo quando tutte le chiavi cambiano)
  • tolerance: Tolleranza assoluta per confronti numerici (default 0). Due numeri sono considerati uguali quando |a - b| <= tolerance.
  • emitFirst: Quando true, il primo payload osservato viene emesso (e fa da seed per la baseline). Quando false, il primo payload viene consumato silenziosamente.
  • I valori numerici vengono convertiti in float64 e confrontati con la tolleranza configurata
  • I valori non numerici usano uguaglianza stretta
  • Le chiavi assenti da un payload non contano come cambiamenti e non aggiornano la baseline
  • La baseline viene aggiornata per ogni chiave presente nel payload in ingresso, indipendentemente dal fatto che abbia causato un’emissione
  1. Ridurre traffico MQTT/Kafka scartando telemetria ripetuta identica
  2. Rilevamento del bordo di stato per campi di stato (es. inoltra solo quando status cambia)
  3. Limitare scritture sullo storage verso un database time-series
  4. Debouncing basato su tolleranza di letture analogiche rumorose
{
"type": "MeddleOnChange",
"config": {
"keys": ["status"],
"mode": "any",
"tolerance": 0,
"emitFirst": true
}
}

Solo i payload in cui status differisce dall’osservazione precedente si propagano a valle, indipendentemente dalla frequenza con cui la sorgente pubblica.

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

Il rumore del sensore entro ±0.5 viene ignorato; solo il movimento reale attiva un’emissione a valle.

  • Imposta tolerance leggermente superiore al jitter noto del sensore per sopprimere il rumore senza perdere transizioni reali
  • Usa mode: "all" solo quando i payload contengono effettivamente snapshot coerenti; altrimenti any è il default più sicuro
  • Combina con Aggregation quando hai anche bisogno di riepiloghi periodici dello stream deduplicato
  • Mantieni la lista keys piccola — ogni chiave monitorata costa un confronto per payload
  • Filter - Scarta chiavi indesiderate prima della deduplicazione
  • Aggregation - Riepilogo basato su finestra
  • Rate Limiter - Limita il throughput indipendentemente dal cambiamento