Connettore On Change
Panoramica
Sezione intitolata “Panoramica”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
Modalità Any
Sezione intitolata “Modalità Any”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.
Modalità All
Sezione intitolata “Modalità All”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.
Parametri di Configurazione
Sezione intitolata “Parametri di Configurazione”- keys (richiesto, unico): Array di chiavi del payload da monitorare
- mode (richiesto):
any(emette quando almeno una chiave cambia) oall(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). Quandofalse, il primo payload viene consumato silenziosamente.
Semantica di Confronto
Sezione intitolata “Semantica di Confronto”- I valori numerici vengono convertiti in
float64e 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
Casi d’Uso
Sezione intitolata “Casi d’Uso”- Ridurre traffico MQTT/Kafka scartando telemetria ripetuta identica
- Rilevamento del bordo di stato per campi di stato (es. inoltra solo quando
statuscambia) - Limitare scritture sullo storage verso un database time-series
- Debouncing basato su tolleranza di letture analogiche rumorose
Esempio: Inoltro dei Cambiamenti di Stato
Sezione intitolata “Esempio: Inoltro dei Cambiamenti di Stato”{ "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.
Esempio: Tolleranza su Sensori Analogici
Sezione intitolata “Esempio: Tolleranza su Sensori Analogici”{ "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.
Migliori Pratiche
Sezione intitolata “Migliori Pratiche”- Imposta
toleranceleggermente 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; altrimentianyè il default più sicuro - Combina con Aggregation quando hai anche bisogno di riepiloghi periodici dello stream deduplicato
- Mantieni la lista
keyspiccola — ogni chiave monitorata costa un confronto per payload
Connettori Correlati
Sezione intitolata “Connettori Correlati”- Filter - Scarta chiavi indesiderate prima della deduplicazione
- Aggregation - Riepilogo basato su finestra
- Rate Limiter - Limita il throughput indipendentemente dal cambiamento