matter-python-client 1.5.0a0.dev202610190305__tar.gz → 1.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/PKG-INFO +12 -2
  2. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/README.md +11 -1
  3. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/Objects.py +1 -0
  4. matter_python_client-1.5.1/chip/clusters/cluster_defs/AqaraLedStripT2Cluster.py +171 -0
  5. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/__init__.py +2 -0
  6. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_python_client.egg-info/PKG-INFO +12 -2
  7. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_python_client.egg-info/SOURCES.txt +1 -0
  8. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/client.py +62 -11
  9. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/custom_clusters.py +3 -0
  10. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/models.py +18 -1
  11. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/pyproject.toml +1 -1
  12. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_camera.py +46 -0
  13. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_client.py +97 -0
  14. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_event_dispatch.py +7 -2
  15. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_webrtc_protocol.py +15 -0
  16. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/ChipUtility.py +0 -0
  17. {matter_python_client-1.5.0a0.dev202610190305/matter_server/common/helpers → matter_python_client-1.5.1/chip}/__init__.py +0 -0
  18. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/ClusterObjects.py +0 -0
  19. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/Types.py +0 -0
  20. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/__init__.py +0 -0
  21. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AccessControl.py +0 -0
  22. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AccountLogin.py +0 -0
  23. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Actions.py +0 -0
  24. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ActivatedCarbonFilterMonitoring.py +0 -0
  25. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AdministratorCommissioning.py +0 -0
  26. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AirQuality.py +0 -0
  27. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AmbientContextSensing.py +0 -0
  28. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ApplicationBasic.py +0 -0
  29. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ApplicationLauncher.py +0 -0
  30. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AqaraAmbientSensingConfigurationCluster.py +0 -0
  31. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AqaraOccupantLocationCluster.py +0 -0
  32. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AqaraRadarSensingUnionCluster.py +0 -0
  33. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/AudioOutput.py +0 -0
  34. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/BasicInformation.py +0 -0
  35. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Binding.py +0 -0
  36. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/BooleanState.py +0 -0
  37. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/BooleanStateConfiguration.py +0 -0
  38. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/BridgedDeviceBasicInformation.py +0 -0
  39. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CameraAvSettingsUserLevelManagement.py +0 -0
  40. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CameraAvStreamManagement.py +0 -0
  41. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CarbonDioxideConcentrationMeasurement.py +0 -0
  42. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CarbonMonoxideConcentrationMeasurement.py +0 -0
  43. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Channel.py +0 -0
  44. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Chime.py +0 -0
  45. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ClosureControl.py +0 -0
  46. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ClosureDimension.py +0 -0
  47. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ColorControl.py +0 -0
  48. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CommissionerControl.py +0 -0
  49. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CommodityMetering.py +0 -0
  50. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CommodityPrice.py +0 -0
  51. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/CommodityTariff.py +0 -0
  52. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ContentAppObserver.py +0 -0
  53. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ContentControl.py +0 -0
  54. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ContentLauncher.py +0 -0
  55. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Descriptor.py +0 -0
  56. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DeviceEnergyManagement.py +0 -0
  57. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DeviceEnergyManagementMode.py +0 -0
  58. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DiagnosticLogs.py +0 -0
  59. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DishwasherAlarm.py +0 -0
  60. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DishwasherMode.py +0 -0
  61. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DoorLock.py +0 -0
  62. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/DraftElectricalMeasurementCluster.py +0 -0
  63. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/EcosystemInformation.py +0 -0
  64. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ElectricalEnergyMeasurement.py +0 -0
  65. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ElectricalGridConditions.py +0 -0
  66. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ElectricalPowerMeasurement.py +0 -0
  67. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/EnergyEvse.py +0 -0
  68. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/EnergyEvseMode.py +0 -0
  69. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/EnergyPreference.py +0 -0
  70. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/EthernetNetworkDiagnostics.py +0 -0
  71. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/EveCluster.py +0 -0
  72. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/FanControl.py +0 -0
  73. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/FixedLabel.py +0 -0
  74. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/FlowMeasurement.py +0 -0
  75. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/FormaldehydeConcentrationMeasurement.py +0 -0
  76. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/GeneralCommissioning.py +0 -0
  77. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/GeneralDiagnostics.py +0 -0
  78. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Globals.py +0 -0
  79. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/GroupKeyManagement.py +0 -0
  80. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Groupcast.py +0 -0
  81. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Groups.py +0 -0
  82. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/HeimanCluster.py +0 -0
  83. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/HepaFilterMonitoring.py +0 -0
  84. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/IcdManagement.py +0 -0
  85. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Identify.py +0 -0
  86. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/IkeaValveCalibrationCluster.py +0 -0
  87. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/IlluminanceMeasurement.py +0 -0
  88. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/InovelliCluster.py +0 -0
  89. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/JointFabricAdministrator.py +0 -0
  90. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/JointFabricDatastore.py +0 -0
  91. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/KeypadInput.py +0 -0
  92. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/LaundryDryerControls.py +0 -0
  93. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/LaundryWasherControls.py +0 -0
  94. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/LaundryWasherMode.py +0 -0
  95. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/LevelControl.py +0 -0
  96. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/LocalizationConfiguration.py +0 -0
  97. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/LowPower.py +0 -0
  98. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/MediaInput.py +0 -0
  99. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/MediaPlayback.py +0 -0
  100. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Messages.py +0 -0
  101. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/MeterIdentification.py +0 -0
  102. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/MicrowaveOvenControl.py +0 -0
  103. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/MicrowaveOvenMode.py +0 -0
  104. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ModeSelect.py +0 -0
  105. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/NeoCluster.py +0 -0
  106. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/NetworkCommissioning.py +0 -0
  107. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/NitrogenDioxideConcentrationMeasurement.py +0 -0
  108. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OccupancySensing.py +0 -0
  109. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OnOff.py +0 -0
  110. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OperationalCredentials.py +0 -0
  111. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OperationalState.py +0 -0
  112. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OtaSoftwareUpdateProvider.py +0 -0
  113. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OtaSoftwareUpdateRequestor.py +0 -0
  114. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OvenCavityOperationalState.py +0 -0
  115. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OvenMode.py +0 -0
  116. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/OzoneConcentrationMeasurement.py +0 -0
  117. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Pm10ConcentrationMeasurement.py +0 -0
  118. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Pm1ConcentrationMeasurement.py +0 -0
  119. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Pm25ConcentrationMeasurement.py +0 -0
  120. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/PowerSource.py +0 -0
  121. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/PowerSourceConfiguration.py +0 -0
  122. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/PowerTopology.py +0 -0
  123. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/PressureMeasurement.py +0 -0
  124. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/PumpConfigurationAndControl.py +0 -0
  125. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/PushAvStreamTransport.py +0 -0
  126. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RadonConcentrationMeasurement.py +0 -0
  127. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RefrigeratorAlarm.py +0 -0
  128. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RefrigeratorAndTemperatureControlledCabinetMode.py +0 -0
  129. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RelativeHumidityMeasurement.py +0 -0
  130. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RvcCleanMode.py +0 -0
  131. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RvcOperationalState.py +0 -0
  132. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/RvcRunMode.py +0 -0
  133. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ScenesManagement.py +0 -0
  134. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ServiceArea.py +0 -0
  135. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/SmokeCoAlarm.py +0 -0
  136. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/SoftwareDiagnostics.py +0 -0
  137. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/SoilMeasurement.py +0 -0
  138. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Switch.py +0 -0
  139. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TargetNavigator.py +0 -0
  140. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TclDehumidifierCluster.py +0 -0
  141. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TemperatureAlarm.py +0 -0
  142. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TemperatureControl.py +0 -0
  143. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TemperatureMeasurement.py +0 -0
  144. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/Thermostat.py +0 -0
  145. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ThermostatUserInterfaceConfiguration.py +0 -0
  146. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ThirdRealityMeteringCluster.py +0 -0
  147. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ThreadBorderRouterManagement.py +0 -0
  148. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ThreadNetworkDiagnostics.py +0 -0
  149. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ThreadNetworkDirectory.py +0 -0
  150. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TimeFormatLocalization.py +0 -0
  151. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TimeSynchronization.py +0 -0
  152. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TlsCertificateManagement.py +0 -0
  153. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TlsClientManagement.py +0 -0
  154. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/TotalVolatileOrganicCompoundsConcentrationMeasurement.py +0 -0
  155. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/UnitLocalization.py +0 -0
  156. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/UnitTestingCluster.py +0 -0
  157. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/UserLabel.py +0 -0
  158. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ValveConfigurationAndControl.py +0 -0
  159. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WagoCluster.py +0 -0
  160. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WakeOnLan.py +0 -0
  161. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WaterHeaterManagement.py +0 -0
  162. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WaterHeaterMode.py +0 -0
  163. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WaterTankLevelMonitoring.py +0 -0
  164. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WebRtcTransportDefinitions.py +0 -0
  165. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WebRtcTransportProvider.py +0 -0
  166. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WebRtcTransportRequestor.py +0 -0
  167. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WiFiNetworkDiagnostics.py +0 -0
  168. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WiFiNetworkManagement.py +0 -0
  169. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/WindowCovering.py +0 -0
  170. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/cluster_defs/ZoneManagement.py +0 -0
  171. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/clusters/enum.py +0 -0
  172. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/tlv/__init__.py +0 -0
  173. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/chip/tlv/tlvlist.py +0 -0
  174. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_python_client.egg-info/dependency_links.txt +0 -0
  175. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_python_client.egg-info/not-zip-safe +0 -0
  176. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_python_client.egg-info/requires.txt +0 -0
  177. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_python_client.egg-info/top_level.txt +0 -0
  178. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/__init__.py +0 -0
  179. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/__init__.py +0 -0
  180. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/connection.py +0 -0
  181. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/exceptions.py +0 -0
  182. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/models/__init__.py +0 -0
  183. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/models/device_types.py +0 -0
  184. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/client/models/node.py +0 -0
  185. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/__init__.py +0 -0
  186. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/const.py +0 -0
  187. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/errors.py +0 -0
  188. {matter_python_client-1.5.0a0.dev202610190305/chip → matter_python_client-1.5.1/matter_server/common/helpers}/__init__.py +0 -0
  189. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/helpers/api.py +0 -0
  190. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/helpers/json.py +0 -0
  191. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/common/helpers/util.py +0 -0
  192. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/matter_server/py.typed +0 -0
  193. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/setup.cfg +0 -0
  194. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_bigint_wire.py +0 -0
  195. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_bridge_node_fixture.py +0 -0
  196. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_bridge_topology.py +0 -0
  197. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_client_integration.py +0 -0
  198. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_credentials.py +0 -0
  199. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_icd.py +0 -0
  200. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_imports.py +0 -0
  201. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_integration.py +0 -0
  202. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_interaction.py +0 -0
  203. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_network_topology.py +0 -0
  204. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_ota_upload.py +0 -0
  205. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_unix_socket.py +0 -0
  206. {matter_python_client-1.5.0a0.dev202610190305 → matter_python_client-1.5.1}/tests/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matter-python-client
