Template platform tweaks (#32037)
* Remove unnecessary boolean return from platform setup * Fix template cover validationpull/32041/head
parent
2e35190aff
commit
ce710f1e0b
|
@ -103,12 +103,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
attribute_templates,
|
attribute_templates,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if not sensors:
|
|
||||||
_LOGGER.error("No sensors added")
|
|
||||||
return False
|
|
||||||
|
|
||||||
async_add_entities(sensors)
|
async_add_entities(sensors)
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class BinarySensorTemplate(BinarySensorDevice):
|
class BinarySensorTemplate(BinarySensorDevice):
|
||||||
|
|
|
@ -65,30 +65,33 @@ TILT_FEATURES = (
|
||||||
| SUPPORT_SET_TILT_POSITION
|
| SUPPORT_SET_TILT_POSITION
|
||||||
)
|
)
|
||||||
|
|
||||||
COVER_SCHEMA = vol.Schema(
|
COVER_SCHEMA = vol.All(
|
||||||
{
|
vol.Schema(
|
||||||
vol.Inclusive(OPEN_ACTION, CONF_OPEN_OR_CLOSE): cv.SCRIPT_SCHEMA,
|
{
|
||||||
vol.Inclusive(CLOSE_ACTION, CONF_OPEN_OR_CLOSE): cv.SCRIPT_SCHEMA,
|
vol.Inclusive(OPEN_ACTION, CONF_OPEN_OR_CLOSE): cv.SCRIPT_SCHEMA,
|
||||||
vol.Optional(STOP_ACTION): cv.SCRIPT_SCHEMA,
|
vol.Inclusive(CLOSE_ACTION, CONF_OPEN_OR_CLOSE): cv.SCRIPT_SCHEMA,
|
||||||
vol.Exclusive(
|
vol.Optional(STOP_ACTION): cv.SCRIPT_SCHEMA,
|
||||||
CONF_POSITION_TEMPLATE, CONF_VALUE_OR_POSITION_TEMPLATE
|
vol.Exclusive(
|
||||||
): cv.template,
|
CONF_POSITION_TEMPLATE, CONF_VALUE_OR_POSITION_TEMPLATE
|
||||||
vol.Exclusive(
|
): cv.template,
|
||||||
CONF_VALUE_TEMPLATE, CONF_VALUE_OR_POSITION_TEMPLATE
|
vol.Exclusive(
|
||||||
): cv.template,
|
CONF_VALUE_TEMPLATE, CONF_VALUE_OR_POSITION_TEMPLATE
|
||||||
vol.Optional(CONF_AVAILABILITY_TEMPLATE): cv.template,
|
): cv.template,
|
||||||
vol.Optional(CONF_POSITION_TEMPLATE): cv.template,
|
vol.Optional(CONF_AVAILABILITY_TEMPLATE): cv.template,
|
||||||
vol.Optional(CONF_TILT_TEMPLATE): cv.template,
|
vol.Optional(CONF_POSITION_TEMPLATE): cv.template,
|
||||||
vol.Optional(CONF_ICON_TEMPLATE): cv.template,
|
vol.Optional(CONF_TILT_TEMPLATE): cv.template,
|
||||||
vol.Optional(CONF_ENTITY_PICTURE_TEMPLATE): cv.template,
|
vol.Optional(CONF_ICON_TEMPLATE): cv.template,
|
||||||
vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,
|
vol.Optional(CONF_ENTITY_PICTURE_TEMPLATE): cv.template,
|
||||||
vol.Optional(CONF_OPTIMISTIC): cv.boolean,
|
vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,
|
||||||
vol.Optional(CONF_TILT_OPTIMISTIC): cv.boolean,
|
vol.Optional(CONF_OPTIMISTIC): cv.boolean,
|
||||||
vol.Optional(POSITION_ACTION): cv.SCRIPT_SCHEMA,
|
vol.Optional(CONF_TILT_OPTIMISTIC): cv.boolean,
|
||||||
vol.Optional(TILT_ACTION): cv.SCRIPT_SCHEMA,
|
vol.Optional(POSITION_ACTION): cv.SCRIPT_SCHEMA,
|
||||||
vol.Optional(CONF_FRIENDLY_NAME): cv.string,
|
vol.Optional(TILT_ACTION): cv.SCRIPT_SCHEMA,
|
||||||
vol.Optional(CONF_ENTITY_ID): cv.entity_ids,
|
vol.Optional(CONF_FRIENDLY_NAME): cv.string,
|
||||||
}
|
vol.Optional(CONF_ENTITY_ID): cv.entity_ids,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
cv.has_at_least_one_key(OPEN_ACTION, POSITION_ACTION),
|
||||||
)
|
)
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||||
|
@ -118,12 +121,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
optimistic = device_config.get(CONF_OPTIMISTIC)
|
optimistic = device_config.get(CONF_OPTIMISTIC)
|
||||||
tilt_optimistic = device_config.get(CONF_TILT_OPTIMISTIC)
|
tilt_optimistic = device_config.get(CONF_TILT_OPTIMISTIC)
|
||||||
|
|
||||||
if position_action is None and open_action is None:
|
|
||||||
_LOGGER.error(
|
|
||||||
"Must specify at least one of %s" or "%s", OPEN_ACTION, POSITION_ACTION
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
templates = {
|
templates = {
|
||||||
CONF_VALUE_TEMPLATE: state_template,
|
CONF_VALUE_TEMPLATE: state_template,
|
||||||
CONF_POSITION_TEMPLATE: position_template,
|
CONF_POSITION_TEMPLATE: position_template,
|
||||||
|
@ -160,12 +157,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
entity_ids,
|
entity_ids,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if not covers:
|
|
||||||
_LOGGER.error("No covers added")
|
|
||||||
return False
|
|
||||||
|
|
||||||
async_add_entities(covers)
|
async_add_entities(covers)
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class CoverTemplate(CoverDevice):
|
class CoverTemplate(CoverDevice):
|
||||||
|
|
|
@ -131,12 +131,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if not lights:
|
|
||||||
_LOGGER.error("No lights added")
|
|
||||||
return False
|
|
||||||
|
|
||||||
async_add_entities(lights)
|
async_add_entities(lights)
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class LightTemplate(Light):
|
class LightTemplate(Light):
|
||||||
|
|
|
@ -93,12 +93,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if not switches:
|
|
||||||
_LOGGER.error("No switches added")
|
|
||||||
return False
|
|
||||||
|
|
||||||
async_add_entities(switches)
|
async_add_entities(switches)
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class SwitchTemplate(SwitchDevice):
|
class SwitchTemplate(SwitchDevice):
|
||||||
|
|
|
@ -270,26 +270,22 @@ async def test_template_mutex(hass, calls):
|
||||||
assert hass.states.async_all() == []
|
assert hass.states.async_all() == []
|
||||||
|
|
||||||
|
|
||||||
async def test_template_open_or_position(hass, calls):
|
async def test_template_open_or_position(hass, caplog):
|
||||||
"""Test that at least one of open_cover or set_position is used."""
|
"""Test that at least one of open_cover or set_position is used."""
|
||||||
with assert_setup_component(1, "cover"):
|
assert await setup.async_setup_component(
|
||||||
assert await setup.async_setup_component(
|
hass,
|
||||||
hass,
|
"cover",
|
||||||
"cover",
|
{
|
||||||
{
|
"cover": {
|
||||||
"cover": {
|
"platform": "template",
|
||||||
"platform": "template",
|
"covers": {"test_template_cover": {"value_template": "{{ 1 == 1 }}"}},
|
||||||
"covers": {
|
}
|
||||||
"test_template_cover": {"value_template": "{{ 1 == 1 }}"}
|
},
|
||||||
},
|
)
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
await hass.async_start()
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert hass.states.async_all() == []
|
assert hass.states.async_all() == []
|
||||||
|
assert "Invalid config for [cover.template]" in caplog.text
|
||||||
|
|
||||||
|
|
||||||
async def test_template_open_and_close(hass, calls):
|
async def test_template_open_and_close(hass, calls):
|
||||||
|
|
Loading…
Reference in New Issue