port new plugins to json system

This commit is contained in:
Michael Zanetti 2014-08-18 03:00:42 +02:00
parent 44118a1c06
commit fb2406d478
17 changed files with 757 additions and 484 deletions

View File

@ -150,14 +150,20 @@ QList<DeviceClass> DevicePlugin::supportedDevices() const
QJsonObject jo = deviceClassJson.toObject();
DeviceClass deviceClass(pluginId(), vendorId, jo.value("deviceClassId").toString());
deviceClass.setName(jo.value("name").toString());
QString createMethod = jo.value("createMethod").toString();
if (createMethod == "discovery") {
deviceClass.setCreateMethod(DeviceClass::CreateMethodDiscovery);
} else if (createMethod == "auto") {
deviceClass.setCreateMethod(DeviceClass::CreateMethodAuto);
} else {
deviceClass.setCreateMethod(DeviceClass::CreateMethodUser);
DeviceClass::CreateMethods createMethods;
foreach (const QJsonValue &createMethodValue, jo.value("createMethods").toArray()) {
if (createMethodValue.toString() == "discovery") {
createMethods |= DeviceClass::CreateMethodDiscovery;
} else if (createMethodValue.toString() == "auto") {
createMethods |= DeviceClass::CreateMethodAuto;
} else {
createMethods |= DeviceClass::CreateMethodUser;
}
}
deviceClass.setCreateMethods(createMethods);
deviceClass.setDiscoveryParamTypes(parseParamTypes(jo.value("discoveryParamTypes").toArray()));
QString setupMethod = jo.value("setupMethod").toString();
if (setupMethod == "pushButton") {
deviceClass.setSetupMethod(DeviceClass::SetupMethodPushButton);
@ -169,21 +175,7 @@ QList<DeviceClass> DevicePlugin::supportedDevices() const
deviceClass.setSetupMethod(DeviceClass::SetupMethodJustAdd);
}
deviceClass.setPairingInfo(jo.value("pairingInfo").toString());
QList<ParamType> paramTypes;
foreach (const QJsonValue &paramTypesJson, jo.value("paramTypes").toArray()) {
QJsonObject pt = paramTypesJson.toObject();
QVariant::Type t = QVariant::nameToType(pt.value("type").toString().toLatin1().data());
ParamType paramType(pt.value("name").toString(), t, pt.value("defaultValue").toVariant());
QVariantList allowedValues;
foreach (const QJsonValue &allowedTypesJson, pt.value("allowedValues").toArray()) {
allowedValues.append(allowedTypesJson.toVariant());
}
paramType.setAllowedValues(allowedValues);
paramType.setLimits(pt.value("minValue").toVariant(), pt.value("maxValue").toVariant());
paramTypes.append(paramType);
}
deviceClass.setParamTypes(paramTypes);
deviceClass.setParamTypes(parseParamTypes(jo.value("paramTypes").toArray()));
QList<StateType> stateTypes;
qDebug() << "############### s" << jo;
@ -198,6 +190,27 @@ QList<DeviceClass> DevicePlugin::supportedDevices() const
}
deviceClass.setStateTypes(stateTypes);
QList<ActionType> actionTypes;
foreach (const QJsonValue &actionTypesJson, jo.value("actionTypes").toArray()) {
QJsonObject at = actionTypesJson.toObject();
ActionType actionType(at.value("id").toString());
actionType.setName(at.value("name").toString());
actionType.setParamTypes(parseParamTypes(at.value("paramTypes").toArray()));
qDebug() << "***got actionType" << actionType.id();
actionTypes.append(actionType);
}
deviceClass.setActionTypes(actionTypes);
QList<EventType> eventTypes;
foreach (const QJsonValue &eventTypesJson, jo.value("eventTypes").toArray()) {
QJsonObject et = eventTypesJson.toObject();
EventType eventType(et.value("id").toString());
eventType.setName(et.value("name").toString());
eventType.setParamTypes(parseParamTypes(et.value("paramTypes").toArray()));
eventTypes.append(eventType);
}
deviceClass.setEventTypes(eventTypes);
deviceClasses.append(deviceClass);
}
}
@ -280,11 +293,6 @@ QList<ParamType> DevicePlugin::parseParamTypes(const QJsonArray &array) const
foreach (const QJsonValue &paramTypesJson, array) {
QJsonObject pt = paramTypesJson.toObject();
QVariant::Type t = QVariant::nameToType(pt.value("type").toString().toLatin1().data());
Q_ASSERT_X(t != QVariant::Invalid,
pluginName().toLatin1().data(),
QString("Invalid type %1 for param %2 in json file.")
.arg(pt.value("type").toString())
.arg(pt.value("name").toString()).toLatin1().data());
ParamType paramType(pt.value("name").toString(), t, pt.value("defaultValue").toVariant());
QVariantList allowedValues;
foreach (const QJsonValue &allowedTypesJson, pt.value("allowedValues").toArray()) {

View File

@ -96,6 +96,8 @@ protected:
private:
void initPlugin(const QJsonObject &metaData, DeviceManager *deviceManager);
QList<ParamType> parseParamTypes(const QJsonArray &array) const;
DeviceManager *m_deviceManager;
ParamList m_config;

View File

@ -4,7 +4,40 @@
"vendors": [
{
"name": "Conrad Electronic SE",
"id": "986cf06f-3ef1-4271-b2a3-2cc277ebecb6"
"id": "986cf06f-3ef1-4271-b2a3-2cc277ebecb6",
"deviceClasses": [
{
"deviceClassId": "17cd2492-28ab-4827-ba6e-5ef35be23f1b",
"name": "Conrad Remote",
"createMethods": ["user"],
"paramTypes": [
{
"name": "name",
"type": "QString"
}
],
"eventTypes": [
{
"id": "1f4050f5-4c90-4799-8d6d-e4069f3a2519",
"name": "Button pressed",
"paramTypes": [
{
"name": "button",
"type": "int"
},
{
"name": "group",
"type": "int"
},
{
"name": "power",
"type": "bool"
}
]
}
]
}
]
}
]
}

View File

@ -4,11 +4,168 @@
"vendors": [
{
"name": "Electronic Roos",
"id": "435a13a0-65ca-4f0c-94c1-e5873b258db5"
"id": "435a13a0-65ca-4f0c-94c1-e5873b258db5",
"deviceClasses": [
{
"deviceClassId": "d85c1ef4-197c-4053-8e40-707aa671d302",
"name": "Elro Remote",
"createMethods": ["user"],
"paramTypes": [
{
"name": "channel1",
"type": "bool"
},
{
"name": "channel2",
"type": "bool"
},
{
"name": "channel3",
"type": "bool"
},
{
"name": "channel4",
"type": "bool"
},
{
"name": "channel5",
"type": "bool"
}
],
"eventTypes": [
{
"id": "9dd3f862-35f3-4b69-954e-fa3c8bd68e39",
"name": "A",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "733226eb-91ba-4e37-9d78-12c87eb5e763",
"name": "B",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "47aaeaec-485a-4775-a543-33f339fd28c8",
"name": "C",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "db3d484c-add9-44ab-80a4-a0664e0c87c8",
"name": "D",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "eb914aac-fb73-4ee2-9f1b-c34b2f6cc24a",
"name": "E",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
}
]
},
{
"deviceClassId": "308ae6e6-38b3-4b3a-a513-3199da2764f8",
"name": "Elro switch",
"createMethods": ["user"],
"paramTypes": [
{
"name": "channel1",
"type": "bool"
},
{
"name": "channel2",
"type": "bool"
},
{
"name": "channel3",
"type": "bool"
},
{
"name": "channel4",
"type": "bool"
},
{
"name": "channel5",
"type": "bool"
},
{
"name": "A",
"type": "bool"
},
{
"name": "B",
"type": "bool"
},
{
"name": "C",
"type": "bool"
},
{
"name": "D",
"type": "bool"
},
{
"name": "E",
"type": "bool"
}
],
"actionTypes": [
{
"id": "31c9758e-6567-4f89-85bb-29e1a7c55d44",
"name": "Set power",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
}
]
},
{
"deviceClassId": "4c64aee6-7a4f-41f2-b278-edc55f0da0d3",
"name": "Elro motion detector",
"createMethods": ["discovery"]
}
]
},
{
"name": "Mumbi",
"id": "5f91c01c-0168-4bdf-a5ed-37cb6971b775"
},
{
"name": "Vivanco",
"id": "3826a836-ba69-4e50-8408-bb827fc92128"
},
{
"name": "Brennenstuhl",
"id": "4ac9dd1f-9ca9-4a76-aae1-3e91cfb86f5b"
},
{
"name": "BAT",
"id": "30115ad4-c83d-454a-a483-c781c951d3b6"
}
]
}

