diff --git a/app/src/full/java/io/homeassistant/companion/android/matter/MatterCommissioningService.kt b/app/src/full/java/io/homeassistant/companion/android/matter/MatterCommissioningService.kt index 33cdcc0e8..65eebcd41 100644 --- a/app/src/full/java/io/homeassistant/companion/android/matter/MatterCommissioningService.kt +++ b/app/src/full/java/io/homeassistant/companion/android/matter/MatterCommissioningService.kt @@ -58,7 +58,7 @@ class MatterCommissioningService : Service(), CommissioningService.Callback { commissioningServiceDelegate.sendCommissioningError(CommissioningError.OTHER) return@launch } - val result = matterManager.commissionOnNetworkDevice(metadata.passcode, serverId) + val result = matterManager.commissionOnNetworkDevice(metadata.passcode, metadata.networkLocation.formattedIpAddress, serverId) Log.d(TAG, "Server commissioning was ${if (result?.success == true) "successful" else "not successful (${result?.errorCode})"}") if (result?.success == true) { diff --git a/app/src/full/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt b/app/src/full/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt index aa221818e..7e47d8b1e 100644 --- a/app/src/full/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt +++ b/app/src/full/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt @@ -63,9 +63,9 @@ class MatterManagerImpl @Inject constructor( } } - override suspend fun commissionOnNetworkDevice(pin: Long, serverId: Int): MatterCommissionResponse? { + override suspend fun commissionOnNetworkDevice(pin: Long, ip: String, serverId: Int): MatterCommissionResponse? { return try { - serverManager.webSocketRepository(serverId).commissionMatterDeviceOnNetwork(pin) + serverManager.webSocketRepository(serverId).commissionMatterDeviceOnNetwork(pin, ip) } catch (e: Exception) { Log.e(TAG, "Error while executing server commissioning request", e) null diff --git a/app/src/main/java/io/homeassistant/companion/android/matter/MatterManager.kt b/app/src/main/java/io/homeassistant/companion/android/matter/MatterManager.kt index cc8ae49b3..6eb9d2256 100644 --- a/app/src/main/java/io/homeassistant/companion/android/matter/MatterManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/matter/MatterManager.kt @@ -42,5 +42,5 @@ interface MatterManager { * Send a request to the server to commission an "on network" Matter device * @return [MatterCommissionResponse], or `null` if it wasn't possible to complete the request */ - suspend fun commissionOnNetworkDevice(pin: Long, serverId: Int): MatterCommissionResponse? + suspend fun commissionOnNetworkDevice(pin: Long, ip: String, serverId: Int): MatterCommissionResponse? } diff --git a/app/src/minimal/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt b/app/src/minimal/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt index ac7f60e8c..97a406d19 100644 --- a/app/src/minimal/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt +++ b/app/src/minimal/java/io/homeassistant/companion/android/matter/MatterManagerImpl.kt @@ -28,5 +28,5 @@ class MatterManagerImpl @Inject constructor() : MatterManager { override suspend fun commissionDevice(code: String, serverId: Int): MatterCommissionResponse? = null - override suspend fun commissionOnNetworkDevice(pin: Long, serverId: Int): MatterCommissionResponse? = null + override suspend fun commissionOnNetworkDevice(pin: Long, ip: String, serverId: Int): MatterCommissionResponse? = null } diff --git a/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/WebSocketRepository.kt b/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/WebSocketRepository.kt index 2fd3e6590..b7ed40a29 100644 --- a/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/WebSocketRepository.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/WebSocketRepository.kt @@ -60,7 +60,7 @@ interface WebSocketRepository { * @return [MatterCommissionResponse] detailing the server's response, or `null` if the server * did not return a response. */ - suspend fun commissionMatterDeviceOnNetwork(pin: Long): MatterCommissionResponse? + suspend fun commissionMatterDeviceOnNetwork(pin: Long, ip: String): MatterCommissionResponse? /** * Return a list of all Thread datasets known to the server. diff --git a/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/WebSocketRepositoryImpl.kt b/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/WebSocketRepositoryImpl.kt index 6529d3738..d417c124b 100644 --- a/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/WebSocketRepositoryImpl.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/WebSocketRepositoryImpl.kt @@ -473,13 +473,14 @@ class WebSocketRepositoryImpl @AssistedInject constructor( } } - override suspend fun commissionMatterDeviceOnNetwork(pin: Long): MatterCommissionResponse? { + override suspend fun commissionMatterDeviceOnNetwork(pin: Long, ip: String): MatterCommissionResponse? { + val data = mapOf( + "type" to "matter/commission_on_network", + "pin" to pin + ) val response = sendMessage( WebSocketRequest( - message = mapOf( - "type" to "matter/commission_on_network", - "pin" to pin - ), + message = if (server?.version?.isAtLeast(2024, 1) == true) data.plus("ip_addr" to ip) else data, timeout = 120000L // Matter commissioning takes at least 60 seconds + interview ) )