class Matter::Cluster::AdministratorCommissioningCluster

Overview

Administrator Commissioning Cluster (0x003C)

Provides commands to open and close commissioning windows for device onboarding. Administrators can open enhanced windows (with custom PAKE verifier) or basic windows (with default passcode) to allow new commissioners to join the fabric.

This cluster provides functionality for opening commissioning windows to allow new administrators to commission the device. Supports both enhanced commissioning (with custom PAKE verifier) and basic commissioning (with default passcode).

Matter Core Spec ยง11.19 - Administrator Commissioning Cluster

Defined in:

matter/cluster/administrator_commissioning_cluster.cr

Constant Summary

ATTR_ADMIN_FABRIC_INDEX = 1_u32
ATTR_ADMIN_VENDOR_ID = 2_u32
ATTR_WINDOW_STATUS = 0_u32
CLUSTER_ID = 60_u32
CMD_OPEN_BASIC_COMMISSIONING_WINDOW = 1_u32
CMD_OPEN_COMMISSIONING_WINDOW = 0_u32
CMD_REVOKE_COMMISSIONING = 2_u32
CRYPTO_GROUP_SIZE_BYTES = 32
CRYPTO_PUBLIC_KEY_SIZE_BYTES = 65
Log = ::Log.for("matter.cluster.administrator_commissioning")
MAXIMUM_COMMISSIONING_TIMEOUT = 65535_u16
MINIMUM_COMMISSIONING_TIMEOUT = 180_u16
PAKE_PASSCODE_VERIFIER_LENGTH = 97
PAKE_SALT_MAX_LENGTH = 32
PAKE_SALT_MIN_LENGTH = 16
PBKDF2_MAX_ITERATIONS = 100000
PBKDF2_MIN_ITERATIONS = 1000
STANDARD_COMMISSIONING_TIMEOUT = 900_u16

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class Matter::Cluster::Base

attributes : Array(AttributeMetadata) attributes, cluster_id : DataType::ClusterId cluster_id, cluster_id=(cluster_id : DataType::ClusterId) cluster_id=, commands : Array(CommandMetadata) commands, data_version : UInt32 data_version, data_version=(data_version : UInt32) data_version=, endpoint_id : DataType::EndpointNumber endpoint_id, endpoint_id=(endpoint_id : DataType::EndpointNumber) endpoint_id=, events : Array(EventMetadata) events, get_attribute_metadata(attribute_id : UInt32) : AttributeMetadata | Nil get_attribute_metadata, get_command_metadata(command_id : UInt32) : CommandMetadata | Nil get_command_metadata, invoke_command(command_id : UInt32, fields : Bytes = Bytes.new(0)) : InteractionModel::Status | Bytes invoke_command, name : String name, read_attribute(attribute_id : UInt32) : InteractionModel::Status | Bytes read_attribute, write_attribute(attribute_id : UInt32, value : Bytes) : InteractionModel::Status write_attribute

Constructor methods inherited from class Matter::Cluster::Base

new(endpoint_id : DataType::EndpointNumber, cluster_id : DataType::ClusterId) new

Constructor Detail

def self.new(endpoint_id : DataType::EndpointNumber = DataType::EndpointNumber.new(0_u16), minimum_timeout : UInt16 = MINIMUM_COMMISSIONING_TIMEOUT, maximum_timeout : UInt16 = STANDARD_COMMISSIONING_TIMEOUT) #

[View source]

Class Method Detail

def self.cluster_id #

Administrator Commissioning Cluster (0x003C)

Provides commands to open and close commissioning windows for device onboarding. Administrators can open enhanced windows (with custom PAKE verifier) or basic windows (with default passcode) to allow new commissioners to join the fabric.

This cluster provides functionality for opening commissioning windows to allow new administrators to commission the device. Supports both enhanced commissioning (with custom PAKE verifier) and basic commissioning (with default passcode).

Matter Core Spec ยง11.19 - Administrator Commissioning Cluster


[View source]

Instance Method Detail

def addresses : Array(String) #

[View source]
def addresses=(addresses : Array(String)) #

[View source]
def admin_fabric_index : UInt8 | Nil #

AdminFabricIndex attribute (0x0001) - fabric that opened the window


[View source]
def admin_fabric_index=(admin_fabric_index : UInt8 | Nil) #

AdminFabricIndex attribute (0x0001) - fabric that opened the window


[View source]
def admin_vendor_id : UInt16 | Nil #

AdminVendorId attribute (0x0002) - vendor ID of opening administrator


[View source]
def admin_vendor_id=(admin_vendor_id : UInt16 | Nil) #

AdminVendorId attribute (0x0002) - vendor ID of opening administrator


[View source]
def attributes : Array(AttributeMetadata) #
Description copied from class Matter::Cluster::Base

Get all attribute metadata


[View source]
def basic_window_open? : Bool #

Check if basic window is open


[View source]
def close : Nil #

Close and cleanup (for testing/shutdown)


[View source]
def close_window : Nil #

Close commissioning window (backward compatibility)


[View source]
def commands : Array(CommandMetadata) #
Description copied from class Matter::Cluster::Base

Get all command metadata


[View source]
def configure_timeout_bounds(minimum : UInt16, maximum : UInt16) : Nil #

Configure timeout bounds (for testing)


[View source]
def device_name : String #

[View source]
def device_name=(device_name : String) #

[View source]
def device_type : UInt32 #

[View source]
def device_type=(device_type : UInt32) #

[View source]
def discriminator : UInt16 | Nil #

[View source]
def discriminator=(discriminator : UInt16 | Nil) #

[View source]
def enhanced_window_open? : Bool #

