esphome 2024.12.0b1__py3-none-any.whl → 2024.12.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.
@@ -0,0 +1,48 @@
1
+ #ifdef USE_LIBRETINY
2
+
3
+ #include "adc_sensor.h"
4
+ #include "esphome/core/log.h"
5
+
6
+ namespace esphome {
7
+ namespace adc {
8
+
9
+ static const char *const TAG = "adc.libretiny";
10
+
11
+ void ADCSensor::setup() {
12
+ ESP_LOGCONFIG(TAG, "Setting up ADC '%s'...", this->get_name().c_str());
13
+ #ifndef USE_ADC_SENSOR_VCC
14
+ this->pin_->setup();
15
+ #endif // !USE_ADC_SENSOR_VCC
16
+ }
17
+
18
+ void ADCSensor::dump_config() {
19
+ LOG_SENSOR("", "ADC Sensor", this);
20
+ #ifdef USE_ADC_SENSOR_VCC
21
+ ESP_LOGCONFIG(TAG, " Pin: VCC");
22
+ #else // USE_ADC_SENSOR_VCC
23
+ LOG_PIN(" Pin: ", this->pin_);
24
+ #endif // USE_ADC_SENSOR_VCC
25
+ ESP_LOGCONFIG(TAG, " Samples: %i", this->sample_count_);
26
+ LOG_UPDATE_INTERVAL(this);
27
+ }
28
+
29
+ float ADCSensor::sample() {
30
+ uint32_t raw = 0;
31
+ if (this->output_raw_) {
32
+ for (uint8_t sample = 0; sample < this->sample_count_; sample++) {
33
+ raw += analogRead(this->pin_->get_pin()); // NOLINT
34
+ }
35
+ raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero)
36
+ return raw;
37
+ }
38
+ for (uint8_t sample = 0; sample < this->sample_count_; sample++) {
39
+ raw += analogReadVoltage(this->pin_->get_pin()); // NOLINT
40
+ }
41
+ raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero)
42
+ return raw / 1000.0f;
43
+ }
44
+
45
+ } // namespace adc
46
+ } // namespace esphome
47
+
48
+ #endif // USE_LIBRETINY
@@ -27,6 +27,9 @@ namespace esp32_ble {
27
27
 
28
28
  static const char *const TAG = "esp32_ble";
29
29
 
30
+ static RAMAllocator<BLEEvent> EVENT_ALLOCATOR( // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
31
+ RAMAllocator<BLEEvent>::ALLOW_FAILURE | RAMAllocator<BLEEvent>::ALLOC_INTERNAL);
32
+
30
33
  void ESP32BLE::setup() {
31
34
  global_ble = this;
32
35
  ESP_LOGCONFIG(TAG, "Setting up BLE...");
@@ -322,7 +325,8 @@ void ESP32BLE::loop() {
322
325
  default:
323
326
  break;
324
327
  }
325
- delete ble_event; // NOLINT(cppcoreguidelines-owning-memory)
328
+ ble_event->~BLEEvent();
329
+ EVENT_ALLOCATOR.deallocate(ble_event, 1);
326
330
  ble_event = this->ble_events_.pop();
327
331
  }
328
332
  if (this->advertising_ != nullptr) {
@@ -331,9 +335,14 @@ void ESP32BLE::loop() {
331
335
  }
332
336
 
333
337
  void ESP32BLE::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) {
334
- BLEEvent *new_event = new BLEEvent(event, param); // NOLINT(cppcoreguidelines-owning-memory)
338
+ BLEEvent *new_event = EVENT_ALLOCATOR.allocate(1);
339
+ if (new_event == nullptr) {
340
+ // Memory too fragmented to allocate new event. Can only drop it until memory comes back
341
+ return;
342
+ }
343
+ new (new_event) BLEEvent(event, param);
335
344
  global_ble->ble_events_.push(new_event);
336
- } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
345
+ } // NOLINT(clang-analyzer-unix.Malloc)
337
346
 
