esphome 2025.2.0b1__py3-none-any.whl → 2025.2.0b3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,5 @@
1
1
  #include "cse7766.h"
2
2
  #include "esphome/core/log.h"
3
- #include <cinttypes>
4
- #include <iomanip>
5
- #include <sstream>
6
3
 
7
4
  namespace esphome {
8
5
  namespace cse7766 {
@@ -72,12 +69,8 @@ bool CSE7766Component::check_byte_() {
72
69
  void CSE7766Component::parse_data_() {
73
70
  #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERY_VERBOSE
74
71
  {
75
- std::stringstream ss;
76
- ss << "Raw data:" << std::hex << std::uppercase << std::setfill('0');
77
- for (uint8_t i = 0; i < 23; i++) {
78
- ss << ' ' << std::setw(2) << static_cast<unsigned>(this->raw_data_[i]);
79
- }
80
- ESP_LOGVV(TAG, "%s", ss.str().c_str());
72
+ std::string s = format_hex_pretty(this->raw_data_, sizeof(this->raw_data_));
73
+ ESP_LOGVV(TAG, "Raw data: %s", s.c_str());
81
74
  }
82
75
  #endif
83
76
 
@@ -211,21 +204,20 @@ void CSE7766Component::parse_data_() {
211
204
 
212
205
  #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERY_VERBOSE
213
206
  {
214
- std::stringstream ss;
215
- ss << "Parsed:";
207
+ std::string buf = "Parsed:";
216
208
  if (have_voltage) {
217
- ss << " V=" << voltage << "V";
209
+ buf += str_sprintf(" V=%fV", voltage);
218
210
  }
219
211
  if (have_current) {
220
- ss << " I=" << current * 1000.0f << "mA (~" << calculated_current * 1000.0f << "mA)";
212
+ buf += str_sprintf(" I=%fmA (~%fmA)", current * 1000.0f, calculated_current * 1000.0f);
221
213
  }
222
214
  if (have_power) {
223
- ss << " P=" << power << "W";
215
+ buf += str_sprintf(" P=%fW", power);
224
216
  }
225
217
  if (energy != 0.0f) {
226
- ss << " E=" << energy << "kWh (" << cf_pulses << ")";
218
+ buf += str_sprintf(" E=%fkWh (%u)", energy, cf_pulses);
227
219
  }
228
- ESP_LOGVV(TAG, "%s", ss.str().c_str());
220
+ ESP_LOGVV(TAG, "%s", buf.c_str());
229
221
  }
230
222
  #endif
231
223
  }
@@ -7,13 +7,16 @@
7
7
  #ifdef USE_ARDUINO
8
8
  #include <esp32-hal-dac.h>
9
9
  #endif
10
- #ifdef USE_ESP_IDF
11
- #include <driver/dac.h>
12
- #endif
13
10
 
14
11
  namespace esphome {
15
12
  namespace esp32_dac {
16
13
 
14
+ #ifdef USE_ESP32_VARIANT_ESP32S2
15
+ static constexpr uint8_t DAC0_PIN = 17;
16
+ #else
17
+ static constexpr uint8_t DAC0_PIN = 25;
18
+ #endif
19
+
17
20
  static const char *const TAG = "esp32_dac";
18
21
 
19
22
  void ESP32DAC::setup() {
@@ -22,8 +25,15 @@ void ESP32DAC::setup() {
22
25
  this->turn_off();
23
26
 
24
27
  #ifdef USE_ESP_IDF
25
- auto channel = pin_->get_pin() == 25 ? DAC_CHANNEL_1 : DAC_CHANNEL_2;
26
- dac_output_enable(channel);
28
+ const dac_channel_t channel = this->pin_->get_pin() == DAC0_PIN ? DAC_CHAN_0 : DAC_CHAN_1;
29
+ const dac_oneshot_config_t oneshot_cfg{channel};
30
+ dac_oneshot_new_channel(&oneshot_cfg, &this->dac_handle_);
31
+ #endif
32
+ }
33
+
34
+ void ESP32DAC::on_safe_shutdown() {
35
+ #ifdef USE_ESP_IDF
36
+ dac_oneshot_del_channel(this->dac_handle_);
27
37
  #endif
28
38
  }
29
39
 
@@ -40,8 +50,7 @@ void ESP32DAC::write_state(float state) {
40
50
  state = state * 255;
41
51
 
42
52
  #ifdef USE_ESP_IDF
43
- auto channel = pin_->get_pin() == 25 ? DAC_CHANNEL_1 : DAC_CHANNEL_2;
44
- dac_output_voltage(channel, (uint8_t) state);
53
+ dac_oneshot_output_voltage(this->dac_handle_, state);
45
54
  #endif
46
55
  #ifdef USE_ARDUINO
47
56
  dacWrite(this->pin_->get_pin(), state);
@@ -7,6 +7,10 @@
7
7
 
8
8
  #ifdef USE_ESP32
9
9
 
10
+ #ifdef USE_ESP_IDF
11
+ #include <driver/dac_oneshot.h>
12
+ #endif
13
+
10
14
  namespace esphome {
11
15
  namespace esp32_dac {
12
16
 
@@ -16,6 +20,7 @@ class ESP32DAC : public output::FloatOutput, public Component {
16
20
 
17
21
  /// Initialize pin
18
22
  void setup() override;
23
+ void on_safe_shutdown() override;
19
24
  void dump_config() override;
20
25
  /// HARDWARE setup_priority
21
26
  float get_setup_priority() const override { return setup_priority::HARDWARE; }
@@ -24,6 +29,9 @@ class ESP32DAC : public output::FloatOutput, public Component {
24
29
  void write_state(float state) override;
25
30
 
26
31
  InternalGPIOPin *pin_;
32
+ #ifdef USE_ESP_IDF
33
+ dac_oneshot_handle_t dac_handle_;
34
+ #endif
27
35
  };
28
36
 
29
37
  } // namespace esp32_dac
@@ -1,15 +1,27 @@
1
+ import esphome.codegen as cg
2
+ import esphome.config_validation as cv
1
3
  from esphome import pins
2
4
  from esphome.components import output
3
- import esphome.config_validation as cv
4
- import esphome.codegen as cg
5
+ from esphome.components.esp32 import get_esp32_variant
6
+ from esphome.components.esp32.const import VARIANT_ESP32, VARIANT_ESP32S2
5
7
  from esphome.const import CONF_ID, CONF_NUMBER, CONF_PIN
6
8
 
7
9
  DEPENDENCIES = ["esp32"]
8
10
 
11
+ DAC_PINS = {
12
+ VARIANT_ESP32: (25, 26),
13
+ VARIANT_ESP32S2: (17, 18),
14
+ }
15
+
9
16
 
10
17
  def valid_dac_pin(value):
11
- num = value[CONF_NUMBER]
12
- cv.one_of(25, 26)(num)
18
+ variant = get_esp32_variant()
19
+ try:
20
+ valid_pins = DAC_PINS[variant]
21
+ except KeyError as ex:
22
+ raise cv.Invalid(f"DAC is not supported on {variant}") from ex
23
+ given_pin = value[CONF_NUMBER]
24
+ cv.one_of(*valid_pins)(given_pin)
13
25
  return value
14
26
 
15
27
 
@@ -4,9 +4,6 @@
4
4
  #include "esphome/core/log.h"
5
5
  #include "esphome/core/hal.h"
6
6
  #include <algorithm>
7
- #include <sstream>
8
- #include <iostream> // std::cout, std::fixed
9
- #include <iomanip>
10
7
  namespace esphome {
11
8
  namespace graph {
12
9
 
@@ -231,9 +228,8 @@ void GraphLegend::init(Graph *g) {
231
228
  ESP_LOGI(TAGL, " %s %d %d", txtstr.c_str(), fw, fh);
232
229
 
233
230
  if (this->values_ != VALUE_POSITION_TYPE_NONE) {
234
- std::stringstream ss;
235
- ss << std::fixed << std::setprecision(trace->sensor_->get_accuracy_decimals()) << trace->sensor_->get_state();
236
- std::string valstr = ss.str();
231
+ std::string valstr =
232
+ value_accuracy_to_string(trace->sensor_->get_state(), trace->sensor_->get_accuracy_decimals());
237
233
  if (this->units_) {
238
234
  valstr += trace->sensor_->get_unit_of_measurement();
239
235
  }
@@ -368,9 +364,8 @@ void Graph::draw_legend(display::Display *buff, uint16_t x_offset, uint16_t y_of
368
364
  if (legend_->values_ != VALUE_POSITION_TYPE_NONE) {
369
365
  int xv = x + legend_->xv_;
370
366
  int yv = y + legend_->yv_;
371
- std::stringstream ss;
372
- ss << std::fixed << std::setprecision(trace->sensor_->get_accuracy_decimals()) << trace->sensor_->get_state();
373
- std::string valstr = ss.str();
367
+ std::string valstr =
368
+ value_accuracy_to_string(trace->sensor_->get_state(), trace->sensor_->get_accuracy_decimals());
374
369
  if (legend_->units_) {
375
370
  valstr += trace->sensor_->get_unit_of_measurement();
376
371
  }
@@ -247,8 +247,8 @@ async def to_code(config):
247
247
  )
248
248
  cg.add(log.pre_setup())
249
249
 
250
- for tag, level in config[CONF_LOGS].items():
251
- cg.add(log.set_log_level(tag, LOG_LEVELS[level]))
250
+ for tag, log_level in config[CONF_LOGS].items():
251
+ cg.add(log.set_log_level(tag, LOG_LEVELS[log_level]))
252
252
 
253
253
  cg.add_define("USE_LOGGER")
254
254
  this_severity = LOG_LEVEL_SEVERITY.index(level)
@@ -102,9 +102,6 @@ void Logger::log_vprintf_(int level, const char *tag, int line, const __FlashStr
102
102
  #endif
103
103
 
104
104
  int HOT Logger::level_for(const char *tag) {
105
- // Uses std::vector<> for low memory footprint, though the vector
106
- // could be sorted to minimize lookup times. This feature isn't used that
107
- // much anyway so it doesn't matter too much.
108
105
  if (this->log_levels_.count(tag) != 0)
109
106
  return this->log_levels_[tag];
110
107
  return this->current_level_;
@@ -1,8 +1,6 @@
1
1
 
2
2
  #include "modbus_textsensor.h"
3
3
  #include "esphome/core/log.h"
4
- #include <iomanip>
5
- #include <sstream>
6
4
 
7
5
  namespace esphome {
8
6
  namespace modbus_controller {
@@ -12,20 +10,17 @@ static const char *const TAG = "modbus_controller.text_sensor";
12
10
  void ModbusTextSensor::dump_config() { LOG_TEXT_SENSOR("", "Modbus Controller Text Sensor", this); }
13
11
 
14
12
  void ModbusTextSensor::parse_and_publish(const std::vector<uint8_t> &data) {
15
- std::ostringstream output;
13
+ std::string output_str{};
16
14
  uint8_t items_left = this->response_bytes;
17
15
  uint8_t index = this->offset;
18
- char buffer[5];
19
16
  while ((items_left > 0) && index < data.size()) {
20
17
  uint8_t b = data[index];
21
18
  switch (this->encode_) {
22
19
  case RawEncoding::HEXBYTES:
23
- sprintf(buffer, "%02x", b);
24
- output << buffer;
20
+ output_str += str_snprintf("%02x", 2, b);
25
21
  break;
26
22
  case RawEncoding::COMMA:
27
- sprintf(buffer, index != this->offset ? ",%d" : "%d", b);
28
- output << buffer;
23
+ output_str += str_sprintf(index != this->offset ? ",%d" : "%d", b);
29
24
  break;
30
25
  case RawEncoding::ANSI:
31
26
  if (b < 0x20)
@@ -33,25 +28,24 @@ void ModbusTextSensor::parse_and_publish(const std::vector<uint8_t> &data) {
33
28
  // FALLTHROUGH
34
29
  // Anything else no encoding
35
30
  default:
36
- output << (char) b;
31
+ output_str += (char) b;
37
32
  break;
38
33
  }
39
34
  items_left--;
40
35
  index++;
41
36
  }
42
37
 
43
- auto result = output.str();
44
38
  // Is there a lambda registered
45
39
  // call it with the pre converted value and the raw data array
46
40
  if (this->transform_func_.has_value()) {
47
41
  // the lambda can parse the response itself
48
- auto val = (*this->transform_func_)(this, result, data);
42
+ auto val = (*this->transform_func_)(this, output_str, data);
49
43
  if (val.has_value()) {
50
44
  ESP_LOGV(TAG, "Value overwritten by lambda");
51
- result = val.value();
45
+ output_str = val.value();
52
46
  }
53
47
  }
54
- this->publish_state(result);
48
+ this->publish_state(output_str);
55
49
  }
56
50
 
57
51
  } // namespace modbus_controller
@@ -9,10 +9,10 @@ namespace online_image {
9
9
  static const char *const TAG = "online_image.decoder";
10
10
 
11
11
  bool ImageDecoder::set_size(int width, int height) {
12
- bool resized = this->image_->resize_(width, height);
12
+ bool success = this->image_->resize_(width, height) > 0;
13
13
  this->x_scale_ = static_cast<double>(this->image_->buffer_width_) / width;
14
14
  this->y_scale_ = static_cast<double>(this->image_->buffer_height_) / height;
15
- return resized;
15
+ return success;
16
16
  }
17
17
 
18
18
  void ImageDecoder::draw(int x, int y, int w, int h, const Color &color) {
@@ -51,8 +51,9 @@ size_t DownloadBuffer::read(size_t len) {
51
51
  }
52
52
 
53
53
  size_t DownloadBuffer::resize(size_t size) {
54
- if (this->size_ == size) {
55
- return size;
54
+ if (this->size_ >= size) {
55
+ // Avoid useless reallocations; if the buffer is big enough, don't reallocate.
56
+ return this->size_;
56
57
  }
57
58
  this->allocator_.deallocate(this->buffer_, this->size_);
58
59
  this->buffer_ = this->allocator_.allocate(size);
@@ -61,6 +62,8 @@ size_t DownloadBuffer::resize(size_t size) {
61
62
  this->size_ = size;
62
63
  return size;
63
64
  } else {
65
+ ESP_LOGE(TAG, "allocation of %zu bytes failed. Biggest block in heap: %zu Bytes", size,
66
+ this->allocator_.get_max_free_block_size());
64
67
  this->size_ = 0;
65
68
  return 0;
66
69
  }
@@ -58,7 +58,7 @@ int HOT JpegDecoder::decode(uint8_t *buffer, size_t size) {
58
58
  }
59
59
 
60
60
  if (!this->jpeg_.openRAM(buffer, size, draw_callback)) {
61
- ESP_LOGE(TAG, "Could not open image for decoding.");
61
+ ESP_LOGE(TAG, "Could not open image for decoding: %d", this->jpeg_.getLastError());
62
62
  return DECODE_ERROR_INVALID_TYPE;
63
63
  }
64
64
  auto jpeg_type = this->jpeg_.getJPEGType();
@@ -73,7 +73,9 @@ int HOT JpegDecoder::decode(uint8_t *buffer, size_t size) {
73
73
 
74
74
  this->jpeg_.setUserPointer(this);
75
75
  this->jpeg_.setPixelType(RGB8888);
76
- this->set_size(this->jpeg_.getWidth(), this->jpeg_.getHeight());
76
+ if (!this->set_size(this->jpeg_.getWidth(), this->jpeg_.getHeight())) {
77
+ return DECODE_ERROR_OUT_OF_MEMORY;
78
+ }
77
79
  if (!this->jpeg_.decode(0, 0, 0)) {
78
80
  ESP_LOGE(TAG, "Error while decoding.");
79
81
  this->jpeg_.close();
@@ -64,33 +64,34 @@ void OnlineImage::release() {
64
64
  }
65
65
  }
66
66
 
67
- bool OnlineImage::resize_(int width_in, int height_in) {
67
+ size_t OnlineImage::resize_(int width_in, int height_in) {
68
68
  int width = this->fixed_width_;
69
69
  int height = this->fixed_height_;
70
- if (this->auto_resize_()) {
70
+ if (this->is_auto_resize_()) {
71
71
  width = width_in;
72
72
  height = height_in;
73
73
  if (this->width_ != width && this->height_ != height) {
74
74
  this->release();
75
75
  }
76
76
  }
77
+ size_t new_size = this->get_buffer_size_(width, height);
77
78
  if (this->buffer_) {
78
- return false;
79
+ // Buffer already allocated => no need to resize
80
+ return new_size;
79
81
  }
80
- size_t new_size = this->get_buffer_size_(width, height);
81
82
  ESP_LOGD(TAG, "Allocating new buffer of %zu bytes", new_size);
82
83
  this->buffer_ = this->allocator_.allocate(new_size);
83
84
  if (this->buffer_ == nullptr) {
84
85
  ESP_LOGE(TAG, "allocation of %zu bytes failed. Biggest block in heap: %zu Bytes", new_size,
85
86
  this->allocator_.get_max_free_block_size());
86
87
  this->end_connection_();
87
- return false;
88
+ return 0;
88
89
  }
89
90
  this->buffer_width_ = width;
90
91
  this->buffer_height_ = height;
91
92
  this->width_ = width;
92
93
  ESP_LOGV(TAG, "New size: (%d, %d)", width, height);
93
- return true;
94
+ return new_size;
94
95
  }
95
96
 
96
97
  void OnlineImage::update() {
@@ -99,9 +99,22 @@ class OnlineImage : public PollingComponent,
99
99
 
100
100
  int get_position_(int x, int y) const { return (x + y * this->buffer_width_) * this->get_bpp() / 8; }
101
101
 
102
- ESPHOME_ALWAYS_INLINE bool auto_resize_() const { return this->fixed_width_ == 0 || this->fixed_height_ == 0; }
102
+ ESPHOME_ALWAYS_INLINE bool is_auto_resize_() const { return this->fixed_width_ == 0 || this->fixed_height_ == 0; }
103
103
 
104
- bool resize_(int width, int height);
104
+ /**
105
+ * @brief Resize the image buffer to the requested dimensions.
106
+ *
107
+ * The buffer will be allocated if not existing.
108
+ * If the dimensions have been fixed in the yaml config, the buffer will be created
109
+ * with those dimensions and not resized, even on request.
110
+ * Otherwise, the old buffer will be deallocated and a new buffer with the requested
111
+ * allocated
112
+ *
113
+ * @param width
114
+ * @param height
115
+ * @return 0 if no memory could be allocated, the size of the new buffer otherwise.
116
+ */
117
+ size_t resize_(int width, int height);
105
118
 
106
119
  /**
107
120
  * @brief Draw a pixel into the buffer.
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2025.2.0b1"
3
+ __version__ = "2025.2.0b3"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
esphome/core/__init__.py CHANGED
@@ -582,7 +582,7 @@ class EsphomeCore:
582
582
 
583
583
  @property
584
584
  def config_dir(self):
585
- return os.path.dirname(os.path.abspath(self.config_path))
585
+ return os.path.abspath(os.path.dirname(self.config_path))
586
586
 
587
587
  @property
588
588
  def data_dir(self):
esphome/core/config.py CHANGED
@@ -217,6 +217,8 @@ def preload_core_config(config, result) -> str:
217
217
  target_platforms = []
218
218
 
219
219
  for domain, _ in config.items():
220
+ if domain.startswith("."):
221
+ continue
220
222
  if _is_target_platform(domain):
221
223
  target_platforms += [domain]
222
224
 
@@ -853,7 +853,7 @@ class InfoRequestHandler(BaseHandler):
853
853
  dashboard = DASHBOARD
854
854
  entry = dashboard.entries.get(yaml_path)
855
855
 
856
- if not entry:
856
+ if not entry or entry.storage is None:
857
857
  self.set_status(404)
858
858
  return
859
859
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esphome
3
- Version: 2025.2.0b1
3
+ Version: 2025.2.0b3
4
4
  Summary: ESPHome is a system to configure your microcontrollers by simple yet powerful configuration files and control them remotely through Home Automation systems.
5
5
  Author-email: The ESPHome Authors <esphome@nabucasa.com>
6
6
  License: MIT
@@ -38,7 +38,7 @@ Requires-Dist: esptool ==4.7.0
38
38
  Requires-Dist: click ==8.1.7
39
39
  Requires-Dist: esphome-dashboard ==20250212.0
40
40
  Requires-Dist: aioesphomeapi ==24.6.2
41
- Requires-Dist: zeroconf ==0.143.0
41
+ Requires-Dist: zeroconf ==0.144.1
42
42
  Requires-Dist: puremagic ==1.27
43
43
  Requires-Dist: ruamel.yaml ==0.18.6
44
44
  Requires-Dist: glyphsets ==1.0.0
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
5
5
  esphome/config.py,sha256=fFrDYbhWY1xn_onAl_0jwlg9D8NkK_FdKULTlnjZtxs,39832
6
6
  esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
7
7
  esphome/config_validation.py,sha256=qpNSoruGC4Tb7KNtgahginfMrhoRdjYUs-3Et2ww7rg,67868
8
- esphome/const.py,sha256=fTq_s7aTaHT0tMPhnOub9lQCcma0yv12p1865-y5awE,40664
8
+ esphome/const.py,sha256=PRGjerXXxdwRKVgQ7wqByHBvTqctKSQWkEIkEujmXRc,40664
9
9
  esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
10
10
  esphome/cpp_generator.py,sha256=PS_vtNLykRldK7n2bSZ1e9zIEajnCNc_ruW9beMNulQ,31235
11
11
  esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
@@ -559,7 +559,7 @@ esphome/components/cse7761/cse7761.cpp,sha256=tsZJZYSmexAqgpxgRgFPDE9x20TmPIWslW
559
559
  esphome/components/cse7761/cse7761.h,sha256=GYUBIQqtqnCre8hcwRhLFH9jlbWVvPcaCvtOOdTZfmc,1805
560
560
  esphome/components/cse7761/sensor.py,sha256=4_1oWJ_Tg0yfgTpWIvYknppGEN9sdo3PfzVEJNAMhGA,2838
561
561
  esphome/components/cse7766/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
562
- esphome/components/cse7766/cse7766.cpp,sha256=qJ63AmIxCSrnGTc3FDvm3BBBdzQNXWZiUvWw1_vdgAk,7837
562
+ esphome/components/cse7766/cse7766.cpp,sha256=cRJmbhQbJOixRQDr09pgs5mYL0SukqkNHjtdw2xoi3A,7640
563
563
  esphome/components/cse7766/cse7766.h,sha256=RE_q5Sa2n8PLkQsO3C9Nt11g6PS_5XBIVD1w3yvzP5o,1743
564
564
  esphome/components/cse7766/sensor.py,sha256=rHZGEUgTD8j6V9u8kTKSfRWQ67HzqIeHa9YaC5j6K70,4082
565
565
  esphome/components/cst226/__init__.py,sha256=Xbt13-GS0lUNexCt3EYip3UvO15P2cdJdepZWoDqBw8,130
@@ -851,9 +851,9 @@ esphome/components/esp32_can/canbus.py,sha256=sENR6HY7oBDkN_XBlz2I0qopVUC-chcGz6
851
851
  esphome/components/esp32_can/esp32_can.cpp,sha256=VYZSzI5GpCK-0-GOcFikQkzZrpqkp0loDVL2mRDJC-U,4920
852
852
  esphome/components/esp32_can/esp32_can.h,sha256=-u9xaLJtVAUj38SaBzPQ7q-rjydh2KEdaCn_1k27QEg,828
853
853
  esphome/components/esp32_dac/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
854
- esphome/components/esp32_dac/esp32_dac.cpp,sha256=Spv5dIh2KcUu6bYWUh7xMDhGK_L4iKeqTougxS_kUek,1085
855
- esphome/components/esp32_dac/esp32_dac.h,sha256=71O_rX_cYPPsUZR74H4UtzAMmrvN9fG0uBnq9GWThVc,689
856
- esphome/components/esp32_dac/output.py,sha256=K-2BLe_CM7wEHBZ7bwMkfUQ6EaZZy4WRcsNyBdmbNaw,960
854
+ esphome/components/esp32_dac/esp32_dac.cpp,sha256=ARw5vlGXxLaZeudHPYox3tmvXm5gbmAXEGCPXVGIvjQ,1312
855
+ esphome/components/esp32_dac/esp32_dac.h,sha256=9npbSQZn56U25fO7n8u4KdGCSBCc7UNyeGpr-Z_dFWI,846
856
+ esphome/components/esp32_dac/output.py,sha256=o3wj6WeLCFSXaU5aDF6zGznughufUCVNz3QgN6mqC08,1362
857
857
  esphome/components/esp32_hall/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
858
858
  esphome/components/esp32_hall/esp32_hall.cpp,sha256=UkxwSJHOnpCWb1Coo6ulEUMOyE8qaqUK4D5mTCSSfio,707
859
859
  esphome/components/esp32_hall/esp32_hall.h,sha256=2SPP7QOKdL7MjMd8MphXHnt6nOu7fT-16O_MT59aDiI,399
@@ -1011,7 +1011,7 @@ esphome/components/gps/time/__init__.py,sha256=iuZWg8qhi8uMoah4B2z4OyAsXndE9z6oH
1011
1011
  esphome/components/gps/time/gps_time.cpp,sha256=XEslYAhMq8ZViWF0QfoO95JiISUj0TLeuRcU4CnJq_8,958
1012
1012
  esphome/components/gps/time/gps_time.h,sha256=LTbCT36s68Sjifw0Qv6yxo5aiv2NK6Zreh1Rmtkxsqk,624
1013
1013
  esphome/components/graph/__init__.py,sha256=cxfJJTEGoaQ_3EAo5_cWUvLWAUjeoNyI4mqoxwkm_cc,7819
1014
- esphome/components/graph/graph.cpp,sha256=pNnuAOKvfNIkPskUBbux8Sp6Mt-iW7G6cFr0tK2G7-o,12423
1014
+ esphome/components/graph/graph.cpp,sha256=1pwQFl5M0L4eJJhlL5x1uAsVNBOHnTXvvKd695WHhos,12241
1015
1015
  esphome/components/graph/graph.h,sha256=hEOwQKaakerdidM9Gw6gibKu0zmdZZ1MCa1qXGga6xo,6021
1016
1016
  esphome/components/graphical_display_menu/__init__.py,sha256=YGbv_JsuWmW3HumvMZq0EwJszFmaXGbNYrrl9OPhNEc,3557
1017
1017
  esphome/components/graphical_display_menu/graphical_display_menu.cpp,sha256=_1xbdf6a_krZS-xD8D4kRW32QPz68zWs-MrXLOYYThU,9146
@@ -1459,8 +1459,8 @@ esphome/components/lock/__init__.py,sha256=GMClddiRBqyVuvmNWD_R7u8FBxN9hl0s00Y62
1459
1459
  esphome/components/lock/automation.h,sha256=aOcWJAY1XffSAK8LaywJpx1Bbdh0Ri_FS6low-20mic,2066
1460
1460
  esphome/components/lock/lock.cpp,sha256=IyEt5xShAxMpmcn_GAPFv2lRCS-kr4MjjfExxfXuK-Q,3212
1461
1461
  esphome/components/lock/lock.h,sha256=kFFccTAu56e6PhZVATW0NznOj0M7VByEn9gc6l5M3eA,6042
1462
- esphome/components/logger/__init__.py,sha256=-9oCAGgFIEzbplXMwbiazdOSJXkK7Bdms24MDndWhPM,13773
1463
- esphome/components/logger/logger.cpp,sha256=Yq3DFxzBRo4AR3JMy_ttgzcFQmzrHRJSp6AHnsqkWxo,6867
1462
+ esphome/components/logger/__init__.py,sha256=oU1X8krvf8JyXctFjpfip5ZEZp_QeJuicVmZLLxC4W0,13781
1463
+ esphome/components/logger/logger.cpp,sha256=MzNwXhh4eIx4R4TmN50yYJiILONIpmG9uRiOemU6ojU,6675
1464
1464
  esphome/components/logger/logger.h,sha256=krzoy-R-9CIfNrVpIhGjHdq30YpT-KtBxniSkIag3ug,6095
1465
1465
  esphome/components/logger/logger_esp32.cpp,sha256=SOLN5oHiVbnItxw4wdhvNdeunwgY7FR5j752fEt9__M,6101
1466
1466
  esphome/components/logger/logger_esp8266.cpp,sha256=k7GvUlcLxXCVYqBw7tlHRikmRe7hdO6qV837wr4N2ww,1182
@@ -1786,7 +1786,7 @@ esphome/components/modbus_controller/switch/__init__.py,sha256=0-EmJSlIhN19Ur3Kf
1786
1786
  esphome/components/modbus_controller/switch/modbus_switch.cpp,sha256=Ywebesg2KPfprVx3xhJUCq27nYUnbusds5n0Z8uigK0,4257
1787
1787
  esphome/components/modbus_controller/switch/modbus_switch.h,sha256=uZsGSRtxKnAWqUZ8k_qITEkDnK_BNjaYB_CV7TmhqVQ,2042
1788
1788
  esphome/components/modbus_controller/text_sensor/__init__.py,sha256=9STUDiChfJ9LPrcQaHDGN3qtD1S9R9CvyKa_VM2kkyo,2451
1789
- esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp,sha256=iebbTljSNJBPUTKfbbHemYxgswLZM_RyjRERQqIFKTM,1594
1789
+ esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp,sha256=AcFEMUSArTKtXE4ITDaEyRzDlEKnAz4RH_LU36vDUtk,1495
1790
1790
  esphome/components/modbus_controller/text_sensor/modbus_textsensor.h,sha256=dbvPjN9sfXOPllbLbyyrHLhqyp_9aiJBVg4kki8Zst8,1508
1791
1791
  esphome/components/monochromatic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1792
1792
  esphome/components/monochromatic/light.py,sha256=THKgebL_J4kCyt42O5y0kBbMZP1f885MO7fEbycvxnA,761
@@ -1982,12 +1982,12 @@ esphome/components/one_wire/one_wire_bus.h,sha256=06hhoL5DNkzLEIBzBcnEoOPB4kuPxt
1982
1982
  esphome/components/online_image/__init__.py,sha256=Xq5yjzakmBtOmX-F354EXds6A9l0K7QUWNbuOyn0Bao,6231
1983
1983
  esphome/components/online_image/bmp_image.cpp,sha256=v1mmhzhi0lzcz-q9tcyNwfni4DGJMPtVBnAmXQM7erY,3295
1984
1984
  esphome/components/online_image/bmp_image.h,sha256=9ExIs8n2nROXu3Qnf1JHJoTTqR0tssTNvivcaYzp_W0,878
1985
- esphome/components/online_image/image_decoder.cpp,sha256=0r0fn5sWttfhQYOGA_r12sAmL3AR6MRByDjVY3b_pL8,1971
1985
+ esphome/components/online_image/image_decoder.cpp,sha256=p_693Ac8F-vs2n_1AZ7E57HBfLhAeeBWYpI3tDy6rnE,2215
1986
1986
  esphome/components/online_image/image_decoder.h,sha256=A8sU-3m5dkyR8S2wXbeR7v7C5mRSLxrvfvsBPYz3a90,3798
1987
- esphome/components/online_image/jpeg_image.cpp,sha256=-q73YrkGEi-Gzx0v6q3zpzE7a9tZ0pGaKOOqigMhh14,2786
1987
+ esphome/components/online_image/jpeg_image.cpp,sha256=1qDTfzp7H6oxuRVBVXXgglourmlcBO4uvxQK6YLDFl4,2867
1988
1988
  esphome/components/online_image/jpeg_image.h,sha256=RxlXrSxgd_j7tXYMGdkU1gVmkWB6Jc0YHuq13NrY9fc,741
1989
- esphome/components/online_image/online_image.cpp,sha256=DLr09W0G0DUAixzF2KbpljEb2OKuM1cnylfVpcUIUyY,10507
1990
- esphome/components/online_image/online_image.h,sha256=KeBs_Nfo8rl3Rcqc7odS0Fw_5Xt6xaO8CfiV1oWTRKQ,6662
1989
+ esphome/components/online_image/online_image.cpp,sha256=4gJksrHknRF4ZxKRL8gnBMsh_kKY_YV5177tIrr4hzw,10568
1990
+ esphome/components/online_image/online_image.h,sha256=40F0zWRI0p6A8pFfQdQ1eD5tnwgCxBDbeNcpCHgeUzk,7177
1991
1991
  esphome/components/online_image/png_image.cpp,sha256=ysXfjX05YPuZaG0wxHg0EiPlj3HlddQqUdDG25W1jpY,2432
1992
1992
  esphome/components/online_image/png_image.h,sha256=oDyTIkyOB2MiKxZ9YmctwN7sbc_E7Qz0PvFxWg9Lip8,783
1993
1993
  esphome/components/opentherm/__init__.py,sha256=-umXAoDxOXrQ_ANQkGeMTB5cWp9V1KwSzdOHcAFXgJc,5497
@@ -3376,7 +3376,7 @@ esphome/components/zyaura/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
3376
3376
  esphome/components/zyaura/sensor.py,sha256=_h1Idxd8vvYR3le4a92yh8dlbl4NOtzxss-HuAUTcdI,2476
3377
3377
  esphome/components/zyaura/zyaura.cpp,sha256=F7WM8XAZ5MYuCD3eERm2_IA-O7sP1i-A-yF5TV4PqX8,3679
3378
3378
  esphome/components/zyaura/zyaura.h,sha256=yWrcYj_CnLDyopkuIVySJy5dB-R5X9zwm5fWjBDTSts,2384
3379
- esphome/core/__init__.py,sha256=QDLtTI3XnqPxCumWbfoPOHU6cuhWCgct9l03FLjAaxk,26760
3379
+ esphome/core/__init__.py,sha256=L4pbrSzT5rq3ba3Xm1N5xiRx4m5a4pKN5wBwvUwWZLU,26760
3380
3380
  esphome/core/application.cpp,sha256=DOhq0rTYu_dNcUCavHYVYASQZ5QzVOXMWVTaO7YTdnM,4680
3381
3381
  esphome/core/application.h,sha256=jepd6I9BBa48ByAXoLnUE7ddtlHiUS5uuKaMaJOD0x0,17721
3382
3382
  esphome/core/automation.h,sha256=UQQD9De3eiaopvzYQG89SxkBfnL5QaiR6bvkk2RxV8k,7332
@@ -3387,7 +3387,7 @@ esphome/core/component.cpp,sha256=36VvNdGwaqJZFPmGP3pQydSo4XIhjYwhsBcq3N2Jorg,93
3387
3387
  esphome/core/component.h,sha256=U4m8_g9gSBBIjRNw4k36entP2JcA6F3SsWbwty_hKdo,11744
3388
3388
  esphome/core/component_iterator.cpp,sha256=TUu2K34ATYa1Qyf2s-sZJBksAiFIGj3egzbDKPuFtTQ,11117
3389
3389
  esphome/core/component_iterator.h,sha256=cjacKgRrlxl-VwPOysfBJZNK0NMzcc-w9xXn82m5dYc,3599
3390
- esphome/core/config.py,sha256=0iLMMZ2b1N34cAr33CnDMbbiWgtnNoelHgE4Hs7NFmc,13617
3390
+ esphome/core/config.py,sha256=mwc-PFAE0wNKxgYZzt-2B08M4JQZ5KBYRtfuRCHvlPM,13673
3391
3391
  esphome/core/controller.cpp,sha256=feO4yH0GETNCqi9MTZEtsOaoo-CPV2rM9S7UfQXY6Ew,4553
3392
3392
  esphome/core/controller.h,sha256=PXCcMqYpq0xjFCdlOKv6WuYlcETnB4sq3UQWdOTt9PU,3720
3393
3393
  esphome/core/datatypes.h,sha256=wN8xro8vqXT13w9KvVOXeQfBwlI_WQZ6uFaIGyub67E,2114
@@ -3423,7 +3423,7 @@ esphome/dashboard/dns.py,sha256=zJjzjjuJsnHXW59V-H1QqjwwqJFgtJUIsB2QUcALZns,1369
3423
3423
  esphome/dashboard/entries.py,sha256=jbmvXQ5-zeUBVrd80tupYmStRsTwGp0hbfG7ZIRQF94,13130
3424
3424
  esphome/dashboard/enum.py,sha256=rlQFVVxyBt5Iw7OL0o9F8D5LGgw23tbvi-KYjzP0QUQ,597
3425
3425
  esphome/dashboard/settings.py,sha256=xoN2eLh-t0hmVYLmZm9beVOqonPNqWkzpRsoPbEomoA,2962
3426
- esphome/dashboard/web_server.py,sha256=cSWc_M4ieUg_O0DpQYBM-bDDkhkSF4wFvDRAUVtf08s,42211
3426
+ esphome/dashboard/web_server.py,sha256=rt5BDvjyJ65VJ-9tZA3V0KoB0RUtSLcrTec7jWncoYw,42236
3427
3427
  esphome/dashboard/status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3428
3428
  esphome/dashboard/status/mdns.py,sha256=FuASYxcQ-LQVK5vqX9ZLs9wIXlmXZh4tjXhg-Zmpq14,3741
3429
3429
  esphome/dashboard/status/mqtt.py,sha256=ZRb18LOvl4975Pzc4Fdr5ErML3WKwV8Pv1sD2qdSJ1s,1965
@@ -3434,9 +3434,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3434
3434
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3435
3435
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3436
3436
  esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
3437
- esphome-2025.2.0b1.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3438
- esphome-2025.2.0b1.dist-info/METADATA,sha256=spWvVp5o6IN1zHWX8FphVA5YqJ3iF_yLFTlRDsfUifI,3683
3439
- esphome-2025.2.0b1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3440
- esphome-2025.2.0b1.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3441
- esphome-2025.2.0b1.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3442
- esphome-2025.2.0b1.dist-info/RECORD,,
3437
+ esphome-2025.2.0b3.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3438
+ esphome-2025.2.0b3.dist-info/METADATA,sha256=GTvd5dxiyRfgUb-le69sv8KvfbzAq6jT81X8vwpTDhw,3683
3439
+ esphome-2025.2.0b3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3440
+ esphome-2025.2.0b3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3441
+ esphome-2025.2.0b3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3442
+ esphome-2025.2.0b3.dist-info/RECORD,,