Tibber realtime consumption, Tibber pulse (#16870)

* tibber real time data

* Tibber Pulse, realtime consumption

* update lib
pull/16863/head^2
Daniel Høyer Iversen 2018-09-26 07:49:09 +02:00 committed by GitHub
parent b91a061cef
commit dc102a96a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 81 additions and 6 deletions

View File

@ -14,14 +14,14 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_ACCESS_TOKEN
from homeassistant.const import EVENT_HOMEASSISTANT_STOP, CONF_ACCESS_TOKEN
from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.entity import Entity
from homeassistant.util import dt as dt_util
from homeassistant.util import Throttle
REQUIREMENTS = ['pyTibber==0.5.1']
REQUIREMENTS = ['pyTibber==0.6.0']
_LOGGER = logging.getLogger(__name__)
@ -30,6 +30,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
})
ICON = 'mdi:currency-usd'
ICON_RT = 'mdi:power-plug'
SCAN_INTERVAL = timedelta(minutes=1)
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5)
@ -41,20 +42,26 @@ async def async_setup_platform(hass, config, async_add_entities,
tibber_connection = tibber.Tibber(config[CONF_ACCESS_TOKEN],
websession=async_get_clientsession(hass))
async def _close(*_):
await tibber_connection.rt_disconnect()
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _close)
try:
await tibber_connection.update_info()
dev = []
for home in tibber_connection.get_homes():
await home.update_info()
dev.append(TibberSensor(home))
dev.append(TibberSensorElPrice(home))
if home.has_real_time_consumption:
dev.append(TibberSensorRT(home))
except (asyncio.TimeoutError, aiohttp.ClientError):
raise PlatformNotReady()
async_add_entities(dev, True)
class TibberSensor(Entity):
"""Representation of an Tibber sensor."""
class TibberSensorElPrice(Entity):
"""Representation of an Tibber sensor for el price."""
def __init__(self, tibber_home):
"""Initialize the sensor."""
@ -155,3 +162,71 @@ class TibberSensor(Entity):
self._device_state_attributes['max_price'] = max_price
self._device_state_attributes['min_price'] = min_price
return state is not None
class TibberSensorRT(Entity):
"""Representation of an Tibber sensor for real time consumption."""
def __init__(self, tibber_home):
"""Initialize the sensor."""
self._tibber_home = tibber_home
self._state = None
self._device_state_attributes = {}
self._unit_of_measurement = 'W'
nickname = tibber_home.info['viewer']['home']['appNickname']
self._name = 'Real time consumption {}'.format(nickname)
async def async_added_to_hass(self):
"""Start unavailability tracking."""
await self._tibber_home.rt_subscribe(self.hass.loop,
self._async_callback)
async def _async_callback(self, payload):
"""Handle received data."""
data = payload.get('data', {})
live_measurement = data.get('liveMeasurement', {})
self._state = live_measurement.pop('power', None)
self._device_state_attributes = live_measurement
self.async_schedule_update_ha_state()
@property
def device_state_attributes(self):
"""Return the state attributes."""
return self._device_state_attributes
@property
def available(self):
"""Return True if entity is available."""
return self._tibber_home.rt_subscription_running
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def should_poll(self):
"""Return the polling state."""
return False
@property
def state(self):
"""Return the state of the device."""
return self._state
@property
def icon(self):
"""Return the icon to use in the frontend."""
return ICON_RT
@property
def unit_of_measurement(self):
"""Return the unit of measurement of this entity."""
return self._unit_of_measurement
@property
def unique_id(self):
"""Return a unique ID."""
home = self._tibber_home.info['viewer']['home']
_id = home['meteringPointData']['consumptionEan']
return'{}_rt_consumption'.format(_id)

View File

@ -764,7 +764,7 @@ pyRFXtrx==0.23
pySwitchmate==0.4.1
# homeassistant.components.sensor.tibber
pyTibber==0.5.1
pyTibber==0.6.0
# homeassistant.components.switch.dlink
pyW215==0.6.0