View File

@ -170,156 +170,6 @@ DevicePluginIntertechno::DevicePluginIntertechno()
{
}
//QList<DeviceClass> DevicePluginIntertechno::supportedDevices() const
//{
// QList<DeviceClass> ret;
// // =======================================
// // Remote
// DeviceClass deviceClassIntertechnoRemote(pluginId(), supportedVendors().first().id(), intertechnoRemote);
// deviceClassIntertechnoRemote.setName("Intertechno Remote");
// QList<ParamType> remoteParams;
// // family code = A-P
// ParamType familyParam("familyCode", QVariant::String);
// remoteParams.append(familyParam);
// deviceClassIntertechnoRemote.setParamTypes(remoteParams);
// QList<EventType> buttonEvents;
// QList<ParamType> paramsRemote;
// // on = true
// // off = false
// ParamType paramRemote("power", QVariant::Bool);
// paramsRemote.append(paramRemote);
// /* 1-16
// * ________________
// * | I | II|III| IV |
// * |---|---|---|----|
// * 1 | 1 | 5 | 9 | 13 |
// * 2 | 2 | 6 | 10| 14 |
// * 3 | 3 | 7 | 11| 15 |
// * 4 | 4 | 8 | 12| 16 |
// * |___|___|___|____|
// */
// EventType button1Event(EventTypeId("785c1b30-a3f2-4696-af7c-d532acf3d6f7"));
// button1Event.setName("1");
// button1Event.setParameters(paramsRemote);
// buttonEvents.append(button1Event);
// EventType button2Event(EventTypeId("1d42c850-7b43-452f-b205-e1aac14eb3ee"));
// button2Event.setName("2");
// button2Event.setParameters(paramsRemote);
// buttonEvents.append(button2Event);
// EventType button3Event(EventTypeId("77a4780e-2355-4a77-870d-2f675bf986ce"));
// button3Event.setName("3");
// button3Event.setParameters(paramsRemote);
// buttonEvents.append(button3Event);
// EventType button4Event(EventTypeId("bd6a8b4b-f946-4f3b-992f-e7cff10187b8"));
// button4Event.setName("4");
// button4Event.setParameters(paramsRemote);
// buttonEvents.append(button4Event);
// EventType button5Event(EventTypeId("0f20782e-0acc-45f1-8c42-5dc5f5b29f1b"));
// button5Event.setName("5");
// button5Event.setParameters(paramsRemote);
// buttonEvents.append(button5Event);
// EventType button6Event(EventTypeId("f7cb439a-0528-4905-9583-06b6bfeb3ba1"));
// button6Event.setName("6");
// button6Event.setParameters(paramsRemote);
// buttonEvents.append(button6Event);
// EventType button7Event(EventTypeId("a0b0d8d8-2b43-4897-98e0-05b6b408a950"));
// button7Event.setName("7");
// button7Event.setParameters(paramsRemote);
// buttonEvents.append(button7Event);
// EventType button8Event(EventTypeId("ae5833a2-bc43-4462-ae47-e45dac1fb0ce"));
// button8Event.setName("8");
// button8Event.setParameters(paramsRemote);
// buttonEvents.append(button8Event);
// EventType button9Event(EventTypeId("52c13828-d047-4256-b488-0bf84abbc87c"));
// button9Event.setName("9");
// button9Event.setParameters(paramsRemote);
// buttonEvents.append(button9Event);
// EventType button10Event(EventTypeId("22c5afbc-835e-47cc-8211-4429eb9d9fee"));
// button10Event.setName("10");
// button10Event.setParameters(paramsRemote);
// buttonEvents.append(button10Event);
// EventType button11Event(EventTypeId("6bec5cbc-8bfb-4c6c-8ac8-f8e7723fd5aa"));
// button11Event.setName("11");
// button11Event.setParameters(paramsRemote);
// buttonEvents.append(button11Event);
// EventType button12Event(EventTypeId("8b71edd2-8135-4c8b-bf44-380efadf1942"));
// button12Event.setName("12");
// button12Event.setParameters(paramsRemote);
// buttonEvents.append(button12Event);
// EventType button13Event(EventTypeId("192f36a4-1e58-41aa-9618-83d46e329a4b"));
// button13Event.setName("13");
// button13Event.setParameters(paramsRemote);
// buttonEvents.append(button13Event);
// EventType button14Event(EventTypeId("6c76de60-5e19-4a29-b027-e71e66caa2d6"));
// button14Event.setName("14");
// button14Event.setParameters(paramsRemote);
// buttonEvents.append(button14Event);
// EventType button15Event(EventTypeId("c2f56c10-1f81-4477-88fa-fc0f4a6383df"));
// button15Event.setName("15");
// button15Event.setParameters(paramsRemote);
// buttonEvents.append(button15Event);
// EventType button16Event(EventTypeId("5d2eb3f8-4cd4-4c71-9c0c-e0b685e168e4"));
// button16Event.setName("16");
// button16Event.setParameters(paramsRemote);
// buttonEvents.append(button16Event);
// deviceClassIntertechnoRemote.setEventTypes(buttonEvents);
// ret.append(deviceClassIntertechnoRemote);
// // =======================================
// // Switch
// DeviceClass deviceClassIntertechnoSwitch(pluginId(), supportedVendors().last().id(), intertechnoSwitch);
// deviceClassIntertechnoSwitch.setName("Intertechno Switch");
// QList<ParamType> switchDeviceParams;
// // button code = 1-16
// ParamType buttonParam("buttonCode", QVariant::Int);
// switchDeviceParams.append(familyParam);
// switchDeviceParams.append(buttonParam);
// deviceClassIntertechnoSwitch.setParamTypes(switchDeviceParams);
// QList<ActionType> switchActions;
// QList<ParamType> paramsSwitch;
// ParamType paramSwitch("power", QVariant::Bool);
// paramsSwitch.append(paramSwitch);
// ActionType switchActionPower(ActionTypeId("df19fb51-c3cd-4b95-8d88-ebbb535f4789"));
// switchActionPower.setName("power");
// switchActionPower.setParameters(paramsSwitch);
// switchActions.append(switchActionPower);
// deviceClassIntertechnoSwitch.setActions(switchActions);
// ret.append(deviceClassIntertechnoSwitch);
// return ret;
//}
DeviceManager::HardwareResources DevicePluginIntertechno::requiredHardware() const
{
return DeviceManager::HardwareResourceRadio433;

View File

@ -4,7 +4,213 @@
"vendors": [
{
"name": "Intertechno",
"id": "6a852bc2-34dd-4f4c-9ac9-dd4c32ddbcba"
"id": "6a852bc2-34dd-4f4c-9ac9-dd4c32ddbcba",
"deviceClasses": [
{
"deviceClassId": "ab73ad2f-6594-45a3-9063-8f72d365c5e5",
"name": "Intertechno Remote",
"createMethods": ["user"],
"paramTypes": [
{
"name": "familyCode",
"type": "QString",
"allowedValues": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"]
}
],
"eventTypes": [
{
"id": "785c1b30-a3f2-4696-af7c-d532acf3d6f7",
"name": "Button 1 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "1d42c850-7b43-452f-b205-e1aac14eb3ee",
"name": "Button 2 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "77a4780e-2355-4a77-870d-2f675bf986ce",
"name": "Button 3 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "bd6a8b4b-f946-4f3b-992f-e7cff10187b8",
"name": "Button 4 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "0f20782e-0acc-45f1-8c42-5dc5f5b29f1b",
"name": "Button 5 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "f7cb439a-0528-4905-9583-06b6bfeb3ba1",
"name": "Button 6 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "a0b0d8d8-2b43-4897-98e0-05b6b408a950",
"name": "Button 7 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "ae5833a2-bc43-4462-ae47-e45dac1fb0ce",
"name": "Button 8 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "52c13828-d047-4256-b488-0bf84abbc87c",
"name": "Button 9 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "22c5afbc-835e-47cc-8211-4429eb9d9fee",
"name": "Button 10 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "6bec5cbc-8bfb-4c6c-8ac8-f8e7723fd5aa",
"name": "Button 11 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "8b71edd2-8135-4c8b-bf44-380efadf1942",
"name": "Button 12 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "192f36a4-1e58-41aa-9618-83d46e329a4b",
"name": "Button 13 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "6c76de60-5e19-4a29-b027-e71e66caa2d6",
"name": "Button 14 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "c2f56c10-1f81-4477-88fa-fc0f4a6383df",
"name": "Button 15 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "5d2eb3f8-4cd4-4c71-9c0c-e0b685e168e4",
"name": "Button 16 pressed",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
}
]
},
{
"deviceClassId": "324219e8-7c53-41b5-b314-c2900cd15252",
"name": "Intertechno switch",
"createMethods": ["user"],
"paramTypes": [
{
"name": "familyCode",
"type": "QString",
"allowedValues": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"]
},
{
"name": "button",
"type": "int",
"minimumValue": 1,
"maximumValue": 16
}
],
"actionTypes": [
{
"id": "df19fb51-c3cd-4b95-8d88-ebbb535f4789",
"name": "Set power",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
}
]
}
]
}
]
}

