From cd1642dc907aed132d8ac8f3cddc8b8ca180fa32 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Sun, 7 Apr 2024 21:12:02 +0200 Subject: [PATCH] pimoroni led switch moved to hub --- esphome/components/bh1745/bh1745.cpp | 7 +++++++ esphome/components/bh1745/bh1745.h | 18 ++++++++++++++++ esphome/components/bh1745/sensor.py | 21 ++++++++++++++++++- esphome/components/bh1745/switch/__init__.py | 20 ------------------ .../bh1745/switch/bh1745_switch_led.cpp | 17 --------------- .../bh1745/switch/bh1745_switch_led.h | 21 ------------------- tests/components/bh1745/common.yaml | 5 +---- 7 files changed, 46 insertions(+), 63 deletions(-) delete mode 100644 esphome/components/bh1745/switch/__init__.py delete mode 100644 esphome/components/bh1745/switch/bh1745_switch_led.cpp delete mode 100644 esphome/components/bh1745/switch/bh1745_switch_led.h diff --git a/esphome/components/bh1745/bh1745.cpp b/esphome/components/bh1745/bh1745.cpp index a5414cf312..a6a9b6ca89 100644 --- a/esphome/components/bh1745/bh1745.cpp +++ b/esphome/components/bh1745/bh1745.cpp @@ -278,5 +278,12 @@ void BH1745Component::publish_data_() { } } +void BH1745Component::set_pimoroni_led_switch(switch_::Switch *led_switch) { + this->led_switch_ = led_switch; + if (this->led_switch_ != nullptr) { + static_cast(this->led_switch_)->set_bh1745(this); + } +} + } // namespace bh1745 } // namespace esphome diff --git a/esphome/components/bh1745/bh1745.h b/esphome/components/bh1745/bh1745.h index e72b2bfe53..7b827dad5a 100644 --- a/esphome/components/bh1745/bh1745.h +++ b/esphome/components/bh1745/bh1745.h @@ -2,6 +2,7 @@ #include "esphome/core/component.h" #include "esphome/components/sensor/sensor.h" +#include "esphome/components/switch/switch.h" #include "esphome/components/i2c/i2c.h" namespace esphome { @@ -100,6 +101,7 @@ class BH1745Component : public PollingComponent, public i2c::I2CDevice { void set_clear_counts_sensor(sensor::Sensor *clear) { this->clear_counts_sensor_ = clear; } void set_illuminance_sensor(sensor::Sensor *illuminance) { this->illuminance_sensor_ = illuminance; } void set_color_temperature_sensor(sensor::Sensor *cct) { this->color_temperature_sensor_ = cct; } + void set_pimoroni_led_switch(switch_::Switch *led_switch); // only for Pimoroni board void switch_led(bool on_off); @@ -116,6 +118,8 @@ class BH1745Component : public PollingComponent, public i2c::I2CDevice { sensor::Sensor *illuminance_sensor_{nullptr}; sensor::Sensor *color_temperature_sensor_{nullptr}; + switch_::Switch *led_switch_{nullptr}; + enum class State : uint8_t { NOT_INITIALIZED, INITIAL_SETUP_COMPLETED, @@ -150,5 +154,19 @@ class BH1745Component : public PollingComponent, public i2c::I2CDevice { void publish_data_(); }; +class BH1745SwitchLed : public switch_::Switch, public Component { + public: + void set_bh1745(BH1745Component *bh1745) { this->bh1745_ = bh1745; } + + protected: + void write_state(bool state) override { + if (this->bh1745_ != nullptr) { + this->bh1745_->switch_led(state); + publish_state(state); + } + }; + BH1745Component *bh1745_; +}; + } // namespace bh1745 } // namespace esphome diff --git a/esphome/components/bh1745/sensor.py b/esphome/components/bh1745/sensor.py index 886d2a97dc..5178483386 100644 --- a/esphome/components/bh1745/sensor.py +++ b/esphome/components/bh1745/sensor.py @@ -1,6 +1,6 @@ import esphome.codegen as cg import esphome.config_validation as cv -from esphome.components import i2c, sensor +from esphome.components import i2c, sensor, switch from esphome.const import ( CONF_ID, CONF_COLOR_TEMPERATURE, @@ -19,6 +19,7 @@ from esphome.const import ( CODEOWNERS = ["@latonita"] DEPENDENCIES = ["i2c"] +AUTO_LOAD = ["sensor", "switch"] CONF_BH1745_ID = "bh1745_id" @@ -29,12 +30,16 @@ CONF_GREEN_CHANNEL = "green_channel" CONF_BLUE_CHANNEL = "blue_channel" CONF_CLEAR_CHANNEL = "clear_channel" +CONF_PIMORONI_LED_SWITCH = "pimoroni_led_switch" + bh1745_ns = cg.esphome_ns.namespace("bh1745") BH1745SComponent = bh1745_ns.class_( "BH1745Component", cg.PollingComponent, i2c.I2CDevice ) +BH1745SSwitchLed = bh1745_ns.class_("BH1745SwitchLed", switch.Switch, cg.Component) + AdcGain = bh1745_ns.enum("AdcGain") ADC_GAINS = { "1X": AdcGain.GAIN_1X, @@ -102,6 +107,16 @@ CONFIG_SCHEMA = cv.All( ), key=CONF_NAME, ), + cv.Optional(CONF_PIMORONI_LED_SWITCH): cv.maybe_simple_value( + switch.SWITCH_SCHEMA.extend( + cv.Schema( + { + cv.GenerateID(): cv.declare_id(BH1745SSwitchLed), + } + ) + ), + key=CONF_NAME, + ), } ) .extend(cv.polling_component_schema("60s")) @@ -136,3 +151,7 @@ async def to_code(config): if CONF_COLOR_TEMPERATURE in config: sens = await sensor.new_sensor(config[CONF_COLOR_TEMPERATURE]) cg.add(var.set_color_temperature_sensor(sens)) + + if CONF_PIMORONI_LED_SWITCH in config: + sw = await switch.new_switch(config[CONF_PIMORONI_LED_SWITCH]) + cg.add(var.set_pimoroni_led_switch(sw)) diff --git a/esphome/components/bh1745/switch/__init__.py b/esphome/components/bh1745/switch/__init__.py deleted file mode 100644 index 769084bf90..0000000000 --- a/esphome/components/bh1745/switch/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -import esphome.codegen as cg -import esphome.config_validation as cv -from esphome.components import switch -from ..sensor import bh1745_ns, BH1745SComponent, CONF_BH1745_ID - -BH1745SwitchLed = bh1745_ns.class_("BH1745SwitchLed", switch.Switch, cg.Component) - -CONFIG_SCHEMA = switch.SWITCH_SCHEMA.extend( - { - cv.GenerateID(): cv.declare_id(BH1745SwitchLed), - cv.GenerateID(CONF_BH1745_ID): cv.use_id(BH1745SComponent), - } -).extend(cv.COMPONENT_SCHEMA) - - -async def to_code(config): - var = await switch.new_switch(config) - await cg.register_component(var, config) - hub = await cg.get_variable(config[CONF_BH1745_ID]) - cg.add(var.set_bh1745(hub)) diff --git a/esphome/components/bh1745/switch/bh1745_switch_led.cpp b/esphome/components/bh1745/switch/bh1745_switch_led.cpp deleted file mode 100644 index 9df4da5497..0000000000 --- a/esphome/components/bh1745/switch/bh1745_switch_led.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "bh1745_switch_led.h" -#include "esphome/core/log.h" - -namespace esphome { -namespace bh1745 { - -static const char *const TAG = "bh1745.led"; - -void BH1745SwitchLed::write_state(bool state) { - bh1745_->switch_led(state); - publish_state(state); -} - -void BH1745SwitchLed::dump_config() { LOG_SWITCH("", "BH1745 Pimoroni LED", this); } - -} // namespace bh1745 -} // namespace esphome diff --git a/esphome/components/bh1745/switch/bh1745_switch_led.h b/esphome/components/bh1745/switch/bh1745_switch_led.h deleted file mode 100644 index 4f10e7475c..0000000000 --- a/esphome/components/bh1745/switch/bh1745_switch_led.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "esphome/core/component.h" -#include "esphome/components/switch/switch.h" -#include "../bh1745.h" - -namespace esphome { -namespace bh1745 { - -class BH1745SwitchLed : public switch_::Switch, public Component { - public: - void dump_config() override; - - void set_bh1745(BH1745Component *bh1745) { this->bh1745_ = bh1745; } - - protected: - void write_state(bool state) override; - BH1745Component *bh1745_; -}; -} // namespace bh1745 -} // namespace esphome diff --git a/tests/components/bh1745/common.yaml b/tests/components/bh1745/common.yaml index e14747e2fe..33c27391d9 100644 --- a/tests/components/bh1745/common.yaml +++ b/tests/components/bh1745/common.yaml @@ -10,7 +10,4 @@ sensor: clear_channel: Clear channel illuminance: Illuminance color_temperature: Color temperature - -switch: - - platform: bh1745 - name: BH1754 LED + pimoroni_led_switch: LED Switch