0.5.0: riordino come l'app ufficiale (home, Dati, Impianto)

- home: temperatura esterna e in casa/assente in alto, messaggio di stato,
  scheda impianto con temperatura stanza e acqua calda; comandi sotto
- pagina Dati: calore prodotto, elettricita' usata, COP acqua calda e
  riscaldamento, risparmio, CO2 evitata, Smart Tariff Control (mese per mese)
- pagina Impianto: stato, termostato a parete, versioni software, errori
- bridge 0.4.0: rotta /stats (servizio statistiche del cloud) e blocco
  dispositivo in /summary (ID breve, versioni, termostato)
- C++: parseStats, formatNumber, formatMoney, monthLabel (separatore e
  valuta secondo la lingua); 61/61 verifiche del nucleo
- anteprime aggiornate (dati, impianto) in inglese e italiano
This commit is contained in:
2026-10-10 08:59:03 +02:00
parent ec7333a185
commit 4f279a18b0
30 changed files with 2355 additions and 353 deletions
+56 -16
View File
@@ -13,15 +13,43 @@ dell'impianto e invia i comandi dell'acqua calda sanitaria e del riscaldamento
L'interfaccia è in **inglese e italiano**: di serie segue la lingua del telefono
e ripiega sull'inglese; la si può scegliere anche nelle impostazioni dell'app.
## Cosa mostra
- **Home**, ordinata come l'app ufficiale: temperatura esterna e *in casa /
assente* in alto, una frase di stato in chiaro ("Relax: la pompa di calore
funziona regolarmente"), poi la **scheda dell'impianto** con le due letture che
contano (temperatura stanza e acqua calda, ognuna con il suo obiettivo).
Toccando la scheda si apre la pagina dell'impianto. Sotto, i comandi:
obiettivo della casa con slider 5–30 °C (passi da 0,5 °C) e conferma prima
dell'invio, obiettivo ACS (45–60 °C) e i pulsanti del boost
- **Dati**: calore prodotto, elettricità usata, efficienza (COP) di acqua calda e
riscaldamento, risparmio in bolletta, CO₂ evitata e risparmio Smart Tariff
Control, mese per mese. Sono i numeri che Aira calcola nel cloud, gli stessi
della scheda *Dati* dell'app ufficiale
- **Impianto**: stato (connessione, modalità, assenza/notte/riscaldamento
forzato, temperature esterna e interna, zone, ultima lettura), accessori (il
termostato a parete con temperatura, umidità, segnale, batteria), versioni del
software e numero di errori
- **Altri comandi**: assenza, night mode per un'ora, riscaldamento forzato,
funzione riscaldamento on/off, ciclo legionella, ACS on/off e verifica
impianto, con lo stato attuale in cima
- **Copertina** con la temperatura della casa
- Indirizzo e token del bridge stanno nelle impostazioni dell'app (QSettings),
mai nel binario
![architettura](docs/architettura.svg)
Anteprime del layout (valori veri dell'impianto, **non** screenshot — vedi
*Stato*). Queste sono in italiano; quelle in inglese stanno in
`docs/anteprima/`:
| Home | Altri comandi | Impostazioni | Copertina |
|---|---|---|---|
| ![home](docs/anteprima/it/dashboard.png) | ![comandi](docs/anteprima/it/comandi.png) | ![impostazioni](docs/anteprima/it/impostazioni.png) | ![copertina](docs/anteprima/it/copertina.png) |
| Home | Dati | Impianto |
|---|---|---|
| ![home](docs/anteprima/it/dashboard.png) | ![dati](docs/anteprima/it/dati.png) | ![impianto](docs/anteprima/it/impianto.png) |
| Altri comandi | Impostazioni | Copertina |
|---|---|---|
| ![comandi](docs/anteprima/it/comandi.png) | ![impostazioni](docs/anteprima/it/impostazioni.png) | ![copertina](docs/anteprima/it/copertina.png) |
## La lingua dell'interfaccia
@@ -106,29 +134,37 @@ cd tests && mkdir -p build && cd build
```
Copre la logica pura (`src/airajson.cpp`): normalizzazione dell'indirizzo,
lettura del riassunto, etichette di stato, corpo dei comandi, messaggi
d'errore. **La UI Silica si verifica solo sul dispositivo.**
lettura del riassunto e delle statistiche, etichette di stato, corpo dei comandi,
messaggi d'errore e la formattazione di numeri, importi e mesi della pagina Dati.
**La UI Silica si verifica solo sul dispositivo.**
## Stato
- **39/39** verifiche del nucleo, compilazione senza warning
- **27/27** verifiche offline del bridge (`bridge/test_bridge_commands.py`)
- **99/99** stringhe tradotte nel catalogo italiano: il test carica il `.qm`
- **61/61** verifiche del nucleo, compilazione senza warning
- **48/48** verifiche offline del bridge (`bridge/test_bridge_commands.py`),
comprese le conversioni Wh→kWh e degli importi delle statistiche
- **170/170** stringhe tradotte nel catalogo italiano: il test carica il `.qm`
compilato come fa `main.cpp` e verifica che in inglese l'etichetta di stato sia
la sorgente e in italiano quella tradotta, e che togliendo il catalogo si torni
all'inglese
- numeri formattati con `QLocale`: il separatore decimale segue la lingua
(verificato per entrambe)
- numeri, importi e nomi dei mesi formattati con `QLocale`: separatore decimale e
posizione del simbolo di valuta seguono la lingua (verificato per entrambe)
- `qmllint` pulito su tutti i QML (valida solo la sintassi: senza il modulo
Silica una proprietà inesistente passa in silenzio)
- provata dal vivo in **sola lettura** su un impianto Aira Home
- provata dal vivo in **sola lettura** su un impianto Aira Home, statistiche
comprese: coincidono con quelle mostrate dall'app ufficiale per lo stesso
periodo (calore prodotto 70,8 kWh, elettricità 29,3 kWh, COP acqua calda 4,42,
risparmio Smart Tariff Control 2,71 €)
- **l'app non è ancora stata compilata né eseguita su un telefono**: le immagini
in `docs/anteprima/` sono anteprime di layout costruite con i valori veri
dell'impianto, non screenshot
Non c'è ancora la UI per il raffrescamento (il bridge sa farlo), né orari e
curve; non è nella Jolla Store: è un client non ufficiale che parla con le API
Aira usando il proprio account.
curve; le versioni del software si vedono in sola lettura. La pagina Dati dipende
dal servizio statistiche di Aira: su un impianto appena installato qualche mese
non ha ancora dati e l'app scrive *nessun dato* invece del numero. Non è nella
Jolla Store: è un client non ufficiale che parla con le API Aira usando il proprio
account.
## Struttura
@@ -141,16 +177,20 @@ src/translator.{h,cpp} lingua dell'interfaccia: locale di sistema, ripiego
sull'inglese, ricarica della UI al cambio
src/main.cpp context properties: appSettings, api, translator
qml/harbour-aira.qml ApplicationWindow + copertina
qml/pages/MainPage.qml dashboard e comandi acqua/riscaldamento
qml/pages/MainPage.qml home: stato, scheda impianto, riscaldamento e acqua
qml/pages/DataPage.qml energia, efficienza e risparmi
qml/pages/PlantPage.qml stato, accessori, versioni, errori
qml/pages/CommandsPage.qml gli altri comandi, con lo stato attuale in cima
qml/pages/SettingsPage.qml
qml/components/InfoRow.qml
qml/components/InfoRow.qml etichetta a sinistra, valore a destra
qml/components/ValueRow.qml titolo e sottotitolo a sinistra, valore grande a destra
qml/components/ActionButton.qml pulsante di comando, con conferma opzionale
tests/core_test.cpp verifiche del nucleo (headless)
bridge/aira_bridge.py servizio HTTP/1.1 + JSON verso il cloud (gRPC)
bridge/setup_creds.py salva le credenziali Aira (file 600)
bridge/aira_probe.py sonda di sola lettura: login + stato impianto
bridge/test_bridge_commands.py verifiche offline dei comandi (27 controlli)
bridge/aira_stats_probe.py sonda di sola lettura delle statistiche del cloud
bridge/test_bridge_commands.py verifiche offline dei comandi e delle statistiche (48 controlli)
bridge/harbour-aira-bridge.service unit systemd utente
bridge/README.md istruzioni di installazione del bridge (inglese)
docs/PIANO.md piano di progetto e scelte