mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Use attr in mqtt humidifier (#81400)
This commit is contained in:
parent
dd4b843d47
commit
7a930d7e79
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user