From 7095f863f4df1af04d0437cdafe1f776ed17b434 Mon Sep 17 00:00:00 2001 From: Justin Hammond Date: Wed, 13 Nov 2019 16:33:43 +0800 Subject: [PATCH] Node and Value Removals and Clear MQTT Topics when closing OZW --- .../include/qt-openzwave/qtozwnodemodel.h | 2 +- .../include/qt-openzwave/qtozwvalueidmodel.h | 2 +- qt-openzwave/include/qtozwnodemodel_p.h | 1 + qt-openzwave/include/qtozwvalueidmodel_p.h | 2 + qt-openzwave/source/qtozwmanager_p.cpp | 47 +++++++++++++----- qt-openzwave/source/qtozwnodemodel.cpp | 14 +++--- qt-openzwave/source/qtozwnodemodel_p.cpp | 16 +++--- qt-openzwave/source/qtozwvalueidmodel.cpp | 28 ++++++----- qt-openzwave/source/qtozwvalueidmodel_p.cpp | 36 ++++++++------ qt-ozwdaemon/mqttpublisher.cpp | 49 +++++++++++++++++++ 10 files changed, 145 insertions(+), 52 deletions(-) diff --git a/qt-openzwave/include/qt-openzwave/qtozwnodemodel.h b/qt-openzwave/include/qt-openzwave/qtozwnodemodel.h index 40ad937..7802229 100644 --- a/qt-openzwave/include/qt-openzwave/qtozwnodemodel.h +++ b/qt-openzwave/include/qt-openzwave/qtozwnodemodel.h @@ -93,6 +93,6 @@ protected: QVariant getNodeData(quint8, NodeColumns); int32_t getNodeRow(quint8 _node); - QMap > m_nodeData; + QVector< QMap > m_nodeData; }; #endif // QTOZWNODEMODEL_H diff --git a/qt-openzwave/include/qt-openzwave/qtozwvalueidmodel.h b/qt-openzwave/include/qt-openzwave/qtozwvalueidmodel.h index 3b7fceb..34e6e15 100644 --- a/qt-openzwave/include/qt-openzwave/qtozwvalueidmodel.h +++ b/qt-openzwave/include/qt-openzwave/qtozwvalueidmodel.h @@ -120,7 +120,7 @@ protected: QVariant getValueData(quint64, ValueIdColumns); int32_t getValueRow(quint64 _node); - QMap > m_valueData; + QVector< QMap > m_valueData; }; #endif // QTOZWVALUEIDMODEL_H diff --git a/qt-openzwave/include/qtozwnodemodel_p.h b/qt-openzwave/include/qtozwnodemodel_p.h index 608100b..ec77403 100644 --- a/qt-openzwave/include/qtozwnodemodel_p.h +++ b/qt-openzwave/include/qtozwnodemodel_p.h @@ -44,6 +44,7 @@ public Q_SLOTS: void delNode(quint8 _nodeID); void resetModel(); void finishTransaction(quint8 _nodeID); + }; diff --git a/qt-openzwave/include/qtozwvalueidmodel_p.h b/qt-openzwave/include/qtozwvalueidmodel_p.h index d480cac..5884f17 100644 --- a/qt-openzwave/include/qtozwvalueidmodel_p.h +++ b/qt-openzwave/include/qtozwvalueidmodel_p.h @@ -45,6 +45,8 @@ public Q_SLOTS: void delNodeValues(quint8 _node); void resetModel(); void finishTransaction(quint64 _vidKey); + QVariant getValueData(quint64, ValueIdColumns); + }; diff --git a/qt-openzwave/source/qtozwmanager_p.cpp b/qt-openzwave/source/qtozwmanager_p.cpp index 28805c0..9eea2c8 100644 --- a/qt-openzwave/source/qtozwmanager_p.cpp +++ b/qt-openzwave/source/qtozwmanager_p.cpp @@ -161,6 +161,26 @@ bool QTOZWManager_Internal::close() { qCWarning(manager) << "Failed to Remove Driver: " << QString(e.GetMsg().c_str()); return false; } + try { + if (this->m_manager->RemoveWatcher(OZWNotification::processNotification, this ) != true) { + emit this->error(QTOZWManagerErrorCodes::setupFailed); + this->setErrorString("Failed to Remove Notification Callback"); + qCWarning(manager) << "Failed to Remove Notification Callback"; + return false; + } + } catch (OpenZWave::OZWException &e) { + emit this->error(QTOZWManagerErrorCodes::OZWException); + this->setErrorString(e.GetMsg().c_str()); + qCWarning(manager) << "Failed to Remove Notification Callback " << QString(e.GetMsg().c_str()); + return false; + } + if (OZWNotification::Get()->disconnect() != true) { + emit this->error(QTOZWManagerErrorCodes::setupFailed); + this->setErrorString("Failed to Disconnect Notification Signals"); + qCWarning(manager) << "Failed to Disconnect Notification Signals"; + return false; + } + qCDebug(manager) << "OZW Serial Port Closed"; this->m_SerialPort = QString(); return true; } @@ -1016,18 +1036,33 @@ void QTOZWManager_Internal::pvt_nodeAdded(quint8 node) void QTOZWManager_Internal::pvt_nodeRemoved(quint8 node) { qCDebug(notifications) << "Notification pvt_nodeRemoved " << node; + QVector valueList(this->m_validValues); + for (QVector::Iterator it = valueList.begin(); it != valueList.end(); it++) { + if (this->m_valueModel->getValueData(*it, QTOZW_ValueIds::ValueIdColumns::Node).toInt() == node) + this->pvt_valueRemoved(*it); + } + emit this->nodeRemoved(node); + if (this->m_validNodes.contains(node)) this->m_validNodes.removeAll(node); + this->m_associationsModel->delNode(node); /* technically, this shouldn't be required... but just in case */ this->m_valueModel->delNodeValues(node); this->m_nodeModel->delNode(node); - emit this->nodeRemoved(node); } void QTOZWManager_Internal::pvt_nodeReset(quint8 node) { qCDebug(notifications) << "Notification pvt_nodeReset " << node; + QVector valueList(this->m_validValues); + for (QVector::Iterator it = valueList.begin(); it != valueList.end(); it++) { + if (this->m_valueModel->getValueData(*it, QTOZW_ValueIds::ValueIdColumns::Node).toInt() == node) + this->pvt_valueRemoved(*it); + } + + emit this->nodeReset(node); + if (this->m_validNodes.contains(node)) this->m_validNodes.removeAll(node); @@ -1035,7 +1070,6 @@ void QTOZWManager_Internal::pvt_nodeReset(quint8 node) /* technically, this shouldn't be required... but just in case */ this->m_valueModel->delNodeValues(node); this->m_nodeModel->delNode(node); - emit this->nodeReset(node); } void QTOZWManager_Internal::pvt_nodeNaming(quint8 node) @@ -1339,9 +1373,6 @@ void QTOZWManager_Internal::pvt_driverReady(quint32 _homeID) void QTOZWManager_Internal::pvt_driverFailed(quint32 _homeID) { qCDebug(notifications) << "Notification pvt_driverFailed " << _homeID; - QVector valueList(this->m_validValues); - for (QVector::Iterator it = valueList.begin(); it != valueList.end(); it++) - this->pvt_valueRemoved(*it); QVector nodeList(this->m_validNodes); for (QVector::iterator it = nodeList.begin(); it != nodeList.end(); it++) this->pvt_nodeRemoved(*it); @@ -1356,9 +1387,6 @@ void QTOZWManager_Internal::pvt_driverFailed(quint32 _homeID) void QTOZWManager_Internal::pvt_driverReset(quint32 _homeID) { qCDebug(notifications) << "Notification pvt_driverReset " << _homeID; - QVector valueList(this->m_validValues); - for (QVector::Iterator it = valueList.begin(); it != valueList.end(); it++) - this->pvt_valueRemoved(*it); QVector nodeList(this->m_validNodes); for (QVector::iterator it = nodeList.begin(); it != nodeList.end(); it++) this->pvt_nodeRemoved(*it); @@ -1373,9 +1401,6 @@ void QTOZWManager_Internal::pvt_driverReset(quint32 _homeID) void QTOZWManager_Internal::pvt_driverRemoved(quint32 _homeID) { qCDebug(notifications) << "Notification pvt_driverRemoved " << _homeID; - QVector valueList(this->m_validValues); - for (QVector::Iterator it = valueList.begin(); it != valueList.end(); it++) - this->pvt_valueRemoved(*it); QVector nodeList(this->m_validNodes); for (QVector::iterator it = nodeList.begin(); it != nodeList.end(); it++) this->pvt_nodeRemoved(*it); diff --git a/qt-openzwave/source/qtozwnodemodel.cpp b/qt-openzwave/source/qtozwnodemodel.cpp index 09a062e..e60c510 100644 --- a/qt-openzwave/source/qtozwnodemodel.cpp +++ b/qt-openzwave/source/qtozwnodemodel.cpp @@ -56,7 +56,7 @@ QVariant QTOZW_Nodes::data(const QModelIndex &index, int role) const { return QVariant(); if (role == Qt::DisplayRole) { - QMap node = this->m_nodeData[index.row()]; + QMap node = this->m_nodeData.at(index.row()); if (node.size() == 0) { qCWarning(nodeModel) << "data: Cant find any Node on Row " << index.row(); return QVariant(); @@ -171,7 +171,7 @@ bool QTOZW_Nodes::setData(const QModelIndex &index, const QVariant &value, int r switch (static_cast(index.column())) { case NodeName: case NodeLocation: - if (this->m_nodeData[index.row()][static_cast(index.column())] != value) { + if (this->m_nodeData.at(index.row())[static_cast(index.column())] != value) { this->m_nodeData[index.row()][static_cast(index.column())] = value; QVector roles; roles << Qt::DisplayRole << QTOZW_UserRoles::ModelDataChanged; @@ -187,7 +187,7 @@ bool QTOZW_Nodes::setData(const QModelIndex &index, const QVariant &value, int r QVariant QTOZW_Nodes::getNodeData(quint8 _node, QTOZW_Nodes::NodeColumns _column) { int32_t row = this->getNodeRow(_node); if (row >= 0) - return this->m_nodeData[row][_column]; + return this->m_nodeData.at(row)[_column]; qCWarning(nodeModel) << "Can't find NodeData for Node " << _node; return QVariant(); } @@ -196,12 +196,14 @@ int32_t QTOZW_Nodes::getNodeRow(quint8 _node) { if (this->m_nodeData.count() == 0) { return -1; } - QMap >::iterator it; + QVector< QMap >::iterator it; + int i = 0; for (it = m_nodeData.begin(); it != m_nodeData.end(); ++it) { - QMap node = it.value(); + QMap node = (*it); if (node.value(QTOZW_Nodes::NodeID) == _node) { - return it.key(); + return i; } + i++; } //qCWarning(nodeModel) << "Can't Find NodeID " << _node << " in NodeData"; return -1; diff --git a/qt-openzwave/source/qtozwnodemodel_p.cpp b/qt-openzwave/source/qtozwnodemodel_p.cpp index 2e10706..cf3f45c 100644 --- a/qt-openzwave/source/qtozwnodemodel_p.cpp +++ b/qt-openzwave/source/qtozwnodemodel_p.cpp @@ -48,7 +48,7 @@ void QTOZW_Nodes_internal::addNode(quint8 _nodeID) newNode[QTOZW_Nodes::NodeFlags] = flags; this->beginInsertRows(QModelIndex(), this->rowCount(QModelIndex()), this->rowCount(QModelIndex())); - this->m_nodeData[this->rowCount(QModelIndex())] = newNode; + this->m_nodeData.push_back(newNode); this->endInsertRows(); qCInfo(nodeModel) << "Adding Node " << _nodeID << "At Row " << this->getNodeRow(_nodeID); } @@ -60,7 +60,7 @@ void QTOZW_Nodes_internal::setNodeData(quint8 _nodeID, QTOZW_Nodes::NodeColumns qCWarning(nodeModel) << "setNodeData: Node " << _nodeID << " does not exist"; return; } - if (this->m_nodeData[row][column] != data) { + if (this->m_nodeData.at(row)[column] != data) { this->m_nodeData[row][column] = data; QVector roles; roles << Qt::DisplayRole; @@ -77,7 +77,7 @@ void QTOZW_Nodes_internal::setNodeFlags(quint8 _nodeID, QTOZW_Nodes::nodeFlags _ qCWarning(nodeModel) << "setNodeData: Node " << _nodeID << " does not exist"; return; } - QBitArray flag = this->m_nodeData[row][QTOZW_Nodes::NodeFlags].toBitArray(); + QBitArray flag = this->m_nodeData.at(row)[QTOZW_Nodes::NodeFlags].toBitArray(); if (flag.at(_flags) != _value) { flag.setBit(_flags, _value); this->m_nodeData[row][QTOZW_Nodes::NodeFlags] = flag; @@ -87,17 +87,19 @@ void QTOZW_Nodes_internal::setNodeFlags(quint8 _nodeID, QTOZW_Nodes::nodeFlags _ } } void QTOZW_Nodes_internal::delNode(quint8 _nodeID) { - QMap >::iterator it; + QVector< QMap >::iterator it; + int i = 0; for (it = this->m_nodeData.begin(); it != this->m_nodeData.end();) { - if (it.value()[QTOZW_Nodes::NodeColumns::NodeID] == _nodeID) { - qCDebug(nodeModel) << "Removing Node " << it.value()[QTOZW_Nodes::NodeColumns::NodeID] << it.key(); - this->beginRemoveRows(QModelIndex(), it.key(), it.key()); + if ((*it)[QTOZW_Nodes::NodeColumns::NodeID] == _nodeID) { + qCDebug(nodeModel) << "Removing Node " << (*it)[QTOZW_Nodes::NodeColumns::NodeID] << i; + this->beginRemoveRows(QModelIndex(), i, i); it = this->m_nodeData.erase(it); this->endRemoveRows(); continue; } else { it++; } + i++; } } diff --git a/qt-openzwave/source/qtozwvalueidmodel.cpp b/qt-openzwave/source/qtozwvalueidmodel.cpp index df2233b..7c61509 100644 --- a/qt-openzwave/source/qtozwvalueidmodel.cpp +++ b/qt-openzwave/source/qtozwvalueidmodel.cpp @@ -75,26 +75,29 @@ int QTOZW_ValueIds::columnCount(const QModelIndex &parent) const { QVariant QTOZW_ValueIds::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); - + //qDebug() << "data" << index.row() << this->rowCount(index.parent()); if (index.row() >= this->rowCount(index.parent()) || index.row() < 0) return QVariant(); if (role == Qt::DisplayRole) { - QMap value = this->m_valueData[index.row()]; + //qDebug() << "Doing Display Data"; + QMap value = this->m_valueData.at(index.row()); if (value.size() == 0) { qCWarning(valueModel) << "data: Cant find any Node on Row " << index.row(); return QVariant(); } + //qDebug() << value[ValueIdColumns::ValueIDKey] << QMetaEnum::fromType().valueToKey(index.column()) << value; return value[static_cast(index.column())]; } if (role == Qt::ToolTipRole) { - QMap value = this->m_valueData[index.row()]; + QMap value = this->m_valueData.at(index.row()); if (value.size() == 0) { qCWarning(valueModel) << "data: Cant find any Node on Row " << index.row(); return QVariant(); } return value[static_cast(ValueIdColumns::Help)]; } + //qDebug() << "Returning Invalid"; return QVariant(); } @@ -172,11 +175,10 @@ bool QTOZW_ValueIds::setData(const QModelIndex &index, const QVariant &value, in if (role != Qt::EditRole) { return false; } - switch (static_cast(index.column())) { case Value: - if (this->m_valueData[index.row()][static_cast(index.column())] != value) { - this->m_valueData[index.row()][static_cast(index.column())] = value; + if (this->m_valueData.at(index.row())[static_cast(index.column())] != value) { + this->m_valueData.value(index.row())[static_cast(index.column())] = value; QVector roles; roles << Qt::DisplayRole << QTOZW_UserRoles::ModelDataChanged; this->dataChanged(index, index, roles); @@ -190,8 +192,8 @@ bool QTOZW_ValueIds::setData(const QModelIndex &index, const QVariant &value, in QVariant QTOZW_ValueIds::getValueData(quint64 _vidKey, ValueIdColumns _column) { int32_t row = this->getValueRow(_vidKey); - if (row >= 0) - return this->m_valueData[row][_column]; + if (row != -1) + return this->m_valueData.at(row)[_column]; qCWarning(valueModel) << "Can't find ValueData for ValueID " << _vidKey; return QVariant(); } @@ -200,12 +202,16 @@ int32_t QTOZW_ValueIds::getValueRow(quint64 _vidKey) { if (this->m_valueData.count() == 0) { return -1; } - QMap >::iterator it; + //qDebug() << "ValueModel Size:" << m_valueData.count(); + QVector< QMap >::iterator it; + int i = 0; for (it = m_valueData.begin(); it != m_valueData.end(); ++it) { - QMap node = it.value(); + QMap node = (*it); + //qDebug() << node.value(ValueIdColumns::ValueIDKey) << _vidKey; if (node.value(ValueIdColumns::ValueIDKey) == _vidKey) { - return it.key(); + return i; } + i++; } //qCWarning(valueModel) << "Can't Find ValueID " << _vidKey << " in valueData"; return -1; diff --git a/qt-openzwave/source/qtozwvalueidmodel_p.cpp b/qt-openzwave/source/qtozwvalueidmodel_p.cpp index 03cbc96..3cf4447 100644 --- a/qt-openzwave/source/qtozwvalueidmodel_p.cpp +++ b/qt-openzwave/source/qtozwvalueidmodel_p.cpp @@ -46,7 +46,7 @@ void QTOZW_ValueIds_internal::addValue(quint64 _vidKey) newValue[QTOZW_ValueIds::ValueFlags] = flags; this->beginInsertRows(QModelIndex(), this->rowCount(QModelIndex()), this->rowCount(QModelIndex())); - this->m_valueData[this->rowCount(QModelIndex())] = newValue; + this->m_valueData.push_back(newValue); this->endInsertRows(); } @@ -57,11 +57,12 @@ void QTOZW_ValueIds_internal::setValueData(quint64 _vidKey, QTOZW_ValueIds::Valu qCWarning(valueModel) << "setValueData: Value " << _vidKey << " does not exist"; return; } - if (this->m_valueData[row][column] != data) { + if (this->m_valueData.at(row)[column] != data) { this->m_valueData[row][column] = data; QVector roles; roles << Qt::DisplayRole; if (!transaction) this->dataChanged(this->createIndex(row, column), this->createIndex(row, column), roles); + //qDebug() << "Setting Data " << _vidKey << row << QMetaEnum::fromType().valueToKey(column) << data << this->m_valueData.value(row)[column] << this->m_valueData.at(row)[ValueIdColumns::ValueIDKey]; } } @@ -72,10 +73,10 @@ void QTOZW_ValueIds_internal::setValueFlags(quint64 _vidKey, QTOZW_ValueIds::Val qCWarning(valueModel) << "setValueFlags: Value " << _vidKey << " does not exist"; return; } - if (this->m_valueData[row][QTOZW_ValueIds::ValueFlags].toBitArray().at(_flags) != _value) { - QBitArray flags = this->m_valueData[row][QTOZW_ValueIds::ValueFlags].value(); + if (this->m_valueData.at(row)[QTOZW_ValueIds::ValueFlags].toBitArray().at(_flags) != _value) { + QBitArray flags = this->m_valueData.value(row)[QTOZW_ValueIds::ValueFlags].value(); flags.setBit(_flags, _value); - this->m_valueData[row][QTOZW_ValueIds::ValueFlags] = flags; + this->m_valueData.value(row)[QTOZW_ValueIds::ValueFlags] = flags; QVector roles; roles << Qt::DisplayRole; if (!transaction) this->dataChanged(this->createIndex(row, QTOZW_ValueIds::ValueFlags), this->createIndex(row, QTOZW_ValueIds::ValueFlags), roles); @@ -83,33 +84,35 @@ void QTOZW_ValueIds_internal::setValueFlags(quint64 _vidKey, QTOZW_ValueIds::Val } void QTOZW_ValueIds_internal::delValue(quint64 _vidKey) { - QMap >::iterator it; - QMap > newValueMap; + QVector< QMap >::iterator it; + int i = 0; for (it = this->m_valueData.begin(); it != this->m_valueData.end();) { - if (it.value()[QTOZW_ValueIds::ValueIdColumns::ValueIDKey] == _vidKey) { - qCDebug(valueModel) << "Removing Value " << it.value()[QTOZW_ValueIds::ValueIdColumns::Label] << it.key(); - this->beginRemoveRows(QModelIndex(), it.key(), it.key()); + if ((*it)[QTOZW_ValueIds::ValueIdColumns::ValueIDKey] == _vidKey) { + qCDebug(valueModel) << "delValue: Removing Value " << (*it)[QTOZW_ValueIds::ValueIdColumns::Label] << (*it)[QTOZW_ValueIds::ValueIdColumns::ValueIDKey] << i; + this->beginRemoveRows(QModelIndex(), i, i); it = this->m_valueData.erase(it); this->endRemoveRows(); continue; } else { it++; } + i++; } } void QTOZW_ValueIds_internal::delNodeValues(quint8 _node) { - QMap >::iterator it; - QMap > newValueMap; + QVector< QMap >::iterator it; + int i = 0; for (it = this->m_valueData.begin(); it != this->m_valueData.end();) { - if (it.value()[QTOZW_ValueIds::ValueIdColumns::Node] == _node) { - qCDebug(valueModel) << "Removing Value " << it.value()[QTOZW_ValueIds::ValueIdColumns::Label] << it.key(); - this->beginRemoveRows(QModelIndex(), it.key(), it.key()); + if ((*it)[QTOZW_ValueIds::ValueIdColumns::Node] == _node) { + qCDebug(valueModel) << "delNodeValue: Removing Value " << (*it)[QTOZW_ValueIds::ValueIdColumns::Label] << (*it)[QTOZW_ValueIds::ValueIdColumns::ValueIDKey] << i; + this->beginRemoveRows(QModelIndex(), i, i); it = this->m_valueData.erase(it); this->endRemoveRows(); } else { it++; } + i++; } } @@ -128,6 +131,9 @@ void QTOZW_ValueIds_internal::finishTransaction(quint64 _vidKey) { this->dataChanged(this->createIndex(row, 0), this->createIndex(row, QTOZW_ValueIds::ValueIdColumns::ValueIdCount -1)); } +QVariant QTOZW_ValueIds_internal::getValueData(quint64 node, ValueIdColumns column) { + return QTOZW_ValueIds::getValueData(node, column); +} QString BitSettoQString(QBitArray ba) { diff --git a/qt-ozwdaemon/mqttpublisher.cpp b/qt-ozwdaemon/mqttpublisher.cpp index 72e53c3..d87366e 100644 --- a/qt-ozwdaemon/mqttpublisher.cpp +++ b/qt-ozwdaemon/mqttpublisher.cpp @@ -745,6 +745,55 @@ void mqttpublisher::valueAdded(quint64 vidKey) { void mqttpublisher::valueRemoved(quint64 vidKey) { qCDebug(ozwmp) << "Publishing Event valueRemoved:" << vidKey; this->delValueTopic(vidKey); + quint8 vinstance = this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Instance).toInt(); + quint8 vcc = this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::CommandClass).toInt(); + quint8 node = this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Node).toInt(); + bool removeInstance = true; + bool removeCC = true; + QMap::iterator it; + for (it =this->m_values.begin(); it != this->m_values.end(); it++) { + if (this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::ValueIDKey).value() == vidKey) { + continue; + } + if (this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::Node).toInt() != node) { + continue; + } + if (this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::Instance).toInt() != vinstance) { + continue; + }; + quint8 cc = this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::CommandClass).toInt(); + if (vcc == cc) { + removeCC = false; + } + } + if (removeCC) { + qCDebug(ozwmp) << "Removing CommandClass Topic for " << this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Node).toInt() << vinstance << vcc; + this->delCommandClassTopic(this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Node).toInt(), vinstance, vcc); + } + for (it =this->m_values.begin(); it != this->m_values.end(); it++) { + if (this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::ValueIDKey).value() == vidKey) { + continue; + } + if (this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::Node).toInt() != node) { + continue; + } + quint8 instance = this->m_valueModel->getValueData(it.key(), QTOZW_ValueIds::ValueIdColumns::Instance).toInt(); + if (vinstance == instance) { + removeInstance = false; + } + } + + if (removeInstance) { + qCDebug(ozwmp) << "Removing Instance Topic for " << this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Node).toInt() << vinstance; + this->delInstanceTopic(this->m_valueModel->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Node).toInt(), vinstance); + } + + + if (this->m_values.find(vidKey) != this->m_values.end()) { + this->m_values.remove(vidKey); + } else { + qCWarning(ozwmp) << "Can't Find Value Map for " << vidKey; + } } void mqttpublisher::valueChanged(quint64 vidKey) { qCDebug(ozwmp) << "Publishing Event valueChanged:" << vidKey;