mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 14:46:40 +00:00
[config] Deprecate more *_SCHEMA constants (#8763)
This commit is contained in:
parent
49f631d6c5
commit
bc0956019b
@ -5,6 +5,8 @@ from esphome.components import mqtt, web_server
|
|||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
CONF_CODE,
|
CONF_CODE,
|
||||||
|
CONF_ENTITY_CATEGORY,
|
||||||
|
CONF_ICON,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_MQTT_ID,
|
CONF_MQTT_ID,
|
||||||
CONF_ON_STATE,
|
CONF_ON_STATE,
|
||||||
@ -12,6 +14,7 @@ from esphome.const import (
|
|||||||
CONF_WEB_SERVER,
|
CONF_WEB_SERVER,
|
||||||
)
|
)
|
||||||
from esphome.core import CORE, coroutine_with_priority
|
from esphome.core import CORE, coroutine_with_priority
|
||||||
|
from esphome.cpp_generator import MockObjClass
|
||||||
from esphome.cpp_helpers import setup_entity
|
from esphome.cpp_helpers import setup_entity
|
||||||
|
|
||||||
CODEOWNERS = ["@grahambrown11", "@hwstar"]
|
CODEOWNERS = ["@grahambrown11", "@hwstar"]
|
||||||
@ -78,12 +81,11 @@ AlarmControlPanelCondition = alarm_control_panel_ns.class_(
|
|||||||
"AlarmControlPanelCondition", automation.Condition
|
"AlarmControlPanelCondition", automation.Condition
|
||||||
)
|
)
|
||||||
|
|
||||||
ALARM_CONTROL_PANEL_SCHEMA = (
|
_ALARM_CONTROL_PANEL_SCHEMA = (
|
||||||
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
||||||
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
||||||
.extend(
|
.extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(AlarmControlPanel),
|
|
||||||
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(
|
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(
|
||||||
mqtt.MQTTAlarmControlPanelComponent
|
mqtt.MQTTAlarmControlPanelComponent
|
||||||
),
|
),
|
||||||
@ -146,6 +148,33 @@ ALARM_CONTROL_PANEL_SCHEMA = (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def alarm_control_panel_schema(
|
||||||
|
class_: MockObjClass,
|
||||||
|
*,
|
||||||
|
entity_category: str = cv.UNDEFINED,
|
||||||
|
icon: str = cv.UNDEFINED,
|
||||||
|
) -> cv.Schema:
|
||||||
|
schema = {
|
||||||
|
cv.GenerateID(): cv.declare_id(class_),
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, default, validator in [
|
||||||
|
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
|
||||||
|
(CONF_ICON, icon, cv.icon),
|
||||||
|
]:
|
||||||
|
if default is not cv.UNDEFINED:
|
||||||
|
schema[cv.Optional(key, default=default)] = validator
|
||||||
|
|
||||||
|
return _ALARM_CONTROL_PANEL_SCHEMA.extend(schema)
|
||||||
|
|
||||||
|
|
||||||
|
# Remove before 2025.11.0
|
||||||
|
ALARM_CONTROL_PANEL_SCHEMA = alarm_control_panel_schema(AlarmControlPanel)
|
||||||
|
ALARM_CONTROL_PANEL_SCHEMA.add_extra(
|
||||||
|
cv.deprecated_schema_constant("alarm_control_panel")
|
||||||
|
)
|
||||||
|
|
||||||
ALARM_CONTROL_PANEL_ACTION_SCHEMA = maybe_simple_id(
|
ALARM_CONTROL_PANEL_ACTION_SCHEMA = maybe_simple_id(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.use_id(AlarmControlPanel),
|
cv.GenerateID(): cv.use_id(AlarmControlPanel),
|
||||||
@ -209,6 +238,12 @@ async def register_alarm_control_panel(var, config):
|
|||||||
await setup_alarm_control_panel_core_(var, config)
|
await setup_alarm_control_panel_core_(var, config)
|
||||||
|
|
||||||
|
|
||||||
|
async def new_alarm_control_panel(config, *args):
|
||||||
|
var = cg.new_Pvariable(config[CONF_ID], *args)
|
||||||
|
await register_alarm_control_panel(var, config)
|
||||||
|
return var
|
||||||
|
|
||||||
|
|
||||||
@automation.register_action(
|
@automation.register_action(
|
||||||
"alarm_control_panel.arm_away", ArmAwayAction, ALARM_CONTROL_PANEL_ACTION_SCHEMA
|
"alarm_control_panel.arm_away", ArmAwayAction, ALARM_CONTROL_PANEL_ACTION_SCHEMA
|
||||||
)
|
)
|
||||||
|
@ -11,9 +11,11 @@ from esphome.const import (
|
|||||||
CONF_CURRENT_TEMPERATURE_STATE_TOPIC,
|
CONF_CURRENT_TEMPERATURE_STATE_TOPIC,
|
||||||
CONF_CUSTOM_FAN_MODE,
|
CONF_CUSTOM_FAN_MODE,
|
||||||
CONF_CUSTOM_PRESET,
|
CONF_CUSTOM_PRESET,
|
||||||
|
CONF_ENTITY_CATEGORY,
|
||||||
CONF_FAN_MODE,
|
CONF_FAN_MODE,
|
||||||
CONF_FAN_MODE_COMMAND_TOPIC,
|
CONF_FAN_MODE_COMMAND_TOPIC,
|
||||||
CONF_FAN_MODE_STATE_TOPIC,
|
CONF_FAN_MODE_STATE_TOPIC,
|
||||||
|
CONF_ICON,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_MAX_TEMPERATURE,
|
CONF_MAX_TEMPERATURE,
|
||||||
CONF_MIN_TEMPERATURE,
|
CONF_MIN_TEMPERATURE,
|
||||||
@ -46,6 +48,7 @@ from esphome.const import (
|
|||||||
CONF_WEB_SERVER,
|
CONF_WEB_SERVER,
|
||||||
)
|
)
|
||||||
from esphome.core import CORE, coroutine_with_priority
|
from esphome.core import CORE, coroutine_with_priority
|
||||||
|
from esphome.cpp_generator import MockObjClass
|
||||||
from esphome.cpp_helpers import setup_entity
|
from esphome.cpp_helpers import setup_entity
|
||||||
|
|
||||||
IS_PLATFORM_COMPONENT = True
|
IS_PLATFORM_COMPONENT = True
|
||||||
@ -151,12 +154,11 @@ ControlTrigger = climate_ns.class_(
|
|||||||
"ControlTrigger", automation.Trigger.template(ClimateCall.operator("ref"))
|
"ControlTrigger", automation.Trigger.template(ClimateCall.operator("ref"))
|
||||||
)
|
)
|
||||||
|
|
||||||
CLIMATE_SCHEMA = (
|
_CLIMATE_SCHEMA = (
|
||||||
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
||||||
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
||||||
.extend(
|
.extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(Climate),
|
|
||||||
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTClimateComponent),
|
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTClimateComponent),
|
||||||
cv.Optional(CONF_VISUAL, default={}): cv.Schema(
|
cv.Optional(CONF_VISUAL, default={}): cv.Schema(
|
||||||
{
|
{
|
||||||
@ -245,6 +247,31 @@ CLIMATE_SCHEMA = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def climate_schema(
|
||||||
|
class_: MockObjClass,
|
||||||
|
*,
|
||||||
|
entity_category: str = cv.UNDEFINED,
|
||||||
|
icon: str = cv.UNDEFINED,
|
||||||
|
) -> cv.Schema:
|
||||||
|
schema = {
|
||||||
|
cv.GenerateID(): cv.declare_id(Climate),
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, default, validator in [
|
||||||
|
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
|
||||||
|
(CONF_ICON, icon, cv.icon),
|
||||||
|
]:
|
||||||
|
if default is not cv.UNDEFINED:
|
||||||
|
schema[cv.Optional(key, default=default)] = validator
|
||||||
|
|
||||||
|
return _CLIMATE_SCHEMA.extend(schema)
|
||||||
|
|
||||||
|
|
||||||
|
# Remove before 2025.11.0
|
||||||
|
CLIMATE_SCHEMA = climate_schema(Climate)
|
||||||
|
CLIMATE_SCHEMA.add_extra(cv.deprecated_schema_constant("climate"))
|
||||||
|
|
||||||
|
|
||||||
async def setup_climate_core_(var, config):
|
async def setup_climate_core_(var, config):
|
||||||
await setup_entity(var, config)
|
await setup_entity(var, config)
|
||||||
|
|
||||||
@ -419,6 +446,12 @@ async def register_climate(var, config):
|
|||||||
await setup_climate_core_(var, config)
|
await setup_climate_core_(var, config)
|
||||||
|
|
||||||
|
|
||||||
|
async def new_climate(config, *args):
|
||||||
|
var = cg.new_Pvariable(config[CONF_ID], *args)
|
||||||
|
await register_climate(var, config)
|
||||||
|
return var
|
||||||
|
|
||||||
|
|
||||||
CLIMATE_CONTROL_ACTION_SCHEMA = cv.Schema(
|
CLIMATE_CONTROL_ACTION_SCHEMA = cv.Schema(
|
||||||
{
|
{
|
||||||
cv.Required(CONF_ID): cv.use_id(Climate),
|
cv.Required(CONF_ID): cv.use_id(Climate),
|
||||||
|
@ -5,6 +5,8 @@ from esphome.components import mqtt, web_server
|
|||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
CONF_DEVICE_CLASS,
|
CONF_DEVICE_CLASS,
|
||||||
|
CONF_ENTITY_CATEGORY,
|
||||||
|
CONF_ICON,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_MQTT_ID,
|
CONF_MQTT_ID,
|
||||||
CONF_ON_OPEN,
|
CONF_ON_OPEN,
|
||||||
@ -31,6 +33,7 @@ from esphome.const import (
|
|||||||
DEVICE_CLASS_WINDOW,
|
DEVICE_CLASS_WINDOW,
|
||||||
)
|
)
|
||||||
from esphome.core import CORE, coroutine_with_priority
|
from esphome.core import CORE, coroutine_with_priority
|
||||||
|
from esphome.cpp_generator import MockObjClass
|
||||||
from esphome.cpp_helpers import setup_entity
|
from esphome.cpp_helpers import setup_entity
|
||||||
|
|
||||||
IS_PLATFORM_COMPONENT = True
|
IS_PLATFORM_COMPONENT = True
|
||||||
@ -89,12 +92,11 @@ CoverClosedTrigger = cover_ns.class_(
|
|||||||
|
|
||||||
CONF_ON_CLOSED = "on_closed"
|
CONF_ON_CLOSED = "on_closed"
|
||||||
|
|
||||||
COVER_SCHEMA = (
|
_COVER_SCHEMA = (
|
||||||
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
||||||
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
||||||
.extend(
|
.extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(Cover),
|
|
||||||
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTCoverComponent),
|
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTCoverComponent),
|
||||||
cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True),
|
cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True),
|
||||||
cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All(
|
cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All(
|
||||||
@ -124,6 +126,33 @@ COVER_SCHEMA = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def cover_schema(
|
||||||
|
class_: MockObjClass,
|
||||||
|
*,
|
||||||
|
device_class: str = cv.UNDEFINED,
|
||||||
|
entity_category: str = cv.UNDEFINED,
|
||||||
|
icon: str = cv.UNDEFINED,
|
||||||
|
) -> cv.Schema:
|
||||||
|
schema = {
|
||||||
|
cv.GenerateID(): cv.declare_id(class_),
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, default, validator in [
|
||||||
|
(CONF_DEVICE_CLASS, device_class, cv.one_of(*DEVICE_CLASSES, lower=True)),
|
||||||
|
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
|
||||||
|
(CONF_ICON, icon, cv.icon),
|
||||||
|
]:
|
||||||
|
if default is not cv.UNDEFINED:
|
||||||
|
schema[cv.Optional(key, default=default)] = validator
|
||||||
|
|
||||||
|
return _COVER_SCHEMA.extend(schema)
|
||||||
|
|
||||||
|
|
||||||
|
# Remove before 2025.11.0
|
||||||
|
COVER_SCHEMA = cover_schema(Cover)
|
||||||
|
COVER_SCHEMA.add_extra(cv.deprecated_schema_constant("cover"))
|
||||||
|
|
||||||
|
|
||||||
async def setup_cover_core_(var, config):
|
async def setup_cover_core_(var, config):
|
||||||
await setup_entity(var, config)
|
await setup_entity(var, config)
|
||||||
|
|
||||||
@ -163,6 +192,12 @@ async def register_cover(var, config):
|
|||||||
await setup_cover_core_(var, config)
|
await setup_cover_core_(var, config)
|
||||||
|
|
||||||
|
|
||||||
|
async def new_cover(config, *args):
|
||||||
|
var = cg.new_Pvariable(config[CONF_ID], *args)
|
||||||
|
await register_cover(var, config)
|
||||||
|
return var
|
||||||
|
|
||||||
|
|
||||||
COVER_ACTION_SCHEMA = maybe_simple_id(
|
COVER_ACTION_SCHEMA = maybe_simple_id(
|
||||||
{
|
{
|
||||||
cv.Required(CONF_ID): cv.use_id(Cover),
|
cv.Required(CONF_ID): cv.use_id(Cover),
|
||||||
|
@ -7,6 +7,8 @@ from esphome.const import (
|
|||||||
CONF_DIRECTION,
|
CONF_DIRECTION,
|
||||||
CONF_DIRECTION_COMMAND_TOPIC,
|
CONF_DIRECTION_COMMAND_TOPIC,
|
||||||
CONF_DIRECTION_STATE_TOPIC,
|
CONF_DIRECTION_STATE_TOPIC,
|
||||||
|
CONF_ENTITY_CATEGORY,
|
||||||
|
CONF_ICON,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_MQTT_ID,
|
CONF_MQTT_ID,
|
||||||
CONF_OFF_SPEED_CYCLE,
|
CONF_OFF_SPEED_CYCLE,
|
||||||
@ -82,12 +84,11 @@ FanPresetSetTrigger = fan_ns.class_(
|
|||||||
FanIsOnCondition = fan_ns.class_("FanIsOnCondition", automation.Condition.template())
|
FanIsOnCondition = fan_ns.class_("FanIsOnCondition", automation.Condition.template())
|
||||||
FanIsOffCondition = fan_ns.class_("FanIsOffCondition", automation.Condition.template())
|
FanIsOffCondition = fan_ns.class_("FanIsOffCondition", automation.Condition.template())
|
||||||
|
|
||||||
FAN_SCHEMA = (
|
_FAN_SCHEMA = (
|
||||||
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
||||||
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
||||||
.extend(
|
.extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(Fan),
|
|
||||||
cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum(
|
cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum(
|
||||||
RESTORE_MODES, upper=True, space="_"
|
RESTORE_MODES, upper=True, space="_"
|
||||||
),
|
),
|
||||||
@ -159,6 +160,37 @@ FAN_SCHEMA = (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def fan_schema(
|
||||||
|
class_: cg.Pvariable,
|
||||||
|
*,
|
||||||
|
entity_category: str = cv.UNDEFINED,
|
||||||
|
icon: str = cv.UNDEFINED,
|
||||||
|
default_restore_mode: str = cv.UNDEFINED,
|
||||||
|
) -> cv.Schema:
|
||||||
|
schema = {
|
||||||
|
cv.GenerateID(): cv.declare_id(class_),
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, default, validator in [
|
||||||
|
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
|
||||||
|
(CONF_ICON, icon, cv.icon),
|
||||||
|
(
|
||||||
|
CONF_RESTORE_MODE,
|
||||||
|
default_restore_mode,
|
||||||
|
cv.enum(RESTORE_MODES, upper=True, space="_"),
|
||||||
|
),
|
||||||
|
]:
|
||||||
|
if default is not cv.UNDEFINED:
|
||||||
|
schema[cv.Optional(key, default=default)] = validator
|
||||||
|
|
||||||
|
return _FAN_SCHEMA.extend(schema)
|
||||||
|
|
||||||
|
|
||||||
|
# Remove before 2025.11.0
|
||||||
|
FAN_SCHEMA = fan_schema(Fan)
|
||||||
|
FAN_SCHEMA.add_extra(cv.deprecated_schema_constant("fan"))
|
||||||
|
|
||||||
_PRESET_MODES_SCHEMA = cv.All(
|
_PRESET_MODES_SCHEMA = cv.All(
|
||||||
cv.ensure_list(cv.string_strict),
|
cv.ensure_list(cv.string_strict),
|
||||||
cv.Length(min=1),
|
cv.Length(min=1),
|
||||||
@ -267,10 +299,9 @@ async def register_fan(var, config):
|
|||||||
await setup_fan_core_(var, config)
|
await setup_fan_core_(var, config)
|
||||||
|
|
||||||
|
|
||||||
async def create_fan_state(config):
|
async def new_fan(config, *args):
|
||||||
var = cg.new_Pvariable(config[CONF_ID])
|
var = cg.new_Pvariable(config[CONF_ID], *args)
|
||||||
await register_fan(var, config)
|
await register_fan(var, config)
|
||||||
await cg.register_component(var, config)
|
|
||||||
return var
|
return var
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import enum
|
||||||
|
|
||||||
import esphome.automation as auto
|
import esphome.automation as auto
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.components import mqtt, power_supply, web_server
|
from esphome.components import mqtt, power_supply, web_server
|
||||||
@ -13,15 +15,18 @@ from esphome.const import (
|
|||||||
CONF_COLOR_TEMPERATURE,
|
CONF_COLOR_TEMPERATURE,
|
||||||
CONF_DEFAULT_TRANSITION_LENGTH,
|
CONF_DEFAULT_TRANSITION_LENGTH,
|
||||||
CONF_EFFECTS,
|
CONF_EFFECTS,
|
||||||
|
CONF_ENTITY_CATEGORY,
|
||||||
CONF_FLASH_TRANSITION_LENGTH,
|
CONF_FLASH_TRANSITION_LENGTH,
|
||||||
CONF_GAMMA_CORRECT,
|
CONF_GAMMA_CORRECT,
|
||||||
CONF_GREEN,
|
CONF_GREEN,
|
||||||
|
CONF_ICON,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_INITIAL_STATE,
|
CONF_INITIAL_STATE,
|
||||||
CONF_MQTT_ID,
|
CONF_MQTT_ID,
|
||||||
CONF_ON_STATE,
|
CONF_ON_STATE,
|
||||||
CONF_ON_TURN_OFF,
|
CONF_ON_TURN_OFF,
|
||||||
CONF_ON_TURN_ON,
|
CONF_ON_TURN_ON,
|
||||||
|
CONF_OUTPUT_ID,
|
||||||
CONF_POWER_SUPPLY,
|
CONF_POWER_SUPPLY,
|
||||||
CONF_RED,
|
CONF_RED,
|
||||||
CONF_RESTORE_MODE,
|
CONF_RESTORE_MODE,
|
||||||
@ -33,6 +38,7 @@ from esphome.const import (
|
|||||||
CONF_WHITE,
|
CONF_WHITE,
|
||||||
)
|
)
|
||||||
from esphome.core import coroutine_with_priority
|
from esphome.core import coroutine_with_priority
|
||||||
|
from esphome.cpp_generator import MockObjClass
|
||||||
from esphome.cpp_helpers import setup_entity
|
from esphome.cpp_helpers import setup_entity
|
||||||
|
|
||||||
from .automation import LIGHT_STATE_SCHEMA
|
from .automation import LIGHT_STATE_SCHEMA
|
||||||
@ -141,6 +147,51 @@ ADDRESSABLE_LIGHT_SCHEMA = RGB_LIGHT_SCHEMA.extend(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class LightType(enum.IntEnum):
|
||||||
|
"""Light type enum."""
|
||||||
|
|
||||||
|
BINARY = 0
|
||||||
|
BRIGHTNESS_ONLY = 1
|
||||||
|
RGB = 2
|
||||||
|
ADDRESSABLE = 3
|
||||||
|
|
||||||
|
|
||||||
|
def light_schema(
|
||||||
|
class_: MockObjClass,
|
||||||
|
type_: LightType,
|
||||||
|
*,
|
||||||
|
entity_category: str = cv.UNDEFINED,
|
||||||
|
icon: str = cv.UNDEFINED,
|
||||||
|
default_restore_mode: str = cv.UNDEFINED,
|
||||||
|
) -> cv.Schema:
|
||||||
|
schema = {
|
||||||
|
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(class_),
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, default, validator in [
|
||||||
|
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
|
||||||
|
(CONF_ICON, icon, cv.icon),
|
||||||
|
(
|
||||||
|
CONF_RESTORE_MODE,
|
||||||
|
default_restore_mode,
|
||||||
|
cv.enum(RESTORE_MODES, upper=True, space="_"),
|
||||||
|
),
|
||||||
|
]:
|
||||||
|
if default is not cv.UNDEFINED:
|
||||||
|
schema[cv.Optional(key, default=default)] = validator
|
||||||
|
|
||||||
|
if type_ == LightType.BINARY:
|
||||||
|
return BINARY_LIGHT_SCHEMA.extend(schema)
|
||||||
|
if type_ == LightType.BRIGHTNESS_ONLY:
|
||||||
|
return BRIGHTNESS_ONLY_LIGHT_SCHEMA.extend(schema)
|
||||||
|
if type_ == LightType.RGB:
|
||||||
|
return RGB_LIGHT_SCHEMA.extend(schema)
|
||||||
|
if type_ == LightType.ADDRESSABLE:
|
||||||
|
return ADDRESSABLE_LIGHT_SCHEMA.extend(schema)
|
||||||
|
|
||||||
|
raise ValueError(f"Invalid light type: {type_}")
|
||||||
|
|
||||||
|
|
||||||
def validate_color_temperature_channels(value):
|
def validate_color_temperature_channels(value):
|
||||||
if (
|
if (
|
||||||
CONF_COLD_WHITE_COLOR_TEMPERATURE in value
|
CONF_COLD_WHITE_COLOR_TEMPERATURE in value
|
||||||
@ -223,6 +274,12 @@ async def register_light(output_var, config):
|
|||||||
await setup_light_core_(light_var, output_var, config)
|
await setup_light_core_(light_var, output_var, config)
|
||||||
|
|
||||||
|
|
||||||
|
async def new_light(config, *args):
|
||||||
|
output_var = cg.new_Pvariable(config[CONF_OUTPUT_ID], *args)
|
||||||
|
await register_light(output_var, config)
|
||||||
|
return output_var
|
||||||
|
|
||||||
|
|
||||||
@coroutine_with_priority(100.0)
|
@coroutine_with_priority(100.0)
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
cg.add_define("USE_LIGHT")
|
cg.add_define("USE_LIGHT")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user