86 lines
2.2 KiB
Python
86 lines
2.2 KiB
Python
"""
|
|
Support to graphs card in the UI.
|
|
|
|
For more details about this component, please refer to the documentation at
|
|
https://home-assistant.io/components/history_graph/
|
|
"""
|
|
import logging
|
|
|
|
import voluptuous as vol
|
|
|
|
import homeassistant.helpers.config_validation as cv
|
|
from homeassistant.const import CONF_ENTITIES, CONF_NAME, ATTR_ENTITY_ID
|
|
from homeassistant.helpers.entity import Entity
|
|
from homeassistant.helpers.entity_component import EntityComponent
|
|
|
|
DEPENDENCIES = ['history']
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
DOMAIN = 'history_graph'
|
|
|
|
CONF_HOURS_TO_SHOW = 'hours_to_show'
|
|
CONF_REFRESH = 'refresh'
|
|
ATTR_HOURS_TO_SHOW = CONF_HOURS_TO_SHOW
|
|
ATTR_REFRESH = CONF_REFRESH
|
|
|
|
|
|
GRAPH_SCHEMA = vol.Schema({
|
|
vol.Required(CONF_ENTITIES): cv.entity_ids,
|
|
vol.Optional(CONF_NAME): cv.string,
|
|
vol.Optional(CONF_HOURS_TO_SHOW, default=24): vol.Range(min=1),
|
|
vol.Optional(CONF_REFRESH, default=0): vol.Range(min=0),
|
|
})
|
|
|
|
|
|
CONFIG_SCHEMA = vol.Schema({
|
|
DOMAIN: vol.Schema({cv.slug: GRAPH_SCHEMA})
|
|
}, extra=vol.ALLOW_EXTRA)
|
|
|
|
|
|
async def async_setup(hass, config):
|
|
"""Load graph configurations."""
|
|
component = EntityComponent(
|
|
_LOGGER, DOMAIN, hass)
|
|
graphs = []
|
|
|
|
for object_id, cfg in config[DOMAIN].items():
|
|
name = cfg.get(CONF_NAME, object_id)
|
|
graph = HistoryGraphEntity(name, cfg)
|
|
graphs.append(graph)
|
|
|
|
await component.async_add_entities(graphs)
|
|
|
|
return True
|
|
|
|
|
|
class HistoryGraphEntity(Entity):
|
|
"""Representation of a graph entity."""
|
|
|
|
def __init__(self, name, cfg):
|
|
"""Initialize the graph."""
|
|
self._name = name
|
|
self._hours = cfg[CONF_HOURS_TO_SHOW]
|
|
self._refresh = cfg[CONF_REFRESH]
|
|
self._entities = cfg[CONF_ENTITIES]
|
|
|
|
@property
|
|
def should_poll(self):
|
|
"""No polling needed."""
|
|
return False
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the entity."""
|
|
return self._name
|
|
|
|
@property
|
|
def state_attributes(self):
|
|
"""Return the state attributes."""
|
|
attrs = {
|
|
ATTR_HOURS_TO_SHOW: self._hours,
|
|
ATTR_REFRESH: self._refresh,
|
|
ATTR_ENTITY_ID: self._entities,
|
|
}
|
|
return attrs
|