Add support for dynamic min/max state values
This commit is contained in:
parent
5757cafd90
commit
e9a9150ca2
@ -118,18 +118,26 @@ void ThingManager::notificationReceived(const QVariantMap &data)
|
|||||||
{
|
{
|
||||||
qCDebug(dcThingManager()) << "ThingManager notifications received:" << qUtf8Printable(QJsonDocument::fromVariant(data).toJson());
|
qCDebug(dcThingManager()) << "ThingManager notifications received:" << qUtf8Printable(QJsonDocument::fromVariant(data).toJson());
|
||||||
QString notification = data.value("notification").toString();
|
QString notification = data.value("notification").toString();
|
||||||
|
QVariantMap params = data.value("params").toMap();
|
||||||
if (notification == "Integrations.StateChanged") {
|
if (notification == "Integrations.StateChanged") {
|
||||||
Thing *thing = m_things->getThing(data.value("params").toMap().value("thingId").toUuid());
|
Thing *thing = m_things->getThing(params.value("thingId").toUuid());
|
||||||
if (!thing) {
|
if (!thing) {
|
||||||
if (!m_fetchingData) {
|
if (!m_fetchingData) {
|
||||||
qCWarning(dcThingManager()) << "Thing state change notification received for an unknown thing";
|
qCWarning(dcThingManager()) << "Thing state change notification received for an unknown thing";
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QUuid stateTypeId = data.value("params").toMap().value("stateTypeId").toUuid();
|
QUuid stateTypeId = params.value("stateTypeId").toUuid();
|
||||||
QVariant value = data.value("params").toMap().value("value");
|
QVariant value = params.value("value");
|
||||||
// qDebug() << "Thing state changed for:" << dev->name() << "State name:" << dev->thingClass()->stateTypes()->getStateType(stateTypeId) << "value:" << value;
|
// qDebug() << "Thing state changed for:" << dev->name() << "State name:" << dev->thingClass()->stateTypes()->getStateType(stateTypeId) << "value:" << value;
|
||||||
thing->setStateValue(stateTypeId, value);
|
State *state = thing->state(stateTypeId);
|
||||||
|
state->setValue(value);
|
||||||
|
if (params.contains("minValue")) {
|
||||||
|
state->setMinValue(params.value("minValue"));
|
||||||
|
}
|
||||||
|
if (params.contains("maxValue")) {
|
||||||
|
state->setMaxValue(params.value("maxValue"));
|
||||||
|
}
|
||||||
emit thingStateChanged(thing->id(), stateTypeId, value);
|
emit thingStateChanged(thing->id(), stateTypeId, value);
|
||||||
} else if (notification == "Integrations.ThingAdded") {
|
} else if (notification == "Integrations.ThingAdded") {
|
||||||
Thing *thing = unpackThing(this, data.value("params").toMap().value("thing").toMap(), m_thingClasses);
|
Thing *thing = unpackThing(this, data.value("params").toMap().value("thing").toMap(), m_thingClasses);
|
||||||
@ -967,12 +975,24 @@ Thing* ThingManager::unpackThing(ThingManager *thingManager, const QVariantMap &
|
|||||||
states = new States(thing);
|
states = new States(thing);
|
||||||
}
|
}
|
||||||
foreach (const QVariant &stateVariant, thingMap.value("states").toList()) {
|
foreach (const QVariant &stateVariant, thingMap.value("states").toList()) {
|
||||||
State *state = states->getState(stateVariant.toMap().value("stateTypeId").toUuid());
|
QVariantMap stateMap = stateVariant.toMap();
|
||||||
|
State *state = states->getState(stateMap.value("stateTypeId").toUuid());
|
||||||
if (!state) {
|
if (!state) {
|
||||||
state = new State(thing->id(), stateVariant.toMap().value("stateTypeId").toUuid(), stateVariant.toMap().value("value"), states);
|
state = new State(thing->id(), stateMap.value("stateTypeId").toUuid(), stateMap.value("value"), states);
|
||||||
states->addState(state);
|
states->addState(state);
|
||||||
} else {
|
} else {
|
||||||
state->setValue(stateVariant.toMap().value("value"));
|
state->setValue(stateMap.value("value"));
|
||||||
|
}
|
||||||
|
StateType *stateType = thing->thingClass()->stateTypes()->getStateType(state->stateTypeId());
|
||||||
|
if (stateMap.contains("minValue")) {
|
||||||
|
state->setMinValue(stateMap.value("minValue"));
|
||||||
|
} else {
|
||||||
|
state->setMinValue(stateType->minValue());
|
||||||
|
}
|
||||||
|
if (stateMap.contains("maxValue")) {
|
||||||
|
state->setMaxValue(stateMap.value("maxValue"));
|
||||||
|
} else {
|
||||||
|
state->setMaxValue(stateType->maxValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thing->setStates(states);
|
thing->setStates(states);
|
||||||
|
|||||||
@ -57,7 +57,33 @@ QVariant State::value() const
|
|||||||
|
|
||||||
void State::setValue(const QVariant &value)
|
void State::setValue(const QVariant &value)
|
||||||
{
|
{
|
||||||
m_value = value;
|
if (m_value != value) {
|
||||||
emit valueChanged();
|
m_value = value;
|
||||||
|
emit valueChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant State::minValue() const
|
||||||
|
{
|
||||||
|
return m_minValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void State::setMinValue(const QVariant &minValue) {
|
||||||
|
if (m_minValue != minValue) {
|
||||||
|
m_minValue = minValue;
|
||||||
|
emit minValueChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant State::maxValue() const
|
||||||
|
{
|
||||||
|
return m_maxValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void State::setMaxValue(const QVariant &maxValue)
|
||||||
|
{
|
||||||
|
if (m_maxValue != maxValue) {
|
||||||
|
m_maxValue = maxValue;
|
||||||
|
emit maxValueChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -41,6 +41,8 @@ class State : public QObject
|
|||||||
Q_PROPERTY(QUuid thingId READ thingId CONSTANT)
|
Q_PROPERTY(QUuid thingId READ thingId CONSTANT)
|
||||||
Q_PROPERTY(QUuid stateTypeId READ stateTypeId CONSTANT)
|
Q_PROPERTY(QUuid stateTypeId READ stateTypeId CONSTANT)
|
||||||
Q_PROPERTY(QVariant value READ value NOTIFY valueChanged)
|
Q_PROPERTY(QVariant value READ value NOTIFY valueChanged)
|
||||||
|
Q_PROPERTY(QVariant minValue READ minValue NOTIFY minValueChanged)
|
||||||
|
Q_PROPERTY(QVariant maxValue READ maxValue NOTIFY maxValueChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit State(const QUuid &thingId, const QUuid &stateTypeId, const QVariant &value, QObject *parent = nullptr);
|
explicit State(const QUuid &thingId, const QUuid &stateTypeId, const QVariant &value, QObject *parent = nullptr);
|
||||||
@ -51,13 +53,23 @@ public:
|
|||||||
QVariant value() const;
|
QVariant value() const;
|
||||||
void setValue(const QVariant &value);
|
void setValue(const QVariant &value);
|
||||||
|
|
||||||
|
QVariant minValue() const;
|
||||||
|
void setMinValue(const QVariant &minValue);
|
||||||
|
|
||||||
|
QVariant maxValue() const;
|
||||||
|
void setMaxValue(const QVariant &maxValue);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QUuid m_thingId;
|
QUuid m_thingId;
|
||||||
QUuid m_stateTypeId;
|
QUuid m_stateTypeId;
|
||||||
QVariant m_value;
|
QVariant m_value;
|
||||||
|
QVariant m_minValue;
|
||||||
|
QVariant m_maxValue;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void valueChanged();
|
void valueChanged();
|
||||||
|
void minValueChanged();
|
||||||
|
void maxValueChanged();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user