Check if enhanced window is open


[View source]
def is_window_expired? : Bool #

Check if window is expired


[View source]
def is_window_open? : Bool #

Check if any commissioning window is open (backward compatibility)


[View source]
def iterations : UInt32 | Nil #

[View source]
def iterations=(iterations : UInt32 | Nil) #

[View source]
def name : String #
Description copied from class Matter::Cluster::Base

Get cluster name


[View source]
def on_close_failsafe : Proc(Nil) | Nil #

[View source]
def on_close_failsafe=(on_close_failsafe : Proc(Nil) | Nil) #

[View source]
def on_configure_pase_pin : Proc(UInt32, UInt32, Bytes, Nil) | Nil #

[View source]
def on_configure_pase_pin=(on_configure_pase_pin : Proc(UInt32, UInt32, Bytes, Nil) | Nil) #

[View source]
def on_configure_pase_server : Proc(Bytes, UInt32, Bytes, Nil) | Nil #

Callbacks for external component integration


[View source]
def on_configure_pase_server=(on_configure_pase_server : Proc(Bytes, UInt32, Bytes, Nil) | Nil) #

Callbacks for external component integration


[View source]
def on_open_basic_commissioning_window : Proc(UInt16, UInt8, UInt16, StatusCode) | Nil #

[View source]
def on_open_basic_commissioning_window=(on_open_basic_commissioning_window : Proc(UInt16, UInt8, UInt16, StatusCode) | Nil) #

[View source]
def on_open_commissioning_window : Proc(UInt16, Bytes, UInt16, Bytes, UInt32, UInt8, UInt16, StatusCode) | Nil #

Backward compatibility callbacks from cluster/ version


[View source]
def on_open_commissioning_window=(on_open_commissioning_window : Proc(UInt16, Bytes, UInt16, Bytes, UInt32, UInt8, UInt16, StatusCode) | Nil) #

Backward compatibility callbacks from cluster/ version


[View source]
def on_revoke_commissioning : Proc(StatusCode) | Nil #

[View source]
def on_revoke_commissioning=(on_revoke_commissioning : Proc(StatusCode) | Nil) #

[View source]
def on_stop_pase_server : Proc(Nil) | Nil #

[View source]
def on_stop_pase_server=(on_stop_pase_server : Proc(Nil) | Nil) #

[View source]
def open_basic_commissioning_window(request : OpenBasicCommissioningWindowRequest, session_fabric_index : UInt8 | Nil, session_vendor_id : UInt16 | Nil) : Nil #

Handle OpenBasicCommissioningWindow command (Basic)

Opens a basic commissioning window with device's default passcode. PBKDF2 parameters are auto-generated (iterations=1000, salt=random).

@param request OpenBasicCommissioningWindow request @param session_fabric_index Fabric index of requesting session @return nil on success, raises exception on error


[View source]
def open_basic_window(timeout_seconds : UInt16, fabric_index : UInt8, vendor_id : UInt16) : Nil #

Open basic commissioning window


[View source]
def open_commissioning_window(request : OpenCommissioningWindowRequest, session_fabric_index : UInt8 | Nil, session_vendor_id : UInt16 | Nil) : Nil #

Handle OpenCommissioningWindow command (Enhanced)

Opens an enhanced commissioning window with custom PAKE verifier. The verifier is pre-computed by the administrator from an ephemeral passcode.

@param request OpenCommissioningWindow request @param session_fabric_index Fabric index of requesting session @return nil on success, raises exception on error


[View source]
def open_enhanced_window(timeout_seconds : UInt16, fabric_index : UInt8, vendor_id : UInt16) : Nil #

Open enhanced commissioning window (with PAKE)


[View source]
def pake_verifier : Bytes | Nil #

PAKE parameters (for enhanced commissioning)


[View source]
def pake_verifier=(pake_verifier : Bytes | Nil) #

PAKE parameters (for enhanced commissioning)


[View source]
def product_id : UInt16 #

[View source]
def product_id=(product_id : UInt16) #

[View source]
def read_attribute(attribute_id : UInt32) : InteractionModel::Status | Bytes #
Description copied from class Matter::Cluster::Base

Read an attribute value


[View source]
def revoke_commissioning : Nil #

Handle RevokeCommissioning command

Closes any open commissioning window and stops accepting new PASE sessions.

@return nil on success, raises exception if no window open


[View source]
def salt : Bytes | Nil #

[View source]
def salt=(salt : Bytes | Nil) #

[View source]
def session_fabric_index : UInt8 | Nil #

Session context (set by the session before invoking commands)


[View source]
def session_fabric_index=(session_fabric_index : UInt8 | Nil) #

Session context (set by the session before invoking commands)


[View source]
def session_vendor_id : UInt16 | Nil #

[View source]
def session_vendor_id=(session_vendor_id : UInt16 | Nil) #

[View source]
def time_remaining : Time::Span | Nil #

Get time remaining on commissioning window (for testing)


[View source]
def vendor_id : UInt16 #

[View source]
def vendor_id=(vendor_id : UInt16) #

[View source]
def window_open? : Bool #

Check if commissioning window is open


[View source]
def window_status : CommissioningWindowStatus #

WindowStatus attribute (0x0000) - current commissioning window state


[View source]
def window_status=(window_status : CommissioningWindowStatus) #

WindowStatus attribute (0x0000) - current commissioning window state


[View source]
def window_timeout : Time | Nil #

[View source]
def window_timeout=(window_timeout : Time | Nil) #

[View source]
def write_attribute(attribute_id : UInt32, value : Bytes) : InteractionModel::Status #
Description copied from class Matter::Cluster::Base

Write an attribute value


[View source]