View File

@ -37,54 +37,6 @@ DevicePluginLircd::DevicePluginLircd()
connect(m_lircClient, &LircClient::buttonPressed, this, &DevicePluginLircd::buttonPressed);
}
//QList<DeviceClass> DevicePluginLircd::supportedDevices() const
//{
// QList<DeviceClass> ret;
// DeviceClass deviceClassLircd(pluginId(), supportedVendors().first().id(), lircdDeviceClassId);
// deviceClassLircd.setName("IR Receiver");
// QList<ParamType> params;
// ParamType remoteNameParam("remoteName", QVariant::String);
// params.append(remoteNameParam);
// deviceClassLircd.setParamTypes(params);
// // TODO: find a way to load this stuff from a json file, really!
// // Ideally that file can be generated from /usr/share/lirc/remotes/*
// // Note that the IDs need to be kept static!
// QList<ParamType> repeatParam;
// ParamType repeatParamMap("repeat", QVariant::Int);
// repeatParam.append(repeatParamMap);
// QList<EventType> events;
// EventType powerButton(EventTypeId("d62d779f-e5c6-4767-98e6-efe9c062b662"));
// powerButton.setName("Power");
// powerButton.setParameters(repeatParam);
// events.append(powerButton);
// EventType yellowButton(EventTypeId("3313f62e-ea20-47f5-85af-28897d6ac440"));
// yellowButton.setName("Yellow");
// yellowButton.setParameters(repeatParam);
// events.append(yellowButton);
// EventType blueButton(EventTypeId("9a395d93-e482-4fa2-b4bc-e60bb4bf8652"));
// blueButton.setName("Blue");
// blueButton.setParameters(repeatParam);
// events.append(blueButton);
// EventType greenButton(EventTypeId("e8aaf18e-dc11-40da-980d-4eec42c58267"));
// greenButton.setName("Green");
// greenButton.setParameters(repeatParam);
// events.append(greenButton);
// EventType redButton(EventTypeId("b8518755-55a0-4cd4-8856-1680848edcb7"));
// redButton.setName("Red");
// redButton.setParameters(repeatParam);
// events.append(redButton);
// deviceClassLircd.setEventTypes(events);
// ret.append(deviceClassLircd);
// return ret;
//}
DeviceManager::HardwareResources DevicePluginLircd::requiredHardware() const
{
return DeviceManager::HardwareResourceNone;

View File

@ -4,7 +4,36 @@
"vendors": [
{
"name": "Lirc",
"id": "9a53049c-8828-4b87-b3f6-7bc7708196cd"
"id": "9a53049c-8828-4b87-b3f6-7bc7708196cd",
"deviceClasses": [
{
"deviceClassId": "5c2bc4cd-ba6c-4052-b6cd-1db83323ea22",
"name": "IR receiver",
"createMethods": ["user"],
"paramTypes": [
{
"name": "remoteName",
"type": "QString"
}
],
"eventTypes": [
{
"id": "8711471a-fa0e-410b-b174-dfc3d2aeffb1",
"name": "Button pressed",
"paramTypes": [
{
"name": "button",
"type": "string"
},
{
"name": "repeat",
"type": "int"
}
]
}
]
}
]
}
]
}

