Ir al contenido

Conector On Change

El conector On Change reenvía una carga sólo cuando al menos uno de sus campos monitorizados difiere del último valor observado. Es la herramienta estándar para colapsar flujos verbosos que repiten las mismas lecturas sin cambios.

Tipo de Conector: MeddleOnChange

Emite cuando cualquier clave monitorizada cambia respecto a la carga anterior.

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

Si temperature o pressure difieren en más de 0.1, la carga se emite.

Emite sólo cuando todas las claves monitorizadas están presentes en la carga y todas ellas han cambiado.

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

Útil cuando las cargas transportan una instantánea atómica y un cambio parcial no debería propagarse.

  • keys (obligatorio, único): Array de claves de la carga a monitorizar
  • mode (obligatorio): any (emite cuando al menos una clave cambia) o all (emite sólo cuando todas las claves cambian)
  • tolerance: Tolerancia absoluta para comparaciones numéricas (por defecto 0). Dos números se consideran iguales cuando |a - b| <= tolerance.
  • emitFirst: Cuando es true, la primera carga observada se emite (y siembra la línea base). Cuando es false, la primera carga se consume silenciosamente.
  • Los valores numéricos se convierten a float64 y se comparan con la tolerancia configurada
  • Los valores no numéricos usan igualdad estricta
  • Las claves ausentes de una carga no cuentan como cambios y no actualizan la línea base
  • La línea base se actualiza para cada clave presente en la carga entrante, independientemente de si provocó una emisión
  1. Reducir el tráfico MQTT/Kafka descartando telemetría idéntica repetida
  2. Detección de cambio de estado para campos de estado (ej. reenviar sólo cuando status cambia)
  3. Limitar las escrituras de almacenamiento en una base de datos de series temporales
  4. Debouncing basado en tolerancia de lecturas analógicas ruidosas
{
"type": "MeddleOnChange",
"config": {
"keys": ["status"],
"mode": "any",
"tolerance": 0,
"emitFirst": true
}
}

Sólo las cargas donde status difiere de la observación anterior se propagan hacia abajo, independientemente de la frecuencia con la que publique la fuente.

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

El ruido del sensor dentro de ±0.5 se ignora; sólo el movimiento real activa una emisión descendente.

  • Define tolerance ligeramente por encima del jitter conocido del sensor para suprimir el ruido sin perder transiciones reales
  • Usa mode: "all" sólo cuando las cargas contienen verdaderamente instantáneas coherentes; de lo contrario, any es el valor por defecto más seguro
  • Combina con Aggregation cuando también necesites resúmenes periódicos del flujo deduplicado
  • Mantén la lista keys pequeña — cada clave monitorizada cuesta una comparación por carga
  • Filter - Descartar claves no deseadas antes de la deduplicación
  • Aggregation - Resumen basado en ventanas
  • Rate Limiter - Limitar el rendimiento independientemente del cambio