Add support for the ventilation interface
This commit is contained in:
parent
1682405447
commit
81bc57aff6
@ -269,6 +269,8 @@ Interfaces::Interfaces(QObject *parent) : QAbstractListModel(parent)
|
||||
addInterface("thermostat", tr("Thermostats"));
|
||||
addStateType("thermostat", "targetTemperature", QVariant::Double, true, tr("Target temperature"), tr("Target temperature changed"), tr("Set target temperature"));
|
||||
|
||||
addInterface("ventilation", tr("Ventilation"), {"power"});
|
||||
|
||||
addInterface("volumecontroller", tr("Speakers"));
|
||||
addActionType("volumecontroller", "increaseVolume", tr("Increase volume"), new ParamTypes());
|
||||
addActionType("volumecontroller", "decreaseVolume", tr("Decrease volume"), new ParamTypes());
|
||||
|
||||
@ -214,5 +214,6 @@
|
||||
<file>ui/components/SettingsPageSectionHeader.qml</file>
|
||||
<file>ui/grouping/GroupInterfacesPage.qml</file>
|
||||
<file>ui/connection/CertificateErrorDialog.qml</file>
|
||||
<file>ui/devicepages/VentilationDevicePage.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@ -106,7 +106,32 @@ ApplicationWindow {
|
||||
}
|
||||
property alias _discovery: discovery
|
||||
|
||||
property var supportedInterfaces: ["light", "weather", "media", "garagegate", "awning", "shutter", "blind", "powersocket", "heating", "doorbell", "sensor", "irrigation", "smartmeter", "evcharger", "fingerprintreader", "smartlock", "button", "notifications", "inputtrigger", "outputtrigger", "gateway", "account"]
|
||||
property var supportedInterfaces: [
|
||||
"light",
|
||||
"weather",
|
||||
"media",
|
||||
"garagegate",
|
||||
"awning",
|
||||
"shutter",
|
||||
"blind",
|
||||
"powersocket",
|
||||
"heating",
|
||||
"doorbell",
|
||||
"sensor",
|
||||
"irrigation",
|
||||
"ventilation",
|
||||
"smartmeter",
|
||||
"evcharger",
|
||||
"fingerprintreader",
|
||||
"smartlock",
|
||||
"button",
|
||||
"notifications",
|
||||
"inputtrigger",
|
||||
"outputtrigger",
|
||||
"gateway",
|
||||
"account"
|
||||
]
|
||||
|
||||
function interfaceToString(name) {
|
||||
switch(name) {
|
||||
case "light":
|
||||
@ -173,6 +198,8 @@ ApplicationWindow {
|
||||
return qsTr("Smartlocks")
|
||||
case "irrigation":
|
||||
return qsTr("Irrigation");
|
||||
case "ventilation":
|
||||
return qsTr("Ventilation")
|
||||
case "uncategorized":
|
||||
return qsTr("Uncategorized")
|
||||
default:
|
||||
@ -287,6 +314,8 @@ ApplicationWindow {
|
||||
return Qt.resolvedUrl("images/stock_link.svg")
|
||||
case "irrigation":
|
||||
return Qt.resolvedUrl("images/irrigation.svg")
|
||||
case "ventilation":
|
||||
return Qt.resolvedUrl("images/ventilation.svg")
|
||||
case "power":
|
||||
return Qt.resolvedUrl("images/system-shutdown.svg")
|
||||
case "account":
|
||||
@ -318,7 +347,8 @@ ApplicationWindow {
|
||||
"heating" : "gainsboro",
|
||||
"thermostat": "dodgerblue",
|
||||
"irrigation": "lightblue",
|
||||
"windspeedsensor": "blue"
|
||||
"windspeedsensor": "blue",
|
||||
"ventilation": "lightblue"
|
||||
}
|
||||
|
||||
function interfaceToColor(name) {
|
||||
@ -354,6 +384,9 @@ ApplicationWindow {
|
||||
case "irrigation":
|
||||
//: Select ...
|
||||
return qsTr("irrigation");
|
||||
case "ventilation":
|
||||
//: Select ...
|
||||
return qsTr("ventilation");
|
||||
case "power":
|
||||
//: Select ...
|
||||
return qsTr("switchable thing")
|
||||
@ -438,6 +471,8 @@ ApplicationWindow {
|
||||
page = "DoorbellDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("irrigation") >= 0) {
|
||||
page = "IrrigationDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("ventilation") >= 0) {
|
||||
page = "VentilationDevicePage.qml";
|
||||
} else {
|
||||
page = "GenericDevicePage.qml";
|
||||
}
|
||||
|
||||
104
nymea-app/ui/devicepages/VentilationDevicePage.qml
Normal file
104
nymea-app/ui/devicepages/VentilationDevicePage.qml
Normal file
@ -0,0 +1,104 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
* This project including source code and documentation is protected by
|
||||
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||
* reproduction, publication, editing and translation, are reserved. The use of
|
||||
* this project is subject to the terms of a license agreement to be concluded
|
||||
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||
* under https://nymea.io/license
|
||||
*
|
||||
* GNU General Public License Usage
|
||||
* Alternatively, this project may be redistributed and/or modified under the
|
||||
* terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, GNU version 3. This project is distributed in the hope that it
|
||||
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this project. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For any further details and any questions please contact us under
|
||||
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||
* https://nymea.io/license/faq
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Material 2.1
|
||||
import Nymea 1.0
|
||||
import "../components"
|
||||
|
||||
DevicePageBase {
|
||||
id: root
|
||||
|
||||
readonly property var powerStateType: deviceClass.stateTypes.findByName("power")
|
||||
readonly property var powerState: device.states.getState(powerStateType.id)
|
||||
readonly property var powerActionType: deviceClass.actionTypes.findByName("power");
|
||||
|
||||
GridLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: app.margins
|
||||
columns: app.landscape ? 2 : 1
|
||||
rowSpacing: app.margins
|
||||
columnSpacing: app.margins
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: Math.max(app.iconSize * 6, parent.width / 5)
|
||||
Layout.preferredHeight: width
|
||||
Layout.topMargin: app.margins
|
||||
Layout.bottomMargin: app.landscape ? app.margins : 0
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.rowSpan: app.landscape ? 4 : 1
|
||||
Layout.fillHeight: true
|
||||
|
||||
AbstractButton {
|
||||
height: Math.min(parent.height, parent.width)
|
||||
width: height
|
||||
anchors.centerIn: parent
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "transparent"
|
||||
border.color: root.powerState.value === true ? app.accentColor : bulbIcon.keyColor
|
||||
border.width: 4
|
||||
radius: width / 2
|
||||
}
|
||||
|
||||
ColorIcon {
|
||||
id: bulbIcon
|
||||
anchors.fill: parent
|
||||
anchors.margins: app.margins * 1.5
|
||||
name: "../images/ventilation.svg"
|
||||
color: root.powerState.value === true ? app.accentColor : keyColor
|
||||
|
||||
PropertyAnimation on rotation {
|
||||
running: root.powerState.value === true
|
||||
duration: 2000
|
||||
from: 0
|
||||
to: 360
|
||||
loops: Animation.Infinite
|
||||
onDurationChanged: {
|
||||
running = false;
|
||||
running = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
onClicked: {
|
||||
var params = []
|
||||
var param = {}
|
||||
param["paramTypeId"] = root.powerActionType.paramTypes.get(0).id;
|
||||
param["value"] = !root.powerState.value;
|
||||
params.push(param)
|
||||
engine.deviceManager.executeAction(root.device.id, root.powerStateType.id, params);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -150,6 +150,8 @@ MainPageTile {
|
||||
case "awning":
|
||||
case "extendedawning":
|
||||
case "powersocket":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
return buttonComponent
|
||||
case "media":
|
||||
return mediaControlComponent
|
||||
@ -239,6 +241,8 @@ MainPageTile {
|
||||
case "media":
|
||||
return devicesProxy.get(0).name;
|
||||
case "light":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
case "powersocket":
|
||||
var count = 0;
|
||||
for (var i = 0; i < devicesProxy.count; i++) {
|
||||
@ -294,6 +298,8 @@ MainPageTile {
|
||||
switch (iface.name) {
|
||||
case "media":
|
||||
case "light":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
return ""
|
||||
case "garagegate":
|
||||
case "blind":
|
||||
@ -314,6 +320,8 @@ MainPageTile {
|
||||
switch (iface.name) {
|
||||
case "light":
|
||||
case "media":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
break;
|
||||
case "garagegate":
|
||||
case "shutter":
|
||||
@ -350,6 +358,8 @@ MainPageTile {
|
||||
switch (iface.name) {
|
||||
case "media":
|
||||
case "light":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
return ""
|
||||
case "garagegate":
|
||||
case "blind":
|
||||
@ -370,6 +380,8 @@ MainPageTile {
|
||||
switch (iface.name) {
|
||||
case "light":
|
||||
case "media":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
break;
|
||||
case "garagegate":
|
||||
case "shutter":
|
||||
@ -414,6 +426,8 @@ MainPageTile {
|
||||
""
|
||||
case "light":
|
||||
case "powersocket":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
return "../images/system-shutdown.svg"
|
||||
case "garagegate":
|
||||
case "blind":
|
||||
@ -433,6 +447,8 @@ MainPageTile {
|
||||
switch (iface.name) {
|
||||
case "light":
|
||||
case "powersocket":
|
||||
case "irrigation":
|
||||
case "ventilation":
|
||||
var allOff = true;
|
||||
for (var i = 0; i < devicesProxy.count; i++) {
|
||||
var device = devicesProxy.get(i);
|
||||
|
||||
Reference in New Issue
Block a user