mirror of
https://github.com/home-assistant/android
synced 2024-10-15 20:43:06 +00:00
Always send sensor registration device class + entity category to prevent errors due to old registration (#3977)
* Always send device class during registration - Always send the device class for a sensor during registration to overwrite any existing invalid values * Only send sensor registrations with null properties to core 2023.2+
This commit is contained in:
parent
7d76bb4b51
commit
e8815f12e5
|
@ -20,7 +20,8 @@ import io.homeassistant.companion.android.common.data.integration.impl.entities.
|
|||
import io.homeassistant.companion.android.common.data.integration.impl.entities.RateLimitRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.RateLimitResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.SensorRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.SensorRegistrationRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.SensorUpdateRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.ServiceCallRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.Template
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.UpdateLocationRequest
|
||||
|
@ -700,9 +701,9 @@ class IntegrationRepositoryImpl @AssistedInject constructor(
|
|||
val canRegisterCategoryStateClass = server.version?.isAtLeast(2021, 11, 0) == true
|
||||
val canRegisterEntityDisabledState = server.version?.isAtLeast(2022, 6, 0) == true
|
||||
val canRegisterDeviceClassDistance = server.version?.isAtLeast(2022, 10, 0) == true
|
||||
val integrationRequest = IntegrationRequest(
|
||||
"register_sensor",
|
||||
SensorRequest(
|
||||
val canRegisterNullProperties = server.version?.isAtLeast(2023, 2, 0) == true
|
||||
|
||||
val registrationData = SensorRegistrationRequest(
|
||||
sensorRegistration.uniqueId,
|
||||
if (canRegisterEntityDisabledState && sensorRegistration.disabled) {
|
||||
null
|
||||
|
@ -724,6 +725,9 @@ class IntegrationRepositoryImpl @AssistedInject constructor(
|
|||
if (canRegisterCategoryStateClass) sensorRegistration.entityCategory else null,
|
||||
if (canRegisterEntityDisabledState) sensorRegistration.disabled else null
|
||||
)
|
||||
val integrationRequest = IntegrationRequest(
|
||||
"register_sensor",
|
||||
if (canRegisterNullProperties) registrationData else registrationData.toLegacy()
|
||||
)
|
||||
|
||||
var causeException: Exception? = null
|
||||
|
@ -751,7 +755,7 @@ class IntegrationRepositoryImpl @AssistedInject constructor(
|
|||
val integrationRequest = IntegrationRequest(
|
||||
"update_sensor_states",
|
||||
sensors.map {
|
||||
SensorRequest(
|
||||
SensorUpdateRequest(
|
||||
it.uniqueId,
|
||||
if (it.state is String) it.state.ifBlank { null } else it.state,
|
||||
it.type,
|
||||
|
|
|
@ -3,7 +3,30 @@ package io.homeassistant.companion.android.common.data.integration.impl.entities
|
|||
import com.fasterxml.jackson.annotation.JsonInclude
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
data class SensorRequest<T>(
|
||||
data class SensorRegistrationRequest<T>(
|
||||
val uniqueId: String,
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS)
|
||||
val state: T,
|
||||
val type: String,
|
||||
val icon: String,
|
||||
val attributes: Map<String, Any>,
|
||||
val name: String? = null,
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS) // Always to override incorrect value from old registration
|
||||
val deviceClass: String? = null,
|
||||
val unitOfMeasurement: String? = null,
|
||||
val stateClass: String? = null,
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS) // Always to override incorrect value from old registration
|
||||
val entityCategory: String? = null,
|
||||
val disabled: Boolean? = null
|
||||
) {
|
||||
/** @return [SensorRegistrationRequestLegacy] for core < 2023.2 which doesn't accept null properties */
|
||||
fun toLegacy(): SensorRegistrationRequestLegacy<T> = SensorRegistrationRequestLegacy(
|
||||
uniqueId, state, type, icon, attributes, name, deviceClass, unitOfMeasurement, stateClass, entityCategory, disabled
|
||||
)
|
||||
}
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
data class SensorRegistrationRequestLegacy<T>(
|
||||
val uniqueId: String,
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS)
|
||||
val state: T,
|
||||
|
@ -17,3 +40,11 @@ data class SensorRequest<T>(
|
|||
val entityCategory: String? = null,
|
||||
val disabled: Boolean? = null
|
||||
)
|
||||
|
||||
data class SensorUpdateRequest<T>(
|
||||
val uniqueId: String,
|
||||
val state: T,
|
||||
val type: String,
|
||||
val icon: String,
|
||||
val attributes: Map<String, Any>
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue