"""Support for SMS dongle sensor.""" import logging import gammu # pylint: disable=import-error, no-member from homeassistant.const import DEVICE_CLASS_SIGNAL_STRENGTH from homeassistant.helpers.entity import Entity from .const import DOMAIN, SMS_GATEWAY _LOGGER = logging.getLogger(__name__) async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the GSM Signal Sensor sensor.""" gateway = hass.data[DOMAIN][SMS_GATEWAY] entities = [] imei = await gateway.get_imei_async() name = f"gsm_signal_imei_{imei}" entities.append( GSMSignalSensor( hass, gateway, name, ) ) async_add_entities(entities, True) class GSMSignalSensor(Entity): """Implementation of a GSM Signal sensor.""" def __init__( self, hass, gateway, name, ): """Initialize the GSM Signal sensor.""" self._hass = hass self._gateway = gateway self._name = name self._state = None @property def name(self): """Return the name of the sensor.""" return self._name @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" return "dB" @property def device_class(self): """Return the class of this sensor.""" return DEVICE_CLASS_SIGNAL_STRENGTH @property def available(self): """Return if the sensor data are available.""" return self._state is not None @property def state(self): """Return the state of the device.""" return self._state["SignalStrength"] async def async_update(self): """Get the latest data from the modem.""" try: self._state = await self._gateway.get_signal_quality_async() except gammu.GSMError as exc: # pylint: disable=no-member _LOGGER.error("Failed to read signal quality: %s", exc) @property def device_state_attributes(self): """Return the sensor attributes.""" return self._state @property def entity_registry_enabled_default(self) -> bool: """Return if the entity should be enabled when first added to the entity registry.""" return False