diff --git a/libnymea-app/thingmanager.cpp b/libnymea-app/thingmanager.cpp index d2ffd92e..8cad1847 100644 --- a/libnymea-app/thingmanager.cpp +++ b/libnymea-app/thingmanager.cpp @@ -847,9 +847,7 @@ ParamType *ThingManager::unpackParamType(const QVariantMap ¶mTypeMap, QObjec paramType->setAllowedValues(paramTypeMap.value("allowedValues").toList()); paramType->setInputType(stringToInputType(paramTypeMap.value("inputType").toString())); paramType->setReadOnly(paramTypeMap.value("readOnly").toBool()); - QPair unit = stringToUnit(paramTypeMap.value("unit").toString()); - paramType->setUnit(unit.first); - paramType->setUnitString(unit.second); + paramType->setUnit(stringToUnit(paramTypeMap.value("unit").toString())); return paramType; } @@ -865,10 +863,7 @@ StateType *ThingManager::unpackStateType(const QVariantMap &stateTypeMap, QObjec stateType->setType(stateTypeMap.value("type").toString()); stateType->setMinValue(stateTypeMap.value("minValue")); stateType->setMaxValue(stateTypeMap.value("maxValue")); - - QPair unit = stringToUnit(stateTypeMap.value("unit").toString()); - stateType->setUnit(unit.first); - stateType->setUnitString(unit.second); + stateType->setUnit(stringToUnit(stateTypeMap.value("unit").toString())); QMetaEnum metaEnum = QMetaEnum::fromType(); Types::IOType ioType = static_cast(metaEnum.keyToValue(stateTypeMap.value("ioType").toByteArray())); @@ -1035,117 +1030,121 @@ ThingClass::SetupMethod ThingManager::stringToSetupMethod(const QString &setupMe return ThingClass::SetupMethodJustAdd; } -QPair ThingManager::stringToUnit(const QString &unitString) +Types::Unit ThingManager::stringToUnit(const QString &unitString) { - if (unitString == "UnitNone") { - return QPair(Types::UnitNone, ""); - } else if (unitString == "UnitSeconds") { - return QPair(Types::UnitSeconds, "s"); - } else if (unitString == "UnitMinutes") { - return QPair(Types::UnitMinutes, "m"); - } else if (unitString == "UnitHours") { - return QPair(Types::UnitHours, "h"); - } else if (unitString == "UnitUnixTime") { - return QPair(Types::UnitUnixTime, "datetime"); - } else if (unitString == "UnitMeterPerSecond") { - return QPair(Types::UnitMeterPerSecond, "m/s"); - } else if (unitString == "UnitKiloMeterPerHour") { - return QPair(Types::UnitKiloMeterPerHour, "km/h"); - } else if (unitString == "UnitDegree") { - return QPair(Types::UnitDegree, "°"); - } else if (unitString == "UnitRadiant") { - return QPair(Types::UnitRadiant, "rad"); - } else if (unitString == "UnitDegreeCelsius") { - return QPair(Types::UnitDegreeCelsius, "°C"); - } else if (unitString == "UnitDegreeKelvin") { - return QPair(Types::UnitDegreeKelvin, "°K"); - } else if (unitString == "UnitMired") { - return QPair(Types::UnitMired, "mir"); - } else if (unitString == "UnitMilliBar") { - return QPair(Types::UnitMilliBar, "mbar"); - } else if (unitString == "UnitBar") { - return QPair(Types::UnitBar, "bar"); - } else if (unitString == "UnitPascal") { - return QPair(Types::UnitPascal, "Pa"); - } else if (unitString == "UnitHectoPascal") { - return QPair(Types::UnitHectoPascal, "hPa"); - } else if (unitString == "UnitAtmosphere") { - return QPair(Types::UnitAtmosphere, "atm"); - } else if (unitString == "UnitLumen") { - return QPair(Types::UnitLumen, "lm"); - } else if (unitString == "UnitLux") { - return QPair(Types::UnitLux, "lx"); - } else if (unitString == "UnitCandela") { - return QPair(Types::UnitCandela, "cd"); - } else if (unitString == "UnitMilliMeter") { - return QPair(Types::UnitMilliMeter, "mm"); - } else if (unitString == "UnitCentiMeter") { - return QPair(Types::UnitCentiMeter, "cm"); - } else if (unitString == "UnitMeter") { - return QPair(Types::UnitMeter, "m"); - } else if (unitString == "UnitKiloMeter") { - return QPair(Types::UnitKiloMeter, "km"); - } else if (unitString == "UnitGram") { - return QPair(Types::UnitGram, "g"); - } else if (unitString == "UnitKiloGram") { - return QPair(Types::UnitKiloGram, "kg"); - } else if (unitString == "UnitDezibel") { - return QPair(Types::UnitDezibel, "db"); - } else if (unitString == "UnitBpm") { - return QPair(Types::UnitBpm, "bpm"); - } else if (unitString == "UnitKiloByte") { - return QPair(Types::UnitKiloByte, "kB"); - } else if (unitString == "UnitMegaByte") { - return QPair(Types::UnitMegaByte, "MB"); - } else if (unitString == "UnitGigaByte") { - return QPair(Types::UnitGigaByte, "GB"); - } else if (unitString == "UnitTeraByte") { - return QPair(Types::UnitTeraByte, "TB"); - } else if (unitString == "UnitMilliWatt") { - return QPair(Types::UnitMilliWatt, "mW"); - } else if (unitString == "UnitWatt") { - return QPair(Types::UnitWatt, "W"); - } else if (unitString == "UnitKiloWatt") { - return QPair(Types::UnitKiloWatt, "kW"); - } else if (unitString == "UnitKiloWattHour") { - return QPair(Types::UnitKiloWattHour, "kWh"); - } else if (unitString == "UnitEuroPerMegaWattHour") { - return QPair(Types::UnitEuroPerMegaWattHour, "€/MWh"); - } else if (unitString == "UnitEuroCentPerKiloWattHour") { - return QPair(Types::UnitEuroCentPerKiloWattHour, "ct/kWh"); - } else if (unitString == "UnitPercentage") { - return QPair(Types::UnitPercentage, "%"); - } else if (unitString == "UnitPartsPerMillion") { - return QPair(Types::UnitPartsPerMillion, "ppm"); - } else if (unitString == "UnitEuro") { - return QPair(Types::UnitEuro, "€"); - } else if (unitString == "UnitDollar") { - return QPair(Types::UnitDollar, "$"); - } else if (unitString == "UnitHerz") { // legacy - return QPair(Types::UnitHertz, "Hz"); - } else if (unitString == "UnitHertz") { - return QPair(Types::UnitHertz, "Hz"); - } else if (unitString == "UnitAmpere") { - return QPair(Types::UnitAmpere, "A"); - } else if (unitString == "UnitMilliAmpere") { - return QPair(Types::UnitMilliAmpere, "mA"); - } else if (unitString == "UnitVolt") { - return QPair(Types::UnitVolt, "V"); - } else if (unitString == "UnitMilliVolt") { - return QPair(Types::UnitMilliVolt, "mV"); - } else if (unitString == "UnitVoltAmpere") { - return QPair(Types::UnitVoltAmpere, "VA"); - } else if (unitString == "UnitVoltAmpereReactive") { - return QPair(Types::UnitVoltAmpereReactive, "VAR"); - } else if (unitString == "UnitAmpereHour") { - return QPair(Types::UnitAmpereHour, "Ah"); - } else if (unitString == "UnitMicroSiemensPerCentimeter") { - return QPair(Types::UnitMicroSiemensPerCentimeter, "µS/cm"); - } else if (unitString == "UnitDuration") { - return QPair(Types::UnitDuration, "s"); - } + QMetaEnum metaEnum = QMetaEnum::fromType(); + Types::Unit unit = static_cast(metaEnum.keyToValue(unitString.toUtf8())); + return unit; - return QPair(Types::UnitNone, ""); +// if (unitString == "UnitNone") { +// return QPair(Types::UnitNone, ""); +// } else if (unitString == "UnitSeconds") { +// return QPair(Types::UnitSeconds, "s"); +// } else if (unitString == "UnitMinutes") { +// return QPair(Types::UnitMinutes, "m"); +// } else if (unitString == "UnitHours") { +// return QPair(Types::UnitHours, "h"); +// } else if (unitString == "UnitUnixTime") { +// return QPair(Types::UnitUnixTime, "datetime"); +// } else if (unitString == "UnitMeterPerSecond") { +// return QPair(Types::UnitMeterPerSecond, "m/s"); +// } else if (unitString == "UnitKiloMeterPerHour") { +// return QPair(Types::UnitKiloMeterPerHour, "km/h"); +// } else if (unitString == "UnitDegree") { +// return QPair(Types::UnitDegree, "°"); +// } else if (unitString == "UnitRadiant") { +// return QPair(Types::UnitRadiant, "rad"); +// } else if (unitString == "UnitDegreeCelsius") { +// return QPair(Types::UnitDegreeCelsius, "°C"); +// } else if (unitString == "UnitDegreeKelvin") { +// return QPair(Types::UnitDegreeKelvin, "°K"); +// } else if (unitString == "UnitMired") { +// return QPair(Types::UnitMired, "mir"); +// } else if (unitString == "UnitMilliBar") { +// return QPair(Types::UnitMilliBar, "mbar"); +// } else if (unitString == "UnitBar") { +// return QPair(Types::UnitBar, "bar"); +// } else if (unitString == "UnitPascal") { +// return QPair(Types::UnitPascal, "Pa"); +// } else if (unitString == "UnitHectoPascal") { +// return QPair(Types::UnitHectoPascal, "hPa"); +// } else if (unitString == "UnitAtmosphere") { +// return QPair(Types::UnitAtmosphere, "atm"); +// } else if (unitString == "UnitLumen") { +// return QPair(Types::UnitLumen, "lm"); +// } else if (unitString == "UnitLux") { +// return QPair(Types::UnitLux, "lx"); +// } else if (unitString == "UnitCandela") { +// return QPair(Types::UnitCandela, "cd"); +// } else if (unitString == "UnitMilliMeter") { +// return QPair(Types::UnitMilliMeter, "mm"); +// } else if (unitString == "UnitCentiMeter") { +// return QPair(Types::UnitCentiMeter, "cm"); +// } else if (unitString == "UnitMeter") { +// return QPair(Types::UnitMeter, "m"); +// } else if (unitString == "UnitKiloMeter") { +// return QPair(Types::UnitKiloMeter, "km"); +// } else if (unitString == "UnitGram") { +// return QPair(Types::UnitGram, "g"); +// } else if (unitString == "UnitKiloGram") { +// return QPair(Types::UnitKiloGram, "kg"); +// } else if (unitString == "UnitDezibel") { +// return QPair(Types::UnitDezibel, "db"); +// } else if (unitString == "UnitBpm") { +// return QPair(Types::UnitBpm, "bpm"); +// } else if (unitString == "UnitKiloByte") { +// return QPair(Types::UnitKiloByte, "kB"); +// } else if (unitString == "UnitMegaByte") { +// return QPair(Types::UnitMegaByte, "MB"); +// } else if (unitString == "UnitGigaByte") { +// return QPair(Types::UnitGigaByte, "GB"); +// } else if (unitString == "UnitTeraByte") { +// return QPair(Types::UnitTeraByte, "TB"); +// } else if (unitString == "UnitMilliWatt") { +// return QPair(Types::UnitMilliWatt, "mW"); +// } else if (unitString == "UnitWatt") { +// return QPair(Types::UnitWatt, "W"); +// } else if (unitString == "UnitKiloWatt") { +// return QPair(Types::UnitKiloWatt, "kW"); +// } else if (unitString == "UnitKiloWattHour") { +// return QPair(Types::UnitKiloWattHour, "kWh"); +// } else if (unitString == "UnitEuroPerMegaWattHour") { +// return QPair(Types::UnitEuroPerMegaWattHour, "€/MWh"); +// } else if (unitString == "UnitEuroCentPerKiloWattHour") { +// return QPair(Types::UnitEuroCentPerKiloWattHour, "ct/kWh"); +// } else if (unitString == "UnitPercentage") { +// return QPair(Types::UnitPercentage, "%"); +// } else if (unitString == "UnitPartsPerMillion") { +// return QPair(Types::UnitPartsPerMillion, "ppm"); +// } else if (unitString == "UnitEuro") { +// return QPair(Types::UnitEuro, "€"); +// } else if (unitString == "UnitDollar") { +// return QPair(Types::UnitDollar, "$"); +// } else if (unitString == "UnitHerz") { // legacy +// return QPair(Types::UnitHertz, "Hz"); +// } else if (unitString == "UnitHertz") { +// return QPair(Types::UnitHertz, "Hz"); +// } else if (unitString == "UnitAmpere") { +// return QPair(Types::UnitAmpere, "A"); +// } else if (unitString == "UnitMilliAmpere") { +// return QPair(Types::UnitMilliAmpere, "mA"); +// } else if (unitString == "UnitVolt") { +// return QPair(Types::UnitVolt, "V"); +// } else if (unitString == "UnitMilliVolt") { +// return QPair(Types::UnitMilliVolt, "mV"); +// } else if (unitString == "UnitVoltAmpere") { +// return QPair(Types::UnitVoltAmpere, "VA"); +// } else if (unitString == "UnitVoltAmpereReactive") { +// return QPair(Types::UnitVoltAmpereReactive, "VAR"); +// } else if (unitString == "UnitAmpereHour") { +// return QPair(Types::UnitAmpereHour, "Ah"); +// } else if (unitString == "UnitMicroSiemensPerCentimeter") { +// return QPair(Types::UnitMicroSiemensPerCentimeter, "µS/cm"); +// } else if (unitString == "UnitDuration") { +// return QPair(Types::UnitDuration, "s"); +// } + +// return QPair(Types::UnitNone, ""); } Types::InputType ThingManager::stringToInputType(const QString &inputTypeString) diff --git a/libnymea-app/thingmanager.h b/libnymea-app/thingmanager.h index 75ee4a2a..94adb0fd 100644 --- a/libnymea-app/thingmanager.h +++ b/libnymea-app/thingmanager.h @@ -165,7 +165,7 @@ private: static Thing::ThingError errorFromString(const QByteArray &thingErrorString); static ThingClass::SetupMethod stringToSetupMethod(const QString &setupMethodString); - static QPair stringToUnit(const QString &unitString); + static Types::Unit stringToUnit(const QString &unitString); static Types::InputType stringToInputType(const QString &inputTypeString); private: diff --git a/libnymea-app/types/paramtype.cpp b/libnymea-app/types/paramtype.cpp index 9e0d07c3..457153e7 100644 --- a/libnymea-app/types/paramtype.cpp +++ b/libnymea-app/types/paramtype.cpp @@ -135,16 +135,6 @@ void ParamType::setInputType(const Types::InputType &inputType) m_inputType = inputType; } -QString ParamType::unitString() const -{ - return m_unitString; -} - -void ParamType::setUnitString(const QString &unitString) -{ - m_unitString = unitString; -} - Types::Unit ParamType::unit() const { return m_unit; diff --git a/libnymea-app/types/paramtype.h b/libnymea-app/types/paramtype.h index 32f2f7ac..942b4a39 100644 --- a/libnymea-app/types/paramtype.h +++ b/libnymea-app/types/paramtype.h @@ -51,7 +51,6 @@ class ParamType : public QObject Q_PROPERTY(QVariant maxValue READ maxValue CONSTANT) Q_PROPERTY(Types::InputType inputType READ inputType CONSTANT) Q_PROPERTY(Types::Unit unit READ unit CONSTANT) - Q_PROPERTY(QString unitString READ unitString CONSTANT) Q_PROPERTY(QVariantList allowedValues READ allowedValues CONSTANT) Q_PROPERTY(bool readOnly READ readOnly CONSTANT) @@ -89,9 +88,6 @@ public: Types::Unit unit() const; void setUnit(const Types::Unit &unit); - QString unitString() const; - void setUnitString(const QString &unitString); - QVariantList allowedValues() const; void setAllowedValues(const QList allowedValues); @@ -109,7 +105,6 @@ private: QVariant m_maxValue; Types::InputType m_inputType; Types::Unit m_unit; - QString m_unitString; QVariantList m_allowedValues; bool m_readOnly; }; diff --git a/libnymea-app/types/paramtypes.cpp b/libnymea-app/types/paramtypes.cpp index 9192b2ad..049790b4 100644 --- a/libnymea-app/types/paramtypes.cpp +++ b/libnymea-app/types/paramtypes.cpp @@ -96,8 +96,6 @@ QVariant ParamTypes::data(const QModelIndex &index, int role) const return paramType->maxValue(); } else if (role == InputTypeRole) { return paramType->inputType(); - } else if (role == UnitStringRole) { - return paramType->unitString(); } else if (role == AllowedValuesRole) { return paramType->allowedValues(); } else if (role == ReadOnlyRole) { @@ -134,7 +132,6 @@ QHash ParamTypes::roleNames() const roles[MinValueRole] = "minValue"; roles[MaxValueRole] = "maxValue"; roles[InputTypeRole] = "inputType"; - roles[UnitStringRole] = "unitString"; roles[AllowedValuesRole] = "allowedValues"; roles[ReadOnlyRole] = "readOnly"; return roles; diff --git a/libnymea-app/types/paramtypes.h b/libnymea-app/types/paramtypes.h index 2337b278..fe611f1e 100644 --- a/libnymea-app/types/paramtypes.h +++ b/libnymea-app/types/paramtypes.h @@ -49,7 +49,6 @@ public: MinValueRole, MaxValueRole, InputTypeRole, - UnitStringRole, AllowedValuesRole, ReadOnlyRole }; diff --git a/libnymea-app/types/statetype.cpp b/libnymea-app/types/statetype.cpp index 66c0372d..973763f8 100644 --- a/libnymea-app/types/statetype.cpp +++ b/libnymea-app/types/statetype.cpp @@ -120,16 +120,6 @@ void StateType::setUnit(const Types::Unit &unit) m_unit = unit; } -QString StateType::unitString() const -{ - return m_unitString; -} - -void StateType::setUnitString(const QString &unitString) -{ - m_unitString = unitString; -} - QVariant StateType::minValue() const { return m_minValue; diff --git a/libnymea-app/types/statetype.h b/libnymea-app/types/statetype.h index 3fb4ccc9..930fd6e3 100644 --- a/libnymea-app/types/statetype.h +++ b/libnymea-app/types/statetype.h @@ -49,7 +49,6 @@ class StateType : public QObject Q_PROPERTY(QVariantList allowedValues READ allowedValues CONSTANT) Q_PROPERTY(Types::Unit unit READ unit CONSTANT) Q_PROPERTY(Types::IOType ioType READ ioType CONSTANT) - Q_PROPERTY(QString unitString READ unitString CONSTANT) Q_PROPERTY(QVariant minValue READ minValue CONSTANT) Q_PROPERTY(QVariant maxValue READ maxValue CONSTANT) @@ -84,9 +83,6 @@ public: Types::IOType ioType() const; void setIOType(Types::IOType ioType); - QString unitString() const; - void setUnitString(const QString &unitString); - QVariant minValue() const; void setMinValue(const QVariant &minValue); @@ -103,7 +99,6 @@ private: QVariantList m_allowedValues; Types::Unit m_unit = Types::UnitNone; Types::IOType m_ioType = Types::IOTypeNone; - QString m_unitString; QVariant m_minValue; QVariant m_maxValue; }; diff --git a/libnymea-app/types/statetypes.cpp b/libnymea-app/types/statetypes.cpp index e4a6b679..5ec99c33 100644 --- a/libnymea-app/types/statetypes.cpp +++ b/libnymea-app/types/statetypes.cpp @@ -83,8 +83,6 @@ QVariant StateTypes::data(const QModelIndex &index, int role) const return stateType->type(); case RoleDefaultValue: return stateType->defaultValue(); - case RoleUnitString: - return stateType->unitString(); case RoleUnit: return stateType->unit(); case RoleIOType: diff --git a/libnymea-app/types/types.cpp b/libnymea-app/types/types.cpp index e9618a00..4ddf5fc6 100644 --- a/libnymea-app/types/types.cpp +++ b/libnymea-app/types/types.cpp @@ -94,6 +94,9 @@ QString Types::toUiUnit(Types::Unit unit) const case Types::UnitBar: uiUnit = Types::UnitPoundsPerSquareInch; break; + case Types::UnitLiter: + uiUnit = Types::UnitFluidOunce; + break; default: uiUnit = unit; } @@ -223,6 +226,16 @@ QString Types::toUiUnit(Types::Unit unit) const return "mph"; case Types::UnitPoundsPerSquareInch: return "psi"; + case Types::UnitNewton: + return "N"; + case Types::UnitNewtonMeter: + return "Nm"; + case Types::UnitRpm: + return "rpm"; + case Types::UnitMilligramPerLiter: + return "mg/l"; + case Types::UnitLiter: + return "l"; } return ""; @@ -254,6 +267,8 @@ QVariant Types::toUiValue(const QVariant &value, Types::Unit unit) const return value.toDouble() * 0.01450377; case Types::UnitBar: // To pounds per square inch (psi) return value.toDouble() * 14.50377; + case Types::UnitLiter: // To fl. oz + return value.toDouble() * 33.814; default: return value; } diff --git a/libnymea-app/types/types.h b/libnymea-app/types/types.h index 7d11107d..60609ef9 100644 --- a/libnymea-app/types/types.h +++ b/libnymea-app/types/types.h @@ -107,6 +107,11 @@ public: UnitAmpereHour, UnitMicroSiemensPerCentimeter, UnitDuration, + UnitNewton, + UnitNewtonMeter, + UnitRpm, + UnitMilligramPerLiter, + UnitLiter, // Those do not exist in nymea:core at this point, Adding them for easier conversion to imperial UnitDegreeFahrenheit, @@ -117,7 +122,8 @@ public: UnitMile, UnitFootPerSecond, UnitMilePerHour, - UnitPoundsPerSquareInch + UnitPoundsPerSquareInch, + UnitFluidOunce }; Q_ENUM(Unit) diff --git a/nymea-app/ui/Nymea.qml b/nymea-app/ui/Nymea.qml index 933c721a..33fdb8e5 100644 --- a/nymea-app/ui/Nymea.qml +++ b/nymea-app/ui/Nymea.qml @@ -305,6 +305,8 @@ ApplicationWindow { return Qt.resolvedUrl("images/sensors/windspeed.svg") case "watersensor": return Qt.resolvedUrl("images/sensors/water.svg") + case "waterlevelsensor": + return Qt.resolvedUrl("images/sensors/water.svg") case "o2sensor": return Qt.resolvedUrl("images/sensors/o2.svg") case "phsensor": diff --git a/nymea-app/ui/StyleBase.qml b/nymea-app/ui/StyleBase.qml index fd8792c3..fad87413 100644 --- a/nymea-app/ui/StyleBase.qml +++ b/nymea-app/ui/StyleBase.qml @@ -87,6 +87,7 @@ Item { "windspeedsensor": "blue", "ventilation": "lightblue", "watersensor": "aqua", + "waterlevelsensor": "aqua", "phsensor": "green", "o2sensor": "lightblue", "orpsensor": "yellow", diff --git a/nymea-app/ui/delegates/InterfaceTile.qml b/nymea-app/ui/delegates/InterfaceTile.qml index 40f39ad7..feae621c 100644 --- a/nymea-app/ui/delegates/InterfaceTile.qml +++ b/nymea-app/ui/delegates/InterfaceTile.qml @@ -317,6 +317,7 @@ MainPageTile { ListElement { ifaceName: "closablesensor"; stateName: "closed" } ListElement { ifaceName: "lightsensor"; stateName: "lightIntensity" } ListElement { ifaceName: "watersensor"; stateName: "waterDetected" } + ListElement { ifaceName: "waterlevelsensor"; stateName: "waterLevel" } ListElement { ifaceName: "cosensor"; stateName: "co" } ListElement { ifaceName: "co2sensor"; stateName: "co2" } ListElement { ifaceName: "gassensor"; stateName: "gas" } diff --git a/nymea-app/ui/delegates/ThingTile.qml b/nymea-app/ui/delegates/ThingTile.qml index ea20f36d..b8420799 100644 --- a/nymea-app/ui/delegates/ThingTile.qml +++ b/nymea-app/ui/delegates/ThingTile.qml @@ -81,6 +81,8 @@ MainPageTile { return sensorsComponent; case "cleaningrobot": return buttonComponent; + case "ventilation": + return ventilationComponent; } } } @@ -140,6 +142,57 @@ MainPageTile { } } + Component { + id: ventilationComponent + RowLayout { + property Thing thing: null + readonly property State powerState: thing.stateByName("power") + readonly property State flowRateState: thing.stateByName("flowRate") + + ThrottledSlider { + Layout.fillWidth: true + Layout.leftMargin: app.margins / 2 + Layout.alignment: Qt.AlignVCenter + opacity: flowRateState ? 1 : 0 + enabled: opacity > 0 + from: 0 + to: 100 + value: flowRateState ? flowRateState.value : 0 + onMoved: { + var actionType = thing.thingClass.actionTypes.findByName("flowRate"); + var params = []; + var powerParam = {} + powerParam["paramTypeId"] = actionType.paramTypes.get(0).id; + powerParam["value"] = value; + params.push(powerParam) + engine.thingManager.executeAction(thing.id, actionType.id, params); + } + } + + ItemDelegate { + Layout.preferredWidth: Style.iconSize + Layout.preferredHeight: width + Layout.rightMargin: app.margins / 2 + Layout.alignment: Qt.AlignVCenter + padding: 0; topPadding: 0; bottomPadding: 0 + + contentItem: ColorIcon { + name: "../images/ventilation.svg" + color: powerState.value === true ? Style.accentColor : Style.iconColor + } + onClicked: { + var actionType = thing.thingClass.actionTypes.findByName("power"); + var params = []; + var powerParam = {} + powerParam["paramTypeId"] = actionType.paramTypes.get(0).id; + powerParam["value"] = !powerState.value; + params.push(powerParam) + engine.thingManager.executeAction(thing.id, actionType.id, params); + } + } + } + } + Component { id: sensorsComponent RowLayout { @@ -209,6 +262,15 @@ MainPageTile { if (thing.thingClass.interfaces.indexOf("o2sensor") >= 0) { tmp.push({iface: "o2sensor", state: "o2saturation"}) } + if (thing.thingClass.interfaces.indexOf("closablesensor") >= 0) { + tmp.push({iface: "closablesensor", state: "closed"}) + } + if (thing.thingClass.interfaces.indexOf("watersensor") >= 0) { + tmp.push({iface: "watersensor", state: "waterDetected"}) + } + if (thing.thingClass.interfaces.indexOf("waterlevelsensor") >= 0) { + tmp.push({iface: "waterlevelsensor", state: "waterLevel"}) + } if (thing.thingClass.interfaces.indexOf("weather") >= 0) { tmp.push({iface: "temperaturesensor", state: "temperature"}); diff --git a/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml b/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml index 196b3a01..f60e8072 100644 --- a/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml +++ b/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml @@ -89,6 +89,7 @@ ThingsListPageBase { ListElement { interfaceName: "heating"; stateName: "power" } ListElement { interfaceName: "thermostat"; stateName: "targetTemperature" } ListElement { interfaceName: "watersensor"; stateName: "waterDetected" } + ListElement { interfaceName: "waterlevelsensor"; stateName: "waterLevel" } ListElement { interfaceName: "o2sensor"; stateName: "o2saturation" } ListElement { interfaceName: "phsensor"; stateName: "ph" } ListElement { interfaceName: "orpsensor"; stateName: "orp" } diff --git a/nymea-app/ui/devicepages/SensorDevicePage.qml b/nymea-app/ui/devicepages/SensorDevicePage.qml index 0919013b..a6a0858e 100644 --- a/nymea-app/ui/devicepages/SensorDevicePage.qml +++ b/nymea-app/ui/devicepages/SensorDevicePage.qml @@ -56,7 +56,7 @@ ThingPageBase { Repeater { model: ListModel { Component.onCompleted: { - var supportedInterfaces = ["temperaturesensor", "humiditysensor", "pressuresensor", "moisturesensor", "lightsensor", "conductivitysensor", "noisesensor", "cosensor", "co2sensor", "gassensor", "presencesensor", "daylightsensor", "closablesensor", "watersensor", "phsensor", "o2sensor", "orpsensor"] + var supportedInterfaces = ["temperaturesensor", "humiditysensor", "pressuresensor", "moisturesensor", "lightsensor", "conductivitysensor", "noisesensor", "cosensor", "co2sensor", "gassensor", "presencesensor", "daylightsensor", "closablesensor", "watersensor", "phsensor", "o2sensor", "orpsensor", "waterlevelsensor"] for (var i = 0; i < supportedInterfaces.length; i++) { if (root.thingClass.interfaces.indexOf(supportedInterfaces[i]) >= 0) { append({name: supportedInterfaces[i]}); @@ -92,6 +92,7 @@ ThingPageBase { "daylightsensor": "daylight", "closablesensor": "closed", "watersensor": "waterDetected", + "waterlevelsensor": "waterLevel", "phsensor": "ph", "o2sensor": "o2saturation", "orpsensor": "orp" diff --git a/nymea-app/ui/images/connections/usb-c.svg b/nymea-app/ui/images/connections/usb-c.svg new file mode 100644 index 00000000..831697b1 --- /dev/null +++ b/nymea-app/ui/images/connections/usb-c.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/nymea-app/ui/images/ethernet-cable.svg b/nymea-app/ui/images/ethernet-cable.svg new file mode 100644 index 00000000..70d50d48 --- /dev/null +++ b/nymea-app/ui/images/ethernet-cable.svg @@ -0,0 +1,3 @@ + + +