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:
+25
-1
@@ -53,7 +53,7 @@ CREDS = BASE / "aira.json"
|
||||
TOKENS = BASE / "aira_tokens.json"
|
||||
POOL_CFG = BASE / "aira_config.json"
|
||||
|
||||
VERSION = "0.4.0"
|
||||
VERSION = "0.6.2"
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
@@ -195,6 +195,23 @@ def summarize(st: dict) -> dict:
|
||||
|
||||
errs = st.get("errors") or []
|
||||
|
||||
# ---- gravita' degli errori -------------------------------------------
|
||||
# La severita' arriva come stringa ("SEVERITY_WARNING") e le voci possono
|
||||
# essere piu' di una: si normalizza al nome nudo e si tiene la peggiore.
|
||||
# "allarme che ferma" NON si deduce dalla severita': sta nei metadati
|
||||
# (compreso quello del compressore).
|
||||
_GRAVITA = {"WARNING": 1, "ERROR": 2, "CRITICAL": 3}
|
||||
_meta = st.get("error_metadata") or {}
|
||||
alarm_stopping = bool(_meta.get("hp_has_stopping_alarms")) or bool(
|
||||
_meta.get("compressor_has_stopping_alarm"))
|
||||
severita = ""
|
||||
for _voce in errs if isinstance(errs, list) else []:
|
||||
_nome = str((_voce or {}).get("severity") or "")
|
||||
if _nome.startswith("SEVERITY_"):
|
||||
_nome = _nome[len("SEVERITY_"):]
|
||||
if _GRAVITA.get(_nome, 0) > _GRAVITA.get(severita, 0):
|
||||
severita = _nome
|
||||
|
||||
# ---- dati del dispositivo (per la pagina "Impianto": accessori + riepilogo,
|
||||
# come la scheda "Accessori" e il "Riepilogo impostazioni" dell'app ufficiale)
|
||||
hp_id = g("heat_pump_id", "value") or ""
|
||||
@@ -249,6 +266,13 @@ def summarize(st: dict) -> dict:
|
||||
"zone2_mode": g("current_pump_mode_state", "zone_2"),
|
||||
"zone2_cooling_setpoint": g("zone_setpoints_cooling", "zone_2"),
|
||||
"errors_count": len(errs) if isinstance(errs, list) else 0,
|
||||
# Gravita' degli errori, per il pallino di stato dell'app: un semplice
|
||||
# avviso (WARNING) non deve diventare rosso come un allarme che ferma la
|
||||
# macchina. "error_metadata" dice se c'e' un allarme che ferma; le voci
|
||||
# di "errors" portano la severita' di ognuna (normalizzata senza il
|
||||
# prefisso SEVERITY_, cosi' la UI non dipende dal protobuf).
|
||||
"alarm_stopping": alarm_stopping,
|
||||
"error_severity": severita,
|
||||
"pump_updated": g("aws_iot_received_time") or st.get("time"),
|
||||
# Identificativo e versioni: l'app ufficiale mostra le prime 6 cifre
|
||||
# dell'UUID come "Dispositivo ID".
|
||||
|
||||
Reference in New Issue
Block a user