0.6.0 blocco 2: Comandi impianto con interruttori, diagnostica in Impianto

- CommandsPage: 4 interruttori (TextSwitch) al posto di 8 pulsanti in coppie
  accendi/spegni, piu' 3 pulsanti per le azioni senza stato. Gli interruttori
  seguono il dato vero (automaticCheck: false), non anticipano l'impianto, e
  la sezione 'Stato attuale' non serve piu'.
- La pagina si chiama 'Comandi impianto'.
- PlantPage: frase estesa dello stato, diagnostica (verifica impianto) e le
  letture che non avevano posto (pompa, modi consentiti, manuale, sbrinamento,
  luci di firma).
- SettingsPage: 'Salva' e 'Prova connessione' diventano 'Salva e prova'.
- ApiClient: dopo un comando riuscito lo stato si rilegge da solo (prima non
  si aggiornava nulla: l'aggiornamento automatico non esisteva).
- NoticeBar anche su Dati, Impianto e Comandi; via i messaggi dentro il
  contenuto che scorre.
This commit is contained in:
2026-10-10 09:48:41 +02:00
parent d5b63b57df
commit 85702880d5
7 changed files with 331 additions and 308 deletions
+115 -110
View File
@@ -2,90 +2,142 @@ import QtQuick 2.2
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import "../components" import "../components"
// Comandi secondari: quelli che non stanno nella home. In cima lo stato // Comandi impianto: i comandi che non stanno nella Home.
// attuale, cosi' non si preme alla cieca. //
// Prima erano 12 pulsanti in quattro sezioni, otto dei quali in coppie
// accendi/spegni, con lo stato da leggere in sei righe piu' in alto. Ora ogni
// cosa che ha uno stato e' un interruttore: lo stato si vede e si cambia in un
// tocco solo (docs/UX-STUDIO.md).
//
// Gli interruttori NON anticipano l'impianto: `checked` segue l'ultimo dato
// vero (automaticCheck: false) e al tocco parte il comando. Se il comando non
// riesce, l'interruttore non si muove; se riesce, lo stato arriva da solo
// (ApiClient rilegge il riassunto due secondi dopo).
Page { Page {
id: page id: page
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
property string notice: ""
property bool noticeIsError: false
function raw(key) { function raw(key) {
return api.summary[key] return api.summary[key]
} }
function flag(key) { // La funzione riscaldamento e' abilitata quando i modi configurati della
return page.raw(key) ? qsTr("yes") : qsTr("no") // pompa la comprendono ("PUMP_MODE_STATE_HEATING").
function heatingEnabled() {
return String(page.raw("configured_modes") || "").indexOf("HEATING") >= 0
} }
function stato(key) { Component.onCompleted: {
return api.modeLabel(page.raw(key)) if (api.configured)
api.refresh()
} }
function showNotice(msg, isError) { // Fuori dai pulsanti/interruttori: dentro finirebbero nel loro contentItem.
page.notice = msg RemorseItem { id: remorse }
page.noticeIsError = isError === true
noticeTimer.restart()
}
Timer {
id: noticeTimer
interval: 4000
onTriggered: page.notice = ""
}
Connections {
target: api
onErrorOccurred: page.showNotice(message, true)
onCommandFinished: page.showNotice(message, !ok)
}
SilicaFlickable { SilicaFlickable {
anchors.fill: parent anchors.fill: parent
contentHeight: col.height + Theme.paddingLarge contentHeight: col.height + Theme.paddingLarge
PullDownMenu {
MenuItem {
text: qsTr("Refresh")
onClicked: api.refresh()
}
MenuItem {
text: qsTr("Data")
onClicked: pageStack.push(Qt.resolvedUrl("DataPage.qml"))
}
MenuItem {
text: qsTr("Plant")
onClicked: pageStack.push(Qt.resolvedUrl("PlantPage.qml"))
}
MenuItem {
text: qsTr("Settings")
onClicked: pageStack.push(Qt.resolvedUrl("SettingsPage.qml"))
}
}
Column { Column {
id: col id: col
width: parent.width width: parent.width
spacing: Theme.paddingSmall spacing: Theme.paddingSmall
PageHeader { title: qsTr("Other commands") } PageHeader { title: qsTr("Plant commands") }
Label { // ---- modalita' -------------------------------------------------- //
visible: page.notice.length > 0 SectionHeader { text: qsTr("Modes") }
x: Theme.horizontalPageMargin
width: parent.width - 2 * Theme.horizontalPageMargin TextSwitch {
text: page.notice id: awaySwitch
color: page.noticeIsError ? Theme.errorColor : Theme.highlightColor text: qsTr("Away mode")
font.pixelSize: Theme.fontSizeSmall description: qsTr("Lowers the house and stops the hot water")
wrapMode: Text.Wrap automaticCheck: false
checked: page.raw("away_mode") === true
onClicked: {
if (checked)
api.sendCommand("away_mode_off")
else
api.sendCommand("away_mode_on")
}
} }
// ---- stato attuale -------------------------------------------- // TextSwitch {
SectionHeader { text: qsTr("Current state") } text: qsTr("Forced heating")
description: qsTr("Heats at full power until you stop it")
automaticCheck: false
checked: page.raw("force_heating") === true
onClicked: {
if (checked)
api.sendCommand("force_heating_off")
else
api.sendCommand("force_heating_on")
}
}
InfoRow { label: qsTr("Away mode"); value: page.flag("away_mode") } TextSwitch {
InfoRow { label: qsTr("Night mode"); value: page.flag("night_mode") } id: heatingSwitch
InfoRow { label: qsTr("Forced heating"); value: page.flag("force_heating") } text: qsTr("Heating")
InfoRow { label: qsTr("Hot water active"); value: page.flag("hot_water_heating") } description: qsTr("The heating can turn on")
InfoRow { label: qsTr("Pump"); value: page.stato("pump_active_state") } automaticCheck: false
InfoRow { label: qsTr("Allowed modes"); value: page.stato("configured_modes") } checked: page.heatingEnabled()
onClicked: {
// Spegnere il riscaldamento ha conseguenze: si conferma.
if (checked)
remorse.execute(heatingSwitch, qsTr("Heating will be disabled"),
function() { api.sendCommand("heating_off") })
else
api.sendCommand("heating_on")
}
}
// ---- assenza --------------------------------------------------- // // ---- acqua calda ------------------------------------------------ //
SectionHeader { text: qsTr("Away mode") } SectionHeader { text: qsTr("Domestic hot water") }
TextSwitch {
id: waterSwitch
text: qsTr("Hot water active")
description: qsTr("The heat pump keeps the water in temperature")
automaticCheck: false
checked: page.raw("hot_water_heating") === true
onClicked: {
if (checked)
remorse.execute(waterSwitch,
qsTr("Domestic hot water will stop being heated"),
function() { api.sendCommand("hot_water_heating_off") })
else
api.sendCommand("hot_water_heating_on")
}
}
ActionButton { ActionButton {
text: qsTr("Turn away mode on") text: qsTr("Legionella cycle")
onTriggered: api.sendCommand("away_mode_on") confirmText: qsTr("Starting the legionella cycle: it takes a while")
} onTriggered: api.sendCommand("legionella_cycle")
ActionButton {
text: qsTr("Turn away mode off")
onTriggered: api.sendCommand("away_mode_off")
} }
// ---- rumore ---------------------------------------------------- // // ---- rumore ----------------------------------------------------- //
SectionHeader { text: qsTr("Noise") } SectionHeader { text: qsTr("Noise") }
ActionButton { ActionButton {
@@ -93,59 +145,13 @@ Page {
onTriggered: api.sendCommand("night_mode_1h") onTriggered: api.sendCommand("night_mode_1h")
} }
// ---- riscaldamento --------------------------------------------- // Label {
SectionHeader { text: qsTr("Heating") } x: Theme.horizontalPageMargin
width: parent.width - 2 * Theme.horizontalPageMargin
ActionButton { text: qsTr("The switches show the current state of the plant: the Status section is not needed any more.")
text: qsTr("Force heating") color: Theme.secondaryColor
confirmText: qsTr("Starting forced heating") font.pixelSize: Theme.fontSizeExtraSmall
onTriggered: api.sendCommand("force_heating_on") wrapMode: Text.Wrap
}
ActionButton {
text: qsTr("Stop forced heating")
onTriggered: api.sendCommand("force_heating_off")
}
ActionButton {
text: qsTr("Enable heating function")
onTriggered: api.sendCommand("heating_on")
}
ActionButton {
text: qsTr("Disable heating function")
confirmText: qsTr("Heating will be disabled")
onTriggered: api.sendCommand("heating_off")
}
// ---- acqua calda ----------------------------------------------- //
SectionHeader { text: qsTr("Domestic hot water") }
ActionButton {
text: qsTr("Legionella cycle")
confirmText: qsTr("Starting the legionella cycle: it takes a while")
onTriggered: api.sendCommand("legionella_cycle")
}
ActionButton {
text: qsTr("Enable DHW heating")
onTriggered: api.sendCommand("hot_water_heating_on")
}
ActionButton {
text: qsTr("Disable DHW heating")
confirmText: qsTr("Domestic hot water will stop being heated")
onTriggered: api.sendCommand("hot_water_heating_off")
}
// ---- diagnostica ----------------------------------------------- //
SectionHeader { text: qsTr("Diagnostics") }
ActionButton {
text: qsTr("Plant check")
onTriggered: api.sendCommand("ping")
}
BusyIndicator {
visible: api.busy
anchors.horizontalCenter: parent.horizontalCenter
size: BusyIndicatorSize.Small
running: true
} }
Label { Label {
@@ -156,11 +162,10 @@ Page {
font.pixelSize: Theme.fontSizeExtraSmall font.pixelSize: Theme.fontSizeExtraSmall
wrapMode: Text.Wrap wrapMode: Text.Wrap
} }
Item { width: 1; height: Theme.paddingMedium }
} }
} }
Component.onCompleted: { NoticeBar { }
if (api.configured) }
api.refresh()
}
}
+4 -9
View File
@@ -109,15 +109,8 @@ Page {
wrapMode: Text.Wrap wrapMode: Text.Wrap
} }
Label { // Gli errori non si mostrano piu' qui dentro: il messaggio arriva
visible: page.error.length > 0 // ancorato in fondo alla pagina (NoticeBar), dove si vede sempre.
x: Theme.horizontalPageMargin
width: parent.width - 2 * Theme.horizontalPageMargin
text: page.error
color: Theme.errorColor
font.pixelSize: Theme.fontSizeSmall
wrapMode: Text.Wrap
}
Label { Label {
visible: Object.keys(page.stats()).length === 0 && page.error.length === 0 visible: Object.keys(page.stats()).length === 0 && page.error.length === 0
@@ -242,6 +235,8 @@ Page {
} }
} }
NoticeBar { }
Component.onCompleted: { Component.onCompleted: {
if (api.configured) { if (api.configured) {
page.loading = true page.loading = true
+28
View File
@@ -71,6 +71,19 @@ Page {
PageHeader { title: qsTr("Plant") } PageHeader { title: qsTr("Plant") }
// La frase estesa dell'app ufficiale ("Relax: la pompa di calore
// funziona regolarmente"): sta qui e non in Home, dove serve
// spazio per le due letture. La calcola il C++ (AiraJson::stateLong).
Label {
x: Theme.horizontalPageMargin
width: parent.width - 2 * Theme.horizontalPageMargin
text: api.stateLong()
color: Theme.primaryColor
font.pixelSize: Theme.fontSizeMedium
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.Wrap
}
// ---- stato ------------------------------------------------------ // // ---- stato ------------------------------------------------------ //
SectionHeader { text: qsTr("Status") } SectionHeader { text: qsTr("Status") }
@@ -86,6 +99,11 @@ Page {
InfoRow { label: qsTr("Night mode"); value: page.flag("night_mode") } InfoRow { label: qsTr("Night mode"); value: page.flag("night_mode") }
InfoRow { label: qsTr("Forced heating"); value: page.flag("force_heating") } InfoRow { label: qsTr("Forced heating"); value: page.flag("force_heating") }
InfoRow { label: qsTr("Inline heater"); value: page.flag("inline_heater") } InfoRow { label: qsTr("Inline heater"); value: page.flag("inline_heater") }
InfoRow { label: qsTr("Manual mode"); value: page.flag("manual_mode") }
InfoRow { label: qsTr("Defrost"); value: page.flag("outdoor_defrost") }
InfoRow { label: qsTr("Signature lights"); value: page.flag("signature_lights") }
InfoRow { label: qsTr("Pump"); value: api.modeLabel(page.raw("pump_active_state")) }
InfoRow { label: qsTr("Allowed modes"); value: api.modeLabel(page.raw("configured_modes")) }
InfoRow { label: qsTr("Outdoor temperature"); value: page.temp("outdoor_temperature") } InfoRow { label: qsTr("Outdoor temperature"); value: page.temp("outdoor_temperature") }
InfoRow { label: qsTr("Indoor temperature (pump)"); value: page.temp("indoor_temperature") } InfoRow { label: qsTr("Indoor temperature (pump)"); value: page.temp("indoor_temperature") }
InfoRow { label: qsTr("Zones"); value: page.count("zones") } InfoRow { label: qsTr("Zones"); value: page.count("zones") }
@@ -176,10 +194,20 @@ Page {
value: page.count("errors_count") value: page.count("errors_count")
} }
// ---- diagnostica ------------------------------------------------ //
SectionHeader { text: qsTr("Diagnostics") }
ActionButton {
text: qsTr("Plant check")
onTriggered: api.sendCommand("ping")
}
Item { width: 1; height: Theme.paddingMedium } Item { width: 1; height: Theme.paddingMedium }
} }
} }
NoticeBar { }
Component.onCompleted: { Component.onCompleted: {
if (api.configured) if (api.configured)
api.refresh() api.refresh()
+3 -11
View File
@@ -128,19 +128,11 @@ Page {
wrapMode: Text.Wrap wrapMode: Text.Wrap
} }
// Un pulsante solo: salvare e provare erano due gesti per la stessa
// cosa (il secondo salvava comunque).
Button { Button {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Save") text: qsTr("Save and test")
onClicked: {
page.save()
page.testResult = qsTr("settings saved")
page.testOk = true
}
}
Button {
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Test connection")
onClicked: page.testAndReport() onClicked: page.testAndReport()
} }
+13
View File
@@ -17,6 +17,7 @@ ApiClient::ApiClient(Settings *settings, QObject *parent)
, m_stale(false) , m_stale(false)
, m_noticeIsError(false) , m_noticeIsError(false)
, m_noticeTimer(0) , m_noticeTimer(0)
, m_refreshTimer(0)
{ {
// Il messaggio dell'ultimo comando (o dell'ultimo errore) vale per ogni // Il messaggio dell'ultimo comando (o dell'ultimo errore) vale per ogni
// pagina: lo stato sta qui, si spegne da solo e la UI lo mostra ancorato // pagina: lo stato sta qui, si spegne da solo e la UI lo mostra ancorato
@@ -40,6 +41,18 @@ ApiClient::ApiClient(Settings *settings, QObject *parent)
setNotice(message, !ok); setNotice(message, !ok);
}); });
// Dopo un comando riuscito lo stato si rilegge da solo: l'impianto applica
// in qualche istante, e senza questa rilettura gli interruttori della
// pagina dei comandi resterebbero indietro rispetto alla pompa.
m_refreshTimer = new QTimer(this);
m_refreshTimer->setSingleShot(true);
m_refreshTimer->setInterval(2000);
connect(m_refreshTimer, &QTimer::timeout, this, &ApiClient::refresh);
connect(this, &ApiClient::commandFinished, this, [this](bool ok, const QString &) {
if (ok)
m_refreshTimer->start();
});
if (m_settings) { if (m_settings) {
// La UI deve riflettere subito il passaggio da "non configurato" a // La UI deve riflettere subito il passaggio da "non configurato" a
// "configurato" quando si salvano indirizzo o token. // "configurato" quando si salvano indirizzo o token.
+1
View File
@@ -105,6 +105,7 @@ private:
QString m_notice; QString m_notice;
bool m_noticeIsError; bool m_noticeIsError;
QTimer *m_noticeTimer; QTimer *m_noticeTimer;
QTimer *m_refreshTimer;
QVariantMap m_summary; QVariantMap m_summary;
QVariantMap m_stats; QVariantMap m_stats;
}; };
+167 -178
View File
@@ -96,7 +96,7 @@
<message> <message>
<location filename="../src/airajson.cpp" line="238"/> <location filename="../src/airajson.cpp" line="238"/>
<source>Heating the hot water</source> <source>Heating the hot water</source>
<translation>Sta scaldando l'acqua</translation> <translation>Sta scaldando l&apos;acqua</translation>
</message> </message>
<message> <message>
<location filename="../src/airajson.cpp" line="240"/> <location filename="../src/airajson.cpp" line="240"/>
@@ -111,12 +111,12 @@
<message> <message>
<location filename="../src/airajson.cpp" line="251"/> <location filename="../src/airajson.cpp" line="251"/>
<source>Attention: one error on the plant</source> <source>Attention: one error on the plant</source>
<translation>Attenzione: un errore sull'impianto</translation> <translation>Attenzione: un errore sull&apos;impianto</translation>
</message> </message>
<message> <message>
<location filename="../src/airajson.cpp" line="252"/> <location filename="../src/airajson.cpp" line="252"/>
<source>Attention: %1 errors on the plant</source> <source>Attention: %1 errors on the plant</source>
<translation>Attenzione: %1 errori sull'impianto</translation> <translation>Attenzione: %1 errori sull&apos;impianto</translation>
</message> </message>
<message> <message>
<location filename="../src/airajson.cpp" line="254"/> <location filename="../src/airajson.cpp" line="254"/>
@@ -136,7 +136,7 @@
<message> <message>
<location filename="../src/airajson.cpp" line="260"/> <location filename="../src/airajson.cpp" line="260"/>
<source>The heat pump is heating the hot water.</source> <source>The heat pump is heating the hot water.</source>
<translation>La pompa di calore sta scaldando l'acqua calda.</translation> <translation>La pompa di calore sta scaldando l&apos;acqua calda.</translation>
</message> </message>
<message> <message>
<location filename="../src/airajson.cpp" line="262"/> <location filename="../src/airajson.cpp" line="262"/>
@@ -152,66 +152,66 @@
<context> <context>
<name>ApiClient</name> <name>ApiClient</name>
<message> <message>
<location filename="../src/apiclient.cpp" line="111"/> <location filename="../src/apiclient.cpp" line="124"/>
<source>Bridge address not configured</source> <source>Bridge address not configured</source>
<translation>Indirizzo del bridge non configurato</translation> <translation>Indirizzo del bridge non configurato</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="133"/> <location filename="../src/apiclient.cpp" line="146"/>
<location filename="../src/apiclient.cpp" line="245"/> <location filename="../src/apiclient.cpp" line="258"/>
<location filename="../src/apiclient.cpp" line="288"/> <location filename="../src/apiclient.cpp" line="301"/>
<source>Set the bridge address and token</source> <source>Set the bridge address and token</source>
<translation>Configura indirizzo e token del bridge</translation> <translation>Configura indirizzo e token del bridge</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="153"/> <location filename="../src/apiclient.cpp" line="166"/>
<source>Server unreachable (timeout)</source> <source>Server unreachable (timeout)</source>
<translation>Server non raggiungibile (timeout)</translation> <translation>Server non raggiungibile (timeout)</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="172"/> <location filename="../src/apiclient.cpp" line="185"/>
<location filename="../src/apiclient.cpp" line="276"/> <location filename="../src/apiclient.cpp" line="289"/>
<source>Unreadable response from the bridge</source> <source>Unreadable response from the bridge</source>
<translation>Risposta del bridge non interpretabile</translation> <translation>Risposta del bridge non interpretabile</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="192"/> <location filename="../src/apiclient.cpp" line="205"/>
<source>Enter the bridge address</source> <source>Enter the bridge address</source>
<translation>Inserisci l&apos;indirizzo del bridge</translation> <translation>Inserisci l&apos;indirizzo del bridge</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="208"/> <location filename="../src/apiclient.cpp" line="221"/>
<source>Timeout: no response</source> <source>Timeout: no response</source>
<translation>Timeout: nessuna risposta</translation> <translation>Timeout: nessuna risposta</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="209"/> <location filename="../src/apiclient.cpp" line="222"/>
<source>Unreachable (HTTP %1)</source> <source>Unreachable (HTTP %1)</source>
<translation>Irraggiungibile (HTTP %1)</translation> <translation>Irraggiungibile (HTTP %1)</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="213"/> <location filename="../src/apiclient.cpp" line="226"/>
<source>Bridge reachable</source> <source>Bridge reachable</source>
<translation>Bridge raggiungibile</translation> <translation>Bridge raggiungibile</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="253"/> <location filename="../src/apiclient.cpp" line="266"/>
<location filename="../src/apiclient.cpp" line="297"/> <location filename="../src/apiclient.cpp" line="310"/>
<source>Bridge not configured</source> <source>Bridge not configured</source>
<translation>Bridge non configurato</translation> <translation>Bridge non configurato</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="265"/> <location filename="../src/apiclient.cpp" line="278"/>
<source>Timeout: no statistics</source> <source>Timeout: no statistics</source>
<translation>Timeout: statistiche non disponibili</translation> <translation>Timeout: statistiche non disponibili</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="311"/> <location filename="../src/apiclient.cpp" line="324"/>
<source>Timeout: command not sent</source> <source>Timeout: command not sent</source>
<translation>Timeout: comando non inviato</translation> <translation>Timeout: comando non inviato</translation>
</message> </message>
<message> <message>
<location filename="../src/apiclient.cpp" line="318"/> <location filename="../src/apiclient.cpp" line="331"/>
<source>Command sent</source> <source>Command sent</source>
<translation>Comando inviato</translation> <translation>Comando inviato</translation>
</message> </message>
@@ -219,153 +219,117 @@
<context> <context>
<name>CommandsPage</name> <name>CommandsPage</name>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="20"/> <location filename="../qml/pages/CommandsPage.qml" line="74"/>
<source>yes</source>
<translation>sì</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="20"/>
<source>no</source>
<translation>no</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="54"/>
<source>Other commands</source>
<translation>Altri comandi</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="67"/>
<source>Current state</source>
<translation>Stato attuale</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="69"/>
<location filename="../qml/pages/CommandsPage.qml" line="77"/>
<source>Away mode</source> <source>Away mode</source>
<translation>Assenza</translation> <translation>Assenza</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="70"/> <location filename="../qml/pages/CommandsPage.qml" line="87"/>
<source>Night mode</source>
<translation>Night mode</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="71"/>
<source>Forced heating</source> <source>Forced heating</source>
<translation>Riscaldamento forzato</translation> <translation>Riscaldamento forzato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="72"/> <location filename="../qml/pages/CommandsPage.qml" line="120"/>
<source>Hot water active</source> <source>Hot water active</source>
<translation>Acqua calda attiva</translation> <translation>Acqua calda attiva</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="73"/> <location filename="../qml/pages/CommandsPage.qml" line="141"/>
<source>Pump</source>
<translation>Pompa</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="74"/>
<source>Allowed modes</source>
<translation>Modalità consentite</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="80"/>
<source>Turn away mode on</source>
<translation>Attiva assenza</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="84"/>
<source>Turn away mode off</source>
<translation>Disattiva assenza</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="89"/>
<source>Noise</source> <source>Noise</source>
<translation>Rumore</translation> <translation>Rumore</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="92"/> <location filename="../qml/pages/CommandsPage.qml" line="144"/>
<source>Night mode for one hour</source> <source>Night mode for one hour</source>
<translation>Night mode per un&apos;ora</translation> <translation>Night mode per un&apos;ora</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="97"/> <location filename="../qml/pages/CommandsPage.qml" line="101"/>
<source>Heating</source> <source>Heating</source>
<translation>Riscaldamento</translation> <translation>Riscaldamento</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="100"/> <location filename="../qml/pages/CommandsPage.qml" line="45"/>
<source>Force heating</source> <source>Refresh</source>
<translation>Forza riscaldamento</translation> <translation>Aggiorna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="101"/> <location filename="../qml/pages/CommandsPage.qml" line="49"/>
<source>Starting forced heating</source> <source>Data</source>
<translation>Avvio del riscaldamento forzato</translation> <translation>Dati</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="105"/> <location filename="../qml/pages/CommandsPage.qml" line="53"/>
<source>Stop forced heating</source> <source>Plant</source>
<translation>Ferma riscaldamento forzato</translation> <translation>Impianto</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="109"/> <location filename="../qml/pages/CommandsPage.qml" line="57"/>
<source>Enable heating function</source> <source>Settings</source>
<translation>Abilita funzione riscaldamento</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="113"/> <location filename="../qml/pages/CommandsPage.qml" line="67"/>
<source>Disable heating function</source> <source>Plant commands</source>
<translation>Disabilita funzione riscaldamento</translation> <translation>Comandi impianto</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="114"/> <location filename="../qml/pages/CommandsPage.qml" line="70"/>
<source>Modes</source>
<translation>Modalità</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="75"/>
<source>Lowers the house and stops the hot water</source>
<translation>Abbassa la casa e spegne l'acqua calda</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="88"/>
<source>Heats at full power until you stop it</source>
<translation>Scalda a pieno regime finché non lo fermi</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="102"/>
<source>The heating can turn on</source>
<translation>Il riscaldamento può accendersi</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="108"/>
<source>Heating will be disabled</source> <source>Heating will be disabled</source>
<translation>Il riscaldamento verrà disabilitato</translation> <translation>Il riscaldamento verrà disabilitato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="119"/> <location filename="../qml/pages/CommandsPage.qml" line="116"/>
<source>Domestic hot water</source> <source>Domestic hot water</source>
<translation>Acqua calda sanitaria</translation> <translation>Acqua calda sanitaria</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="122"/> <location filename="../qml/pages/CommandsPage.qml" line="121"/>
<source>The heat pump keeps the water in temperature</source>
<translation>Mantiene l'acqua in temperatura</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="135"/>
<source>Legionella cycle</source> <source>Legionella cycle</source>
<translation>Ciclo antilegionella</translation> <translation>Ciclo antilegionella</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="123"/> <location filename="../qml/pages/CommandsPage.qml" line="136"/>
<source>Starting the legionella cycle: it takes a while</source> <source>Starting the legionella cycle: it takes a while</source>
<translation>Avvio del ciclo antilegionella: richiede tempo</translation> <translation>Avvio del ciclo antilegionella: richiede tempo</translation>
</message> </message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="151"/>
<source>The switches show the current state of the plant: the Status section is not needed any more.</source>
<translation>Gli interruttori mostrano lo stato attuale: la sezione Stato non serve più.</translation>
</message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="127"/> <location filename="../qml/pages/CommandsPage.qml" line="127"/>
<source>Enable DHW heating</source>
<translation>Abilita riscaldamento ACS</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="131"/>
<source>Disable DHW heating</source>
<translation>Disabilita riscaldamento ACS</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="132"/>
<source>Domestic hot water will stop being heated</source> <source>Domestic hot water will stop being heated</source>
<translation>L&apos;acqua calda smetterà di essere riscaldata</translation> <translation>L&apos;acqua calda smetterà di essere riscaldata</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/CommandsPage.qml" line="137"/> <location filename="../qml/pages/CommandsPage.qml" line="160"/>
<source>Diagnostics</source>
<translation>Diagnostica</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="140"/>
<source>Plant check</source>
<translation>Verifica impianto</translation>
</message>
<message>
<location filename="../qml/pages/CommandsPage.qml" line="154"/>
<source>Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.</source> <source>Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.</source>
<translation>I comandi passano dal bridge e possono richiedere qualche secondo. Dopo l&apos;invio lo stato si aggiorna da solo.</translation> <translation>I comandi passano dal bridge e possono richiedere qualche secondo. Dopo l&apos;invio lo stato si aggiorna da solo.</translation>
</message> </message>
@@ -421,97 +385,97 @@
<translation>Numeri calcolati da Aira nel cloud: l&apos;app li legge soltanto dal tuo bridge.</translation> <translation>Numeri calcolati da Aira nel cloud: l&apos;app li legge soltanto dal tuo bridge.</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="126"/> <location filename="../qml/pages/DataPage.qml" line="119"/>
<source>Reading the data...</source> <source>Reading the data...</source>
<translation>Lettura dei dati in corso...</translation> <translation>Lettura dei dati in corso...</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="136"/> <location filename="../qml/pages/DataPage.qml" line="129"/>
<source>Month of %1</source> <source>Month of %1</source>
<translation>Mese di %1</translation> <translation>Mese di %1</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="137"/> <location filename="../qml/pages/DataPage.qml" line="130"/>
<source>This month</source> <source>This month</source>
<translation>Questo mese</translation> <translation>Questo mese</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="142"/> <location filename="../qml/pages/DataPage.qml" line="135"/>
<source>Heat produced</source> <source>Heat produced</source>
<translation>Calore prodotto</translation> <translation>Calore prodotto</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="143"/> <location filename="../qml/pages/DataPage.qml" line="136"/>
<source>What the heat pump gave the house</source> <source>What the heat pump gave the house</source>
<translation>Quanto la pompa ha dato alla casa</translation> <translation>Quanto la pompa ha dato alla casa</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="149"/> <location filename="../qml/pages/DataPage.qml" line="142"/>
<source>Electricity used</source> <source>Electricity used</source>
<translation>Elettricità usata</translation> <translation>Elettricità usata</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="150"/> <location filename="../qml/pages/DataPage.qml" line="143"/>
<source>What the heat pump took from the grid</source> <source>What the heat pump took from the grid</source>
<translation>Quanta ne ha presa dalla rete</translation> <translation>Quanta ne ha presa dalla rete</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="156"/> <location filename="../qml/pages/DataPage.qml" line="149"/>
<source>Efficiency, domestic hot water</source> <source>Efficiency, domestic hot water</source>
<translation>Efficienza, acqua calda</translation> <translation>Efficienza, acqua calda</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="162"/> <location filename="../qml/pages/DataPage.qml" line="155"/>
<source>Efficiency, heating</source> <source>Efficiency, heating</source>
<translation>Efficienza, riscaldamento</translation> <translation>Efficienza, riscaldamento</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="170"/> <location filename="../qml/pages/DataPage.qml" line="163"/>
<source>Efficiency (COP) is how much heat the pump delivers for each unit of electricity: higher is better.</source> <source>Efficiency (COP) is how much heat the pump delivers for each unit of electricity: higher is better.</source>
<translation>L&apos;efficienza (COP) è quanto calore la pompa produce per ogni unità di elettricità: più alta è, meglio è.</translation> <translation>L&apos;efficienza (COP) è quanto calore la pompa produce per ogni unità di elettricità: più alta è, meglio è.</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="179"/> <location filename="../qml/pages/DataPage.qml" line="172"/>
<source>Your savings, last %1 days</source> <source>Your savings, last %1 days</source>
<translation>I tuoi risparmi, ultimi %1 giorni</translation> <translation>I tuoi risparmi, ultimi %1 giorni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="184"/> <location filename="../qml/pages/DataPage.qml" line="177"/>
<source>Saved on the bill</source> <source>Saved on the bill</source>
<translation>Risparmiati in bolletta</translation> <translation>Risparmiati in bolletta</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="185"/> <location filename="../qml/pages/DataPage.qml" line="178"/>
<source>Compared with a gas boiler</source> <source>Compared with a gas boiler</source>
<translation>Rispetto a una caldaia a gas</translation> <translation>Rispetto a una caldaia a gas</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="192"/> <location filename="../qml/pages/DataPage.qml" line="185"/>
<source>CO₂ avoided</source> <source>CO₂ avoided</source>
<translation>CO₂ evitata</translation> <translation>CO₂ evitata</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="193"/> <location filename="../qml/pages/DataPage.qml" line="186"/>
<source>Not released into the air</source> <source>Not released into the air</source>
<translation>Non immessa nell&apos;aria</translation> <translation>Non immessa nell&apos;aria</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="199"/> <location filename="../qml/pages/DataPage.qml" line="192"/>
<source>Smart Tariff Control</source> <source>Smart Tariff Control</source>
<translation>Smart Tariff Control</translation> <translation>Smart Tariff Control</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="200"/> <location filename="../qml/pages/DataPage.qml" line="193"/>
<source>Saving from heating when energy is cheaper</source> <source>Saving from heating when energy is cheaper</source>
<translation>Risparmio scaldando quando l&apos;energia costa meno</translation> <translation>Risparmio scaldando quando l&apos;energia costa meno</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="208"/> <location filename="../qml/pages/DataPage.qml" line="201"/>
<source>Efficiency month by month</source> <source>Efficiency month by month</source>
<translation>Efficienza mese per mese</translation> <translation>Efficienza mese per mese</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/DataPage.qml" line="222"/> <location filename="../qml/pages/DataPage.qml" line="215"/>
<source>Savings month by month</source> <source>Savings month by month</source>
<translation>Risparmi mese per mese</translation> <translation>Risparmi mese per mese</translation>
</message> </message>
@@ -659,165 +623,200 @@
<translation>Impianto</translation> <translation>Impianto</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="75"/> <location filename="../qml/pages/PlantPage.qml" line="88"/>
<source>Status</source> <source>Status</source>
<translation>Stato</translation> <translation>Stato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="78"/> <location filename="../qml/pages/PlantPage.qml" line="91"/>
<source>Connection</source> <source>Connection</source>
<translation>Connessione</translation> <translation>Connessione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="82"/> <location filename="../qml/pages/PlantPage.qml" line="95"/>
<source>Mode</source> <source>Mode</source>
<translation>Modalità</translation> <translation>Modalità</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="85"/> <location filename="../qml/pages/PlantPage.qml" line="98"/>
<source>Away mode</source> <source>Away mode</source>
<translation>Modalità assenza</translation> <translation>Modalità assenza</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="86"/> <location filename="../qml/pages/PlantPage.qml" line="99"/>
<source>Night mode</source> <source>Night mode</source>
<translation>Modalità notte</translation> <translation>Modalità notte</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="87"/> <location filename="../qml/pages/PlantPage.qml" line="100"/>
<source>Forced heating</source> <source>Forced heating</source>
<translation>Riscaldamento forzato</translation> <translation>Riscaldamento forzato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="88"/> <location filename="../qml/pages/PlantPage.qml" line="101"/>
<source>Inline heater</source> <source>Inline heater</source>
<translation>Resistenza interna</translation> <translation>Resistenza interna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="89"/> <location filename="../qml/pages/PlantPage.qml" line="102"/>
<source>Manual mode</source>
<translation>Modalità manuale</translation>
</message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="103"/>
<source>Defrost</source>
<translation>Sbrinamento</translation>
</message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="104"/>
<source>Signature lights</source>
<translation>Luci di firma</translation>
</message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="105"/>
<source>Pump</source>
<translation>Pompa</translation>
</message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="106"/>
<source>Allowed modes</source>
<translation>Modi consentiti</translation>
</message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="107"/>
<source>Outdoor temperature</source> <source>Outdoor temperature</source>
<translation>Temperatura esterna</translation> <translation>Temperatura esterna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="90"/> <location filename="../qml/pages/PlantPage.qml" line="108"/>
<source>Indoor temperature (pump)</source> <source>Indoor temperature (pump)</source>
<translation>Temperatura interna (pompa)</translation> <translation>Temperatura interna (pompa)</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="91"/> <location filename="../qml/pages/PlantPage.qml" line="109"/>
<source>Zones</source> <source>Zones</source>
<translation>Zone</translation> <translation>Zone</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="92"/> <location filename="../qml/pages/PlantPage.qml" line="110"/>
<source>Last reading</source> <source>Last reading</source>
<translation>Ultima lettura</translation> <translation>Ultima lettura</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="95"/> <location filename="../qml/pages/PlantPage.qml" line="113"/>
<source>Accessories</source> <source>Accessories</source>
<translation>Accessori</translation> <translation>Accessori</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="101"/> <location filename="../qml/pages/PlantPage.qml" line="119"/>
<source>No wall thermostat</source> <source>No wall thermostat</source>
<translation>Nessun termostato a parete</translation> <translation>Nessun termostato a parete</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="114"/> <location filename="../qml/pages/PlantPage.qml" line="132"/>
<source>Aira wall thermostat</source> <source>Aira wall thermostat</source>
<translation>Termostato a parete Aira</translation> <translation>Termostato a parete Aira</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="119"/> <location filename="../qml/pages/PlantPage.qml" line="137"/>
<source>Zone %1 · Connected</source> <source>Zone %1 · Connected</source>
<translation>Zona %1 · Connesso</translation> <translation>Zona %1 · Connesso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="127"/> <location filename="../qml/pages/PlantPage.qml" line="145"/>
<source>Measured temperature</source> <source>Measured temperature</source>
<translation>Temperatura misurata</translation> <translation>Temperatura misurata</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="132"/> <location filename="../qml/pages/PlantPage.qml" line="150"/>
<source>Humidity</source> <source>Humidity</source>
<translation>Umidità</translation> <translation>Umidità</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="137"/> <location filename="../qml/pages/PlantPage.qml" line="155"/>
<source>Signal</source> <source>Signal</source>
<translation>Segnale</translation> <translation>Segnale</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="142"/> <location filename="../qml/pages/PlantPage.qml" line="160"/>
<source>Battery</source> <source>Battery</source>
<translation>Batteria</translation> <translation>Batteria</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="143"/> <location filename="../qml/pages/PlantPage.qml" line="161"/>
<source>low</source> <source>low</source>
<translation>scarica</translation> <translation>scarica</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="143"/> <location filename="../qml/pages/PlantPage.qml" line="161"/>
<source>ok</source> <source>ok</source>
<translation>ok</translation> <translation>ok</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="147"/> <location filename="../qml/pages/PlantPage.qml" line="165"/>
<source>Article</source> <source>Article</source>
<translation>Articolo</translation> <translation>Articolo</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="152"/> <location filename="../qml/pages/PlantPage.qml" line="170"/>
<source>Versions</source> <source>Versions</source>
<translation>Versioni</translation> <translation>Versioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="154"/> <location filename="../qml/pages/PlantPage.qml" line="172"/>
<source>Device ID</source> <source>Device ID</source>
<translation>ID dispositivo</translation> <translation>ID dispositivo</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="155"/> <location filename="../qml/pages/PlantPage.qml" line="173"/>
<source>Platform</source> <source>Platform</source>
<translation>Piattaforma</translation> <translation>Piattaforma</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="156"/> <location filename="../qml/pages/PlantPage.qml" line="174"/>
<source>Connectivity</source> <source>Connectivity</source>
<translation>Connettività</translation> <translation>Connettività</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="157"/> <location filename="../qml/pages/PlantPage.qml" line="175"/>
<source>Climate control</source> <source>Climate control</source>
<translation>Controllo climatico</translation> <translation>Controllo climatico</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="158"/> <location filename="../qml/pages/PlantPage.qml" line="176"/>
<source>Outdoor unit</source> <source>Outdoor unit</source>
<translation>Unità esterna</translation> <translation>Unità esterna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="159"/> <location filename="../qml/pages/PlantPage.qml" line="177"/>
<source>Outdoor unit EEPROM</source> <source>Outdoor unit EEPROM</source>
<translation>EEPROM unità esterna</translation> <translation>EEPROM unità esterna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="162"/> <location filename="../qml/pages/PlantPage.qml" line="180"/>
<source>Errors</source> <source>Errors</source>
<translation>Errori</translation> <translation>Errori</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="168"/> <location filename="../qml/pages/PlantPage.qml" line="186"/>
<source>No errors reported by the plant.</source> <source>No errors reported by the plant.</source>
<translation>Nessun errore segnalato dall&apos;impianto.</translation> <translation>Nessun errore segnalato dall&apos;impianto.</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/PlantPage.qml" line="175"/> <location filename="../qml/pages/PlantPage.qml" line="193"/>
<source>Errors reported</source> <source>Errors reported</source>
<translation>Errori segnalati</translation> <translation>Errori segnalati</translation>
</message> </message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="198"/>
<source>Diagnostics</source>
<translation>Diagnostica</translation>
</message>
<message>
<location filename="../qml/pages/PlantPage.qml" line="201"/>
<source>Plant check</source>
<translation>Verifica impianto</translation>
</message>
</context> </context>
<context> <context>
<name>SetpointsPage</name> <name>SetpointsPage</name>
@@ -859,7 +858,7 @@
<message> <message>
<location filename="../qml/pages/SetpointsPage.qml" line="102"/> <location filename="../qml/pages/SetpointsPage.qml" line="102"/>
<source>What the plant is keeping now</source> <source>What the plant is keeping now</source>
<translation>Quello che l'impianto mantiene adesso</translation> <translation>Quello che l&apos;impianto mantiene adesso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SetpointsPage.qml" line="109"/> <location filename="../qml/pages/SetpointsPage.qml" line="109"/>
@@ -934,7 +933,7 @@
<message> <message>
<location filename="../qml/pages/SetpointsPage.qml" line="223"/> <location filename="../qml/pages/SetpointsPage.qml" line="223"/>
<source>Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.</source> <source>Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.</source>
<translation>I comandi passano dal bridge e possono richiedere qualche secondo. Dopo l'invio lo stato si aggiorna da solo.</translation> <translation>I comandi passano dal bridge e possono richiedere qualche secondo. Dopo l&apos;invio lo stato si aggiorna da solo.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -987,19 +986,9 @@
<translation>Indirizzo e token si leggono sul server: il token è in aira_bridge.json accanto al bridge. Senza schema viene usato http://.</translation> <translation>Indirizzo e token si leggono sul server: il token è in aira_bridge.json accanto al bridge. Senza schema viene usato http://.</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="133"/> <location filename="../qml/pages/SettingsPage.qml" line="135"/>
<source>Save</source> <source>Save and test</source>
<translation>Salva</translation> <translation>Salva e prova</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="136"/>
<source>settings saved</source>
<translation>impostazioni salvate</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="143"/>
<source>Test connection</source>
<translation>Prova connessione</translation>
</message> </message>
</context> </context>
</TS> </TS>