Add icon support to entity

This commit is contained in:
Paulus Schoutsen 2015-11-03 00:20:48 -08:00
parent 77f4fc8c22
commit 4d069323f4
4 changed files with 29 additions and 12 deletions

View File

@ -12,16 +12,17 @@ from homeassistant.const import DEVICE_DEFAULT_NAME
def setup_platform(hass, config, add_devices_callback, discovery_info=None): def setup_platform(hass, config, add_devices_callback, discovery_info=None):
""" Find and return demo switches. """ """ Find and return demo switches. """
add_devices_callback([ add_devices_callback([
DemoSwitch('Decorative Lights', True), DemoSwitch('Decorative Lights', True, None),
DemoSwitch('AC', False) DemoSwitch('AC', False, 'mdi:air-conditioner')
]) ])
class DemoSwitch(SwitchDevice): class DemoSwitch(SwitchDevice):
""" Provides a demo switch. """ """ Provides a demo switch. """
def __init__(self, name, state): def __init__(self, name, state, icon):
self._name = name or DEVICE_DEFAULT_NAME self._name = name or DEVICE_DEFAULT_NAME
self._state = state self._state = state
self._icon = icon
@property @property
def should_poll(self): def should_poll(self):
@ -33,6 +34,11 @@ class DemoSwitch(SwitchDevice):
""" Returns the name of the device if any. """ """ Returns the name of the device if any. """
return self._name return self._name
@property
def icon(self):
""" Returns the icon to use for device if any. """
return self._icon
@property @property
def current_power_mwh(self): def current_power_mwh(self):
""" Current power usage in mwh. """ """ Current power usage in mwh. """

View File

@ -9,7 +9,7 @@ https://home-assistant.io/components/zone.html
import logging import logging
from homeassistant.const import ( from homeassistant.const import (
ATTR_HIDDEN, ATTR_LATITUDE, ATTR_LONGITUDE, CONF_NAME) ATTR_HIDDEN, ATTR_ICON, ATTR_LATITUDE, ATTR_LONGITUDE, CONF_NAME)
from homeassistant.helpers import extract_domain_configs, generate_entity_id from homeassistant.helpers import extract_domain_configs, generate_entity_id
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util.location import distance from homeassistant.util.location import distance
@ -25,8 +25,7 @@ DEFAULT_NAME = 'Unnamed zone'
ATTR_RADIUS = 'radius' ATTR_RADIUS = 'radius'
DEFAULT_RADIUS = 100 DEFAULT_RADIUS = 100
ATTR_ICON = 'icon' ICON_HOME = 'mdi:home'
ICON_HOME = 'home'
def active_zone(hass, latitude, longitude, radius=0): def active_zone(hass, latitude, longitude, radius=0):
@ -110,7 +109,7 @@ class Zone(Entity):
self.latitude = latitude self.latitude = latitude
self.longitude = longitude self.longitude = longitude
self.radius = radius self.radius = radius
self.icon = icon self._icon = icon
def should_poll(self): def should_poll(self):
return False return False
@ -124,14 +123,15 @@ class Zone(Entity):
""" The state property really does nothing for a zone. """ """ The state property really does nothing for a zone. """
return STATE return STATE
@property
def icon(self):
return self._icon
@property @property
def state_attributes(self): def state_attributes(self):
attr = { return {
ATTR_HIDDEN: True, ATTR_HIDDEN: True,
ATTR_LATITUDE: self.latitude, ATTR_LATITUDE: self.latitude,
ATTR_LONGITUDE: self.longitude, ATTR_LONGITUDE: self.longitude,
ATTR_RADIUS: self.radius, ATTR_RADIUS: self.radius,
} }
if self.icon:
attr[ATTR_ICON] = self.icon
return attr

View File

@ -74,6 +74,9 @@ ATTR_FRIENDLY_NAME = "friendly_name"
# A picture to represent entity # A picture to represent entity
ATTR_ENTITY_PICTURE = "entity_picture" ATTR_ENTITY_PICTURE = "entity_picture"
# Icon to use in the frontend
ATTR_ICON = "icon"
# The unit of measurement if applicable # The unit of measurement if applicable
ATTR_UNIT_OF_MEASUREMENT = "unit_of_measurement" ATTR_UNIT_OF_MEASUREMENT = "unit_of_measurement"

View File

@ -10,7 +10,7 @@ from collections import defaultdict
from homeassistant.exceptions import NoEntitySpecifiedError from homeassistant.exceptions import NoEntitySpecifiedError
from homeassistant.const import ( from homeassistant.const import (
ATTR_FRIENDLY_NAME, ATTR_HIDDEN, ATTR_UNIT_OF_MEASUREMENT, ATTR_FRIENDLY_NAME, ATTR_HIDDEN, ATTR_UNIT_OF_MEASUREMENT, ATTR_ICON,
DEVICE_DEFAULT_NAME, STATE_ON, STATE_OFF, STATE_UNKNOWN, TEMP_CELCIUS, DEVICE_DEFAULT_NAME, STATE_ON, STATE_OFF, STATE_UNKNOWN, TEMP_CELCIUS,
TEMP_FAHRENHEIT) TEMP_FAHRENHEIT)
@ -61,6 +61,11 @@ class Entity(object):
""" Unit of measurement of this entity, if any. """ """ Unit of measurement of this entity, if any. """
return None return None
@property
def icon(self):
""" Icon to use in the frontend, if any. """
return None
@property @property
def hidden(self): def hidden(self):
""" Suggestion if the entity should be hidden from UIs. """ """ Suggestion if the entity should be hidden from UIs. """
@ -102,6 +107,9 @@ class Entity(object):
if ATTR_UNIT_OF_MEASUREMENT not in attr and self.unit_of_measurement: if ATTR_UNIT_OF_MEASUREMENT not in attr and self.unit_of_measurement:
attr[ATTR_UNIT_OF_MEASUREMENT] = self.unit_of_measurement attr[ATTR_UNIT_OF_MEASUREMENT] = self.unit_of_measurement
if ATTR_ICON not in attr and self.icon:
attr[ATTR_ICON] = self.icon
if self.hidden: if self.hidden:
attr[ATTR_HIDDEN] = self.hidden attr[ATTR_HIDDEN] = self.hidden