From 4f679b3bc3bc2fea73eb16cfd4e2492c0b28fc6c Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 5 Apr 2014 22:01:38 +0200 Subject: [PATCH] restructure lib a bit. added initial code for the new rules stuff --- libguh/driver.cpp | 0 libguh/driver.h | 0 libguh/{ => hardware}/gpio.cpp | 0 libguh/{ => hardware}/gpio.h | 0 libguh/{ => hardware}/radio433.cpp | 0 libguh/{ => hardware}/radio433.h | 2 +- libguh/libguh.pro | 50 ++++++++++--------- libguh/{ => plugin}/device.cpp | 0 libguh/{ => plugin}/device.h | 2 +- libguh/{ => plugin}/deviceclass.cpp | 0 libguh/{ => plugin}/deviceclass.h | 6 +-- libguh/{ => plugin}/devicemanager.cpp | 7 ++- libguh/{ => plugin}/devicemanager.h | 8 ++- libguh/{ => plugin}/deviceplugin.cpp | 2 +- libguh/{ => plugin}/deviceplugin.h | 7 ++- libguh/{ => types}/action.cpp | 0 libguh/{ => types}/action.h | 0 libguh/{ => types}/actiontype.cpp | 0 libguh/{ => types}/actiontype.h | 0 libguh/{ => types}/event.cpp | 0 libguh/{ => types}/event.h | 0 libguh/{ => types}/eventtype.cpp | 0 libguh/{ => types}/eventtype.h | 0 libguh/{ => types}/state.cpp | 0 libguh/{ => types}/state.h | 0 libguh/{ => types}/statetype.cpp | 0 libguh/{ => types}/statetype.h | 0 libguh/types/vendor.cpp | 27 ++++++++++ libguh/types/vendor.h | 23 +++++++++ .../conrad/devicepluginconrad.cpp | 16 ++++-- .../deviceplugins/conrad/devicepluginconrad.h | 3 +- .../deviceplugins/elro/devicepluginelro.cpp | 21 ++++++-- plugins/deviceplugins/elro/devicepluginelro.h | 3 +- .../intertechno/devicepluginintertechno.cpp | 14 ++++-- .../intertechno/devicepluginintertechno.h | 3 +- .../meisteranker/devicepluginmeisteranker.cpp | 14 ++++-- .../meisteranker/devicepluginmeisteranker.h | 3 +- .../deviceplugins/mock/devicepluginmock.cpp | 13 ++++- plugins/deviceplugins/mock/devicepluginmock.h | 3 +- plugins/deviceplugins/mock/httpdaemon.cpp | 8 +-- .../devicepluginweatherground.cpp | 14 +++++- .../weatherground/devicepluginweatherground.h | 3 +- .../wifidetector/devicepluginwifidetector.cpp | 13 ++++- .../wifidetector/devicepluginwifidetector.h | 3 +- server/guhcore.cpp | 5 +- server/guhcore.h | 2 +- server/jsonrpc/actionhandler.cpp | 4 +- server/jsonrpc/devicehandler.cpp | 8 +-- server/jsonrpc/jsonrpcserver.cpp | 10 ++-- server/jsonrpc/jsonrpcserver.h | 7 +-- server/jsonrpc/jsontypes.cpp | 4 +- server/jsonrpc/jsontypes.h | 9 ++-- server/rule.h | 8 +-- server/ruleengine.cpp | 47 ++++++++--------- server/ruleengine.h | 2 +- server/server.pri | 6 ++- server/stateevaluator.cpp | 7 +++ server/stateevaluator.h | 33 ++++++++++++ tests/auto/testjsonrpc.cpp | 2 +- 59 files changed, 304 insertions(+), 118 deletions(-) delete mode 100644 libguh/driver.cpp delete mode 100644 libguh/driver.h rename libguh/{ => hardware}/gpio.cpp (100%) rename libguh/{ => hardware}/gpio.h (100%) rename libguh/{ => hardware}/radio433.cpp (100%) rename libguh/{ => hardware}/radio433.h (98%) rename libguh/{ => plugin}/device.cpp (100%) rename libguh/{ => plugin}/device.h (98%) rename libguh/{ => plugin}/deviceclass.cpp (100%) rename libguh/{ => plugin}/deviceclass.h (96%) rename libguh/{ => plugin}/devicemanager.cpp (99%) rename libguh/{ => plugin}/devicemanager.h (95%) rename libguh/{ => plugin}/deviceplugin.cpp (99%) rename libguh/{ => plugin}/deviceplugin.h (95%) rename libguh/{ => types}/action.cpp (100%) rename libguh/{ => types}/action.h (100%) rename libguh/{ => types}/actiontype.cpp (100%) rename libguh/{ => types}/actiontype.h (100%) rename libguh/{ => types}/event.cpp (100%) rename libguh/{ => types}/event.h (100%) rename libguh/{ => types}/eventtype.cpp (100%) rename libguh/{ => types}/eventtype.h (100%) rename libguh/{ => types}/state.cpp (100%) rename libguh/{ => types}/state.h (100%) rename libguh/{ => types}/statetype.cpp (100%) rename libguh/{ => types}/statetype.h (100%) create mode 100644 libguh/types/vendor.cpp create mode 100644 libguh/types/vendor.h create mode 100644 server/stateevaluator.cpp create mode 100644 server/stateevaluator.h diff --git a/libguh/driver.cpp b/libguh/driver.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/libguh/driver.h b/libguh/driver.h deleted file mode 100644 index e69de29b..00000000 diff --git a/libguh/gpio.cpp b/libguh/hardware/gpio.cpp similarity index 100% rename from libguh/gpio.cpp rename to libguh/hardware/gpio.cpp diff --git a/libguh/gpio.h b/libguh/hardware/gpio.h similarity index 100% rename from libguh/gpio.h rename to libguh/hardware/gpio.h diff --git a/libguh/radio433.cpp b/libguh/hardware/radio433.cpp similarity index 100% rename from libguh/radio433.cpp rename to libguh/hardware/radio433.cpp diff --git a/libguh/radio433.h b/libguh/hardware/radio433.h similarity index 98% rename from libguh/radio433.h rename to libguh/hardware/radio433.h index 0b27bda2..7984901f 100644 --- a/libguh/radio433.h +++ b/libguh/hardware/radio433.h @@ -21,7 +21,7 @@ #include #include -#include +#include #define RC_MAX_CHANGES 67 diff --git a/libguh/libguh.pro b/libguh/libguh.pro index 5fd703e1..70c627a8 100644 --- a/libguh/libguh.pro +++ b/libguh/libguh.pro @@ -6,29 +6,31 @@ CONFIG += c++11 target.path = /usr/lib INSTALLS += target -SOURCES += device.cpp \ - deviceclass.cpp \ - devicemanager.cpp \ - deviceplugin.cpp \ - radio433.cpp \ - gpio.cpp \ - action.cpp \ - actiontype.cpp \ - state.cpp \ - statetype.cpp \ - eventtype.cpp \ - event.cpp +SOURCES += plugin/device.cpp \ + plugin/deviceclass.cpp \ + plugin/devicemanager.cpp \ + plugin/deviceplugin.cpp \ + hardware/radio433.cpp \ + hardware/gpio.cpp \ + types/action.cpp \ + types/actiontype.cpp \ + types/state.cpp \ + types/statetype.cpp \ + types/eventtype.cpp \ + types/event.cpp \ + types/vendor.cpp -HEADERS += device.h \ - deviceclass.h \ - devicemanager.h \ - deviceplugin.h \ - radio433.h \ - gpio.h \ - action.h \ - actiontype.h \ - state.h \ - statetype.h \ - eventtype.h \ - event.h +HEADERS += plugin/device.h \ + plugin/deviceclass.h \ + plugin/devicemanager.h \ + plugin/deviceplugin.h \ + hardware/radio433.h \ + hardware/gpio.h \ + types/action.h \ + types/actiontype.h \ + types/state.h \ + types/statetype.h \ + types/eventtype.h \ + types/event.h \ + types/vendor.h diff --git a/libguh/device.cpp b/libguh/plugin/device.cpp similarity index 100% rename from libguh/device.cpp rename to libguh/plugin/device.cpp diff --git a/libguh/device.h b/libguh/plugin/device.h similarity index 98% rename from libguh/device.h rename to libguh/plugin/device.h index ea538cd7..950d9c9b 100644 --- a/libguh/device.h +++ b/libguh/plugin/device.h @@ -19,7 +19,7 @@ #ifndef DEVICE_H #define DEVICE_H -#include "state.h" +#include "types/state.h" #include #include diff --git a/libguh/deviceclass.cpp b/libguh/plugin/deviceclass.cpp similarity index 100% rename from libguh/deviceclass.cpp rename to libguh/plugin/deviceclass.cpp diff --git a/libguh/deviceclass.h b/libguh/plugin/deviceclass.h similarity index 96% rename from libguh/deviceclass.h rename to libguh/plugin/deviceclass.h index 14dad77d..9181c345 100644 --- a/libguh/deviceclass.h +++ b/libguh/plugin/deviceclass.h @@ -19,9 +19,9 @@ #ifndef DEVICECLASS_H #define DEVICECLASS_H -#include "eventtype.h" -#include "actiontype.h" -#include "statetype.h" +#include "types/eventtype.h" +#include "types/actiontype.h" +#include "types/statetype.h" #include #include diff --git a/libguh/devicemanager.cpp b/libguh/plugin/devicemanager.cpp similarity index 99% rename from libguh/devicemanager.cpp rename to libguh/plugin/devicemanager.cpp index e0d26ae8..32c7f88e 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/plugin/devicemanager.cpp @@ -75,7 +75,7 @@ #include "devicemanager.h" -#include "radio433.h" +#include "hardware/radio433.h" #include "device.h" #include "deviceclass.h" @@ -116,6 +116,11 @@ DevicePlugin *DeviceManager::plugin(const QUuid &id) const return m_devicePlugins.value(id); } +QList DeviceManager::supportedVendors() const +{ + return m_supportedVendors.values(); +} + /*! Returns all the supported \l{DeviceClass}{DeviceClasses} by all \l{DevicePlugin}{DevicePlugins} loaded in the system. */ QList DeviceManager::supportedDevices() const { diff --git a/libguh/devicemanager.h b/libguh/plugin/devicemanager.h similarity index 95% rename from libguh/devicemanager.h rename to libguh/plugin/devicemanager.h index 229043e1..852b1a10 100644 --- a/libguh/devicemanager.h +++ b/libguh/plugin/devicemanager.h @@ -20,8 +20,10 @@ #define DEVICEMANAGER_H #include "deviceclass.h" -#include "event.h" -#include "action.h" + +#include "types/event.h" +#include "types/action.h" +#include "types/vendor.h" #include #include @@ -57,6 +59,7 @@ public: QList plugins() const; DevicePlugin* plugin(const QUuid &id) const; + QList supportedVendors() const; QList supportedDevices() const; QList configuredDevices() const; @@ -90,6 +93,7 @@ private slots: private: bool setupDevice(Device *device); + QHash m_supportedVendors; QHash m_supportedDevices; QList m_configuredDevices; diff --git a/libguh/deviceplugin.cpp b/libguh/plugin/deviceplugin.cpp similarity index 99% rename from libguh/deviceplugin.cpp rename to libguh/plugin/deviceplugin.cpp index c94b2c23..6883f96c 100644 --- a/libguh/deviceplugin.cpp +++ b/libguh/plugin/deviceplugin.cpp @@ -86,7 +86,7 @@ pure virtual methods: \l{DevicePlugin::pluginName()}, \l{DevicePlugin::pluginId( #include "deviceplugin.h" #include "devicemanager.h" -#include "radio433.h" +#include "hardware/radio433.h" #include diff --git a/libguh/deviceplugin.h b/libguh/plugin/deviceplugin.h similarity index 95% rename from libguh/deviceplugin.h rename to libguh/plugin/deviceplugin.h index 6b133eff..3202154e 100644 --- a/libguh/deviceplugin.h +++ b/libguh/plugin/deviceplugin.h @@ -21,8 +21,10 @@ #include "devicemanager.h" #include "deviceclass.h" -#include "event.h" -#include "action.h" + +#include "types/event.h" +#include "types/action.h" +#include "types/vendor.h" #include @@ -41,6 +43,7 @@ public: virtual QString pluginName() const = 0; virtual QUuid pluginId() const = 0; + virtual QList supportedVendors() const = 0; virtual QList supportedDevices() const = 0; virtual DeviceManager::HardwareResources requiredHardware() const = 0; diff --git a/libguh/action.cpp b/libguh/types/action.cpp similarity index 100% rename from libguh/action.cpp rename to libguh/types/action.cpp diff --git a/libguh/action.h b/libguh/types/action.h similarity index 100% rename from libguh/action.h rename to libguh/types/action.h diff --git a/libguh/actiontype.cpp b/libguh/types/actiontype.cpp similarity index 100% rename from libguh/actiontype.cpp rename to libguh/types/actiontype.cpp diff --git a/libguh/actiontype.h b/libguh/types/actiontype.h similarity index 100% rename from libguh/actiontype.h rename to libguh/types/actiontype.h diff --git a/libguh/event.cpp b/libguh/types/event.cpp similarity index 100% rename from libguh/event.cpp rename to libguh/types/event.cpp diff --git a/libguh/event.h b/libguh/types/event.h similarity index 100% rename from libguh/event.h rename to libguh/types/event.h diff --git a/libguh/eventtype.cpp b/libguh/types/eventtype.cpp similarity index 100% rename from libguh/eventtype.cpp rename to libguh/types/eventtype.cpp diff --git a/libguh/eventtype.h b/libguh/types/eventtype.h similarity index 100% rename from libguh/eventtype.h rename to libguh/types/eventtype.h diff --git a/libguh/state.cpp b/libguh/types/state.cpp similarity index 100% rename from libguh/state.cpp rename to libguh/types/state.cpp diff --git a/libguh/state.h b/libguh/types/state.h similarity index 100% rename from libguh/state.h rename to libguh/types/state.h diff --git a/libguh/statetype.cpp b/libguh/types/statetype.cpp similarity index 100% rename from libguh/statetype.cpp rename to libguh/types/statetype.cpp diff --git a/libguh/statetype.h b/libguh/types/statetype.h similarity index 100% rename from libguh/statetype.h rename to libguh/types/statetype.h diff --git a/libguh/types/vendor.cpp b/libguh/types/vendor.cpp new file mode 100644 index 00000000..f7cc2473 --- /dev/null +++ b/libguh/types/vendor.cpp @@ -0,0 +1,27 @@ +#include "vendor.h" + +Vendor::Vendor(const QUuid &id, const QString &name): + m_id(id), + m_name(name) +{ +} + +QUuid Vendor::id() const +{ + return m_id; +} + +void Vendor::setId(const QUuid &id) +{ + m_id = id; +} + +QString Vendor::name() const +{ + return m_name; +} + +void Vendor::setName(const QString &name) +{ + m_name = name; +} diff --git a/libguh/types/vendor.h b/libguh/types/vendor.h new file mode 100644 index 00000000..bc454999 --- /dev/null +++ b/libguh/types/vendor.h @@ -0,0 +1,23 @@ +#ifndef VENDOR_H +#define VENDOR_H + +#include +#include + +class Vendor +{ +public: + Vendor(const QUuid &id, const QString &name = QString()); + + QUuid id() const; + void setId(const QUuid &id); + + QString name() const; + void setName(const QString &name); + +private: + QUuid m_id; + QString m_name; +}; + +#endif // VENDOR_H diff --git a/plugins/deviceplugins/conrad/devicepluginconrad.cpp b/plugins/deviceplugins/conrad/devicepluginconrad.cpp index 73284bb9..72ac8b0b 100644 --- a/plugins/deviceplugins/conrad/devicepluginconrad.cpp +++ b/plugins/deviceplugins/conrad/devicepluginconrad.cpp @@ -52,21 +52,29 @@ #include "devicepluginconrad.h" -#include "device.h" -#include "devicemanager.h" -#include "radio433.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" +#include "hardware/radio433.h" #include #include +QUuid conradVendorId = QUuid("986cf06f-3ef1-4271-b2a3-2cc277ebecb6"); QUuid conradRemoteId = QUuid("17cd2492-28ab-4827-ba6e-5ef35be23f1b"); - DevicePluginConrad::DevicePluginConrad() { } +QList DevicePluginConrad::supportedVendors() const +{ + QList ret; + Vendor conrad(conradVendorId, "Conrad Electronic SE"); + ret.append(conrad); + return ret; +} + QList DevicePluginConrad::supportedDevices() const { // TODO: load list from config with static uuid diff --git a/plugins/deviceplugins/conrad/devicepluginconrad.h b/plugins/deviceplugins/conrad/devicepluginconrad.h index 2772a035..21019071 100644 --- a/plugins/deviceplugins/conrad/devicepluginconrad.h +++ b/plugins/deviceplugins/conrad/devicepluginconrad.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGINCONRAD_H #define DEVICEPLUGINCONRAD_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" class DevicePluginConrad : public DevicePlugin { @@ -31,6 +31,7 @@ class DevicePluginConrad : public DevicePlugin public: explicit DevicePluginConrad(); + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/plugins/deviceplugins/elro/devicepluginelro.cpp b/plugins/deviceplugins/elro/devicepluginelro.cpp index 0e8adee1..56d8f08e 100644 --- a/plugins/deviceplugins/elro/devicepluginelro.cpp +++ b/plugins/deviceplugins/elro/devicepluginelro.cpp @@ -52,13 +52,16 @@ #include "devicepluginelro.h" -#include "device.h" -#include "devicemanager.h" -#include "radio433.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" +#include "hardware/radio433.h" #include #include +QUuid elroVendorId = QUuid("435a13a0-65ca-4f0c-94c1-e5873b258db5"); +QUuid mumbiVendorId = QUuid("5f91c01c-0168-4bdf-a5ed-37cb6971b775"); + QUuid elroRemoteId = QUuid("d85c1ef4-197c-4053-8e40-707aa671d302"); QUuid elroSwitchId = QUuid("308ae6e6-38b3-4b3a-a513-3199da2764f8"); @@ -66,6 +69,18 @@ DevicePluginElro::DevicePluginElro() { } +QList DevicePluginElro::supportedVendors() const +{ + QList ret; + Vendor elro(elroVendorId, "Electronic Roos"); + ret.append(elro); + + Vendor mumbi(mumbiVendorId, "Mumbi"); + ret.append(mumbi); + + return ret; +} + QList DevicePluginElro::supportedDevices() const { // TODO: load list from config with static uuid diff --git a/plugins/deviceplugins/elro/devicepluginelro.h b/plugins/deviceplugins/elro/devicepluginelro.h index 5deb6afb..5910222f 100644 --- a/plugins/deviceplugins/elro/devicepluginelro.h +++ b/plugins/deviceplugins/elro/devicepluginelro.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGINELRO_H #define DEVICEPLUGINELRO_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" class DevicePluginElro : public DevicePlugin { @@ -31,6 +31,7 @@ class DevicePluginElro : public DevicePlugin public: explicit DevicePluginElro(); + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/plugins/deviceplugins/intertechno/devicepluginintertechno.cpp b/plugins/deviceplugins/intertechno/devicepluginintertechno.cpp index f935e894..54832220 100644 --- a/plugins/deviceplugins/intertechno/devicepluginintertechno.cpp +++ b/plugins/deviceplugins/intertechno/devicepluginintertechno.cpp @@ -157,13 +157,14 @@ #include "devicepluginintertechno.h" -#include "device.h" -#include "devicemanager.h" -#include "radio433.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" +#include "hardware/radio433.h" #include #include +QUuid intertechnoVendorId = QUuid("6a852bc2-34dd-4f4c-9ac9-dd4c32ddbcba"); QUuid intertechnoRemote = QUuid("ab73ad2f-6594-45a3-9063-8f72d365c5e5"); QUuid intertechnoSwitch = QUuid("324219e8-7c53-41b5-b314-c2900cd15252"); @@ -171,6 +172,13 @@ DevicePluginIntertechno::DevicePluginIntertechno() { } +QList DevicePluginIntertechno::supportedVendors() const +{ + QList ret; + Vendor intertechno(intertechnoVendorId, "Intertechno"); + return ret; +} + QList DevicePluginIntertechno::supportedDevices() const { QList ret; diff --git a/plugins/deviceplugins/intertechno/devicepluginintertechno.h b/plugins/deviceplugins/intertechno/devicepluginintertechno.h index a9ed31bc..6cd95f57 100644 --- a/plugins/deviceplugins/intertechno/devicepluginintertechno.h +++ b/plugins/deviceplugins/intertechno/devicepluginintertechno.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGININTERTECHNO_H #define DEVICEPLUGININTERTECHNO_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" class DevicePluginIntertechno : public DevicePlugin { @@ -31,6 +31,7 @@ class DevicePluginIntertechno : public DevicePlugin public: explicit DevicePluginIntertechno(); + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.cpp b/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.cpp index 64f601a9..0d17f2cf 100644 --- a/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.cpp +++ b/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.cpp @@ -42,19 +42,27 @@ #include "devicepluginmeisteranker.h" -#include "device.h" -#include "devicemanager.h" -#include "radio433.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" +#include "hardware/radio433.h" #include #include +QUuid meisterAnkerVendorId = QUuid("c181e749-5f72-4e25-a0af-094633abd7d5"); QUuid thermometer = QUuid("e37e9f34-95b9-4a22-ae4f-e8b874eec871"); DevicePluginMeisterAnker::DevicePluginMeisterAnker() { } +QList DevicePluginMeisterAnker::supportedVendors() const +{ + QList ret; + Vendor meisterAnker(meisterAnkerVendorId, "Meister Anker"); + ret.append(meisterAnker); +} + QList DevicePluginMeisterAnker::supportedDevices() const { QList ret; diff --git a/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.h b/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.h index f0277550..62b274fb 100644 --- a/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.h +++ b/plugins/deviceplugins/meisteranker/devicepluginmeisteranker.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGINMEISTERANKER_H #define DEVICEPLUGINMEISTERANKER_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" class DevicePluginMeisterAnker : public DevicePlugin @@ -32,6 +32,7 @@ class DevicePluginMeisterAnker : public DevicePlugin public: explicit DevicePluginMeisterAnker(); + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/plugins/deviceplugins/mock/devicepluginmock.cpp b/plugins/deviceplugins/mock/devicepluginmock.cpp index e21b6ab3..2511e9a7 100644 --- a/plugins/deviceplugins/mock/devicepluginmock.cpp +++ b/plugins/deviceplugins/mock/devicepluginmock.cpp @@ -19,12 +19,13 @@ #include "devicepluginmock.h" #include "httpdaemon.h" -#include "device.h" -#include "devicemanager.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" #include #include +QUuid guhVendorId = QUuid("2062d64d-3232-433c-88bc-0d33c0ba2ba6"); QUuid mockEvent1Id = QUuid("45bf3752-0fc6-46b9-89fd-ffd878b5b22b"); QUuid mockEvent2Id = QUuid("863d5920-b1cf-4eb9-88bd-8f7b8583b1cf"); QUuid mockIntStateId = QUuid("80baec19-54de-4948-ac46-31eabfaceb83"); @@ -36,6 +37,14 @@ DevicePluginMock::DevicePluginMock() { } +QList DevicePluginMock::supportedVendors() const +{ + QList ret; + Vendor guh(guhVendorId, "guh"); + ret.append(guh); + return ret; +} + QList DevicePluginMock::supportedDevices() const { QList ret; diff --git a/plugins/deviceplugins/mock/devicepluginmock.h b/plugins/deviceplugins/mock/devicepluginmock.h index 61457594..f8b72636 100644 --- a/plugins/deviceplugins/mock/devicepluginmock.h +++ b/plugins/deviceplugins/mock/devicepluginmock.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGINMOCK_H #define DEVICEPLUGINMOCK_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" #include @@ -35,6 +35,7 @@ class DevicePluginMock : public DevicePlugin public: explicit DevicePluginMock(); + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/plugins/deviceplugins/mock/httpdaemon.cpp b/plugins/deviceplugins/mock/httpdaemon.cpp index 5a1c4720..93f9d525 100644 --- a/plugins/deviceplugins/mock/httpdaemon.cpp +++ b/plugins/deviceplugins/mock/httpdaemon.cpp @@ -1,9 +1,9 @@ #include "httpdaemon.h" -#include "device.h" -#include "deviceclass.h" -#include "deviceplugin.h" -#include "statetype.h" +#include "plugin/device.h" +#include "plugin/deviceclass.h" +#include "plugin/deviceplugin.h" +#include "types/statetype.h" #include #include diff --git a/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp b/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp index 6ebdcb76..9727e785 100644 --- a/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp +++ b/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp @@ -18,8 +18,8 @@ #include "devicepluginweatherground.h" -#include "device.h" -#include "devicemanager.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" #include #include @@ -28,11 +28,21 @@ // Key: 779a480dea5163c6 +QUuid weathergroundVendorId = QUuid("68f84197-b158-4d24-9d7b-709cfff843c1"); + DevicePluginWeatherground::DevicePluginWeatherground() { m_parser = new WeathergroundParser(this); } +QList DevicePluginWeatherground::supportedVendors() const +{ + QList ret; + Vendor weatherground(weathergroundVendorId, "weatherground"); + ret.append(weatherground); + return ret; +} + QList DevicePluginWeatherground::supportedDevices() const { QList ret; diff --git a/plugins/deviceplugins/weatherground/devicepluginweatherground.h b/plugins/deviceplugins/weatherground/devicepluginweatherground.h index a6223e32..6fd80298 100644 --- a/plugins/deviceplugins/weatherground/devicepluginweatherground.h +++ b/plugins/deviceplugins/weatherground/devicepluginweatherground.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGINWEATHERGROUND_H #define DEVICEPLUGINWEATHERGROUND_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" #include "weathergroundparser.h" @@ -35,6 +35,7 @@ public: WeathergroundParser *m_parser; + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/plugins/deviceplugins/wifidetector/devicepluginwifidetector.cpp b/plugins/deviceplugins/wifidetector/devicepluginwifidetector.cpp index 83a10635..a3805a18 100644 --- a/plugins/deviceplugins/wifidetector/devicepluginwifidetector.cpp +++ b/plugins/deviceplugins/wifidetector/devicepluginwifidetector.cpp @@ -18,12 +18,13 @@ #include "devicepluginwifidetector.h" -#include "device.h" -#include "devicemanager.h" +#include "plugin/device.h" +#include "plugin/devicemanager.h" #include #include +extern QUuid guhVendorId; QUuid pluginUuid = QUuid("8e0f791e-b273-4267-8605-b7c2f55a68ab"); QUuid detectorId = QUuid("bd216356-f1ec-4324-9785-6982d2174e17"); QUuid inRangeStateTypeId = QUuid("cb43e1b5-4f61-4538-bfa2-c33055c542cf"); @@ -32,6 +33,14 @@ DevicePluginWifiDetector::DevicePluginWifiDetector() { } +QList DevicePluginWifiDetector::supportedVendors() const +{ + QList ret; + Vendor guh(guhVendorId, "guh"); + ret.append(guh); + return ret; +} + QList DevicePluginWifiDetector::supportedDevices() const { QList ret; diff --git a/plugins/deviceplugins/wifidetector/devicepluginwifidetector.h b/plugins/deviceplugins/wifidetector/devicepluginwifidetector.h index 01323096..c116158d 100644 --- a/plugins/deviceplugins/wifidetector/devicepluginwifidetector.h +++ b/plugins/deviceplugins/wifidetector/devicepluginwifidetector.h @@ -19,7 +19,7 @@ #ifndef DEVICEPLUGINWIFIDETECTOR_H #define DEVICEPLUGINWIFIDETECTOR_H -#include "deviceplugin.h" +#include "plugin/deviceplugin.h" #include @@ -33,6 +33,7 @@ class DevicePluginWifiDetector : public DevicePlugin public: explicit DevicePluginWifiDetector(); + QList supportedVendors() const override; QList supportedDevices() const override; DeviceManager::HardwareResources requiredHardware() const override; diff --git a/server/guhcore.cpp b/server/guhcore.cpp index 5b21ff9e..0fc3a88c 100644 --- a/server/guhcore.cpp +++ b/server/guhcore.cpp @@ -29,9 +29,10 @@ #include "guhcore.h" #include "jsonrpcserver.h" -#include "devicemanager.h" #include "ruleengine.h" -#include "device.h" + +#include "plugin/devicemanager.h" +#include "plugin/device.h" #include diff --git a/server/guhcore.h b/server/guhcore.h index 8edf2d9c..f851d68b 100644 --- a/server/guhcore.h +++ b/server/guhcore.h @@ -20,7 +20,7 @@ #define GUHCORE_H #include "rule.h" -#include "event.h" +#include "types/event.h" #include diff --git a/server/jsonrpc/actionhandler.cpp b/server/jsonrpc/actionhandler.cpp index 712a04c2..309f56a6 100644 --- a/server/jsonrpc/actionhandler.cpp +++ b/server/jsonrpc/actionhandler.cpp @@ -18,9 +18,9 @@ #include "actionhandler.h" -#include "devicemanager.h" #include "guhcore.h" -#include "action.h" +#include "plugin/devicemanager.h" +#include "types/action.h" #include diff --git a/server/jsonrpc/devicehandler.cpp b/server/jsonrpc/devicehandler.cpp index 81d4c791..cb23c361 100644 --- a/server/jsonrpc/devicehandler.cpp +++ b/server/jsonrpc/devicehandler.cpp @@ -17,11 +17,11 @@ ***************************************************************************/ #include "devicehandler.h" -#include "device.h" -#include "deviceclass.h" #include "guhcore.h" -#include "devicemanager.h" -#include "deviceplugin.h" +#include "plugin/device.h" +#include "plugin/deviceclass.h" +#include "plugin/devicemanager.h" +#include "plugin/deviceplugin.h" #include diff --git a/server/jsonrpc/jsonrpcserver.cpp b/server/jsonrpc/jsonrpcserver.cpp index 092508d4..ebe82259 100644 --- a/server/jsonrpc/jsonrpcserver.cpp +++ b/server/jsonrpc/jsonrpcserver.cpp @@ -27,10 +27,10 @@ #include "jsonhandler.h" #include "guhcore.h" -#include "devicemanager.h" -#include "deviceplugin.h" -#include "deviceclass.h" -#include "device.h" +#include "plugin/devicemanager.h" +#include "plugin/deviceplugin.h" +#include "plugin/deviceclass.h" +#include "plugin/device.h" #include "rule.h" #include "ruleengine.h" @@ -104,7 +104,7 @@ QVariantMap JsonRPCServer::Introspect(const QVariantMap ¶ms) const foreach (JsonHandler *handler, m_handlers) { signalsMap.unite(handler->introspect(QMetaMethod::Signal)); } - data.insert("signals", signalsMap); + data.insert("notifications", signalsMap); return data; } diff --git a/server/jsonrpc/jsonrpcserver.h b/server/jsonrpc/jsonrpcserver.h index 9a4697ab..d87375b5 100644 --- a/server/jsonrpc/jsonrpcserver.h +++ b/server/jsonrpc/jsonrpcserver.h @@ -19,11 +19,12 @@ #ifndef JSONRPCSERVER_H #define JSONRPCSERVER_H -#include "deviceclass.h" -#include "action.h" -#include "event.h" +#include "plugin/deviceclass.h" #include "jsonhandler.h" +#include "types/action.h" +#include "types/event.h" + #include #include #include diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index d99f8148..9da6d54a 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -18,7 +18,7 @@ #include "jsontypes.h" -#include "device.h" +#include "plugin/device.h" #include #include @@ -232,7 +232,7 @@ QVariantMap JsonTypes::packRule(const Rule &rule) { QVariantMap ruleMap; ruleMap.insert("id", rule.id()); - ruleMap.insert("event", JsonTypes::packEvent(rule.event())); +// ruleMap.insert("event", JsonTypes::packEvent(rule.event())); ruleMap.insert("ruleType", s_ruleTypes.at(rule.ruleType())); QVariantList actionList; foreach (const Action &action, rule.actions()) { diff --git a/server/jsonrpc/jsontypes.h b/server/jsonrpc/jsontypes.h index 45bc700f..feb814aa 100644 --- a/server/jsonrpc/jsontypes.h +++ b/server/jsonrpc/jsontypes.h @@ -19,12 +19,13 @@ #ifndef JSONTYPES_H #define JSONTYPES_H -#include "deviceclass.h" -#include "event.h" -#include "action.h" -#include "actiontype.h" +#include "plugin/deviceclass.h" #include "rule.h" +#include "types/event.h" +#include "types/action.h" +#include "types/actiontype.h" + #include #include diff --git a/server/rule.h b/server/rule.h index 21a0805f..6b9b8a51 100644 --- a/server/rule.h +++ b/server/rule.h @@ -19,9 +19,10 @@ #ifndef RULE_H #define RULE_H -#include "state.h" -#include "action.h" -#include "event.h" +#include "types/state.h" +#include "types/action.h" +#include "types/event.h" +#include "stateevaluator.h" #include @@ -47,6 +48,7 @@ private: QUuid m_id; Event m_event; QList m_states; + StateEvaluator stateEvaluator; QList m_actions; RuleType m_ruleType; }; diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index 3bdf43c2..aa23600d 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -53,8 +53,9 @@ #include "ruleengine.h" #include "guhcore.h" -#include "devicemanager.h" -#include "device.h" + +#include "plugin/devicemanager.h" +#include "plugin/device.h" #include #include @@ -117,28 +118,28 @@ RuleEngine::RuleEngine(QObject *parent) : QList RuleEngine::evaluateEvent(const Event &event) { QList actions; - for (int i = 0; i < m_rules.count(); ++i) { - if (m_rules.at(i).event() == event) { - bool statesMatching = true; - qDebug() << "checking states"; - foreach (const State &state, m_rules.at(i).states()) { - Device *device = GuhCore::instance()->deviceManager()->findConfiguredDevice(state.deviceId()); - if (!device) { - qWarning() << "Device referenced in rule cannot be found"; - break; - } - if (state.value() != device->stateValue(state.stateTypeId())) { - statesMatching = false; - break; - } - } +// for (int i = 0; i < m_rules.count(); ++i) { +// if (m_rules.at(i).events().contains(event)) { +// bool statesMatching = true; +// qDebug() << "checking states"; +// foreach (const State &state, m_rules.at(i).stateChanges()) { +// Device *device = GuhCore::instance()->deviceManager()->findConfiguredDevice(state.deviceId()); +// if (!device) { +// qWarning() << "Device referenced in rule cannot be found"; +// break; +// } +// if (state.value() != device->stateValue(state.stateTypeId())) { +// statesMatching = false; +// break; +// } +// } - qDebug() << "states matching" << statesMatching; - if (statesMatching) { - actions.append(m_rules.at(i).actions()); - } - } - } +// qDebug() << "states matching" << statesMatching; +// if (statesMatching) { +// actions.append(m_rules.at(i).actions()); +// } +// } +// } qDebug() << "found" << actions.count() << "actions"; return actions; } diff --git a/server/ruleengine.h b/server/ruleengine.h index ae155abd..f6e6c62b 100644 --- a/server/ruleengine.h +++ b/server/ruleengine.h @@ -20,7 +20,7 @@ #define RULEENGINE_H #include "rule.h" -#include "event.h" +#include "types/event.h" #include #include diff --git a/server/server.pri b/server/server.pri index d5f6904d..bd1d286d 100644 --- a/server/server.pri +++ b/server/server.pri @@ -7,7 +7,8 @@ SOURCES += $$top_srcdir/server/guhcore.cpp \ $$top_srcdir/server/jsonrpc/devicehandler.cpp \ $$top_srcdir/server/jsonrpc/jsontypes.cpp \ $$top_srcdir/server/jsonrpc/ruleshandler.cpp \ - $$top_srcdir/server/jsonrpc/actionhandler.cpp + $$top_srcdir/server/jsonrpc/actionhandler.cpp \ + $$top_srcdir/server/stateevaluator.cpp HEADERS += $$top_srcdir/server/guhcore.h \ $$top_srcdir/server/tcpserver.h \ @@ -18,4 +19,5 @@ HEADERS += $$top_srcdir/server/guhcore.h \ $$top_srcdir/server/jsonrpc/devicehandler.h \ $$top_srcdir/server/jsonrpc/jsontypes.h \ $$top_srcdir/server/jsonrpc/ruleshandler.h \ - $$top_srcdir/server/jsonrpc/actionhandler.h + $$top_srcdir/server/jsonrpc/actionhandler.h \ + $$top_srcdir/server/stateevaluator.h diff --git a/server/stateevaluator.cpp b/server/stateevaluator.cpp new file mode 100644 index 00000000..f26388d1 --- /dev/null +++ b/server/stateevaluator.cpp @@ -0,0 +1,7 @@ +#include "stateevaluator.h" + +StateEvaluator::StateEvaluator() +{ +} + + diff --git a/server/stateevaluator.h b/server/stateevaluator.h new file mode 100644 index 00000000..6e8d2715 --- /dev/null +++ b/server/stateevaluator.h @@ -0,0 +1,33 @@ +#ifndef STATEEVALUATOR_H +#define STATEEVALUATOR_H + +#include "types/state.h" + +//class EvaluatorEntry +//{ +//public: +// EvaluatorEntry(); + +// QUuid stateTypeId; +// QUuid deviceId; +//// Rule::Operator operation; +// QVariant value; +//}; + +//class EvaluatorChain +//{ + +//}; + +class StateEvaluator +{ +public: + + StateEvaluator(); + +private: +// EvaluatorEntry m_entry; + +}; + +#endif // STATEEVALUATOR_H diff --git a/tests/auto/testjsonrpc.cpp b/tests/auto/testjsonrpc.cpp index bdff050a..2b68d981 100644 --- a/tests/auto/testjsonrpc.cpp +++ b/tests/auto/testjsonrpc.cpp @@ -17,7 +17,7 @@ ***************************************************************************/ #include "guhcore.h" -#include "devicemanager.h" +#include "plugin/devicemanager.h" #include "mocktcpserver.h" #include