La pagina Regolazioni aveva due tasti sempre attivi (avvia/ferma) che non dicevano cosa sta facendo l'impianto e potevano contraddire la Home. Ora un ActionButton solo, con testo e comando da api.boostActive — lo stesso dato della Home — piu' il tempo che resta quando il boost corre.
220 lines
12 KiB
RPMSpec
220 lines
12 KiB
RPMSpec
Name: harbour-aira
|
|
Summary: Control your Aira heat pump through a local bridge
|
|
Version: 0.7.7
|
|
Release: 1
|
|
Group: Qt/Qt
|
|
License: MIT
|
|
URL: https://git.hackatoniclife.com/kaneda/harbour-aira
|
|
Source0: %{name}-%{version}.tar.gz
|
|
Source1: %{name}.desktop
|
|
|
|
Requires: sailfishsilica-qt5 >= 0.10.9
|
|
BuildRequires: pkgconfig(sailfishapp) >= 1.0.2
|
|
BuildRequires: pkgconfig(Qt5Core)
|
|
BuildRequires: pkgconfig(Qt5Qml)
|
|
BuildRequires: pkgconfig(Qt5Quick)
|
|
BuildRequires: pkgconfig(Qt5Network)
|
|
BuildRequires: desktop-file-utils
|
|
# lupdate/lrelease: i .qm si compilano in build (CONFIG += sailfishapp_i18n).
|
|
BuildRequires: qt5-qttools-linguist
|
|
|
|
%global debug_package %{nil}
|
|
|
|
%description
|
|
Native Sailfish OS client for an Aira Home heat pump.
|
|
|
|
It does not talk to the Aira cloud directly: the cloud API is gRPC over HTTP/2
|
|
and Qt 5.6 has no HTTP/2. A small bridge on the user's server (Python,
|
|
pyairahome) keeps the credentials and exposes the plant as JSON over HTTP/1.1.
|
|
The app shows the current state, the energy data (heat produced, electricity
|
|
used, efficiency, savings) and sends the hot-water and heating commands.
|
|
|
|
The interface is in English and Italian: by default it follows the phone
|
|
language and falls back to English, and the language can also be picked in the
|
|
app settings.
|
|
|
|
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 <carlo@carlobaratto.it> - 0.7.7-1
|
|
- Regolazioni, acqua calda: un solo tasto del boost che cambia con lo stato
|
|
(avvia / ferma) invece di due sempre attivi, con il tempo che resta. Lo stato
|
|
e' quello della Home (api.boostActive): stesso dato, stessa verita'.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.6-1
|
|
- via il RemorseItem dai tasti rapidi: Silica se lo ri-parenta dentro la fila
|
|
dei tre tasti e ci disegna sopra il banner, coprendoli (succedeva premendo);
|
|
- la barra messaggi ha altezza fissa e una banda riservata sotto il contenuto,
|
|
cosi' non copre piu' niente e non sposta niente quando compare.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.5-1
|
|
- La Home manda le sue misure al bridge (rotta /layout): cosi' la disposizione
|
|
si corregge guardando i numeri veri del telefono, non deducendoli.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.4-1
|
|
- Impostazioni: la versione dell'app scritta a schermo. Servita subito: un
|
|
difetto della disposizione era l'app vecchia installata, non un bug.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.3-1
|
|
- copertina: l'obiettivo dopo una freccia ("22,5 -> 19,0 °C") invece della barra
|
|
vecchia; la riga esterna dice "Esterno" (era "esterna", minuscolo).
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.2-1
|
|
- il tasto del boost diventa "Stop" (con glifo di stop) mentre il boost e' in
|
|
corso, in Home e in copertina: prima un tocco dalla copertina ne faceva
|
|
ripartire un altro invece di fermarlo.
|
|
- il conto alla rovescia prende il posto del suggerimento nella stessa riga e
|
|
con la stessa misura del carattere: essendo piu' alto spingeva giu' i tasti
|
|
delle azioni rapide.
|
|
- tests/cover_action_check.py controlla tutti i comandi dell'azione (anche
|
|
condizionali) e tutte le icone citate.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.1-1
|
|
- i tre tasti delle azioni rapide dichiarano la loro altezza: in Silica il tasto
|
|
la piglia dal tema (Theme.itemSizeExtraSmall, ~56 px) e non dal contenuto,
|
|
quindi con icona E etichetta il testo (~110 px) usciva dalla scatola e la riga
|
|
di contorno finiva sopra le etichette (segnalato: "la riga sotto si disallinea
|
|
coprendo i pulsanti").
|
|
- il registro dell'avvio elenca posizione e altezza di ogni riga della Home.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.7.0-1
|
|
- assenza con le date: popup con inizio e fine (DatePickerDialog, componenti
|
|
verificati nella guida Silica dell'SDK). Il bridge manda inizio e fine come
|
|
orari veri, l'impianto tiene la casa a 15 °C e riprende il giorno scelto
|
|
come fine (per Carlo: il giorno prima del rientro).
|
|
- conto alla rovescia del boost da 30:00 a 00:00, in Home e in copertina: i
|
|
secondi vengono dalla fine del boost letta dall'impianto, l'app li fa scorrere.
|
|
- boost a mezz'ora (era un'ora): richiesta dell'utente.
|
|
- catalogo italiano rifatto: lupdate leggeva solo i C++ e marcava 151 voci dei
|
|
QML come obsolete. Ora si passano src e qml espliciti: 197 stringhe tradotte.
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.9-1
|
|
- copertina: azione rapida (P8 del piano). Sulla copertina compare l'icona del
|
|
boost: si avvia il boost dell'acqua calda senza aprire l'app. Una sola azione,
|
|
perche' la documentazione Silica dice che due si possono avere ma che lo stile
|
|
delle app di sistema ne mostra una. La riga dei dati non freschi si sposta
|
|
sopra l'area delle azioni (Cover.coverActionArea), cosi' l'icona non la copre.
|
|
Componente e nomi verificati nella guida dell'SDK (CoverActionList, CoverAction,
|
|
iconSource, onTriggered: attenzione, e' iconSource, non icon.source del Button)
|
|
- nuovo controllo statico tests/cover_action_check.py: elenco figlio diretto del
|
|
Cover, una sola azione, icona che esiste, comando presente nella tabella del
|
|
bridge (un id sbagliato sarebbe un 400 scoperto solo sul telefono)
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.8-1
|
|
- Home: le icone dei tasti rimpicciolite. Il pulsante Silica, se non si dice
|
|
altro, disegna l'icona a Theme.iconSizeMedium (64 px): in un tasto largo un
|
|
terzo di schermo restavano 41 px di testo e le etichette uscivano tagliate
|
|
("Boos", "Asse", "Altro" no). Ora l'icona e' Theme.iconSizeExtraSmall e i
|
|
glifi riempiono il loro riquadro. Etichette piu' corte dove non ci stavano
|
|
(Assenza/Torna/Altro, Away/Home/More): con i numeri veri misurati sullo
|
|
screenshot ognuna ci sta con margine. La pagina resta "Comandi impianto"
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.7-1
|
|
- Home: i tre tasti delle azioni rapide hanno un'icona (fiamma = boost, casa =
|
|
assenza, tre manopole = comandi). Il tema Sailfish non ha icone per questi
|
|
concetti (nell'elenco ufficiale non c'e' nessuna fiamma): sono disegnate con
|
|
Pillow in scripts/make_glyphs.py, PNG bianche su trasparente in qml/icons/
|
|
* Sun Oct 11 2026 Carlo <carlo@carlobaratto.it> - 0.6.6-1
|
|
- Home: toccare "Casa" o "Acqua calda" apre le regolazioni di quell'oggetto e
|
|
non piu' casa e acqua insieme; l'acqua porta con se' il boost, che e' suo.
|
|
Nuovo controllo statico (tests/qml_focus_check.py) su chi apre e chi mostra
|
|
* 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
|
|
- 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 <carlo@carlobaratto.it> - 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 <carlo@carlobaratto.it> - 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
|
|
nell'elenco errori accendeva il rosso, e un semplice avviso (compressore
|
|
limitato dalla temperatura esterna, caso reale del 10/10) sembrava un guasto.
|
|
Il bridge espone error_severity e alarm_stopping in /summary; l'esito ignoto
|
|
resta ambra, il rosso si accende solo su un guasto che sappiamo essere serio
|
|
* Sat Oct 10 2026 Carlo <carlo@carlobaratto.it> - 0.6.1-1
|
|
- correzione: la Home non si apriva ("Type MainPage unavailable", app senza
|
|
pagina iniziale). Causa: due assegnazioni di Component.onCompleted nello
|
|
stesso oggetto; in Qt 5.6 la pagina non si crea piu' e il messaggio non dice
|
|
quale sia il file. Ora un controllo automatico le intercetta in pochi
|
|
millisecondi (tests/qml_check_bindings.py), prima della build
|
|
* Sat Oct 10 2026 Carlo <carlo@carlobaratto.it> - 0.6.0-1
|
|
- Home di sola consultazione: stato in una riga con pallino colorato, le due
|
|
letture (casa e acqua calda) grandi e toccabili, tre azioni rapide; le due
|
|
regolazioni e i pulsanti di navigazione escono dalla Home
|
|
- pagina Regolazioni: obiettivo casa e obiettivo acqua calda, ognuno con il
|
|
valore attuale sempre visibile, slider, valori rapidi e conferma; boost ACS
|
|
- Comandi impianto: quattro interruttori al posto di otto pulsanti acceso/
|
|
spento, piu' tre pulsanti per le azioni senza stato; diagnostica spostata
|
|
nella pagina Impianto
|
|
- messaggi dei comandi ancorati in fondo alla pagina, visibili sempre
|
|
- numeri vecchi mostrati spenti, con l'ora dell'ultimo aggiornamento
|
|
- lo stato si rilegge da solo due secondi dopo un comando
|
|
* Sat Oct 10 2026 Carlo <carlo@carlobaratto.it> - 0.5.0-1
|
|
- schermata iniziale riordinata come l'app ufficiale: temperatura esterna in
|
|
alto, messaggio di stato, scheda dell'impianto con casa e acqua calda
|
|
- pagina Dati: calore prodotto, elettricita' usata, efficienza (COP) e risparmi
|
|
- pagina Impianto: stato, termostato a parete, versioni del software, errori
|
|
* Sat Oct 10 2026 Carlo <carlo@carlobaratto.it> - 0.4.0-1
|
|
- interfaccia in inglese e italiano, scelta nelle impostazioni con ripiego
|
|
sull'inglese; numeri con il separatore decimale della lingua
|
|
* Sat Oct 10 2026 Carlo <carlo@carlobaratto.it> - 0.3.0-1
|
|
- pagina Altri comandi: assenza, night mode, riscaldamento forzato, legionella,
|
|
ACS on/off, verifica impianto; stato attuale in cima alla pagina
|
|
* Fri Oct 09 2026 Carlo <carlo@carlobaratto.it> - 0.2.0-1
|
|
- temperatura della casa e obiettivo per zona (slider 5-30 gradi)
|
|
* Fri Oct 09 2026 Carlo <carlo@carlobaratto.it> - 0.1.0-1
|
|
- prima release: stato impianto, obiettivo ACS, boost ACS
|
|
|
|
%prep
|
|
%setup -q -n %{name}-%{version}
|
|
|
|
%build
|
|
%qmake5
|
|
make %{?_smp_mflags}
|
|
|
|
# Catalogo italiano. Il .pro dichiara CONFIG += sailfishapp_i18n (che sui kit
|
|
# recenti genera e installa i .qm da solo), ma su altri kit quel template non li
|
|
# produce in modo affidabile — vedi harbour-tide/harbour-quill — e un catalogo
|
|
# mancante NON fa fallire la compilazione: l'app resterebbe in inglese senza dire
|
|
# niente. Qui lo si rigenera comunque; il file finisce nella stessa cartella dove
|
|
# lo cerca src/translator.cpp. Il .ts si cerca con find perche' sfdk usa i
|
|
# sorgenti live (shadow build) e la cartella puo' chiamarsi harbour-aira-0.6.0
|
|
# (tarball), harbour-aira (clone) o harbour-aira-main (archivio di Gitea).
|
|
TS=$(find %{_builddir}/.. -maxdepth 4 -name 'harbour-aira-it.ts' 2>/dev/null | head -1)
|
|
if [ -z "$TS" ]; then
|
|
echo "ERROR: harbour-aira-it.ts not found" >&2
|
|
exit 1
|
|
fi
|
|
lrelease "$TS" -qm %{_builddir}/harbour-aira-it.qm
|
|
|
|
%install
|
|
make install INSTALL_ROOT=%{buildroot}
|
|
mkdir -p %{buildroot}%{_datadir}/applications
|
|
|
|
# Il catalogo nel data dir dell'app: e' li' che translator.cpp lo carica
|
|
# (/usr/share/harbour-aira/translations).
|
|
mkdir -p %{buildroot}%{_datadir}/%{name}/translations
|
|
install -m 0644 %{_builddir}/harbour-aira-it.qm %{buildroot}%{_datadir}/%{name}/translations/
|
|
|
|
# Il desktop file si cerca con find: sfdk usa i sorgenti live (shadow build) e
|
|
# la cartella sorgente puo' chiamarsi harbour-aira-0.1.0 (tarball), harbour-aira
|
|
# (clone) o harbour-aira-main (zip di Gitea).
|
|
DESKTOP=$(find %{_builddir}/.. -maxdepth 4 -name '%{name}.desktop' 2>/dev/null | head -1)
|
|
if [ -z "$DESKTOP" ] && [ -f %{SOURCE1} ]; then DESKTOP=%{SOURCE1}; fi
|
|
if [ -z "$DESKTOP" ]; then
|
|
echo "ERROR: %{name}.desktop not found" >&2
|
|
exit 1
|
|
fi
|
|
install -m 0644 "$DESKTOP" %{buildroot}%{_datadir}/applications/%{name}.desktop
|
|
desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop || true
|
|
|
|
%files
|
|
%defattr(-,root,root,-)
|
|
%{_bindir}/%{name}
|
|
%{_datadir}/applications/%{name}.desktop
|
|
%{_datadir}/icons/hicolor/86x86/apps/%{name}.png
|
|
%{_datadir}/icons/hicolor/108x108/apps/%{name}.png
|
|
%{_datadir}/icons/hicolor/128x128/apps/%{name}.png
|
|
%{_datadir}/icons/hicolor/172x172/apps/%{name}.png
|
|
%{_datadir}/%{name}/qml
|
|
%{_datadir}/%{name}/translations/%{name}*.qm
|