338
347
  void ESP32BLE::real_gap_event_handler_(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) {
339
348
  ESP_LOGV(TAG, "(BLE) gap_event_handler - %d", event);
@@ -344,9 +353,14 @@ void ESP32BLE::real_gap_event_handler_(esp_gap_ble_cb_event_t event, esp_ble_gap
344
353
 
345
354
  void ESP32BLE::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if,
346
355
  esp_ble_gatts_cb_param_t *param) {
347
- BLEEvent *new_event = new BLEEvent(event, gatts_if, param); // NOLINT(cppcoreguidelines-owning-memory)
356
+ BLEEvent *new_event = EVENT_ALLOCATOR.allocate(1);
357
+ if (new_event == nullptr) {
358
+ // Memory too fragmented to allocate new event. Can only drop it until memory comes back
359
+ return;
360
+ }
361
+ new (new_event) BLEEvent(event, gatts_if, param);
348
362
  global_ble->ble_events_.push(new_event);
349
- } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
363
+ } // NOLINT(clang-analyzer-unix.Malloc)
350
364
 
351
365
  void ESP32BLE::real_gatts_event_handler_(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if,
352
366
  esp_ble_gatts_cb_param_t *param) {
@@ -358,9 +372,14 @@ void ESP32BLE::real_gatts_event_handler_(esp_gatts_cb_event_t event, esp_gatt_if
358
372
 
359
373
  void ESP32BLE::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
360
374
  esp_ble_gattc_cb_param_t *param) {
361
- BLEEvent *new_event = new BLEEvent(event, gattc_if, param); // NOLINT(cppcoreguidelines-owning-memory)
375
+ BLEEvent *new_event = EVENT_ALLOCATOR.allocate(1);
376
+ if (new_event == nullptr) {
377
+ // Memory too fragmented to allocate new event. Can only drop it until memory comes back
378
+ return;
379
+ }
380
+ new (new_event) BLEEvent(event, gattc_if, param);
362
381
  global_ble->ble_events_.push(new_event);
363
- } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
382
+ } // NOLINT(clang-analyzer-unix.Malloc)
364
383
 
365
384
  void ESP32BLE::real_gattc_event_handler_(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
366
385
  esp_ble_gattc_cb_param_t *param) {
@@ -51,8 +51,11 @@ CONF_IGNORE_MISSING_GLYPHS = "ignore_missing_glyphs"
51
51
  # Cache loaded freetype fonts
52
52
  class FontCache(dict):
53
53
  def __missing__(self, key):
54
- res = self[key] = freetype.Face(key)
55
- return res
54
+ try:
55
+ res = self[key] = freetype.Face(key)
56
+ return res
57
+ except freetype.FT_Exception as e:
58
+ raise cv.Invalid(f"Could not load Font file {key}: {e}") from e
56
59
 
57
60
 
58
61
  FONT_CACHE = FontCache()
@@ -247,7 +247,7 @@ void I2SAudioSpeaker::speaker_task(void *params) {
247
247
 
248
248
  // Ensure ring buffer is at least as large as the total size of the DMA buffers
249
249
  const size_t ring_buffer_size =
250
- std::min((uint32_t) dma_buffers_size, this_speaker->buffer_duration_ms_ * bytes_per_ms);
250
+ std::max((uint32_t) dma_buffers_size, this_speaker->buffer_duration_ms_ * bytes_per_ms);
251
251
 
252
252
  if (this_speaker->send_esp_err_to_event_group_(this_speaker->allocate_buffers_(dma_buffers_size, ring_buffer_size))) {
253
253
  // Failed to allocate buffers
@@ -1,24 +1,23 @@
1
+ from esphome import pins
1
2
  import esphome.codegen as cg
3
+ from esphome.components import esp32_rmt, remote_base
2
4
  import esphome.config_validation as cv
3
- from esphome import pins
4
- from esphome.components import remote_base, esp32_rmt
5
5
  from esphome.const import (
6
6
  CONF_BUFFER_SIZE,
7
+ CONF_CLOCK_DIVIDER,
7
8
  CONF_DUMP,
8
9
  CONF_FILTER,
9
10
  CONF_ID,
10
11
  CONF_IDLE,
12
+ CONF_MEMORY_BLOCKS,
11
13
  CONF_PIN,
14
+ CONF_RMT_CHANNEL,
12
15
  CONF_TOLERANCE,
13
16
  CONF_TYPE,
14
- CONF_MEMORY_BLOCKS,
15
- CONF_RMT_CHANNEL,
16
17
  CONF_VALUE,
17
18
  )
18
19
  from esphome.core import CORE, TimePeriod
19
20
 
20
- CONF_CLOCK_DIVIDER = "clock_divider"
21
-
22
21
  AUTO_LOAD = ["remote_base"]
23
22
  remote_receiver_ns = cg.esphome_ns.namespace("remote_receiver")
24
23
  remote_base_ns = cg.esphome_ns.namespace("remote_base")
@@ -1,23 +1,22 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, sensirion_common, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import i2c, sensor, sensirion_common
4
-
5
4
  from esphome.const import (
6
- CONF_COMPENSATION,
7
- CONF_ID,
8
5
  CONF_BASELINE,
6
+ CONF_COMPENSATION,
9
7
  CONF_ECO2,
8
+ CONF_ID,
10
9
  CONF_STORE_BASELINE,
11
10
  CONF_TEMPERATURE_SOURCE,
12
11
  CONF_TVOC,
13
- ICON_RADIATOR,
14
12
  DEVICE_CLASS_CARBON_DIOXIDE,
15
13
  DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
14
+ ENTITY_CATEGORY_DIAGNOSTIC,
15
+ ICON_MOLECULE_CO2,
16
+ ICON_RADIATOR,
16
17
  STATE_CLASS_MEASUREMENT,
17
- UNIT_PARTS_PER_MILLION,
18
18
  UNIT_PARTS_PER_BILLION,
19
- ICON_MOLECULE_CO2,
20
- ENTITY_CATEGORY_DIAGNOSTIC,
19
+ UNIT_PARTS_PER_MILLION,
21
20
  )
22
21
 
23
22
  DEPENDENCIES = ["i2c"]
@@ -77,7 +76,7 @@ CONFIG_SCHEMA = (
77
76
  ),
78
77
  }
79
78
  )
80
- .extend(cv.polling_component_schema("1s"))
79
+ .extend(cv.polling_component_schema("60s"))
81
80
  .extend(i2c.i2c_device_schema(0x58))
82
81
  )