View File

@ -4,7 +4,17 @@
"vendors": [
{
"name": "guh",
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6"
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
"deviceClasses": [
{
"deviceClassId": "3869884a-1592-4b8f-84a7-994be18ff555",
"name": "GMail",
"createMethods": ["user"],
"paramTypes": [
]
}
]
}
]
}

View File

@ -44,154 +44,6 @@ DevicePluginMock::~DevicePluginMock()
{
}
//QList<DeviceClass> DevicePluginMock::supportedDevices() const
//{
// QList<DeviceClass> ret;
// DeviceClass deviceClassMock(pluginId(), supportedVendors().first().id(), mockDeviceClassId);
// deviceClassMock.setName("Mock Device");
// QList<ParamType> mockParams;
// ParamType portParam("httpport", QVariant::Int);
// mockParams.append(portParam);
// deviceClassMock.setParamTypes(mockParams);
// QList<StateType> mockStates;
// StateType intState(mockIntStateId);
// intState.setName("Dummy int state");
// intState.setType(QVariant::Int);
// intState.setDefaultValue(10);
// mockStates.append(intState);
// StateType boolState(mockBoolStateId);
// boolState.setName("Dummy bool state");
// boolState.setType(QVariant::Int);
// boolState.setDefaultValue(false);
// mockStates.append(boolState);
// deviceClassMock.setStateTypes(mockStates);
// QList<EventType> mockEvents;
// EventType event1(mockEvent1Id);
// event1.setName("Mock Event 1");
// mockEvents.append(event1);
// EventType event2(mockEvent2Id);
// event2.setName("Mock Event 2");
// QList<ParamType> event2ParamTypes;
// ParamType event2Param1Type("mockParamInt", QVariant::Int, 42);
// event2ParamTypes.append(event2Param1Type);
// event2.setParameters(event2ParamTypes);
// mockEvents.append(event2);
// deviceClassMock.setEventTypes(mockEvents);
// QList<ActionType> mockActions;
// mockParams.clear();
// ActionType action1(mockActionIdWithParams);
// action1.setName("Mock Action 1 (with params)");
// ParamType mockActionParam1("mockActionParam1", QVariant::Int);
// mockParams.append(mockActionParam1);
// ParamType mockActionParam2("mockActionParam2", QVariant::Bool);
// mockParams.append(mockActionParam2);
// action1.setParameters(mockParams);
// mockActions.append(action1);
// ActionType action2(mockActionIdNoParams);
// action2.setName("Mock Action 3 (without params)");
// mockActions.append(action2);
// ActionType action3(mockActionIdAsync);
// action3.setName("Mock Action 3 (async)");
// mockActions.append(action3);
// ActionType action4(mockActionIdFailing);
// action4.setName("Mock Action 4 (broken)");
// mockActions.append(action4);
// ActionType action5(mockActionIdAsyncFailing);
// action5.setName("Mock Action 5 (async, broken)");
// mockActions.append(action4);
// deviceClassMock.setActions(mockActions);
// ret.append(deviceClassMock);
// // Auto created mock device
// DeviceClass deviceClassMockAuto(pluginId(), supportedVendors().first().id(), mockDeviceAutoClassId);
// deviceClassMockAuto.setName("Mock Device (Auto created)");
// deviceClassMockAuto.setCreateMethod(DeviceClass::CreateMethodAuto);
// mockParams.clear();
// deviceClassMockAuto.setParamTypes(mockParams);
// deviceClassMockAuto.setStateTypes(mockStates);
// deviceClassMockAuto.setEventTypes(mockEvents);
// deviceClassMockAuto.setActions(mockActions);
// ret.append(deviceClassMockAuto);
// // Discovery created device
// DeviceClass deviceClassMockDiscovery(pluginId(), supportedVendors().first().id(), mockDeviceDiscoveryClassId);
// deviceClassMockDiscovery.setName("Mock Device (Discovery created)");
// deviceClassMockDiscovery.setCreateMethod(DeviceClass::CreateMethodDiscovery);
// QList<ParamType> paramTypes;
// ParamType paramType = ParamType("resultCount", QVariant::Int, 2);
// paramType.setAllowedValues(QList<QVariant>() << 1 << 2);
// paramTypes.append(paramType);
// deviceClassMockDiscovery.setDiscoveryParamTypes(paramTypes);
// mockParams.clear();
// mockParams.append(portParam);
// deviceClassMockDiscovery.setParamTypes(mockParams);
// deviceClassMockDiscovery.setStateTypes(mockStates);
// deviceClassMockDiscovery.setEventTypes(mockEvents);
// deviceClassMockDiscovery.setActions(mockActions);
// ret.append(deviceClassMockDiscovery);
// // Async setup device
// DeviceClass deviceClassMockAsync(pluginId(), supportedVendors().first().id(), mockDeviceAsyncSetupClassId);
// deviceClassMockAsync.setName("Mock Device (Async)");
// deviceClassMockAsync.setCreateMethod(DeviceClass::CreateMethodUser);
// deviceClassMockAsync.setParamTypes(mockParams);
// deviceClassMockAsync.setStateTypes(mockStates);
// deviceClassMockAsync.setEventTypes(mockEvents);
// deviceClassMockAsync.setActions(mockActions);
// ret.append(deviceClassMockAsync);
// // Async setup device
// DeviceClass deviceClassMockBroken(pluginId(), supportedVendors().first().id(), mockDeviceBrokenClassId);
// deviceClassMockBroken.setName("Mock Device (Broken setup)");
// deviceClassMockBroken.setCreateMethod(DeviceClass::CreateMethodUser);
// deviceClassMockBroken.setParamTypes(mockParams);
// deviceClassMockBroken.setStateTypes(mockStates);
// deviceClassMockBroken.setEventTypes(mockEvents);
// deviceClassMockBroken.setActions(mockActions);
// ret.append(deviceClassMockBroken);
// // Broken Async setup device
// DeviceClass deviceClassMockBrokenAsyncSetup(pluginId(), supportedVendors().first().id(), mockDeviceBrokenAsyncSetupClassId);
// deviceClassMockBrokenAsyncSetup.setName("Mock Device (Async Broken setup)");
// deviceClassMockBrokenAsyncSetup.setCreateMethod(DeviceClass::CreateMethodUser);
// deviceClassMockBrokenAsyncSetup.setParamTypes(mockParams);
// deviceClassMockBrokenAsyncSetup.setStateTypes(mockStates);
// deviceClassMockBrokenAsyncSetup.setEventTypes(mockEvents);
// deviceClassMockBrokenAsyncSetup.setActions(mockActions);
// ret.append(deviceClassMockBrokenAsyncSetup);
// return ret;
//}
DeviceManager::HardwareResources DevicePluginMock::requiredHardware() const
{
return DeviceManager::HardwareResourceTimer;

View File

@ -4,8 +4,99 @@
"vendors": [
{
"name": "guh",
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6"
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
"deviceClasses": [
{
"deviceClassId": "753f0d32-0468-4d08-82ed-1964aab03298",
"name": "Mock Device",
"createMethods": ["user", "auto", "discovery"],
"discoveryParamTypes": [
{
"name": "resultCount",
"type": "int",
"defaultValue": 2,
"allowedValues": [1, 2]
}
],
"paramTypes": [
{
"name": "httpport",
"type": "int"
},
{
"name": "async",
"type": "bool",
"defaultValue": false
},
{
"name": "broken",
"type": "bool",
"defaultValue": false
}
],
"stateTypes": [
{
"id": "80baec19-54de-4948-ac46-31eabfaceb83",
"name": "Dummy int state",
"defaultValue": 10
},
{
"id": "9dd6a97c-dfd1-43dc-acbd-367932742310",
"name:": "Dummy boo state",
"defaultValue": "false"
}
],
"eventTypes": [
{
"id": "45bf3752-0fc6-46b9-89fd-ffd878b5b22b",
"name": "Mock Event 1"
},
{
"id": "863d5920-b1cf-4eb9-88bd-8f7b8583b1cf",
"name": "Mock Event 2",
"paramTypes": [
{
"name": "mockParamInt",
"type": "int",
"defaultValue": 10
}
]
}
],
"actionTypes": [
{
"id": "dea0f4e1-65e3-4981-8eaa-2701c53a9185",
"name": "Mock Action 1 (with params)",
"paramTypes": [
{
"name": "mockActionParam1",
"type": "int"
},
{
"name": "mockActionParam2",
"type": "bool"
}
]
},
{
"id": "defd3ed6-1a0d-400b-8879-a0202cf39935",
"name": "Mock Action 2 (without params)"
},
{
"id": "fbae06d3-7666-483e-a39e-ec50fe89054e",
"name": "Mock Action 3 (async)"
},
{
"id": "df3cf33d-26d5-4577-9132-9823bd33fad0",
"name": "Mock Action 4 (broken)"
},
{
"id": "bfe89a1d-3497-4121-8318-e77c37537219",
"name": "Mock Action 5 (async, broken)"
}
]
}
]
}
]
}

