Dato sorgente: radar VMI Protezione Civile (5 min)
Stazioni meteo (pressione) — multiple
Aggiungi più stazioni MeteoNetwork, anche fino a ~30 km — utili come preavviso:
se una stazione lontana segnala un calo di pressione forte, ti avvisiamo anche
prima che la perturbazione sia vicina. Coordinate lette automaticamente dalla tab "Dettagli".
Stazione
Distanza
Direzione
Temp.
Pressione
Δ/ora
Caricamento...
Configurazione notifiche
Email destinatarie
Lista vuota = nessuna notifica inviata, incluso l'indirizzo eventualmente impostato come secret NOTIFY_TO_EMAIL nel Worker.
Tempo minimo tra due notifiche
min
Configurazione pesi (modificabili)
Caricamento...
I pesi devono sommare a 1.0 (100%). La modifica si applica dal prossimo check del Worker.
Come funziona Storm Watcher
Storm Watcher controlla periodicamente cinque fonti indipendenti (radar, pressione, instabilità atmosferica, probabilità di precipitazione, allerte ufficiali) e le combina in un punteggio pesato 0-100. Un Cloudflare Worker esegue il controllo ogni 5 minuti; quando il punteggio finale supera la soglia impostata, parte una notifica via email a tutti gli indirizzi configurati, con un tempo minimo di attesa tra due notifiche per evitare spam durante condizioni persistenti.
1. Radar — 35% del punteggio
La fonte più sofisticata del sistema. Il Worker scarica il composito radar nazionale VMI (Vertical Maximum Intensity) della Protezione Civile, aggiornato ogni ~5 minuti in formato GeoTIFF ad alta risoluzione (circa 1km/pixel). Invece di leggere solo il valore esatto sopra casa tua, il sistema funziona in due livelli:
Primo livello — scansione ad area (60km di raggio): ogni pixel valido nel raggio di 60km attorno a Rubano riceve un punteggio calcolato come intensità (dBZ) × attenuazione per distanza. L'attenuazione è massima (peso pieno) entro 3km da casa e scende progressivamente a zero oltre i 60km. Il sistema sceglie il pixel con il punteggio combinato più alto — la "cella più minacciosa" in quel momento — non necessariamente il pixel più intenso in assoluto, né quello più vicino: è il miglior compromesso tra i due fattori. Questo significa che una nuova formazione temporalesca che nasce ovunque dentro il raggio, se supera le altre zone di pioggia per combinazione di forza e vicinanza, viene automaticamente rilevata.
Secondo livello — tracking con gate di plausibilità fisica: il sistema confronta la posizione della cella più minacciosa tra il frame attuale e quello precedente (~5 minuti prima), calcolando lo spostamento vettoriale reale (non solo la differenza di distanza da casa, che sarebbe cieca alla direzione). Prima di considerare le due celle "la stessa formazione", verifica che lo spostamento implicito sia fisicamente plausibile per un temporale in 5 minuti (soglia: 12km, equivalente a circa 144 km/h, già generosa). Se lo spostamento supera questa soglia, il sistema riconosce che si tratta di due formazioni diverse — non della stessa cella che si è "teletrasportata" — e azzera il tracking invece di calcolare una direzione/velocità inventata. Se invece lo spostamento è plausibile, calcola velocità e direzione reali del movimento, e verifica se la cella si sta avvicinando o allontanando da casa (soglia di variazione: 2km).
I due livelli lavorano in parallelo, non in serie: il punteggio del primo livello (intensità×distanza) non viene mai moltiplicato o azzerato dal secondo. Il tracking aggiunge solo un bonus fisso di +20 punti se la cella si avvicina, o una penalità di -20 se si allontana — sommati al punteggio base, non moltiplicati. Se il tracking è azzerato per formazione diversa, il bonus/penalità è semplicemente zero, e resta solo il punteggio di primo livello a determinare lo score radar.
Un limite onesto: questo non è un vero sistema di tracking multi-cella con identità persistenti (niente "ID cella" che segue nel tempo formazioni multiple contemporanee). Ogni frame identifica semplicemente "la minaccia peggiore in questo momento" e la confronta con quella del frame precedente. Funziona bene per lo scopo di allerta domestica, ma con più temporali contemporanei nella zona può in rari casi "saltare" da uno all'altro tra un frame e il successivo — il gate di plausibilità limita fortemente questo rischio, ma non lo elimina del tutto.
2. Trend pressione — 30% del punteggio
Il sistema legge in tempo reale i dati di più stazioni meteo amatoriali MeteoNetwork configurabili da questa dashboard, tramite scraping delle loro pagine pubbliche (nessuna autenticazione richiesta). Per ciascuna stazione mantiene uno storico delle ultime 6 ore di pressione atmosferica e calcola il trend orario: un calo rapido (-2 hPa/ora o peggio) è un classico segnale meteorologico di perturbazione in arrivo, spesso rilevabile alcuni minuti o decine di minuti prima che la pioggia sia visibile al radar.
Ogni stazione ha un peso che si attenua in base alla distanza da casa: pieno peso entro 5km, zero peso oltre 35km. Con più stazioni configurate (anche fino a 30km di distanza), il sistema non fa la media dei loro punteggi ma prende sempre il punteggio più alto tra tutte — questa è la logica di "preavviso": se una stazione lontana segnala già un calo di pressione deciso, il sistema si allarma comunque, anche prima che la perturbazione sia vicina a casa tua. Fare la media diluirebbe questo segnale e lo renderebbe tardivo.
3. CAPE (instabilità atmosferica) — 20% del punteggio
Il CAPE (Convective Available Potential Energy, misurato in J/kg) è un indice standard in meteorologia che stima l'energia disponibile per la convezione atmosferica — in pratica, quanto "carburante" c'è per un temporale. Viene recuperato dal modello previsionale Open-Meteo. Valori sotto 500 J/kg indicano atmosfera stabile; tra 500 e 2500 J/kg instabilità crescente; oltre 2500 J/kg forte potenziale per temporali intensi, incluso rischio grandine.
Se il servizio Open-Meteo è temporaneamente non raggiungibile (es. errore 503), il sistema non azzera semplicemente questo punteggio — riutilizza l'ultimo valore noto salvato dal check precedente, evitando che un'interruzione momentanea del servizio esterno falsi il punteggio complessivo verso il basso.
4. Probabilità di precipitazione — 10% del punteggio
Percentuale di probabilità di pioggia nelle prossime ore, anch'essa da modello previsionale Open-Meteo. È il segnale più "generico" del gruppo — utile come conferma incrociata con le altre fonti, ma da solo poco specifico per temporali/grandine.
5. Allerte ufficiali — 5% del punteggio
Il livello di allerta meteo ufficiale emesso dalla Protezione Civile per il comune di Rubano, recuperato tramite un servizio che sincronizza direttamente dal bollettino di criticità nazionale. La scala ufficiale a 4 livelli (verde, giallo, arancione, rosso) viene convertita in punteggio 0-100.
Come si combina tutto — il punteggio finale
Ogni fonte produce indipendentemente un punteggio 0-100. Il punteggio finale è la somma pesata di tutte e cinque, secondo le percentuali indicate sopra (modificabili in questa dashboard, purché sommino a 100%):
Se il risultato supera la soglia di notifica (modificabile, default 65/100), e non siamo ancora in periodo di cooldown dall'ultima notifica inviata, parte l'email a tutti gli indirizzi configurati.
Frequenza dei controlli
Il Worker gira ogni 5 minuti, allineato alla cadenza reale di aggiornamento delle fonti principali (il radar VMI si aggiorna ogni ~5 minuti alla fonte; controllare più spesso non aggiungerebbe informazione reale, solo carico inutile). Ogni esecuzione consuma un numero limitato di operazioni di scrittura sul database (Cloudflare Workers KV, piano gratuito: 1000 scritture/giorno) — la struttura dati è stata ottimizzata per restare ampiamente sotto questo limite anche con più stazioni pressione configurate contemporaneamente.
Dev Mode — dati grezzi per fonte
Output completo dell'ultimo check (/status), incluso ogni dettaglio restituito da ciascuna fonte.