mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Allow setting entity namespace (#1887)
This commit is contained in:
parent
cc42f2d8be
commit
1d8554359c
@ -33,6 +33,7 @@ CONF_ACCESS_TOKEN = "access_token"
|
|||||||
CONF_FILENAME = "filename"
|
CONF_FILENAME = "filename"
|
||||||
CONF_MONITORED_CONDITIONS = 'monitored_conditions'
|
CONF_MONITORED_CONDITIONS = 'monitored_conditions'
|
||||||
CONF_OPTIMISTIC = 'optimistic'
|
CONF_OPTIMISTIC = 'optimistic'
|
||||||
|
CONF_ENTITY_NAMESPACE = "entity_namespace"
|
||||||
CONF_SCAN_INTERVAL = "scan_interval"
|
CONF_SCAN_INTERVAL = "scan_interval"
|
||||||
CONF_VALUE_TEMPLATE = "value_template"
|
CONF_VALUE_TEMPLATE = "value_template"
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ def generate_entity_id(entity_id_format, name, current_ids=None, hass=None):
|
|||||||
current_ids = hass.states.entity_ids()
|
current_ids = hass.states.entity_ids()
|
||||||
|
|
||||||
return ensure_unique_string(
|
return ensure_unique_string(
|
||||||
entity_id_format.format(slugify(name.lower())), current_ids)
|
entity_id_format.format(slugify(name)), current_ids)
|
||||||
|
|
||||||
|
|
||||||
def split_entity_id(entity_id):
|
def split_entity_id(entity_id):
|
||||||
|
@ -3,7 +3,9 @@ from threading import Lock
|
|||||||
|
|
||||||
from homeassistant.bootstrap import prepare_setup_platform
|
from homeassistant.bootstrap import prepare_setup_platform
|
||||||
from homeassistant.components import discovery, group
|
from homeassistant.components import discovery, group
|
||||||
from homeassistant.const import ATTR_ENTITY_ID, CONF_SCAN_INTERVAL
|
from homeassistant.const import (
|
||||||
|
ATTR_ENTITY_ID, CONF_SCAN_INTERVAL, CONF_ENTITY_NAMESPACE,
|
||||||
|
DEVICE_DEFAULT_NAME)
|
||||||
from homeassistant.helpers import config_per_platform
|
from homeassistant.helpers import config_per_platform
|
||||||
from homeassistant.helpers.entity import generate_entity_id
|
from homeassistant.helpers.entity import generate_entity_id
|
||||||
from homeassistant.helpers.event import track_utc_time_change
|
from homeassistant.helpers.event import track_utc_time_change
|
||||||
@ -37,8 +39,8 @@ class EntityComponent(object):
|
|||||||
self.config = None
|
self.config = None
|
||||||
self.lock = Lock()
|
self.lock = Lock()
|
||||||
|
|
||||||
self.add_entities = EntityPlatform(self,
|
self.add_entities = EntityPlatform(self, self.scan_interval,
|
||||||
self.scan_interval).add_entities
|
None).add_entities
|
||||||
|
|
||||||
def setup(self, config):
|
def setup(self, config):
|
||||||
"""Set up a full entity component.
|
"""Set up a full entity component.
|
||||||
@ -86,11 +88,13 @@ class EntityComponent(object):
|
|||||||
scan_interval = platform_config.get(
|
scan_interval = platform_config.get(
|
||||||
CONF_SCAN_INTERVAL,
|
CONF_SCAN_INTERVAL,
|
||||||
getattr(platform, 'SCAN_INTERVAL', self.scan_interval))
|
getattr(platform, 'SCAN_INTERVAL', self.scan_interval))
|
||||||
|
entity_namespace = platform_config.get(CONF_ENTITY_NAMESPACE)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
platform.setup_platform(
|
platform.setup_platform(
|
||||||
self.hass, platform_config,
|
self.hass, platform_config,
|
||||||
EntityPlatform(self, scan_interval).add_entities,
|
EntityPlatform(self, scan_interval,
|
||||||
|
entity_namespace).add_entities,
|
||||||
discovery_info)
|
discovery_info)
|
||||||
|
|
||||||
self.hass.config.components.append(
|
self.hass.config.components.append(
|
||||||
@ -99,7 +103,7 @@ class EntityComponent(object):
|
|||||||
self.logger.exception(
|
self.logger.exception(
|
||||||
'Error while setting up platform %s', platform_type)
|
'Error while setting up platform %s', platform_type)
|
||||||
|
|
||||||
def add_entity(self, entity):
|
def add_entity(self, entity, platform=None):
|
||||||
"""Add entity to component."""
|
"""Add entity to component."""
|
||||||
if entity is None or entity in self.entities.values():
|
if entity is None or entity in self.entities.values():
|
||||||
return False
|
return False
|
||||||
@ -107,8 +111,14 @@ class EntityComponent(object):
|
|||||||
entity.hass = self.hass
|
entity.hass = self.hass
|
||||||
|
|
||||||
if getattr(entity, 'entity_id', None) is None:
|
if getattr(entity, 'entity_id', None) is None:
|
||||||
|
object_id = entity.name or DEVICE_DEFAULT_NAME
|
||||||
|
|
||||||
|
if platform is not None and platform.entity_namespace is not None:
|
||||||
|
object_id = '{} {}'.format(platform.entity_namespace,
|
||||||
|
object_id)
|
||||||
|
|
||||||
entity.entity_id = generate_entity_id(
|
entity.entity_id = generate_entity_id(
|
||||||
self.entity_id_format, entity.name,
|
self.entity_id_format, object_id,
|
||||||
self.entities.keys())
|
self.entities.keys())
|
||||||
|
|
||||||
self.entities[entity.entity_id] = entity
|
self.entities[entity.entity_id] = entity
|
||||||
@ -130,10 +140,11 @@ class EntityPlatform(object):
|
|||||||
"""Keep track of entities for a single platform."""
|
"""Keep track of entities for a single platform."""
|
||||||
|
|
||||||
# pylint: disable=too-few-public-methods
|
# pylint: disable=too-few-public-methods
|
||||||
def __init__(self, component, scan_interval):
|
def __init__(self, component, scan_interval, entity_namespace):
|
||||||
"""Initalize the entity platform."""
|
"""Initalize the entity platform."""
|
||||||
self.component = component
|
self.component = component
|
||||||
self.scan_interval = scan_interval
|
self.scan_interval = scan_interval
|
||||||
|
self.entity_namespace = entity_namespace
|
||||||
self.platform_entities = []
|
self.platform_entities = []
|
||||||
self.is_polling = False
|
self.is_polling = False
|
||||||
|
|
||||||
@ -141,7 +152,7 @@ class EntityPlatform(object):
|
|||||||
"""Add entities for a single platform."""
|
"""Add entities for a single platform."""
|
||||||
with self.component.lock:
|
with self.component.lock:
|
||||||
for entity in new_entities:
|
for entity in new_entities:
|
||||||
if self.component.add_entity(entity):
|
if self.component.add_entity(entity, self):
|
||||||
self.platform_entities.append(entity)
|
self.platform_entities.append(entity)
|
||||||
|
|
||||||
self.component.update_group()
|
self.component.update_group()
|
||||||
|
@ -290,3 +290,28 @@ class TestHelpersEntityComponent(unittest.TestCase):
|
|||||||
|
|
||||||
assert mock_track.called
|
assert mock_track.called
|
||||||
assert [0, 30] == list(mock_track.call_args[1]['second'])
|
assert [0, 30] == list(mock_track.call_args[1]['second'])
|
||||||
|
|
||||||
|
def test_set_entity_namespace_via_config(self):
|
||||||
|
"""Test setting an entity namespace."""
|
||||||
|
def platform_setup(hass, config, add_devices, discovery_info=None):
|
||||||
|
"""Test the platform setup."""
|
||||||
|
add_devices([
|
||||||
|
EntityTest(name='beer'),
|
||||||
|
EntityTest(name=None),
|
||||||
|
])
|
||||||
|
|
||||||
|
platform = MockPlatform(platform_setup)
|
||||||
|
|
||||||
|
loader.set_component('test_domain.platform', platform)
|
||||||
|
|
||||||
|
component = EntityComponent(_LOGGER, DOMAIN, self.hass)
|
||||||
|
|
||||||
|
component.setup({
|
||||||
|
DOMAIN: {
|
||||||
|
'platform': 'platform',
|
||||||
|
'entity_namespace': 'yummy'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert sorted(self.hass.states.entity_ids()) == \
|
||||||
|
['test_domain.yummy_beer', 'test_domain.yummy_unnamed_device']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user