ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
shelly_dimmer.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP8266
4
6#include "esphome/core/log.h"
10
11#include <array>
12
13namespace esphome::shelly_dimmer {
14
16 private:
17 static constexpr uint16_t SHELLY_DIMMER_BUFFER_SIZE = 256;
18
19 public:
20 float get_setup_priority() const override { return setup_priority::LATE; }
21
23 void handle_firmware();
24 void setup() override;
25 void update() override;
26 void dump_config() override;
27
29 auto traits = light::LightTraits();
30 traits.set_supported_color_modes({light::ColorMode::BRIGHTNESS});
31 return traits;
32 }
33
34 void setup_state(light::LightState *state) override { this->state_ = state; }
35 void write_state(light::LightState *state) override;
36
37 void set_nrst_pin(GPIOPin *nrst_pin) { this->pin_nrst_ = nrst_pin; }
38 void set_boot0_pin(GPIOPin *boot0_pin) { this->pin_boot0_ = boot0_pin; }
39
40 void set_leading_edge(bool leading_edge) { this->leading_edge_ = leading_edge; }
41 void set_warmup_brightness(uint16_t warmup_brightness) { this->warmup_brightness_ = warmup_brightness; }
42 void set_warmup_time(uint16_t warmup_time) { this->warmup_time_ = warmup_time; }
43 void set_fade_rate(uint16_t fade_rate) { this->fade_rate_ = fade_rate; }
44 void set_min_brightness(uint16_t min_brightness) { this->min_brightness_ = min_brightness; }
45 void set_max_brightness(uint16_t max_brightness) { this->max_brightness_ = max_brightness; }
46
47 void set_power_sensor(sensor::Sensor *power_sensor) { this->power_sensor_ = power_sensor; }
48 void set_voltage_sensor(sensor::Sensor *voltage_sensor) { this->voltage_sensor_ = voltage_sensor; }
49 void set_current_sensor(sensor::Sensor *current_sensor) { this->current_sensor_ = current_sensor; }
50
51 protected:
54
55 // Frame parser state.
56 uint8_t seq_{0};
57 std::array<uint8_t, SHELLY_DIMMER_BUFFER_SIZE> buffer_;
58 uint8_t buffer_pos_{0};
59
60 // Firmware version.
63
64 // Configuration.
65 bool leading_edge_{false};
66 uint16_t warmup_brightness_{100};
67 uint16_t warmup_time_{20};
68 uint16_t fade_rate_{0};
69 uint16_t min_brightness_{0};
70 uint16_t max_brightness_{1000};
71
76
77 bool ready_{false};
78 uint16_t brightness_;
79
81 uint16_t convert_brightness_(float brightness);
82
84 void send_brightness_(uint16_t brightness);
85
87 void send_settings_();
88
90 bool upgrade_firmware_();
91
93 bool send_command_(uint8_t cmd, const uint8_t *payload, uint8_t len);
94
96 size_t frame_command_(uint8_t *data, uint8_t cmd, const uint8_t *payload, size_t len);
97
101 int handle_byte_(uint8_t c);
102
104 bool read_frame_();
105
107 bool handle_frame_();
108
110 void reset_(bool boot0);
111
113 void reset_normal_boot_();
114
116 void reset_dfu_boot_();
117};
118
119} // namespace esphome::shelly_dimmer
120
121#endif // USE_ESP8266
This class simplifies creating components that periodically check a state.
Definition component.h:585
Interface to write LightStates to hardware.
This class represents the communication layer between the front-end MQTT layer and the hardware outpu...
Definition light_state.h:93
This class is used to represent the capabilities of a light.
Definition light_traits.h:9
Base-class for all sensors.
Definition sensor.h:47
void write_state(light::LightState *state) override
void set_fade_rate(uint16_t fade_rate)
float get_setup_priority() const override
light::LightTraits get_traits() override
void reset_dfu_boot_()
Reset STM32 to boot into DFU mode to enable firmware upgrades.
bool upgrade_firmware_()
Performs a firmware upgrade.
void set_min_brightness(uint16_t min_brightness)
void reset_normal_boot_()
Reset STM32 to boot the regular firmware.
bool handle_frame_()
Handles a complete frame.
void set_max_brightness(uint16_t max_brightness)
void set_voltage_sensor(sensor::Sensor *voltage_sensor)
void send_brightness_(uint16_t brightness)
Sends the given brightness value.
void set_warmup_brightness(uint16_t warmup_brightness)
void send_settings_()
Sends dimmer configuration.
int handle_byte_(uint8_t c)
Handles a single byte as part of a protocol frame.
std::array< uint8_t, SHELLY_DIMMER_BUFFER_SIZE > buffer_
void set_current_sensor(sensor::Sensor *current_sensor)
uint16_t convert_brightness_(float brightness)
Convert relative brightness into a dimmer brightness value.
void set_nrst_pin(GPIOPin *nrst_pin)
void set_boot0_pin(GPIOPin *boot0_pin)
void set_leading_edge(bool leading_edge)
void set_warmup_time(uint16_t warmup_time)
void setup_state(light::LightState *state) override
size_t frame_command_(uint8_t *data, uint8_t cmd, const uint8_t *payload, size_t len)
Frames a given command payload.
void reset_(bool boot0)
Reset STM32 with the BOOT0 pin set to the given value.
bool read_frame_()
Reads a response frame.
void set_power_sensor(sensor::Sensor *power_sensor)
bool send_command_(uint8_t cmd, const uint8_t *payload, uint8_t len)
Sends a command and waits for an acknowledgement.
bool state
Definition fan.h:2
@ BRIGHTNESS
Dimmable light.
constexpr float LATE
For components that should be initialized at the very end of the setup process.
Definition component.h:57
const void size_t len
Definition hal.h:64