diff --git a/README.it.md b/README.it.md index 484da2f..66cd3a0 100644 --- a/README.it.md +++ b/README.it.md @@ -40,7 +40,9 @@ e ripiega sull'inglese; la si può scegliere anche nelle impostazioni dell'app. riscaldamento, acqua calda attiva) che mostrano lo stato e lo cambiano in un tocco, più i pulsanti per quello che uno stato non ce l'ha: ciclo legionella e night mode per un'ora. Gli interruttori seguono l'impianto, non lo anticipano -- **Copertina** con la temperatura della casa +- **Copertina** con casa e acqua calda, ognuna con il valore che l'impianto sta + tenendo adesso e il suo obiettivo ("22,9 / 19,0 °C"), più il pallino di stato + come nella Home - Indirizzo e token del bridge stanno nelle impostazioni dell'app (QSettings), mai nel binario diff --git a/README.md b/README.md index 611a5f2..ababce6 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,9 @@ status, domestic hot water, and the house target temperature per zone. water active) that show the state of the plant and change it in one tap, plus the buttons for what has no state: legionella cycle and night mode for one hour. The switches follow the plant — they never anticipate it -- **Cover page** showing the house temperature +- **Cover page** showing the house and the hot water, each with the value the + plant is keeping right now and its target ("22.9 / 19.0 °C"), plus a status dot + that matches the home screen - Address and bridge token live in the app settings (QSettings), never in the binary - **Languages: English and Italian.** The interface follows the phone language by diff --git a/docs/anteprima/copertina.png b/docs/anteprima/copertina.png index cab1415..0329987 100644 Binary files a/docs/anteprima/copertina.png and b/docs/anteprima/copertina.png differ diff --git a/docs/anteprima/it/copertina.png b/docs/anteprima/it/copertina.png index f74bbe9..9248542 100644 Binary files a/docs/anteprima/it/copertina.png and b/docs/anteprima/it/copertina.png differ diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml index 76f6e14..7b92285 100644 --- a/qml/cover/CoverPage.qml +++ b/qml/cover/CoverPage.qml @@ -3,6 +3,11 @@ import Sailfish.Silica 1.0 // Copertina: legge api.summary (context property C++), quindi non dipende // dallo scope delle property della pagina principale. +// +// Due righe con l'etichetta davanti: "attuale / impostata" per la casa e per +// l'acqua. Prima erano frasi lunghe ("casa · obiettivo 19,0 °C", "ACS 53,4 °C · +// obiettivo 55 °C") e sulla cover, che e' stretta, venivano tagliate a meta': +// il numero vero spariva proprio dove serve di sfuggita. CoverBackground { id: cover @@ -11,6 +16,11 @@ CoverBackground { return api.formatValue(v) } + // "22,9 / 19,0 °C": attuale e impostata, con l'unita' una volta sola. + function coppia(attuale, impostata) { + return cover.t(attuale) + " / " + cover.t(impostata) + " °C" + } + // Colore del pallino: gli stessi criteri della Home (vedi MainPage.qml). // Un dato vecchio e' ambra come un modo attivo: un dato vecchio non e' un // dato buono, e la copertina e' il posto dove si guarda di sfuggita. @@ -53,34 +63,54 @@ CoverBackground { Column { anchors.centerIn: parent - width: parent.width - 2 * Theme.paddingLarge - spacing: Theme.paddingSmall + width: parent.width - 2 * Theme.paddingMedium + spacing: Theme.paddingMedium - Label { + Row { width: parent.width - horizontalAlignment: Text.AlignHCenter - // Spenta quando i numeri sono vecchi: non deve sembrare fresca. - color: api.stale ? Theme.secondaryColor : Theme.primaryColor - text: cover.t("zone1_temperature") + " °C" - font.pixelSize: Theme.fontSizeHuge + spacing: Theme.paddingSmall + + Label { + text: qsTr("House") + color: Theme.secondaryColor + font.pixelSize: Theme.fontSizeExtraSmall + width: parent.width * 0.32 + anchors.verticalCenter: parent.verticalCenter + } + + Label { + text: cover.coppia("zone1_temperature", "zone1_setpoint") + // Spenta quando i numeri sono vecchi: non deve sembrare fresca. + color: api.stale ? Theme.secondaryColor : Theme.primaryColor + font.pixelSize: Theme.fontSizeSmall + font.bold: true + elide: Text.ElideRight + width: parent.width - parent.width * 0.32 - parent.spacing + anchors.verticalCenter: parent.verticalCenter + } } - Label { + Row { width: parent.width - horizontalAlignment: Text.AlignHCenter - text: qsTr("house · target %1 °C").arg(cover.t("zone1_setpoint")) - color: Theme.secondaryColor - font.pixelSize: Theme.fontSizeExtraSmall - truncationMode: TruncationMode.Fade - } + spacing: Theme.paddingSmall - Label { - width: parent.width - horizontalAlignment: Text.AlignHCenter - text: qsTr("DHW %1 °C · target %2 °C").arg(cover.t("dhw_current")).arg(cover.t("dhw_target")) - color: Theme.secondaryColor - font.pixelSize: Theme.fontSizeExtraSmall - truncationMode: TruncationMode.Fade + Label { + text: qsTr("Water") + color: Theme.secondaryColor + font.pixelSize: Theme.fontSizeExtraSmall + width: parent.width * 0.32 + anchors.verticalCenter: parent.verticalCenter + } + + Label { + text: cover.coppia("dhw_current", "dhw_target") + color: api.stale ? Theme.secondaryColor : Theme.primaryColor + font.pixelSize: Theme.fontSizeSmall + font.bold: true + elide: Text.ElideRight + width: parent.width - parent.width * 0.32 - parent.spacing + anchors.verticalCenter: parent.verticalCenter + } } } diff --git a/rpm/harbour-aira.spec b/rpm/harbour-aira.spec index bf13fd9..c895cad 100644 --- a/rpm/harbour-aira.spec +++ b/rpm/harbour-aira.spec @@ -1,6 +1,6 @@ Name: harbour-aira Summary: Control your Aira heat pump through a local bridge -Version: 0.6.3 +Version: 0.6.4 Release: 1 Group: Qt/Qt License: MIT @@ -37,6 +37,11 @@ Address and token of the bridge live in the app settings (AppConfigLocation); no personal data is stored in the binary. %changelog +* Sun Oct 11 2026 Carlo - 0.6.4-1 +- copertina: due righe con l'etichetta davanti, "Casa" e "Acqua", ognuna con + temperatura attuale / impostata ("22,9 / 19,0 °C"). Prima erano frasi lunghe + ("casa · obiettivo 19,0 °C", "ACS 53,4 °C · obiettivo 55 °C") che sulla cover, + stretta, venivano tagliate a meta' e il numero vero non si leggeva * Sun Oct 11 2026 Carlo - 0.6.3-1 - nuova icona: casa con l'onda calda dentro, scelta fra le quattro proposte in scripts/icon_proposals.py. Ridisegnata a 344 px e rigenerata alle quattro diff --git a/scripts/render_mockups.py b/scripts/render_mockups.py index f72c6ea..b6b35f3 100644 --- a/scripts/render_mockups.py +++ b/scripts/render_mockups.py @@ -370,6 +370,8 @@ TEXTS["en"].update({ "signature_lights": "Signature lights", "save_and_test": "Save and test", "cover_outdoor": "outside", + "cover_house": "House", + "cover_water": "Water", }) TEXTS["it"].update({ @@ -411,6 +413,8 @@ TEXTS["it"].update({ "save_and_test": "Salva e prova", "cover_outdoor": "esterna", "night_one_hour": "Modalità notte per un'ora", + "cover_house": "Casa", + "cover_water": "Acqua", }) @@ -561,19 +565,16 @@ def cover_screen() -> Image.Image: d.ellipse([card[2] - 56, card[1] + 48, card[2] - 32, card[1] + 72], fill=OK) d.line([(card[0] + 34, card[1] + 100), (card[2] - 34, card[1] + 100)], fill=BTN_EDGE, width=2) - y = card[1] + 132 - big = dec(23.0) + " °C" - d.text(((W - d.textlength(big, font=font(76, bold=True))) / 2, y), - big, font=font(76, bold=True), fill=PRIMARY) - y += 108 - for lab, val in ((T("cover_target"), dec(19.0) + " °C"), - (T("cover_acs"), dec(51.0) + " °C"), - (T("cover_outdoor"), dec(18.0) + " °C")): - d.text((card[0] + 34, y), lab, font=font(24), fill=SECONDARY) - vw = d.textlength(val, font=font(24)) - d.text((card[2] - 34 - vw, y), val, font=font(24), fill=PRIMARY) - y += 52 - d.text((card[0] + 34, card[3] - 60), T("cover_footer"), font=font(22), fill=SECONDARY) + y = card[1] + 150 + # due righe: etichetta a sinistra, "attuale / impostata" a destra + for lab, val in ((T("cover_house"), dec(22.9) + " / " + dec(19.0) + " °C"), + (T("cover_water"), dec(51.5) + " / " + dec(55.0) + " °C")): + d.text((card[0] + 34, y + 10), lab, font=font(22), fill=SECONDARY) + vw = d.textlength(val, font=font(30, bold=True)) + d.text((card[2] - 34 - vw, y), val, font=font(30, bold=True), fill=PRIMARY) + y += 72 + d.text((card[0] + 34, card[3] - 62), + T("cover_outdoor") + " " + dec(18.0) + " °C", font=font(22), fill=SECONDARY) return img diff --git a/src/main.cpp b/src/main.cpp index c2f2d58..fdd0367 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,7 +21,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) app->setOrganizationName(QStringLiteral("harbour")); app->setApplicationName(QStringLiteral("aira")); - app->setApplicationVersion(QStringLiteral("0.6.3")); + app->setApplicationVersion(QStringLiteral("0.6.4")); Settings settings; ApiClient api(&settings); @@ -36,7 +36,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) // Prima riga del log: dice subito se il device sta girando la build nuova // o una stale (trappola nota del build engine). - qDebug() << "harbour-aira v0.6.3 build" << __DATE__ << __TIME__; + qDebug() << "harbour-aira v0.6.4 build" << __DATE__ << __TIME__; view->rootContext()->setContextProperty(QStringLiteral("appSettings"), &settings); view->rootContext()->setContextProperty(QStringLiteral("api"), &api); diff --git a/translations/harbour-aira-it.ts b/translations/harbour-aira-it.ts index c616f36..e45cf73 100644 --- a/translations/harbour-aira-it.ts +++ b/translations/harbour-aira-it.ts @@ -64,87 +64,87 @@ errore HTTP %1 - + No data Nessun dato - + Attention: one error Attenzione: un errore - + Attention: %1 errors Attenzione: %1 errori - + Away mode Assenza - + Night mode Modalità notte - + Heating at full power Riscaldamento al massimo - + Heating the hot water Sta scaldando l'acqua - + Working In funzione - + Everything is fine Tutto regolare - + Attention: one error on the plant Attenzione: un errore sull'impianto - + Attention: %1 errors on the plant Attenzione: %1 errori sull'impianto - + Away mode: the house is saving energy. Modalità assenza: la casa sta risparmiando. - + Night mode is on. Modalità notte attiva. - + Boost: the house is heating at full power. Boost: la casa sta scaldando a pieno regime. - + The heat pump is heating the hot water. La pompa di calore sta scaldando l'acqua calda. - + The heat pump is working. La pompa di calore sta lavorando. - + Relax: the heat pump is running smoothly. Relax: la pompa di calore funziona regolarmente. @@ -337,22 +337,22 @@ CoverPage - - house · target %1 °C - casa · obiettivo %1 °C + + House + Casa - - DHW %1 °C · target %2 °C - ACS %1 °C · obiettivo %2 °C + + Water + Acqua - + Not updated · last %1 Non aggiornato · ultimo %1 - + outside %1 °C esterna %1 °C @@ -488,109 +488,109 @@ MainPage - + No data yet Nessun dato - + Not updated · last %1 Non aggiornato · ultimo %1 - + Updated at %1 Aggiornato alle %1 - + Refresh Aggiorna - - + + Settings Impostazioni - + House Casa - + target %1 °C obiettivo %1 °C - + Hot water Acqua calda - + Tap a value to adjust it Tocca un valore per regolarlo - + Quick actions Azioni rapide - + Boost Boost - + Back home Torna a casa - + Away mode off Assenza disattivata - + Away mode on Assenza attivata - + Commands Comandi - + Outside %1 °C · Thermostat %2 °C · Zones %3 Esterno %1 °C · Termostato %2 °C · Zone %3 - + Data Dati - + Bridge not configured. Open the settings and enter the server address and the token. Bridge non configurato. Apri le impostazioni e inserisci l'indirizzo del server e il token. - + Starting DHW boost Avvio del boost ACS - + Plant Impianto - + Away mode Assenza