Files
core/homeassistant/components/esphome/text.py
T

66 lines
1.9 KiB
Python

"""Support for esphome texts."""
from functools import partial
from typing import override
from aioesphomeapi import EntityInfo, TextInfo, TextMode as EsphomeTextMode, TextState
from homeassistant.components.text import TextEntity, TextMode
from homeassistant.core import callback
from .entity import (
EsphomeEntity,
convert_api_error_ha_error,
esphome_state_property,
platform_async_setup_entry,
)
from .enum_mapper import EsphomeEnumMapper
PARALLEL_UPDATES = 0
TEXT_MODES: EsphomeEnumMapper[EsphomeTextMode, TextMode] = EsphomeEnumMapper(
{
EsphomeTextMode.TEXT: TextMode.TEXT,
EsphomeTextMode.PASSWORD: TextMode.PASSWORD,
}
)
class EsphomeText(EsphomeEntity[TextInfo, TextState], TextEntity):
"""A text implementation for esphome."""
@callback
@override
def _on_static_info_update(self, static_info: EntityInfo) -> None:
"""Set attrs from static info."""
super()._on_static_info_update(static_info)
static_info = self._static_info
self._attr_native_min = static_info.min_length
self._attr_native_max = static_info.max_length
self._attr_pattern = static_info.pattern
self._attr_mode = TEXT_MODES.from_esphome(static_info.mode) or TextMode.TEXT
@property
@esphome_state_property
@override
def native_value(self) -> str | None:
"""Return the state of the entity."""
state = self._state
return None if state.missing_state else state.state
@convert_api_error_ha_error
@override
async def async_set_value(self, value: str) -> None:
"""Update the current value."""
self._client.text_command(
self._key, value, device_id=self._static_info.device_id
)
async_setup_entry = partial(
platform_async_setup_entry,
info_type=TextInfo,
entity_type=EsphomeText,
state_type=TextState,
)