28
28
29
29
from matter_server .common .const import VERBOSE_LOG_LEVEL
30
30
from matter_server .common .custom_clusters import check_polled_attributes
31
- from matter_server .common .models import CommissionableNodeData , CommissioningParameters
31
+ from matter_server .common .models import (
32
+ CommissionableNodeData ,
33
+ CommissioningParameters ,
34
+ MatterSoftwareVersion ,
35
+ )
32
36
from matter_server .server .helpers .attributes import parse_attributes_from_read_result
33
37
from matter_server .server .helpers .utils import ping_ip
34
38
from matter_server .server .ota import check_for_update
@@ -897,7 +901,7 @@ async def import_test_node(self, dump: str) -> None:
897
901
self .server .signal_event (EventType .NODE_ADDED , node )
898
902
899
903
@api_command (APICommand .CHECK_NODE_UPDATE )
900
- async def check_node_update (self , node_id : int ) -> dict | None :
904
+ async def check_node_update (self , node_id : int ) -> MatterSoftwareVersion | None :
901
905
"""
902
906
Check if there is an update for a particular node.
903
907
@@ -906,12 +910,36 @@ async def check_node_update(self, node_id: int) -> dict | None:
906
910
information of the latest update available.
907
911
"""
908
912
909
- return await self ._check_node_update (node_id )
913
+ update = await self ._check_node_update (node_id )
914
+ if update is None :
915
+ return None
916
+
917
+ if not all (
918
+ key in update
919
+ for key in [
920
+ "vid" ,
921
+ "pid" ,
922
+ "softwareVersion" ,
923
+ "softwareVersionString" ,
924
+ "minApplicableSoftwareVersion" ,
925
+ "maxApplicableSoftwareVersion" ,
926
+ ]
927
+ ):
928
+ raise UpdateCheckError ("Invalid update data" )
929
+
930
+ return MatterSoftwareVersion (
931
+ vid = update ["vid" ],
932
+ pid = update ["pid" ],
933
+ software_version = update ["softwareVersion" ],
934
+ software_version_string = update ["softwareVersionString" ],
935
+ firmware_information = update .get ("firmwareInformation" , None ),
936
+ min_applicable_software_version = update ["minApplicableSoftwareVersion" ],
937
+ max_applicable_software_version = update ["maxApplicableSoftwareVersion" ],
938
+ release_notes_url = update .get ("releaseNotesUrl" , None ),
939
+ )
910
940
911
941
@api_command (APICommand .UPDATE_NODE )
912
- async def update_node (
913
- self , node_id : int , software_version : int | str
914
- ) -> dict | None :
942
+ async def update_node (self , node_id : int , software_version : int | str ) -> None :
915
943
"""
916
944
Update a node to a new software version.
917
945
@@ -964,8 +992,6 @@ async def update_node(
964
992
)
965
993
self ._nodes_in_ota .remove (node_id )
966
994
967
- return update
968
-
969
995
async def _check_node_update (
970
996
self ,
971
997
node_id : int ,
0 commit comments