Tibber component and notify (#17062)
* Refactor tibber, and Tibber notify * update Tibber lib. * tibber * Tibber coveragerc * Tibber upgrade lib * style * comments * use async_get_service * event
This commit is contained in:
parent
3abdf217bb
commit
05d8c57212
5 changed files with 103 additions and 21 deletions
|
@ -316,6 +316,9 @@ omit =
|
||||||
|
|
||||||
homeassistant/components/*/thinkingcleaner.py
|
homeassistant/components/*/thinkingcleaner.py
|
||||||
|
|
||||||
|
homeassistant/components/tibber/*
|
||||||
|
homeassistant/components/*/tibber.py
|
||||||
|
|
||||||
homeassistant/components/toon.py
|
homeassistant/components/toon.py
|
||||||
homeassistant/components/*/toon.py
|
homeassistant/components/*/toon.py
|
||||||
|
|
||||||
|
@ -774,7 +777,6 @@ omit =
|
||||||
homeassistant/components/sensor/tank_utility.py
|
homeassistant/components/sensor/tank_utility.py
|
||||||
homeassistant/components/sensor/ted5000.py
|
homeassistant/components/sensor/ted5000.py
|
||||||
homeassistant/components/sensor/temper.py
|
homeassistant/components/sensor/temper.py
|
||||||
homeassistant/components/sensor/tibber.py
|
|
||||||
homeassistant/components/sensor/time_date.py
|
homeassistant/components/sensor/time_date.py
|
||||||
homeassistant/components/sensor/torque.py
|
homeassistant/components/sensor/torque.py
|
||||||
homeassistant/components/sensor/trafikverket_weatherstation.py
|
homeassistant/components/sensor/trafikverket_weatherstation.py
|
||||||
|
|
37
homeassistant/components/notify/tibber.py
Normal file
37
homeassistant/components/notify/tibber.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
"""
|
||||||
|
Tibber platform for notify component.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation at
|
||||||
|
https://home-assistant.io/components/notify.tibber/
|
||||||
|
"""
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.components.notify import (
|
||||||
|
ATTR_TITLE, ATTR_TITLE_DEFAULT, BaseNotificationService)
|
||||||
|
from homeassistant.components.tibber import DOMAIN as TIBBER_DOMAIN
|
||||||
|
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_get_service(hass, config, discovery_info=None):
|
||||||
|
"""Get the Tibber notification service."""
|
||||||
|
tibber_connection = hass.data[TIBBER_DOMAIN]
|
||||||
|
return TibberNotificationService(tibber_connection.send_notification)
|
||||||
|
|
||||||
|
|
||||||
|
class TibberNotificationService(BaseNotificationService):
|
||||||
|
"""Implement the notification service for Tibber."""
|
||||||
|
|
||||||
|
def __init__(self, notify):
|
||||||
|
"""Initialize the service."""
|
||||||
|
self._notify = notify
|
||||||
|
|
||||||
|
async def async_send_message(self, message=None, **kwargs):
|
||||||
|
"""Send a message to Tibber devices."""
|
||||||
|
title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)
|
||||||
|
try:
|
||||||
|
await self._notify(title=title, message=message)
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
_LOGGER.error("Timeout sending message with Tibber")
|
|
@ -10,25 +10,15 @@ import logging
|
||||||
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import voluptuous as vol
|
|
||||||
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
from homeassistant.components.tibber import DOMAIN as TIBBER_DOMAIN
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
|
||||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP, CONF_ACCESS_TOKEN
|
|
||||||
from homeassistant.exceptions import PlatformNotReady
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
from homeassistant.util import Throttle
|
from homeassistant.util import Throttle
|
||||||
|
|
||||||
REQUIREMENTS = ['pyTibber==0.6.0']
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|
||||||
vol.Required(CONF_ACCESS_TOKEN): cv.string
|
|
||||||
})
|
|
||||||
|
|
||||||
ICON = 'mdi:currency-usd'
|
ICON = 'mdi:currency-usd'
|
||||||
ICON_RT = 'mdi:power-plug'
|
ICON_RT = 'mdi:power-plug'
|
||||||
SCAN_INTERVAL = timedelta(minutes=1)
|
SCAN_INTERVAL = timedelta(minutes=1)
|
||||||
|
@ -38,16 +28,14 @@ MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5)
|
||||||
async def async_setup_platform(hass, config, async_add_entities,
|
async def async_setup_platform(hass, config, async_add_entities,
|
||||||
discovery_info=None):
|
discovery_info=None):
|
||||||
"""Set up the Tibber sensor."""
|
"""Set up the Tibber sensor."""
|
||||||
import tibber
|
if discovery_info is None:
|
||||||
tibber_connection = tibber.Tibber(config[CONF_ACCESS_TOKEN],
|
_LOGGER.error("Tibber sensor configuration has changed."
|
||||||
websession=async_get_clientsession(hass))
|
" Check https://home-assistant.io/components/tibber/")
|
||||||
|
return
|
||||||
|
|
||||||
async def _close(*_):
|
tibber_connection = hass.data.get(TIBBER_DOMAIN)
|
||||||
await tibber_connection.rt_disconnect()
|
|
||||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _close)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await tibber_connection.update_info()
|
|
||||||
dev = []
|
dev = []
|
||||||
for home in tibber_connection.get_homes():
|
for home in tibber_connection.get_homes():
|
||||||
await home.update_info()
|
await home.update_info()
|
||||||
|
|
55
homeassistant/components/tibber/__init__.py
Normal file
55
homeassistant/components/tibber/__init__.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
"""
|
||||||
|
Support for Tibber.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation at
|
||||||
|
https://home-assistant.io/components/tibber/
|
||||||
|
"""
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, CONF_ACCESS_TOKEN,
|
||||||
|
CONF_NAME)
|
||||||
|
from homeassistant.helpers import discovery
|
||||||
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
|
|
||||||
|
REQUIREMENTS = ['pyTibber==0.7.2']
|
||||||
|
|
||||||
|
DOMAIN = 'tibber'
|
||||||
|
|
||||||
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
|
DOMAIN: vol.Schema({
|
||||||
|
vol.Required(CONF_ACCESS_TOKEN): cv.string,
|
||||||
|
})
|
||||||
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup(hass, config):
|
||||||
|
"""Set up the Tibber component."""
|
||||||
|
conf = config.get(DOMAIN)
|
||||||
|
|
||||||
|
import tibber
|
||||||
|
tibber_connection = tibber.Tibber(conf[CONF_ACCESS_TOKEN],
|
||||||
|
websession=async_get_clientsession(hass))
|
||||||
|
hass.data[DOMAIN] = tibber_connection
|
||||||
|
|
||||||
|
async def _close(event):
|
||||||
|
await tibber_connection.rt_disconnect()
|
||||||
|
|
||||||
|
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _close)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await tibber_connection.update_info()
|
||||||
|
except (asyncio.TimeoutError, aiohttp.ClientError):
|
||||||
|
return False
|
||||||
|
|
||||||
|
for component in ['sensor', 'notify']:
|
||||||
|
discovery.load_platform(hass, component, DOMAIN,
|
||||||
|
{CONF_NAME: DOMAIN}, config)
|
||||||
|
|
||||||
|
return True
|
|
@ -767,8 +767,8 @@ pyRFXtrx==0.23
|
||||||
# homeassistant.components.switch.switchmate
|
# homeassistant.components.switch.switchmate
|
||||||
pySwitchmate==0.4.1
|
pySwitchmate==0.4.1
|
||||||
|
|
||||||
# homeassistant.components.sensor.tibber
|
# homeassistant.components.tibber
|
||||||
pyTibber==0.6.0
|
pyTibber==0.7.2
|
||||||
|
|
||||||
# homeassistant.components.switch.dlink
|
# homeassistant.components.switch.dlink
|
||||||
pyW215==0.6.0
|
pyW215==0.6.0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue