Merge PR #498: Add discoveryType thing class property

This commit is contained in:
Jenkins nymea 2022-03-27 19:49:35 +02:00
commit 20956525b3
5 changed files with 46 additions and 6 deletions

View File

@ -58,6 +58,7 @@ IntegrationsHandler::IntegrationsHandler(ThingManager *thingManager, QObject *pa
registerEnum<Thing::ThingSetupStatus>(); registerEnum<Thing::ThingSetupStatus>();
registerEnum<ThingClass::SetupMethod>(); registerEnum<ThingClass::SetupMethod>();
registerFlag<ThingClass::CreateMethod, ThingClass::CreateMethods>(); registerFlag<ThingClass::CreateMethod, ThingClass::CreateMethods>();
registerEnum<ThingClass::DiscoveryType>();
registerEnum<Types::Unit>(); registerEnum<Types::Unit>();
registerEnum<Types::InputType>(); registerEnum<Types::InputType>();
registerEnum<Types::IOType>(); registerEnum<Types::IOType>();

View File

@ -203,7 +203,8 @@ void PluginMetadata::parse(const QJsonObject &jsonObject)
/*! Returns a list of all valid JSON properties a ThingClass JSON definition can have. */ /*! Returns a list of all valid JSON properties a ThingClass JSON definition can have. */
QStringList thingClassProperties = QStringList() << "id" << "name" << "displayName" << "createMethods" << "setupMethod" QStringList thingClassProperties = QStringList() << "id" << "name" << "displayName" << "createMethods" << "setupMethod"
<< "interfaces" << "providedInterfaces" << "browsable" << "discoveryParamTypes" << "interfaces" << "providedInterfaces" << "browsable" << "discoveryParamTypes"
<< "paramTypes" << "settingsTypes" << "stateTypes" << "actionTypes" << "eventTypes" << "browserItemActionTypes"; << "paramTypes" << "settingsTypes" << "stateTypes" << "actionTypes" << "eventTypes" << "browserItemActionTypes"
<< "discoveryType";
QStringList mandatoryThingClassProperties = QStringList() << "id" << "name" << "displayName"; QStringList mandatoryThingClassProperties = QStringList() << "id" << "name" << "displayName";
QPair<QStringList, QStringList> verificationResult = verifyFields(thingClassProperties, mandatoryThingClassProperties, thingClassObject); QPair<QStringList, QStringList> verificationResult = verifyFields(thingClassProperties, mandatoryThingClassProperties, thingClassObject);
@ -260,6 +261,20 @@ void PluginMetadata::parse(const QJsonObject &jsonObject)
} }
thingClass.setCreateMethods(createMethods); thingClass.setCreateMethods(createMethods);
if (thingClassObject.contains("discoveryType")) {
QString discoveryTypeString = thingClassObject.value("discoveryType").toString();
if (discoveryTypeString == "precise") {
thingClass.setDiscoveryType(ThingClass::DiscoveryTypePrecise);
} else if (discoveryTypeString == "weak") {
thingClass.setDiscoveryType(ThingClass::DiscoveryTypeWeak);
} else {
m_validationErrors.append("Unknown discoveryType \"" + discoveryTypeString + "\" in thingClass \"" + thingClass.name() + "\".");
hasError = true;
}
} else {
thingClass.setDiscoveryType(ThingClass::DiscoveryTypePrecise);
}
// Read params // Read params
QPair<bool, QList<ParamType> > paramTypesVerification = parseParamTypes(thingClassObject.value("paramTypes").toArray()); QPair<bool, QList<ParamType> > paramTypesVerification = parseParamTypes(thingClassObject.value("paramTypes").toArray());
if (!paramTypesVerification.first) { if (!paramTypesVerification.first) {

View File

@ -79,9 +79,7 @@
ThingClass::ThingClass(const PluginId &pluginId, const VendorId &vendorId, const ThingClassId &id): ThingClass::ThingClass(const PluginId &pluginId, const VendorId &vendorId, const ThingClassId &id):
m_id(id), m_id(id),
m_vendorId(vendorId), m_vendorId(vendorId),
m_pluginId(pluginId), m_pluginId(pluginId)
m_createMethods(CreateMethodUser),
m_setupMethod(SetupMethodJustAdd)
{ {
} }
@ -342,6 +340,16 @@ void ThingClass::setSetupMethod(ThingClass::SetupMethod setupMethod)
m_setupMethod = setupMethod; m_setupMethod = setupMethod;
} }
ThingClass::DiscoveryType ThingClass::discoveryType() const
{
return m_discoveryType;
}
void ThingClass::setDiscoveryType(DiscoveryType discoveryType)
{
m_discoveryType = discoveryType;
}
/*! Returns the \l{Interfaces for DeviceClasses}{interfaces} of this \l{DeviceClass}.*/ /*! Returns the \l{Interfaces for DeviceClasses}{interfaces} of this \l{DeviceClass}.*/
QStringList ThingClass::interfaces() const QStringList ThingClass::interfaces() const
{ {

View File

@ -55,6 +55,7 @@ class LIBNYMEA_EXPORT ThingClass
Q_PROPERTY(bool browsable READ browsable) Q_PROPERTY(bool browsable READ browsable)
Q_PROPERTY(SetupMethod setupMethod READ setupMethod) Q_PROPERTY(SetupMethod setupMethod READ setupMethod)
Q_PROPERTY(CreateMethods createMethods READ createMethods) Q_PROPERTY(CreateMethods createMethods READ createMethods)
Q_PROPERTY(DiscoveryType discoveryType READ discoveryType)
Q_PROPERTY(StateTypes stateTypes READ stateTypes) Q_PROPERTY(StateTypes stateTypes READ stateTypes)
Q_PROPERTY(EventTypes eventTypes READ eventTypes) Q_PROPERTY(EventTypes eventTypes READ eventTypes)
Q_PROPERTY(ActionTypes actionTypes READ actionTypes) Q_PROPERTY(ActionTypes actionTypes READ actionTypes)
@ -83,6 +84,12 @@ public:
}; };
Q_ENUM(SetupMethod) Q_ENUM(SetupMethod)
enum DiscoveryType {
DiscoveryTypePrecise,
DiscoveryTypeWeak
};
Q_ENUM(DiscoveryType)
ThingClass(const PluginId &pluginId = PluginId(), const VendorId &vendorId = VendorId(), const ThingClassId &id = ThingClassId()); ThingClass(const PluginId &pluginId = PluginId(), const VendorId &vendorId = VendorId(), const ThingClassId &id = ThingClassId());
ThingClassId id() const; ThingClassId id() const;
@ -134,6 +141,9 @@ public:
SetupMethod setupMethod() const; SetupMethod setupMethod() const;
void setSetupMethod(SetupMethod setupMethod); void setSetupMethod(SetupMethod setupMethod);
DiscoveryType discoveryType() const;
void setDiscoveryType(DiscoveryType discoveryType);
QStringList interfaces() const; QStringList interfaces() const;
void setInterfaces(const QStringList &interfaces); void setInterfaces(const QStringList &interfaces);
@ -156,8 +166,9 @@ private:
ParamTypes m_paramTypes; ParamTypes m_paramTypes;
ParamTypes m_settingsTypes; ParamTypes m_settingsTypes;
ParamTypes m_discoveryParamTypes; ParamTypes m_discoveryParamTypes;
CreateMethods m_createMethods; CreateMethods m_createMethods = CreateMethodUser;
SetupMethod m_setupMethod; SetupMethod m_setupMethod = SetupMethodJustAdd;
DiscoveryType m_discoveryType = DiscoveryTypePrecise;
QStringList m_interfaces; QStringList m_interfaces;
QStringList m_providedInterfaces; QStringList m_providedInterfaces;
}; };

View File

@ -47,6 +47,10 @@
"CreateMethodAuto", "CreateMethodAuto",
"CreateMethodDiscovery" "CreateMethodDiscovery"
], ],
"DiscoveryType": [
"DiscoveryTypePrecise",
"DiscoveryTypeWeak"
],
"IOType": [ "IOType": [
"IOTypeNone", "IOTypeNone",
"IOTypeDigitalInput", "IOTypeDigitalInput",
@ -2829,6 +2833,7 @@
"r:browserItemActionTypes": "$ref:ActionTypes", "r:browserItemActionTypes": "$ref:ActionTypes",
"r:createMethods": "$ref:CreateMethods", "r:createMethods": "$ref:CreateMethods",
"r:discoveryParamTypes": "$ref:ParamTypes", "r:discoveryParamTypes": "$ref:ParamTypes",
"r:discoveryType": "$ref:DiscoveryType",
"r:displayName": "String", "r:displayName": "String",
"r:eventTypes": "$ref:EventTypes", "r:eventTypes": "$ref:EventTypes",
"r:id": "Uuid", "r:id": "Uuid",