Add support for the water level interface
This commit is contained in:
parent
00f084c8b9
commit
44fe52f9d0
@ -847,9 +847,7 @@ ParamType *ThingManager::unpackParamType(const QVariantMap ¶mTypeMap, 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)
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -49,7 +49,6 @@ public:
|
|||||||
MinValueRole,
|
MinValueRole,
|
||||||
MaxValueRole,
|
MaxValueRole,
|
||||||
InputTypeRole,
|
InputTypeRole,
|
||||||
UnitStringRole,
|
|
||||||
AllowedValuesRole,
|
AllowedValuesRole,
|
||||||
ReadOnlyRole
|
ReadOnlyRole
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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":
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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" }
|
||||||
|
|||||||
@ -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"});
|
||||||
|
|||||||
@ -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" }
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
79
nymea-app/ui/images/connections/usb-c.svg
Normal file
79
nymea-app/ui/images/connections/usb-c.svg
Normal 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 |
3
nymea-app/ui/images/ethernet-cable.svg
Normal file
3
nymea-app/ui/images/ethernet-cable.svg
Normal 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 |
Reference in New Issue
Block a user