Add support for the water level interface

This commit is contained in:
Michael Zanetti 2021-10-12 23:48:24 +02:00
parent 00f084c8b9
commit 44fe52f9d0
19 changed files with 289 additions and 155 deletions

View File

@ -847,9 +847,7 @@ ParamType *ThingManager::unpackParamType(const QVariantMap &paramTypeMap, QObjec
paramType->setAllowedValues(paramTypeMap.value("allowedValues").toList()); paramType->setAllowedValues(paramTypeMap.value("allowedValues").toList());
paramType->setInputType(stringToInputType(paramTypeMap.value("inputType").toString())); paramType->setInputType(stringToInputType(paramTypeMap.value("inputType").toString()));
paramType->setReadOnly(paramTypeMap.value("readOnly").toBool()); paramType->setReadOnly(paramTypeMap.value("readOnly").toBool());
QPair<Types::Unit, QString> unit = stringToUnit(paramTypeMap.value("unit").toString()); paramType->setUnit(stringToUnit(paramTypeMap.value("unit").toString()));
paramType->setUnit(unit.first);
paramType->setUnitString(unit.second);
return paramType; return paramType;
} }
@ -865,10 +863,7 @@ StateType *ThingManager::unpackStateType(const QVariantMap &stateTypeMap, QObjec
stateType->setType(stateTypeMap.value("type").toString()); stateType->setType(stateTypeMap.value("type").toString());
stateType->setMinValue(stateTypeMap.value("minValue")); stateType->setMinValue(stateTypeMap.value("minValue"));
stateType->setMaxValue(stateTypeMap.value("maxValue")); stateType->setMaxValue(stateTypeMap.value("maxValue"));
stateType->setUnit(stringToUnit(stateTypeMap.value("unit").toString()));
QPair<Types::Unit, QString> unit = stringToUnit(stateTypeMap.value("unit").toString());
stateType->setUnit(unit.first);
stateType->setUnitString(unit.second);
QMetaEnum metaEnum = QMetaEnum::fromType<Types::IOType>(); QMetaEnum metaEnum = QMetaEnum::fromType<Types::IOType>();
Types::IOType ioType = static_cast<Types::IOType>(metaEnum.keyToValue(stateTypeMap.value("ioType").toByteArray())); Types::IOType ioType = static_cast<Types::IOType>(metaEnum.keyToValue(stateTypeMap.value("ioType").toByteArray()));
@ -1035,117 +1030,121 @@ ThingClass::SetupMethod ThingManager::stringToSetupMethod(const QString &setupMe
return ThingClass::SetupMethodJustAdd; return ThingClass::SetupMethodJustAdd;
} }
QPair<Types::Unit, QString> ThingManager::stringToUnit(const QString &unitString) Types::Unit ThingManager::stringToUnit(const QString &unitString)
{ {
if (unitString == "UnitNone") { QMetaEnum metaEnum = QMetaEnum::fromType<Types::Unit>();
return QPair<Types::Unit, QString>(Types::UnitNone, ""); Types::Unit unit = static_cast<Types::Unit>(metaEnum.keyToValue(unitString.toUtf8()));
} else if (unitString == "UnitSeconds") { return unit;
return QPair<Types::Unit, QString>(Types::UnitSeconds, "s");
} else if (unitString == "UnitMinutes") {
return QPair<Types::Unit, QString>(Types::UnitMinutes, "m");
} else if (unitString == "UnitHours") {
return QPair<Types::Unit, QString>(Types::UnitHours, "h");
} else if (unitString == "UnitUnixTime") {
return QPair<Types::Unit, QString>(Types::UnitUnixTime, "datetime");
} else if (unitString == "UnitMeterPerSecond") {
return QPair<Types::Unit, QString>(Types::UnitMeterPerSecond, "m/s");
} else if (unitString == "UnitKiloMeterPerHour") {
return QPair<Types::Unit, QString>(Types::UnitKiloMeterPerHour, "km/h");
} else if (unitString == "UnitDegree") {
return QPair<Types::Unit, QString>(Types::UnitDegree, "°");
} else if (unitString == "UnitRadiant") {
return QPair<Types::Unit, QString>(Types::UnitRadiant, "rad");
} else if (unitString == "UnitDegreeCelsius") {
return QPair<Types::Unit, QString>(Types::UnitDegreeCelsius, "°C");
} else if (unitString == "UnitDegreeKelvin") {
return QPair<Types::Unit, QString>(Types::UnitDegreeKelvin, "°K");
} else if (unitString == "UnitMired") {
return QPair<Types::Unit, QString>(Types::UnitMired, "mir");
} else if (unitString == "UnitMilliBar") {
return QPair<Types::Unit, QString>(Types::UnitMilliBar, "mbar");
} else if (unitString == "UnitBar") {
return QPair<Types::Unit, QString>(Types::UnitBar, "bar");
} else if (unitString == "UnitPascal") {
return QPair<Types::Unit, QString>(Types::UnitPascal, "Pa");
} else if (unitString == "UnitHectoPascal") {
return QPair<Types::Unit, QString>(Types::UnitHectoPascal, "hPa");
} else if (unitString == "UnitAtmosphere") {
return QPair<Types::Unit, QString>(Types::UnitAtmosphere, "atm");
} else if (unitString == "UnitLumen") {
return QPair<Types::Unit, QString>(Types::UnitLumen, "lm");
} else if (unitString == "UnitLux") {
return QPair<Types::Unit, QString>(Types::UnitLux, "lx");
} else if (unitString == "UnitCandela") {
return QPair<Types::Unit, QString>(Types::UnitCandela, "cd");
} else if (unitString == "UnitMilliMeter") {
return QPair<Types::Unit, QString>(Types::UnitMilliMeter, "mm");
} else if (unitString == "UnitCentiMeter") {
return QPair<Types::Unit, QString>(Types::UnitCentiMeter, "cm");
} else if (unitString == "UnitMeter") {
return QPair<Types::Unit, QString>(Types::UnitMeter, "m");
} else if (unitString == "UnitKiloMeter") {
return QPair<Types::Unit, QString>(Types::UnitKiloMeter, "km");
} else if (unitString == "UnitGram") {
return QPair<Types::Unit, QString>(Types::UnitGram, "g");
} else if (unitString == "UnitKiloGram") {
return QPair<Types::Unit, QString>(Types::UnitKiloGram, "kg");
} else if (unitString == "UnitDezibel") {
return QPair<Types::Unit, QString>(Types::UnitDezibel, "db");
} else if (unitString == "UnitBpm") {
return QPair<Types::Unit, QString>(Types::UnitBpm, "bpm");
} else if (unitString == "UnitKiloByte") {
return QPair<Types::Unit, QString>(Types::UnitKiloByte, "kB");
} else if (unitString == "UnitMegaByte") {
return QPair<Types::Unit, QString>(Types::UnitMegaByte, "MB");
} else if (unitString == "UnitGigaByte") {
return QPair<Types::Unit, QString>(Types::UnitGigaByte, "GB");
} else if (unitString == "UnitTeraByte") {
return QPair<Types::Unit, QString>(Types::UnitTeraByte, "TB");
} else if (unitString == "UnitMilliWatt") {
return QPair<Types::Unit, QString>(Types::UnitMilliWatt, "mW");
} else if (unitString == "UnitWatt") {
return QPair<Types::Unit, QString>(Types::UnitWatt, "W");
} else if (unitString == "UnitKiloWatt") {
return QPair<Types::Unit, QString>(Types::UnitKiloWatt, "kW");
} else if (unitString == "UnitKiloWattHour") {
return QPair<Types::Unit, QString>(Types::UnitKiloWattHour, "kWh");
} else if (unitString == "UnitEuroPerMegaWattHour") {
return QPair<Types::Unit, QString>(Types::UnitEuroPerMegaWattHour, "€/MWh");
} else if (unitString == "UnitEuroCentPerKiloWattHour") {
return QPair<Types::Unit, QString>(Types::UnitEuroCentPerKiloWattHour, "ct/kWh");
} else if (unitString == "UnitPercentage") {
return QPair<Types::Unit, QString>(Types::UnitPercentage, "%");
} else if (unitString == "UnitPartsPerMillion") {
return QPair<Types::Unit, QString>(Types::UnitPartsPerMillion, "ppm");
} else if (unitString == "UnitEuro") {
return QPair<Types::Unit, QString>(Types::UnitEuro, "");
} else if (unitString == "UnitDollar") {
return QPair<Types::Unit, QString>(Types::UnitDollar, "$");
} else if (unitString == "UnitHerz") { // legacy
return QPair<Types::Unit, QString>(Types::UnitHertz, "Hz");
} else if (unitString == "UnitHertz") {
return QPair<Types::Unit, QString>(Types::UnitHertz, "Hz");
} else if (unitString == "UnitAmpere") {
return QPair<Types::Unit, QString>(Types::UnitAmpere, "A");
} else if (unitString == "UnitMilliAmpere") {
return QPair<Types::Unit, QString>(Types::UnitMilliAmpere, "mA");
} else if (unitString == "UnitVolt") {
return QPair<Types::Unit, QString>(Types::UnitVolt, "V");
} else if (unitString == "UnitMilliVolt") {
return QPair<Types::Unit, QString>(Types::UnitMilliVolt, "mV");
} else if (unitString == "UnitVoltAmpere") {
return QPair<Types::Unit, QString>(Types::UnitVoltAmpere, "VA");
} else if (unitString == "UnitVoltAmpereReactive") {
return QPair<Types::Unit, QString>(Types::UnitVoltAmpereReactive, "VAR");
} else if (unitString == "UnitAmpereHour") {
return QPair<Types::Unit, QString>(Types::UnitAmpereHour, "Ah");
} else if (unitString == "UnitMicroSiemensPerCentimeter") {
return QPair<Types::Unit, QString>(Types::UnitMicroSiemensPerCentimeter, "µS/cm");
} else if (unitString == "UnitDuration") {
return QPair<Types::Unit, QString>(Types::UnitDuration, "s");
}
return QPair<Types::Unit, QString>(Types::UnitNone, ""); // if (unitString == "UnitNone") {
// return QPair<Types::Unit, QString>(Types::UnitNone, "");
// } else if (unitString == "UnitSeconds") {
// return QPair<Types::Unit, QString>(Types::UnitSeconds, "s");
// } else if (unitString == "UnitMinutes") {
// return QPair<Types::Unit, QString>(Types::UnitMinutes, "m");
// } else if (unitString == "UnitHours") {
// return QPair<Types::Unit, QString>(Types::UnitHours, "h");
// } else if (unitString == "UnitUnixTime") {
// return QPair<Types::Unit, QString>(Types::UnitUnixTime, "datetime");
// } else if (unitString == "UnitMeterPerSecond") {
// return QPair<Types::Unit, QString>(Types::UnitMeterPerSecond, "m/s");
// } else if (unitString == "UnitKiloMeterPerHour") {
// return QPair<Types::Unit, QString>(Types::UnitKiloMeterPerHour, "km/h");
// } else if (unitString == "UnitDegree") {
// return QPair<Types::Unit, QString>(Types::UnitDegree, "°");
// } else if (unitString == "UnitRadiant") {
// return QPair<Types::Unit, QString>(Types::UnitRadiant, "rad");
// } else if (unitString == "UnitDegreeCelsius") {
// return QPair<Types::Unit, QString>(Types::UnitDegreeCelsius, "°C");
// } else if (unitString == "UnitDegreeKelvin") {
// return QPair<Types::Unit, QString>(Types::UnitDegreeKelvin, "°K");
// } else if (unitString == "UnitMired") {
// return QPair<Types::Unit, QString>(Types::UnitMired, "mir");
// } else if (unitString == "UnitMilliBar") {
// return QPair<Types::Unit, QString>(Types::UnitMilliBar, "mbar");
// } else if (unitString == "UnitBar") {
// return QPair<Types::Unit, QString>(Types::UnitBar, "bar");
// } else if (unitString == "UnitPascal") {
// return QPair<Types::Unit, QString>(Types::UnitPascal, "Pa");
// } else if (unitString == "UnitHectoPascal") {
// return QPair<Types::Unit, QString>(Types::UnitHectoPascal, "hPa");
// } else if (unitString == "UnitAtmosphere") {
// return QPair<Types::Unit, QString>(Types::UnitAtmosphere, "atm");
// } else if (unitString == "UnitLumen") {
// return QPair<Types::Unit, QString>(Types::UnitLumen, "lm");
// } else if (unitString == "UnitLux") {
// return QPair<Types::Unit, QString>(Types::UnitLux, "lx");
// } else if (unitString == "UnitCandela") {
// return QPair<Types::Unit, QString>(Types::UnitCandela, "cd");
// } else if (unitString == "UnitMilliMeter") {
// return QPair<Types::Unit, QString>(Types::UnitMilliMeter, "mm");
// } else if (unitString == "UnitCentiMeter") {
// return QPair<Types::Unit, QString>(Types::UnitCentiMeter, "cm");
// } else if (unitString == "UnitMeter") {
// return QPair<Types::Unit, QString>(Types::UnitMeter, "m");
// } else if (unitString == "UnitKiloMeter") {
// return QPair<Types::Unit, QString>(Types::UnitKiloMeter, "km");
// } else if (unitString == "UnitGram") {
// return QPair<Types::Unit, QString>(Types::UnitGram, "g");
// } else if (unitString == "UnitKiloGram") {
// return QPair<Types::Unit, QString>(Types::UnitKiloGram, "kg");
// } else if (unitString == "UnitDezibel") {
// return QPair<Types::Unit, QString>(Types::UnitDezibel, "db");
// } else if (unitString == "UnitBpm") {
// return QPair<Types::Unit, QString>(Types::UnitBpm, "bpm");
// } else if (unitString == "UnitKiloByte") {
// return QPair<Types::Unit, QString>(Types::UnitKiloByte, "kB");
// } else if (unitString == "UnitMegaByte") {
// return QPair<Types::Unit, QString>(Types::UnitMegaByte, "MB");
// } else if (unitString == "UnitGigaByte") {
// return QPair<Types::Unit, QString>(Types::UnitGigaByte, "GB");
// } else if (unitString == "UnitTeraByte") {
// return QPair<Types::Unit, QString>(Types::UnitTeraByte, "TB");
// } else if (unitString == "UnitMilliWatt") {
// return QPair<Types::Unit, QString>(Types::UnitMilliWatt, "mW");
// } else if (unitString == "UnitWatt") {
// return QPair<Types::Unit, QString>(Types::UnitWatt, "W");
// } else if (unitString == "UnitKiloWatt") {
// return QPair<Types::Unit, QString>(Types::UnitKiloWatt, "kW");
// } else if (unitString == "UnitKiloWattHour") {
// return QPair<Types::Unit, QString>(Types::UnitKiloWattHour, "kWh");
// } else if (unitString == "UnitEuroPerMegaWattHour") {
// return QPair<Types::Unit, QString>(Types::UnitEuroPerMegaWattHour, "€/MWh");
// } else if (unitString == "UnitEuroCentPerKiloWattHour") {
// return QPair<Types::Unit, QString>(Types::UnitEuroCentPerKiloWattHour, "ct/kWh");
// } else if (unitString == "UnitPercentage") {
// return QPair<Types::Unit, QString>(Types::UnitPercentage, "%");
// } else if (unitString == "UnitPartsPerMillion") {
// return QPair<Types::Unit, QString>(Types::UnitPartsPerMillion, "ppm");
// } else if (unitString == "UnitEuro") {
// return QPair<Types::Unit, QString>(Types::UnitEuro, "€");
// } else if (unitString == "UnitDollar") {
// return QPair<Types::Unit, QString>(Types::UnitDollar, "$");
// } else if (unitString == "UnitHerz") { // legacy
// return QPair<Types::Unit, QString>(Types::UnitHertz, "Hz");
// } else if (unitString == "UnitHertz") {
// return QPair<Types::Unit, QString>(Types::UnitHertz, "Hz");
// } else if (unitString == "UnitAmpere") {
// return QPair<Types::Unit, QString>(Types::UnitAmpere, "A");
// } else if (unitString == "UnitMilliAmpere") {
// return QPair<Types::Unit, QString>(Types::UnitMilliAmpere, "mA");
// } else if (unitString == "UnitVolt") {
// return QPair<Types::Unit, QString>(Types::UnitVolt, "V");
// } else if (unitString == "UnitMilliVolt") {
// return QPair<Types::Unit, QString>(Types::UnitMilliVolt, "mV");
// } else if (unitString == "UnitVoltAmpere") {
// return QPair<Types::Unit, QString>(Types::UnitVoltAmpere, "VA");
// } else if (unitString == "UnitVoltAmpereReactive") {
// return QPair<Types::Unit, QString>(Types::UnitVoltAmpereReactive, "VAR");
// } else if (unitString == "UnitAmpereHour") {
// return QPair<Types::Unit, QString>(Types::UnitAmpereHour, "Ah");
// } else if (unitString == "UnitMicroSiemensPerCentimeter") {
// return QPair<Types::Unit, QString>(Types::UnitMicroSiemensPerCentimeter, "µS/cm");
// } else if (unitString == "UnitDuration") {
// return QPair<Types::Unit, QString>(Types::UnitDuration, "s");
// }
// return QPair<Types::Unit, QString>(Types::UnitNone, "");
} }
Types::InputType ThingManager::stringToInputType(const QString &inputTypeString) Types::InputType ThingManager::stringToInputType(const QString &inputTypeString)

