documentazione 0.5.0: PROTOCOL (/stats, campi dispositivo), PIANO, conteggi dei test
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# Dipendenze del bridge. La libreria parla gRPC con il cloud Aira e porta con
|
# Dipendenze del bridge. La libreria parla gRPC con il cloud Aira e porta con
|
||||||
# se' il resto (grpcio, protobuf, pycognito, boto3, bleak...).
|
# se' il resto (grpcio, protobuf, pycognito, boto3, bleak...).
|
||||||
# Versione fissata: e' quella su cui il bridge e' stato provato (27/27).
|
# Versione fissata: e' quella su cui il bridge e' stato provato (48/48).
|
||||||
pyairahome==2.3.0
|
pyairahome==2.3.0
|
||||||
|
|||||||
+15
-9
@@ -211,17 +211,23 @@ andrebbe disegnata a mano.
|
|||||||
2. **Dati**: "Il tuo riscaldamento (questo mese)" con calore prodotto, elettricità
|
2. **Dati**: "Il tuo riscaldamento (questo mese)" con calore prodotto, elettricità
|
||||||
usata, efficienza (COP riscaldamento / acqua calda); "I tuoi risparmi" con il
|
usata, efficienza (COP riscaldamento / acqua calda); "I tuoi risparmi" con il
|
||||||
risparmio totale del periodo, la CO₂ evitata e il risparmio Smart Tariff Control.
|
risparmio totale del periodo, la CO₂ evitata e il risparmio Smart Tariff Control.
|
||||||
3. **Impianto**: stato (connessione, modalità, vacanza, messaggi luminosi, ultima
|
3. **Impianto**: stato (connessione, modalità, assenza, notte, riscaldamento forzato,
|
||||||
lettura), accessori (termostato: zona, temperatura, umidità, segnale, batteria),
|
resistenza interna, temperature, zone, ultima lettura), accessori (termostato: zona,
|
||||||
versioni (piattaforma, connettività, controllo climatico, unità esterna, EEPROM,
|
temperatura, umidità, segnale, batteria, articolo), versioni (ID dispositivo,
|
||||||
dispositivo ID) ed errori.
|
piattaforma, connettività, controllo climatico, unità esterna, EEPROM) ed errori.
|
||||||
|
Le luci di firma (`signature_lights`, `led_pattern`) restano per ora solo in
|
||||||
|
`/summary`: la pagina non le mostra.
|
||||||
|
|
||||||
### Lavoro
|
### Lavoro
|
||||||
|
|
||||||
- **Bridge 0.4.0**: nuova rotta `/stats` (COP, risparmi, ottimizzazione, insight) e
|
- **Bridge 0.4.0**: nuova rotta `/stats` (COP, risparmi, ottimizzazione, insight) e
|
||||||
blocco `device` in `/summary` (id breve, versioni, termostato, connessione);
|
campi del dispositivo in `/summary` (`device_*`, `version_*`, `thermostat_*`,
|
||||||
cache breve lato bridge, perché sono chiamate al cloud più lente di `/state`.
|
`connected_via`, `timezone`); cache di 10 minuti lato bridge, perché sono quattro
|
||||||
- **App 0.5.0**: `MainPage` riordinata, nuove `DataPage.qml` e `InfoPage.qml`,
|
chiamate al cloud, più lente di `/state`.
|
||||||
nuove stringhe nei due cataloghi, anteprime rigenerate, test del nucleo estesi al
|
- **App 0.5.0**: `MainPage` riordinata, nuove `DataPage.qml` e `PlantPage.qml`
|
||||||
parsing dei nuovi campi, versione e README aggiornati.
|
(quest'ultima si è chiamata `InfoPage` nella prima stesura del piano), nuovo
|
||||||
|
componente `ValueRow.qml`, 86 stringhe nuove tradotte (170 in totale), anteprime
|
||||||
|
rigenerate (dati, impianto) in italiano e inglese, test del nucleo estesi al
|
||||||
|
parsing delle statistiche e alla formattazione di importi e mesi (61/61), versione,
|
||||||
|
README e `docs/PROTOCOL.md` aggiornati.
|
||||||
- Nessun comando nuovo all'impianto: tutto questo è **sola lettura**.
|
- Nessun comando nuovo all'impianto: tutto questo è **sola lettura**.
|
||||||
|
|||||||
+71
-2
@@ -16,7 +16,7 @@ Nessuna autenticazione: serve a distinguere "server irraggiungibile" da
|
|||||||
"token sbagliato".
|
"token sbagliato".
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{"ok": true, "version": "0.2.0"}
|
{"ok": true, "version": "0.4.0"}
|
||||||
```
|
```
|
||||||
|
|
||||||
## GET /summary
|
## GET /summary
|
||||||
@@ -54,11 +54,80 @@ Valori pronti per la dashboard.
|
|||||||
"zone2_mode": "PUMP_MODE_STATE_IDLE",
|
"zone2_mode": "PUMP_MODE_STATE_IDLE",
|
||||||
"zone2_cooling_setpoint": 0.0,
|
"zone2_cooling_setpoint": 0.0,
|
||||||
"errors_count": 0,
|
"errors_count": 0,
|
||||||
"pump_updated": "2026-10-09 18:52:17.199340"
|
"pump_updated": "2026-10-09 18:52:17.199340",
|
||||||
|
|
||||||
|
"device_id": "1f4b26",
|
||||||
|
"device_uuid": "1f4b26c4-1800-4b21-8ea2-236925a92aeb",
|
||||||
|
"version_platform": "6.10.0",
|
||||||
|
"version_connectivity": "3.30.1",
|
||||||
|
"version_climate_control": "3.9.12",
|
||||||
|
"version_outdoor_unit": "1.30.0",
|
||||||
|
"version_outdoor_eeprom": "0.114.0",
|
||||||
|
"connected_via": "Cloud",
|
||||||
|
"timezone": "Europe/Rome",
|
||||||
|
"thermostats_count": 1,
|
||||||
|
"thermostat_zone": 1,
|
||||||
|
"thermostat_article": "201884",
|
||||||
|
"thermostat_temperature": 22.8,
|
||||||
|
"thermostat_humidity": 73.3,
|
||||||
|
"thermostat_rssi": -79,
|
||||||
|
"thermostat_battery_low": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Il blocco del dispositivo serve alle pagine "Impianto" e "Accessori" dell'app:
|
||||||
|
`device_id` sono le prime 6 cifre dell'UUID (come le mostra l'app ufficiale),
|
||||||
|
`connected_via` è la via di connessione, le `version_*` sono le versioni del
|
||||||
|
software e i campi `thermostat_*` descrivono il termostato a parete (assenti se
|
||||||
|
l'impianto non ne ha: in quel caso `thermostats_count` è 0 e gli altri sono
|
||||||
|
`null`). Il termostato manda i decimali come interi (228 = 22,8 °C): la
|
||||||
|
conversione la fa il bridge, non l'app.
|
||||||
|
|
||||||
|
## GET /stats
|
||||||
|
|
||||||
|
I numeri che Aira calcola nel cloud: sono gli stessi della scheda "Dati"
|
||||||
|
dell'app ufficiale (verificati sullo stesso periodo). Il bridge li tiene in
|
||||||
|
cache per **10 minuti** (`ttl`), perché sono quattro chiamate e cambiano
|
||||||
|
lentamente.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"ok": true,
|
||||||
|
"stats": {
|
||||||
|
"period_days": 30,
|
||||||
|
"currency": "EUR",
|
||||||
|
"month": {
|
||||||
|
"label": "2026-10",
|
||||||
|
"heat_kwh": 70.8,
|
||||||
|
"energy_kwh": 29.3,
|
||||||
|
"cop_heating": null,
|
||||||
|
"cop_dhw": 4.42
|
||||||
|
},
|
||||||
|
"cop_monthly": [
|
||||||
|
{"month": "2026-09", "heating_cop": null, "dhw_cop": 4.42, "avg_outdoor": 21.8}
|
||||||
|
],
|
||||||
|
"insights": [
|
||||||
|
{"date": "2026-10-01", "energy_kwh": 29.3, "heat_kwh": 70.8}
|
||||||
|
],
|
||||||
|
"savings": {"amount": 21.78, "co2_kg": 38.1, "show": true, "points": 31},
|
||||||
|
"smart_tariff": {"amount": 2.71, "hours": 180},
|
||||||
|
"monthly_savings": [{"month": "2026-09", "amount": 3.52}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `month`: l'ultimo periodo con dati — calore prodotto (`heat_kwh`), elettricità
|
||||||
|
usata (`energy_kwh`) ed efficienza (COP) di acqua calda e riscaldamento.
|
||||||
|
**`null` significa "nessun dato"**: su un impianto recente il riscaldamento può
|
||||||
|
non averne ancora (mentre l'acqua calda sì). `label` è il mese `AAAA-MM`.
|
||||||
|
- `cop_monthly` e `monthly_savings`: le serie mese per mese, per il dettaglio.
|
||||||
|
- `savings`: risparmio in bolletta sugli ultimi `period_days` giorni (30), CO₂
|
||||||
|
evitata e numero di punti usati dal calcolo; `show` è il permesso di Aira a
|
||||||
|
mostrare il dato.
|
||||||
|
- `smart_tariff`: il risparmio del mese mobile dovuto allo Smart Tariff Control.
|
||||||
|
- Questa rotta è di **sola lettura**: non invia nessun comando all'impianto.
|
||||||
|
|
||||||
## GET /state
|
## GET /state
|
||||||
|
|
||||||
Stato completo e grezzo dal cloud (42 campi: curve climatiche per zona,
|
Stato completo e grezzo dal cloud (42 campi: curve climatiche per zona,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
<TS version="2.1" language="it_IT">
|
<TS version="2.1" language="it_IT">
|
||||||
<context>
|
<context>
|
||||||
<name>AiraJson</name>
|
<name>AiraJson</name>
|
||||||
@@ -91,7 +92,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../src/apiclient.cpp" line="125"/>
|
<location filename="../src/apiclient.cpp" line="125"/>
|
||||||
<source>Enter the bridge address</source>
|
<source>Enter the bridge address</source>
|
||||||
<translation>Inserisci l'indirizzo del bridge</translation>
|
<translation>Inserisci l'indirizzo del bridge</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/apiclient.cpp" line="141"/>
|
<location filename="../src/apiclient.cpp" line="141"/>
|
||||||
@@ -201,7 +202,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/CommandsPage.qml" line="92"/>
|
<location filename="../qml/pages/CommandsPage.qml" line="92"/>
|
||||||
<source>Night mode for one hour</source>
|
<source>Night mode for one hour</source>
|
||||||
<translation>Night mode per un'ora</translation>
|
<translation>Night mode per un'ora</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/CommandsPage.qml" line="97"/>
|
<location filename="../qml/pages/CommandsPage.qml" line="97"/>
|
||||||
@@ -266,7 +267,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/CommandsPage.qml" line="132"/>
|
<location filename="../qml/pages/CommandsPage.qml" line="132"/>
|
||||||
<source>Domestic hot water will stop being heated</source>
|
<source>Domestic hot water will stop being heated</source>
|
||||||
<translation>L'acqua calda smetterà di essere riscaldata</translation>
|
<translation>L'acqua calda smetterà di essere riscaldata</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/CommandsPage.qml" line="137"/>
|
<location filename="../qml/pages/CommandsPage.qml" line="137"/>
|
||||||
@@ -281,7 +282,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/CommandsPage.qml" line="154"/>
|
<location filename="../qml/pages/CommandsPage.qml" line="154"/>
|
||||||
<source>Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.</source>
|
<source>Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.</source>
|
||||||
<translation>I comandi passano dal bridge e possono richiedere qualche secondo. Dopo l'invio lo stato si aggiorna da solo.</translation>
|
<translation>I comandi passano dal bridge e possono richiedere qualche secondo. Dopo l'invio lo stato si aggiorna da solo.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -332,7 +333,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="106"/>
|
<location filename="../qml/pages/DataPage.qml" line="106"/>
|
||||||
<source>Numbers calculated by Aira in the cloud: the app only reads them from your own bridge.</source>
|
<source>Numbers calculated by Aira in the cloud: the app only reads them from your own bridge.</source>
|
||||||
<translation>Numeri calcolati da Aira nel cloud: l'app li legge soltanto dal tuo bridge.</translation>
|
<translation>Numeri calcolati da Aira nel cloud: l'app li legge soltanto dal tuo bridge.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="126"/>
|
<location filename="../qml/pages/DataPage.qml" line="126"/>
|
||||||
@@ -382,7 +383,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="170"/>
|
<location filename="../qml/pages/DataPage.qml" line="170"/>
|
||||||
<source>Efficiency (COP) is how much heat the pump delivers for each unit of electricity: higher is better.</source>
|
<source>Efficiency (COP) is how much heat the pump delivers for each unit of electricity: higher is better.</source>
|
||||||
<translation>L'efficienza (COP) è quanto calore la pompa produce per ogni unità di elettricità: più alta è, meglio è.</translation>
|
<translation>L'efficienza (COP) è quanto calore la pompa produce per ogni unità di elettricità: più alta è, meglio è.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="179"/>
|
<location filename="../qml/pages/DataPage.qml" line="179"/>
|
||||||
@@ -407,7 +408,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="193"/>
|
<location filename="../qml/pages/DataPage.qml" line="193"/>
|
||||||
<source>Not released into the air</source>
|
<source>Not released into the air</source>
|
||||||
<translation>Non immessa nell'aria</translation>
|
<translation>Non immessa nell'aria</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="199"/>
|
<location filename="../qml/pages/DataPage.qml" line="199"/>
|
||||||
@@ -417,7 +418,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="200"/>
|
<location filename="../qml/pages/DataPage.qml" line="200"/>
|
||||||
<source>Saving from heating when energy is cheaper</source>
|
<source>Saving from heating when energy is cheaper</source>
|
||||||
<translation>Risparmio scaldando quando l'energia costa meno</translation>
|
<translation>Risparmio scaldando quando l'energia costa meno</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/DataPage.qml" line="208"/>
|
<location filename="../qml/pages/DataPage.qml" line="208"/>
|
||||||
@@ -460,12 +461,12 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="87"/>
|
<location filename="../qml/pages/MainPage.qml" line="87"/>
|
||||||
<source>Attention: one error on the plant</source>
|
<source>Attention: one error on the plant</source>
|
||||||
<translation>Attenzione: un errore sull'impianto</translation>
|
<translation>Attenzione: un errore sull'impianto</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="88"/>
|
<location filename="../qml/pages/MainPage.qml" line="88"/>
|
||||||
<source>Attention: %1 errors on the plant</source>
|
<source>Attention: %1 errors on the plant</source>
|
||||||
<translation>Attenzione: %1 errori sull'impianto</translation>
|
<translation>Attenzione: %1 errori sull'impianto</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="90"/>
|
<location filename="../qml/pages/MainPage.qml" line="90"/>
|
||||||
@@ -485,7 +486,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="96"/>
|
<location filename="../qml/pages/MainPage.qml" line="96"/>
|
||||||
<source>The heat pump is heating the hot water.</source>
|
<source>The heat pump is heating the hot water.</source>
|
||||||
<translation>La pompa di calore sta scaldando l'acqua calda.</translation>
|
<translation>La pompa di calore sta scaldando l'acqua calda.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="98"/>
|
<location filename="../qml/pages/MainPage.qml" line="98"/>
|
||||||
@@ -510,7 +511,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="190"/>
|
<location filename="../qml/pages/MainPage.qml" line="190"/>
|
||||||
<source>Bridge not configured. Open the settings and enter the server address and the token.</source>
|
<source>Bridge not configured. Open the settings and enter the server address and the token.</source>
|
||||||
<translation>Bridge non configurato. Apri le impostazioni e inserisci l'indirizzo del server e il token.</translation>
|
<translation>Bridge non configurato. Apri le impostazioni e inserisci l'indirizzo del server e il token.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="213"/>
|
<location filename="../qml/pages/MainPage.qml" line="213"/>
|
||||||
@@ -689,7 +690,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/MainPage.qml" line="487"/>
|
<location filename="../qml/pages/MainPage.qml" line="487"/>
|
||||||
<source>Commands are sent to the bridge and from there to the plant: they may take a few seconds.</source>
|
<source>Commands are sent to the bridge and from there to the plant: they may take a few seconds.</source>
|
||||||
<translation>I comandi vengono inviati al bridge e da lì all'impianto: possono richiedere qualche secondo.</translation>
|
<translation>I comandi vengono inviati al bridge e da lì all'impianto: possono richiedere qualche secondo.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -877,7 +878,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/PlantPage.qml" line="168"/>
|
<location filename="../qml/pages/PlantPage.qml" line="168"/>
|
||||||
<source>No errors reported by the plant.</source>
|
<source>No errors reported by the plant.</source>
|
||||||
<translation>Nessun errore segnalato dall'impianto.</translation>
|
<translation>Nessun errore segnalato dall'impianto.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/PlantPage.qml" line="175"/>
|
<location filename="../qml/pages/PlantPage.qml" line="175"/>
|
||||||
@@ -912,7 +913,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/SettingsPage.qml" line="85"/>
|
<location filename="../qml/pages/SettingsPage.qml" line="85"/>
|
||||||
<source>Changing the language reloads the app.</source>
|
<source>Changing the language reloads the app.</source>
|
||||||
<translation>Cambiando la lingua l'app si ricarica.</translation>
|
<translation>Cambiando la lingua l'app si ricarica.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/SettingsPage.qml" line="92"/>
|
<location filename="../qml/pages/SettingsPage.qml" line="92"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user