Corrente consumata e corrente recuperata - Float 1464
Energia totale generata e utilizzata per profilo
Cause di stop PG (pg.cause.stop) per profilo
Grafico scatter: Ogni punto = una lettura pg.cause.stop. Asse X = Numero Profilo, Asse Y = Codice Causa (0-9). I punti dello stesso profilo sono spostati orizzontalmente (jitter) per evitare sovrapposizione.
Nota metodologica: i JSON non contengono una variabile di corrente elettrica istantanea. Il grafico calcola quindi una corrente equivalente media per profilo: energia del profilo convertita in joule, divisa per tensione media e durata del profilo. Perciò i valori sono in ampere medi (A), non una misura istantanea.
I recuperata = Egen × 3600 / (V_PG × Δt) · I consumata = Econs × 3600 / (V_bat × Δt)
Spiegazioni grafici:
1. Primo Grafico: Corrente consumata e corrente recuperata I file JSON non contengono una misura diretta della corrente elettrica istantanea (in Ampere), ma forniscono i valori dell'energia espressi in Wattora (Wh). Per questo motivo il sistema calcola una corrente equivalente media per profilo:
Durata del profilo (Δt): Calcolata come la differenza di tempo tra l'ultimo e il primo timestamp del profilo: Δt = t_fine - t_inizio (in secondi). Se il valore non è valido o è ≤ 0, viene usato un valore predefinito di 3600 s.
Tensione media (V): Viene calcolata la media aritmetica delle tensioni registrate nel profilo:V_PG = media(pg.battery.voltage)(In mancanza di dati validi, viene applicata una tensione di default di 12 V).
V_bat = media(veh.battery.voltage)
Conversione in Ampere medi: L'energia in Wattora viene convertita in Joule (Wh × 3600) e divisa per il prodotto tra tensione media e durata temporale:
I_recuperata = pg.run.energy × 3600 / (V_PG × Δt)
I_consumata = veh.battery.energy × 3600 / (V_bat × Δt)
2. Secondo Grafico: Energia totale generata e utilizzata per profilo In questo grafico non vengono applicate conversioni fisiche, ma viene estratto l'ultimo valore cumulativo di ogni profilo:
Estrazione dell'ultimo valore (funzione last): Lo script scorre a ritroso l'array temporale del JSON per estrarre il valore finale:
pg.run.energy.accumulated (ultimo valore registrato)
Tracciamento diretto: I due valori cumulativi vengono riportati sull'asse Y in corrispondenza del relativo numero di profilo.
veh.battery.energy (ultimo valore registrato)
3. Terzo Grafico: Cause di stop PG (pg.cause.stop) per profilo Rappresenta gli eventi di arresto del generatore (codici da 0 a 9) per ciascun profilo. Per evitare che più punti nello stesso profilo si sovrappongano, vengono applicate le seguenti elaborazioni:
Filtraggio: Vengono mantenuti unicamente i dati con codice di causa di stop compreso tra 0 e 9.
Spostamento orizzontale (Jittering): Per i profili con più registrazioni, la coordinata X del punto viene leggermente traslata:
jitter = (index - (count - 1) / 2) × 0.4 / max(1, count - 1)
Mappatura etichette: Il valore numerico dell'asse Y (0-9) viene mappato sulla relativa descrizione testuale (es. 1 → Pressure below stop, 7 → Batt full, long dump).
X_grafico = Numero_Profilo + jitter
Conversione Data/Ora: Il timestamp UNIX epoch viene convertito nel formato leggibile UTC (GG/MM/AAAA HH:MM:SS) visibile nel tooltip.



