esphome/esphome/components/seeed_mr24hpc1/select/__init__.py

104 lines
3.4 KiB
Python

import esphome.codegen as cg
from esphome.components import select
import esphome.config_validation as cv
from esphome.const import (
ENTITY_CATEGORY_CONFIG,
)
from .. import CONF_MR24HPC1_ID, MR24HPC1Component, mr24hpc1_ns
SceneModeSelect = mr24hpc1_ns.class_("SceneModeSelect", select.Select)
UnmanTimeSelect = mr24hpc1_ns.class_("UnmanTimeSelect", select.Select)
ExistenceBoundarySelect = mr24hpc1_ns.class_("ExistenceBoundarySelect", select.Select)
MotionBoundarySelect = mr24hpc1_ns.class_("MotionBoundarySelect", select.Select)
CONF_SCENE_MODE = "scene_mode"
CONF_UNMAN_TIME = "unman_time"
CONF_EXISTENCE_BOUNDARY = "existence_boundary"
CONF_MOTION_BOUNDARY = "motion_boundary"
CONFIG_SCHEMA = {
cv.GenerateID(CONF_MR24HPC1_ID): cv.use_id(MR24HPC1Component),
cv.Optional(CONF_SCENE_MODE): select.select_schema(
SceneModeSelect,
entity_category=ENTITY_CATEGORY_CONFIG,
icon="mdi:hoop-house",
),
cv.Optional(CONF_UNMAN_TIME): select.select_schema(
UnmanTimeSelect,
entity_category=ENTITY_CATEGORY_CONFIG,
icon="mdi:timeline-clock",
),
cv.Optional(CONF_EXISTENCE_BOUNDARY): select.select_schema(
ExistenceBoundarySelect,
entity_category=ENTITY_CATEGORY_CONFIG,
),
cv.Optional(CONF_MOTION_BOUNDARY): select.select_schema(
MotionBoundarySelect,
entity_category=ENTITY_CATEGORY_CONFIG,
),
}
async def to_code(config):
mr24hpc1_component = await cg.get_variable(config[CONF_MR24HPC1_ID])
if scenemode_config := config.get(CONF_SCENE_MODE):
s = await select.new_select(
scenemode_config,
options=["None", "Living Room", "Bedroom", "Washroom", "Area Detection"],
)
await cg.register_parented(s, config[CONF_MR24HPC1_ID])
cg.add(mr24hpc1_component.set_scene_mode_select(s))
if unmantime_config := config.get(CONF_UNMAN_TIME):
s = await select.new_select(
unmantime_config,
options=[
"None",
"10s",
"30s",
"1min",
"2min",
"5min",
"10min",
"30min",
"60min",
],
)
await cg.register_parented(s, config[CONF_MR24HPC1_ID])
cg.add(mr24hpc1_component.set_unman_time_select(s))
if existence_boundary_config := config.get(CONF_EXISTENCE_BOUNDARY):
s = await select.new_select(
existence_boundary_config,
options=[
"0.5m",
"1.0m",
"1.5m",
"2.0m",
"2.5m",
"3.0m",
"3.5m",
"4.0m",
"4.5m",
"5.0m",
],
)
await cg.register_parented(s, config[CONF_MR24HPC1_ID])
cg.add(mr24hpc1_component.set_existence_boundary_select(s))
if motion_boundary_config := config.get(CONF_MOTION_BOUNDARY):
s = await select.new_select(
motion_boundary_config,
options=[
"0.5m",
"1.0m",
"1.5m",
"2.0m",
"2.5m",
"3.0m",
"3.5m",
"4.0m",
"4.5m",
"5.0m",
],
)
await cg.register_parented(s, config[CONF_MR24HPC1_ID])
cg.add(mr24hpc1_component.set_motion_boundary_select(s))