1
0
mirror of https://github.com/esphome/esphome.git synced 2025-06-15 06:46:59 +02:00
Mathieu Rene 9d9d210176
Add OpenThread support on ESP-IDF (#7506)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
2025-06-11 17:27:58 +12:00

106 lines
4.3 KiB
Python

import esphome.codegen as cg
from esphome.components import text_sensor
from esphome.components.openthread.const import (
CONF_EXT_PAN_ID,
CONF_NETWORK_KEY,
CONF_NETWORK_NAME,
CONF_PAN_ID,
)
import esphome.config_validation as cv
from esphome.const import CONF_CHANNEL, CONF_IP_ADDRESS, ENTITY_CATEGORY_DIAGNOSTIC
CONF_ROLE = "role"
CONF_RLOC16 = "rloc16"
CONF_EUI64 = "eui64"
CONF_EXT_ADDR = "ext_addr"
DEPENDENCIES = ["openthread"]
openthread_info_ns = cg.esphome_ns.namespace("openthread_info")
IPAddressOpenThreadInfo = openthread_info_ns.class_(
"IPAddressOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
RoleOpenThreadInfo = openthread_info_ns.class_(
"RoleOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
Rloc16OpenThreadInfo = openthread_info_ns.class_(
"Rloc16OpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
ExtAddrOpenThreadInfo = openthread_info_ns.class_(
"ExtAddrOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
Eui64OpenThreadInfo = openthread_info_ns.class_(
"Eui64OpenThreadInfo", text_sensor.TextSensor, cg.Component
)
ChannelOpenThreadInfo = openthread_info_ns.class_(
"ChannelOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
NetworkNameOpenThreadInfo = openthread_info_ns.class_(
"NetworkNameOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
NetworkKeyOpenThreadInfo = openthread_info_ns.class_(
"NetworkKeyOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
PanIdOpenThreadInfo = openthread_info_ns.class_(
"PanIdOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
ExtPanIdOpenThreadInfo = openthread_info_ns.class_(
"ExtPanIdOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
)
CONFIG_SCHEMA = cv.Schema(
{
cv.Optional(CONF_IP_ADDRESS): text_sensor.text_sensor_schema(
IPAddressOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
),
cv.Optional(CONF_ROLE): text_sensor.text_sensor_schema(
RoleOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_RLOC16): text_sensor.text_sensor_schema(
Rloc16OpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_EXT_ADDR): text_sensor.text_sensor_schema(
ExtAddrOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_EUI64): text_sensor.text_sensor_schema(
Eui64OpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1h")),
cv.Optional(CONF_CHANNEL): text_sensor.text_sensor_schema(
ChannelOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_NETWORK_NAME): text_sensor.text_sensor_schema(
NetworkNameOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_NETWORK_KEY): text_sensor.text_sensor_schema(
NetworkKeyOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_PAN_ID): text_sensor.text_sensor_schema( # noqa: F821
PanIdOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
cv.Optional(CONF_EXT_PAN_ID): text_sensor.text_sensor_schema(
ExtPanIdOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
).extend(cv.polling_component_schema("1s")),
}
)
async def setup_conf(config: dict, key: str):
if conf := config.get(key):
var = await text_sensor.new_text_sensor(conf)
await cg.register_component(var, conf)
async def to_code(config):
await setup_conf(config, CONF_IP_ADDRESS)
await setup_conf(config, CONF_ROLE)
await setup_conf(config, CONF_RLOC16)
await setup_conf(config, CONF_EXT_ADDR)
await setup_conf(config, CONF_EUI64)
await setup_conf(config, CONF_CHANNEL)
await setup_conf(config, CONF_NETWORK_NAME)
await setup_conf(config, CONF_NETWORK_KEY)
await setup_conf(config, CONF_PAN_ID)
await setup_conf(config, CONF_EXT_PAN_ID)