core/homeassistant/components/sensor/netgear_lte.py

86 lines
2.1 KiB
Python

"""Netgear LTE sensors.
For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.netgear_lte/
"""
import voluptuous as vol
import attr
from homeassistant.const import CONF_HOST, CONF_SENSORS
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv
from ..netgear_lte import DATA_KEY
DEPENDENCIES = ['netgear_lte']
SENSOR_SMS = 'sms'
SENSOR_USAGE = 'usage'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_HOST): cv.string,
vol.Required(CONF_SENSORS): vol.All(
cv.ensure_list, [vol.In([SENSOR_SMS, SENSOR_USAGE])])
})
async def async_setup_platform(
hass, config, async_add_devices, discovery_info):
"""Set up Netgear LTE sensor devices."""
lte_data = hass.data[DATA_KEY].get(config)
sensors = []
for sensortype in config[CONF_SENSORS]:
if sensortype == SENSOR_SMS:
sensors.append(SMSSensor(lte_data))
elif sensortype == SENSOR_USAGE:
sensors.append(UsageSensor(lte_data))
async_add_devices(sensors, True)
@attr.s
class LTESensor(Entity):
"""Data usage sensor entity."""
lte_data = attr.ib()
async def async_update(self):
"""Update state."""
await self.lte_data.async_update()
class SMSSensor(LTESensor):
"""Unread SMS sensor entity."""
@property
def name(self):
"""Return the name of the sensor."""
return "Netgear LTE SMS"
@property
def state(self):
"""Return the state of the sensor."""
return self.lte_data.unread_count
class UsageSensor(LTESensor):
"""Data usage sensor entity."""
@property
def unit_of_measurement(self):
"""Return the unit of measurement."""
return "MiB"
@property
def name(self):
"""Return the name of the sensor."""
return "Netgear LTE usage"
@property
def state(self):
"""Return the state of the sensor."""
return round(self.lte_data.usage / 1024**2, 1)