View File

@ -165,7 +165,7 @@ private:
static Thing::ThingError errorFromString(const QByteArray &thingErrorString); static Thing::ThingError errorFromString(const QByteArray &thingErrorString);
static ThingClass::SetupMethod stringToSetupMethod(const QString &setupMethodString); static ThingClass::SetupMethod stringToSetupMethod(const QString &setupMethodString);
static QPair<Types::Unit, QString> stringToUnit(const QString &unitString); static Types::Unit stringToUnit(const QString &unitString);
static Types::InputType stringToInputType(const QString &inputTypeString); static Types::InputType stringToInputType(const QString &inputTypeString);
private: private:

View File

@ -135,16 +135,6 @@ void ParamType::setInputType(const Types::InputType &inputType)
m_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 Types::Unit ParamType::unit() const
{ {
return m_unit; return m_unit;

View File

@ -51,7 +51,6 @@ class ParamType : public QObject
Q_PROPERTY(QVariant maxValue READ maxValue CONSTANT) Q_PROPERTY(QVariant maxValue READ maxValue CONSTANT)
Q_PROPERTY(Types::InputType inputType READ inputType CONSTANT) Q_PROPERTY(Types::InputType inputType READ inputType CONSTANT)
Q_PROPERTY(Types::Unit unit READ unit 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(QVariantList allowedValues READ allowedValues CONSTANT)
Q_PROPERTY(bool readOnly READ readOnly CONSTANT) Q_PROPERTY(bool readOnly READ readOnly CONSTANT)
@ -89,9 +88,6 @@ public:
Types::Unit unit() const; Types::Unit unit() const;
void setUnit(const Types::Unit &unit); void setUnit(const Types::Unit &unit);
QString unitString() const;
void setUnitString(const QString &unitString);
QVariantList allowedValues() const; QVariantList allowedValues() const;
void setAllowedValues(const QList<QVariant> allowedValues); void setAllowedValues(const QList<QVariant> allowedValues);
@ -109,7 +105,6 @@ private:
QVariant m_maxValue; QVariant m_maxValue;
Types::InputType m_inputType; Types::InputType m_inputType;
Types::Unit m_unit; Types::Unit m_unit;
QString m_unitString;
QVariantList m_allowedValues; QVariantList m_allowedValues;
bool m_readOnly; bool m_readOnly;
}; };

View File

@ -96,8 +96,6 @@ QVariant ParamTypes::data(const QModelIndex &index, int role) const
return paramType->maxValue(); return paramType->maxValue();
} else if (role == InputTypeRole) { } else if (role == InputTypeRole) {
return paramType->inputType(); return paramType->inputType();
} else if (role == UnitStringRole) {
return paramType->unitString();
} else if (role == AllowedValuesRole) { } else if (role == AllowedValuesRole) {
return paramType->allowedValues(); return paramType->allowedValues();
} else if (role == ReadOnlyRole) { } else if (role == ReadOnlyRole) {
@ -134,7 +132,6 @@ QHash<int, QByteArray> ParamTypes::roleNames() const
roles[MinValueRole] = "minValue"; roles[MinValueRole] = "minValue";
roles[MaxValueRole] = "maxValue"; roles[MaxValueRole] = "maxValue";
roles[InputTypeRole] = "inputType"; roles[InputTypeRole] = "inputType";
roles[UnitStringRole] = "unitString";
roles[AllowedValuesRole] = "allowedValues"; roles[AllowedValuesRole] = "allowedValues";
roles[ReadOnlyRole] = "readOnly"; roles[ReadOnlyRole] = "readOnly";
return roles; return roles;

View File

@ -49,7 +49,6 @@ public:
MinValueRole, MinValueRole,
MaxValueRole, MaxValueRole,
InputTypeRole, InputTypeRole,
UnitStringRole,
AllowedValuesRole, AllowedValuesRole,
ReadOnlyRole ReadOnlyRole
}; };

