Fix knx expose feature not correctly falling back to default value (#53046)

This commit is contained in:
da-anda 2021-07-15 14:41:04 +02:00 committed by GitHub
parent 519efd2723
commit 6fe38eadf2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -100,10 +100,8 @@ class KNXExposeSensor:
def _init_expose_state(self) -> None: def _init_expose_state(self) -> None:
"""Initialize state of the exposure.""" """Initialize state of the exposure."""
init_state = self.hass.states.get(self.entity_id) init_state = self.hass.states.get(self.entity_id)
init_value = self._get_expose_value(init_state) state_value = self._get_expose_value(init_state)
self.device.sensor_value.value = ( self.device.sensor_value.value = state_value
init_value if init_value is not None else self.expose_default
)
@callback @callback
def shutdown(self) -> None: def shutdown(self) -> None:
@ -116,11 +114,12 @@ class KNXExposeSensor:
def _get_expose_value(self, state: State | None) -> StateType: def _get_expose_value(self, state: State | None) -> StateType:
"""Extract value from state.""" """Extract value from state."""
if state is None or state.state in (STATE_UNKNOWN, STATE_UNAVAILABLE): if state is None or state.state in (STATE_UNKNOWN, STATE_UNAVAILABLE):
return None value = self.expose_default
else:
value = ( value = (
state.state state.state
if self.expose_attribute is None if self.expose_attribute is None
else state.attributes.get(self.expose_attribute) else state.attributes.get(self.expose_attribute, self.expose_default)
) )
if self.type == "binary": if self.type == "binary":
if value in (1, STATE_ON, "True"): if value in (1, STATE_ON, "True"):
@ -150,9 +149,7 @@ class KNXExposeSensor:
async def _async_set_knx_value(self, value: StateType) -> None: async def _async_set_knx_value(self, value: StateType) -> None:
"""Set new value on xknx ExposeSensor.""" """Set new value on xknx ExposeSensor."""
if value is None: if value is None:
if self.expose_default is None:
return return
value = self.expose_default
await self.device.set(value) await self.device.set(value)