Skip to content

Commit c8966ca

Browse files
committed
Fix zombie detection for some routers
In some cases offline devices weren't detected correctly. This change ensures queries will be made up until MaxRecvErrorsZombie (currently 10) is reached.
1 parent adff267 commit c8966ca

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

src/zm_controller.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6030,15 +6030,12 @@ bool ZDP_SendIeeeAddrRequest(zmController *apsCtrl, const deCONZ::Address &dst)
60306030

60316031
req.dstAddress().setExt(dst.ext());
60326032
req.dstAddress().setNwk(dst.nwk());
6033-
req.setDstAddressMode(deCONZ::ApsNwkAddress);
6033+
req.setDstAddressMode(deCONZ::ApsExtAddress);
60346034

60356035
req.setDstEndpoint(ZDO_ENDPOINT);
60366036
req.setSrcEndpoint(ZDO_ENDPOINT);
60376037
req.setProfileId(ZDP_PROFILE_ID);
6038-
if (deCONZ::netEdit()->apsAcksEnabled())
6039-
{
6040-
req.setTxOptions(deCONZ::ApsTxAcknowledgedTransmission);
6041-
}
6038+
req.setTxOptions(deCONZ::ApsTxAcknowledgedTransmission);
60426039
req.setRadius(0);
60436040
req.setClusterId(ZDP_IEEE_ADDR_CLID);
60446041
stream << apsCtrl->genSequenceNumber();
@@ -8322,7 +8319,7 @@ void zmController::zombieTick()
83228319
}
83238320
}
83248321

8325-
deCONZ::TimeMs dt;
8322+
deCONZ::TimeMs dt{};
83268323
if (isValid(minSeenTime))
83278324
{
83288325
dt = m_steadyTimeRef - minSeenTime;
@@ -8825,6 +8822,16 @@ void zmController::deviceDiscoverTick()
88258822
else
88268823
{
88278824
m_lqiIter++;
8825+
8826+
// try to proceed with IEEE requests to move to zombie state if none are received
8827+
if (node.data->recvErrors() < MaxRecvErrorsZombie && !node.data->nodeDescriptor().isNull())
8828+
{
8829+
AddressPair addressPair;
8830+
addressPair.bAddr = node.data->address();
8831+
addressPair.bMacCapabilities = node.data->nodeDescriptor().macCapabilities();
8832+
8833+
addDeviceDiscover(addressPair);
8834+
}
88288835
}
88298836
}
88308837

0 commit comments

Comments
 (0)