1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-14 09:12:19 +01:00

Work on sub-device creation

This commit is contained in:
Daniel Vikström
2025-04-09 01:39:24 +02:00
parent 01ac59ce2a
commit 0651f7cb3c
2 changed files with 23 additions and 10 deletions

View File

@@ -1,8 +1,8 @@
from esphome import codegen as cg, config_validation as cv from esphome import codegen as cg, config_validation as cv
from esphome.const import CONF_ID, CONF_NAME from esphome.const import CONF_AREA, CONF_ID, CONF_NAME
# ns = cg.esphome_ns.namespace("devices") ns = cg.esphome_ns.namespace("devices")
# DeviceClass = ns.Class("SubDevice") DeviceClass = ns.Class("SubDevice")
StringRef = cg.esphome_ns.struct("StringRef") StringRef = cg.esphome_ns.struct("StringRef")
MULTI_CONF = True MULTI_CONF = True
@@ -11,16 +11,27 @@ CODEOWNERS = ["@dala318"]
CONFIG_SCHEMA = cv.Schema( CONFIG_SCHEMA = cv.Schema(
{ {
# cv.Required(CONF_ID): cv.declare_id(DeviceClass), cv.GenerateID(CONF_ID): cv.declare_id(DeviceClass),
cv.Required(CONF_ID): cv.declare_id(StringRef), # cv.Required(CONF_NAME): cv.declare_id(StringRef),
# cv.Optional(CONF_AREA, ""): cv.declare_id(StringRef),
cv.Required(CONF_NAME): cv.string, cv.Required(CONF_NAME): cv.string,
cv.Optional(CONF_AREA, ""): cv.string,
} }
).extend(cv.COMPONENT_SCHEMA) ).extend(cv.COMPONENT_SCHEMA)
async def to_code(config): async def to_code(config):
cg.new_Pvariable( dev = cg.new_Pvariable(config[CONF_ID])
config[CONF_ID], cg.add(dev.set_name(config[CONF_NAME]))
config[CONF_NAME], if CONF_AREA in config:
) cg.add(dev.set_area(config[CONF_AREA]))
cg.add(cg.App.register_sub_device(dev))
# cg.add(
# cg.App.register_sub_device(
# config[CONF_ID],
# config[CONF_NAME],
# config[CONF_AREA],
# # config.get(CONF_COMMENT, ""),
# )
# )
cg.add_define("USE_SUB_DEVICE") cg.add_define("USE_SUB_DEVICE")

View File

@@ -7,11 +7,13 @@ class SubDevice {
public: public:
void set_name(std::string name) { name_ = name; } void set_name(std::string name) { name_ = name; }
std::string get_name(void) { return name_; } std::string get_name(void) { return name_; }
void set_area(std::string area) { area_ = area; }
std::string get_area(void) { return area_; }
protected: protected:
// std::string id_ = ""; // std::string id_ = "";
std::string name_ = ""; std::string name_ = "";
std::string suggested_area_ = ""; std::string area_ = "";
}; };
} // namespace devices } // namespace devices