import QtQuick 2.2 import Sailfish.Silica 1.0 import "../components" // Comandi secondari: quelli che non stanno nella home. In cima lo stato // attuale, cosi' non si preme alla cieca. Page { id: page allowedOrientations: Orientation.All property string notice: "" property bool noticeIsError: false function raw(key) { return api.summary[key] } function flag(key) { return page.raw(key) ? qsTr("yes") : qsTr("no") } function stato(key) { return api.modeLabel(page.raw(key)) } function showNotice(msg, isError) { page.notice = msg 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 { anchors.fill: parent contentHeight: col.height + Theme.paddingLarge Column { id: col width: parent.width spacing: Theme.paddingSmall PageHeader { title: qsTr("Other commands") } Label { visible: page.notice.length > 0 x: Theme.horizontalPageMargin width: parent.width - 2 * Theme.horizontalPageMargin text: page.notice color: page.noticeIsError ? Theme.errorColor : Theme.highlightColor font.pixelSize: Theme.fontSizeSmall wrapMode: Text.Wrap } // ---- stato attuale -------------------------------------------- // SectionHeader { text: qsTr("Current state") } InfoRow { label: qsTr("Away mode"); value: page.flag("away_mode") } InfoRow { label: qsTr("Night mode"); value: page.flag("night_mode") } InfoRow { label: qsTr("Forced heating"); value: page.flag("force_heating") } InfoRow { label: qsTr("Hot water active"); value: page.flag("hot_water_heating") } InfoRow { label: qsTr("Pump"); value: page.stato("pump_active_state") } InfoRow { label: qsTr("Allowed modes"); value: page.stato("configured_modes") } // ---- assenza --------------------------------------------------- // SectionHeader { text: qsTr("Away mode") } ActionButton { text: qsTr("Turn away mode on") onTriggered: api.sendCommand("away_mode_on") } ActionButton { text: qsTr("Turn away mode off") onTriggered: api.sendCommand("away_mode_off") } // ---- rumore ---------------------------------------------------- // SectionHeader { text: qsTr("Noise") } ActionButton { text: qsTr("Night mode for one hour") onTriggered: api.sendCommand("night_mode_1h") } // ---- riscaldamento --------------------------------------------- // SectionHeader { text: qsTr("Heating") } ActionButton { text: qsTr("Force heating") confirmText: qsTr("Starting forced heating") onTriggered: api.sendCommand("force_heating_on") } 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 { x: Theme.horizontalPageMargin width: parent.width - 2 * Theme.horizontalPageMargin text: qsTr("Commands go through the bridge and may take a few seconds. The status refreshes by itself afterwards.") color: Theme.secondaryColor font.pixelSize: Theme.fontSizeExtraSmall wrapMode: Text.Wrap } } } Component.onCompleted: { if (api.configured) api.refresh() } }