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
@@ -888,7 +892,7 @@ async def import_test_node(self, dump: str) -> None:
888
892
self .server .signal_event (EventType .NODE_ADDED , node )
889
893
890
894
@api_command (APICommand .CHECK_NODE_UPDATE )
891
- async def check_node_update (self , node_id : int ) -> dict | None :
895
+ async def check_node_update (self , node_id : int ) -> MatterSoftwareVersion | None :
892
896
"""
893
897
Check if there is an update for a particular node.
894
898
@@ -897,12 +901,36 @@ async def check_node_update(self, node_id: int) -> dict | None:
897
901
information of the latest update available.
898
902
"""
899
903
900
- return await self ._check_node_update (node_id )
904
+ update = await self ._check_node_update (node_id )
905
+ if update is None :
906
+ return None
907
+
908
+ if not all (
909
+ key in update
910
+ for key in [
911
+ "vid" ,
912
+ "pid" ,
913
+ "softwareVersion" ,
914
+ "softwareVersionString" ,
915
+ "minApplicableSoftwareVersion" ,
916
+ "maxApplicableSoftwareVersion" ,
917
+ ]
918
+ ):
919
+ raise UpdateCheckError ("Invalid update data" )
920
+
921
+ return MatterSoftwareVersion (
922
+ vid = update ["vid" ],
923
+ pid = update ["pid" ],
924
+ software_version = update ["softwareVersion" ],
925
+ software_version_string = update ["softwareVersionString" ],
926
+ firmware_information = update .get ("firmwareInformation" , None ),
927
+ min_applicable_software_version = update ["minApplicableSoftwareVersion" ],
928
+ max_applicable_software_version = update ["maxApplicableSoftwareVersion" ],
929
+ release_notes_url = update .get ("releaseNotesUrl" , None ),
930
+ )
901
931
902
932
@api_command (APICommand .UPDATE_NODE )
903
- async def update_node (
904
- self , node_id : int , software_version : int | str
905
- ) -> dict | None :
933
+ async def update_node (self , node_id : int , software_version : int | str ) -> None :
906
934
"""
907
935
Update a node to a new software version.
908
936
@@ -955,8 +983,6 @@ async def update_node(
955
983
)
956
984
self ._nodes_in_ota .remove (node_id )
957
985
958
- return update
959
-
960
986
async def _check_node_update (
961
987
self ,
962
988
node_id : int ,
0 commit comments