mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 06:36:45 +00:00
[switch] Fix schema generation (#8774)
This commit is contained in:
parent
a36e1aab8e
commit
410b6353fe
@ -2,6 +2,7 @@ import esphome.codegen as cg
|
|||||||
from esphome.components import switch
|
from esphome.components import switch
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import CONF_TYPE, ENTITY_CATEGORY_CONFIG
|
from esphome.const import CONF_TYPE, ENTITY_CATEGORY_CONFIG
|
||||||
|
from esphome.cpp_generator import MockObjClass
|
||||||
|
|
||||||
from .. import CONF_DFROBOT_SEN0395_ID, DfrobotSen0395Component
|
from .. import CONF_DFROBOT_SEN0395_ID, DfrobotSen0395Component
|
||||||
|
|
||||||
@ -26,32 +27,30 @@ Sen0395StartAfterBootSwitch = dfrobot_sen0395_ns.class_(
|
|||||||
"Sen0395StartAfterBootSwitch", DfrobotSen0395Switch
|
"Sen0395StartAfterBootSwitch", DfrobotSen0395Switch
|
||||||
)
|
)
|
||||||
|
|
||||||
_SWITCH_SCHEMA = (
|
|
||||||
switch.switch_schema(
|
def _switch_schema(class_: MockObjClass) -> cv.Schema:
|
||||||
entity_category=ENTITY_CATEGORY_CONFIG,
|
return (
|
||||||
|
switch.switch_schema(
|
||||||
|
class_,
|
||||||
|
entity_category=ENTITY_CATEGORY_CONFIG,
|
||||||
|
)
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
cv.GenerateID(CONF_DFROBOT_SEN0395_ID): cv.use_id(
|
||||||
|
DfrobotSen0395Component
|
||||||
|
),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.extend(cv.COMPONENT_SCHEMA)
|
||||||
)
|
)
|
||||||
.extend(
|
|
||||||
{
|
|
||||||
cv.GenerateID(CONF_DFROBOT_SEN0395_ID): cv.use_id(DfrobotSen0395Component),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.extend(cv.COMPONENT_SCHEMA)
|
|
||||||
)
|
|
||||||
|
|
||||||
CONFIG_SCHEMA = cv.typed_schema(
|
CONFIG_SCHEMA = cv.typed_schema(
|
||||||
{
|
{
|
||||||
"sensor_active": _SWITCH_SCHEMA.extend(
|
"sensor_active": _switch_schema(Sen0395PowerSwitch),
|
||||||
{cv.GenerateID(): cv.declare_id(Sen0395PowerSwitch)}
|
"turn_on_led": _switch_schema(Sen0395LedSwitch),
|
||||||
),
|
"presence_via_uart": _switch_schema(Sen0395UartPresenceSwitch),
|
||||||
"turn_on_led": _SWITCH_SCHEMA.extend(
|
"start_after_boot": _switch_schema(Sen0395StartAfterBootSwitch),
|
||||||
{cv.GenerateID(): cv.declare_id(Sen0395LedSwitch)}
|
|
||||||
),
|
|
||||||
"presence_via_uart": _SWITCH_SCHEMA.extend(
|
|
||||||
{cv.GenerateID(): cv.declare_id(Sen0395UartPresenceSwitch)}
|
|
||||||
),
|
|
||||||
"start_after_boot": _SWITCH_SCHEMA.extend(
|
|
||||||
{cv.GenerateID(): cv.declare_id(Sen0395StartAfterBootSwitch)}
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -72,6 +72,9 @@ _SWITCH_SCHEMA = (
|
|||||||
{
|
{
|
||||||
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSwitchComponent),
|
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSwitchComponent),
|
||||||
cv.Optional(CONF_INVERTED): cv.boolean,
|
cv.Optional(CONF_INVERTED): cv.boolean,
|
||||||
|
cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum(
|
||||||
|
RESTORE_MODES, upper=True, space="_"
|
||||||
|
),
|
||||||
cv.Optional(CONF_ON_TURN_ON): automation.validate_automation(
|
cv.Optional(CONF_ON_TURN_ON): automation.validate_automation(
|
||||||
{
|
{
|
||||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOnTrigger),
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOnTrigger),
|
||||||
@ -89,54 +92,41 @@ _SWITCH_SCHEMA = (
|
|||||||
|
|
||||||
|
|
||||||
def switch_schema(
|
def switch_schema(
|
||||||
class_: MockObjClass = cv.UNDEFINED,
|
class_: MockObjClass,
|
||||||
*,
|
*,
|
||||||
entity_category: str = cv.UNDEFINED,
|
|
||||||
device_class: str = cv.UNDEFINED,
|
|
||||||
icon: str = cv.UNDEFINED,
|
|
||||||
block_inverted: bool = False,
|
block_inverted: bool = False,
|
||||||
default_restore_mode: str = "ALWAYS_OFF",
|
default_restore_mode: str = cv.UNDEFINED,
|
||||||
|
device_class: str = cv.UNDEFINED,
|
||||||
|
entity_category: str = cv.UNDEFINED,
|
||||||
|
icon: str = cv.UNDEFINED,
|
||||||
):
|
):
|
||||||
schema = _SWITCH_SCHEMA.extend(
|
schema = {cv.GenerateID(): cv.declare_id(class_)}
|
||||||
{
|
|
||||||
cv.Optional(CONF_RESTORE_MODE, default=default_restore_mode): cv.enum(
|
for key, default, validator in [
|
||||||
RESTORE_MODES, upper=True, space="_"
|
(CONF_DEVICE_CLASS, device_class, validate_device_class),
|
||||||
),
|
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
|
||||||
}
|
(CONF_ICON, icon, cv.icon),
|
||||||
)
|
(
|
||||||
if class_ is not cv.UNDEFINED:
|
CONF_RESTORE_MODE,
|
||||||
schema = schema.extend({cv.GenerateID(): cv.declare_id(class_)})
|
default_restore_mode,
|
||||||
if entity_category is not cv.UNDEFINED:
|
cv.enum(RESTORE_MODES, upper=True, space="_")
|
||||||
schema = schema.extend(
|
if default_restore_mode is not cv.UNDEFINED
|
||||||
{
|
else cv.UNDEFINED,
|
||||||
cv.Optional(
|
),
|
||||||
CONF_ENTITY_CATEGORY, default=entity_category
|
]:
|
||||||
): cv.entity_category
|
if default is not cv.UNDEFINED:
|
||||||
}
|
schema[cv.Optional(key, default=default)] = validator
|
||||||
)
|
|
||||||
if device_class is not cv.UNDEFINED:
|
|
||||||
schema = schema.extend(
|
|
||||||
{
|
|
||||||
cv.Optional(
|
|
||||||
CONF_DEVICE_CLASS, default=device_class
|
|
||||||
): validate_device_class
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if icon is not cv.UNDEFINED:
|
|
||||||
schema = schema.extend({cv.Optional(CONF_ICON, default=icon): cv.icon})
|
|
||||||
if block_inverted:
|
if block_inverted:
|
||||||
schema = schema.extend(
|
schema[cv.Optional(CONF_INVERTED)] = cv.invalid(
|
||||||
{
|
"Inverted is not supported for this platform!"
|
||||||
cv.Optional(CONF_INVERTED): cv.invalid(
|
|
||||||
"Inverted is not supported for this platform!"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
return schema
|
|
||||||
|
return _SWITCH_SCHEMA.extend(schema)
|
||||||
|
|
||||||
|
|
||||||
# Remove before 2025.11.0
|
# Remove before 2025.11.0
|
||||||
SWITCH_SCHEMA = switch_schema()
|
SWITCH_SCHEMA = switch_schema(Switch)
|
||||||
SWITCH_SCHEMA.add_extra(cv.deprecated_schema_constant("switch"))
|
SWITCH_SCHEMA.add_extra(cv.deprecated_schema_constant("switch"))
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,3 +26,17 @@ dfrobot_sen0395:
|
|||||||
binary_sensor:
|
binary_sensor:
|
||||||
- platform: dfrobot_sen0395
|
- platform: dfrobot_sen0395
|
||||||
id: mmwave_detected
|
id: mmwave_detected
|
||||||
|
|
||||||
|
switch:
|
||||||
|
- platform: dfrobot_sen0395
|
||||||
|
type: sensor_active
|
||||||
|
id: mmwave_sensor_active
|
||||||
|
- platform: dfrobot_sen0395
|
||||||
|
type: turn_on_led
|
||||||
|
id: mmwave_turn_on_led
|
||||||
|
- platform: dfrobot_sen0395
|
||||||
|
type: presence_via_uart
|
||||||
|
id: mmwave_presence_via_uart
|
||||||
|
- platform: dfrobot_sen0395
|
||||||
|
type: start_after_boot
|
||||||
|
id: mmwave_start_after_boot
|
||||||
|
Loading…
x
Reference in New Issue
Block a user