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