3
- Version: 1.5.0a0.dev202610190305
3
+ Version: 1.5.1
4
4
  Summary: Python Client for the OHF Matter Server
5
5
  Author-email: Open Home Foundation <hello@openhomefoundation.io>
6
6
  License-Expression: Apache-2.0
@@ -141,9 +141,19 @@ Beyond the `python-matter-server` API, the client exposes commands the Matter.js
141
141
  play your audio; without it the server makes the offer's audio sections not send, so a browser-style
142
142
  `sendrecv` audio offer goes to the camera as `recvonly`. `camera_session_ended` and
143
143
  `camera_stream_evicted` events arrive as `CameraSessionEndedData` / `CameraStreamEvictedData`;
144
- `webrtc_callback` stays a dict. Errors 102 to 106 (`CameraStreamIncompatible`, ...) expose their
144
+ `webrtc_callback` stays a dict. `camera_session_ended` covers every end of a session opened with
145
+ `camera_start_stream` that the client did not ask for, the camera's own `End` included; its `cause` says why. Errors 102 to 106 (`CameraStreamIncompatible`, ...) expose their
145
146
  details as attributes, e.g. `err.reason` and `err.bound` on `CameraStreamIncompatible`
146
147
 
148
+ `camera_start_stream(..., client_session_key="...")` names the session with your own key (1 to 128
149
+ characters, unique among the connection's starting and open sessions). Every `webrtc_callback` and
150
+ `camera_session_ended` event of the session carries it as `client_session_key`, so a handler can
151
+ match events even when it runs before the awaited call returns. `camera_provide_ice_candidates(node_id,
152
+ endpoint_id, None, candidates, client_session_key=...)` and `camera_stop_stream(node_id, endpoint_id,
153
+ client_session_key=...)` take it in place of the session id, also while `camera_start_stream` is still
154
+ running: candidates are queued on the server and sent after the start's response, and the stop cancels
155
+ the start.
156
+
147
157
  The minimal `camera_start_stream` call is `node_id`, `endpoint_id`, `stream_usage` and your SDP
148
158
  offer: the server reuses or allocates the best stream the camera can serve that still fits what
149
159
  the offer can decode, and adds audio when it can. Pass `video` / `audio` hints only to set hard bounds. A
@@ -109,9 +109,19 @@ Beyond the `python-matter-server` API, the client exposes commands the Matter.js
109
109
  play your audio; without it the server makes the offer's audio sections not send, so a browser-style
110
110
  `sendrecv` audio offer goes to the camera as `recvonly`. `camera_session_ended` and
111
111
  `camera_stream_evicted` events arrive as `CameraSessionEndedData` / `CameraStreamEvictedData`;
112
- `webrtc_callback` stays a dict. Errors 102 to 106 (`CameraStreamIncompatible`, ...) expose their
112
+ `webrtc_callback` stays a dict. `camera_session_ended` covers every end of a session opened with
113
+ `camera_start_stream` that the client did not ask for, the camera's own `End` included; its `cause` says why. Errors 102 to 106 (`CameraStreamIncompatible`, ...) expose their
113
114
  details as attributes, e.g. `err.reason` and `err.bound` on `CameraStreamIncompatible`
114
115
 
116
+ `camera_start_stream(..., client_session_key="...")` names the session with your own key (1 to 128
117
+ characters, unique among the connection's starting and open sessions). Every `webrtc_callback` and
118
+ `camera_session_ended` event of the session carries it as `client_session_key`, so a handler can
119
+ match events even when it runs before the awaited call returns. `camera_provide_ice_candidates(node_id,
120
+ endpoint_id, None, candidates, client_session_key=...)` and `camera_stop_stream(node_id, endpoint_id,
121
+ client_session_key=...)` take it in place of the session id, also while `camera_start_stream` is still
122
+ running: candidates are queued on the server and sent after the start's response, and the stop cancels
123
+ the start.
124
+
115
125
  The minimal `camera_start_stream` call is `node_id`, `endpoint_id`, `stream_usage` and your SDP
116
126
  offer: the server reuses or allocates the best stream the camera can serve that still fits what
117
127
  the offer can decode, and adds audio when it can. Pass `video` / `audio` hints only to set hard bounds. A
@@ -43,6 +43,7 @@ __all__ = [
43
43
  "ApplicationBasic",
44
44
  "ApplicationLauncher",
45
45
  "AqaraAmbientSensingConfigurationCluster",
46
+ "AqaraLedStripT2Cluster",
46
47
  "AqaraOccupantLocationCluster",
47
48
  "AqaraRadarSensingUnionCluster",
48
49
  "AudioOutput",
@@ -0,0 +1,171 @@
1
+ """AqaraLedStripT2Cluster cluster definition (auto-generated, DO NOT edit)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import typing
6
+ from dataclasses import dataclass, field
7
+ from enum import IntFlag
8
+
9
+ from ... import ChipUtility
10
+ from ...clusters.enum import MatterIntEnum
11
+ from ...tlv import float32, uint
12
+ from ..ClusterObjects import (Cluster, ClusterAttributeDescriptor, ClusterCommand, ClusterEvent, ClusterObject,
13
+ ClusterObjectDescriptor, ClusterObjectFieldDescriptor)
14
+ from ..Types import Nullable, NullValue
15
+
16
+
17
+ @dataclass
18
+ class AqaraLedStripT2Cluster(Cluster):
19
+ id: typing.ClassVar[int] = 0x115FFC0F
20
+
21
+ @ChipUtility.classproperty
22
+ def descriptor(cls) -> ClusterObjectDescriptor:
23
+ return ClusterObjectDescriptor(
24
+ Fields=[
25
+ ClusterObjectFieldDescriptor(Label="musicSyncEnabled", Tag=0x00000013, Type=typing.Optional[bool]),
26
+ ClusterObjectFieldDescriptor(Label="musicSyncEffect", Tag=0x00000015, Type=typing.Optional[uint]),
27
+ ClusterObjectFieldDescriptor(Label="musicSyncSensitivity", Tag=0x00000016, Type=typing.Optional[uint]),
28
+ ClusterObjectFieldDescriptor(Label="generatedCommandList", Tag=0x0000FFF8, Type=typing.List[uint]),
29
+ ClusterObjectFieldDescriptor(Label="acceptedCommandList", Tag=0x0000FFF9, Type=typing.List[uint]),
30
+ ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]),
31
+ ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=uint),
32
+ ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
33
+ ])
34
+
35
+ musicSyncEnabled: typing.Optional[bool] = None
36
+ musicSyncEffect: typing.Optional[uint] = None
37
+ musicSyncSensitivity: typing.Optional[uint] = None
38
+ generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
39
+ acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
40
+ attributeList: typing.List[uint] = field(default_factory=lambda: [])
41
+ featureMap: uint = 0
42
+ clusterRevision: uint = 0
43
+
44
+ class Attributes:
45
+ @dataclass
46
+ class MusicSyncEnabled(ClusterAttributeDescriptor):
47
+ @ChipUtility.classproperty
48
+ def cluster_id(cls) -> int:
49
+ return 0x115FFC0F
50
+
51
+ @ChipUtility.classproperty
52
+ def attribute_id(cls) -> int:
53
+ return 0x00000013
54
+
55
+ @ChipUtility.classproperty
56
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
57
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
58
+
59
+ value: typing.Optional[bool] = None
60
+
61
+ @dataclass
62
+ class MusicSyncEffect(ClusterAttributeDescriptor):
63
+ @ChipUtility.classproperty
64
+ def cluster_id(cls) -> int:
65
+ return 0x115FFC0F
66
+
67
+ @ChipUtility.classproperty
68
+ def attribute_id(cls) -> int:
69
+ return 0x00000015
70
+
71
+ @ChipUtility.classproperty
72
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
73
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
74
+
75
+ value: typing.Optional[uint] = None
76
+
77
+ @dataclass
78
+ class MusicSyncSensitivity(ClusterAttributeDescriptor):
79
+ @ChipUtility.classproperty
80
+ def cluster_id(cls) -> int:
81
+ return 0x115FFC0F
82
+
83
+ @ChipUtility.classproperty
84
+ def attribute_id(cls) -> int:
85
+ return 0x00000016
86
+
87
+ @ChipUtility.classproperty
88
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
89
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
90
+
91
+ value: typing.Optional[uint] = None
92
+
93
+ @dataclass
94
+ class GeneratedCommandList(ClusterAttributeDescriptor):
95
+ @ChipUtility.classproperty
96
+ def cluster_id(cls) -> int:
97
+ return 0x115FFC0F
98
+
99
+ @ChipUtility.classproperty
100
+ def attribute_id(cls) -> int:
101
+ return 0x0000FFF8
102
+
103
+ @ChipUtility.classproperty
104
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
105
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
106
+
107
+ value: typing.List[uint] = field(default_factory=lambda: [])
108
+
109
+ @dataclass
110
+ class AcceptedCommandList(ClusterAttributeDescriptor):
111
+ @ChipUtility.classproperty
112
+ def cluster_id(cls) -> int:
113
+ return 0x115FFC0F
114
+
115
+ @ChipUtility.classproperty
116
+ def attribute_id(cls) -> int:
117
+ return 0x0000FFF9
118
+
119
+ @ChipUtility.classproperty
120
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
121
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
122
+
123
+ value: typing.List[uint] = field(default_factory=lambda: [])
124
+
125
+ @dataclass
126
+ class AttributeList(ClusterAttributeDescriptor):
127
+ @ChipUtility.classproperty
128
+ def cluster_id(cls) -> int:
129
+ return 0x115FFC0F
130
+
131
+ @ChipUtility.classproperty
132
+ def attribute_id(cls) -> int:
133
+ return 0x0000FFFB
134
+
135
+ @ChipUtility.classproperty
136
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
137
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
138
+
139
+ value: typing.List[uint] = field(default_factory=lambda: [])
140
+
141
+ @dataclass
142
+ class FeatureMap(ClusterAttributeDescriptor):
143
+ @ChipUtility.classproperty
144
+ def cluster_id(cls) -> int:
145
+ return 0x115FFC0F
146
+
147
+ @ChipUtility.classproperty
148
+ def attribute_id(cls) -> int:
149
+ return 0x0000FFFC
150
+
151
+ @ChipUtility.classproperty
152
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
153
+ return ClusterObjectFieldDescriptor(Type=uint)
154
+
155
+ value: uint = 0
156
+
157
+ @dataclass
158
+ class ClusterRevision(ClusterAttributeDescriptor):
159
+ @ChipUtility.classproperty
160
+ def cluster_id(cls) -> int:
161
+ return 0x115FFC0F
162
+
163
+ @ChipUtility.classproperty
164
+ def attribute_id(cls) -> int:
165
+ return 0x0000FFFD
166
+
167
+ @ChipUtility.classproperty
168
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
169
+ return ClusterObjectFieldDescriptor(Type=uint)
170
+
171
+ value: uint = 0
@@ -11,6 +11,7 @@ from .AmbientContextSensing import AmbientContextSensing
11
11
  from .ApplicationBasic import ApplicationBasic
12
12
  from .ApplicationLauncher import ApplicationLauncher
13
13
  from .AqaraAmbientSensingConfigurationCluster import AqaraAmbientSensingConfigurationCluster
14
+ from .AqaraLedStripT2Cluster import AqaraLedStripT2Cluster
14
15
  from .AqaraOccupantLocationCluster import AqaraOccupantLocationCluster
15
16
  from .AqaraRadarSensingUnionCluster import AqaraRadarSensingUnionCluster
16
17
  from .AudioOutput import AudioOutput
@@ -163,6 +164,7 @@ __all__ = [
163
164
  "ApplicationBasic",
164
165
  "ApplicationLauncher",
165
166
  "AqaraAmbientSensingConfigurationCluster",
167
+ "AqaraLedStripT2Cluster",
166
168
  "AqaraOccupantLocationCluster",
167
169
  "AqaraRadarSensingUnionCluster",
168
170
  "AudioOutput",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matter-python-client
3
- Version: 1.5.0a0.dev202610190305
3
+ Version: 1.5.1
4
4
  Summary: Python Client for the OHF Matter Server
5
5
  Author-email: Open Home Foundation <hello@openhomefoundation.io>
6
6
  License-Expression: Apache-2.0
@@ -141,9 +141,19 @@ Beyond the `python-matter-server` API, the client exposes commands the Matter.js
141
141
  play your audio; without it the server makes the offer's audio sections not send, so a browser-style
142
142
  `sendrecv` audio offer goes to the camera as `recvonly`. `camera_session_ended` and
143
143
  `camera_stream_evicted` events arrive as `CameraSessionEndedData` / `CameraStreamEvictedData`;
144
- `webrtc_callback` stays a dict. Errors 102 to 106 (`CameraStreamIncompatible`, ...) expose their
144
+ `webrtc_callback` stays a dict. `camera_session_ended` covers every end of a session opened with
145
+ `camera_start_stream` that the client did not ask for, the camera's own `End` included; its `cause` says why. Errors 102 to 106 (`CameraStreamIncompatible`, ...) expose their
145
146
  details as attributes, e.g. `err.reason` and `err.bound` on `CameraStreamIncompatible`
146
147
 
148
+ `camera_start_stream(..., client_session_key="...")` names the session with your own key (1 to 128
149
+ characters, unique among the connection's starting and open sessions). Every `webrtc_callback` and
150
+ `camera_session_ended` event of the session carries it as `client_session_key`, so a handler can
151
+ match events even when it runs before the awaited call returns. `camera_provide_ice_candidates(node_id,
152
+ endpoint_id, None, candidates, client_session_key=...)` and `camera_stop_stream(node_id, endpoint_id,
153
+ client_session_key=...)` take it in place of the session id, also while `camera_start_stream` is still
154
+ running: candidates are queued on the server and sent after the start's response, and the stop cancels
155
+ the start.
156
+
147
157
  The minimal `camera_start_stream` call is `node_id`, `endpoint_id`, `stream_usage` and your SDP
148
158
  offer: the server reuses or allocates the best stream the camera can serve that still fits what
149
159
  the offer can decode, and adds audio when it can. Pass `video` / `audio` hints only to set hard bounds. A
@@ -17,6 +17,7 @@ chip/clusters/cluster_defs/AmbientContextSensing.py
17
17
  chip/clusters/cluster_defs/ApplicationBasic.py
18
18
  chip/clusters/cluster_defs/ApplicationLauncher.py
19
19
  chip/clusters/cluster_defs/AqaraAmbientSensingConfigurationCluster.py
20
+ chip/clusters/cluster_defs/AqaraLedStripT2Cluster.py
20
21
  chip/clusters/cluster_defs/AqaraOccupantLocationCluster.py
21
22
  chip/clusters/cluster_defs/AqaraRadarSensingUnionCluster.py
22
23
  chip/clusters/cluster_defs/AudioOutput.py
@@ -31,6 +31,7 @@ from matter_server.common.models import (
31
31
  CameraCapabilities,
32
32
  CameraIceServer,
33
33
  CameraResolutionHint,
34
+ CameraResolutionTarget,
34
35
  CameraSessionEndedData,
35
36
  CameraSnapshotResult,
36
37
  CameraStartStreamResult,
@@ -116,6 +117,16 @@ NODE_SCOPED_CAMERA_EVENTS: Final = frozenset(
116
117
  # pylint: disable=too-many-public-methods,too-many-locals,too-many-branches
117
118
 
118
119
 
120
+ def _session_reference(webrtc_session_id: int | None, client_session_key: str | None) -> dict[str, Any]:
121
+ """Return the arguments naming a session; the server refuses both or neither with error 8."""
122
+ reference: dict[str, Any] = {}
123
+ if webrtc_session_id is not None:
124
+ reference["webrtc_session_id"] = webrtc_session_id
125
+ if client_session_key is not None:
126
+ reference["client_session_key"] = client_session_key
127
+ return reference
128
+
129
+
119
130
  def _command_name(command: ClusterCommand) -> str:
120
131
  """Return the wire name of a command: the name of its class."""
121
132
  return type(command).__name__
@@ -599,10 +610,20 @@ class MatterClient:
599
610
  node_type = NodeType.END_DEVICE
600
611
  elif network_type == NetworkType.WIFI:
601
612
  node_type = NodeType.END_DEVICE
613
+ # NetworkID is an SSID only on a Wi-Fi instance; Thread uses the binary Extended PAN ID
614
+ network_commissioning_features = node.get_attribute_value(
615
+ 0,
616
+ cluster=None,
617
+ attribute=Clusters.NetworkCommissioning.Attributes.FeatureMap,
618
+ )
619
+ network_id_is_ssid = network_type in (NetworkType.WIFI, NetworkType.UNKNOWN) and bool(
620
+ (network_commissioning_features or 0)
621
+ & Clusters.NetworkCommissioning.Bitmaps.Feature.kWiFiNetworkInterface
622
+ )
602
623
  # use lastNetworkID from NetworkCommissioning cluster as fallback to get the network name
603
624
  # this allows getting the SSID as the wifi diagnostics cluster only has the BSSID
604
625
  last_network_id: bytes | str | None
605
- if not network_name and (
626
+ if network_id_is_ssid and not network_name and (
606
627
  last_network_id := node.get_attribute_value(
607
628
  0,
608
629
  cluster=None,
@@ -616,7 +637,7 @@ class MatterClient:
616
637
  # last resort to get the (wifi) networkname;
617
638
  # enumerate networks on the NetworkCommissioning cluster
618
639
  networks: list[Clusters.NetworkCommissioning.Structs.NetworkInfoStruct]
619
- if not network_name and (
640
+ if network_id_is_ssid and not network_name and (
620
641
  networks := node.get_attribute_value(
621
642
  0,
622
643
  cluster=None,
@@ -1058,6 +1079,7 @@ class MatterClient:
1058
1079
  metadata_enabled: bool | None = None,
1059
1080
  allow_eviction: bool | None = None,
1060
1081
  talkback: bool | None = None,
1082
+ client_session_key: str | None = None,
1061
1083
  ) -> CameraStartStreamResult:
1062
1084
  """Open a WebRTC session, allocating or reusing the streams it needs.
1063
1085
 
@@ -1065,9 +1087,15 @@ class MatterClient:
1065
1087
  offer arrives as a ``webrtc_callback`` ``offer`` event. For ``video`` and ``audio``, ``None``
1066
1088
  lets the server decide, a hints dict sets hard requirements, and ``False`` leaves the track
1067
1089
  out. ``talkback=True`` (requires ``sdp``) forwards the offer unchanged so the camera can play
1068
- the caller's audio; otherwise the server makes the offer's audio sections not send. That only
1069
- asks the camera: it may still answer ``sendrecv``, so a caller that must not send audio keeps
1070
- the track off its audio sender. Arguments left ``None`` are not sent.
1090
+ the caller's audio; otherwise the server makes the offer's audio sections not send. A camera
1091
+ that answers ``sendrecv`` anyway gets its answer narrowed by the server to the directions the
1092
+ offer allows. Arguments left ``None`` are not sent.
1093
+
1094
+ ``client_session_key`` (1 to 128 characters, unique among this connection's starting and open
1095
+ sessions) is the caller's own name for the session. Every ``webrtc_callback`` and
1096
+ ``camera_session_ended`` event of the session carries it, so a handler can match events
1097
+ before this call returns. ``camera_provide_ice_candidates`` and ``camera_stop_stream`` accept
1098
+ it in place of the session id, also while this call is still running.
1071
1099
 
1072
1100
  Requires schema 14.
1073
1101
  """
@@ -1080,6 +1108,7 @@ class MatterClient:
1080
1108
  "metadata_enabled": metadata_enabled,
1081
1109
  "allow_eviction": allow_eviction,
1082
1110
  "talkback": talkback,
1111
+ "client_session_key": client_session_key,
1083
1112
  }
1084
1113
  data = await self.send_command(
1085
1114
  APICommand.CAMERA_START_STREAM,
@@ -1109,12 +1138,18 @@ class MatterClient:
1109
1138
  self,
1110
1139
  node_id: int,
1111
1140
  endpoint_id: int,
1112
- webrtc_session_id: int,
1141
+ webrtc_session_id: int | None,
1113
1142
  ice_candidates: Sequence[WebRTCIceCandidate | dict[str, Any]],
1143
+ *,
1144
+ client_session_key: str | None = None,
1114
1145
  ) -> None:
1115
- """Send one or more ICE candidates to an existing session.
1146
+ """Send one or more ICE candidates to a session.
1116
1147
 
1117
- A candidate from a ``webrtc_callback`` ``ice_candidates`` event can be passed unchanged.
1148
+ Name the session by ``webrtc_session_id`` or by ``client_session_key`` (pass ``None`` for the
1149
+ id then), not both. With the key of a session whose ``camera_start_stream`` is still running,
1150
+ the server queues the candidates and this call returns once they were sent, after that
1151
+ response. A candidate from a ``webrtc_callback`` ``ice_candidates`` event can be passed
1152
+ unchanged.
1118
1153
 
1119
1154
  Requires schema 14.
1120
1155
  """
@@ -1123,7 +1158,7 @@ class MatterClient:
1123
1158
  require_schema=14,
1124
1159
  node_id=node_id,
1125
1160
  endpoint_id=endpoint_id,
1126
- webrtc_session_id=webrtc_session_id,
1161
+ **_session_reference(webrtc_session_id, client_session_key),
1127
1162
  ice_candidates=[
1128
1163
  asdict(candidate) if isinstance(candidate, WebRTCIceCandidate) else candidate
1129
1164
  for candidate in ice_candidates
@@ -1131,10 +1166,19 @@ class MatterClient:
1131
1166
  )
1132
1167
 
1133
1168
  async def camera_stop_stream(
1134
- self, node_id: int, endpoint_id: int, webrtc_session_id: int
1169
+ self,
1170
+ node_id: int,
1171
+ endpoint_id: int,
1172
+ webrtc_session_id: int | None = None,
1173
+ *,
1174
+ client_session_key: str | None = None,
1135
1175
  ) -> CameraStopStreamResult:
1136
1176
  """End a WebRTC session; the stream allocation is kept.
1137
1177
 
1178
+ Name the session by ``webrtc_session_id`` or by ``client_session_key``, not both. The key of a
1179
+ session whose ``camera_start_stream`` is still running cancels that start; ``ended`` then says
1180
+ whether the camera had opened a session that the server ended.
1181
+
1138
1182
  Requires schema 14.
1139
1183
  """
1140
1184
  data = await self.send_command(
@@ -1142,7 +1186,7 @@ class MatterClient:
1142
1186
  require_schema=14,
1143
1187
  node_id=node_id,
1144
1188
  endpoint_id=endpoint_id,
1145
- webrtc_session_id=webrtc_session_id,
1189
+ **_session_reference(webrtc_session_id, client_session_key),
1146
1190
  )
1147
1191
  return dataclass_from_dict(CameraStopStreamResult, data)
1148
1192
 
@@ -1154,15 +1198,22 @@ class MatterClient:
1154
1198
  codec: str | None = None,
1155
1199
  watermark_enabled: bool | None = None,
1156
1200
  osd_enabled: bool | None = None,
1201
+ resolution: CameraResolutionTarget | None = None,
1157
1202
  ) -> CameraSnapshotResult:
1158
1203
  """Capture one image. An argument left ``None`` is not sent.
1159
1204
 
1205
+ ``resolution`` is the size you want, such as a thumbnail's: ``{"width": 320}``,
1206
+ ``{"height": 240}`` or both. The server uses the smallest capability that reaches it
1207
+ (within ``max_resolution``) and asks the camera to scale to it. The camera may return
1208
+ a larger frame, so check the result's ``resolution``.
1209
+
1160
1210
  The snapshot stream stays allocated; free it with ``camera_release_stream``.
1161
1211
 
1162
1212
  Requires schema 14.
1163
1213
  """
1164
1214
  optional = {
1165
1215
  "max_resolution": max_resolution,
1216
+ "resolution": resolution,
1166
1217
  "codec": codec,
1167
1218
  "watermark_enabled": watermark_enabled,
1168
1219
  "osd_enabled": osd_enabled,
@@ -1,6 +1,7 @@
1
1
  """Custom (vendor-specific) cluster re-exports (auto-generated, DO NOT edit)."""
2
2
 
3
3
  from chip.clusters.cluster_defs.AqaraAmbientSensingConfigurationCluster import AqaraAmbientSensingConfigurationCluster
4
+ from chip.clusters.cluster_defs.AqaraLedStripT2Cluster import AqaraLedStripT2Cluster
4
5
  from chip.clusters.cluster_defs.AqaraOccupantLocationCluster import AqaraOccupantLocationCluster
5
6
  from chip.clusters.cluster_defs.AqaraRadarSensingUnionCluster import AqaraRadarSensingUnionCluster
6
7
  from chip.clusters.cluster_defs.DraftElectricalMeasurementCluster import DraftElectricalMeasurementCluster
@@ -16,6 +17,7 @@ from chip.clusters.cluster_defs.WagoCluster import WagoCluster
16
17
 
17
18
  ALL_CUSTOM_CLUSTERS: dict = {
18
19
  AqaraAmbientSensingConfigurationCluster.id: AqaraAmbientSensingConfigurationCluster,
20
+ AqaraLedStripT2Cluster.id: AqaraLedStripT2Cluster,
19
21
  AqaraOccupantLocationCluster.id: AqaraOccupantLocationCluster,
20
22
  AqaraRadarSensingUnionCluster.id: AqaraRadarSensingUnionCluster,
21
23
  DraftElectricalMeasurementCluster.id: DraftElectricalMeasurementCluster,
@@ -33,6 +35,7 @@ ALL_CUSTOM_CLUSTERS: dict = {
33
35
  __all__ = [
34
36
  "ALL_CUSTOM_CLUSTERS",
35
37
  "AqaraAmbientSensingConfigurationCluster",
38
+ "AqaraLedStripT2Cluster",
36
39
  "AqaraOccupantLocationCluster",
37
40
  "AqaraRadarSensingUnionCluster",
38
41
  "DraftElectricalMeasurementCluster",
@@ -163,6 +163,7 @@ class WebRTCCallbackData:
163
163
  - "answer": {"sdp": str}
164
164
  - "ice_candidates": {"ice_candidates": list[WebRTCIceCandidate]}
165
165
  - "end": {"reason": int}
166
+ `client_session_key` is the key the session was started with, absent when it had none.
166
167
  """
167
168
 
168
169
  event_type: str
@@ -171,6 +172,7 @@ class WebRTCCallbackData:
171
172
  endpoint_id: int
172
173
  fabric_index: int
173
174
  data: dict | None
175
+ client_session_key: str | None = None
174
176
 
175
177
 
176
178
  @dataclass
@@ -458,6 +460,13 @@ class CameraResolutionHint(TypedDict):
458
460
  height: int
459
461
 
460
462
 
463
+ class CameraResolutionTarget(TypedDict, total=False):
464
+ """The size `camera_snapshot` should aim for. State `width`, `height` or both; at least one."""
465
+
466
+ width: int
467
+ height: int
468
+
469
+
461
470
  class CameraVideoHints(TypedDict, total=False):
462
471
  """Video hints for `camera_start_stream`; every key set is a hard requirement."""
463
472
 
@@ -775,11 +784,19 @@ class CameraSnapshotResult:
775
784
 
776
785
  @dataclass
777
786
  class CameraSessionEndedData:
778
- """Payload of the `camera_session_ended` event."""
787
+ """Payload of the `camera_session_ended` event.
788
+
789
+ `cause` is `peer`, `other_connection`, `camera_restarted`, `camera_dropped` or `node_removed`.
790
+ `reason` is the camera's WebRTCEndReasonEnum value, sent with `cause` `peer` when the camera stated one.
791
+ `client_session_key` is the key the session was started with, absent when it had none.
792
+ """
779
793
 
780
794
  node_id: int
781
795
  endpoint_id: int
782
796
  webrtc_session_id: int
797
+ cause: str
798
+ reason: int | None = None
799
+ client_session_key: str | None = None
783
800
 
784
801
 
785
802
  @dataclass
@@ -25,7 +25,7 @@ license = "Apache-2.0"
25
25
  name = "matter-python-client"
26
26
  readme = "README.md"
27
27
  requires-python = ">=3.12"
28
- version = "1.5.0a0.dev202610190305"
28
+ version = "1.5.1"
29
29
 
30
30
  [project.urls]
31
31
  Homepage = "https://github.com/matter-js/matterjs-server"
@@ -393,6 +393,23 @@ async def test_snapshot_sends_stated_arguments_and_parses_the_result() -> None:
393
393
  )
394
394
 
395
395
 
396
+ async def test_snapshot_sends_a_width_only_resolution_target() -> None:
397
+ client = _bare_client(
398
+ {
399
+ "data": "",
400
+ "codec": "JPEG",
401
+ "resolution": _RESOLUTION,
402
+ "degraded": False,
403
+ "stream_id": 4,
404
+ "provenance": "allocated",
405
+ }
406
+ )
407
+ await client.camera_snapshot(5, 1, resolution={"width": 320})
408
+ _, kwargs = _sent(client)
409
+ assert kwargs["resolution"] == {"width": 320}
410
+ assert "max_resolution" not in kwargs
411
+
412
+
396
413
  async def test_snapshot_sends_overlay_flags_including_false() -> None:
397
414
  client = _bare_client(
398
415
  {
@@ -419,6 +436,35 @@ async def test_stop_stream_parses_ended() -> None:
419
436
  assert kwargs["webrtc_session_id"] == 9
420
437
 
421
438
 
439
+ async def test_stop_stream_by_key_sends_the_key_and_no_id() -> None:
440
+ client = _bare_client({"ended": True})
441
+ assert await client.camera_stop_stream(5, 1, client_session_key="k1") == CameraStopStreamResult(ended=True)
442
+ _, kwargs = _sent(client)
443
+ assert kwargs["client_session_key"] == "k1"
444
+ assert "webrtc_session_id" not in kwargs
445
+
446
+
447
+ async def test_provide_ice_candidates_by_key_sends_the_key_and_no_id() -> None:
448
+ client = _bare_client()
449
+ await client.camera_provide_ice_candidates(5, 1, None, [{"candidate": "c"}], client_session_key="k1")
450
+ _, kwargs = _sent(client)
451
+ assert kwargs["client_session_key"] == "k1"
452
+ assert "webrtc_session_id" not in kwargs
453
+ assert kwargs["ice_candidates"] == [{"candidate": "c"}]
454
+
455
+
456
+ async def test_start_stream_sends_the_key_only_when_given() -> None:
457
+ client = _bare_client(
458
+ {"webrtc_session_id": 9, "mode": "provide_offer", "video": None, "audio": None, "talkback": False}
459
+ )
460
+ await client.camera_start_stream(5, 1, "LiveView", client_session_key="k1")
461
+ _, kwargs = _sent(client)
462
+ assert kwargs["client_session_key"] == "k1"
463
+ await client.camera_start_stream(5, 1, "LiveView")
464
+ _, kwargs = _sent(client)
465
+ assert "client_session_key" not in kwargs
466
+
467
+
422
468
  async def test_provide_answer_sends_session_and_sdp() -> None:
423
469
  client = _bare_client()
424
470
  await client.camera_provide_answer(5, 1, 9, "v=0")