mirror of
https://github.com/home-assistant/core.git
synced 2025-07-13 16:27:08 +00:00
Add a load_platform mechanism (#2012)
* discovery.load_platform method * rm grep
This commit is contained in:
parent
1d0bc1ee66
commit
ec9544b9c3
2
.gitignore
vendored
2
.gitignore
vendored
@ -83,3 +83,5 @@ venv
|
|||||||
# vimmy stuff
|
# vimmy stuff
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
|
|
||||||
|
ctags.tmp
|
||||||
|
@ -19,6 +19,8 @@ REQUIREMENTS = ['netdisco==0.6.6']
|
|||||||
|
|
||||||
SCAN_INTERVAL = 300 # seconds
|
SCAN_INTERVAL = 300 # seconds
|
||||||
|
|
||||||
|
LOAD_PLATFORM = 'load_platform'
|
||||||
|
|
||||||
SERVICE_WEMO = 'belkin_wemo'
|
SERVICE_WEMO = 'belkin_wemo'
|
||||||
SERVICE_HUE = 'philips_hue'
|
SERVICE_HUE = 'philips_hue'
|
||||||
SERVICE_CAST = 'google_cast'
|
SERVICE_CAST = 'google_cast'
|
||||||
@ -73,6 +75,32 @@ def discover(hass, service, discovered=None, component=None, hass_config=None):
|
|||||||
hass.bus.fire(EVENT_PLATFORM_DISCOVERED, data)
|
hass.bus.fire(EVENT_PLATFORM_DISCOVERED, data)
|
||||||
|
|
||||||
|
|
||||||
|
def load_platform(hass, component, platform, info=None, hass_config=None):
|
||||||
|
"""Helper method for generic platform loading.
|
||||||
|
|
||||||
|
This method allows a platform to be loaded dynamically without it being
|
||||||
|
known at runtime (in the DISCOVERY_PLATFORMS list of the component).
|
||||||
|
Advantages of using this method:
|
||||||
|
- Any component & platforms combination can be dynamically added
|
||||||
|
- A component (i.e. light) does not have to import every component
|
||||||
|
that can dynamically add a platform (e.g. wemo, wink, insteon_hub)
|
||||||
|
- Custom user components can take advantage of discovery/loading
|
||||||
|
|
||||||
|
Target components will be loaded and an EVENT_PLATFORM_DISCOVERED will be
|
||||||
|
fired to load the platform. The event will contain:
|
||||||
|
{ ATTR_SERVICE = LOAD_PLATFORM + '.' + <<component>>
|
||||||
|
ATTR_DISCOVERED = {LOAD_PLATFORM: <<platform>>} }
|
||||||
|
|
||||||
|
* dev note: This listener can be found in entity_component.py
|
||||||
|
"""
|
||||||
|
if info is None:
|
||||||
|
info = {LOAD_PLATFORM: platform}
|
||||||
|
else:
|
||||||
|
info[LOAD_PLATFORM] = platform
|
||||||
|
discover(hass, LOAD_PLATFORM + '.' + component, info, component,
|
||||||
|
hass_config)
|
||||||
|
|
||||||
|
|
||||||
def setup(hass, config):
|
def setup(hass, config):
|
||||||
"""Start a discovery service."""
|
"""Start a discovery service."""
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -55,12 +55,24 @@ class EntityComponent(object):
|
|||||||
self._setup_platform(p_type, p_config)
|
self._setup_platform(p_type, p_config)
|
||||||
|
|
||||||
if self.discovery_platforms:
|
if self.discovery_platforms:
|
||||||
|
# Discovery listener for all items in discovery_platforms array
|
||||||
|
# passed from a component's setup method (e.g. light/__init__.py)
|
||||||
discovery.listen(
|
discovery.listen(
|
||||||
self.hass, self.discovery_platforms.keys(),
|
self.hass, self.discovery_platforms.keys(),
|
||||||
lambda service, info:
|
lambda service, info:
|
||||||
self._setup_platform(self.discovery_platforms[service], {},
|
self._setup_platform(self.discovery_platforms[service], {},
|
||||||
info))
|
info))
|
||||||
|
|
||||||
|
# Generic discovery listener for loading platform dynamically
|
||||||
|
# Refer to: homeassistant.components.discovery.load_platform()
|
||||||
|
def load_platform_callback(service, info):
|
||||||
|
"""Callback to load a platform."""
|
||||||
|
platform = info.pop(discovery.LOAD_PLATFORM)
|
||||||
|
self._setup_platform(platform, {}, info if info else None)
|
||||||
|
discovery.listen(
|
||||||
|
self.hass, discovery.LOAD_PLATFORM + '.' + self.domain,
|
||||||
|
load_platform_callback)
|
||||||
|
|
||||||
def extract_from_service(self, service):
|
def extract_from_service(self, service):
|
||||||
"""Extract all known entities from a service call.
|
"""Extract all known entities from a service call.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user