From b649d5ac6c8237e81093b65764abbfae34c580fd Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Wed, 5 Jun 2024 16:28:34 +0200 Subject: [PATCH] Raise update error if the node moves from querying to idle When the node's UpdateStateEnum changes from Querying to Idle it means the update file did not get processed. This could be due to temporary network issues or the update file not being honored by the target node. --- matter_server/server/ota/provider.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/matter_server/server/ota/provider.py b/matter_server/server/ota/provider.py index 028deee0..a646d0d6 100644 --- a/matter_server/server/ota/provider.py +++ b/matter_server/server/ota/provider.py @@ -353,11 +353,21 @@ async def check_update_state( Clusters.OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum, new_value ) + old_update_state = cast( + Clusters.OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum, old_value + ) + # Update state of target node changed, check if update is done. if ( update_state == Clusters.OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum.kIdle ): + if ( + old_update_state + == Clusters.OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum.kQuerying + ): + raise UpdateError("Target node did not process the update file") + LOGGER.info( "Node %d update state idle, assuming done.", self._ota_target_node_id )