Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@koston.org> Co-authored-by: J. Nick Koston <nick@home-assistant.io> Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
from typing import Any
|
|
|
|
import esphome.config_validation as cv
|
|
from esphome.const import CONF_DEVICE, CONF_ID, CONF_TYPE
|
|
|
|
from .const import CONF_REPORT, REPORT
|
|
from .const_esp32 import (
|
|
CLUSTER_ROLE,
|
|
CONF_ATTRIBUTE_ID,
|
|
CONF_ATTRIBUTES,
|
|
CONF_CLUSTERS,
|
|
CONF_MAX_EP_NUMBER,
|
|
CONF_NUM,
|
|
DEVICE_TYPE,
|
|
ROLE,
|
|
)
|
|
|
|
# endpoint configs:
|
|
ep_configs: dict[str, dict[str, Any]] = {
|
|
"binary_input": {
|
|
DEVICE_TYPE: "SIMPLE_SENSOR",
|
|
CONF_CLUSTERS: [
|
|
{
|
|
CONF_ID: "BINARY_INPUT",
|
|
ROLE: CLUSTER_ROLE["SERVER"],
|
|
CONF_ATTRIBUTES: [
|
|
{
|
|
CONF_ATTRIBUTE_ID: 0x55,
|
|
CONF_TYPE: "BOOL",
|
|
CONF_REPORT: REPORT["enable"],
|
|
CONF_DEVICE: None,
|
|
},
|
|
{
|
|
CONF_ATTRIBUTE_ID: 0x51,
|
|
CONF_TYPE: "BOOL",
|
|
},
|
|
{
|
|
CONF_ATTRIBUTE_ID: 0x6F,
|
|
CONF_TYPE: "8BITMAP",
|
|
},
|
|
{
|
|
CONF_ATTRIBUTE_ID: 0x1C,
|
|
CONF_TYPE: "CHAR_STRING",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
}
|
|
|
|
|
|
def create_ep(ep_list: list[dict[str, Any]], router: bool) -> list[dict[str, Any]]:
|
|
# create dummy endpoint if list is empty
|
|
if not ep_list:
|
|
ep_type = "CUSTOM_ATTR"
|
|
if router:
|
|
ep_type = "RANGE_EXTENDER"
|
|
ep_list = [
|
|
{
|
|
DEVICE_TYPE: ep_type,
|
|
}
|
|
]
|
|
# enumerate endpoints
|
|
for i, ep in enumerate(ep_list, 1):
|
|
ep[CONF_NUM] = i
|
|
if len(ep_list) > CONF_MAX_EP_NUMBER:
|
|
raise cv.Invalid(
|
|
f"Too many devices. Zigbee can define only {CONF_MAX_EP_NUMBER} endpoints."
|
|
)
|
|
return ep_list
|