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
+
+
*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
+
+
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);