Skip to content

Commit e0fef53

Browse files
committed
Make provisioning generic, using device API instead of battery one
1 parent 673082f commit e0fef53

3 files changed

Lines changed: 33 additions & 35 deletions

File tree

ORLib/src/main/java/io/openremote/orlib/service/ESPProvisionProvider.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,9 @@ import android.util.Log
1313
import androidx.annotation.VisibleForTesting
1414
import androidx.core.app.ActivityCompat
1515
import io.openremote.orlib.R
16-
import io.openremote.orlib.service.BleProvider.BleCallback
17-
import io.openremote.orlib.service.BleProvider.Companion.BLUETOOTH_PERMISSION_REQUEST_CODE
18-
import io.openremote.orlib.service.BleProvider.Companion.ENABLE_BLUETOOTH_REQUEST_CODE
19-
import io.openremote.orlib.service.espprovision.BatteryProvision
2016
import io.openremote.orlib.service.espprovision.CallbackChannel
2117
import io.openremote.orlib.service.espprovision.DeviceConnection
18+
import io.openremote.orlib.service.espprovision.DeviceProvision
2219
import io.openremote.orlib.service.espprovision.DeviceRegistry
2320
import io.openremote.orlib.service.espprovision.WifiProvisioner
2421
import kotlinx.coroutines.CoroutineScope
@@ -273,9 +270,9 @@ class ESPProvisionProvider(val context: Context, val apiURL: URL = URL("http://l
273270
// OR Configuration
274271

275272
fun provisionDevice(userToken: String) {
276-
val batteryProvision = BatteryProvision(deviceConnection, deviceRegistry.callbackChannel, apiURL)
273+
val deviceProvision = DeviceProvision(deviceConnection, deviceRegistry.callbackChannel, apiURL)
277274
CoroutineScope(Dispatchers.IO).launch {
278-
batteryProvision.provision(userToken)
275+
deviceProvision.provision(userToken)
279276
}
280277
}
281278

ORLib/src/main/java/io/openremote/orlib/service/espprovision/BatteryProvision.kt renamed to ORLib/src/main/java/io/openremote/orlib/service/espprovision/DeviceProvision.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ import java.util.Locale
1414
import kotlin.coroutines.resume
1515
import kotlin.coroutines.suspendCoroutine
1616

17-
class BatteryProvision(var deviceConnection: DeviceConnection?, var callbackChannel: CallbackChannel?, var apiURL: URL) {
18-
var batteryProvisionAPI: BatteryProvisionAPI
17+
class DeviceProvision(var deviceConnection: DeviceConnection?, var callbackChannel: CallbackChannel?, var apiURL: URL) {
18+
var deviceProvisionAPI: DeviceProvisionAPI
1919

2020
var backendConnectionTimeoutMillis = 60_000
2121

2222
init {
23-
batteryProvisionAPI = BatteryProvisionAPIREST(apiURL)
23+
deviceProvisionAPI = DeviceProvisionAPIREST(apiURL)
2424
}
2525

2626
suspend fun provision(userToken: String) {
@@ -34,7 +34,7 @@ class BatteryProvision(var deviceConnection: DeviceConnection?, var callbackChan
3434

3535
val password = generatePassword()
3636

37-
val assetId = batteryProvisionAPI.provision(deviceInfo.deviceId, password, userToken)
37+
val assetId = deviceProvisionAPI.provision(deviceInfo.modelName, deviceInfo.deviceId, password, userToken)
3838
val userName = deviceInfo.deviceId.lowercase(Locale("en"))
3939

4040
deviceConnection?.sendOpenRemoteConfig(
@@ -63,8 +63,8 @@ class BatteryProvision(var deviceConnection: DeviceConnection?, var callbackChan
6363
sendProvisionDeviceStatus(true)
6464
} catch (e: ESPProviderException) {
6565
sendProvisionDeviceStatus(false, e.errorCode, e.errorMessage)
66-
} catch (e: BatteryProvisionAPIError) {
67-
val (errorCode, errorMessage) = mapBatteryProvisionAPIError(e)
66+
} catch (e: DeviceProvisionAPIError) {
67+
val (errorCode, errorMessage) = mapDeviceProvisionAPIError(e)
6868
sendProvisionDeviceStatus(false, errorCode, errorMessage)
6969
}
7070
}
@@ -85,16 +85,16 @@ class BatteryProvision(var deviceConnection: DeviceConnection?, var callbackChan
8585
}
8686
}
8787

88-
private fun mapBatteryProvisionAPIError(error: BatteryProvisionAPIError): Pair<ESPProviderErrorCode, String?> {
88+
private fun mapDeviceProvisionAPIError(error: DeviceProvisionAPIError): Pair<ESPProviderErrorCode, String?> {
8989
return when (error) {
90-
is BatteryProvisionAPIError.BusinessError,
91-
is BatteryProvisionAPIError.UnknownError -> ESPProviderErrorCode.GENERIC_ERROR to null
90+
is DeviceProvisionAPIError.BusinessError,
91+
is DeviceProvisionAPIError.UnknownError -> ESPProviderErrorCode.GENERIC_ERROR to null
9292

93-
is BatteryProvisionAPIError.GenericError -> ESPProviderErrorCode.GENERIC_ERROR to error.error.localizedMessage
93+
is DeviceProvisionAPIError.GenericError -> ESPProviderErrorCode.GENERIC_ERROR to error.error.localizedMessage
9494

95-
is BatteryProvisionAPIError.Unauthorized -> ESPProviderErrorCode.SECURITY_ERROR to null
95+
is DeviceProvisionAPIError.Unauthorized -> ESPProviderErrorCode.SECURITY_ERROR to null
9696

97-
is BatteryProvisionAPIError.CommunicationError -> ESPProviderErrorCode.COMMUNICATION_ERROR to error.message
97+
is DeviceProvisionAPIError.CommunicationError -> ESPProviderErrorCode.COMMUNICATION_ERROR to error.message
9898
}
9999
}
100100

ORLib/src/main/java/io/openremote/orlib/service/espprovision/BatteryProvisionAPI.kt renamed to ORLib/src/main/java/io/openremote/orlib/service/espprovision/DeviceProvisionAPI.kt

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@ import java.io.OutputStreamWriter
1212
import java.net.HttpURLConnection
1313
import java.net.URL
1414

15-
interface BatteryProvisionAPI {
16-
suspend fun provision(deviceId: String, password: String, token: String): String
15+
interface DeviceProvisionAPI {
16+
suspend fun provision(modelName: String, deviceId: String, password: String, token: String): String
1717
}
1818

19-
class BatteryProvisionAPIREST(private val apiURL: URL) : BatteryProvisionAPI {
19+
class DeviceProvisionAPIREST(private val apiURL: URL) : DeviceProvisionAPI {
2020

2121
companion object {
22-
private const val TAG = "BatteryProvisionAPIREST"
22+
private const val TAG = "DeviceProvisionAPIREST"
2323
}
2424

25-
override suspend fun provision(deviceId: String, password: String, token: String): String = withContext(Dispatchers.IO) {
25+
override suspend fun provision(modelName: String, deviceId: String, password: String, token: String): String = withContext(Dispatchers.IO) {
2626
Log.d(ESPProvisionProvider.TAG, "apiURL $apiURL")
2727
val uri = Uri.parse(apiURL.toString()).buildUpon()
2828
.appendPath("rest")
29-
.appendPath("battery")
29+
.appendPath("device")
3030
.build()
3131

3232
val url = URL(uri.toString())
@@ -38,6 +38,7 @@ class BatteryProvisionAPIREST(private val apiURL: URL) : BatteryProvisionAPI {
3838
connection.doOutput = true
3939

4040
val requestBody = JSONObject().apply {
41+
put("modelName", modelName)
4142
put("deviceId", deviceId)
4243
put("password", password)
4344
}
@@ -57,28 +58,28 @@ class BatteryProvisionAPIREST(private val apiURL: URL) : BatteryProvisionAPI {
5758
Log.d(ESPProvisionProvider.TAG, "Response code $responseCode")
5859
Log.d(ESPProvisionProvider.TAG, "Response text $responseText")
5960
when (responseCode) {
60-
401 -> throw BatteryProvisionAPIError.Unauthorized
61-
409 -> throw BatteryProvisionAPIError.BusinessError
62-
else -> throw BatteryProvisionAPIError.UnknownError
61+
401 -> throw DeviceProvisionAPIError.Unauthorized
62+
409 -> throw DeviceProvisionAPIError.BusinessError
63+
else -> throw DeviceProvisionAPIError.UnknownError
6364
}
6465
}
6566

6667
val json = JSONObject(responseText)
6768
return@withContext json.getString("assetId")
68-
} catch (e: BatteryProvisionAPIError) {
69+
} catch (e: DeviceProvisionAPIError) {
6970
throw e
7071
} catch (e: Exception) {
71-
throw BatteryProvisionAPIError.GenericError(e)
72+
throw DeviceProvisionAPIError.GenericError(e)
7273
} finally {
7374
connection.disconnect()
7475
}
7576
}
7677
}
7778

78-
sealed class BatteryProvisionAPIError(message: String? = null, cause: Throwable? = null) : Exception(message, cause) {
79-
object Unauthorized : BatteryProvisionAPIError("Unauthorized")
80-
data class CommunicationError(val reason: String) : BatteryProvisionAPIError(reason)
81-
object BusinessError : BatteryProvisionAPIError("Business logic error")
82-
data class GenericError(val error: Throwable) : BatteryProvisionAPIError(error.message, error)
83-
object UnknownError : BatteryProvisionAPIError("Unknown error")
79+
sealed class DeviceProvisionAPIError(message: String? = null, cause: Throwable? = null) : Exception(message, cause) {
80+
object Unauthorized : DeviceProvisionAPIError("Unauthorized")
81+
data class CommunicationError(val reason: String) : DeviceProvisionAPIError(reason)
82+
object BusinessError : DeviceProvisionAPIError("Business logic error")
83+
data class GenericError(val error: Throwable) : DeviceProvisionAPIError(error.message, error)
84+
object UnknownError : DeviceProvisionAPIError("Unknown error")
8485
}

0 commit comments

Comments
 (0)