diff --git a/esphome/components/devices/__init__.py b/esphome/components/devices/__init__.py index c8249f6f91..b38c051259 100644 --- a/esphome/components/devices/__init__.py +++ b/esphome/components/devices/__init__.py @@ -1,8 +1,8 @@ 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") -# DeviceClass = ns.Class("SubDevice") +ns = cg.esphome_ns.namespace("devices") +DeviceClass = ns.Class("SubDevice") StringRef = cg.esphome_ns.struct("StringRef") MULTI_CONF = True @@ -11,16 +11,27 @@ CODEOWNERS = ["@dala318"] CONFIG_SCHEMA = cv.Schema( { - # cv.Required(CONF_ID): cv.declare_id(DeviceClass), - cv.Required(CONF_ID): cv.declare_id(StringRef), + cv.GenerateID(CONF_ID): cv.declare_id(DeviceClass), + # cv.Required(CONF_NAME): cv.declare_id(StringRef), + # cv.Optional(CONF_AREA, ""): cv.declare_id(StringRef), cv.Required(CONF_NAME): cv.string, + cv.Optional(CONF_AREA, ""): cv.string, } ).extend(cv.COMPONENT_SCHEMA) async def to_code(config): - cg.new_Pvariable( - config[CONF_ID], - config[CONF_NAME], - ) + dev = cg.new_Pvariable(config[CONF_ID]) + cg.add(dev.set_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") diff --git a/esphome/components/devices/devices.h b/esphome/components/devices/devices.h index 80d7d9923c..a9e8f311fa 100644 --- a/esphome/components/devices/devices.h +++ b/esphome/components/devices/devices.h @@ -7,11 +7,13 @@ class SubDevice { public: void set_name(std::string name) { name_ = name; } std::string get_name(void) { return name_; } + void set_area(std::string area) { area_ = area; } + std::string get_area(void) { return area_; } protected: // std::string id_ = ""; std::string name_ = ""; - std::string suggested_area_ = ""; + std::string area_ = ""; }; } // namespace devices