esphome 2025.9.0b2__py3-none-any.whl → 2025.9.0b4__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.
@@ -113,7 +113,7 @@ void ADE7880::update() {
113
113
  if (this->channel_a_ != nullptr) {
114
114
  auto *chan = this->channel_a_;
115
115
  this->update_sensor_from_s24zp_register16_(chan->current, AIRMS, [](float val) { return val / 100000.0f; });
116
- this->update_sensor_from_s24zp_register16_(chan->voltage, BVRMS, [](float val) { return val / 10000.0f; });
116
+ this->update_sensor_from_s24zp_register16_(chan->voltage, AVRMS, [](float val) { return val / 10000.0f; });
117
117
  this->update_sensor_from_s24zp_register16_(chan->active_power, AWATT, [](float val) { return val / 100.0f; });
118
118
  this->update_sensor_from_s24zp_register16_(chan->apparent_power, AVA, [](float val) { return val / 100.0f; });
119
119
  this->update_sensor_from_s16_register16_(chan->power_factor, APF,
@@ -77,6 +77,13 @@ ETHERNET_TYPES = {
77
77
  "DM9051": EthernetType.ETHERNET_TYPE_DM9051,
78
78
  }
79
79
 
80
+ # PHY types that need compile-time defines for conditional compilation
81
+ _PHY_TYPE_TO_DEFINE = {
82
+ "KSZ8081": "USE_ETHERNET_KSZ8081",
83
+ "KSZ8081RNA": "USE_ETHERNET_KSZ8081",
84
+ # Add other PHY types here only if they need conditional compilation
85
+ }
86
+
80
87
  SPI_ETHERNET_TYPES = ["W5500", "DM9051"]
81
88
  SPI_ETHERNET_DEFAULT_POLLING_INTERVAL = TimePeriodMilliseconds(milliseconds=10)
82
89
 
@@ -345,6 +352,10 @@ async def to_code(config):
345
352
  if CONF_MANUAL_IP in config:
346
353
  cg.add(var.set_manual_ip(manual_ip(config[CONF_MANUAL_IP])))
347
354
 
355
+ # Add compile-time define for PHY types with specific code
356
+ if phy_define := _PHY_TYPE_TO_DEFINE.get(config[CONF_TYPE]):
357
+ cg.add_define(phy_define)
358
+
348
359
  cg.add_define("USE_ETHERNET")
349
360
 
350
361
  # Disable WiFi when using Ethernet to save memory
@@ -229,10 +229,12 @@ void EthernetComponent::setup() {
229
229
  ESPHL_ERROR_CHECK(err, "ETH driver install error");
230
230
 
231
231
  #ifndef USE_ETHERNET_SPI
232
+ #ifdef USE_ETHERNET_KSZ8081
232
233
  if (this->type_ == ETHERNET_TYPE_KSZ8081RNA && this->clk_mode_ == EMAC_CLK_OUT) {
233
234
  // KSZ8081RNA default is incorrect. It expects a 25MHz clock instead of the 50MHz we provide.
234
235
  this->ksz8081_set_clock_reference_(mac);
235
236
  }
237
+ #endif // USE_ETHERNET_KSZ8081
236
238
 
237
239
  for (const auto &phy_register : this->phy_registers_) {
238
240
  this->write_phy_register_(mac, phy_register);
@@ -721,6 +723,7 @@ bool EthernetComponent::powerdown() {
721
723
 
722
724
  #ifndef USE_ETHERNET_SPI
723
725
 
726
+ #ifdef USE_ETHERNET_KSZ8081
724
727
  constexpr uint8_t KSZ80XX_PC2R_REG_ADDR = 0x1F;
725
728
 
726
729
  void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) {
@@ -749,6 +752,7 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) {
749
752
  ESP_LOGVV(TAG, "KSZ8081 PHY Control 2: %s", format_hex_pretty((u_int8_t *) &phy_control_2, 2).c_str());
750
753
  }
751
754
  }
755
+ #endif // USE_ETHERNET_KSZ8081
752
756
 
753
757
  void EthernetComponent::write_phy_register_(esp_eth_mac_t *mac, PHYRegister register_data) {
754
758
  esp_err_t err;
@@ -104,8 +104,10 @@ class EthernetComponent : public Component {
104
104
  void start_connect_();
105
105
  void finish_connect_();
106
106
  void dump_connect_params_();
107
+ #ifdef USE_ETHERNET_KSZ8081
107
108
  /// @brief Set `RMII Reference Clock Select` bit for KSZ8081.
108
109
  void ksz8081_set_clock_reference_(esp_eth_mac_t *mac);
110
+ #endif
109
111
  /// @brief Set arbitratry PHY registers from config.
110
112
  void write_phy_register_(esp_eth_mac_t *mac, PHYRegister register_data);
111
113
 
@@ -491,7 +491,7 @@ bool MQTTClientComponent::publish(const std::string &topic, const std::string &p
491
491
 
492
492
  bool MQTTClientComponent::publish(const std::string &topic, const char *payload, size_t payload_length, uint8_t qos,
493
493
  bool retain) {
494
- return publish({.topic = topic, .payload = payload, .qos = qos, .retain = retain});
494
+ return publish({.topic = topic, .payload = std::string(payload, payload_length), .qos = qos, .retain = retain});
495
495
  }
496
496
 
497
497
  bool MQTTClientComponent::publish(const MQTTMessage &message) {
@@ -28,12 +28,12 @@ bool Select::has_option(const std::string &option) const { return this->index_of
28
28
  bool Select::has_index(size_t index) const { return index < this->size(); }
29
29
 
30
30
  size_t Select::size() const {
31
- auto options = traits.get_options();
31
+ const auto &options = traits.get_options();
32
32
  return options.size();
33
33
  }
34
34
 
35
35
  optional<size_t> Select::index_of(const std::string &option) const {
36
- auto options = traits.get_options();
36
+ const auto &options = traits.get_options();
37
37
  auto it = std::find(options.begin(), options.end(), option);
38
38
  if (it == options.end()) {
39
39
  return {};
@@ -51,7 +51,7 @@ optional<size_t> Select::active_index() const {
51
51
 
52
52
  optional<std::string> Select::at(size_t index) const {
53
53
  if (this->has_index(index)) {
54
- auto options = traits.get_options();
54
+ const auto &options = traits.get_options();
55
55
  return options.at(index);
56
56
  } else {
57
57
  return {};
@@ -45,7 +45,7 @@ void SelectCall::perform() {
45
45
  auto *parent = this->parent_;
46
46
  const auto *name = parent->get_name().c_str();
47
47
  const auto &traits = parent->traits;
48
- auto options = traits.get_options();
48
+ const auto &options = traits.get_options();
49
49
 
50
50
  if (this->operation_ == SELECT_OP_NONE) {
51
51
  ESP_LOGW(TAG, "'%s' - SelectCall performed without selecting an operation", name);
esphome/const.py CHANGED
@@ -4,7 +4,7 @@ from enum import Enum
4
4
 
5
5
  from esphome.enum import StrEnum
6
6
 
7
- __version__ = "2025.9.0b2"
7
+ __version__ = "2025.9.0b4"
8
8
 
9
9
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
10
10
  VALID_SUBSTITUTIONS_CHARACTERS = (
esphome/core/defines.h CHANGED
@@ -175,6 +175,7 @@
175
175
  #ifdef USE_ARDUINO
176
176
  #define USE_ARDUINO_VERSION_CODE VERSION_CODE(3, 2, 1)
177
177
  #define USE_ETHERNET
178
+ #define USE_ETHERNET_KSZ8081
178
179
  #endif
179
180
 
180
181
  #ifdef USE_ESP_IDF
@@ -1038,12 +1038,9 @@ class ArchiveRequestHandler(BaseHandler):
1038
1038
  shutil.move(config_file, os.path.join(archive_path, configuration))
1039
1039
 
1040
1040
  storage_json = StorageJSON.load(storage_path)
1041
- if storage_json is not None:
1041
+ if storage_json is not None and storage_json.build_path:
1042
1042
  # Delete build folder (if exists)
1043
- name = storage_json.name
1044
- build_folder = os.path.join(settings.config_dir, name)
1045
- if build_folder is not None:
1046
- shutil.rmtree(build_folder, os.path.join(archive_path, name))
1043
+ shutil.rmtree(storage_json.build_path, ignore_errors=True)
1047
1044
 
1048
1045
 
1049
1046
  class UnArchiveRequestHandler(BaseHandler):
esphome/wizard.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import random
3
3
  import string
4
+ from typing import Literal, NotRequired, TypedDict, Unpack
4
5
  import unicodedata
5
6
 
6
7
  import voluptuous as vol
@@ -103,11 +104,25 @@ HARDWARE_BASE_CONFIGS = {
103
104
  }
104
105
 
105
106
 
106
- def sanitize_double_quotes(value):
107
+ def sanitize_double_quotes(value: str) -> str:
107
108
  return value.replace("\\", "\\\\").replace('"', '\\"')
108
109
 
109
110
 
110
- def wizard_file(**kwargs):
111
+ class WizardFileKwargs(TypedDict):
112
+ """Keyword arguments for wizard_file function."""
113
+
114
+ name: str
115
+ platform: Literal["ESP8266", "ESP32", "RP2040", "BK72XX", "LN882X", "RTL87XX"]
116
+ board: str
117
+ ssid: NotRequired[str]
118
+ psk: NotRequired[str]
119
+ password: NotRequired[str]
120
+ ota_password: NotRequired[str]
121
+ api_encryption_key: NotRequired[str]
122
+ friendly_name: NotRequired[str]
123
+
124
+
125
+ def wizard_file(**kwargs: Unpack[WizardFileKwargs]) -> str:
111
126
  letters = string.ascii_letters + string.digits
112
127
  ap_name_base = kwargs["name"].replace("_", " ").title()
113
128
  ap_name = f"{ap_name_base} Fallback Hotspot"
@@ -180,7 +195,25 @@ captive_portal:
180
195
  return config
181
196
 
182
197
 
183
- def wizard_write(path, **kwargs):
198
+ class WizardWriteKwargs(TypedDict):
199
+ """Keyword arguments for wizard_write function."""
200
+
201
+ name: str
202
+ type: Literal["basic", "empty", "upload"]
203
+ # Required for "basic" type
204
+ board: NotRequired[str]
205
+ platform: NotRequired[str]
206
+ ssid: NotRequired[str]
207
+ psk: NotRequired[str]
208
+ password: NotRequired[str]
209
+ ota_password: NotRequired[str]
210
+ api_encryption_key: NotRequired[str]
211
+ friendly_name: NotRequired[str]
212
+ # Required for "upload" type
213
+ file_text: NotRequired[str]
214
+
215
+
216
+ def wizard_write(path: str, **kwargs: Unpack[WizardWriteKwargs]) -> bool:
184
217
  from esphome.components.bk72xx import boards as bk72xx_boards
185
218
  from esphome.components.esp32 import boards as esp32_boards
186
219
  from esphome.components.esp8266 import boards as esp8266_boards
@@ -237,14 +270,14 @@ def wizard_write(path, **kwargs):
237
270
 
238
271
  if get_bool_env(ENV_QUICKWIZARD):
239
272
 
240
- def sleep(time):
273
+ def sleep(time: float) -> None:
241
274
  pass
242
275
 
243
276
  else:
244
277
  from time import sleep
245
278
 
246
279
 
247
- def safe_print_step(step, big):
280
+ def safe_print_step(step: int, big: str) -> None:
248
281
  safe_print()
249
282
  safe_print()
250
283
  safe_print(f"============= STEP {step} =============")
@@ -253,14 +286,14 @@ def safe_print_step(step, big):
253
286
  sleep(0.25)
254
287
 
255
288
 
256
- def default_input(text, default):
289
+ def default_input(text: str, default: str) -> str:
257
290
  safe_print()
258
291
  safe_print(f"Press ENTER for default ({default})")
259
292
  return safe_input(text.format(default)) or default
260
293
 
261
294
 
262
295
  # From https://stackoverflow.com/a/518232/8924614
263
- def strip_accents(value):
296
+ def strip_accents(value: str) -> str:
264
297
  return "".join(
265
298
  c
266
299
  for c in unicodedata.normalize("NFD", str(value))
@@ -268,7 +301,7 @@ def strip_accents(value):
268
301
  )
269
302
 
270
303
 
271
- def wizard(path):
304
+ def wizard(path: str) -> int:
272
305
  from esphome.components.bk72xx import boards as bk72xx_boards
273
306
  from esphome.components.esp32 import boards as esp32_boards
274
307
  from esphome.components.esp8266 import boards as esp8266_boards
@@ -509,6 +542,7 @@ def wizard(path):
509
542
  ssid=ssid,
510
543
  psk=psk,
511
544
  password=password,
545
+ type="basic",
512
546
  ):
513
547
  return 1
514
548
 
esphome/writer.py CHANGED
@@ -315,6 +315,19 @@ def clean_build():
315
315
  _LOGGER.info("Deleting %s", dependencies_lock)
316
316
  os.remove(dependencies_lock)
317
317
 
318
+ # Clean PlatformIO cache to resolve CMake compiler detection issues
319
+ # This helps when toolchain paths change or get corrupted
320
+ try:
321
+ from platformio.project.helpers import get_project_cache_dir
322
+ except ImportError:
323
+ # PlatformIO is not available, skip cache cleaning
324
+ pass
325
+ else:
326
+ cache_dir = get_project_cache_dir()
327
+ if cache_dir and cache_dir.strip() and os.path.isdir(cache_dir):
328
+ _LOGGER.info("Deleting PlatformIO cache %s", cache_dir)
329
+ shutil.rmtree(cache_dir)
330
+
318
331
 
319
332
  GITIGNORE_CONTENT = """# Gitignore settings for ESPHome
320
333
  # This is an example and may include too much for your use-case.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esphome
3
- Version: 2025.9.0b2
3
+ Version: 2025.9.0b4
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@openhomefoundation.org>
6
6
  License: MIT
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=H_WB4rj0uEowvlhEb31EjJQwutLQ5CQkJIsNgDK-wx8,1917
5
5
  esphome/config.py,sha256=74-Y3XKtlB9h__fsu-Zvj6PanDWufVGo1-W4jlG-8cg,43172
6
6
  esphome/config_helpers.py,sha256=E0UO0khX9JW-br_NSsDlLH3VuE-YwMQ99_pzEQVupDc,5391
7
7
  esphome/config_validation.py,sha256=WB_2g9itbOi2z8bo25t8AG1rKHzLZdfa_DiTYQMuxrQ,64839
8
- esphome/const.py,sha256=3TdQgJcux_o-t8wMvUmXnoUaYCEBuMGFUW0JXRWo4Mk,44218
8
+ esphome/const.py,sha256=OJSPrWEJdmTRErus6q7bm4Ci5G8OZWQQetSOVvFoJYg,44218
9
9
  esphome/coroutine.py,sha256=q2Bcr0MU6CviHLYRV_0lvSo0sLKQnsVlDM0yw-JxOa4,11587
10
10
  esphome/cpp_generator.py,sha256=C9O-H6ekHHdIEsfLGiqo-Sv6LZCmS0OL4A5ZGYHyh6U,32209
11
11
  esphome/cpp_helpers.py,sha256=r-hrUp7luke-ByuK2Z0TCzIvn4tTswMUkAzlVoKntiI,4039
@@ -28,8 +28,8 @@ esphome/types.py,sha256=w5JgG0GQ3vWRwcLpf7A-hkbjRNDX70G0ye845zSyWfg,625
28
28
  esphome/util.py,sha256=IJvyB7f305s8YSM4WgjIPNavTlDPapKnUqmIEARpF2s,11213
29
29
  esphome/voluptuous_schema.py,sha256=EKm4CIP5-e6wY6L1_RleMGCDYbFOWTK_Sa_oO94Advc,9529
30
30
  esphome/vscode.py,sha256=Zg6ToHy7holnMswcSUGm6-89mRsf88owU2kr864eTP0,4241
31
- esphome/wizard.py,sha256=F9LA1y7IyTcMLY9SIKml6ENniYCjfLKauc-81gu3qzU,16427
32
- esphome/writer.py,sha256=cX4txB8gSbrDwZ1HiGk7JjIDD1I5-azW18HuvXO6AoI,10363
31
+ esphome/wizard.py,sha256=xDcHKoJa4pCUJBQjL8BuB2QnwFu1E7z1GlEqW0kFUFo,17573
32
+ esphome/writer.py,sha256=FGHW4MrPDv6GSOZdu8jTYf6FdwyjODIydHf2_DTlUNA,10904
33
33
  esphome/yaml_util.py,sha256=_NKLTaGK9rqjV3r3i-5d_HfZoPBtbtqIvZZ86qMt-oI,23166
34
34
  esphome/zeroconf.py,sha256=dy3aWh1Lf4Sh5e7Izlq30FkdzAKWA6IGvZkXuxYrxFE,6511
35
35
  esphome/build_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -78,7 +78,7 @@ esphome/components/addressable_light/addressable_light_display.cpp,sha256=fjrgB1
78
78
  esphome/components/addressable_light/addressable_light_display.h,sha256=EMj2TMZ5OqUI4WR359i14Bi69iWnP648bkYV45TDpuE,2131
79
79
  esphome/components/addressable_light/display.py,sha256=StgJQLmL0a9_r3fwzaeK8eVtftOxaxUetHTflo4GsmI,2011
80
80
  esphome/components/ade7880/__init__.py,sha256=KMBEOgB15HIAc5zEuHpqMdxuFR_pJl0aUKDmnRXaEcg,28
81
- esphome/components/ade7880/ade7880.cpp,sha256=eAKL9P-3q-zOYpGM8dMeGQ-2fsIFPEgaHTc9Qdyldeo,12933
81
+ esphome/components/ade7880/ade7880.cpp,sha256=xNG6IaYf8phgHwXdlLqkC-TXt0pj3W-6MKVHMprWjaM,12933
82
82
  esphome/components/ade7880/ade7880.h,sha256=GbZyr59cjZqW8C4OVWCpmGEp6NgcXcWgFoPb4wCpsPE,5210
83
83
  esphome/components/ade7880/ade7880_i2c.cpp,sha256=sp3QBp1Obs7MSpMbv3JPR4Rt1P1gEsBVKFQVgS-BM2s,3666
84
84
  esphome/components/ade7880/ade7880_registers.h,sha256=kQCxkKmnPCgGNHwYt0-anwhChIN3HgrCn8WLp1Xe2Xg,7558
@@ -970,10 +970,10 @@ esphome/components/espnow/espnow_component.cpp,sha256=cVGDLhpyYV33P0B5U__M9HUJTX
970
970
  esphome/components/espnow/espnow_component.h,sha256=wQpUgP7vnQ8quScoOxdfEyyDQ77B4i1ryhSiwbNnqSI,6971
971
971
  esphome/components/espnow/espnow_err.h,sha256=XpcviJ6_EdTPdJ7f_DX3pWcKsm9FVfLtczO-JeGMoRg,649
972
972
  esphome/components/espnow/espnow_packet.h,sha256=zZGNt5qGWWcq9Sfwmc685VgLH4AEmYYzxZBF0uHrvMM,5692
973
- esphome/components/ethernet/__init__.py,sha256=9udaNkXPZkH6aBlVzMRfI-3VP8P8CMUzFUBLrabsi08,12800
973
+ esphome/components/ethernet/__init__.py,sha256=fRSFyrdu_o2396Feu7bHETyDWgtdV90lVFS-rO-Q6xE,13215
974
974
  esphome/components/ethernet/esp_eth_phy_jl1101.c,sha256=WQ-RuJHLTlY61Ywkf8g56CaJke0RDoGwLwbOtyV83DE,12287
975
- esphome/components/ethernet/ethernet_component.cpp,sha256=J6fKYFn03QKYX0-GcPWDhYoteedgvP43TUG0CFdeICE,27653
976
- esphome/components/ethernet/ethernet_component.h,sha256=bRL5FKVxoAK8vwpfUPVepXbEKgGA4OhRviF538yw5QU,4805
975
+ esphome/components/ethernet/ethernet_component.cpp,sha256=Wtw6RUOEi_qZ4H3xFcMTHSDqzsYA3n219ron7QJEH9Q,27773
976
+ esphome/components/ethernet/ethernet_component.h,sha256=pV6TAVNoDMUD0hxVEs8D324BfDprn3FIbkvQS-qYfYc,4840
977
977
  esphome/components/ethernet_info/__init__.py,sha256=LoiZr_nRyJfR5w1ZWOFppOVTQRwlgmHU-boDala2fLA,33
978
978
  esphome/components/ethernet_info/ethernet_info_text_sensor.cpp,sha256=nfP7xeusvbzee1KHfuipELWvF1vmuk_2e4G_NlLeJ3M,564
979
979
  esphome/components/ethernet_info/ethernet_info_text_sensor.h,sha256=kYs65vLLwVtuDcfOoQnGyDJoWL-mfsZHeAWQRafEq9I,2131
@@ -2050,7 +2050,7 @@ esphome/components/mqtt/mqtt_binary_sensor.cpp,sha256=wd5mAnBieyl8zNGoDwWbVFuaKZ
2050
2050
  esphome/components/mqtt/mqtt_binary_sensor.h,sha256=QwGVAYkOcEVkvNjtBu6JHJYXXwc-0AOTNIBS1otLzig,958
2051
2051
  esphome/components/mqtt/mqtt_button.cpp,sha256=Q6NZfbwDfLuObMJH6KIrNEvWZJLNwxDdWck6p0CQfr4,1510
2052
2052
  esphome/components/mqtt/mqtt_button.h,sha256=GJ6D6ANZgy3azdLjnHDhSrjuxEOSigYSjWs2J-akOPw,906
2053
- esphome/components/mqtt/mqtt_client.cpp,sha256=TwKQh_EVIUS0ur5SUxrwpFQ4FFx1aI3IrYNdQSKM-9A,26306
2053
+ esphome/components/mqtt/mqtt_client.cpp,sha256=eGSysFcIY3l4l0jc6D2fMD_eZXoeU_4r1F9yM_7SBB4,26335
2054
2054
  esphome/components/mqtt/mqtt_client.h,sha256=MLFPh-shnPx_3-76019kGxS97VhYRkrE6QtkRk8X2kU,16299
2055
2055
  esphome/components/mqtt/mqtt_climate.cpp,sha256=L62VSe9KWn8ELhfuNn4i8Hh841VdgL4hQsuH55ovwkk,16850
2056
2056
  esphome/components/mqtt/mqtt_climate.h,sha256=20FAWmZ-zk2RFakvRSyiZEHemo8kBKxPi3xDmJfzXLw,1805
@@ -2761,9 +2761,9 @@ esphome/components/selec_meter/selec_meter_registers.h,sha256=fcST4F67QNayD7A33Z
2761
2761
  esphome/components/selec_meter/sensor.py,sha256=HCdBr4XMdTsnKDiS_PCXa0r1TuG0LDpI9SYqNj0BdGA,5493
2762
2762
  esphome/components/select/__init__.py,sha256=-FF6tzuKehcRD0Xvk1ppi6a_Gk9rgRb5YWNq2s77zY4,7488
2763
2763
  esphome/components/select/automation.h,sha256=LM-EbLGcn2LzEBIjw5YZwGijausYO2F93QeIl7d_3T8,1706
2764
- esphome/components/select/select.cpp,sha256=1TYub0pDh-FYtdx9h0qw2xKzbilRGDwsuVI6ldj2yTM,1683
2764
+ esphome/components/select/select.cpp,sha256=hd88H6EAotqO8CZuUPftlVlDYmF1AZrHtP-uD0hQzy0,1704
2765
2765
  esphome/components/select/select.h,sha256=RlznGN1X3MeYGc6Mis-Qz2RkBbS0BIjaFT1enGMaX4s,2293
2766
- esphome/components/select/select_call.cpp,sha256=PdH-8q4ZwU9JEW66kUCiJM6qDlNuyRH-rHVGOdK1fCU,4076
2766
+ esphome/components/select/select_call.cpp,sha256=XoRm141bJzAioYtW3aVFegXjvvX1qMq5RiFgDOuu6PY,4083
2767
2767
  esphome/components/select/select_call.h,sha256=I7ViWLJLigDaLbkKF18zMQDQCIBiA8SfaIRPXKwj3rM,1005
2768
2768
  esphome/components/select/select_traits.cpp,sha256=p8ed8VtOtqjCJT_6LESNDWcqZYNqHsxLoJOQB_TG0RA,316
2769
2769
  esphome/components/select/select_traits.h,sha256=d7xBQPiAm0AD5eldo166KqPVb9R3lraACYz6BeBT500,331
@@ -3719,7 +3719,7 @@ esphome/core/config.py,sha256=VQb2e4WIyGJapk0aIOywRyUZx2WC10aI3O49eJ_ItlM,20277
3719
3719
  esphome/core/controller.cpp,sha256=nRJZK4B5WWad98tGGEESSGcKWcpWhExaUOIXO3Iu_xQ,4602
3720
3720
  esphome/core/controller.h,sha256=UCvtMbw21KvAQHaO_fgDRr1OjcXEYzEC8JupPmHrNic,3708
3721
3721
  esphome/core/datatypes.h,sha256=TNuXjWQIK7KjDwMAccMFws2SimaUlsgim96SI0cCdCY,2110
3722
- esphome/core/defines.h,sha256=ub9tWEaGAVPO7fcvWO4g1ts8gYONkQz5ZyemRJcWK2g,7270
3722
+ esphome/core/defines.h,sha256=mUISx1WQozHWfJz6umQeiLbhjG7NbHufQKKySKlBYtA,7299
3723
3723
  esphome/core/device.h,sha256=mYTwRg92-BU8uTTzmrufH-KkHCMLKsKWnvM-mjzw6I0,531
3724
3724
  esphome/core/doxygen.h,sha256=9fAJ2T-1z96-NYnj63vQhsnKthHBrh3EqBnY0h3ZN-A,439
3725
3725
  esphome/core/entity_base.cpp,sha256=l9qlYIsZFbQMBlwNbi6khjiFNNo9Gaz6twLJKMozSis,3069
@@ -3755,7 +3755,7 @@ esphome/dashboard/dashboard.py,sha256=4k32z98tQXj01FKHfXePLlP_zch-piHSxdbhjdgf3a
3755
3755
  esphome/dashboard/dns.py,sha256=nxAFb99G7U_rE5euO9CZPKpcZbXZvYcdVDuTppBNZag,1385
3756
3756
  esphome/dashboard/entries.py,sha256=SxxsrgSe2phKbvwj_4_oG2leav8ev9qpPIZb5RMJxQ0,15673
3757
3757
  esphome/dashboard/settings.py,sha256=1iIGNTgU7xg6xvjazHYq8UHC6JXocKjKlsed0cQ-nkw,2858
3758
- esphome/dashboard/web_server.py,sha256=hG1E7X3hr2OsLmSvrFONaI1NrAIwiBBKDq-cvbXEDvw,46564
3758
+ esphome/dashboard/web_server.py,sha256=I_7ZdfCgU19at1vQKirrijgQinaQAB0Q35lau_AeKHc,46440
3759
3759
  esphome/dashboard/status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3760
3760
  esphome/dashboard/status/mdns.py,sha256=jAjLuysjr29HUGA0Y_IQp4D1Qm-d3yHdHY6K00gUCD4,4775
3761
3761
  esphome/dashboard/status/mqtt.py,sha256=2QOq1vgwJCHW5uL_hqmi_R5fX5OTeTJUHx7c0pMLQKE,2578
@@ -3766,9 +3766,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3766
3766
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3767
3767
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3768
3768
  esphome/dashboard/util/text.py,sha256=wwFtORlvHjsYkqb68IT-772LHAhWxT4OtnkIcPICQB0,317
3769
- esphome-2025.9.0b2.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3770
- esphome-2025.9.0b2.dist-info/METADATA,sha256=94QmB9AbcAdH7XfLOB9w4pDrjAglqbUaFDoRDLOdDHE,3634
3771
- esphome-2025.9.0b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3772
- esphome-2025.9.0b2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3773
- esphome-2025.9.0b2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3774
- esphome-2025.9.0b2.dist-info/RECORD,,
3769
+ esphome-2025.9.0b4.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3770
+ esphome-2025.9.0b4.dist-info/METADATA,sha256=Tqq-x-J8pFDxL0NdKjhu3gkOzagg4xnE2V4TBtFm8Es,3634
3771
+ esphome-2025.9.0b4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3772
+ esphome-2025.9.0b4.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3773
+ esphome-2025.9.0b4.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3774
+ esphome-2025.9.0b4.dist-info/RECORD,,