Skip to content

Commit 523c509

Browse files
committed
Add workaround for Osram Plug Z3 reboot cycle
This is a workaround for buggy Osram/Ledvance Plug Z3 firmware (maybe Plug 01 as well). It it sends upgrade end request _without_ any update happening before. The change sends an ABORT status to break the reboot cycle.
1 parent 6f1b2bc commit 523c509

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

otau_node.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ OtauNode::OtauNode(const deCONZ::Address &addr)
2828
endpoint = 0xFF; // for unicast if endpoint not known
2929
endpointNotify = 0;
3030
rxOnWhenIdle = true;
31+
imgBlockReq = {};
32+
imgPageReq = {};
3133
}
3234

3335
/*! Sets the nodes state.

std_otau_plugin.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,6 +1814,15 @@ void StdOtauPlugin::upgradeEndRequest(const deCONZ::ApsDataIndication &ind, cons
18141814

18151815
if (node->upgradeEndReq.status == OTAU_SUCCESS)
18161816
{
1817+
if (node->imgBlockReq.offset == 0)
1818+
{
1819+
// This is a workaround for buggy Osram/Ledvance Plug Z3 firmware (maybe Plug 01 as well)
1820+
// it sends upgrade end request _without_ any update happening before,
1821+
// send a ABORT status to break the reboot cycle.
1822+
defaultResponse(node, zclFrame.commandId(), OTAU_ABORT);
1823+
return;
1824+
}
1825+
18171826
node->setStatus(OtauNode::StatusWaitUpgradeEnd);
18181827
node->setOffset(node->file.totalImageSize); // mark done
18191828

0 commit comments

Comments
 (0)