Caso: Inbox Unificato — 1 picco, 1 alert
Lo stesso evento fisico che prima generava 3 righe rosse oggi si consolida in una sola riga con source_systems = [anomaly, energy, prognostics]. Un'azione chiude l'incidente.
Caso: Inbox Unificato — 1 picco, 1 alert
Contesto
- Industria: metalmeccanica
- Attrezzatura: pompa centrifuga di processo B-07, 75 kW
- Sensori: vibrazione triassiale, pressione scarico, corrente motore, kWh istantaneo
- Criticità: alta — alimenta la linea di taglio ad acqua
- Stack Rela AI attivo: rilevamento anomalie ML + monitoraggio energia + prognosi
Il problema prima dell'aggregator
Quando un cuscinetto iniziava a guastarsi, tre sottosistemi rilevavano la stessa anomalia allo stesso tempo e producevano tre alert indipendenti:
[14:02:15] 🔴 CRITICAL anomaly_detection B-07 ensemble score 0.92
[14:02:17] 🔴 CRITICAL energy_anomaly B-07 z=3.4 on kwh
[14:02:21] 🔴 CRITICAL prognostics B-07 RUL 18hConseguenze reali che il cliente viveva:
- Operatore vedeva 3 rossi e non sapeva quale affrontare prima.
- 3 task duplicati sul kanban per lo stesso asset.
- 3 messaggi WhatsApp a 6 secondi di distanza.
- MTTR sporco — CMMS sincronizzava 3 incidenti quando era uno solo.
Cosa Rela AI fa oggi
sequenceDiagram
participant S as Sensori
participant A as anomaly_detection
participant E as energy_service
participant P as prognostics
participant AG as alert_aggregator
participant I as Inbox
S->>A: Picco vibrazione
A->>A: Ensemble score 0.75 (warning)
A->>AG: ingest_alert(warning)
AG->>I: Insert · status=open · severity=warning
S->>E: Picco kWh
E->>E: z-score 3.4 (high)
E->>AG: ingest_alert(high)
AG->>I: Upgrade · severity=high · source_systems=[anomaly,energy] · count=2
S->>P: AHI collassa
P->>P: RUL 18h (critical)
P->>AG: ingest_alert(critical)
AG->>I: Upgrade · severity=critical · source_systems=[anomaly,energy,prognostics] · count=3I tre rilevamenti arrivano all'aggregator nella finestra configurata (alert_dedup_window_minutes, default 60). Risultato in _alerts:
| Campo | Valore |
|---|---|
asset_id | B-07 |
status | open |
severity | critical (max dei 3) |
source_systems | ["anomaly", "energy", "prognostics"] |
count | 3 |
sources | warning→ / →high / →critical |
Cosa vede l'operatore
Prima:
[14:02:15] 🔴 CRITICAL anomaly B-07 score 0.92
[14:02:17] 🔴 CRITICAL energy B-07 z=3.4
[14:02:21] 🔴 CRITICAL prognostics B-07 RUL 18hDopo:
[14:02:15 → 14:02:21] 🔴 CRITICAL B-07 [anomaly, energy, prognostics] count=3
└ trail: warning→ / →high / →criticalEscalation post-ACK
Se marcato acknowledged, un rilevamento successivo di severità maggiore lo riapre (reopened_reason = severity_upgrade) — nessuna perdita di visibilità.
Hysteresis
Se la severità entrante è uguale o minore a quella salvata: count e source_systems si aggiornano, ma sources non si sporca con ripetizioni non informative.
Impatto
| Metrica | Senza aggregator | Con aggregator |
|---|---|---|
| Righe rosse per incidente | 3 | 1 |
| Task sul kanban | 3 duplicati | 1 |
| Notifiche WhatsApp | 3 in 6s | 1 |
| Tempo decisione operatore | +90s di confusione | immediato |
| MTTR verso CMMS | 3 incidenti mescolati | 1 incidente pulito |
| Visibilità escalation post-ACK | zero | re-open automatico |
Configurazione usata
{
"alert_dedup_window_minutes": 60,
"ahi_weights": {
"condition": 0.35,
"alarm_health": 0.20,
"maintenance_compliance": 0.15,
"trend_stability": 0.10,
"anomaly_pressure": 0.20
}
}Cosa lo rende possibile
- R1:
alert_aggregator_servicecon regole di merge per asset. - R3: severità canonica condivisa tra i 3 rilevatori.
- R6: test E2E (
test_single_spike_consolidates_into_one_alert). - R8: hysteresis del trail, re-open in upgrade.
Perché conta commercialmente
- Meno rumore → più azione.
- MTTR pulito.
- Fiducia post-ACK.
- Integrazioni esterne ricevono una notifica per incidente.
Non è un "nice to have" di UI: sono cambi di contratto persistiti in
_alerts, con test di integrazione che garantiscono che nessuno rompa la semantica. Vedi Inbox Unificato.
Più macchine, un solo tunnel VPN
Come aggiungere forno, impastatrici, compressori e sensori sotto lo stesso tunnel VPN della panetteria — senza riconfigurare o toccare il Mikrotik.
Caso: Primo Mese senza Storico — Estrusore per Plastica
Come Rela AI è partita da zero su un estrusore senza dati storici ed è evoluta fino alla previsione