Use attr in mqtt humidifier (#81400)

This commit is contained in:
epenet 2022-11-02 13:39:36 +01:00 committed by GitHub
parent dd4b843d47
commit 7a930d7e79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -211,10 +211,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
def __init__(self, hass, config, config_entry, discovery_data): def __init__(self, hass, config, config_entry, discovery_data):
"""Initialize the MQTT humidifier.""" """Initialize the MQTT humidifier."""
self._state = None self._attr_mode = None
self._target_humidity = None
self._mode = None
self._supported_features = 0
self._topic = None self._topic = None
self._payload = None self._payload = None
@ -265,10 +262,10 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
"MODE_RESET": config[CONF_PAYLOAD_RESET_MODE], "MODE_RESET": config[CONF_PAYLOAD_RESET_MODE],
} }
if CONF_MODE_COMMAND_TOPIC in config and CONF_AVAILABLE_MODES_LIST in config: if CONF_MODE_COMMAND_TOPIC in config and CONF_AVAILABLE_MODES_LIST in config:
self._available_modes = config[CONF_AVAILABLE_MODES_LIST] self._attr_available_modes = config[CONF_AVAILABLE_MODES_LIST]
else: else:
self._available_modes = [] self._attr_available_modes = []
if self._available_modes: if self._attr_available_modes:
self._attr_supported_features = HumidifierEntityFeature.MODES self._attr_supported_features = HumidifierEntityFeature.MODES
else: else:
self._attr_supported_features = 0 self._attr_supported_features = 0
@ -304,11 +301,11 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
_LOGGER.debug("Ignoring empty state from '%s'", msg.topic) _LOGGER.debug("Ignoring empty state from '%s'", msg.topic)
return return
if payload == self._payload["STATE_ON"]: if payload == self._payload["STATE_ON"]:
self._state = True self._attr_is_on = True
elif payload == self._payload["STATE_OFF"]: elif payload == self._payload["STATE_OFF"]:
self._state = False self._attr_is_on = False
elif payload == PAYLOAD_NONE: elif payload == PAYLOAD_NONE:
self._state = None self._attr_is_on = None
get_mqtt_data(self.hass).state_write_requests.write_state_request(self) get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
if self._topic[CONF_STATE_TOPIC] is not None: if self._topic[CONF_STATE_TOPIC] is not None:
@ -330,7 +327,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
_LOGGER.debug("Ignoring empty target humidity from '%s'", msg.topic) _LOGGER.debug("Ignoring empty target humidity from '%s'", msg.topic)
return return
if rendered_target_humidity_payload == self._payload["HUMIDITY_RESET"]: if rendered_target_humidity_payload == self._payload["HUMIDITY_RESET"]:
self._target_humidity = None self._attr_target_humidity = None
get_mqtt_data(self.hass).state_write_requests.write_state_request(self) get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
return return
try: try:
@ -354,7 +351,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
rendered_target_humidity_payload, rendered_target_humidity_payload,
) )
return return
self._target_humidity = target_humidity self._attr_target_humidity = target_humidity
get_mqtt_data(self.hass).state_write_requests.write_state_request(self) get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
if self._topic[CONF_TARGET_HUMIDITY_STATE_TOPIC] is not None: if self._topic[CONF_TARGET_HUMIDITY_STATE_TOPIC] is not None:
@ -364,7 +361,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
"qos": self._config[CONF_QOS], "qos": self._config[CONF_QOS],
"encoding": self._config[CONF_ENCODING] or None, "encoding": self._config[CONF_ENCODING] or None,
} }
self._target_humidity = None self._attr_target_humidity = None
@callback @callback
@log_messages(self.hass, self.entity_id) @log_messages(self.hass, self.entity_id)
@ -372,7 +369,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
"""Handle new received MQTT message for mode.""" """Handle new received MQTT message for mode."""
mode = self._value_templates[ATTR_MODE](msg.payload) mode = self._value_templates[ATTR_MODE](msg.payload)
if mode == self._payload["MODE_RESET"]: if mode == self._payload["MODE_RESET"]:
self._mode = None self._attr_mode = None
get_mqtt_data(self.hass).state_write_requests.write_state_request(self) get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
return return
if not mode: if not mode:
@ -387,7 +384,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
) )
return return
self._mode = mode self._attr_mode = mode
get_mqtt_data(self.hass).state_write_requests.write_state_request(self) get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
if self._topic[CONF_MODE_STATE_TOPIC] is not None: if self._topic[CONF_MODE_STATE_TOPIC] is not None:
@ -397,7 +394,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
"qos": self._config[CONF_QOS], "qos": self._config[CONF_QOS],
"encoding": self._config[CONF_ENCODING] or None, "encoding": self._config[CONF_ENCODING] or None,
} }
self._mode = None self._attr_mode = None
self._sub_state = subscription.async_prepare_subscribe_topics( self._sub_state = subscription.async_prepare_subscribe_topics(
self.hass, self._sub_state, topics self.hass, self._sub_state, topics
@ -412,26 +409,6 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
"""Return true if we do optimistic updates.""" """Return true if we do optimistic updates."""
return self._optimistic return self._optimistic
@property
def available_modes(self) -> list:
"""Get the list of available modes."""
return self._available_modes
@property
def is_on(self) -> bool | None:
"""Return true if device is on."""
return self._state
@property
def target_humidity(self):
"""Return the current target humidity."""
return self._target_humidity
@property
def mode(self):
"""Return the current mode."""
return self._mode
async def async_turn_on(self, **kwargs: Any) -> None: async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn on the entity. """Turn on the entity.
@ -446,7 +423,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
self._config[CONF_ENCODING], self._config[CONF_ENCODING],
) )
if self._optimistic: if self._optimistic:
self._state = True self._attr_is_on = True
self.async_write_ha_state() self.async_write_ha_state()
async def async_turn_off(self, **kwargs: Any) -> None: async def async_turn_off(self, **kwargs: Any) -> None:
@ -463,7 +440,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
self._config[CONF_ENCODING], self._config[CONF_ENCODING],
) )
if self._optimistic: if self._optimistic:
self._state = False self._attr_is_on = False
self.async_write_ha_state() self.async_write_ha_state()
async def async_set_humidity(self, humidity: int) -> None: async def async_set_humidity(self, humidity: int) -> None:
@ -481,7 +458,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
) )
if self._optimistic_target_humidity: if self._optimistic_target_humidity:
self._target_humidity = humidity self._attr_target_humidity = humidity
self.async_write_ha_state() self.async_write_ha_state()
async def async_set_mode(self, mode: str) -> None: async def async_set_mode(self, mode: str) -> None:
@ -489,7 +466,7 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
This method is a coroutine. This method is a coroutine.
""" """
if mode not in self.available_modes: if not self.available_modes or mode not in self.available_modes:
_LOGGER.warning("'%s'is not a valid mode", mode) _LOGGER.warning("'%s'is not a valid mode", mode)
return return
@ -504,5 +481,5 @@ class MqttHumidifier(MqttEntity, HumidifierEntity):
) )
if self._optimistic_mode: if self._optimistic_mode:
self._mode = mode self._attr_mode = mode
self.async_write_ha_state() self.async_write_ha_state()