83
82
 
@@ -1,8 +1,8 @@
1
1
  #include "sgp30.h"
2
+ #include <cinttypes>
3
+ #include "esphome/core/application.h"
2
4
  #include "esphome/core/hal.h"
3
5
  #include "esphome/core/log.h"
4
- #include "esphome/core/application.h"
5
- #include <cinttypes>
6
6
 
7
7
  namespace esphome {
8
8
  namespace sgp30 {
@@ -295,10 +295,6 @@ void SGP30Component::update() {
295
295
  if (this->tvoc_sensor_ != nullptr)
296
296
  this->tvoc_sensor_->publish_state(tvoc);
297
297
 
298
- if (this->get_update_interval() != 1000) {
299
- ESP_LOGW(TAG, "Update interval for SGP30 sensor must be set to 1s for optimized readout");
300
- }
301
-
302
298
  this->status_clear_warning();
303
299
  this->send_env_data_();
304
300
  this->read_iaq_baseline_();
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2024.12.0b1"
3
+ __version__ = "2024.12.0b3"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
@@ -131,7 +131,9 @@ CONF_CLIENT_CERTIFICATE = "client_certificate"
131
131
  CONF_CLIENT_CERTIFICATE_KEY = "client_certificate_key"
132
132
  CONF_CLIENT_ID = "client_id"
133
133
  CONF_CLK_PIN = "clk_pin"
134
+ CONF_CLOCK_DIVIDER = "clock_divider"
134
135
  CONF_CLOCK_PIN = "clock_pin"
136
+ CONF_CLOCK_RESOLUTION = "clock_resolution"
135
137
  CONF_CLOSE_ACTION = "close_action"
136
138
  CONF_CLOSE_DURATION = "close_duration"
137
139
  CONF_CLOSE_ENDSTOP = "close_endstop"
@@ -739,6 +741,7 @@ CONF_RGB_ORDER = "rgb_order"
739
741
  CONF_RGBW = "rgbw"
740
742
  CONF_RISING_EDGE = "rising_edge"
741
743
  CONF_RMT_CHANNEL = "rmt_channel"
744
+ CONF_RMT_SYMBOLS = "rmt_symbols"
742
745
  CONF_ROTATION = "rotation"
743
746
  CONF_ROW = "row"
744
747
  CONF_RS_PIN = "rs_pin"
@@ -918,6 +921,7 @@ CONF_UPDATE_ON_BOOT = "update_on_boot"
918
921
  CONF_URL = "url"
919
922
  CONF_USE_ABBREVIATIONS = "use_abbreviations"
920
923
  CONF_USE_ADDRESS = "use_address"
924
+ CONF_USE_DMA = "use_dma"
921
925
  CONF_USE_FAHRENHEIT = "use_fahrenheit"
922
926
  CONF_USERNAME = "username"
923
927
  CONF_UUID = "uuid"
esphome/core/helpers.cpp CHANGED
@@ -767,7 +767,8 @@ bool mac_address_is_valid(const uint8_t *mac) {
767
767
  return !(is_all_zeros || is_all_ones);
768
768
  }
769
769
 
770
- void delay_microseconds_safe(uint32_t us) { // avoids CPU locks that could trigger WDT or affect WiFi/BT stability
770
+ void IRAM_ATTR HOT delay_microseconds_safe(uint32_t us) {
771
+ // avoids CPU locks that could trigger WDT or affect WiFi/BT stability
771
772
  uint32_t start = micros();
772
773
 
773
774
  const uint32_t lag = 5000; // microseconds, specifies the maximum time for a CPU busy-loop.
@@ -108,6 +108,12 @@ def is_authenticated(handler: BaseHandler) -> bool:
108
108
  return True
109
109
 
110
110
  if settings.using_auth:
111
+ if auth_header := handler.request.headers.get("Authorization"):
112
+ assert isinstance(auth_header, str)
113
+ if auth_header.startswith("Basic "):
114
+ auth_decoded = base64.b64decode(auth_header[6:]).decode()
115
+ username, password = auth_decoded.split(":", 1)
116
+ return settings.check_password(username, password)
111
117
  return handler.get_secure_cookie(AUTH_COOKIE_NAME) == COOKIE_AUTHENTICATED_YES
112
118
 
113
119
  return True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esphome
3
- Version: 2024.12.0b1
3
+ Version: 2024.12.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
@@ -36,7 +36,7 @@ Requires-Dist: pyserial ==3.5
36
36
  Requires-Dist: platformio ==6.1.16
37
37
  Requires-Dist: esptool ==4.7.0
38
38
  Requires-Dist: click ==8.1.7
39
- Requires-Dist: esphome-dashboard ==20241120.0
39
+ Requires-Dist: esphome-dashboard ==20241217.1
40
40
  Requires-Dist: aioesphomeapi ==24.6.2
41
41
  Requires-Dist: zeroconf ==0.132.2
42
42
  Requires-Dist: puremagic ==1.27
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
5
5
  esphome/config.py,sha256=nOiXPZv8wHtmytkNlGcewp0uuJd9G5rRjkqevYXtjzo,39618
6
6
  esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
7
7
  esphome/config_validation.py,sha256=jtqGmSF_0mAIMxRMV3eJj7dQ71Jmlc51NOx6AvWlnqs,66374
8
- esphome/const.py,sha256=iO9UBdBJEeTpWEHS9RsRRxgyLpPZ9W2ddlw7rNT1qqs,40508
8
+ esphome/const.py,sha256=EyLP-Pp3YiJLFBhMfJBByzMd3r3KhclcQBnPac3aRW8,40646
9
9
  esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
10
10
  esphome/cpp_generator.py,sha256=lXPXHYUsFIvBSAoZ93mXYlGcXYg5L18nTtYGHE4_rr8,31203
11
11
  esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
@@ -59,6 +59,7 @@ esphome/components/adc/adc_sensor.h,sha256=iJFmqcj6_BC8R5d_Fbnda7O3GQjUKXHrB3dbQ
59
59
  esphome/components/adc/adc_sensor_common.cpp,sha256=qpU1oEz26OQlA7gsrWyEnqijSQS_CLwBCrE4HMt4QCo,566
60
60
  esphome/components/adc/adc_sensor_esp32.cpp,sha256=dKyUb1JsDdTO8gYITwYuRAqk3ZGXgHWDNQbGHmpEeAs,5745
61
61
  esphome/components/adc/adc_sensor_esp8266.cpp,sha256=nJHMYM3faXqwvFEodVVYEQ5ERFegHV7mLbzxZcdwAu4,1414
62
+ esphome/components/adc/adc_sensor_libretiny.cpp,sha256=K-6I9-P2rUtpiKcb-YtvItNJeOo9SEVfrN3sD1uy5Q8,1350
62
63
  esphome/components/adc/adc_sensor_rp2040.cpp,sha256=7kUKFmTWrNBackDSSifLk2Mt9nEpKs1eh4TWFRvdqe0,2380
63
64
  esphome/components/adc/sensor.py,sha256=jqwve3vXXfFmd5gfRJfCJNwFUAooqQ8OtQ_XZ8yP__o,4112
64
65
  esphome/components/adc128s102/__init__.py,sha256=loTg5WsBpBrUqZ_vKCk54_9_KqNP834Kx-Cs2PIj798,652
@@ -788,7 +789,7 @@ esphome/components/esp32/post_build.py.script,sha256=ZBsPNunx2BH4ZiRyXnjTP7D7eN2
788
789
  esphome/components/esp32/preferences.cpp,sha256=6mrR6ziH2dnBcMKPD5RwYYB16tkAy0w75x_mRy4wQCY,6294
789
790
  esphome/components/esp32/preferences.h,sha256=9HIy-BOgjOXJiEgOizZ_Qb8-l6K4eb3VSPW8Y8ffuWM,165
790
791
  esphome/components/esp32_ble/__init__.py,sha256=_icbuq6fiRVExFZe1ETU2GJ6ziR4LxMK3nzeER7gEuY,4321
791
- esphome/components/esp32_ble/ble.cpp,sha256=OtuXz0Qv-YQa-Ghubtvpvon9FzsU3n-P401oFcTB1l8,13082
792
+ esphome/components/esp32_ble/ble.cpp,sha256=w51oEvWeMcYs2CgIlCLTFEMaxxzxW0hAstWhwHl_oQM,13661
792
793
  esphome/components/esp32_ble/ble.h,sha256=1USMpwRwVHc6_CnxieJa55mMPq3GFfkEPPYarySc05Y,5234
793
794
  esphome/components/esp32_ble/ble_advertising.cpp,sha256=DUdZyaNCc4xxyPmB4OM8dtgSxcHkIdju1-j-CJGMtyg,6022
794
795
  esphome/components/esp32_ble/ble_advertising.h,sha256=dLksw168KS1wh3_X7GhesS9nacINphlZUl4nMgYSA8M,1480
@@ -931,7 +932,7 @@ esphome/components/fingerprint_grow/binary_sensor.py,sha256=NeVcqVCpmjGdnfimIIWS
931
932
  esphome/components/fingerprint_grow/fingerprint_grow.cpp,sha256=xtHEpnp1Ei_5s5SS5Vfxt8vG_PoPMmeUjbOQHWrn5G0,18675
932
933
  esphome/components/fingerprint_grow/fingerprint_grow.h,sha256=UEkLR4Cqas_XYlTLAwscXCAMRoprWeQZEZ_3vTsI-BM,11206
933
934
  esphome/components/fingerprint_grow/sensor.py,sha256=eazvZvdtt1Rl8o3Aw6eYKn-kb2sNDfZKHegxpFFdQeg,2244
934
- esphome/components/font/__init__.py,sha256=eixW4XJNfpxcV-_dDGDsC8Z7VgB42u4StDgCSbMxoes,19087
935
+ esphome/components/font/__init__.py,sha256=UffNdpZ8qzYXqi3Z1KN5m2Vf_9q_Q5bjgB-JN_H-MYw,19227
935
936
  esphome/components/font/font.cpp,sha256=xORioLApiap2sPwx4d5uMTQNx5-OUIYSB8pt0uHx0IU,5413
936
937
  esphome/components/font/font.h,sha256=jTeGf7Osax98Tbs9TeZ01Ta3P2FZt-wWar1bybMFc20,2009
937
938
  esphome/components/fs3000/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1210,7 +1211,7 @@ esphome/components/i2s_audio/microphone/__init__.py,sha256=bUKAY5HBZrBJGufEA9MkC
1210
1211
  esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp,sha256=-AN8LLxtcLp9r-JCpfSG2huLk3ptbgijvKsH-XWl3XQ,6228
1211
1212
  esphome/components/i2s_audio/microphone/i2s_audio_microphone.h,sha256=dMNlVDWJ8Agz8NJe0pNvxDN9ZM9GMU3XNxPqQgHLQ5c,1036
1212
1213
  esphome/components/i2s_audio/speaker/__init__.py,sha256=DcG-0I2ETqk3akuTvzl7szVERy99qEgo-Ma8iFJjN4c,4013
1213
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp,sha256=cJnkRTrOJFAyWPXjbs8CA-bsNyeQ0PQzqgxOQDBU5tI,19780
1214
+ esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp,sha256=9Cw8SAYEtZY9I56oSX5Tlf9K86oi7nzXm-CFvWPWOuc,19780
1214
1215
  esphome/components/i2s_audio/speaker/i2s_audio_speaker.h,sha256=Y0Fk7y32eHVUUTBa1dnDLrGa_6zDcYNE51zez8ual9A,5988
1215
1216
  esphome/components/iaqcore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1216
1217
  esphome/components/iaqcore/iaqcore.cpp,sha256=hKSC0Xar693LMqOHpYShl_-VdWkKc18i21AzjdjB7e4,2268
@@ -2272,7 +2273,7 @@ esphome/components/remote_base/sony_protocol.cpp,sha256=EJ3dl0by31luOdaZgPO5L4XZ
2272
2273
  esphome/components/remote_base/sony_protocol.h,sha256=3kdO2RE3KvQSU7tB_rXBHx9f8D_j23PPw1yJmBPLdNE,1003
2273
2274
  esphome/components/remote_base/toshiba_ac_protocol.cpp,sha256=CQNONh4-M91jPDecR_SYVricsXI_NxkbiaXxcRI9g7M,3434
2274
2275
  esphome/components/remote_base/toshiba_ac_protocol.h,sha256=xkpVmBNtQ_uEbMHzwaJOle2KXBxa34Q-ABZfuCsMouA,1092
2275
- esphome/components/remote_receiver/__init__.py,sha256=T6zgQ6V4RQms0dT8pDmaEE4cuObxeeHQSbwO6EzoowA,4575
2276
+ esphome/components/remote_receiver/__init__.py,sha256=qq40_lP2XXc22frIBynQgyWBf7xxbM-Rrmkhrtt_u2w,4561
2276
2277
  esphome/components/remote_receiver/binary_sensor.py,sha256=AybkaXQkJpcxpJhDkbgupO9zIiVhBFYpxvjUHBQbs_w,291
2277
2278
  esphome/components/remote_receiver/remote_receiver.h,sha256=D4_Pe-o1ZYH5Ye14elx7vAeO_pl-H98ufcMky5dEWNs,2397
2278
2279
  esphome/components/remote_receiver/remote_receiver_esp32.cpp,sha256=XsU0-6AJdVTqVIycJMDnkHtIaRsW-CewBh5P6LBwaCE,5905
@@ -2502,8 +2503,8 @@ esphome/components/sfa30/sensor.py,sha256=TbBGLaBRl5wrPdvmXX59OyCw2I2gTa6q4aYgFl
2502
2503
  esphome/components/sfa30/sfa30.cpp,sha256=HvrIc113pBxXgf0oxKhFITuQEdHc71GssaEFLkqoMx8,2968
2503
2504
  esphome/components/sfa30/sfa30.h,sha256=CcrKCidMAQU0DASAZTSFKASqbIKCvZ_fS9l98dOiWtQ,1125
2504
2505
  esphome/components/sgp30/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2505
- esphome/components/sgp30/sensor.py,sha256=cgYNh0VR6k_hCgTJdZZlJrLM8l_RPmBYeA7SHuAzpkM,4208
2506
- esphome/components/sgp30/sgp30.cpp,sha256=ZIPwM6W-rg3cnJ_sGQA09qKtD0GqwEC7pjytvHvsrN4,12140
2506
+ esphome/components/sgp30/sensor.py,sha256=SoZJYQuQxMGKdeYOIN7c7lBrNU46kBaZFNjb2u1ay0I,4208
2507
+ esphome/components/sgp30/sgp30.cpp,sha256=tg-ZxoDeuLbW_ckbimUptvENOShYhbh72frz3Zecwh0,11989
2507
2508
  esphome/components/sgp30/sgp30.h,sha256=8jqa-oCo60O1atI7ef9r8ZfaqfuGowg_Ml7qO-Z5hks,2494
2508
2509
  esphome/components/sgp40/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2509
2510
  esphome/components/sgp40/sensor.py,sha256=i5jatTC8qq_3Ru5eKQM2y2U0xko-m9S8j63EY2IVChU,269
@@ -3347,7 +3348,7 @@ esphome/core/entity_base.h,sha256=y9pPjHUxtiadpSzUroBp8-YomztwZnzPVS6GF33YI3U,28
3347
3348
  esphome/core/entity_helpers.py,sha256=s5lYCG5hu_1SROtSWgzI0T6802l5-I8udGy1_6HNSdc,2337
3348
3349
  esphome/core/gpio.h,sha256=hy9jEWuCG6Q_AU74viToIab-p5ZnGik4pM4E3AieK8k,2407
3349
3350
  esphome/core/hal.h,sha256=e3qFkax3jfncEusf3kwXCts0Ai7D4XspJgh-VqVDcK4,844
3350
- esphome/core/helpers.cpp,sha256=ZbRtJZFqs09vwbiO-SHCAZ8nXKjnUPPUr9_IolXiUWU,24896
3351
+ esphome/core/helpers.cpp,sha256=20tHJERxygqZzE5PaylZM8f0Bbbm9Jp1cuS9QGVvABY,24911
3351
3352
  esphome/core/helpers.h,sha256=iWpv8pCcepKqK_F4AAvCzJVLQeuYYGyOVsDLigSBDKw,28060
3352
3353
  esphome/core/log.cpp,sha256=MDCx87ytW6Fz6basxYUpagkubFzUKO1ysvU5RXbXoII,1581
3353
3354
  esphome/core/log.h,sha256=sMwmrs64vOG0G9jIibKJWv_C-COl175T8JymmBVRHWI,6369
@@ -3373,7 +3374,7 @@ esphome/dashboard/dns.py,sha256=zJjzjjuJsnHXW59V-H1QqjwwqJFgtJUIsB2QUcALZns,1369
3373
3374
  esphome/dashboard/entries.py,sha256=jbmvXQ5-zeUBVrd80tupYmStRsTwGp0hbfG7ZIRQF94,13130
3374
3375
  esphome/dashboard/enum.py,sha256=rlQFVVxyBt5Iw7OL0o9F8D5LGgw23tbvi-KYjzP0QUQ,597
3375
3376
  esphome/dashboard/settings.py,sha256=xoN2eLh-t0hmVYLmZm9beVOqonPNqWkzpRsoPbEomoA,2962
3376
- esphome/dashboard/web_server.py,sha256=SnAB_8ndfY91SPmY1cwCYkKxtWF9ppDgbD7soSzs3YQ,41837
3377
+ esphome/dashboard/web_server.py,sha256=cSWc_M4ieUg_O0DpQYBM-bDDkhkSF4wFvDRAUVtf08s,42211
3377
3378
  esphome/dashboard/status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3378
3379
  esphome/dashboard/status/mdns.py,sha256=FuASYxcQ-LQVK5vqX9ZLs9wIXlmXZh4tjXhg-Zmpq14,3741
3379
3380
  esphome/dashboard/status/mqtt.py,sha256=ZRb18LOvl4975Pzc4Fdr5ErML3WKwV8Pv1sD2qdSJ1s,1965
@@ -3384,9 +3385,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3384
3385
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3385
3386
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3386
3387
  esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
3387
- esphome-2024.12.0b1.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3388
- esphome-2024.12.0b1.dist-info/METADATA,sha256=Z0gJqMNX6GmqkpdQ1oeGGE5nuuruR9-4Qi5sU9KyJ1k,3551
3389
- esphome-2024.12.0b1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3390
- esphome-2024.12.0b1.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3391
- esphome-2024.12.0b1.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3392
- esphome-2024.12.0b1.dist-info/RECORD,,
3388
+ esphome-2024.12.0b3.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3389
+ esphome-2024.12.0b3.dist-info/METADATA,sha256=7T_vwlwbh7KKVj0DjgXXNNAgfZ_lGHYniDmpx18-bkY,3551
3390
+ esphome-2024.12.0b3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3391
+ esphome-2024.12.0b3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3392
+ esphome-2024.12.0b3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3393
+ esphome-2024.12.0b3.dist-info/RECORD,,