mirror of
				https://github.com/thejeffreystone/home-assistant-configuration.git
				synced 2025-11-03 19:44:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Platform to present any Tuya DP as a number."""
 | 
						|
import logging
 | 
						|
from functools import partial
 | 
						|
 | 
						|
import voluptuous as vol
 | 
						|
from homeassistant.components.number import DOMAIN, NumberEntity
 | 
						|
from homeassistant.const import CONF_DEVICE_CLASS, STATE_UNKNOWN
 | 
						|
 | 
						|
from .common import LocalTuyaEntity, async_setup_entry
 | 
						|
 | 
						|
_LOGGER = logging.getLogger(__name__)
 | 
						|
 | 
						|
CONF_MIN_VALUE = "min_value"
 | 
						|
CONF_MAX_VALUE = "max_value"
 | 
						|
 | 
						|
DEFAULT_MIN = 0
 | 
						|
DEFAULT_MAX = 100000
 | 
						|
 | 
						|
 | 
						|
def flow_schema(dps):
 | 
						|
    """Return schema used in config flow."""
 | 
						|
    return {
 | 
						|
        vol.Optional(CONF_MIN_VALUE, default=DEFAULT_MIN): vol.All(
 | 
						|
            vol.Coerce(float),
 | 
						|
            vol.Range(min=-1000000.0, max=1000000.0),
 | 
						|
        ),
 | 
						|
        vol.Required(CONF_MAX_VALUE, default=DEFAULT_MAX): vol.All(
 | 
						|
            vol.Coerce(float),
 | 
						|
            vol.Range(min=-1000000.0, max=1000000.0),
 | 
						|
        ),
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
class LocaltuyaNumber(LocalTuyaEntity, NumberEntity):
 | 
						|
    """Representation of a Tuya Number."""
 | 
						|
 | 
						|
    def __init__(
 | 
						|
        self,
 | 
						|
        device,
 | 
						|
        config_entry,
 | 
						|
        sensorid,
 | 
						|
        **kwargs,
 | 
						|
    ):
 | 
						|
        """Initialize the Tuya sensor."""
 | 
						|
        super().__init__(device, config_entry, sensorid, _LOGGER, **kwargs)
 | 
						|
        self._state = STATE_UNKNOWN
 | 
						|
 | 
						|
        self._min_value = DEFAULT_MIN
 | 
						|
        if CONF_MIN_VALUE in self._config:
 | 
						|
            self._min_value = self._config.get(CONF_MIN_VALUE)
 | 
						|
 | 
						|
        self._max_value = self._config.get(CONF_MAX_VALUE)
 | 
						|
 | 
						|
    @property
 | 
						|
    def value(self) -> float:
 | 
						|
        """Return sensor state."""
 | 
						|
        return self._state
 | 
						|
 | 
						|
    @property
 | 
						|
    def min_value(self) -> float:
 | 
						|
        """Return the minimum value."""
 | 
						|
        return self._min_value
 | 
						|
 | 
						|
    @property
 | 
						|
    def max_value(self) -> float:
 | 
						|
        """Return the maximum value."""
 | 
						|
        return self._max_value
 | 
						|
 | 
						|
    @property
 | 
						|
    def device_class(self):
 | 
						|
        """Return the class of this device."""
 | 
						|
        return self._config.get(CONF_DEVICE_CLASS)
 | 
						|
 | 
						|
    async def async_set_value(self, value: float) -> None:
 | 
						|
        """Update the current value."""
 | 
						|
        await self._device.set_dp(value, self._dp_id)
 | 
						|
 | 
						|
    def status_updated(self):
 | 
						|
        """Device status was updated."""
 | 
						|
        state = self.dps(self._dp_id)
 | 
						|
        self._state = state
 | 
						|
 | 
						|
 | 
						|
async_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaNumber, flow_schema)
 |