mirror of
https://github.com/esphome/esphome.git
synced 2025-04-16 07:40:29 +01:00
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
import esphome.codegen as cg
|
|
import esphome.config_validation as cv
|
|
from esphome.components import uart
|
|
from esphome.const import CONF_ID, CONF_THROTTLE, CONF_TIMEOUT, CONF_PASSWORD
|
|
from esphome import automation
|
|
from esphome.automation import maybe_simple_id
|
|
|
|
DEPENDENCIES = ["uart"]
|
|
CODEOWNERS = ["@sebcaps", "@regevbr"]
|
|
MULTI_CONF = True
|
|
|
|
ld2410_ns = cg.esphome_ns.namespace("ld2410")
|
|
LD2410Component = ld2410_ns.class_("LD2410Component", cg.Component, uart.UARTDevice)
|
|
|
|
CONF_LD2410_ID = "ld2410_id"
|
|
|
|
CONF_MAX_MOVE_DISTANCE = "max_move_distance"
|
|
CONF_MAX_STILL_DISTANCE = "max_still_distance"
|
|
CONF_STILL_THRESHOLDS = [f"g{x}_still_threshold" for x in range(9)]
|
|
CONF_MOVE_THRESHOLDS = [f"g{x}_move_threshold" for x in range(9)]
|
|
|
|
CONFIG_SCHEMA = cv.Schema(
|
|
{
|
|
cv.GenerateID(): cv.declare_id(LD2410Component),
|
|
cv.Optional(CONF_THROTTLE, default="1000ms"): cv.All(
|
|
cv.positive_time_period_milliseconds,
|
|
cv.Range(min=cv.TimePeriod(milliseconds=1)),
|
|
),
|
|
cv.Optional(CONF_MAX_MOVE_DISTANCE): cv.invalid(
|
|
f"The '{CONF_MAX_MOVE_DISTANCE}' option has been moved to the '{CONF_MAX_MOVE_DISTANCE}'"
|
|
f" number component"
|
|
),
|
|
cv.Optional(CONF_MAX_STILL_DISTANCE): cv.invalid(
|
|
f"The '{CONF_MAX_STILL_DISTANCE}' option has been moved to the '{CONF_MAX_STILL_DISTANCE}'"
|
|
f" number component"
|
|
),
|
|
cv.Optional(CONF_TIMEOUT): cv.invalid(
|
|
f"The '{CONF_TIMEOUT}' option has been moved to the '{CONF_TIMEOUT}'"
|
|
f" number component"
|
|
),
|
|
}
|
|
)
|
|
|
|
for i in range(9):
|
|
CONFIG_SCHEMA = CONFIG_SCHEMA.extend(
|
|
cv.Schema(
|
|
{
|
|
cv.Optional(CONF_MOVE_THRESHOLDS[i]): cv.invalid(
|
|
f"The '{CONF_MOVE_THRESHOLDS[i]}' option has been moved to the '{CONF_MOVE_THRESHOLDS[i]}'"
|
|
f" number component"
|
|
),
|
|
cv.Optional(CONF_STILL_THRESHOLDS[i]): cv.invalid(
|
|
f"The '{CONF_STILL_THRESHOLDS[i]}' option has been moved to the '{CONF_STILL_THRESHOLDS[i]}'"
|
|
f" number component"
|
|
),
|
|
}
|
|
)
|
|
)
|
|
|
|
CONFIG_SCHEMA = cv.All(
|
|
CONFIG_SCHEMA.extend(uart.UART_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA)
|
|
)
|
|
|
|
FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
|
|
"ld2410",
|
|
require_tx=True,
|
|
require_rx=True,
|
|
parity="NONE",
|
|
stop_bits=1,
|
|
)
|
|
|
|
|
|
async def to_code(config):
|
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
await cg.register_component(var, config)
|
|
await uart.register_uart_device(var, config)
|
|
cg.add(var.set_throttle(config[CONF_THROTTLE]))
|
|
|
|
|
|
CALIBRATION_ACTION_SCHEMA = maybe_simple_id(
|
|
{
|
|
cv.Required(CONF_ID): cv.use_id(LD2410Component),
|
|
}
|
|
)
|
|
|
|
|
|
# Actions
|
|
BluetoothPasswordSetAction = ld2410_ns.class_(
|
|
"BluetoothPasswordSetAction", automation.Action
|
|
)
|
|
|
|
|
|
BLUETOOTH_PASSWORD_SET_SCHEMA = cv.Schema(
|
|
{
|
|
cv.Required(CONF_ID): cv.use_id(LD2410Component),
|
|
cv.Required(CONF_PASSWORD): cv.templatable(cv.string_strict),
|
|
}
|
|
)
|
|
|
|
|
|
@automation.register_action(
|
|
"bluetooth_password.set", BluetoothPasswordSetAction, BLUETOOTH_PASSWORD_SET_SCHEMA
|
|
)
|
|
async def bluetooth_password_set_to_code(config, action_id, template_arg, args):
|
|
paren = await cg.get_variable(config[CONF_ID])
|
|
var = cg.new_Pvariable(action_id, template_arg, paren)
|
|
template_ = await cg.templatable(config[CONF_PASSWORD], args, cg.std_string)
|
|
cg.add(var.set_password(template_))
|
|
return var
|