Add Iliad Italy (Mobile Telephony Provider) Sensor (#19645)
* working state * Attrs * > requirements generated * linting * fixes * coveragerc * ordered imports and fixed auth * Added Throttle * moved throttle to decorator * remove scan interval * lower throttle * moved to scan interval * Add attribution
This commit is contained in:
parent
7412d0f97c
commit
3d4f2926e9
3 changed files with 123 additions and 0 deletions
|
@ -793,6 +793,7 @@ omit =
|
|||
homeassistant/components/sensor/hp_ilo.py
|
||||
homeassistant/components/sensor/htu21d.py
|
||||
homeassistant/components/sensor/upnp.py
|
||||
homeassistant/components/sensor/iliad_italy.py
|
||||
homeassistant/components/sensor/imap_email_content.py
|
||||
homeassistant/components/sensor/imap.py
|
||||
homeassistant/components/sensor/influxdb.py
|
||||
|
|
119
homeassistant/components/sensor/iliad_italy.py
Normal file
119
homeassistant/components/sensor/iliad_italy.py
Normal file
|
@ -0,0 +1,119 @@
|
|||
"""
|
||||
Sensor to get Iliad Italy personal data.
|
||||
|
||||
For more details about this platform, please refer to the documentation at
|
||||
https://home-assistant.io/components/sensor.iliad_italy/
|
||||
"""
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||
from homeassistant.const import ATTR_ATTRIBUTION, CONF_PASSWORD, CONF_USERNAME
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.entity import Entity
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
REQUIREMENTS = ['aioiliad==0.1.1']
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
ATTRIBUTION = "Data provided by Iliad Italy"
|
||||
|
||||
ICON = 'mdi:phone'
|
||||
|
||||
SCAN_INTERVAL = timedelta(minutes=10)
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Required(CONF_USERNAME): cv.string,
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
})
|
||||
|
||||
|
||||
async def async_setup_platform(
|
||||
hass, conf, async_add_entities, discovery_info=None):
|
||||
"""Set up the Iliad Italy sensor platform."""
|
||||
from aioiliad import Iliad
|
||||
iliad = Iliad(conf[CONF_USERNAME], conf[CONF_PASSWORD],
|
||||
async_get_clientsession(hass), hass.loop)
|
||||
await iliad.login()
|
||||
|
||||
if not iliad.is_logged_in():
|
||||
_LOGGER.error("Check username and password")
|
||||
return
|
||||
|
||||
async_add_entities([IliadSensor(iliad)], True)
|
||||
|
||||
|
||||
class IliadSensor(Entity):
|
||||
"""Representation of a Iliad Italy Sensor."""
|
||||
|
||||
def __init__(self, iliad):
|
||||
"""Initialize the Iliad Italy sensor."""
|
||||
from aioiliad.IliadData import IliadData
|
||||
self._iliad = iliad
|
||||
self._iliaddata = IliadData(self._iliad)
|
||||
self._data = None
|
||||
self._state = None
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
"""Return the name of the sensor."""
|
||||
return "Iliad {}".format(self._data['info']['utente'])
|
||||
|
||||
@property
|
||||
def icon(self):
|
||||
"""Return the icon of the sensor."""
|
||||
return ICON
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
"""Return the state of the sensor."""
|
||||
return self._state
|
||||
|
||||
@property
|
||||
def unit_of_measurement(self):
|
||||
"""Return the unit of measurement of the sensor."""
|
||||
return '€'
|
||||
|
||||
@property
|
||||
def device_state_attributes(self):
|
||||
"""Return the state attributes of the sensor."""
|
||||
attr = {
|
||||
ATTR_ATTRIBUTION: ATTRIBUTION,
|
||||
'next_renewal':
|
||||
dt_util.utc_from_timestamp(
|
||||
self._data['info']['rinnovo']).isoformat(),
|
||||
'italy_sent_sms': self._data['italy']['sms'],
|
||||
'italy_over_plan_sms': self._data['italy']['sms_extra'],
|
||||
'italy_sent_mms': self._data['italy']['mms'],
|
||||
'italy_over_plan_mms': self._data['italy']['mms_extra'],
|
||||
'italy_calls_seconds': self._data['italy']['chiamate'],
|
||||
'italy_over_plan_calls': self._data['italy']['chiamate_extra'],
|
||||
'italy_data': self._data['italy']['internet'],
|
||||
'italy_data_max': self._data['italy']['internet_max'],
|
||||
'italy_data_over_plan': self._data['italy']['internet_over'],
|
||||
|
||||
'abroad_sent_sms': self._data['estero']['sms'],
|
||||
'abroad_over_plan_sms': self._data['estero']['sms_extra'],
|
||||
'abroad_sent_mms': self._data['estero']['mms'],
|
||||
'abroad_over_plan_mms': self._data['estero']['mms_extra'],
|
||||
'abroad_calls_seconds': self._data['estero']['chiamate'],
|
||||
'abroad_over_plan_calls': self._data['estero']['chiamate_extra'],
|
||||
'abroad_data': self._data['estero']['internet'],
|
||||
'abroad_data_max': self._data['estero']['internet_max'],
|
||||
'abroad_data_over_plan': self._data['estero']['internet_over'],
|
||||
}
|
||||
return attr
|
||||
|
||||
async def async_update(self):
|
||||
"""Update device state."""
|
||||
await self._iliaddata.update()
|
||||
self._data = {
|
||||
'italy': self._iliaddata.get_italy(),
|
||||
'estero': self._iliaddata.get_estero(),
|
||||
'info': self._iliaddata.get_general_info()
|
||||
}
|
||||
self._state = self._data['info']['credito'].replace('€', '')
|
|
@ -114,6 +114,9 @@ aiohttp_cors==0.7.0
|
|||
# homeassistant.components.hue
|
||||
aiohue==1.8.0
|
||||
|
||||
# homeassistant.components.sensor.iliad_italy
|
||||
aioiliad==0.1.1
|
||||
|
||||
# homeassistant.components.sensor.imap
|
||||
aioimaplib==0.7.13
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue