Files
esphome-lsm6ds/esphome/components/zephyr_ble_server/__init__.py
T

76 lines
2.4 KiB
Python

from esphome import automation
import esphome.codegen as cg
from esphome.components.zephyr import zephyr_add_prj_conf
import esphome.config_validation as cv
from esphome.const import CONF_ID, Framework
from esphome.core import CORE
zephyr_ble_server_ns = cg.esphome_ns.namespace("zephyr_ble_server")
BLEServer = zephyr_ble_server_ns.class_("BLEServer", cg.Component)
CONF_ON_NUMERIC_COMPARISON_REQUEST = "on_numeric_comparison_request"
CONF_ACCEPT = "accept"
CONFIG_SCHEMA = cv.All(
cv.Schema(
{
cv.GenerateID(): cv.declare_id(BLEServer),
cv.Optional(
CONF_ON_NUMERIC_COMPARISON_REQUEST
): automation.validate_automation({}),
}
).extend(cv.COMPONENT_SCHEMA),
cv.only_with_framework(Framework.ZEPHYR),
)
_CALLBACK_AUTOMATIONS = (
automation.CallbackAutomation(
CONF_ON_NUMERIC_COMPARISON_REQUEST,
"add_passkey_callback",
[(cg.uint32, "passkey")],
),
)
async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
zephyr_add_prj_conf("BT", True)
zephyr_add_prj_conf("BT_PERIPHERAL", True)
zephyr_add_prj_conf("BT_RX_STACK_SIZE", 1536)
zephyr_add_prj_conf("BT_DEVICE_NAME", CORE.name)
await cg.register_component(var, config)
if config.get(CONF_ON_NUMERIC_COMPARISON_REQUEST):
zephyr_add_prj_conf("BT_SMP", True)
zephyr_add_prj_conf("BT_SETTINGS", True)
zephyr_add_prj_conf("BT_SMP_SC_ONLY", True)
zephyr_add_prj_conf("BT_KEYS_OVERWRITE_OLDEST", True)
await automation.build_callback_automations(var, config, _CALLBACK_AUTOMATIONS)
BLENumericComparisonReplyAction = zephyr_ble_server_ns.class_(
"BLENumericComparisonReplyAction", automation.Action
)
BLE_NUMERIC_COMPARISON_REPLY_ACTION_SCHEMA = cv.Schema(
{
cv.GenerateID(CONF_ID): cv.use_id(BLEServer),
cv.Required(CONF_ACCEPT): cv.templatable(cv.boolean),
}
)
@automation.register_action(
"ble_server.numeric_comparison_reply",
BLENumericComparisonReplyAction,
BLE_NUMERIC_COMPARISON_REPLY_ACTION_SCHEMA,
synchronous=True,
)
async def numeric_comparison_reply_to_code(config, action_id, template_arg, args):
parent = await cg.get_variable(config[CONF_ID])
var = cg.new_Pvariable(action_id, template_arg, parent)
templ = await cg.templatable(config[CONF_ACCEPT], args, cg.bool_)
cg.add(var.set_accept(templ))
return var