#ifndef AIRAJSON_H #define AIRAJSON_H // Funzioni PURE (solo QtCore, nessun QObject): sono la parte dell'app // verificabile senza SDK, con l'harness locale in tests/core_test.cpp. // Il bridge HTTP parla JSON; qui stanno normalizzazione dell'indirizzo, // lettura del riassunto e costruzione del corpo dei comandi. #include #include #include #include namespace AiraJson { // "192.168.2.15:8790" -> "http://192.168.2.15:8790" // "" -> "" (nessun indirizzo: il client non fa richieste) // toglie gli slash finali e gli spazi; preserva schema e porta espliciti. QString normalizeBaseUrl(const QString &raw); // Legge il corpo di GET /summary nel dizionario usato dalla UI. // In caso di JSON non valido o di risposta di errore ritorna un dizionario // vuoto e mette *ok a false. QVariantMap parseSummary(const QByteArray &body, bool *ok); // Codice di stato Aira ("OPERATING_STATUS_AUTO") in etichetta italiana. QString modeLabel(const QString &operatingStatus); // Temperatura leggibile: "51,0" oppure "—" se il valore manca. QString formatValue(const QVariant &value); // Corpo JSON per POST /command. value viene omesso se nullo (i comandi // semplici non hanno parametri). QByteArray commandPayload(const QString &id, const QVariant &value); // Messaggio d'errore leggibile da una risposta del bridge // ({"ok":false,"error":"..."}), con fallback sullo stato HTTP. QString errorMessage(const QByteArray &body, int httpStatus); } // namespace AiraJson #endif // AIRAJSON_H