0.6.5: sulla copertina l'acqua si chiama Acqua calda come in Home; attuale piu' grande, obiettivo attaccato
This commit is contained in:
+1
-1
@@ -41,7 +41,7 @@ e ripiega sull'inglese; la si può scegliere anche nelle impostazioni dell'app.
|
|||||||
tocco, più i pulsanti per quello che uno stato non ce l'ha: ciclo legionella e
|
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
|
night mode per un'ora. Gli interruttori seguono l'impianto, non lo anticipano
|
||||||
- **Copertina** con casa e acqua calda, ognuna con il valore che l'impianto sta
|
- **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
|
tenendo adesso e il suo obiettivo ("22,9/19,0 °C"), più il pallino di stato
|
||||||
come nella Home
|
come nella Home
|
||||||
- Indirizzo e token del bridge stanno nelle impostazioni dell'app (QSettings),
|
- Indirizzo e token del bridge stanno nelle impostazioni dell'app (QSettings),
|
||||||
mai nel binario
|
mai nel binario
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ status, domestic hot water, and the house target temperature per zone.
|
|||||||
the buttons for what has no state: legionella cycle and night mode for one
|
the buttons for what has no state: legionella cycle and night mode for one
|
||||||
hour. The switches follow the plant — they never anticipate it
|
hour. The switches follow the plant — they never anticipate it
|
||||||
- **Cover page** showing the house and the hot water, each with the value the
|
- **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
|
plant is keeping right now and its target ("22.9/19.0 °C"), plus a status dot
|
||||||
that matches the home screen
|
that matches the home screen
|
||||||
- Address and bridge token live in the app settings (QSettings), never in the
|
- Address and bridge token live in the app settings (QSettings), never in the
|
||||||
binary
|
binary
|
||||||
|
|||||||
+5
-4
@@ -328,10 +328,11 @@ logo Aira è ancora in sospeso.
|
|||||||
**0.6.4 — la copertina.** Due righe con l'etichetta davanti, "Casa" e "Acqua",
|
**0.6.4 — la copertina.** Due righe con l'etichetta davanti, "Casa" e "Acqua",
|
||||||
ognuna con temperatura attuale / impostata. Le frasi lunghe di prima ("ACS
|
ognuna con temperatura attuale / impostata. Le frasi lunghe di prima ("ACS
|
||||||
53,4 °C · obiettivo 55 °C") sulla cover, che è stretta, venivano tagliate a metà:
|
53,4 °C · obiettivo 55 °C") sulla cover, che è stretta, venivano tagliate a metà:
|
||||||
il numero vero spariva proprio dove lo si guarda di sfuggita. Per stare nella
|
il numero vero spariva proprio dove lo si guarda di sfuggita. L'acqua si chiama
|
||||||
colonna stretta dell'etichetta, sulla cover l'acqua si chiama "Acqua"; in Home
|
"Acqua calda" anche qui, come in Home: per stare nella colonna stretta
|
||||||
resta "Acqua calda".
|
dell'etichetta il valore attuale è più grande e l'obiettivo più piccolo e
|
||||||
|
attaccato ("51,5/55,0 °C").
|
||||||
|
|
||||||
**Stato attuale (0.6.4).** 85/85 verifiche del nucleo, 48/48 del bridge,
|
**Stato attuale (0.6.5).** 85/85 verifiche del nucleo, 48/48 del bridge,
|
||||||
191/191 stringhe tradotte, `qmllint` pulito, contratto UI↔bridge rispettato.
|
191/191 stringhe tradotte, `qmllint` pulito, contratto UI↔bridge rispettato.
|
||||||
Nessun comando è stato inviato all'impianto: tutto quanto sopra è a sola lettura.
|
Nessun comando è stato inviato all'impianto: tutto quanto sopra è a sola lettura.
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
+57
-24
@@ -4,10 +4,12 @@ import Sailfish.Silica 1.0
|
|||||||
// Copertina: legge api.summary (context property C++), quindi non dipende
|
// Copertina: legge api.summary (context property C++), quindi non dipende
|
||||||
// dallo scope delle property della pagina principale.
|
// dallo scope delle property della pagina principale.
|
||||||
//
|
//
|
||||||
// Due righe con l'etichetta davanti: "attuale / impostata" per la casa e per
|
// Due righe con l'etichetta davanti — "Casa" e "Acqua calda" — ognuna con il
|
||||||
// l'acqua. Prima erano frasi lunghe ("casa · obiettivo 19,0 °C", "ACS 53,4 °C ·
|
// valore attuale e l'obiettivo. L'etichetta dell'acqua e' lunga e la cover e'
|
||||||
// obiettivo 55 °C") e sulla cover, che e' stretta, venivano tagliate a meta':
|
// stretta: percio' il valore attuale sta piu' grande e l'obiettivo piu' piccolo
|
||||||
// il numero vero spariva proprio dove serve di sfuggita.
|
// e attaccato ("51,5/55,0 °C"), invece di due numeri della stessa taglia che
|
||||||
|
// costringerebbero a tagliare. Prima erano frasi lunghe ("ACS 53,4 °C ·
|
||||||
|
// obiettivo 55 °C") e il numero vero spariva a meta' riga.
|
||||||
CoverBackground {
|
CoverBackground {
|
||||||
id: cover
|
id: cover
|
||||||
|
|
||||||
@@ -16,9 +18,10 @@ CoverBackground {
|
|||||||
return api.formatValue(v)
|
return api.formatValue(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// "22,9 / 19,0 °C": attuale e impostata, con l'unita' una volta sola.
|
// "/19,0 °C": l'obiettivo attaccato al valore attuale. Niente spazio dopo la
|
||||||
function coppia(attuale, impostata) {
|
// barra: con l'etichetta lunga e' quello che tiene la riga dentro la cover.
|
||||||
return cover.t(attuale) + " / " + cover.t(impostata) + " °C"
|
function obiettivo(key) {
|
||||||
|
return "/" + cover.t(key) + " °C"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Colore del pallino: gli stessi criteri della Home (vedi MainPage.qml).
|
// Colore del pallino: gli stessi criteri della Home (vedi MainPage.qml).
|
||||||
@@ -66,7 +69,9 @@ CoverBackground {
|
|||||||
width: parent.width - 2 * Theme.paddingMedium
|
width: parent.width - 2 * Theme.paddingMedium
|
||||||
spacing: Theme.paddingMedium
|
spacing: Theme.paddingMedium
|
||||||
|
|
||||||
|
// ---- casa ---------------------------------------------------------- //
|
||||||
Row {
|
Row {
|
||||||
|
id: rigaCasa
|
||||||
width: parent.width
|
width: parent.width
|
||||||
spacing: Theme.paddingSmall
|
spacing: Theme.paddingSmall
|
||||||
|
|
||||||
@@ -74,45 +79,73 @@ CoverBackground {
|
|||||||
text: qsTr("House")
|
text: qsTr("House")
|
||||||
color: Theme.secondaryColor
|
color: Theme.secondaryColor
|
||||||
font.pixelSize: Theme.fontSizeExtraSmall
|
font.pixelSize: Theme.fontSizeExtraSmall
|
||||||
width: parent.width * 0.32
|
width: rigaCasa.width * 0.42
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
|
width: rigaCasa.width * 0.58 - rigaCasa.spacing
|
||||||
|
spacing: 0
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: casaOra
|
||||||
|
// Spento quando i numeri sono vecchi: non deve sembrare fresco.
|
||||||
|
text: cover.t("zone1_temperature")
|
||||||
|
color: api.stale ? Theme.secondaryColor : Theme.primaryColor
|
||||||
|
font.pixelSize: Theme.fontSizeSmall
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: cover.obiettivo("zone1_setpoint")
|
||||||
|
color: Theme.secondaryColor
|
||||||
|
font.pixelSize: Theme.fontSizeExtraSmall
|
||||||
|
width: parent.width - casaOra.width
|
||||||
|
elide: Text.ElideRight
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- acqua calda --------------------------------------------------- //
|
||||||
|
Row {
|
||||||
|
id: rigaAcqua
|
||||||
width: parent.width
|
width: parent.width
|
||||||
spacing: Theme.paddingSmall
|
spacing: Theme.paddingSmall
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("Water")
|
text: qsTr("Hot water")
|
||||||
color: Theme.secondaryColor
|
color: Theme.secondaryColor
|
||||||
font.pixelSize: Theme.fontSizeExtraSmall
|
font.pixelSize: Theme.fontSizeExtraSmall
|
||||||
width: parent.width * 0.32
|
width: rigaAcqua.width * 0.42
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
width: rigaAcqua.width * 0.58 - rigaAcqua.spacing
|
||||||
|
spacing: 0
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
text: cover.coppia("dhw_current", "dhw_target")
|
id: acquaOra
|
||||||
|
text: cover.t("dhw_current")
|
||||||
color: api.stale ? Theme.secondaryColor : Theme.primaryColor
|
color: api.stale ? Theme.secondaryColor : Theme.primaryColor
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
font.pixelSize: Theme.fontSizeSmall
|
||||||
font.bold: true
|
font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: cover.obiettivo("dhw_target")
|
||||||
|
color: Theme.secondaryColor
|
||||||
|
font.pixelSize: Theme.fontSizeExtraSmall
|
||||||
|
width: parent.width - acquaOra.width
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width - parent.width * 0.32 - parent.spacing
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Name: harbour-aira
|
Name: harbour-aira
|
||||||
Summary: Control your Aira heat pump through a local bridge
|
Summary: Control your Aira heat pump through a local bridge
|
||||||
Version: 0.6.4
|
Version: 0.6.5
|
||||||
Release: 1
|
Release: 1
|
||||||
Group: Qt/Qt
|
Group: Qt/Qt
|
||||||
License: MIT
|
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.
|
no personal data is stored in the binary.
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.5-1
|
||||||
|
- copertina: l'acqua si chiama "Acqua calda" come in Home (era "Acqua"). Con
|
||||||
|
l'etichetta piu' lunga il valore attuale sta piu' grande e l'obiettivo piu'
|
||||||
|
piccolo e attaccato ("51,5/55,0 °C"): la riga resta dentro la cover, che e'
|
||||||
|
stretta, e il numero attuale non si taglia
|
||||||
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.4-1
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.4-1
|
||||||
- copertina: due righe con l'etichetta davanti, "Casa" e "Acqua", ognuna con
|
- copertina: due righe con l'etichetta davanti, "Casa" e "Acqua", ognuna con
|
||||||
temperatura attuale / impostata ("22,9 / 19,0 °C"). Prima erano frasi lunghe
|
temperatura attuale / impostata ("22,9 / 19,0 °C"). Prima erano frasi lunghe
|
||||||
|
|||||||
@@ -371,7 +371,7 @@ TEXTS["en"].update({
|
|||||||
"save_and_test": "Save and test",
|
"save_and_test": "Save and test",
|
||||||
"cover_outdoor": "outside",
|
"cover_outdoor": "outside",
|
||||||
"cover_house": "House",
|
"cover_house": "House",
|
||||||
"cover_water": "Water",
|
"cover_hot_water": "Hot water",
|
||||||
})
|
})
|
||||||
|
|
||||||
TEXTS["it"].update({
|
TEXTS["it"].update({
|
||||||
@@ -414,7 +414,7 @@ TEXTS["it"].update({
|
|||||||
"cover_outdoor": "esterna",
|
"cover_outdoor": "esterna",
|
||||||
"night_one_hour": "Modalità notte per un'ora",
|
"night_one_hour": "Modalità notte per un'ora",
|
||||||
"cover_house": "Casa",
|
"cover_house": "Casa",
|
||||||
"cover_water": "Acqua",
|
"cover_hot_water": "Acqua calda",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -566,12 +566,15 @@ def cover_screen() -> Image.Image:
|
|||||||
d.line([(card[0] + 34, card[1] + 100), (card[2] - 34, card[1] + 100)],
|
d.line([(card[0] + 34, card[1] + 100), (card[2] - 34, card[1] + 100)],
|
||||||
fill=BTN_EDGE, width=2)
|
fill=BTN_EDGE, width=2)
|
||||||
y = card[1] + 150
|
y = card[1] + 150
|
||||||
# due righe: etichetta a sinistra, "attuale / impostata" a destra
|
# due righe: etichetta a sinistra, poi l'attuale piu' grande e l'obiettivo
|
||||||
for lab, val in ((T("cover_house"), dec(22.9) + " / " + dec(19.0) + " °C"),
|
# piu' piccolo attaccato — come nella copertina vera
|
||||||
(T("cover_water"), dec(51.5) + " / " + dec(55.0) + " °C")):
|
colonna = 34 + int((card[2] - card[0] - 68) * 0.42)
|
||||||
|
for lab, ora, obiettivo in ((T("cover_house"), dec(22.9), dec(19.0)),
|
||||||
|
(T("cover_hot_water"), dec(51.5), dec(55.0))):
|
||||||
d.text((card[0] + 34, y + 10), lab, font=font(22), fill=SECONDARY)
|
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[0] + colonna, y), ora, font=font(30, bold=True), fill=PRIMARY)
|
||||||
d.text((card[2] - 34 - vw, y), val, font=font(30, bold=True), fill=PRIMARY)
|
d.text((card[0] + colonna + d.textlength(ora, font=font(30, bold=True)), y + 4),
|
||||||
|
"/" + obiettivo + " °C", font=font(24), fill=SECONDARY)
|
||||||
y += 72
|
y += 72
|
||||||
d.text((card[0] + 34, card[3] - 62),
|
d.text((card[0] + 34, card[3] - 62),
|
||||||
T("cover_outdoor") + " " + dec(18.0) + " °C", font=font(22), fill=SECONDARY)
|
T("cover_outdoor") + " " + dec(18.0) + " °C", font=font(22), fill=SECONDARY)
|
||||||
|
|||||||
+2
-2
@@ -21,7 +21,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
|
|||||||
|
|
||||||
app->setOrganizationName(QStringLiteral("harbour"));
|
app->setOrganizationName(QStringLiteral("harbour"));
|
||||||
app->setApplicationName(QStringLiteral("aira"));
|
app->setApplicationName(QStringLiteral("aira"));
|
||||||
app->setApplicationVersion(QStringLiteral("0.6.4"));
|
app->setApplicationVersion(QStringLiteral("0.6.5"));
|
||||||
|
|
||||||
Settings settings;
|
Settings settings;
|
||||||
ApiClient api(&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
|
// Prima riga del log: dice subito se il device sta girando la build nuova
|
||||||
// o una stale (trappola nota del build engine).
|
// o una stale (trappola nota del build engine).
|
||||||
qDebug() << "harbour-aira v0.6.4 build" << __DATE__ << __TIME__;
|
qDebug() << "harbour-aira v0.6.5 build" << __DATE__ << __TIME__;
|
||||||
|
|
||||||
view->rootContext()->setContextProperty(QStringLiteral("appSettings"), &settings);
|
view->rootContext()->setContextProperty(QStringLiteral("appSettings"), &settings);
|
||||||
view->rootContext()->setContextProperty(QStringLiteral("api"), &api);
|
view->rootContext()->setContextProperty(QStringLiteral("api"), &api);
|
||||||
|
|||||||
@@ -337,22 +337,22 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>CoverPage</name>
|
<name>CoverPage</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/cover/CoverPage.qml" line="74"/>
|
<location filename="../qml/cover/CoverPage.qml" line="79"/>
|
||||||
<source>House</source>
|
<source>House</source>
|
||||||
<translation>Casa</translation>
|
<translation>Casa</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/cover/CoverPage.qml" line="98"/>
|
<location filename="../qml/cover/CoverPage.qml" line="118"/>
|
||||||
<source>Water</source>
|
<source>Hot water</source>
|
||||||
<translation>Acqua</translation>
|
<translation>Acqua calda</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/cover/CoverPage.qml" line="123"/>
|
<location filename="../qml/cover/CoverPage.qml" line="156"/>
|
||||||
<source>Not updated · last %1</source>
|
<source>Not updated · last %1</source>
|
||||||
<translation>Non aggiornato · ultimo %1</translation>
|
<translation>Non aggiornato · ultimo %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/cover/CoverPage.qml" line="124"/>
|
<location filename="../qml/cover/CoverPage.qml" line="157"/>
|
||||||
<source>outside %1 °C</source>
|
<source>outside %1 °C</source>
|
||||||
<translation>esterna %1 °C</translation>
|
<translation>esterna %1 °C</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|||||||
Reference in New Issue
Block a user