View File

@ -120,16 +120,6 @@ void StateType::setUnit(const Types::Unit &unit)
m_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 QVariant StateType::minValue() const
{ {
return m_minValue; return m_minValue;

View File

@ -49,7 +49,6 @@ class StateType : public QObject
Q_PROPERTY(QVariantList allowedValues READ allowedValues CONSTANT) Q_PROPERTY(QVariantList allowedValues READ allowedValues CONSTANT)
Q_PROPERTY(Types::Unit unit READ unit CONSTANT) Q_PROPERTY(Types::Unit unit READ unit CONSTANT)
Q_PROPERTY(Types::IOType ioType READ ioType 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 minValue READ minValue CONSTANT)
Q_PROPERTY(QVariant maxValue READ maxValue CONSTANT) Q_PROPERTY(QVariant maxValue READ maxValue CONSTANT)
@ -84,9 +83,6 @@ public:
Types::IOType ioType() const; Types::IOType ioType() const;
void setIOType(Types::IOType ioType); void setIOType(Types::IOType ioType);
QString unitString() const;
void setUnitString(const QString &unitString);
QVariant minValue() const; QVariant minValue() const;
void setMinValue(const QVariant &minValue); void setMinValue(const QVariant &minValue);
@ -103,7 +99,6 @@ private:
QVariantList m_allowedValues; QVariantList m_allowedValues;
Types::Unit m_unit = Types::UnitNone; Types::Unit m_unit = Types::UnitNone;
Types::IOType m_ioType = Types::IOTypeNone; Types::IOType m_ioType = Types::IOTypeNone;
QString m_unitString;
QVariant m_minValue; QVariant m_minValue;
QVariant m_maxValue; QVariant m_maxValue;
}; };