View File

@ -4,8 +4,113 @@
"vendors": [
{
"name": "Openweathermap",
"id": "bf1e96f0-9650-4e7c-a56c-916d54d18e7a"
"id": "bf1e96f0-9650-4e7c-a56c-916d54d18e7a",
"deviceClasses": [
{
"deviceClassId": "985195aa-17ad-4530-88a4-cdd753d747d7",
"name": "Weather from openweathermap",
"createMethods": ["discovery"],
"discoveryParamTypes": [
{
"name": "location",
"type": "string"
}
],
"paramTypes": [
{
"name": "location",
"type": "string"
},
{
"name": "country",
"type": "string"
},
{
"name": "id",
"type": "string"
}
],
"actionTypes": [
{
"id": "cfbc6504-d86f-4856-8dfa-97b6fbb385e4",
"name": "Update"
}
],
"stateTypes": [
{
"id": "36b2f09b-7d77-4fbc-a68f-23d735dda0b1",
"name": "last update [unixtime]",
"type": "uint",
"defaultValue": "0"
},
{
"id": "6013402f-b5b1-46b3-8490-f0c20d62fe61",
"name": "temperature [Celsius]",
"type": "double",
"defaultValue": "0"
},
{
"id": "14ec2781-cb04-4bbf-b097-7d01ef982630",
"name": "temperature minimum [Celsius]",
"type": "double",
"defaultValue": "0"
},
{
"id": "fefe5563-452f-4833-b5cf-49c3cc67c772",
"name": "temperature maximum [Celsius]",
"type": "double",
"defaultValue": "0"
},
{
"id": "6f32ec73-3240-4630-ada9-1c10b8e98123",
"name": "humidity [%]",
"type": "int",
"defaultValue": "-1"
},
{
"id": "4a42eea9-00eb-440b-915e-dbe42180f83b",
"name": "pressure [hPa]",
"type": "double",
"defaultValue": "0"
},
{
"id": "2bf63430-e9e2-4fbf-88e6-6f1b4770f287",
"name": "wind speed [m/s]",
"type": "double",
"defaultValue": "0"
},
{
"id": "589e2ea5-65b2-4afd-9b72-e3708a589a12",
"name": "wind direction [degree]",
"type": "int",
"defaultValue": "0"
},
{
"id": "798553bc-45c7-42eb-9105-430bddb5d9b7",
"name": "cloudiness [%]",
"type": "int",
"defaultValue": "0"
},
{
"id": "f9539108-0e0e-4736-a306-6408f8e20a26",
"name": "weather description",
"type": "QString"
},
{
"id": "af155e94-9492-44e1-8608-7d0ee8b5d50d",
"name": "sunset [timestamp]",
"type": "uint",
"defaultValue": "0"
},
{
"id": "a1dddc3d-549f-4f20-b78b-be850548f286",
"name": "sunrise [unixtime]",
"type": "int",
"defaultValue": "0"
}
]
}
]
}
]
}

