diff --git a/README.it.md b/README.it.md index ee4742c..484da2f 100644 --- a/README.it.md +++ b/README.it.md @@ -1,5 +1,7 @@ # harbour-aira — versione italiana +icona + *English version: [README.md](README.md)* --- @@ -157,8 +159,8 @@ python3 tests/ui_contract_check.py http://192.168.3.21:8790 ## Stato - **85/85** verifiche del nucleo, compilazione senza warning (comprese le frasi - di stato, breve ed estesa: quello che la Home dice dell'impianto è verificato - senza telefono) + di stato, breve ed estesa, e la severita' degli allarmi: quello che la Home + dice dell'impianto è verificato senza telefono) - **48/48** verifiche offline del bridge (`bridge/test_bridge_commands.py`), comprese le conversioni Wh→kWh e degli importi delle statistiche - **191/191** stringhe tradotte nel catalogo italiano: il test carica il `.qm` @@ -225,6 +227,7 @@ docs/PIANO.md piano di progetto e scelte docs/PROTOCOL.md API del bridge docs/UX-STUDIO.md studio UX e cosa è cambiato nella 0.6.0 docs/ux/ schemi dello studio UX +docs/icona/ proposte di icona e confronto prima/dopo translations/ harbour-aira-it.ts (l'inglese è la lingua sorgente) docs/anteprima/ anteprime di layout in inglese (in italiano: it/) ``` diff --git a/README.md b/README.md index ef4ea33..611a5f2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # harbour-aira +icon + Native Sailfish OS app to monitor and control an **Aira Home** heat pump: plant status, domestic hot water, and the house target temperature per zone. @@ -142,9 +144,9 @@ python3 tests/ui_contract_check.py http://192.168.3.21:8790 Verified so far: -- **79/79** core checks (`tests/core_test.cpp`), compiled with no warnings — - including the one-line and extended status sentences, so what the home says - about the plant is verified without a phone +- **85/85** core checks (`tests/core_test.cpp`), compiled with no warnings — + including the one-line and extended status sentences and the alarm severity, + so what the home says about the plant is verified without a phone - **48/48** bridge checks, offline (`bridge/test_bridge_commands.py`) — including that a zone command always carries every zone, that absurd values are refused (40 °C, zone 3, text), and the Wh→kWh / money conversions of the @@ -235,6 +237,7 @@ docs/PIANO.md project plan and decisions (Italian) docs/PROTOCOL.md bridge API docs/UX-STUDIO.md UX review and what changed in 0.6.0 (Italian) docs/ux/ UX study wireframes +docs/icona/ icon proposals and the before/after comparison docs/anteprima/ layout previews (English; docs/anteprima/it/ Italian) ``` diff --git a/docs/icona/confronto.png b/docs/icona/confronto.png new file mode 100644 index 0000000..f9eb77a Binary files /dev/null and b/docs/icona/confronto.png differ diff --git a/icons/108x108/harbour-aira.png b/icons/108x108/harbour-aira.png index 5605de3..b281f04 100644 Binary files a/icons/108x108/harbour-aira.png and b/icons/108x108/harbour-aira.png differ diff --git a/icons/128x128/harbour-aira.png b/icons/128x128/harbour-aira.png index 53cf86b..82dcd77 100644 Binary files a/icons/128x128/harbour-aira.png and b/icons/128x128/harbour-aira.png differ diff --git a/icons/172x172/harbour-aira.png b/icons/172x172/harbour-aira.png index 587b6ab..80974d3 100644 Binary files a/icons/172x172/harbour-aira.png and b/icons/172x172/harbour-aira.png differ diff --git a/icons/86x86/harbour-aira.png b/icons/86x86/harbour-aira.png index 9e8a81f..f54470a 100644 Binary files a/icons/86x86/harbour-aira.png and b/icons/86x86/harbour-aira.png differ diff --git a/rpm/harbour-aira.spec b/rpm/harbour-aira.spec index 75a9c50..bf13fd9 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.2 +Version: 0.6.3 Release: 1 Group: Qt/Qt License: MIT @@ -37,6 +37,10 @@ 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.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 + misure (86/108/128/172); disegno originale, nessun logo di terzi * Sat Oct 10 2026 Carlo - 0.6.2-1 - pallino di stato: rosso solo per un allarme che ferma la macchina (o di severita' CRITICAL/ERROR); un avviso ora e' ambra. Prima qualunque voce diff --git a/scripts/make_icons.py b/scripts/make_icons.py index 32947d6..ee6ed53 100644 --- a/scripts/make_icons.py +++ b/scripts/make_icons.py @@ -1,20 +1,25 @@ #!/usr/bin/env python3 """Genera le icone di harbour-aira (86/108/128/172 px) in icons//. -Disegno originale (nessun logo di terzi): sfondo blu sfumato, goccia bianca e -un punto caldo arancione — acqua calda + pompa di calore. +Disegno scelto: **casa con l'onda calda dentro** — la proposta A di +scripts/icon_proposals.py, dove restano le altre direzioni provate. E' un +disegno originale: nessun logo di terzi, visto che il permesso per nome e logo +Aira non e' ancora arrivato. + Uso: python3 scripts/make_icons.py """ -from PIL import Image, ImageDraw - +import math import pathlib +from PIL import Image, ImageDraw + SIZES = [86, 108, 128, 172] -BASE = 172 # si disegna grande e si ridimensiona: bordi puliti a ogni taglia +BASE = 344 # si disegna grande e si ridimensiona: bordi puliti a ogni taglia TOP = (12, 62, 130) # blu profondo BOTTOM = (24, 148, 190) # azzurro WARM = (255, 138, 46) # arancione +WHITE = (255, 255, 255, 240) def rounded_mask(size, radius): @@ -32,29 +37,29 @@ def gradient(size): return img.resize((size, size)) +def onda(d, x0, x1, y, ampiezza, spessore, fill, creste=2): + """L'onda calda: due creste dentro il corpo della casa.""" + punti = [] + passi = 120 + for i in range(passi + 1): + t = i / passi + x = x0 + (x1 - x0) * t + punti.append((x, y + ampiezza * math.sin(2 * math.pi * creste * t))) + d.line(punti, fill=fill, width=int(spessore), joint="curve") + + def draw_icon(size): img = gradient(size).convert("RGBA") d = ImageDraw.Draw(img) - # goccia: cerchio + triangolo verso l'alto - cx = size * 0.5 - cy = size * 0.60 - r = size * 0.19 - d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=(255, 255, 255, 235)) - d.polygon([(cx, cy - 2.35 * r), (cx - r * 0.98, cy + r * 0.10), (cx + r * 0.98, cy + r * 0.10)], - fill=(255, 255, 255, 235)) - # ricentra la goccia: il triangolo allunga verso l'alto - shift = -size * 0.05 - img = img.transform(img.size, Image.AFFINE, (1, 0, 0, 0, 1, shift)) - - d = ImageDraw.Draw(img) - # punto caldo in basso a destra, dentro la goccia - wr = size * 0.085 - wx, wy = cx + r * 0.10, cy + r * 0.30 - for i in range(int(wr), 0, -1): - a = int(255 * (1 - i / wr) + 90) - d.ellipse([wx - i, wy - i, wx + i, wy + i], fill=WARM + (a,)) + # tetto e corpo della casa + d.polygon([(size * 0.16, size * 0.50), (size * 0.50, size * 0.24), + (size * 0.84, size * 0.50)], fill=WHITE) + d.rectangle([size * 0.24, size * 0.50, size * 0.76, size * 0.78], fill=WHITE) + # onda calda dentro il corpo: sta sotto il tetto, altrimenti a 86 px si fonde + onda(d, size * 0.26, size * 0.74, size * 0.665, size * 0.040, size * 0.078, + WARM + (255,), creste=2) return img diff --git a/src/main.cpp b/src/main.cpp index b778ff6..c2f2d58 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.1")); + app->setApplicationVersion(QStringLiteral("0.6.3")); 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.1 build" << __DATE__ << __TIME__; + qDebug() << "harbour-aira v0.6.3 build" << __DATE__ << __TIME__; view->rootContext()->setContextProperty(QStringLiteral("appSettings"), &settings); view->rootContext()->setContextProperty(QStringLiteral("api"), &api);