View File

@ -83,8 +83,6 @@ QVariant StateTypes::data(const QModelIndex &index, int role) const
return stateType->type(); return stateType->type();
case RoleDefaultValue: case RoleDefaultValue:
return stateType->defaultValue(); return stateType->defaultValue();
case RoleUnitString:
return stateType->unitString();
case RoleUnit: case RoleUnit:
return stateType->unit(); return stateType->unit();
case RoleIOType: case RoleIOType:

View File

@ -94,6 +94,9 @@ QString Types::toUiUnit(Types::Unit unit) const
case Types::UnitBar: case Types::UnitBar:
uiUnit = Types::UnitPoundsPerSquareInch; uiUnit = Types::UnitPoundsPerSquareInch;
break; break;
case Types::UnitLiter:
uiUnit = Types::UnitFluidOunce;
break;
default: default:
uiUnit = unit; uiUnit = unit;
} }
@ -223,6 +226,16 @@ QString Types::toUiUnit(Types::Unit unit) const
return "mph"; return "mph";
case Types::UnitPoundsPerSquareInch: case Types::UnitPoundsPerSquareInch:
return "psi"; 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 ""; return "";
@ -254,6 +267,8 @@ QVariant Types::toUiValue(const QVariant &value, Types::Unit unit) const
return value.toDouble() * 0.01450377; return value.toDouble() * 0.01450377;
case Types::UnitBar: // To pounds per square inch (psi) case Types::UnitBar: // To pounds per square inch (psi)
return value.toDouble() * 14.50377; return value.toDouble() * 14.50377;
case Types::UnitLiter: // To fl. oz
return value.toDouble() * 33.814;
default: default:
return value; return value;
} }