View File

@ -52,76 +52,6 @@ DevicePluginPhilipsHue::DevicePluginPhilipsHue():
connect(m_bridge, &HueBridgeConnection::getFinished, this, &DevicePluginPhilipsHue::getFinished);
}
//QList<DeviceClass> DevicePluginPhilipsHue::supportedDevices() const
//{
// QList<DeviceClass> ret;
// QList<StateType> hueStates;
// StateType powerState(huePowerStateTypeId);
// powerState.setName("power");
// powerState.setType(QVariant::Bool);
// powerState.setDefaultValue(false);
// hueStates.append(powerState);
// StateType brightnessState(hueBrightnessStateTypeId);
// brightnessState.setName("brightness");
// brightnessState.setType(QVariant::Int);
// brightnessState.setDefaultValue(255);
// hueStates.append(brightnessState);
// deviceClassHue.setStateTypes(hueStates);
// QList<ActionType> hueActons;
// ActionType setColorAction(hueSetColorActionTypeId);
// setColorAction.setName("Set color");
// QList<ParamType> actionParamsSetColor;
// ParamType actionParamSetColor("color", QVariant::Color);
// actionParamsSetColor.append(actionParamSetColor);
// setColorAction.setParameters(actionParamsSetColor);
// hueActons.append(setColorAction);
// ActionType setPowerAction(hueSetPowerActionTypeId);
// setPowerAction.setName("Power");
// QList<ParamType> actionParamsSetPower;
// ParamType actionParamSetPower("power", QVariant::Bool);
// actionParamsSetPower.append(actionParamSetPower);
// setPowerAction.setParameters(actionParamsSetPower);
// hueActons.append(setPowerAction);
// ActionType setBrightnessAction(hueSetBrightnessActionTypeId);
// setBrightnessAction.setName("Brightness");
// QList<ParamType> actionParamsSetBrightness;
// ParamType actionParamSetBrightness("brightness", QVariant::Int);
// actionParamSetBrightness.setMinValue(0);
// actionParamSetBrightness.setMaxValue(255);
// actionParamsSetBrightness.append(actionParamSetBrightness);
// setBrightnessAction.setParameters(actionParamsSetBrightness);
// hueActons.append(setBrightnessAction);
// deviceClassHue.setActions(hueActons);
// ret.append(deviceClassHue);
// // Now create the same device again with CreateMethodAuto
// // When we pair a bridge, one discovered device is created.
// // The other light bulbs connected to the bridge will
// // then appear as auto devices.
// DeviceClass deviceClassHueAuto(pluginId(), hueVendorId, hueDeviceClassAutoId);
// deviceClassHueAuto.setName("Hue");
// deviceClassHueAuto.setCreateMethod(DeviceClass::CreateMethodAuto);
// deviceClassHueAuto.setParamTypes(paramTypes);
// deviceClassHueAuto.setStateTypes(hueStates);
// deviceClassHueAuto.setActions(hueActons);
// ret.append(deviceClassHueAuto);
// return ret;
//}
DeviceManager::HardwareResources DevicePluginPhilipsHue::requiredHardware() const
{
return DeviceManager::HardwareResourceTimer;

View File

@ -9,7 +9,7 @@
{
"deviceClassId": "d8f4c397-e05e-47c1-8917-8e72d4d0d47c",
"name": "Hue",
"createMethod": "discovery",
"createMethods": ["discovery", "auto"],
"setupMethod": "pushButton",
"pairingInfo": "Please press the button on the Hue bridge and then press OK",
"paramTypes": [
@ -38,6 +38,38 @@
"type": "color",
"defaultValue": "black"
}
],
"actionTypes": [
{
"id": "29cc299a-818b-47b2-817f-c5a6361545e4",
"name": "Set color",
"paramTypes": [
{
"name": "color",
"type": "QColor"
}
]
},
{
"id": "7782d91e-d73a-4321-8828-da768e2f6827",
"name": "Set power",
"paramTypes": [
{
"name": "power",
"type": "bool"
}
]
},
{
"id": "3bc95552-cba0-4222-abd5-9b668132e442",
"name": "Set brightness",
"paramTypes": [
{
"name": "brightness",
"type": "int"
}
]
}
]
}
]

