diff --git a/libnymea-zigbee/zdo/zigbeedeviceobject.cpp b/libnymea-zigbee/zdo/zigbeedeviceobject.cpp index 4fb7c2b..d4aea05 100644 --- a/libnymea-zigbee/zdo/zigbeedeviceobject.cpp +++ b/libnymea-zigbee/zdo/zigbeedeviceobject.cpp @@ -653,9 +653,15 @@ ZigbeeNetworkRequest ZigbeeDeviceObject::buildZdoRequest(quint16 zdoRequest) ZigbeeDeviceObjectReply *ZigbeeDeviceObject::createZigbeeDeviceObjectReply(const ZigbeeNetworkRequest &request, quint8 transactionSequenceNumber) { ZigbeeDeviceObjectReply *zdoReply = new ZigbeeDeviceObjectReply(request, this); - connect(zdoReply, &ZigbeeDeviceObjectReply::finished, zdoReply, &ZigbeeDeviceObjectReply::deleteLater, Qt::QueuedConnection); zdoReply->m_expectedResponse = static_cast(request.clusterId() | 0x8000); zdoReply->m_transactionSequenceNumber = transactionSequenceNumber; + connect(zdoReply, &ZigbeeDeviceObjectReply::finished, this, [=](){ + zdoReply->deleteLater(); + m_pendingReplies.remove(transactionSequenceNumber); + if (zdoReply->error() != ZigbeeDeviceObjectReply::ErrorNoError) { + qCWarning(dcZigbeeDeviceObject()) << "ZDO request error for TSN:" << transactionSequenceNumber; + } + }, Qt::QueuedConnection); m_pendingReplies.insert(transactionSequenceNumber, zdoReply); return zdoReply; } @@ -721,7 +727,6 @@ void ZigbeeDeviceObject::finishZdoReply(ZigbeeDeviceObjectReply *zdoReply) break; } - m_pendingReplies.remove(zdoReply->transactionSequenceNumber()); zdoReply->m_timeoutTimer.stop(); zdoReply->finished(); } diff --git a/libnymea-zigbee/zdo/zigbeedeviceobjectreply.cpp b/libnymea-zigbee/zdo/zigbeedeviceobjectreply.cpp index cc536a6..515cfdc 100644 --- a/libnymea-zigbee/zdo/zigbeedeviceobjectreply.cpp +++ b/libnymea-zigbee/zdo/zigbeedeviceobjectreply.cpp @@ -33,7 +33,7 @@ ZigbeeDeviceObjectReply::ZigbeeDeviceObjectReply(const ZigbeeNetworkRequest &req QObject(parent), m_request(request) { - m_timeoutTimer.setInterval(5000); + m_timeoutTimer.setInterval(10000); connect(&m_timeoutTimer, &QTimer::timeout, this, [this](){ m_error = ErrorTimeout; emit finished();