Merge PR #242: Support units in interfaces

pull/263/head
Jenkins nymea 2020-01-29 21:44:34 +01:00
commit 29c2a2b7b2
5 changed files with 21 additions and 3 deletions

View File

@ -26,6 +26,7 @@
#include <QDir>
#include <QFileInfo>
#include <QJsonParseError>
#include <QMetaEnum>
DeviceUtils::DeviceUtils()
{
@ -191,6 +192,15 @@ Interface DeviceUtils::loadInterface(const QString &name)
stateType.setPossibleValues(stateVariant.toMap().value("allowedValues").toList());
stateType.setMinValue(stateVariant.toMap().value("minValue"));
stateType.setMaxValue(stateVariant.toMap().value("maxValue"));
if (stateVariant.toMap().contains("unit")) {
QMetaEnum unitEnum = QMetaEnum::fromType<Types::Unit>();
int enumValue = unitEnum.keyToValue("Unit" + stateVariant.toMap().value("unit").toByteArray());
if (enumValue == -1) {
qCWarning(dcDeviceManager) << "Invalid unit" << stateVariant.toMap().value("unit").toString() << "in interface" << name;
} else {
stateType.setUnit(static_cast<Types::Unit>(unitEnum.keyToValue("Unit" + stateVariant.toMap().value("unit").toByteArray())));
}
}
stateTypes.append(stateType);
EventType stateChangeEventType;

View File

@ -594,6 +594,12 @@ void PluginMetadata::parse(const QJsonObject &jsonObject)
hasError = true;
continue;
}
if (ifaceStateType.unit() != Types::UnitNone && ifaceStateType.unit() != stateType.unit()) {
QMetaEnum unitEnum = QMetaEnum::fromType<Types::Unit>();
m_validationErrors.append("Device class \"" + deviceClass.name() + "\" claims to implement interface \"" + value.toString() + "\" but state \"" + stateType.name() + "\" has not matching unit: \"" + unitEnum.valueToKey(ifaceStateType.unit()) + "\" != \"" + unitEnum.valueToKey(stateType.unit()));
hasError = true;
continue;
}
}
foreach (const ActionType &ifaceActionType, iface.actionTypes()) {

View File

@ -4,7 +4,7 @@
{
"name": "conductivity",
"type": "double",
"unit": "UnitMicroSiemensPerCentimeter"
"unit": "MicroSiemensPerCentimeter"
}
]
}

View File

@ -4,7 +4,8 @@
"states": [
{
"name": "currentPower",
"type": "double"
"type": "double",
"unit": "Watt"
}
]
}

View File

@ -4,7 +4,8 @@
"states": [
{
"name": "totalEnergyConsumed",
"type": "double"
"type": "double",
"unit": "KiloWattHour"
}
]
}