View File

@ -4,8 +4,30 @@
"vendors": [
{
"name": "guh",
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6"
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
"deviceClasses": [
{
"deviceClassId": "3c8f2447-dcd0-4882-8c09-99e579e4d24c",
"name": "Wake On Lan",
"createMethods": ["user"],
"paramTypes": [
{
"name": "name",
"type": "QString"
},
{
"name": "MAC",
"type": "QString"
}
],
"actionTypes": [
{
"id": "fb9b9d87-218f-4f0d-9e16-39f8a105029a",
"name": "Wake up device"
}
]
}
]
}
]
}

View File

@ -31,34 +31,6 @@ DevicePluginWifiDetector::DevicePluginWifiDetector()
{
}
//QList<DeviceClass> DevicePluginWifiDetector::supportedDevices() const
//{
// QList<DeviceClass> ret;
// DeviceClass deviceClassWifiDetector(pluginId(), supportedVendors().first().id(), detectorId);
// deviceClassWifiDetector.setName("WiFi Device");
// QList<ParamType> detectorParams;
// ParamType macParam("mac", QVariant::String);
// detectorParams.append(macParam);
// deviceClassWifiDetector.setParamTypes(detectorParams);
// QList<StateType> detectorStates;
// StateType inRangeState(inRangeStateTypeId);
// inRangeState.setName("inRange");
// inRangeState.setType(QVariant::Bool);
// inRangeState.setDefaultValue(false);
// detectorStates.append(inRangeState);
// deviceClassWifiDetector.setStateTypes(detectorStates);
// ret.append(deviceClassWifiDetector);
// return ret;
//}
DeviceManager::HardwareResources DevicePluginWifiDetector::requiredHardware() const
{
return DeviceManager::HardwareResourceTimer;

View File

@ -4,7 +4,29 @@
"vendors": [
{
"name": "guh",
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6"
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
"deviceClasses": [
{
"deviceClassId": "bd216356-f1ec-4324-9785-6982d2174e17",
"name": "WiFi Device",
"createMethods": ["user"],
"paramTypes": [
{
"name": "MAC",
"type": "QString"
}
],
"stateTypes": [
{
"id": "cb43e1b5-4f61-4538-bfa2-c33055c542cf",
"name": "In Range",
"type": "bool",
"defaultValue": false
}
]
}
]
}
]