View File

@ -107,6 +107,11 @@ public:
UnitAmpereHour, UnitAmpereHour,
UnitMicroSiemensPerCentimeter, UnitMicroSiemensPerCentimeter,
UnitDuration, UnitDuration,
UnitNewton,
UnitNewtonMeter,
UnitRpm,
UnitMilligramPerLiter,
UnitLiter,
// Those do not exist in nymea:core at this point, Adding them for easier conversion to imperial // Those do not exist in nymea:core at this point, Adding them for easier conversion to imperial
UnitDegreeFahrenheit, UnitDegreeFahrenheit,
@ -117,7 +122,8 @@ public:
UnitMile, UnitMile,
UnitFootPerSecond, UnitFootPerSecond,
UnitMilePerHour, UnitMilePerHour,
UnitPoundsPerSquareInch UnitPoundsPerSquareInch,
UnitFluidOunce
}; };
Q_ENUM(Unit) Q_ENUM(Unit)

View File

@ -305,6 +305,8 @@ ApplicationWindow {
return Qt.resolvedUrl("images/sensors/windspeed.svg") return Qt.resolvedUrl("images/sensors/windspeed.svg")
case "watersensor": case "watersensor":
return Qt.resolvedUrl("images/sensors/water.svg") return Qt.resolvedUrl("images/sensors/water.svg")
case "waterlevelsensor":
return Qt.resolvedUrl("images/sensors/water.svg")
case "o2sensor": case "o2sensor":
return Qt.resolvedUrl("images/sensors/o2.svg") return Qt.resolvedUrl("images/sensors/o2.svg")
case "phsensor": case "phsensor":

View File

@ -87,6 +87,7 @@ Item {
"windspeedsensor": "blue", "windspeedsensor": "blue",
"ventilation": "lightblue", "ventilation": "lightblue",
"watersensor": "aqua", "watersensor": "aqua",
"waterlevelsensor": "aqua",
"phsensor": "green", "phsensor": "green",
"o2sensor": "lightblue", "o2sensor": "lightblue",
"orpsensor": "yellow", "orpsensor": "yellow",

View File

@ -317,6 +317,7 @@ MainPageTile {
ListElement { ifaceName: "closablesensor"; stateName: "closed" } ListElement { ifaceName: "closablesensor"; stateName: "closed" }
ListElement { ifaceName: "lightsensor"; stateName: "lightIntensity" } ListElement { ifaceName: "lightsensor"; stateName: "lightIntensity" }
ListElement { ifaceName: "watersensor"; stateName: "waterDetected" } ListElement { ifaceName: "watersensor"; stateName: "waterDetected" }
ListElement { ifaceName: "waterlevelsensor"; stateName: "waterLevel" }
ListElement { ifaceName: "cosensor"; stateName: "co" } ListElement { ifaceName: "cosensor"; stateName: "co" }
ListElement { ifaceName: "co2sensor"; stateName: "co2" } ListElement { ifaceName: "co2sensor"; stateName: "co2" }
ListElement { ifaceName: "gassensor"; stateName: "gas" } ListElement { ifaceName: "gassensor"; stateName: "gas" }

View File

@ -81,6 +81,8 @@ MainPageTile {
return sensorsComponent; return sensorsComponent;
case "cleaningrobot": case "cleaningrobot":
return buttonComponent; 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 { Component {
id: sensorsComponent id: sensorsComponent
RowLayout { RowLayout {
@ -209,6 +262,15 @@ MainPageTile {
if (thing.thingClass.interfaces.indexOf("o2sensor") >= 0) { if (thing.thingClass.interfaces.indexOf("o2sensor") >= 0) {
tmp.push({iface: "o2sensor", state: "o2saturation"}) 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) { if (thing.thingClass.interfaces.indexOf("weather") >= 0) {
tmp.push({iface: "temperaturesensor", state: "temperature"}); tmp.push({iface: "temperaturesensor", state: "temperature"});

View File

@ -89,6 +89,7 @@ ThingsListPageBase {
ListElement { interfaceName: "heating"; stateName: "power" } ListElement { interfaceName: "heating"; stateName: "power" }
ListElement { interfaceName: "thermostat"; stateName: "targetTemperature" } ListElement { interfaceName: "thermostat"; stateName: "targetTemperature" }
ListElement { interfaceName: "watersensor"; stateName: "waterDetected" } ListElement { interfaceName: "watersensor"; stateName: "waterDetected" }
ListElement { interfaceName: "waterlevelsensor"; stateName: "waterLevel" }
ListElement { interfaceName: "o2sensor"; stateName: "o2saturation" } ListElement { interfaceName: "o2sensor"; stateName: "o2saturation" }
ListElement { interfaceName: "phsensor"; stateName: "ph" } ListElement { interfaceName: "phsensor"; stateName: "ph" }
ListElement { interfaceName: "orpsensor"; stateName: "orp" } ListElement { interfaceName: "orpsensor"; stateName: "orp" }

View File

@ -56,7 +56,7 @@ ThingPageBase {
Repeater { Repeater {
model: ListModel { model: ListModel {
Component.onCompleted: { 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++) { for (var i = 0; i < supportedInterfaces.length; i++) {
if (root.thingClass.interfaces.indexOf(supportedInterfaces[i]) >= 0) { if (root.thingClass.interfaces.indexOf(supportedInterfaces[i]) >= 0) {
append({name: supportedInterfaces[i]}); append({name: supportedInterfaces[i]});
@ -92,6 +92,7 @@ ThingPageBase {
"daylightsensor": "daylight", "daylightsensor": "daylight",
"closablesensor": "closed", "closablesensor": "closed",
"watersensor": "waterDetected", "watersensor": "waterDetected",
"waterlevelsensor": "waterLevel",
"phsensor": "ph", "phsensor": "ph",
"o2sensor": "o2saturation", "o2sensor": "o2saturation",
"orpsensor": "orp" "orpsensor": "orp"

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg4874"
height="96"
viewBox="0 0 96 96.000001"
width="96"
version="1.1"
sodipodi:docname="usb-c.svg"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1464"
inkscape:window-height="933"
id="namedview8"
showgrid="true"
inkscape:zoom="7.2916667"
inkscape:cx="48"
inkscape:cy="47.006967"
inkscape:window-x="72"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg4874">
<inkscape:grid
type="xygrid"
id="grid835" />
</sodipodi:namedview>
<metadata
id="metadata4879">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<rect
id="rect4782"
style="color:#000000;fill:none"
transform="rotate(90)"
height="96"
width="96"
y="-96"
x="-2.7465821e-06" />
<rect
id="rect4174"
style="color:#000000;fill:#808080"
height="4"
width="32"
y="46.005001"
x="32" />
<rect
style="fill:none;stroke:#808080;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect837"
width="63.615005"
height="20"
x="16.192497"
y="38"
rx="10"
ry="10" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,3 @@
<svg width="11" height="33" viewBox="0 0 11 33" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0907 0V9.16026H7.50284V33H2.59371L2.59368 9.16026H0.00582314V0H10.0907ZM3.00574 5H7.00574V1H3.00574V5Z" fill="#737373"/>
</svg>

After

Width:  |  Height:  |  Size: 277 B