From f4b6a7073556db3d55a442335b96ff405d1615c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 2 Jan 2014 18:06:58 +0100 Subject: [PATCH] trigger changed id.. --- libhive/devicemanager.cpp | 2 +- .../devicepluginintertechno.cpp | 106 +++++------------- server/hivecore.cpp | 10 +- server/hivecore.h | 3 +- server/rule.cpp | 8 +- server/rule.h | 6 +- server/ruleengine.cpp | 4 +- server/ruleengine.h | 3 +- tests/addconfigureddevice.sh | 4 +- 9 files changed, 51 insertions(+), 95 deletions(-) diff --git a/libhive/devicemanager.cpp b/libhive/devicemanager.cpp index af46a132..f1a72312 100644 --- a/libhive/devicemanager.cpp +++ b/libhive/devicemanager.cpp @@ -126,13 +126,13 @@ void DeviceManager::loadConfiguredDevices() QSettings settings; qDebug() << "loading devices"; foreach (const QString &idString, settings.childGroups()) { - qDebug() << "found stored device" << idString; settings.beginGroup(idString); Device *device = new Device(settings.value("pluginid").toUuid(), QUuid(idString), settings.value("deviceClassId").toUuid(), this); device->setName(settings.value("devicename").toString()); device->setParams(settings.value("params").toMap()); settings.endGroup(); m_configuredDevices.append(device); + qDebug() << "found stored device" << device->name() << idString; } } diff --git a/plugins/deviceplugins/devicepluginintertechno/devicepluginintertechno.cpp b/plugins/deviceplugins/devicepluginintertechno/devicepluginintertechno.cpp index 3b5542e4..e7cf72be 100644 --- a/plugins/deviceplugins/devicepluginintertechno/devicepluginintertechno.cpp +++ b/plugins/deviceplugins/devicepluginintertechno/devicepluginintertechno.cpp @@ -47,7 +47,6 @@ QList DevicePluginIntertechno::supportedDevices() const paramRemote.insert("type", "bool"); paramsRemote.append(paramRemote); - /* 1-16 * ________________ * | I | II|III| IV | @@ -58,9 +57,6 @@ QList DevicePluginIntertechno::supportedDevices() const * 4 | 4 | 8 | 12| 16 | * |___|___|___|____| */ - paramRemote.insert("name", "button"); - paramRemote.insert("type", "int"); - paramsRemote.append(paramRemote); TriggerType button1Trigger("785c1b30-a3f2-4696-af7c-d532acf3d6f7"); button1Trigger.setName("1"); @@ -206,6 +202,11 @@ void DevicePluginIntertechno::dataReceived(QList rawData) return; } + QList deviceList = deviceManager()->findConfiguredDevices(intertechnoRemote); + if(deviceList.isEmpty()){ + return; + } + int delay = rawData.first()/31; QByteArray binCode; @@ -386,78 +387,33 @@ void DevicePluginIntertechno::dataReceived(QList rawData) return; } - qDebug() << "family code = " << familyCode << "button code =" << buttonCode << power; - return; + //qDebug() << "family code = " << familyCode << "button code =" << buttonCode << power; + // =================================================== + Device *device = 0; + foreach (Device *dev, deviceList) { + if (dev->params().contains("familycode") && dev->params().value("familycode").toString() == familyCode) { + // Yippie! We found the device. + device = dev; + break; + } + } + if (!device) { + qWarning() << "couldn't find any configured device for intertech familycode:" << familyCode; + return; + } + QVariantMap params; + params.insert("power", power); - // // get the channel of the remote signal (5 channels, true=1, false=0) - // QList group; - // for(int i = 1; i < 10; i+=2){ - // if(binCode.at(i-1) == '0' && binCode.at(i) == '1'){ - // group << false; - // }else if(binCode.at(i-1) == '0' && binCode.at(i) == '0'){ - // group << true; - // }else { - // return; - // } - // } - - // // get the button letter - // QString button; - // QByteArray buttonCode = binCode.mid(10,10); - - // if(buttonCode == "0001010101"){ - // button = "A"; - // }else if(buttonCode == "0100010101"){ - // button = "B"; - // }else if(buttonCode == "0101000101"){ - // button = "C"; - // }else if(buttonCode == "0101010001"){ - // button = "D"; - // }else if(buttonCode == "0101010100"){ - // button = "E"; - // }else{ - // return; - // } - - // // get power status -> On = 0100, Off = 0001 - // bool power; - // if(binCode.right(4).toInt(0,2) == 1){ - // power = true; - // }else if(binCode.right(4).toInt(0,2) == 4){ - // power = false; - // }else{ - // return; - // } - - // Device *device = 0; - // QList deviceList = deviceManager()->findConfiguredDevices(intertechnoRemote); - // foreach (Device *dev, deviceList) { - // if (dev->params().contains("channel1") && dev->params().value("channel1").toBool() == group.at(0) && - // dev->params().contains("channel2") && dev->params().value("channel2").toBool() == group.at(1) && - // dev->params().contains("channel3") && dev->params().value("channel3").toBool() == group.at(2) && - // dev->params().contains("channel4") && dev->params().value("channel4").toBool() == group.at(3) && - // dev->params().contains("channel5") && dev->params().value("channel5").toBool() == group.at(4) - // ) { - // // Yippie! We found the device. - // device = dev; - // break; - // } - // } - // if (!device) { - // qWarning() << "couldn't find any configured device for mumbi:" << binCode.left(10) ; - // return; - // } - - // QVariantMap params; - // params.insert("button", button); - // params.insert("power", power); - // foreach (const Trigger &trigger, device->triggers()) { - // //qDebug() << "got trigger" << trigger.name(); - // if (trigger.name() == button) { - // emit emitTrigger(trigger.id(), params); - // return; - // } - // } + // FIXME: find a better way to get to the remote DeviceClass + DeviceClass deviceClass = supportedDevices().first(); + foreach (const TriggerType &triggerType, deviceClass.triggers()) { + if (triggerType.name() == buttonCode) { + //qDebug() << "emit trigger " << triggerType.name(); + Trigger trigger = Trigger(triggerType.id(), params); + emit emitTrigger(trigger); + return; + } + } } diff --git a/server/hivecore.cpp b/server/hivecore.cpp index 1b880106..08c8ceae 100644 --- a/server/hivecore.cpp +++ b/server/hivecore.cpp @@ -44,17 +44,13 @@ HiveCore::HiveCore(QObject *parent) : qDebug() << "*****************************************"; m_jsonServer = new JsonRPCServer(this); - connect(m_deviceManager,SIGNAL(emitTrigger(QUuid,QVariantMap)),this,SLOT(gotSignal(QUuid,QVariantMap))); + connect(m_deviceManager, &DeviceManager::emitTrigger, this, &HiveCore::gotSignal); } -void HiveCore::gotSignal(const QUuid &triggerId, const QVariantMap ¶ms) +void HiveCore::gotSignal(const Trigger &trigger) { - qDebug() << "##################################################"; - qDebug() << "id: " << triggerId; - qDebug() << params; - - foreach (const Action &action, m_ruleEngine->evaluateTrigger(triggerId)) { + foreach (const Action &action, m_ruleEngine->evaluateTrigger(trigger)) { m_deviceManager->executeAction(action); } } diff --git a/server/hivecore.h b/server/hivecore.h index 0edcd13b..4c733df4 100644 --- a/server/hivecore.h +++ b/server/hivecore.h @@ -2,6 +2,7 @@ #define HIVECORE_H #include "rule.h" +#include "trigger.h" #include @@ -27,7 +28,7 @@ private: RuleEngine *m_ruleEngine; private slots: - void gotSignal(const QUuid &triggerId, const QVariantMap ¶ms); + void gotSignal(const Trigger &trigger); }; diff --git a/server/rule.cpp b/server/rule.cpp index c6a8321d..dd4676d4 100644 --- a/server/rule.cpp +++ b/server/rule.cpp @@ -1,8 +1,8 @@ #include "rule.h" -Rule::Rule(const QUuid &id, const QUuid &triggerId, const Action &action): +Rule::Rule(const QUuid &id, const QUuid &triggerTypeId, const Action &action): m_id(id), - m_triggerId(triggerId), + m_triggerTypeId(triggerTypeId), m_action(action) { } @@ -12,9 +12,9 @@ QUuid Rule::id() const return m_id; } -QUuid Rule::triggerId() const +QUuid Rule::triggerTypeId() const { - return m_triggerId; + return m_triggerTypeId; } Action Rule::action() const diff --git a/server/rule.h b/server/rule.h index a20c271b..28e61052 100644 --- a/server/rule.h +++ b/server/rule.h @@ -8,15 +8,15 @@ class Rule { public: - Rule(const QUuid &id, const QUuid &triggerId, const Action &action); + Rule(const QUuid &id, const QUuid &triggerTypeId, const Action &action); QUuid id() const; - QUuid triggerId() const; + QUuid triggerTypeId() const; Action action() const; private: QUuid m_id; - QUuid m_triggerId; + QUuid m_triggerTypeId; Action m_action; }; diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index c2136b7a..ee9756b3 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -25,11 +25,11 @@ RuleEngine::RuleEngine(QObject *parent) : } -QList RuleEngine::evaluateTrigger(const QUuid &triggerId) +QList RuleEngine::evaluateTrigger(const Trigger &trigger) { QList actions; for (int i = 0; i < m_rules.count(); ++i) { - if (m_rules.at(i).triggerId() == triggerId) { + if (m_rules.at(i).triggerTypeId() == trigger.) { actions << m_rules.at(i).action(); } } diff --git a/server/ruleengine.h b/server/ruleengine.h index f198fadf..11bd7358 100644 --- a/server/ruleengine.h +++ b/server/ruleengine.h @@ -2,6 +2,7 @@ #define RULEENGINE_H #include "rule.h" +#include "trigger.h" #include #include @@ -19,7 +20,7 @@ public: explicit RuleEngine(QObject *parent = 0); - QList evaluateTrigger(const QUuid &triggerId); + QList evaluateTrigger(const Trigger &trigger); RuleError addRule(const QUuid &triggerTypeId, const Action &action); QList rules() const; diff --git a/tests/addconfigureddevice.sh b/tests/addconfigureddevice.sh index 13ca9ee5..b2468b84 100755 --- a/tests/addconfigureddevice.sh +++ b/tests/addconfigureddevice.sh @@ -5,5 +5,7 @@ if [ -z $1 ]; then echo "usage $0 host" else (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClass": "{d85c1ef4-197c-4053-8e40-707aa671d302}","deviceParams":{"channel1":"false", "channel2":"false", "channel3":"false", "channel4": "false", "channel5":"false" }}}'; sleep 1) | nc $1 1234 -# (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClass": "{308ae6e6-38b3-4b3a-a513-3199da2764f8}","deviceParams":{"channel1":"false","channel2":"false", "channel3":"false", "channel4": "false","channel5":"false","A":"false","B":"true","C":"false","D":"false","E":"false" }}}'; sleep 1) | nc $1 1234 +# (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClass": "{308ae6e6-38b3-4b3a-a513-3199da2764f8}","deviceParams":{"channel1":"false","channel2":"false", "channel3":"false", "channel4": "false","channel5":"false","A":"false","B":"true","C":"false","D":"false","E":"false" }}}'; sleep 1) | nc $1 1234 + (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClass": "{ab73ad2f-6594-45a3-9063-8f72d365c5e5}","deviceParams":{"familycode":"J"}}}'; sleep 1) | nc $1 1234 + fi