add some debug helpers

This commit is contained in:
Michael Zanetti 2014-04-17 01:42:38 +02:00
parent 98dc4f3808
commit 2cdefcb1f2
7 changed files with 84 additions and 1 deletions

View File

@ -193,6 +193,42 @@ DeviceManager *DevicePlugin::deviceManager() const
return m_deviceManager; return m_deviceManager;
} }
/*!
Returns a list of all configured devices belonging to this plugin.
*/
QList<Device *> DevicePlugin::myDevices() const
{
QList<DeviceClassId> myDeviceClassIds;
foreach (const DeviceClass &deviceClass, supportedDevices()) {
myDeviceClassIds.append(deviceClass.id());
}
QList<Device*> ret;
foreach (Device *device, deviceManager()->configuredDevices()) {
if (myDeviceClassIds.contains(device->deviceClassId())) {
ret.append(device);
}
}
return ret;
}
/*!
Find a certain device from myDevices() by its params. All parameters must
match or the device will not be found. Be prepared for nullptrs.
*/
Device *DevicePlugin::findDeviceByParams(const QVariantMap &params) const
{
foreach (Device *device, myDevices()) {
bool matching = true;
foreach (const QString &paramName, device->params().keys()) {
if (device->params().value(paramName) == params.value(paramName)) {
return device;
}
}
}
return nullptr;
}
/*! /*!
Transmits data contained in \a rawData on the Radio433 or Radio868 Transmits data contained in \a rawData on the Radio433 or Radio868
devices, depending on the hardware requested by this plugin. devices, depending on the hardware requested by this plugin.

View File

@ -73,6 +73,8 @@ signals:
protected: protected:
DeviceManager *deviceManager() const; DeviceManager *deviceManager() const;
QList<Device*> myDevices() const;
Device* findDeviceByParams(const QVariantMap &params) const;
void transmitData(QList<int> rawData); void transmitData(QList<int> rawData);

View File

@ -75,3 +75,20 @@ bool Event::operator ==(const Event &other) const
&& m_deviceId == other.deviceId() && m_deviceId == other.deviceId()
&& m_params == other.params(); && m_params == other.params();
} }
QDebug operator<<(QDebug dbg, const Event &event)
{
dbg.nospace() << "Event(EventTypeId: " << event.eventTypeId().toString() << ", DeviceId" << event.deviceId() << ")";
return dbg.space();
}
QDebug operator<<(QDebug dbg, const QList<Event> &events)
{
dbg.nospace() << "EventList (count:" << events.count() << ")";
for (int i = 0; i < events.count(); i++ ) {
dbg.nospace() << " " << i << ": " << events.at(i);
}
return dbg.space();
}

View File

@ -23,6 +23,7 @@
#include <QString> #include <QString>
#include <QVariantList> #include <QVariantList>
#include <QDebug>
class Event class Event
{ {
@ -42,5 +43,7 @@ private:
DeviceId m_deviceId; DeviceId m_deviceId;
QVariantMap m_params; QVariantMap m_params;
}; };
QDebug operator<<(QDebug dbg, const Event &event);
QDebug operator<<(QDebug dbg, const QList<Event> &events);
#endif // EVENT_H #endif // EVENT_H

View File

@ -62,3 +62,19 @@ void State::setValue(const QVariant &value)
{ {
m_value = value; m_value = value;
} }
QDebug operator<<(QDebug dbg, const State &state)
{
dbg.nospace() << "State(StateTypeId: " << state.stateTypeId().toString() << ", DeviceId:" << state.deviceId() << ", value:" << state.value() << ")";
return dbg.space();
}
QDebug operator<<(QDebug dbg, const QList<State> &states)
{
dbg.nospace() << "StateList (count:" << states.count() << ")";
for (int i = 0; i < states.count(); i++ ) {
dbg.nospace() << " " << i << ": " << states.at(i);
}
return dbg.space();
}

View File

@ -22,6 +22,7 @@
#include "typeutils.h" #include "typeutils.h"
#include <QVariant> #include <QVariant>
#include <QDebug>
class State class State
{ {
@ -31,6 +32,7 @@ public:
StateTypeId stateTypeId() const; StateTypeId stateTypeId() const;
DeviceId deviceId() const; DeviceId deviceId() const;
QStringList stateNames() const;
QVariant value() const; QVariant value() const;
void setValue(const QVariant &value); void setValue(const QVariant &value);
@ -40,4 +42,8 @@ private:
QVariant m_value; QVariant m_value;
}; };
QDebug operator<<(QDebug dbg, const State &event);
QDebug operator<<(QDebug dbg, const QList<State> &events);
#endif // STATE_H #endif // STATE_H

View File

@ -119,11 +119,13 @@ RuleEngine::RuleEngine(QObject *parent) :
list of all \l{Action}{Actions} that should be executed. */ list of all \l{Action}{Actions} that should be executed. */
QList<Action> RuleEngine::evaluateEvent(const Event &event) QList<Action> RuleEngine::evaluateEvent(const Event &event)
{ {
qDebug() << "got 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) {
qDebug() << "evaluating rule" << i << m_rules.at(i).events();
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:" << m_rules.at(i).states();
foreach (const State &state, m_rules.at(i).states()) { 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) {
@ -131,6 +133,7 @@ QList<Action> RuleEngine::evaluateEvent(const Event &event)
break; break;
} }
if (state.value() != device->stateValue(state.stateTypeId())) { if (state.value() != device->stateValue(state.stateTypeId())) {
qDebug() << "State value not matching:" << state.value() << device->stateValue(state.stateTypeId());
statesMatching = false; statesMatching = false;
break; break;
} }