Use ATTR_NAME from const.py (#14450)

This commit is contained in:
Fabian Affolter 2018-05-14 13:05:52 +02:00 committed by Pascal Vizeli
parent fb501282cc
commit 954e4796b8
26 changed files with 163 additions and 194 deletions

View File

@ -10,7 +10,7 @@ import voluptuous as vol
from homeassistant.components import rfxtrx from homeassistant.components import rfxtrx
from homeassistant.components.binary_sensor import ( from homeassistant.components.binary_sensor import (
PLATFORM_SCHEMA, DEVICE_CLASSES_SCHEMA, BinarySensorDevice) DEVICE_CLASSES_SCHEMA, PLATFORM_SCHEMA, BinarySensorDevice)
from homeassistant.components.rfxtrx import ( from homeassistant.components.rfxtrx import (
ATTR_NAME, CONF_AUTOMATIC_ADD, CONF_DATA_BITS, CONF_DEVICES, ATTR_NAME, CONF_AUTOMATIC_ADD, CONF_DATA_BITS, CONF_DEVICES,
CONF_FIRE_EVENT, CONF_OFF_DELAY) CONF_FIRE_EVENT, CONF_OFF_DELAY)
@ -29,8 +29,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_DEVICES, default={}): { vol.Optional(CONF_DEVICES, default={}): {
cv.string: vol.Schema({ cv.string: vol.Schema({
vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_DEVICE_CLASS): vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,
DEVICE_CLASSES_SCHEMA,
vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean, vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean,
vol.Optional(CONF_OFF_DELAY): vol.Optional(CONF_OFF_DELAY):
vol.Any(cv.time_period, cv.positive_timedelta), vol.Any(cv.time_period, cv.positive_timedelta),

View File

@ -33,7 +33,7 @@ from homeassistant.helpers.event import async_track_utc_time_change
from homeassistant.const import ( from homeassistant.const import (
ATTR_GPS_ACCURACY, ATTR_LATITUDE, ATTR_LONGITUDE, CONF_NAME, CONF_MAC, ATTR_GPS_ACCURACY, ATTR_LATITUDE, ATTR_LONGITUDE, CONF_NAME, CONF_MAC,
DEVICE_DEFAULT_NAME, STATE_HOME, STATE_NOT_HOME, ATTR_ENTITY_ID, DEVICE_DEFAULT_NAME, STATE_HOME, STATE_NOT_HOME, ATTR_ENTITY_ID,
CONF_ICON, ATTR_ICON) CONF_ICON, ATTR_ICON, ATTR_NAME)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -71,7 +71,6 @@ ATTR_GPS = 'gps'
ATTR_HOST_NAME = 'host_name' ATTR_HOST_NAME = 'host_name'
ATTR_LOCATION_NAME = 'location_name' ATTR_LOCATION_NAME = 'location_name'
ATTR_MAC = 'mac' ATTR_MAC = 'mac'
ATTR_NAME = 'name'
ATTR_SOURCE_TYPE = 'source_type' ATTR_SOURCE_TYPE = 'source_type'
ATTR_CONSIDER_HOME = 'consider_home' ATTR_CONSIDER_HOME = 'consider_home'

View File

@ -14,7 +14,7 @@ from homeassistant.const import (
ATTR_ENTITY_ID, CONF_ICON, CONF_NAME, STATE_CLOSED, STATE_HOME, ATTR_ENTITY_ID, CONF_ICON, CONF_NAME, STATE_CLOSED, STATE_HOME,
STATE_NOT_HOME, STATE_OFF, STATE_ON, STATE_OPEN, STATE_LOCKED, STATE_NOT_HOME, STATE_OFF, STATE_ON, STATE_OPEN, STATE_LOCKED,
STATE_UNLOCKED, STATE_OK, STATE_PROBLEM, STATE_UNKNOWN, STATE_UNLOCKED, STATE_OK, STATE_PROBLEM, STATE_UNKNOWN,
ATTR_ASSUMED_STATE, SERVICE_RELOAD) ATTR_ASSUMED_STATE, SERVICE_RELOAD, ATTR_NAME, ATTR_ICON)
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
from homeassistant.helpers.entity import Entity, async_generate_entity_id from homeassistant.helpers.entity import Entity, async_generate_entity_id
@ -35,8 +35,6 @@ ATTR_ADD_ENTITIES = 'add_entities'
ATTR_AUTO = 'auto' ATTR_AUTO = 'auto'
ATTR_CONTROL = 'control' ATTR_CONTROL = 'control'
ATTR_ENTITIES = 'entities' ATTR_ENTITIES = 'entities'
ATTR_ICON = 'icon'
ATTR_NAME = 'name'
ATTR_OBJECT_ID = 'object_id' ATTR_OBJECT_ID = 'object_id'
ATTR_ORDER = 'order' ATTR_ORDER = 'order'
ATTR_VIEW = 'view' ATTR_VIEW = 'view'

View File

@ -13,12 +13,13 @@ import voluptuous as vol
from homeassistant.components import SERVICE_CHECK_CONFIG from homeassistant.components import SERVICE_CHECK_CONFIG
from homeassistant.const import ( from homeassistant.const import (
SERVICE_HOMEASSISTANT_RESTART, SERVICE_HOMEASSISTANT_STOP) ATTR_NAME, SERVICE_HOMEASSISTANT_RESTART, SERVICE_HOMEASSISTANT_STOP)
from homeassistant.core import DOMAIN as HASS_DOMAIN from homeassistant.core import DOMAIN as HASS_DOMAIN
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
from homeassistant.util.dt import utcnow from homeassistant.util.dt import utcnow
from .handler import HassIO from .handler import HassIO
from .http import HassIOView from .http import HassIOView
@ -47,7 +48,6 @@ ATTR_SNAPSHOT = 'snapshot'
ATTR_ADDONS = 'addons' ATTR_ADDONS = 'addons'
ATTR_FOLDERS = 'folders' ATTR_FOLDERS = 'folders'
ATTR_HOMEASSISTANT = 'homeassistant' ATTR_HOMEASSISTANT = 'homeassistant'
ATTR_NAME = 'name'
ATTR_PASSWORD = 'password' ATTR_PASSWORD = 'password'
SCHEMA_NO_DATA = vol.Schema({}) SCHEMA_NO_DATA = vol.Schema({})

View File

@ -13,17 +13,19 @@ import socket
import voluptuous as vol import voluptuous as vol
from homeassistant.const import ( from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP, CONF_USERNAME, CONF_PASSWORD, CONF_PLATFORM, ATTR_ENTITY_ID, ATTR_NAME, CONF_HOST, CONF_HOSTS, CONF_PASSWORD,
CONF_HOSTS, CONF_HOST, ATTR_ENTITY_ID, STATE_UNKNOWN) CONF_PLATFORM, CONF_USERNAME, EVENT_HOMEASSISTANT_STOP, STATE_UNKNOWN)
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
REQUIREMENTS = ['pyhomematic==0.1.42'] REQUIREMENTS = ['pyhomematic==0.1.42']
DOMAIN = 'homematic'
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
DOMAIN = 'homematic'
SCAN_INTERVAL_HUB = timedelta(seconds=300) SCAN_INTERVAL_HUB = timedelta(seconds=300)
SCAN_INTERVAL_VARIABLES = timedelta(seconds=30) SCAN_INTERVAL_VARIABLES = timedelta(seconds=30)
@ -38,7 +40,6 @@ DISCOVER_LOCKS = 'homematic.locks'
ATTR_DISCOVER_DEVICES = 'devices' ATTR_DISCOVER_DEVICES = 'devices'
ATTR_PARAM = 'param' ATTR_PARAM = 'param'
ATTR_CHANNEL = 'channel' ATTR_CHANNEL = 'channel'
ATTR_NAME = 'name'
ATTR_ADDRESS = 'address' ATTR_ADDRESS = 'address'
ATTR_VALUE = 'value' ATTR_VALUE = 'value'
ATTR_INTERFACE = 'interface' ATTR_INTERFACE = 'interface'

View File

@ -10,14 +10,14 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
from homeassistant.const import ( from homeassistant.const import (
ATTR_ENTITY_ID, CONF_NAME, CONF_ENTITY_ID) ATTR_ENTITY_ID, ATTR_NAME, CONF_ENTITY_ID, CONF_NAME)
from homeassistant.core import callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.loader import bind_hass import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.loader import bind_hass
from homeassistant.util.async_ import run_callback_threadsafe from homeassistant.util.async_ import run_callback_threadsafe
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -42,7 +42,6 @@ ATTR_CONFIDENCE = 'confidence'
ATTR_FACES = 'faces' ATTR_FACES = 'faces'
ATTR_GENDER = 'gender' ATTR_GENDER = 'gender'
ATTR_GLASSES = 'glasses' ATTR_GLASSES = 'glasses'
ATTR_NAME = 'name'
ATTR_MOTION = 'motion' ATTR_MOTION = 'motion'
ATTR_TOTAL_FACES = 'total_faces' ATTR_TOTAL_FACES = 'total_faces'
@ -60,7 +59,7 @@ SOURCE_SCHEMA = vol.Schema({
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
vol.Optional(CONF_SOURCE): vol.All(cv.ensure_list, [SOURCE_SCHEMA]), vol.Optional(CONF_SOURCE): vol.All(cv.ensure_list, [SOURCE_SCHEMA]),
vol.Optional(CONF_CONFIDENCE, default=DEFAULT_CONFIDENCE): vol.Optional(CONF_CONFIDENCE, default=DEFAULT_CONFIDENCE):
vol.All(vol.Coerce(float), vol.Range(min=0, max=100)) vol.All(vol.Coerce(float), vol.Range(min=0, max=100)),
}) })
SERVICE_SCAN_SCHEMA = vol.Schema({ SERVICE_SCAN_SCHEMA = vol.Schema({
@ -77,7 +76,7 @@ def scan(hass, entity_id=None):
@asyncio.coroutine @asyncio.coroutine
def async_setup(hass, config): def async_setup(hass, config):
"""Set up image processing.""" """Set up the image processing."""
component = EntityComponent(_LOGGER, DOMAIN, hass, SCAN_INTERVAL) component = EntityComponent(_LOGGER, DOMAIN, hass, SCAN_INTERVAL)
yield from component.async_setup(config) yield from component.async_setup(config)

View File

@ -9,12 +9,12 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components.image_processing import (
ATTR_AGE, ATTR_GENDER, ATTR_GLASSES, CONF_ENTITY_ID, CONF_NAME,
CONF_SOURCE, PLATFORM_SCHEMA, ImageProcessingFaceEntity)
from homeassistant.components.microsoft_face import DATA_MICROSOFT_FACE
from homeassistant.core import split_entity_id from homeassistant.core import split_entity_id
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.components.microsoft_face import DATA_MICROSOFT_FACE
from homeassistant.components.image_processing import (
PLATFORM_SCHEMA, ImageProcessingFaceEntity, ATTR_AGE, ATTR_GENDER,
ATTR_GLASSES, CONF_SOURCE, CONF_ENTITY_ID, CONF_NAME)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
DEPENDENCIES = ['microsoft_face'] DEPENDENCIES = ['microsoft_face']

View File

@ -9,12 +9,13 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components.image_processing import (
ATTR_CONFIDENCE, CONF_CONFIDENCE, CONF_ENTITY_ID, CONF_NAME, CONF_SOURCE,
PLATFORM_SCHEMA, ImageProcessingFaceEntity)
from homeassistant.components.microsoft_face import DATA_MICROSOFT_FACE
from homeassistant.const import ATTR_NAME
from homeassistant.core import split_entity_id from homeassistant.core import split_entity_id
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.components.microsoft_face import DATA_MICROSOFT_FACE
from homeassistant.components.image_processing import (
PLATFORM_SCHEMA, ImageProcessingFaceEntity, ATTR_NAME,
CONF_CONFIDENCE, CONF_SOURCE, CONF_ENTITY_ID, CONF_NAME, ATTR_CONFIDENCE)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
DEPENDENCIES = ['microsoft_face'] DEPENDENCIES = ['microsoft_face']

View File

@ -11,7 +11,8 @@ import voluptuous as vol
from homeassistant.components.lock import LockDevice from homeassistant.components.lock import LockDevice
from homeassistant.components.wink import DOMAIN, WinkDevice from homeassistant.components.wink import DOMAIN, WinkDevice
from homeassistant.const import ATTR_CODE, ATTR_ENTITY_ID, STATE_UNKNOWN from homeassistant.const import (
ATTR_CODE, ATTR_ENTITY_ID, ATTR_NAME, STATE_UNKNOWN)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
DEPENDENCIES = ['wink'] DEPENDENCIES = ['wink']
@ -28,7 +29,6 @@ SERVICE_ADD_KEY = 'wink_add_new_lock_key_code'
ATTR_ENABLED = 'enabled' ATTR_ENABLED = 'enabled'
ATTR_SENSITIVITY = 'sensitivity' ATTR_SENSITIVITY = 'sensitivity'
ATTR_MODE = 'mode' ATTR_MODE = 'mode'
ATTR_NAME = 'name'
ALARM_SENSITIVITY_MAP = { ALARM_SENSITIVITY_MAP = {
'low': 0.2, 'low': 0.2,

View File

@ -4,44 +4,49 @@ Event parser and human readable log generator.
For more details about this component, please refer to the documentation at For more details about this component, please refer to the documentation at
https://home-assistant.io/components/logbook/ https://home-assistant.io/components/logbook/
""" """
import logging
from datetime import timedelta from datetime import timedelta
from itertools import groupby from itertools import groupby
import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
import homeassistant.util.dt as dt_util
from homeassistant.components import sun from homeassistant.components import sun
from homeassistant.components.http import HomeAssistantView from homeassistant.components.http import HomeAssistantView
from homeassistant.const import ( from homeassistant.const import (
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, EVENT_STATE_CHANGED, ATTR_DOMAIN, ATTR_ENTITY_ID, ATTR_HIDDEN, ATTR_NAME, CONF_EXCLUDE,
STATE_NOT_HOME, STATE_OFF, STATE_ON, ATTR_HIDDEN, HTTP_BAD_REQUEST, CONF_INCLUDE, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP,
EVENT_LOGBOOK_ENTRY) EVENT_LOGBOOK_ENTRY, EVENT_STATE_CHANGED, HTTP_BAD_REQUEST, STATE_NOT_HOME,
from homeassistant.core import State, split_entity_id, DOMAIN as HA_DOMAIN STATE_OFF, STATE_ON)
from homeassistant.core import DOMAIN as HA_DOMAIN
DOMAIN = 'logbook' from homeassistant.core import State, callback, split_entity_id
DEPENDENCIES = ['recorder', 'frontend'] import homeassistant.helpers.config_validation as cv
import homeassistant.util.dt as dt_util
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
CONF_EXCLUDE = 'exclude' ATTR_MESSAGE = 'message'
CONF_INCLUDE = 'include'
CONF_ENTITIES = 'entities'
CONF_DOMAINS = 'domains' CONF_DOMAINS = 'domains'
CONF_ENTITIES = 'entities'
CONTINUOUS_DOMAINS = ['proximity', 'sensor']
DEPENDENCIES = ['recorder', 'frontend']
DOMAIN = 'logbook'
GROUP_BY_MINUTES = 15
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.Schema({
CONF_EXCLUDE: vol.Schema({ CONF_EXCLUDE: vol.Schema({
vol.Optional(CONF_ENTITIES, default=[]): cv.entity_ids, vol.Optional(CONF_ENTITIES, default=[]): cv.entity_ids,
vol.Optional(CONF_DOMAINS, default=[]): vol.All(cv.ensure_list, vol.Optional(CONF_DOMAINS, default=[]):
[cv.string]) vol.All(cv.ensure_list, [cv.string])
}), }),
CONF_INCLUDE: vol.Schema({ CONF_INCLUDE: vol.Schema({
vol.Optional(CONF_ENTITIES, default=[]): cv.entity_ids, vol.Optional(CONF_ENTITIES, default=[]): cv.entity_ids,
vol.Optional(CONF_DOMAINS, default=[]): vol.All(cv.ensure_list, vol.Optional(CONF_DOMAINS, default=[]):
[cv.string]) vol.All(cv.ensure_list, [cv.string])
}) })
}), }),
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -51,15 +56,6 @@ ALL_EVENT_TYPES = [
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP
] ]
GROUP_BY_MINUTES = 15
CONTINUOUS_DOMAINS = ['proximity', 'sensor']
ATTR_NAME = 'name'
ATTR_MESSAGE = 'message'
ATTR_DOMAIN = 'domain'
ATTR_ENTITY_ID = 'entity_id'
LOG_MESSAGE_SCHEMA = vol.Schema({ LOG_MESSAGE_SCHEMA = vol.Schema({
vol.Required(ATTR_NAME): cv.string, vol.Required(ATTR_NAME): cv.string,
vol.Required(ATTR_MESSAGE): cv.template, vol.Required(ATTR_MESSAGE): cv.template,

View File

@ -1,5 +1,5 @@
""" """
Support for microsoft face recognition. Support for Microsoft face recognition.
For more details about this component, please refer to the documentation at For more details about this component, please refer to the documentation at
https://home-assistant.io/components/microsoft_face/ https://home-assistant.io/components/microsoft_face/
@ -13,7 +13,7 @@ from aiohttp.hdrs import CONTENT_TYPE
import async_timeout import async_timeout
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_API_KEY, CONF_TIMEOUT from homeassistant.const import CONF_API_KEY, CONF_TIMEOUT, ATTR_NAME
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -22,28 +22,25 @@ from homeassistant.util import slugify
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
DOMAIN = 'microsoft_face' ATTR_CAMERA_ENTITY = 'camera_entity'
DEPENDENCIES = ['camera'] ATTR_GROUP = 'group'
ATTR_PERSON = 'person'
FACE_API_URL = "api.cognitive.microsoft.com/face/v1.0/{0}"
DATA_MICROSOFT_FACE = 'microsoft_face'
CONF_AZURE_REGION = 'azure_region' CONF_AZURE_REGION = 'azure_region'
DATA_MICROSOFT_FACE = 'microsoft_face'
DEFAULT_TIMEOUT = 10
DEPENDENCIES = ['camera']
DOMAIN = 'microsoft_face'
FACE_API_URL = "api.cognitive.microsoft.com/face/v1.0/{0}"
SERVICE_CREATE_GROUP = 'create_group' SERVICE_CREATE_GROUP = 'create_group'
SERVICE_DELETE_GROUP = 'delete_group'
SERVICE_TRAIN_GROUP = 'train_group'
SERVICE_CREATE_PERSON = 'create_person' SERVICE_CREATE_PERSON = 'create_person'
SERVICE_DELETE_GROUP = 'delete_group'
SERVICE_DELETE_PERSON = 'delete_person' SERVICE_DELETE_PERSON = 'delete_person'
SERVICE_FACE_PERSON = 'face_person' SERVICE_FACE_PERSON = 'face_person'
SERVICE_TRAIN_GROUP = 'train_group'
ATTR_GROUP = 'group'
ATTR_PERSON = 'person'
ATTR_CAMERA_ENTITY = 'camera_entity'
ATTR_NAME = 'name'
DEFAULT_TIMEOUT = 10
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.Schema({
@ -111,7 +108,7 @@ def face_person(hass, group, person, camera_entity):
@asyncio.coroutine @asyncio.coroutine
def async_setup(hass, config): def async_setup(hass, config):
"""Set up microsoft face.""" """Set up Microsoft Face."""
entities = {} entities = {}
face = MicrosoftFace( face = MicrosoftFace(
hass, hass,

View File

@ -12,8 +12,8 @@ import voluptuous as vol
from homeassistant.helpers.event import track_state_change from homeassistant.helpers.event import track_state_change
from homeassistant.config import load_yaml_config_file from homeassistant.config import load_yaml_config_file
from homeassistant.components.notify import ( from homeassistant.components.notify import (
ATTR_TARGET, ATTR_DATA, BaseNotificationService, DOMAIN) ATTR_TARGET, ATTR_DATA, BaseNotificationService, DOMAIN, PLATFORM_SCHEMA)
from homeassistant.const import CONF_NAME, CONF_PLATFORM from homeassistant.const import CONF_NAME, CONF_PLATFORM, ATTR_NAME
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers import template as template_helper from homeassistant.helpers import template as template_helper
@ -27,9 +27,8 @@ DEVICE_TRACKER_DOMAIN = 'device_tracker'
SERVICE_REGISTER = 'apns_register' SERVICE_REGISTER = 'apns_register'
ATTR_PUSH_ID = 'push_id' ATTR_PUSH_ID = 'push_id'
ATTR_NAME = 'name'
PLATFORM_SCHEMA = vol.Schema({ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_PLATFORM): 'apns', vol.Required(CONF_PLATFORM): 'apns',
vol.Required(CONF_NAME): cv.string, vol.Required(CONF_NAME): cv.string,
vol.Required(CONF_CERTFILE): cv.isfile, vol.Required(CONF_CERTFILE): cv.isfile,
@ -66,7 +65,7 @@ class ApnsDevice(object):
""" """
def __init__(self, push_id, name, tracking_device_id=None, disabled=False): def __init__(self, push_id, name, tracking_device_id=None, disabled=False):
"""Initialize Apns Device.""" """Initialize APNS Device."""
self.device_push_id = push_id self.device_push_id = push_id
self.device_name = name self.device_name = name
self.tracking_id = tracking_device_id self.tracking_id = tracking_device_id
@ -104,7 +103,7 @@ class ApnsDevice(object):
@property @property
def disabled(self): def disabled(self):
"""Return the .""" """Return the state of the service."""
return self.device_disabled return self.device_disabled
def disable(self): def disable(self):

View File

@ -4,21 +4,18 @@ Support for RFXtrx components.
For more details about this component, please refer to the documentation at For more details about this component, please refer to the documentation at
https://home-assistant.io/components/rfxtrx/ https://home-assistant.io/components/rfxtrx/
""" """
import asyncio import asyncio
import logging
from collections import OrderedDict from collections import OrderedDict
import logging
import voluptuous as vol import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.util import slugify
from homeassistant.const import ( from homeassistant.const import (
EVENT_HOMEASSISTANT_START, ATTR_ENTITY_ID, ATTR_NAME, ATTR_STATE, CONF_DEVICE, CONF_DEVICES,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, TEMP_CELSIUS)
ATTR_ENTITY_ID, TEMP_CELSIUS, import homeassistant.helpers.config_validation as cv
CONF_DEVICES
)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import slugify
REQUIREMENTS = ['pyRFXtrx==0.22.1'] REQUIREMENTS = ['pyRFXtrx==0.22.1']
@ -29,8 +26,6 @@ DEFAULT_SIGNAL_REPETITIONS = 1
ATTR_AUTOMATIC_ADD = 'automatic_add' ATTR_AUTOMATIC_ADD = 'automatic_add'
ATTR_DEVICE = 'device' ATTR_DEVICE = 'device'
ATTR_DEBUG = 'debug' ATTR_DEBUG = 'debug'
ATTR_STATE = 'state'
ATTR_NAME = 'name'
ATTR_FIRE_EVENT = 'fire_event' ATTR_FIRE_EVENT = 'fire_event'
ATTR_DATA_TYPE = 'data_type' ATTR_DATA_TYPE = 'data_type'
ATTR_DUMMY = 'dummy' ATTR_DUMMY = 'dummy'
@ -40,7 +35,6 @@ CONF_DATA_TYPE = 'data_type'
CONF_SIGNAL_REPETITIONS = 'signal_repetitions' CONF_SIGNAL_REPETITIONS = 'signal_repetitions'
CONF_FIRE_EVENT = 'fire_event' CONF_FIRE_EVENT = 'fire_event'
CONF_DUMMY = 'dummy' CONF_DUMMY = 'dummy'
CONF_DEVICE = 'device'
CONF_DEBUG = 'debug' CONF_DEBUG = 'debug'
CONF_OFF_DELAY = 'off_delay' CONF_OFF_DELAY = 'off_delay'
EVENT_BUTTON_PRESSED = 'button_pressed' EVENT_BUTTON_PRESSED = 'button_pressed'

View File

@ -4,32 +4,31 @@ Sensor for the CityBikes data.
For more details about this platform, please refer to the documentation at For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.citybikes/ https://home-assistant.io/components/sensor.citybikes/
""" """
import logging
from datetime import timedelta
import asyncio import asyncio
from datetime import timedelta
import logging
import aiohttp import aiohttp
import async_timeout import async_timeout
import voluptuous as vol import voluptuous as vol
import homeassistant.helpers.config_validation as cv from homeassistant.components.sensor import ENTITY_ID_FORMAT, PLATFORM_SCHEMA
from homeassistant.components.sensor import PLATFORM_SCHEMA, ENTITY_ID_FORMAT
from homeassistant.const import ( from homeassistant.const import (
CONF_NAME, CONF_LATITUDE, CONF_LONGITUDE, CONF_RADIUS, ATTR_ATTRIBUTION, ATTR_ID, ATTR_LATITUDE, ATTR_LOCATION, ATTR_LONGITUDE,
ATTR_ATTRIBUTION, ATTR_LOCATION, ATTR_LATITUDE, ATTR_LONGITUDE, ATTR_NAME, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, CONF_RADIUS,
STATE_UNKNOWN, LENGTH_METERS, LENGTH_FEET, ATTR_ID) LENGTH_FEET, LENGTH_METERS)
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.event import async_track_time_interval
from homeassistant.helpers.entity import Entity, async_generate_entity_id
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.util import location, distance import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity, async_generate_entity_id
from homeassistant.helpers.event import async_track_time_interval
from homeassistant.util import distance, location
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
ATTR_EMPTY_SLOTS = 'empty_slots' ATTR_EMPTY_SLOTS = 'empty_slots'
ATTR_EXTRA = 'extra' ATTR_EXTRA = 'extra'
ATTR_FREE_BIKES = 'free_bikes' ATTR_FREE_BIKES = 'free_bikes'
ATTR_NAME = 'name'
ATTR_NETWORK = 'network' ATTR_NETWORK = 'network'
ATTR_NETWORKS_LIST = 'networks' ATTR_NETWORKS_LIST = 'networks'
ATTR_STATIONS_LIST = 'stations' ATTR_STATIONS_LIST = 'stations'
@ -151,8 +150,7 @@ def async_setup_platform(hass, config, async_add_devices,
network = CityBikesNetwork(hass, network_id) network = CityBikesNetwork(hass, network_id)
hass.data[PLATFORM][MONITORED_NETWORKS][network_id] = network hass.data[PLATFORM][MONITORED_NETWORKS][network_id] = network
hass.async_add_job(network.async_refresh) hass.async_add_job(network.async_refresh)
async_track_time_interval(hass, network.async_refresh, async_track_time_interval(hass, network.async_refresh, SCAN_INTERVAL)
SCAN_INTERVAL)
else: else:
network = hass.data[PLATFORM][MONITORED_NETWORKS][network_id] network = hass.data[PLATFORM][MONITORED_NETWORKS][network_id]
@ -160,14 +158,14 @@ def async_setup_platform(hass, config, async_add_devices,
devices = [] devices = []
for station in network.stations: for station in network.stations:
dist = location.distance(latitude, longitude, dist = location.distance(
station[ATTR_LATITUDE], latitude, longitude, station[ATTR_LATITUDE],
station[ATTR_LONGITUDE]) station[ATTR_LONGITUDE])
station_id = station[ATTR_ID] station_id = station[ATTR_ID]
station_uid = str(station.get(ATTR_EXTRA, {}).get(ATTR_UID, '')) station_uid = str(station.get(ATTR_EXTRA, {}).get(ATTR_UID, ''))
if radius > dist or stations_list.intersection((station_id, if radius > dist or stations_list.intersection(
station_uid)): (station_id, station_uid)):
devices.append(CityBikesStation(hass, network, station_id, name)) devices.append(CityBikesStation(hass, network, station_id, name))
async_add_devices(devices, True) async_add_devices(devices, True)
@ -199,8 +197,8 @@ class CityBikesNetwork:
for network in networks_list[1:]: for network in networks_list[1:]:
network_latitude = network[ATTR_LOCATION][ATTR_LATITUDE] network_latitude = network[ATTR_LOCATION][ATTR_LATITUDE]
network_longitude = network[ATTR_LOCATION][ATTR_LONGITUDE] network_longitude = network[ATTR_LOCATION][ATTR_LONGITUDE]
dist = location.distance(latitude, longitude, dist = location.distance(
network_latitude, network_longitude) latitude, longitude, network_latitude, network_longitude)
if dist < minimum_dist: if dist < minimum_dist:
minimum_dist = dist minimum_dist = dist
result = network[ATTR_ID] result = network[ATTR_ID]
@ -246,13 +244,13 @@ class CityBikesStation(Entity):
uid = "_".join([network.network_id, base_name, station_id]) uid = "_".join([network.network_id, base_name, station_id])
else: else:
uid = "_".join([network.network_id, station_id]) uid = "_".join([network.network_id, station_id])
self.entity_id = async_generate_entity_id(ENTITY_ID_FORMAT, uid, self.entity_id = async_generate_entity_id(
hass=hass) ENTITY_ID_FORMAT, uid, hass=hass)
@property @property
def state(self): def state(self):
"""Return the state of the sensor.""" """Return the state of the sensor."""
return self._station_data.get(ATTR_FREE_BIKES, STATE_UNKNOWN) return self._station_data.get(ATTR_FREE_BIKES, None)
@property @property
def name(self): def name(self):

View File

@ -23,7 +23,6 @@ _LOGGER = logging.getLogger(__name__)
ATTR_24H_VOLUME = '24h_volume' ATTR_24H_VOLUME = '24h_volume'
ATTR_AVAILABLE_SUPPLY = 'available_supply' ATTR_AVAILABLE_SUPPLY = 'available_supply'
ATTR_MARKET_CAP = 'market_cap' ATTR_MARKET_CAP = 'market_cap'
ATTR_NAME = 'name'
ATTR_PERCENT_CHANGE_24H = 'percent_change_24h' ATTR_PERCENT_CHANGE_24H = 'percent_change_24h'
ATTR_PERCENT_CHANGE_7D = 'percent_change_7d' ATTR_PERCENT_CHANGE_7D = 'percent_change_7d'
ATTR_PERCENT_CHANGE_1H = 'percent_change_1h' ATTR_PERCENT_CHANGE_1H = 'percent_change_1h'
@ -130,6 +129,4 @@ class CoinMarketCapData(object):
"""Get the latest data from blockchain.info.""" """Get the latest data from blockchain.info."""
from coinmarketcap import Market from coinmarketcap import Market
self.ticker = Market().ticker( self.ticker = Market().ticker(
self.currency, self.currency, limit=1, convert=self.display_currency)
limit=1,
convert=self.display_currency)

View File

@ -4,19 +4,21 @@ Support for ComEd Hourly Pricing data.
For more details about this platform, please refer to the documentation at For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.comed_hourly_pricing/ https://home-assistant.io/components/sensor.comed_hourly_pricing/
""" """
from datetime import timedelta
import logging
import asyncio import asyncio
from datetime import timedelta
import json import json
import async_timeout import logging
import aiohttp import aiohttp
import async_timeout
import voluptuous as vol import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, STATE_UNKNOWN from homeassistant.const import (
from homeassistant.helpers.entity import Entity ATTR_ATTRIBUTION, CONF_NAME, CONF_OFFSET, STATE_UNKNOWN)
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_RESOURCE = 'https://hourlypricing.comed.com/api' _RESOURCE = 'https://hourlypricing.comed.com/api'
@ -27,8 +29,6 @@ CONF_ATTRIBUTION = "Data provided by ComEd Hourly Pricing service"
CONF_CURRENT_HOUR_AVERAGE = 'current_hour_average' CONF_CURRENT_HOUR_AVERAGE = 'current_hour_average'
CONF_FIVE_MINUTE = 'five_minute' CONF_FIVE_MINUTE = 'five_minute'
CONF_MONITORED_FEEDS = 'monitored_feeds' CONF_MONITORED_FEEDS = 'monitored_feeds'
CONF_NAME = 'name'
CONF_OFFSET = 'offset'
CONF_SENSOR_TYPE = 'type' CONF_SENSOR_TYPE = 'type'
SENSOR_TYPES = { SENSOR_TYPES = {
@ -40,12 +40,12 @@ TYPES_SCHEMA = vol.In(SENSOR_TYPES)
SENSORS_SCHEMA = vol.Schema({ SENSORS_SCHEMA = vol.Schema({
vol.Required(CONF_SENSOR_TYPE): TYPES_SCHEMA, vol.Required(CONF_SENSOR_TYPE): TYPES_SCHEMA,
vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_OFFSET, default=0.0): vol.Coerce(float), vol.Optional(CONF_OFFSET, default=0.0): vol.Coerce(float),
vol.Optional(CONF_NAME): cv.string
}) })
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_MONITORED_FEEDS): [SENSORS_SCHEMA] vol.Required(CONF_MONITORED_FEEDS): [SENSORS_SCHEMA],
}) })

View File

@ -10,15 +10,14 @@ import os
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_NAME, DEVICE_CLASS_BATTERY from homeassistant.const import ATTR_NAME, CONF_NAME, DEVICE_CLASS_BATTERY
from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
REQUIREMENTS = ['batinfo==0.4.2'] REQUIREMENTS = ['batinfo==0.4.2']
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
ATTR_NAME = 'name'
ATTR_PATH = 'path' ATTR_PATH = 'path'
ATTR_ALARM = 'alarm' ATTR_ALARM = 'alarm'
ATTR_CAPACITY = 'capacity' ATTR_CAPACITY = 'capacity'

View File

@ -12,7 +12,7 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_USERNAME, CONF_PASSWORD, CONF_PORT, CONF_SSL, CONF_HOST, CONF_USERNAME, CONF_PASSWORD, CONF_PORT, CONF_SSL, ATTR_NAME,
CONF_VERIFY_SSL, CONF_TIMEOUT, CONF_MONITORED_CONDITIONS, TEMP_CELSIUS) CONF_VERIFY_SSL, CONF_TIMEOUT, CONF_MONITORED_CONDITIONS, TEMP_CELSIUS)
from homeassistant.util import Throttle from homeassistant.util import Throttle
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -29,7 +29,6 @@ ATTR_MASK = 'Mask'
ATTR_MAX_SPEED = 'Max Speed' ATTR_MAX_SPEED = 'Max Speed'
ATTR_MEMORY_SIZE = 'Memory Size' ATTR_MEMORY_SIZE = 'Memory Size'
ATTR_MODEL = 'Model' ATTR_MODEL = 'Model'
ATTR_NAME = 'Name'
ATTR_PACKETS_TX = 'Packets (TX)' ATTR_PACKETS_TX = 'Packets (TX)'
ATTR_PACKETS_RX = 'Packets (RX)' ATTR_PACKETS_RX = 'Packets (RX)'
ATTR_PACKETS_ERR = 'Packets (Err)' ATTR_PACKETS_ERR = 'Packets (Err)'

View File

@ -10,10 +10,10 @@ import voluptuous as vol
import homeassistant.components.rfxtrx as rfxtrx import homeassistant.components.rfxtrx as rfxtrx
from homeassistant.components.rfxtrx import ( from homeassistant.components.rfxtrx import (
ATTR_DATA_TYPE, ATTR_FIRE_EVENT, ATTR_NAME, CONF_AUTOMATIC_ADD, ATTR_DATA_TYPE, ATTR_FIRE_EVENT, CONF_AUTOMATIC_ADD, CONF_DATA_TYPE,
CONF_DATA_TYPE, CONF_DEVICES, CONF_FIRE_EVENT, DATA_TYPES) CONF_DEVICES, CONF_FIRE_EVENT, DATA_TYPES)
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME from homeassistant.const import ATTR_ENTITY_ID, ATTR_NAME, CONF_NAME
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import slugify from homeassistant.util import slugify

View File

@ -6,16 +6,14 @@ https://home-assistant.io/components/sensor.tado/
""" """
import logging import logging
from homeassistant.const import TEMP_CELSIUS from homeassistant.components.tado import DATA_TADO
from homeassistant.const import ATTR_ID, ATTR_NAME, TEMP_CELSIUS
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.components.tado import (DATA_TADO)
from homeassistant.const import (ATTR_ID)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
ATTR_DATA_ID = 'data_id' ATTR_DATA_ID = 'data_id'
ATTR_DEVICE = 'device' ATTR_DEVICE = 'device'
ATTR_NAME = 'name'
ATTR_ZONE = 'zone' ATTR_ZONE = 'zone'
CLIMATE_SENSOR_TYPES = ['temperature', 'humidity', 'power', CLIMATE_SENSOR_TYPES = ['temperature', 'humidity', 'power',
@ -39,14 +37,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
if zone['type'] == 'HEATING': if zone['type'] == 'HEATING':
for variable in CLIMATE_SENSOR_TYPES: for variable in CLIMATE_SENSOR_TYPES:
sensor_items.append(create_zone_sensor( sensor_items.append(create_zone_sensor(
tado, zone, zone['name'], zone['id'], tado, zone, zone['name'], zone['id'], variable))
variable))
elif zone['type'] == 'HOT_WATER': elif zone['type'] == 'HOT_WATER':
for variable in HOT_WATER_SENSOR_TYPES: for variable in HOT_WATER_SENSOR_TYPES:
sensor_items.append(create_zone_sensor( sensor_items.append(create_zone_sensor(
tado, zone, zone['name'], zone['id'], tado, zone, zone['name'], zone['id'], variable))
variable
))
me_data = tado.get_me() me_data = tado.get_me()
sensor_items.append(create_device_sensor( sensor_items.append(create_device_sensor(

View File

@ -13,24 +13,27 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ( from homeassistant.const import (
CONF_API_KEY, CONF_NAME, ATTR_ATTRIBUTION, CONF_ID CONF_API_KEY, CONF_NAME, ATTR_ATTRIBUTION, CONF_ID, ATTR_NAME)
)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
ATTR_ACCESS_CODE = 'AccessCode'
ATTR_AVG_TIME = 'AverageTime'
ATTR_CURRENT_TIME = 'CurrentTime'
ATTR_DESCRIPTION = 'Description'
ATTR_TIME_UPDATED = 'TimeUpdated'
ATTR_TRAVEL_TIME_ID = 'TravelTimeID'
CONF_ATTRIBUTION = "Data provided by WSDOT"
CONF_TRAVEL_TIMES = 'travel_time' CONF_TRAVEL_TIMES = 'travel_time'
# API codes for travel time details ICON = 'mdi:car'
ATTR_ACCESS_CODE = 'AccessCode'
ATTR_TRAVEL_TIME_ID = 'TravelTimeID' RESOURCE = 'http://www.wsdot.wa.gov/Traffic/api/TravelTimes/' \
ATTR_CURRENT_TIME = 'CurrentTime' 'TravelTimesREST.svc/GetTravelTimeAsJson'
ATTR_AVG_TIME = 'AverageTime'
ATTR_NAME = 'Name'
ATTR_TIME_UPDATED = 'TimeUpdated'
ATTR_DESCRIPTION = 'Description'
ATTRIBUTION = "Data provided by WSDOT"
SCAN_INTERVAL = timedelta(minutes=3) SCAN_INTERVAL = timedelta(minutes=3)
@ -43,16 +46,14 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
def setup_platform(hass, config, add_devices, discovery_info=None): def setup_platform(hass, config, add_devices, discovery_info=None):
"""Get the WSDOT sensor.""" """Set up the WSDOT sensor."""
sensors = [] sensors = []
for travel_time in config.get(CONF_TRAVEL_TIMES): for travel_time in config.get(CONF_TRAVEL_TIMES):
name = (travel_time.get(CONF_NAME) or name = (travel_time.get(CONF_NAME) or travel_time.get(CONF_ID))
travel_time.get(CONF_ID))
sensors.append( sensors.append(
WashingtonStateTravelTimeSensor( WashingtonStateTravelTimeSensor(
name, name, config.get(CONF_API_KEY), travel_time.get(CONF_ID)))
config.get(CONF_API_KEY),
travel_time.get(CONF_ID)))
add_devices(sensors, True) add_devices(sensors, True)
@ -65,8 +66,6 @@ class WashingtonStateTransportSensor(Entity):
can read them and make them available. can read them and make them available.
""" """
ICON = 'mdi:car'
def __init__(self, name, access_code): def __init__(self, name, access_code):
"""Initialize the sensor.""" """Initialize the sensor."""
self._data = {} self._data = {}
@ -87,16 +86,12 @@ class WashingtonStateTransportSensor(Entity):
@property @property
def icon(self): def icon(self):
"""Icon to use in the frontend, if any.""" """Icon to use in the frontend, if any."""
return self.ICON return ICON
class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor): class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
"""Travel time sensor from WSDOT.""" """Travel time sensor from WSDOT."""
RESOURCE = ('http://www.wsdot.wa.gov/Traffic/api/TravelTimes/'
'TravelTimesREST.svc/GetTravelTimeAsJson')
ICON = 'mdi:car'
def __init__(self, name, access_code, travel_time_id): def __init__(self, name, access_code, travel_time_id):
"""Construct a travel time sensor.""" """Construct a travel time sensor."""
self._travel_time_id = travel_time_id self._travel_time_id = travel_time_id
@ -104,10 +99,12 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
def update(self): def update(self):
"""Get the latest data from WSDOT.""" """Get the latest data from WSDOT."""
params = {ATTR_ACCESS_CODE: self._access_code, params = {
ATTR_TRAVEL_TIME_ID: self._travel_time_id} ATTR_ACCESS_CODE: self._access_code,
ATTR_TRAVEL_TIME_ID: self._travel_time_id,
}
response = requests.get(self.RESOURCE, params, timeout=10) response = requests.get(RESOURCE, params, timeout=10)
if response.status_code != 200: if response.status_code != 200:
_LOGGER.warning("Invalid response from WSDOT API") _LOGGER.warning("Invalid response from WSDOT API")
else: else:
@ -118,7 +115,7 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
def device_state_attributes(self): def device_state_attributes(self):
"""Return other details about the sensor state.""" """Return other details about the sensor state."""
if self._data is not None: if self._data is not None:
attrs = {ATTR_ATTRIBUTION: ATTRIBUTION} attrs = {ATTR_ATTRIBUTION: CONF_ATTRIBUTION}
for key in [ATTR_AVG_TIME, ATTR_NAME, ATTR_DESCRIPTION, for key in [ATTR_AVG_TIME, ATTR_NAME, ATTR_DESCRIPTION,
ATTR_TRAVEL_TIME_ID]: ATTR_TRAVEL_TIME_ID]:
attrs[key] = self._data.get(key) attrs[key] = self._data.get(key)
@ -129,7 +126,7 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit this state is expressed in.""" """Return the unit this state is expressed in."""
return "min" return 'min'
def _parse_wsdot_timestamp(timestamp): def _parse_wsdot_timestamp(timestamp):
@ -139,5 +136,5 @@ def _parse_wsdot_timestamp(timestamp):
# ex: Date(1485040200000-0800) # ex: Date(1485040200000-0800)
milliseconds, tzone = re.search( milliseconds, tzone = re.search(
r'Date\((\d+)([+-]\d\d)\d\d\)', timestamp).groups() r'Date\((\d+)([+-]\d\d)\d\d\)', timestamp).groups()
return datetime.fromtimestamp(int(milliseconds) / 1000, return datetime.fromtimestamp(
tz=timezone(timedelta(hours=int(tzone)))) int(milliseconds) / 1000, tz=timezone(timedelta(hours=int(tzone))))

View File

@ -10,11 +10,11 @@ import voluptuous as vol
import homeassistant.components.rfxtrx as rfxtrx import homeassistant.components.rfxtrx as rfxtrx
from homeassistant.components.switch import SwitchDevice, PLATFORM_SCHEMA from homeassistant.components.switch import SwitchDevice, PLATFORM_SCHEMA
from homeassistant.const import CONF_NAME
from homeassistant.components.rfxtrx import ( from homeassistant.components.rfxtrx import (
CONF_AUTOMATIC_ADD, CONF_FIRE_EVENT, DEFAULT_SIGNAL_REPETITIONS, CONF_AUTOMATIC_ADD, CONF_FIRE_EVENT, DEFAULT_SIGNAL_REPETITIONS,
CONF_SIGNAL_REPETITIONS, CONF_DEVICES) CONF_SIGNAL_REPETITIONS, CONF_DEVICES)
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.const import CONF_NAME
DEPENDENCIES = ['rfxtrx'] DEPENDENCIES = ['rfxtrx']
@ -24,7 +24,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_DEVICES, default={}): { vol.Optional(CONF_DEVICES, default={}): {
cv.string: vol.Schema({ cv.string: vol.Schema({
vol.Required(CONF_NAME): cv.string, vol.Required(CONF_NAME): cv.string,
vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean,
}) })
}, },
vol.Optional(CONF_AUTOMATIC_ADD, default=False): cv.boolean, vol.Optional(CONF_AUTOMATIC_ADD, default=False): cv.boolean,

View File

@ -10,7 +10,7 @@ import voluptuous as vol
import homeassistant.components.rpi_pfio as rpi_pfio import homeassistant.components.rpi_pfio as rpi_pfio
from homeassistant.components.switch import PLATFORM_SCHEMA from homeassistant.components.switch import PLATFORM_SCHEMA
from homeassistant.const import DEVICE_DEFAULT_NAME from homeassistant.const import ATTR_NAME, DEVICE_DEFAULT_NAME
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import ToggleEntity from homeassistant.helpers.entity import ToggleEntity
@ -19,7 +19,6 @@ _LOGGER = logging.getLogger(__name__)
DEPENDENCIES = ['rpi_pfio'] DEPENDENCIES = ['rpi_pfio']
ATTR_INVERT_LOGIC = 'invert_logic' ATTR_INVERT_LOGIC = 'invert_logic'
ATTR_NAME = 'name'
CONF_PORTS = 'ports' CONF_PORTS = 'ports'

View File

@ -15,7 +15,7 @@ import voluptuous as vol
from homeassistant.components.http import HomeAssistantView from homeassistant.components.http import HomeAssistantView
from homeassistant.const import ( from homeassistant.const import (
ATTR_BATTERY_LEVEL, ATTR_ENTITY_ID, CONF_EMAIL, CONF_PASSWORD, ATTR_BATTERY_LEVEL, ATTR_ENTITY_ID, ATTR_NAME, CONF_EMAIL, CONF_PASSWORD,
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, STATE_OFF, STATE_ON, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, STATE_OFF, STATE_ON,
__version__) __version__)
from homeassistant.core import callback from homeassistant.core import callback
@ -45,7 +45,6 @@ ATTR_ACCESS_TOKEN = 'access_token'
ATTR_REFRESH_TOKEN = 'refresh_token' ATTR_REFRESH_TOKEN = 'refresh_token'
ATTR_CLIENT_ID = 'client_id' ATTR_CLIENT_ID = 'client_id'
ATTR_CLIENT_SECRET = 'client_secret' ATTR_CLIENT_SECRET = 'client_secret'
ATTR_NAME = 'name'
ATTR_PAIRING_MODE = 'pairing_mode' ATTR_PAIRING_MODE = 'pairing_mode'
ATTR_KIDDE_RADIO_CODE = 'kidde_radio_code' ATTR_KIDDE_RADIO_CODE = 'kidde_radio_code'
ATTR_HUB_NAME = 'hub_name' ATTR_HUB_NAME = 'hub_name'
@ -53,7 +52,8 @@ ATTR_HUB_NAME = 'hub_name'
WINK_AUTH_CALLBACK_PATH = '/auth/wink/callback' WINK_AUTH_CALLBACK_PATH = '/auth/wink/callback'
WINK_AUTH_START = '/auth/wink' WINK_AUTH_START = '/auth/wink'
WINK_CONFIG_FILE = '.wink.conf' WINK_CONFIG_FILE = '.wink.conf'
USER_AGENT = "Manufacturer/Home-Assistant%s python/3 Wink/3" % __version__ USER_AGENT = "Manufacturer/Home-Assistant{} python/3 Wink/3".format(
__version__)
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
'client_id': 'CLIENT_ID_HERE', 'client_id': 'CLIENT_ID_HERE',

View File

@ -221,6 +221,9 @@ ATTR_SERVICE_DATA = 'service_data'
# IDs # IDs
ATTR_ID = 'id' ATTR_ID = 'id'
# Name
ATTR_NAME = 'name'
# Data for a SERVICE_EXECUTED event # Data for a SERVICE_EXECUTED event
ATTR_SERVICE_CALL_ID = 'service_call_id' ATTR_SERVICE_CALL_ID = 'service_call_id'

View File

@ -1,17 +1,16 @@
"""The tests for the WSDOT platform.""" """The tests for the WSDOT platform."""
from datetime import datetime, timedelta, timezone
import re import re
import unittest import unittest
from datetime import timedelta, datetime, timezone
import requests_mock import requests_mock
from tests.common import get_test_home_assistant, load_fixture
from homeassistant.components.sensor import wsdot from homeassistant.components.sensor import wsdot
from homeassistant.components.sensor.wsdot import ( from homeassistant.components.sensor.wsdot import (
WashingtonStateTravelTimeSensor, ATTR_DESCRIPTION, ATTR_DESCRIPTION, ATTR_TIME_UPDATED, CONF_API_KEY, CONF_ID, CONF_NAME,
ATTR_TIME_UPDATED, CONF_API_KEY, CONF_NAME, CONF_TRAVEL_TIMES, RESOURCE, SCAN_INTERVAL)
CONF_ID, CONF_TRAVEL_TIMES, SCAN_INTERVAL)
from homeassistant.setup import setup_component from homeassistant.setup import setup_component
from tests.common import load_fixture, get_test_home_assistant
class TestWSDOT(unittest.TestCase): class TestWSDOT(unittest.TestCase):
@ -50,7 +49,7 @@ class TestWSDOT(unittest.TestCase):
@requests_mock.Mocker() @requests_mock.Mocker()
def test_setup(self, mock_req): def test_setup(self, mock_req):
"""Test for operational WSDOT sensor with proper attributes.""" """Test for operational WSDOT sensor with proper attributes."""
uri = re.compile(WashingtonStateTravelTimeSensor.RESOURCE + '*') uri = re.compile(RESOURCE + '*')
mock_req.get(uri, text=load_fixture('wsdot.json')) mock_req.get(uri, text=load_fixture('wsdot.json'))
wsdot.setup_platform(self.hass, self.config, self.add_entities) wsdot.setup_platform(self.hass, self.config, self.add_entities)
self.assertEqual(len(self.entities), 1) self.assertEqual(len(self.entities), 1)