From 80a825199e40a5621f9e7e17794ff643a90ce5d2 Mon Sep 17 00:00:00 2001 From: ElVit Date: Sun, 9 Feb 2025 17:20:45 +0100 Subject: [PATCH] Added custom class for sensor --- components/maidsite_desk/button/__init__.py | 12 ++- .../button/maidsite_desk_button.cpp | 8 ++ .../button/maidsite_desk_button.h | 3 + components/maidsite_desk/number/__init__.py | 17 ++-- .../number/maidsite_desk_number.cpp | 8 ++ .../number/maidsite_desk_number.h | 3 + components/maidsite_desk/sensor.py | 82 ----------------- components/maidsite_desk/sensor/__init__.py | 88 +++++++++++++++++++ .../sensor/maidsite_desk_sensor.cpp | 16 ++++ .../sensor/maidsite_desk_sensor.h | 19 ++++ 10 files changed, 160 insertions(+), 96 deletions(-) delete mode 100644 components/maidsite_desk/sensor.py create mode 100644 components/maidsite_desk/sensor/__init__.py create mode 100644 components/maidsite_desk/sensor/maidsite_desk_sensor.cpp create mode 100644 components/maidsite_desk/sensor/maidsite_desk_sensor.h diff --git a/components/maidsite_desk/button/__init__.py b/components/maidsite_desk/button/__init__.py index 09ed274..acc1648 100644 --- a/components/maidsite_desk/button/__init__.py +++ b/components/maidsite_desk/button/__init__.py @@ -92,10 +92,8 @@ CONFIG_SCHEMA = cv.Schema( async def to_code(config): hub = await cg.get_variable(config[CONF_MAIDSITE_DESK_ID]) for key in TYPES: - await setup_conf(config, key, hub) - -async def setup_conf(parent_config, key, hub): - if child_config := parent_config.get(key): - var = await button.new_button(child_config) - await cg.register_parented(var, parent_config[CONF_MAIDSITE_DESK_ID]) - cg.add(getattr(hub, f"set_{key}_button")(var)) + if child_config := config.get(key): + var = await button.new_button(child_config) + await cg.register_component(var, child_config) + await cg.register_parented(var, config[CONF_MAIDSITE_DESK_ID]) + cg.add(getattr(hub, f"set_{key}_button")(var)) diff --git a/components/maidsite_desk/button/maidsite_desk_button.cpp b/components/maidsite_desk/button/maidsite_desk_button.cpp index 2e51341..d191887 100644 --- a/components/maidsite_desk/button/maidsite_desk_button.cpp +++ b/components/maidsite_desk/button/maidsite_desk_button.cpp @@ -1,10 +1,18 @@ #include "maidsite_desk_button.h" +#include "esphome/core/log.h" namespace esphome { namespace maidsite_desk { + static const char *const TAG = "maidsite_desk.button"; + + void MaidsiteDeskButton::dump_config() + { + LOG_BUTTON("", "Maidsite Desk Button", this); + } + void MaidsiteDeskButton::press_action() { this->parent_->button_press_action(this); diff --git a/components/maidsite_desk/button/maidsite_desk_button.h b/components/maidsite_desk/button/maidsite_desk_button.h index db96b6c..7f5a647 100644 --- a/components/maidsite_desk/button/maidsite_desk_button.h +++ b/components/maidsite_desk/button/maidsite_desk_button.h @@ -1,5 +1,6 @@ #pragma once #include "esphome/components/button/button.h" +#include "esphome/core/component.h" #include "../maidsite_desk.h" @@ -7,10 +8,12 @@ namespace esphome { namespace maidsite_desk { + class MaidsiteDeskComponent; class MaidsiteDeskButton : public button::Button, public Parented { public: MaidsiteDeskButton() = default; + void dump_config() override; protected: void press_action() override; diff --git a/components/maidsite_desk/number/__init__.py b/components/maidsite_desk/number/__init__.py index e9926f3..53f1ec0 100644 --- a/components/maidsite_desk/number/__init__.py +++ b/components/maidsite_desk/number/__init__.py @@ -41,10 +41,13 @@ CONFIG_SCHEMA = cv.Schema( async def to_code(config): hub = await cg.get_variable(config[CONF_MAIDSITE_DESK_ID]) for index, key in enumerate(TYPES): - await setup_conf(config, key, index, hub) - -async def setup_conf(parent_config, key, index, hub): - if child_config := parent_config.get(key): - var = await number.new_number(child_config, min_value=CONF_NUMBERS[index][0], max_value=CONF_NUMBERS[index][1], step=CONF_NUMBERS[index][2]) - await cg.register_parented(var, parent_config[CONF_MAIDSITE_DESK_ID]) - cg.add(getattr(hub, f"set_{key}_number")(var)) + if child_config := config.get(key): + var = await number.new_number( + child_config, + min_value=CONF_NUMBERS[index][0], + max_value=CONF_NUMBERS[index][1], + step=CONF_NUMBERS[index][2] + ) + await cg.register_component(var, child_config) + await cg.register_parented(var, config[CONF_MAIDSITE_DESK_ID]) + cg.add(getattr(hub, f"set_{key}_number")(var)) diff --git a/components/maidsite_desk/number/maidsite_desk_number.cpp b/components/maidsite_desk/number/maidsite_desk_number.cpp index 1953909..30419cd 100644 --- a/components/maidsite_desk/number/maidsite_desk_number.cpp +++ b/components/maidsite_desk/number/maidsite_desk_number.cpp @@ -1,10 +1,18 @@ #include "maidsite_desk_number.h" +#include "esphome/core/log.h" namespace esphome { namespace maidsite_desk { + static const char *const TAG = "maidsite_desk.number"; + + void MaidsiteDeskNumber::dump_config() + { + LOG_NUMBER("", "Maidsite Desk Number", this); + } + void MaidsiteDeskNumber::control(float value) { this->publish_state(value); diff --git a/components/maidsite_desk/number/maidsite_desk_number.h b/components/maidsite_desk/number/maidsite_desk_number.h index a586de3..85ea50f 100644 --- a/components/maidsite_desk/number/maidsite_desk_number.h +++ b/components/maidsite_desk/number/maidsite_desk_number.h @@ -1,5 +1,6 @@ #pragma once #include "esphome/components/number/number.h" +#include "esphome/core/component.h" #include "../maidsite_desk.h" @@ -7,10 +8,12 @@ namespace esphome { namespace maidsite_desk { + class MaidsiteDeskComponent; class MaidsiteDeskNumber : public number::Number, public Parented { public: MaidsiteDeskNumber() = default; + void dump_config() override; protected: void control(float value) override; diff --git a/components/maidsite_desk/sensor.py b/components/maidsite_desk/sensor.py deleted file mode 100644 index 4cf3b7d..0000000 --- a/components/maidsite_desk/sensor.py +++ /dev/null @@ -1,82 +0,0 @@ -import esphome.codegen as cg -import esphome.config_validation as cv -from esphome.components import sensor -from esphome.const import ( - UNIT_CENTIMETER, - UNIT_PERCENT, -) -from . import MaidsiteDeskComponent, CONF_MAIDSITE_DESK_ID - -CONF_UNIT = "unit" -CONF_HEIGHT_ABS = "height_abs" -CONF_HEIGHT_PCT = "height_pct" -CONF_HEIGHT_MIN = "height_min" -CONF_HEIGHT_MAX = "height_max" -CONF_POSITION_M1 = "position_m1" -CONF_POSITION_M2 = "position_m2" -CONF_POSITION_M3 = "position_m3" -CONF_POSITION_M4 = "position_m4" - -TYPES = [ - CONF_UNIT, - CONF_HEIGHT_ABS, - CONF_HEIGHT_PCT, - CONF_HEIGHT_MIN, - CONF_HEIGHT_MAX, - CONF_POSITION_M1, - CONF_POSITION_M2, - CONF_POSITION_M3, - CONF_POSITION_M4, -] - -CONFIG_SCHEMA = cv.All( - cv.Schema( - { - cv.GenerateID(CONF_MAIDSITE_DESK_ID): cv.use_id(MaidsiteDeskComponent), - - cv.Optional(CONF_UNIT): sensor.sensor_schema(), - cv.Optional(CONF_HEIGHT_ABS): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - cv.Optional(CONF_HEIGHT_PCT): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_PERCENT, - ), - cv.Optional(CONF_HEIGHT_MIN): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - cv.Optional(CONF_HEIGHT_MAX): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - cv.Optional(CONF_POSITION_M1): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - cv.Optional(CONF_POSITION_M2): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - cv.Optional(CONF_POSITION_M3): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - cv.Optional(CONF_POSITION_M4): sensor.sensor_schema( - accuracy_decimals=2, - unit_of_measurement=UNIT_CENTIMETER, - ), - } - ).extend(cv.COMPONENT_SCHEMA) -) - -async def to_code(config): - hub = await cg.get_variable(config[CONF_MAIDSITE_DESK_ID]) - for key in TYPES: - await setup_conf(config, key, hub) - -async def setup_conf(parent_config, key, hub): - if child_config := parent_config.get(key): - var = await sensor.new_sensor(child_config) - cg.add(getattr(hub, f"set_{key}_sensor")(var)) diff --git a/components/maidsite_desk/sensor/__init__.py b/components/maidsite_desk/sensor/__init__.py new file mode 100644 index 0000000..e5637d3 --- /dev/null +++ b/components/maidsite_desk/sensor/__init__.py @@ -0,0 +1,88 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + UNIT_CENTIMETER, + UNIT_PERCENT, +) +from . import CONF_MAIDSITE_DESK_ID, MaidsiteDeskComponent, maidsite_desk_ns + +CONF_UNIT = "unit" +CONF_HEIGHT_ABS = "height_abs" +CONF_HEIGHT_PCT = "height_pct" +CONF_HEIGHT_MIN = "height_min" +CONF_HEIGHT_MAX = "height_max" +CONF_POSITION_M1 = "position_m1" +CONF_POSITION_M2 = "position_m2" +CONF_POSITION_M3 = "position_m3" +CONF_POSITION_M4 = "position_m4" + +TYPES = [ + CONF_UNIT, + CONF_HEIGHT_ABS, + CONF_HEIGHT_PCT, + CONF_HEIGHT_MIN, + CONF_HEIGHT_MAX, + CONF_POSITION_M1, + CONF_POSITION_M2, + CONF_POSITION_M3, + CONF_POSITION_M4, +] + +MaidsiteDeskSensor = maidsite_desk_ns.class_("MaidsiteDeskSensor", sensor.Sensor, cg.Component) + +CONFIG_SCHEMA = cv.Schema( + { + cv.GenerateID(CONF_MAIDSITE_DESK_ID): cv.use_id(MaidsiteDeskComponent), + + cv.Optional(CONF_UNIT): sensor.sensor_schema(), + + cv.Optional(CONF_HEIGHT_ABS): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + cv.Optional(CONF_HEIGHT_PCT): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_PERCENT, + ), + cv.Optional(CONF_HEIGHT_MIN): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + cv.Optional(CONF_HEIGHT_MAX): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + cv.Optional(CONF_POSITION_M1): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + cv.Optional(CONF_POSITION_M2): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + cv.Optional(CONF_POSITION_M3): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + cv.Optional(CONF_POSITION_M4): sensor.sensor_schema( + MaidsiteDeskSensor, + accuracy_decimals=2, + unit_of_measurement=UNIT_CENTIMETER, + ), + } +).extend(cv.COMPONENT_SCHEMA) + +async def to_code(config): + hub = await cg.get_variable(config[CONF_MAIDSITE_DESK_ID]) + for key in TYPES: + if child_config := config.get(key): + var = await sensor.new_sensor(child_config) + cg.add(getattr(hub, f"set_{key}_sensor")(var)) diff --git a/components/maidsite_desk/sensor/maidsite_desk_sensor.cpp b/components/maidsite_desk/sensor/maidsite_desk_sensor.cpp new file mode 100644 index 0000000..23f97c2 --- /dev/null +++ b/components/maidsite_desk/sensor/maidsite_desk_sensor.cpp @@ -0,0 +1,16 @@ +#include "maidsite_desk_sensor.h" +#include "esphome/core/log.h" + + +namespace esphome +{ + namespace maidsite_desk + { + static const char *const TAG = "maidsite_desk.sensor"; + + void MaidsiteDeskSensor::dump_config() + { + LOG_SENSOR("", "Maidsite Desk Sensor", this); + } + } // namespace maidsite_desk +} // namespace esphome diff --git a/components/maidsite_desk/sensor/maidsite_desk_sensor.h b/components/maidsite_desk/sensor/maidsite_desk_sensor.h new file mode 100644 index 0000000..f869586 --- /dev/null +++ b/components/maidsite_desk/sensor/maidsite_desk_sensor.h @@ -0,0 +1,19 @@ +#pragma once +#include "esphome/components/sensor/sensor.h" +#include "esphome/core/component.h" +#include "../maidsite_desk.h" + + +namespace esphome +{ + namespace maidsite_desk + { + class MaidsiteDeskComponent; + class MaidsiteDeskSensor : public sensor::Sensor, public Component, public Parented + { + public: + MaidsiteDeskSensor() = default; + void dump_config() override; + }; + } // namespace maidsite_desk +} // namespace esphome