mirror of
https://github.com/home-assistant/core.git
synced 2025-10-09 03:39:35 +00:00
Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d196fd136d | ||
![]() |
4f78674a4c | ||
![]() |
a7aca10668 | ||
![]() |
03b1c6ddee | ||
![]() |
661f1b69f2 | ||
![]() |
ccb34083fe | ||
![]() |
7f6b3c1130 | ||
![]() |
f2c3f76b8e | ||
![]() |
b6a3bcf87f | ||
![]() |
65423bb62b | ||
![]() |
104665d849 | ||
![]() |
fb1ba86b08 | ||
![]() |
cee72724b6 |
@@ -3,7 +3,8 @@
|
|||||||
"name": "Automation",
|
"name": "Automation",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/automation",
|
"documentation": "https://www.home-assistant.io/integrations/automation",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["device_automation", "group", "webhook"],
|
"dependencies": [],
|
||||||
|
"after_dependencies": ["device_automation", "webhook"],
|
||||||
"codeowners": ["@home-assistant/core"],
|
"codeowners": ["@home-assistant/core"],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Cover",
|
"name": "Cover",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/cover",
|
"documentation": "https://www.home-assistant.io/integrations/cover",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": ["@home-assistant/core"],
|
"codeowners": ["@home-assistant/core"],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,8 @@
|
|||||||
"name": "Presence-based Lights",
|
"name": "Presence-based Lights",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/device_sun_light_trigger",
|
"documentation": "https://www.home-assistant.io/integrations/device_sun_light_trigger",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["device_tracker", "group", "light", "person"],
|
"dependencies": [],
|
||||||
|
"after_dependencies": ["device_tracker", "group", "light", "person"],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,8 @@
|
|||||||
"name": "Device Tracker",
|
"name": "Device Tracker",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/device_tracker",
|
"documentation": "https://www.home-assistant.io/integrations/device_tracker",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group", "zone"],
|
"dependencies": ["zone"],
|
||||||
|
"after_dependencies": [],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -149,7 +149,12 @@ class EvoZone(EvoChild, EvoClimateDevice):
|
|||||||
"""Initialize a Honeywell TCC Zone."""
|
"""Initialize a Honeywell TCC Zone."""
|
||||||
super().__init__(evo_broker, evo_device)
|
super().__init__(evo_broker, evo_device)
|
||||||
|
|
||||||
|
if evo_device.modelType.startswith("VisionProWifi"):
|
||||||
|
# this system does not have a distinct ID for the zone
|
||||||
|
self._unique_id = f"{evo_device.zoneId}z"
|
||||||
|
else:
|
||||||
self._unique_id = evo_device.zoneId
|
self._unique_id = evo_device.zoneId
|
||||||
|
|
||||||
self._name = evo_device.name
|
self._name = evo_device.name
|
||||||
self._icon = "mdi:radiator"
|
self._icon = "mdi:radiator"
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Fan",
|
"name": "Fan",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/fan",
|
"documentation": "https://www.home-assistant.io/integrations/fan",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Home Assistant Frontend",
|
"name": "Home Assistant Frontend",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/frontend",
|
"documentation": "https://www.home-assistant.io/integrations/frontend",
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"home-assistant-frontend==20200313.0"
|
"home-assistant-frontend==20200316.1"
|
||||||
],
|
],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"api",
|
"api",
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
"domain": "insteon",
|
"domain": "insteon",
|
||||||
"name": "Insteon",
|
"name": "Insteon",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/insteon",
|
"documentation": "https://www.home-assistant.io/integrations/insteon",
|
||||||
"requirements": ["insteonplm==0.16.7"],
|
"requirements": ["insteonplm==0.16.8"],
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"codeowners": []
|
"codeowners": []
|
||||||
}
|
}
|
||||||
|
@@ -306,6 +306,7 @@ class KonnectedView(HomeAssistantView):
|
|||||||
[
|
[
|
||||||
entry.data[CONF_ACCESS_TOKEN]
|
entry.data[CONF_ACCESS_TOKEN]
|
||||||
for entry in hass.config_entries.async_entries(DOMAIN)
|
for entry in hass.config_entries.async_entries(DOMAIN)
|
||||||
|
if entry.data.get(CONF_ACCESS_TOKEN)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
if auth is None or not next(
|
if auth is None or not next(
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Light",
|
"name": "Light",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/light",
|
"documentation": "https://www.home-assistant.io/integrations/light",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Lock",
|
"name": "Lock",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/lock",
|
"documentation": "https://www.home-assistant.io/integrations/lock",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -4,10 +4,14 @@ import logging
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components import frontend
|
from homeassistant.components import frontend
|
||||||
|
from homeassistant.config import async_hass_config_yaml, async_process_component_config
|
||||||
from homeassistant.const import CONF_FILENAME
|
from homeassistant.const import CONF_FILENAME
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.helpers import collection, config_validation as cv
|
from homeassistant.helpers import collection, config_validation as cv
|
||||||
|
from homeassistant.helpers.service import async_register_admin_service
|
||||||
|
from homeassistant.helpers.typing import ConfigType, HomeAssistantType, ServiceCallType
|
||||||
|
from homeassistant.loader import async_get_integration
|
||||||
from homeassistant.util import sanitize_filename
|
from homeassistant.util import sanitize_filename
|
||||||
|
|
||||||
from . import dashboard, resources, websocket
|
from . import dashboard, resources, websocket
|
||||||
@@ -25,8 +29,10 @@ from .const import (
|
|||||||
MODE_STORAGE,
|
MODE_STORAGE,
|
||||||
MODE_YAML,
|
MODE_YAML,
|
||||||
RESOURCE_CREATE_FIELDS,
|
RESOURCE_CREATE_FIELDS,
|
||||||
|
RESOURCE_RELOAD_SERVICE_SCHEMA,
|
||||||
RESOURCE_SCHEMA,
|
RESOURCE_SCHEMA,
|
||||||
RESOURCE_UPDATE_FIELDS,
|
RESOURCE_UPDATE_FIELDS,
|
||||||
|
SERVICE_RELOAD_RESOURCES,
|
||||||
STORAGE_DASHBOARD_CREATE_FIELDS,
|
STORAGE_DASHBOARD_CREATE_FIELDS,
|
||||||
STORAGE_DASHBOARD_UPDATE_FIELDS,
|
STORAGE_DASHBOARD_UPDATE_FIELDS,
|
||||||
url_slug,
|
url_slug,
|
||||||
@@ -62,29 +68,41 @@ CONFIG_SCHEMA = vol.Schema(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_setup(hass, config):
|
async def async_setup(hass: HomeAssistantType, config: ConfigType):
|
||||||
"""Set up the Lovelace commands."""
|
"""Set up the Lovelace commands."""
|
||||||
mode = config[DOMAIN][CONF_MODE]
|
mode = config[DOMAIN][CONF_MODE]
|
||||||
yaml_resources = config[DOMAIN].get(CONF_RESOURCES)
|
yaml_resources = config[DOMAIN].get(CONF_RESOURCES)
|
||||||
|
|
||||||
frontend.async_register_built_in_panel(hass, DOMAIN, config={"mode": mode})
|
frontend.async_register_built_in_panel(hass, DOMAIN, config={"mode": mode})
|
||||||
|
|
||||||
|
async def reload_resources_service_handler(service_call: ServiceCallType) -> None:
|
||||||
|
"""Reload yaml resources."""
|
||||||
|
try:
|
||||||
|
conf = await async_hass_config_yaml(hass)
|
||||||
|
except HomeAssistantError as err:
|
||||||
|
_LOGGER.error(err)
|
||||||
|
return
|
||||||
|
|
||||||
|
integration = await async_get_integration(hass, DOMAIN)
|
||||||
|
|
||||||
|
config = await async_process_component_config(hass, conf, integration)
|
||||||
|
|
||||||
|
resource_collection = await create_yaml_resource_col(
|
||||||
|
hass, config[DOMAIN].get(CONF_RESOURCES)
|
||||||
|
)
|
||||||
|
hass.data[DOMAIN]["resources"] = resource_collection
|
||||||
|
|
||||||
if mode == MODE_YAML:
|
if mode == MODE_YAML:
|
||||||
default_config = dashboard.LovelaceYAML(hass, None, None)
|
default_config = dashboard.LovelaceYAML(hass, None, None)
|
||||||
|
resource_collection = await create_yaml_resource_col(hass, yaml_resources)
|
||||||
|
|
||||||
if yaml_resources is None:
|
async_register_admin_service(
|
||||||
try:
|
hass,
|
||||||
ll_conf = await default_config.async_load(False)
|
DOMAIN,
|
||||||
except HomeAssistantError:
|
SERVICE_RELOAD_RESOURCES,
|
||||||
pass
|
reload_resources_service_handler,
|
||||||
else:
|
schema=RESOURCE_RELOAD_SERVICE_SCHEMA,
|
||||||
if CONF_RESOURCES in ll_conf:
|
|
||||||
_LOGGER.warning(
|
|
||||||
"Resources need to be specified in your configuration.yaml. Please see the docs."
|
|
||||||
)
|
)
|
||||||
yaml_resources = ll_conf[CONF_RESOURCES]
|
|
||||||
|
|
||||||
resource_collection = resources.ResourceYAMLCollection(yaml_resources or [])
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
default_config = dashboard.LovelaceStorage(hass, None)
|
default_config = dashboard.LovelaceStorage(hass, None)
|
||||||
@@ -196,6 +214,24 @@ async def async_setup(hass, config):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
async def create_yaml_resource_col(hass, yaml_resources):
|
||||||
|
"""Create yaml resources collection."""
|
||||||
|
if yaml_resources is None:
|
||||||
|
default_config = dashboard.LovelaceYAML(hass, None, None)
|
||||||
|
try:
|
||||||
|
ll_conf = await default_config.async_load(False)
|
||||||
|
except HomeAssistantError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if CONF_RESOURCES in ll_conf:
|
||||||
|
_LOGGER.warning(
|
||||||
|
"Resources need to be specified in your configuration.yaml. Please see the docs."
|
||||||
|
)
|
||||||
|
yaml_resources = ll_conf[CONF_RESOURCES]
|
||||||
|
|
||||||
|
return resources.ResourceYAMLCollection(yaml_resources or [])
|
||||||
|
|
||||||
|
|
||||||
async def system_health_info(hass):
|
async def system_health_info(hass):
|
||||||
"""Get info for the info page."""
|
"""Get info for the info page."""
|
||||||
return await hass.data[DOMAIN]["dashboards"][None].async_get_info()
|
return await hass.data[DOMAIN]["dashboards"][None].async_get_info()
|
||||||
|
@@ -41,6 +41,9 @@ RESOURCE_UPDATE_FIELDS = {
|
|||||||
vol.Optional(CONF_URL): cv.string,
|
vol.Optional(CONF_URL): cv.string,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SERVICE_RELOAD_RESOURCES = "reload_resources"
|
||||||
|
RESOURCE_RELOAD_SERVICE_SCHEMA = vol.Schema({})
|
||||||
|
|
||||||
CONF_TITLE = "title"
|
CONF_TITLE = "title"
|
||||||
CONF_REQUIRE_ADMIN = "require_admin"
|
CONF_REQUIRE_ADMIN = "require_admin"
|
||||||
CONF_SHOW_IN_SIDEBAR = "show_in_sidebar"
|
CONF_SHOW_IN_SIDEBAR = "show_in_sidebar"
|
||||||
|
@@ -88,7 +88,7 @@ class LovelaceStorage(LovelaceConfig):
|
|||||||
storage_key = CONFIG_STORAGE_KEY_DEFAULT
|
storage_key = CONFIG_STORAGE_KEY_DEFAULT
|
||||||
else:
|
else:
|
||||||
url_path = config[CONF_URL_PATH]
|
url_path = config[CONF_URL_PATH]
|
||||||
storage_key = CONFIG_STORAGE_KEY.format(url_path)
|
storage_key = CONFIG_STORAGE_KEY.format(config["id"])
|
||||||
|
|
||||||
super().__init__(hass, url_path, config)
|
super().__init__(hass, url_path, config)
|
||||||
|
|
||||||
|
4
homeassistant/components/lovelace/services.yaml
Normal file
4
homeassistant/components/lovelace/services.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Describes the format for available lovelace services
|
||||||
|
|
||||||
|
reload_resources:
|
||||||
|
description: Reload Lovelace resources from yaml configuration.
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Plant Monitor",
|
"name": "Plant Monitor",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/plant",
|
"documentation": "https://www.home-assistant.io/integrations/plant",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group", "zone"],
|
"dependencies": [],
|
||||||
"after_dependencies": ["recorder"],
|
"after_dependencies": ["recorder"],
|
||||||
"codeowners": ["@ChristianKuehnel"],
|
"codeowners": ["@ChristianKuehnel"],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
|
@@ -3,6 +3,6 @@
|
|||||||
"name": "Remote",
|
"name": "Remote",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/remote",
|
"documentation": "https://www.home-assistant.io/integrations/remote",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": []
|
"codeowners": []
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Scripts",
|
"name": "Scripts",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/script",
|
"documentation": "https://www.home-assistant.io/integrations/script",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": ["@home-assistant/core"],
|
"codeowners": ["@home-assistant/core"],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Switch",
|
"name": "Switch",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/switch",
|
"documentation": "https://www.home-assistant.io/integrations/switch",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"quality_scale": "internal"
|
"quality_scale": "internal"
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/tesla",
|
"documentation": "https://www.home-assistant.io/integrations/tesla",
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"teslajsonpy==0.4.0"
|
"teslajsonpy==0.5.1"
|
||||||
],
|
],
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"codeowners": [
|
"codeowners": [
|
||||||
|
@@ -3,6 +3,6 @@
|
|||||||
"name": "Vacuum",
|
"name": "Vacuum",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/vacuum",
|
"documentation": "https://www.home-assistant.io/integrations/vacuum",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"dependencies": ["group"],
|
"dependencies": [],
|
||||||
"codeowners": []
|
"codeowners": []
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/zha",
|
"documentation": "https://www.home-assistant.io/integrations/zha",
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"bellows-homeassistant==0.14.0",
|
"bellows-homeassistant==0.14.0",
|
||||||
"zha-quirks==0.0.36",
|
"zha-quirks==0.0.37",
|
||||||
"zigpy-cc==0.1.0",
|
"zigpy-cc==0.1.0",
|
||||||
"zigpy-deconz==0.7.0",
|
"zigpy-deconz==0.7.0",
|
||||||
"zigpy-homeassistant==0.16.0",
|
"zigpy-homeassistant==0.16.0",
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"name": "Z-Wave",
|
"name": "Z-Wave",
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/zwave",
|
"documentation": "https://www.home-assistant.io/integrations/zwave",
|
||||||
"requirements": ["homeassistant-pyozw==0.1.8", "pydispatcher==2.0.5"],
|
"requirements": ["homeassistant-pyozw==0.1.9", "pydispatcher==2.0.5"],
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"codeowners": ["@home-assistant/z-wave"]
|
"codeowners": ["@home-assistant/z-wave"]
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
"""Constants used by Home Assistant components."""
|
"""Constants used by Home Assistant components."""
|
||||||
MAJOR_VERSION = 0
|
MAJOR_VERSION = 0
|
||||||
MINOR_VERSION = 107
|
MINOR_VERSION = 107
|
||||||
PATCH_VERSION = "0b4"
|
PATCH_VERSION = "0b6"
|
||||||
__short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
__short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
||||||
__version__ = f"{__short_version__}.{PATCH_VERSION}"
|
__version__ = f"{__short_version__}.{PATCH_VERSION}"
|
||||||
REQUIRED_PYTHON_VER = (3, 7, 0)
|
REQUIRED_PYTHON_VER = (3, 7, 0)
|
||||||
|
@@ -12,7 +12,7 @@ cryptography==2.8
|
|||||||
defusedxml==0.6.0
|
defusedxml==0.6.0
|
||||||
distro==1.4.0
|
distro==1.4.0
|
||||||
hass-nabucasa==0.32.2
|
hass-nabucasa==0.32.2
|
||||||
home-assistant-frontend==20200313.0
|
home-assistant-frontend==20200316.1
|
||||||
importlib-metadata==1.5.0
|
importlib-metadata==1.5.0
|
||||||
jinja2>=2.10.3
|
jinja2>=2.10.3
|
||||||
netdisco==2.6.0
|
netdisco==2.6.0
|
||||||
|
@@ -696,10 +696,10 @@ hole==0.5.0
|
|||||||
holidays==0.10.1
|
holidays==0.10.1
|
||||||
|
|
||||||
# homeassistant.components.frontend
|
# homeassistant.components.frontend
|
||||||
home-assistant-frontend==20200313.0
|
home-assistant-frontend==20200316.1
|
||||||
|
|
||||||
# homeassistant.components.zwave
|
# homeassistant.components.zwave
|
||||||
homeassistant-pyozw==0.1.8
|
homeassistant-pyozw==0.1.9
|
||||||
|
|
||||||
# homeassistant.components.homematicip_cloud
|
# homeassistant.components.homematicip_cloud
|
||||||
homematicip==0.10.17
|
homematicip==0.10.17
|
||||||
@@ -747,7 +747,7 @@ incomfort-client==0.4.0
|
|||||||
influxdb==5.2.3
|
influxdb==5.2.3
|
||||||
|
|
||||||
# homeassistant.components.insteon
|
# homeassistant.components.insteon
|
||||||
insteonplm==0.16.7
|
insteonplm==0.16.8
|
||||||
|
|
||||||
# homeassistant.components.iperf3
|
# homeassistant.components.iperf3
|
||||||
iperf3==0.1.11
|
iperf3==0.1.11
|
||||||
@@ -1996,7 +1996,7 @@ temperusb==1.5.3
|
|||||||
# tensorflow==1.13.2
|
# tensorflow==1.13.2
|
||||||
|
|
||||||
# homeassistant.components.tesla
|
# homeassistant.components.tesla
|
||||||
teslajsonpy==0.4.0
|
teslajsonpy==0.5.1
|
||||||
|
|
||||||
# homeassistant.components.thermoworks_smoke
|
# homeassistant.components.thermoworks_smoke
|
||||||
thermoworks_smoke==0.1.8
|
thermoworks_smoke==0.1.8
|
||||||
@@ -2158,7 +2158,7 @@ zengge==0.2
|
|||||||
zeroconf==0.24.5
|
zeroconf==0.24.5
|
||||||
|
|
||||||
# homeassistant.components.zha
|
# homeassistant.components.zha
|
||||||
zha-quirks==0.0.36
|
zha-quirks==0.0.37
|
||||||
|
|
||||||
# homeassistant.components.zhong_hong
|
# homeassistant.components.zhong_hong
|
||||||
zhong_hong_hvac==1.0.9
|
zhong_hong_hvac==1.0.9
|
||||||
|
@@ -263,10 +263,10 @@ hole==0.5.0
|
|||||||
holidays==0.10.1
|
holidays==0.10.1
|
||||||
|
|
||||||
# homeassistant.components.frontend
|
# homeassistant.components.frontend
|
||||||
home-assistant-frontend==20200313.0
|
home-assistant-frontend==20200316.1
|
||||||
|
|
||||||
# homeassistant.components.zwave
|
# homeassistant.components.zwave
|
||||||
homeassistant-pyozw==0.1.8
|
homeassistant-pyozw==0.1.9
|
||||||
|
|
||||||
# homeassistant.components.homematicip_cloud
|
# homeassistant.components.homematicip_cloud
|
||||||
homematicip==0.10.17
|
homematicip==0.10.17
|
||||||
@@ -684,7 +684,7 @@ sunwatcher==0.2.1
|
|||||||
tellduslive==0.10.10
|
tellduslive==0.10.10
|
||||||
|
|
||||||
# homeassistant.components.tesla
|
# homeassistant.components.tesla
|
||||||
teslajsonpy==0.4.0
|
teslajsonpy==0.5.1
|
||||||
|
|
||||||
# homeassistant.components.toon
|
# homeassistant.components.toon
|
||||||
toonapilib==3.2.4
|
toonapilib==3.2.4
|
||||||
@@ -747,7 +747,7 @@ yahooweather==0.10
|
|||||||
zeroconf==0.24.5
|
zeroconf==0.24.5
|
||||||
|
|
||||||
# homeassistant.components.zha
|
# homeassistant.components.zha
|
||||||
zha-quirks==0.0.36
|
zha-quirks==0.0.37
|
||||||
|
|
||||||
# homeassistant.components.zha
|
# homeassistant.components.zha
|
||||||
zigpy-cc==0.1.0
|
zigpy-cc==0.1.0
|
||||||
|
@@ -156,7 +156,7 @@ def calc_allowed_references(integration: Integration) -> Set[str]:
|
|||||||
"""Return a set of allowed references."""
|
"""Return a set of allowed references."""
|
||||||
allowed_references = (
|
allowed_references = (
|
||||||
ALLOWED_USED_COMPONENTS
|
ALLOWED_USED_COMPONENTS
|
||||||
| set(integration.manifest["dependencies"])
|
| set(integration.manifest.get("dependencies", []))
|
||||||
| set(integration.manifest.get("after_dependencies", []))
|
| set(integration.manifest.get("after_dependencies", []))
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -250,7 +250,7 @@ def validate(integrations: Dict[str, Integration], config):
|
|||||||
validate_dependencies(integrations, integration)
|
validate_dependencies(integrations, integration)
|
||||||
|
|
||||||
# check that all referenced dependencies exist
|
# check that all referenced dependencies exist
|
||||||
for dep in integration.manifest["dependencies"]:
|
for dep in integration.manifest.get("dependencies", []):
|
||||||
if dep not in integrations:
|
if dep not in integrations:
|
||||||
integration.add_error(
|
integration.add_error(
|
||||||
"dependencies", f"Dependency {dep} does not exist"
|
"dependencies", f"Dependency {dep} does not exist"
|
||||||
|
@@ -52,8 +52,8 @@ MANIFEST_SCHEMA = vol.Schema(
|
|||||||
vol.Url(), documentation_url # pylint: disable=no-value-for-parameter
|
vol.Url(), documentation_url # pylint: disable=no-value-for-parameter
|
||||||
),
|
),
|
||||||
vol.Optional("quality_scale"): vol.In(SUPPORTED_QUALITY_SCALES),
|
vol.Optional("quality_scale"): vol.In(SUPPORTED_QUALITY_SCALES),
|
||||||
vol.Required("requirements"): [str],
|
vol.Optional("requirements"): [str],
|
||||||
vol.Required("dependencies"): [str],
|
vol.Optional("dependencies"): [str],
|
||||||
vol.Optional("after_dependencies"): [str],
|
vol.Optional("after_dependencies"): [str],
|
||||||
vol.Required("codeowners"): [str],
|
vol.Required("codeowners"): [str],
|
||||||
vol.Optional("logo"): vol.Url(), # pylint: disable=no-value-for-parameter
|
vol.Optional("logo"): vol.Url(), # pylint: disable=no-value-for-parameter
|
||||||
|
@@ -582,6 +582,10 @@ async def test_state_updates(hass, aiohttp_client, mock_panel):
|
|||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
# Add empty data field to ensure we process it correctly (possible if entry is ignored)
|
||||||
|
entry = MockConfigEntry(domain="konnected", title="Konnected Alarm Panel", data={},)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
assert (
|
assert (
|
||||||
await async_setup_component(
|
await async_setup_component(
|
||||||
hass,
|
hass,
|
||||||
|
@@ -373,7 +373,6 @@ async def test_storage_dashboards(hass, hass_ws_client, hass_storage):
|
|||||||
assert response["result"]["icon"] == "mdi:map"
|
assert response["result"]["icon"] == "mdi:map"
|
||||||
|
|
||||||
dashboard_id = response["result"]["id"]
|
dashboard_id = response["result"]["id"]
|
||||||
dashboard_path = response["result"]["url_path"]
|
|
||||||
|
|
||||||
assert "created-url-path" in hass.data[frontend.DATA_PANELS]
|
assert "created-url-path" in hass.data[frontend.DATA_PANELS]
|
||||||
|
|
||||||
@@ -408,9 +407,9 @@ async def test_storage_dashboards(hass, hass_ws_client, hass_storage):
|
|||||||
)
|
)
|
||||||
response = await client.receive_json()
|
response = await client.receive_json()
|
||||||
assert response["success"]
|
assert response["success"]
|
||||||
assert hass_storage[dashboard.CONFIG_STORAGE_KEY.format(dashboard_path)][
|
assert hass_storage[dashboard.CONFIG_STORAGE_KEY.format(dashboard_id)]["data"] == {
|
||||||
"data"
|
"config": {"yo": "hello"}
|
||||||
] == {"config": {"yo": "hello"}}
|
}
|
||||||
assert len(events) == 1
|
assert len(events) == 1
|
||||||
assert events[0].data["url_path"] == "created-url-path"
|
assert events[0].data["url_path"] == "created-url-path"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user