fix rules again
This commit is contained in:
parent
b69a640aa1
commit
b85aa3072e
@ -88,6 +88,19 @@ GuhCore::GuhCore(QObject *parent) :
|
|||||||
void GuhCore::gotEvent(const Event &event)
|
void GuhCore::gotEvent(const Event &event)
|
||||||
{
|
{
|
||||||
foreach (const Action &action, m_ruleEngine->evaluateEvent(event)) {
|
foreach (const Action &action, m_ruleEngine->evaluateEvent(event)) {
|
||||||
m_deviceManager->executeAction(action);
|
qDebug() << "executing action" << action.actionTypeId();
|
||||||
|
DeviceManager::DeviceError status = m_deviceManager->executeAction(action);
|
||||||
|
switch(status) {
|
||||||
|
case DeviceManager::DeviceErrorNoError:
|
||||||
|
break;
|
||||||
|
case DeviceManager::DeviceErrorSetupFailed:
|
||||||
|
qDebug() << "Error executing action. Device setup failed.";
|
||||||
|
break;
|
||||||
|
case DeviceManager::DeviceErrorActionParameterError:
|
||||||
|
qDebug() << "Error executing action. Invalid action parameter.";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qDebug() << "Error executing action:" << status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,7 +83,7 @@ void JsonTypes::init()
|
|||||||
// Event
|
// Event
|
||||||
s_event.insert("eventTypeId", "uuid");
|
s_event.insert("eventTypeId", "uuid");
|
||||||
s_event.insert("deviceId", "uuid");
|
s_event.insert("deviceId", "uuid");
|
||||||
s_event.insert("params", QVariantList() << paramRef());
|
s_event.insert("o:params", QVariantList() << paramRef());
|
||||||
|
|
||||||
// ActionType
|
// ActionType
|
||||||
s_actionType.insert("id", "uuid");
|
s_actionType.insert("id", "uuid");
|
||||||
@ -122,7 +122,7 @@ void JsonTypes::init()
|
|||||||
|
|
||||||
s_rule.insert("id", "uuid");
|
s_rule.insert("id", "uuid");
|
||||||
s_rule.insert("ruleType", ruleTypesRef());
|
s_rule.insert("ruleType", ruleTypesRef());
|
||||||
s_rule.insert("event", eventRef());
|
s_rule.insert("events", QVariantList() << eventRef());
|
||||||
s_rule.insert("actions", QVariantList() << actionRef());
|
s_rule.insert("actions", QVariantList() << actionRef());
|
||||||
s_rule.insert("states", QVariantList() << stateRef());
|
s_rule.insert("states", QVariantList() << stateRef());
|
||||||
|
|
||||||
@ -256,8 +256,14 @@ QVariantMap JsonTypes::packRule(const Rule &rule)
|
|||||||
{
|
{
|
||||||
QVariantMap ruleMap;
|
QVariantMap ruleMap;
|
||||||
ruleMap.insert("id", rule.id());
|
ruleMap.insert("id", rule.id());
|
||||||
// ruleMap.insert("event", JsonTypes::packEvent(rule.event()));
|
QVariantList eventList;
|
||||||
|
foreach (const Event &event, rule.events()) {
|
||||||
|
eventList.append(JsonTypes::packEvent(event));
|
||||||
|
}
|
||||||
|
ruleMap.insert("events", eventList);
|
||||||
|
|
||||||
ruleMap.insert("ruleType", s_ruleTypes.at(rule.ruleType()));
|
ruleMap.insert("ruleType", s_ruleTypes.at(rule.ruleType()));
|
||||||
|
|
||||||
QVariantList actionList;
|
QVariantList actionList;
|
||||||
foreach (const Action &action, rule.actions()) {
|
foreach (const Action &action, rule.actions()) {
|
||||||
actionList.append(JsonTypes::packAction(action));
|
actionList.append(JsonTypes::packAction(action));
|
||||||
@ -277,7 +283,9 @@ QPair<bool, QString> JsonTypes::validateMap(const QVariantMap &templateMap, cons
|
|||||||
strippedKey.remove(QRegExp("^o:"));
|
strippedKey.remove(QRegExp("^o:"));
|
||||||
|
|
||||||
if (!key.startsWith("o:") && !map.contains(strippedKey)) {
|
if (!key.startsWith("o:") && !map.contains(strippedKey)) {
|
||||||
qDebug() << "missing key" << key << templateMap << map;
|
qDebug() << "*** missing key" << key;
|
||||||
|
qDebug() << "Expected:" << templateMap;
|
||||||
|
qDebug() << "Got:" << map;
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromVariant(map);
|
QJsonDocument jsonDoc = QJsonDocument::fromVariant(map);
|
||||||
return report(false, QString("Missing key \"%1\" in %2").arg(key).arg(QString(jsonDoc.toJson())));
|
return report(false, QString("Missing key \"%1\" in %2").arg(key).arg(QString(jsonDoc.toJson())));
|
||||||
}
|
}
|
||||||
@ -346,6 +354,7 @@ QPair<bool, QString> JsonTypes::validateVariant(const QVariant &templateVariant,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
} else if (refName == JsonTypes::eventRef()) {
|
} else if (refName == JsonTypes::eventRef()) {
|
||||||
|
qDebug() << "validating event";
|
||||||
QPair<bool, QString> result = validateMap(eventDescription(), variant.toMap());
|
QPair<bool, QString> result = validateMap(eventDescription(), variant.toMap());
|
||||||
if (!result.first) {
|
if (!result.first) {
|
||||||
qDebug() << "event not valid";
|
qDebug() << "event not valid";
|
||||||
|
|||||||
@ -105,6 +105,7 @@ QVariantMap RulesHandler::AddRule(const QVariantMap ¶ms)
|
|||||||
switch(GuhCore::instance()->ruleEngine()->addRule(event, actions)) {
|
switch(GuhCore::instance()->ruleEngine()->addRule(event, actions)) {
|
||||||
case RuleEngine::RuleErrorNoError:
|
case RuleEngine::RuleErrorNoError:
|
||||||
returns.insert("success", true);
|
returns.insert("success", true);
|
||||||
|
returns.insert("errorMessage", "");
|
||||||
break;
|
break;
|
||||||
case RuleEngine::RuleErrorDeviceNotFound:
|
case RuleEngine::RuleErrorDeviceNotFound:
|
||||||
returns.insert("success", false);
|
returns.insert("success", false);
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
\l{Rule::RuleTypeAll}.*/
|
\l{Rule::RuleTypeAll}.*/
|
||||||
Rule::Rule(const QUuid &id, const Event &event, const QList<State> &states, const QList<Action> &actions):
|
Rule::Rule(const QUuid &id, const Event &event, const QList<State> &states, const QList<Action> &actions):
|
||||||
m_id(id),
|
m_id(id),
|
||||||
m_event(event),
|
m_events(QList<Event>() << event),
|
||||||
m_states(states),
|
m_states(states),
|
||||||
m_actions(actions),
|
m_actions(actions),
|
||||||
m_ruleType(RuleTypeAll)
|
m_ruleType(RuleTypeAll)
|
||||||
@ -66,9 +66,9 @@ QUuid Rule::id() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*! Returns the \l{Event} that events this Rule.*/
|
/*! Returns the \l{Event} that events this Rule.*/
|
||||||
Event Rule::event() const
|
QList<Event> Rule::events() const
|
||||||
{
|
{
|
||||||
return m_event;
|
return m_events;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Returns the \l{State}{States} that need to be matching in order for this to Rule apply. */
|
/*! Returns the \l{State}{States} that need to be matching in order for this to Rule apply. */
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public:
|
|||||||
Rule(const QUuid &id, const Event &event, const QList<State> &states, const QList<Action> &actions);
|
Rule(const QUuid &id, const Event &event, const QList<State> &states, const QList<Action> &actions);
|
||||||
|
|
||||||
QUuid id() const;
|
QUuid id() const;
|
||||||
Event event() const;
|
QList<Event> events() const;
|
||||||
QList<State> states() const;
|
QList<State> states() const;
|
||||||
QList<Action> actions() const;
|
QList<Action> actions() const;
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QUuid m_id;
|
QUuid m_id;
|
||||||
Event m_event;
|
QList<Event> m_events;
|
||||||
QList<State> m_states;
|
QList<State> m_states;
|
||||||
StateEvaluator stateEvaluator;
|
StateEvaluator stateEvaluator;
|
||||||
QList<Action> m_actions;
|
QList<Action> m_actions;
|
||||||
|
|||||||
@ -120,28 +120,28 @@ RuleEngine::RuleEngine(QObject *parent) :
|
|||||||
QList<Action> RuleEngine::evaluateEvent(const Event &event)
|
QList<Action> RuleEngine::evaluateEvent(const Event &event)
|
||||||
{
|
{
|
||||||
QList<Action> actions;
|
QList<Action> actions;
|
||||||
// for (int i = 0; i < m_rules.count(); ++i) {
|
for (int i = 0; i < m_rules.count(); ++i) {
|
||||||
// if (m_rules.at(i).events().contains(event)) {
|
if (m_rules.at(i).events().contains(event)) {
|
||||||
// bool statesMatching = true;
|
bool statesMatching = true;
|
||||||
// qDebug() << "checking states";
|
qDebug() << "checking states";
|
||||||
// foreach (const State &state, m_rules.at(i).stateChanges()) {
|
foreach (const State &state, m_rules.at(i).states()) {
|
||||||
// Device *device = GuhCore::instance()->deviceManager()->findConfiguredDevice(state.deviceId());
|
Device *device = GuhCore::instance()->deviceManager()->findConfiguredDevice(state.deviceId());
|
||||||
// if (!device) {
|
if (!device) {
|
||||||
// qWarning() << "Device referenced in rule cannot be found";
|
qWarning() << "Device referenced in rule cannot be found";
|
||||||
// break;
|
break;
|
||||||
// }
|
}
|
||||||
// if (state.value() != device->stateValue(state.stateTypeId())) {
|
if (state.value() != device->stateValue(state.stateTypeId())) {
|
||||||
// statesMatching = false;
|
statesMatching = false;
|
||||||
// break;
|
break;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// qDebug() << "states matching" << statesMatching;
|
qDebug() << "states matching" << statesMatching;
|
||||||
// if (statesMatching) {
|
if (statesMatching) {
|
||||||
// actions.append(m_rules.at(i).actions());
|
actions.append(m_rules.at(i).actions());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
qDebug() << "found" << actions.count() << "actions";
|
qDebug() << "found" << actions.count() << "actions";
|
||||||
return actions;
|
return actions;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if test -z $5; then
|
if test -z $5; then
|
||||||
echo "usage: $0 host sourceDevice eventTypeId targetDeviceId actionTypeId"
|
echo "usage: $0 host sourceDevice eventTypeId targetDeviceId actionTypeId [paramname paramvalue]"
|
||||||
|
elif test -z $6; then
|
||||||
|
(echo '{"id":1, "method":"Rules.AddRule", "params":{"event": {"eventTypeId": "$3", "deviceId":"'$2'"}, "actions": [ { "deviceId":"'$4'", "actionTypeId":"'$5'"}]}}'; sleep 1) | nc $1 1234
|
||||||
|
elif test -z $7; then
|
||||||
|
echo "usage: $0 host sourceDevice eventTypeId targetDeviceId actionTypeId [paramname paramvalue]"
|
||||||
else
|
else
|
||||||
(echo '{"id":1, "method":"Rules.AddRule", "params":{"event": {"eventTypeId": "$3", "deviceId":"'$2'"}, "actions": [ { "deviceId":"'$4'", "actionTypeId":"'$5'", "params":{"power":"true"}}]}}'; sleep 1) | nc $1 1234
|
(echo '{"id":1, "method":"Rules.AddRule", "params":{"event": {"eventTypeId": "'$3'", "deviceId":"'$2'"}, "actions": [ { "deviceId":"'$4'", "actionTypeId":"'$5'", "params":{"'$6'":"'$7'"}}]}}'; sleep 1) | nc $1 1234
|
||||||
# (echo '{"id":1, "method":"Rules.AddRule", "params":{"event": {"eventTypeId": "'$3'", "deviceId":"'$2'"}, "actions": [ { "deviceId":"'$4'", "actionTypeId":"'$5'", "params":{"power":"true"}}]}}'; sleep 1) | nc $1 1234
|
|
||||||
# (echo '{"id":1, "method":"Rules.AddRule", "params":{"event": {"eventTypeId": "'$2'", "deviceId":"'$3'", "params":{"power":"false"}}, "actions": [ { "deviceId":"'$4'", "name":"rule 1", "params":{"power":"false"}},{ "deviceId":"'$5'", "name":"rule 1", "params":{"power":"true"}}]}}'; sleep 1) | nc $1 1234
|
# (echo '{"id":1, "method":"Rules.AddRule", "params":{"event": {"eventTypeId": "'$2'", "deviceId":"'$3'", "params":{"power":"false"}}, "actions": [ { "deviceId":"'$4'", "name":"rule 1", "params":{"power":"false"}},{ "deviceId":"'$5'", "name":"rule 1", "params":{"power":"true"}}]}}'; sleep 1) | nc $1 1234
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user