0.6.2: pallino rosso solo per un allarme che ferma la macchina (avviso = ambra)

Il pallino era rosso per qualunque voce nell'elenco errori: un semplice avviso
(compressore limitato dalla temperatura esterna, caso reale del 10/10) sembrava
un guasto. Ora il ponte espone in /summary anche error_severity e
alarm_stopping, e il livello 3 (rosso) e' riservato agli allarmi che fermano la
macchina o di severita' CRITICAL/ERROR; avviso = ambra. Copertina allineata.

6 verifiche nuove nell'harness del nucleo (avviso/stop/critical/error/
precedenza sul modo attivo/gravita' ignota = ambra).
This commit is contained in:
2026-10-10 18:16:04 +02:00
parent 4050b3b5d7
commit a281a7e112
9 changed files with 108 additions and 13 deletions
+36
View File
@@ -245,6 +245,42 @@ int main(int argc, char *argv[])
"stato breve: l'errore vince sul modo attivo");
check(AiraJson::statusLevel(misto) == 2, "livello: errore prima di tutto");
// Un avviso NON e' un allarme: pallino ambra (livello 2), non rosso.
// Caso reale 10/10/2026: compressore limitato dalla temperatura esterna
// (SEVERITY_WARNING, nessun allarme che ferma la macchina) -> l'app
// accendeva il rosso per un semplice avviso.
QVariantMap avviso = calmo;
avviso.insert("errors_count", 1);
avviso.insert("alarm_stopping", false);
avviso.insert("error_severity", "WARNING");
check(AiraJson::statusLevel(avviso) == 2,
"livello: avviso (WARNING) = ambra, non rosso");
// Allarme che ferma la macchina: rosso anche con severita' di avviso.
QVariantMap fermo = avviso;
fermo.insert("alarm_stopping", true);
check(AiraJson::statusLevel(fermo) == 3, "livello: allarme che ferma = rosso");
// Severita' alta: rosso anche senza il flag di stop.
QVariantMap critico = avviso;
critico.insert("error_severity", "CRITICAL");
check(AiraJson::statusLevel(critico) == 3, "livello: CRITICAL = rosso");
QVariantMap guasto = avviso;
guasto.insert("error_severity", "ERROR");
check(AiraJson::statusLevel(guasto) == 3, "livello: ERROR = rosso");
// Il rosso vince sul modo attivo.
QVariantMap fermoAssente = assente;
fermoAssente.insert("errors_count", 1);
fermoAssente.insert("alarm_stopping", true);
check(AiraJson::statusLevel(fermoAssente) == 3,
"livello: allarme che ferma prima del modo attivo");
// Senza i campi di gravita' (bridge piu' vecchio) si resta ambra:
// il rosso si accende solo su un guasto che sappiamo essere serio.
check(AiraJson::statusLevel(uno) == 2,
"livello: gravita' ignota = ambra");
check(AiraJson::stateShort(QVariantMap()) == "No data",
"stato breve: nessun dato");
check(AiraJson::stateLong(QVariantMap()).isEmpty(),