Skip to content

Commit

Permalink
Send IP address of Matter device for on network commissioning (#4069)
Browse files Browse the repository at this point in the history
* [WIP] Send IP of device during commissioning

* Add version check for IP address in commission_on_network

* Update minimal
  • Loading branch information
jpelgrom authored Jan 4, 2024
1 parent 1162a82 commit f1fcabb
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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?
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
)
Expand Down

0 comments on commit f1fcabb

Please sign in to comment.