Mark user-configurable classes as final (part 14/21)

Add the C++ `final` specifier to leaf, user-configurable component classes and
automation action/trigger/condition primitives so that classes meant to be
terminal cannot be subclassed by external components. Only classes never used as
a base anywhere in the tree are marked. Part 14 of 21, split alphabetically by
component (rc522_i2c .. scd4x).
This commit is contained in:
Jesse Hills
2026-06-15 13:21:31 +12:00
parent a25ac28ae5
commit 34b3772f83
35 changed files with 63 additions and 60 deletions

View File

@@ -6,7 +6,7 @@
namespace esphome::rc522_i2c { namespace esphome::rc522_i2c {
class RC522I2C : public rc522::RC522, public i2c::I2CDevice { class RC522I2C final : public rc522::RC522, public i2c::I2CDevice {
public: public:
void dump_config() override; void dump_config() override;

View File

@@ -14,9 +14,9 @@
*/ */
namespace esphome::rc522_spi { namespace esphome::rc522_spi {
class RC522Spi : public rc522::RC522, class RC522Spi final : public rc522::RC522,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
spi::DATA_RATE_4MHZ> { spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_4MHZ> {
public: public:
void setup() override; void setup() override;

View File

@@ -37,7 +37,7 @@ struct TargetSensor {
}; };
#endif #endif
class RD03DComponent : public Component, public uart::UARTDevice { class RD03DComponent final : public Component, public uart::UARTDevice {
public: public:
void setup() override; void setup() override;
void loop() override; void loop() override;

View File

@@ -13,7 +13,7 @@ namespace esphome::rdm6300 {
class RDM6300BinarySensor; class RDM6300BinarySensor;
class RDM6300Trigger; class RDM6300Trigger;
class RDM6300Component : public Component, public uart::UARTDevice { class RDM6300Component final : public Component, public uart::UARTDevice {
public: public:
void loop() override; void loop() override;
@@ -28,7 +28,7 @@ class RDM6300Component : public Component, public uart::UARTDevice {
uint32_t last_id_{0}; uint32_t last_id_{0};
}; };
class RDM6300BinarySensor : public binary_sensor::BinarySensorInitiallyOff { class RDM6300BinarySensor final : public binary_sensor::BinarySensorInitiallyOff {
public: public:
void set_id(uint32_t id) { id_ = id; } void set_id(uint32_t id) { id_ = id; }
@@ -46,7 +46,7 @@ class RDM6300BinarySensor : public binary_sensor::BinarySensorInitiallyOff {
uint32_t id_; uint32_t id_;
}; };
class RDM6300Trigger : public Trigger<uint32_t> { class RDM6300Trigger final : public Trigger<uint32_t> {
public: public:
void process(uint32_t uid) { this->trigger(uid); } void process(uint32_t uid) { this->trigger(uid); }
}; };

View File

@@ -31,7 +31,7 @@ class RawBinarySensor : public RemoteReceiverBinarySensorBase {
size_t len_; size_t len_;
}; };
class RawTrigger : public Trigger<RawTimings>, public Component, public RemoteReceiverListener { class RawTrigger final : public Trigger<RawTimings>, public Component, public RemoteReceiverListener {
protected: protected:
bool on_receive(RemoteReceiveData src) override { bool on_receive(RemoteReceiveData src) override {
this->trigger(src.get_raw_data()); this->trigger(src.get_raw_data());

View File

@@ -256,7 +256,7 @@ template<typename T> class RemoteReceiverBinarySensor : public RemoteReceiverBin
}; };
template<typename T> template<typename T>
class RemoteReceiverTrigger : public Trigger<typename T::ProtocolData>, public RemoteReceiverListener { class RemoteReceiverTrigger final : public Trigger<typename T::ProtocolData>, public RemoteReceiverListener {
protected: protected:
bool on_receive(RemoteReceiveData src) override { bool on_receive(RemoteReceiveData src) override {
auto proto = T(); auto proto = T();

View File

@@ -55,11 +55,11 @@ struct RemoteReceiverComponentStore {
}; };
#endif #endif
class RemoteReceiverComponent : public remote_base::RemoteReceiverBase, class RemoteReceiverComponent final : public remote_base::RemoteReceiverBase,
public Component public Component
#if defined(USE_ESP32) && SOC_RMT_SUPPORTED #if defined(USE_ESP32) && SOC_RMT_SUPPORTED
, ,
public remote_base::RemoteRMTChannel public remote_base::RemoteRMTChannel
#endif #endif
{ {

View File

@@ -7,7 +7,8 @@
namespace esphome::remote_transmitter { namespace esphome::remote_transmitter {
template<typename... Ts> class DigitalWriteAction : public Action<Ts...>, public Parented<RemoteTransmitterComponent> { template<typename... Ts>
class DigitalWriteAction final : public Action<Ts...>, public Parented<RemoteTransmitterComponent> {
public: public:
TEMPLATABLE_VALUE(bool, value) TEMPLATABLE_VALUE(bool, value)
void play(const Ts &...x) override { this->parent_->digital_write(this->value_.value(x...)); } void play(const Ts &...x) override { this->parent_->digital_write(this->value_.value(x...)); }

View File

@@ -33,11 +33,11 @@ struct RemoteTransmitterComponentStore {
#endif #endif
#endif #endif
class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase, class RemoteTransmitterComponent final : public remote_base::RemoteTransmitterBase,
public Component public Component
#if defined(USE_ESP32) && SOC_RMT_SUPPORTED #if defined(USE_ESP32) && SOC_RMT_SUPPORTED
, ,
public remote_base::RemoteRMTChannel public remote_base::RemoteRMTChannel
#endif #endif
{ {
public: public:

View File

@@ -14,7 +14,7 @@
namespace esphome::resampler { namespace esphome::resampler {
class ResamplerSpeaker : public Component, public speaker::Speaker { class ResamplerSpeaker final : public Component, public speaker::Speaker {
public: public:
float get_setup_priority() const override { return esphome::setup_priority::DATA; } float get_setup_priority() const override { return esphome::setup_priority::DATA; }
void dump_config() override; void dump_config() override;

View File

@@ -10,7 +10,7 @@ enum ResistanceConfiguration {
DOWNSTREAM, DOWNSTREAM,
}; };
class ResistanceSensor : public Component, public sensor::Sensor { class ResistanceSensor final : public Component, public sensor::Sensor {
public: public:
void set_sensor(Sensor *sensor) { sensor_ = sensor; } void set_sensor(Sensor *sensor) { sensor_ = sensor; }
void set_configuration(ResistanceConfiguration configuration) { configuration_ = configuration; } void set_configuration(ResistanceConfiguration configuration) { configuration_ = configuration; }

View File

@@ -5,7 +5,7 @@
namespace esphome::restart { namespace esphome::restart {
class RestartSwitch : public switch_::Switch, public Component { class RestartSwitch final : public switch_::Switch, public Component {
public: public:
void dump_config() override; void dump_config() override;

View File

@@ -44,7 +44,7 @@ struct RFBridgeAdvancedData {
std::string code; std::string code;
}; };
class RFBridgeComponent : public uart::UARTDevice, public Component { class RFBridgeComponent final : public uart::UARTDevice, public Component {
public: public:
void loop() override; void loop() override;
void dump_config() override; void dump_config() override;
@@ -76,7 +76,7 @@ class RFBridgeComponent : public uart::UARTDevice, public Component {
CallbackManager<void(RFBridgeAdvancedData)> advanced_data_callback_; CallbackManager<void(RFBridgeAdvancedData)> advanced_data_callback_;
}; };
template<typename... Ts> class RFBridgeSendCodeAction : public Action<Ts...> { template<typename... Ts> class RFBridgeSendCodeAction final : public Action<Ts...> {
public: public:
RFBridgeSendCodeAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeSendCodeAction(RFBridgeComponent *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(uint16_t, sync) TEMPLATABLE_VALUE(uint16_t, sync)
@@ -97,7 +97,7 @@ template<typename... Ts> class RFBridgeSendCodeAction : public Action<Ts...> {
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeSendAdvancedCodeAction : public Action<Ts...> { template<typename... Ts> class RFBridgeSendAdvancedCodeAction final : public Action<Ts...> {
public: public:
RFBridgeSendAdvancedCodeAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeSendAdvancedCodeAction(RFBridgeComponent *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(uint8_t, length) TEMPLATABLE_VALUE(uint8_t, length)
@@ -116,7 +116,7 @@ template<typename... Ts> class RFBridgeSendAdvancedCodeAction : public Action<Ts
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeLearnAction : public Action<Ts...> { template<typename... Ts> class RFBridgeLearnAction final : public Action<Ts...> {
public: public:
RFBridgeLearnAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeLearnAction(RFBridgeComponent *parent) : parent_(parent) {}
@@ -126,7 +126,7 @@ template<typename... Ts> class RFBridgeLearnAction : public Action<Ts...> {
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeStartAdvancedSniffingAction : public Action<Ts...> { template<typename... Ts> class RFBridgeStartAdvancedSniffingAction final : public Action<Ts...> {
public: public:
RFBridgeStartAdvancedSniffingAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeStartAdvancedSniffingAction(RFBridgeComponent *parent) : parent_(parent) {}
@@ -136,7 +136,7 @@ template<typename... Ts> class RFBridgeStartAdvancedSniffingAction : public Acti
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeStopAdvancedSniffingAction : public Action<Ts...> { template<typename... Ts> class RFBridgeStopAdvancedSniffingAction final : public Action<Ts...> {
public: public:
RFBridgeStopAdvancedSniffingAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeStopAdvancedSniffingAction(RFBridgeComponent *parent) : parent_(parent) {}
@@ -146,7 +146,7 @@ template<typename... Ts> class RFBridgeStopAdvancedSniffingAction : public Actio
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeStartBucketSniffingAction : public Action<Ts...> { template<typename... Ts> class RFBridgeStartBucketSniffingAction final : public Action<Ts...> {
public: public:
RFBridgeStartBucketSniffingAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeStartBucketSniffingAction(RFBridgeComponent *parent) : parent_(parent) {}
@@ -156,7 +156,7 @@ template<typename... Ts> class RFBridgeStartBucketSniffingAction : public Action
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeSendRawAction : public Action<Ts...> { template<typename... Ts> class RFBridgeSendRawAction final : public Action<Ts...> {
public: public:
RFBridgeSendRawAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeSendRawAction(RFBridgeComponent *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(std::string, raw) TEMPLATABLE_VALUE(std::string, raw)
@@ -167,7 +167,7 @@ template<typename... Ts> class RFBridgeSendRawAction : public Action<Ts...> {
RFBridgeComponent *parent_; RFBridgeComponent *parent_;
}; };
template<typename... Ts> class RFBridgeBeepAction : public Action<Ts...> { template<typename... Ts> class RFBridgeBeepAction final : public Action<Ts...> {
public: public:
RFBridgeBeepAction(RFBridgeComponent *parent) : parent_(parent) {} RFBridgeBeepAction(RFBridgeComponent *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(uint16_t, duration) TEMPLATABLE_VALUE(uint16_t, duration)

View File

@@ -6,7 +6,7 @@
namespace esphome::rgb { namespace esphome::rgb {
class RGBLightOutput : public light::LightOutput { class RGBLightOutput final : public light::LightOutput {
public: public:
void set_red(output::FloatOutput *red) { red_ = red; } void set_red(output::FloatOutput *red) { red_ = red; }
void set_green(output::FloatOutput *green) { green_ = green; } void set_green(output::FloatOutput *green) { green_ = green; }

View File

@@ -7,7 +7,7 @@
namespace esphome::rgbct { namespace esphome::rgbct {
class RGBCTLightOutput : public light::LightOutput { class RGBCTLightOutput final : public light::LightOutput {
public: public:
void set_red(output::FloatOutput *red) { red_ = red; } void set_red(output::FloatOutput *red) { red_ = red; }
void set_green(output::FloatOutput *green) { green_ = green; } void set_green(output::FloatOutput *green) { green_ = green; }

View File

@@ -6,7 +6,7 @@
namespace esphome::rgbw { namespace esphome::rgbw {
class RGBWLightOutput : public light::LightOutput { class RGBWLightOutput final : public light::LightOutput {
public: public:
void set_red(output::FloatOutput *red) { red_ = red; } void set_red(output::FloatOutput *red) { red_ = red; }
void set_green(output::FloatOutput *green) { green_ = green; } void set_green(output::FloatOutput *green) { green_ = green; }

View File

@@ -6,7 +6,7 @@
namespace esphome::rgbww { namespace esphome::rgbww {
class RGBWWLightOutput : public light::LightOutput { class RGBWWLightOutput final : public light::LightOutput {
public: public:
void set_red(output::FloatOutput *red) { red_ = red; } void set_red(output::FloatOutput *red) { red_ = red; }
void set_green(output::FloatOutput *green) { green_ = green; } void set_green(output::FloatOutput *green) { green_ = green; }

View File

@@ -41,7 +41,7 @@ struct RotaryEncoderSensorStore {
static void gpio_intr(RotaryEncoderSensorStore *arg); static void gpio_intr(RotaryEncoderSensorStore *arg);
}; };
class RotaryEncoderSensor : public sensor::Sensor, public Component { class RotaryEncoderSensor final : public sensor::Sensor, public Component {
public: public:
void set_pin_a(InternalGPIOPin *pin_a) { pin_a_ = pin_a; } void set_pin_a(InternalGPIOPin *pin_a) { pin_a_ = pin_a; }
void set_pin_b(InternalGPIOPin *pin_b) { pin_b_ = pin_b; } void set_pin_b(InternalGPIOPin *pin_b) { pin_b_ = pin_b; }
@@ -106,7 +106,7 @@ class RotaryEncoderSensor : public sensor::Sensor, public Component {
CallbackManager<void(int32_t)> listeners_{}; CallbackManager<void(int32_t)> listeners_{};
}; };
template<typename... Ts> class RotaryEncoderSetValueAction : public Action<Ts...> { template<typename... Ts> class RotaryEncoderSetValueAction final : public Action<Ts...> {
public: public:
RotaryEncoderSetValueAction(RotaryEncoderSensor *encoder) : encoder_(encoder) {} RotaryEncoderSetValueAction(RotaryEncoderSensor *encoder) : encoder_(encoder) {}
TEMPLATABLE_VALUE(int, value) TEMPLATABLE_VALUE(int, value)

View File

@@ -13,7 +13,7 @@
namespace esphome::router { namespace esphome::router {
class Router : public Component, public speaker::Speaker { class Router final : public Component, public speaker::Speaker {
public: public:
float get_setup_priority() const override { return setup_priority::DATA; } float get_setup_priority() const override { return setup_priority::DATA; }
@@ -77,7 +77,7 @@ class Router : public Component, public speaker::Speaker {
std::atomic<int8_t> active_output_idx_{0}; std::atomic<int8_t> active_output_idx_{0};
}; };
template<typename... Ts> class SwitchOutputAction : public Action<Ts...> { template<typename... Ts> class SwitchOutputAction final : public Action<Ts...> {
public: public:
explicit SwitchOutputAction(Router *parent) : parent_(parent) {} explicit SwitchOutputAction(Router *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(speaker::Speaker *, target) TEMPLATABLE_VALUE(speaker::Speaker *, target)

View File

@@ -7,7 +7,7 @@
namespace esphome::rp2040 { namespace esphome::rp2040 {
class RP2040GPIOPin : public InternalGPIOPin { class RP2040GPIOPin final : public InternalGPIOPin {
public: public:
void set_pin(uint8_t pin) { pin_ = pin; } void set_pin(uint8_t pin) { pin_ = pin; }
void set_inverted(bool inverted) { inverted_ = inverted; } void set_inverted(bool inverted) { inverted_ = inverted; }

View File

@@ -18,7 +18,7 @@ enum class BLEComponentState : uint8_t {
DISABLED, DISABLED,
}; };
class RP2040BLE : public Component { class RP2040BLE final : public Component {
public: public:
void setup() override; void setup() override;
void loop() override; void loop() override;

View File

@@ -57,7 +57,7 @@ inline const char *rgb_order_to_string(RGBOrder order) {
using init_fn = void (*)(PIO pio, uint sm, uint offset, uint pin, float freq); using init_fn = void (*)(PIO pio, uint sm, uint offset, uint pin, float freq);
class RP2040PIOLEDStripLightOutput : public light::AddressableLight { class RP2040PIOLEDStripLightOutput final : public light::AddressableLight {
public: public:
void setup() override; void setup() override;
void write_state(light::LightState *state) override; void write_state(light::LightState *state) override;

View File

@@ -9,7 +9,7 @@
namespace esphome::rp2040_pwm { namespace esphome::rp2040_pwm {
class RP2040PWM : public output::FloatOutput, public Component { class RP2040PWM final : public output::FloatOutput, public Component {
public: public:
void set_pin(InternalGPIOPin *pin) { pin_ = pin; } void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
void set_frequency(float frequency) { this->frequency_ = frequency; } void set_frequency(float frequency) { this->frequency_ = frequency; }
@@ -39,7 +39,7 @@ class RP2040PWM : public output::FloatOutput, public Component {
bool frequency_changed_{false}; bool frequency_changed_{false};
}; };
template<typename... Ts> class SetFrequencyAction : public Action<Ts...> { template<typename... Ts> class SetFrequencyAction final : public Action<Ts...> {
public: public:
SetFrequencyAction(RP2040PWM *parent) : parent_(parent) {} SetFrequencyAction(RP2040PWM *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(float, frequency); TEMPLATABLE_VALUE(float, frequency);

View File

@@ -18,7 +18,7 @@ namespace esphome::rpi_dpi_rgb {
constexpr static const char *const TAG = "rpi_dpi_rgb"; constexpr static const char *const TAG = "rpi_dpi_rgb";
class RpiDpiRgb : public display::Display { class RpiDpiRgb final : public display::Display {
public: public:
void update() override { this->do_update_(); } void update() override { this->do_update_(); }
void setup() override; void setup() override;

View File

@@ -27,7 +27,7 @@ enum class State : uint8_t {
STOPPING, STOPPING,
}; };
class Rtttl : public Component { class Rtttl final : public Component {
public: public:
#ifdef USE_OUTPUT #ifdef USE_OUTPUT
void set_output(output::FloatOutput *output) { this->output_ = output; } void set_output(output::FloatOutput *output) { this->output_ = output; }
@@ -116,7 +116,7 @@ class Rtttl : public Component {
#endif #endif
}; };
template<typename... Ts> class PlayAction : public Action<Ts...> { template<typename... Ts> class PlayAction final : public Action<Ts...> {
public: public:
PlayAction(Rtttl *rtttl) : rtttl_(rtttl) {} PlayAction(Rtttl *rtttl) : rtttl_(rtttl) {}
TEMPLATABLE_VALUE(std::string, value) TEMPLATABLE_VALUE(std::string, value)
@@ -127,12 +127,12 @@ template<typename... Ts> class PlayAction : public Action<Ts...> {
Rtttl *rtttl_; Rtttl *rtttl_;
}; };
template<typename... Ts> class StopAction : public Action<Ts...>, public Parented<Rtttl> { template<typename... Ts> class StopAction final : public Action<Ts...>, public Parented<Rtttl> {
public: public:
void play(const Ts &...x) override { this->parent_->stop(); } void play(const Ts &...x) override { this->parent_->stop(); }
}; };
template<typename... Ts> class IsPlayingCondition : public Condition<Ts...>, public Parented<Rtttl> { template<typename... Ts> class IsPlayingCondition final : public Condition<Ts...>, public Parented<Rtttl> {
public: public:
bool check(const Ts &...x) override { return this->parent_->is_playing(); } bool check(const Ts &...x) override { return this->parent_->is_playing(); }
}; };

View File

@@ -17,7 +17,7 @@ namespace runtime_stats {
static const char *const TAG = "runtime_stats"; static const char *const TAG = "runtime_stats";
class RuntimeStatsCollector { class RuntimeStatsCollector final {
public: public:
RuntimeStatsCollector(); RuntimeStatsCollector();

View File

@@ -25,7 +25,7 @@ bool parse_ruuvi_data_byte(uint8_t data_type, const uint8_t *data, uint8_t data_
optional<RuuviParseResult> parse_ruuvi(const esp32_ble_tracker::ESPBTDevice &device); optional<RuuviParseResult> parse_ruuvi(const esp32_ble_tracker::ESPBTDevice &device);
class RuuviListener : public esp32_ble_tracker::ESPBTDeviceListener { class RuuviListener final : public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override; bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
}; };

View File

@@ -9,7 +9,7 @@
namespace esphome::ruuvitag { namespace esphome::ruuvitag {
class RuuviTag : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class RuuviTag final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -6,7 +6,7 @@
namespace esphome::rx8130 { namespace esphome::rx8130 {
class RX8130Component : public time::RealTimeClock, public i2c::I2CDevice { class RX8130Component final : public time::RealTimeClock, public i2c::I2CDevice {
public: public:
void setup() override; void setup() override;
void update() override; void update() override;
@@ -18,12 +18,12 @@ class RX8130Component : public time::RealTimeClock, public i2c::I2CDevice {
void stop_(bool stop); void stop_(bool stop);
}; };
template<typename... Ts> class WriteAction : public Action<Ts...>, public Parented<RX8130Component> { template<typename... Ts> class WriteAction final : public Action<Ts...>, public Parented<RX8130Component> {
public: public:
void play(const Ts... x) override { this->parent_->write_time(); } void play(const Ts... x) override { this->parent_->write_time(); }
}; };
template<typename... Ts> class ReadAction : public Action<Ts...>, public Parented<RX8130Component> { template<typename... Ts> class ReadAction final : public Action<Ts...>, public Parented<RX8130Component> {
public: public:
void play(const Ts... x) override { this->parent_->read_time(); } void play(const Ts... x) override { this->parent_->read_time(); }
}; };

View File

@@ -4,7 +4,7 @@
namespace esphome::safe_mode { namespace esphome::safe_mode {
template<typename... Ts> class MarkSuccessfulAction : public Action<Ts...>, public Parented<SafeModeComponent> { template<typename... Ts> class MarkSuccessfulAction final : public Action<Ts...>, public Parented<SafeModeComponent> {
public: public:
void play(const Ts &...x) override { this->parent_->mark_successful(); } void play(const Ts &...x) override { this->parent_->mark_successful(); }
}; };

View File

@@ -6,7 +6,7 @@
namespace esphome::safe_mode { namespace esphome::safe_mode {
class SafeModeSwitch : public switch_::Switch, public Component { class SafeModeSwitch final : public switch_::Switch, public Component {
public: public:
void dump_config() override; void dump_config() override;
void set_safe_mode(SafeModeComponent *safe_mode_component); void set_safe_mode(SafeModeComponent *safe_mode_component);

View File

@@ -6,7 +6,8 @@
namespace esphome::scd30 { namespace esphome::scd30 {
template<typename... Ts> class ForceRecalibrationWithReference : public Action<Ts...>, public Parented<SCD30Component> { template<typename... Ts>
class ForceRecalibrationWithReference final : public Action<Ts...>, public Parented<SCD30Component> {
public: public:
void play(const Ts &...x) override { void play(const Ts &...x) override {
if (this->value_.has_value()) { if (this->value_.has_value()) {

View File

@@ -7,7 +7,7 @@
namespace esphome::scd30 { namespace esphome::scd30 {
/// This class implements support for the Sensirion scd30 i2c GAS (VOC and CO2eq) sensors. /// This class implements support for the Sensirion scd30 i2c GAS (VOC and CO2eq) sensors.
class SCD30Component : public Component, public sensirion_common::SensirionI2CDevice { class SCD30Component final : public Component, public sensirion_common::SensirionI2CDevice {
public: public:
void set_co2_sensor(sensor::Sensor *co2) { co2_sensor_ = co2; } void set_co2_sensor(sensor::Sensor *co2) { co2_sensor_ = co2; }
void set_humidity_sensor(sensor::Sensor *humidity) { humidity_sensor_ = humidity; } void set_humidity_sensor(sensor::Sensor *humidity) { humidity_sensor_ = humidity; }

View File

@@ -6,7 +6,8 @@
namespace esphome::scd4x { namespace esphome::scd4x {
template<typename... Ts> class PerformForcedCalibrationAction : public Action<Ts...>, public Parented<SCD4XComponent> { template<typename... Ts>
class PerformForcedCalibrationAction final : public Action<Ts...>, public Parented<SCD4XComponent> {
public: public:
void play(const Ts &...x) override { void play(const Ts &...x) override {
if (this->value_.has_value()) { if (this->value_.has_value()) {
@@ -18,7 +19,7 @@ template<typename... Ts> class PerformForcedCalibrationAction : public Action<Ts
TEMPLATABLE_VALUE(uint16_t, value) TEMPLATABLE_VALUE(uint16_t, value)
}; };
template<typename... Ts> class FactoryResetAction : public Action<Ts...>, public Parented<SCD4XComponent> { template<typename... Ts> class FactoryResetAction final : public Action<Ts...>, public Parented<SCD4XComponent> {
public: public:
void play(const Ts &...x) override { this->parent_->factory_reset(); } void play(const Ts &...x) override { this->parent_->factory_reset(); }
}; };

View File

@@ -22,7 +22,7 @@ enum MeasurementMode : uint8_t {
SINGLE_SHOT_RHT_ONLY, SINGLE_SHOT_RHT_ONLY,
}; };
class SCD4XComponent : public PollingComponent, public sensirion_common::SensirionI2CDevice { class SCD4XComponent final : public PollingComponent, public sensirion_common::SensirionI2CDevice {
public: public:
void setup() override; void setup() override;
void dump_config() override; void dump_config() override;