esphome 2025.10.0b2__py3-none-any.whl → 2025.10.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.

Potentially problematic release.


This version of esphome might be problematic. Click here for more details.

esphome/__main__.py CHANGED
@@ -268,8 +268,10 @@ def has_ip_address() -> bool:
268
268
 
269
269
 
270
270
  def has_resolvable_address() -> bool:
271
- """Check if CORE.address is resolvable (via mDNS or is an IP address)."""
272
- return has_mdns() or has_ip_address()
271
+ """Check if CORE.address is resolvable (via mDNS, DNS, or is an IP address)."""
272
+ # Any address (IP, mDNS hostname, or regular DNS hostname) is resolvable
273
+ # The resolve_ip_address() function in helpers.py handles all types via AsyncResolver
274
+ return CORE.address is not None
273
275
 
274
276
 
275
277
  def mqtt_get_ip(config: ConfigType, username: str, password: str, client_id: str):
@@ -578,11 +580,12 @@ def show_logs(config: ConfigType, args: ArgsProtocol, devices: list[str]) -> int
578
580
  if has_api():
579
581
  addresses_to_use: list[str] | None = None
580
582
 
581
- if port_type == "NETWORK" and (has_mdns() or is_ip_address(port)):
583
+ if port_type == "NETWORK":
584
+ # Network addresses (IPs, mDNS names, or regular DNS hostnames) can be used
585
+ # The resolve_ip_address() function in helpers.py handles all types
582
586
  addresses_to_use = devices
583
- elif port_type in ("NETWORK", "MQTT", "MQTTIP") and has_mqtt_ip_lookup():
584
- # Only use MQTT IP lookup if the first condition didn't match
585
- # (for MQTT/MQTTIP types, or for NETWORK when mdns/ip check fails)
587
+ elif port_type in ("MQTT", "MQTTIP") and has_mqtt_ip_lookup():
588
+ # Use MQTT IP lookup for MQTT/MQTTIP types
586
589
  addresses_to_use = mqtt_get_ip(
587
590
  config, args.username, args.password, args.client_id
588
591
  )
@@ -63,6 +63,8 @@ SPIRAM_SPEEDS = {
63
63
 
64
64
 
65
65
  def supported() -> bool:
66
+ if not CORE.is_esp32:
67
+ return False
66
68
  variant = get_esp32_variant()
67
69
  return variant in SPIRAM_MODES
68
70
 
@@ -6,7 +6,7 @@ from pathlib import Path
6
6
 
7
7
  from esphome import automation, external_files
8
8
  import esphome.codegen as cg
9
- from esphome.components import audio, esp32, media_player, speaker
9
+ from esphome.components import audio, esp32, media_player, psram, speaker
10
10
  import esphome.config_validation as cv
11
11
  from esphome.const import (
12
12
  CONF_BUFFER_SIZE,
@@ -26,10 +26,21 @@ from esphome.const import (
26
26
  from esphome.core import CORE, HexInt
27
27
  from esphome.core.entity_helpers import inherit_property_from
28
28
  from esphome.external_files import download_content
29
+ from esphome.types import ConfigType
29
30
 
30
31
  _LOGGER = logging.getLogger(__name__)
31
32
 
32
- AUTO_LOAD = ["audio", "psram"]
33
+
34
+ def AUTO_LOAD(config: ConfigType) -> list[str]:
35
+ load = ["audio"]
36
+ if (
37
+ not config
38
+ or config.get(CONF_TASK_STACK_IN_PSRAM)
39
+ or config.get(CONF_CODEC_SUPPORT_ENABLED)
40
+ ):
41
+ return load + ["psram"]
42
+ return load
43
+
33
44
 
34
45
  CODEOWNERS = ["@kahrendt", "@synesthesiam"]
35
46
  DOMAIN = "media_player"
@@ -279,7 +290,9 @@ CONFIG_SCHEMA = cv.All(
279
290
  cv.Optional(CONF_BUFFER_SIZE, default=1000000): cv.int_range(
280
291
  min=4000, max=4000000
281
292
  ),
282
- cv.Optional(CONF_CODEC_SUPPORT_ENABLED, default=True): cv.boolean,
293
+ cv.Optional(
294
+ CONF_CODEC_SUPPORT_ENABLED, default=psram.supported()
295
+ ): cv.boolean,
283
296
  cv.Optional(CONF_FILES): cv.ensure_list(MEDIA_FILE_TYPE_SCHEMA),
284
297
  cv.Optional(CONF_TASK_STACK_IN_PSRAM, default=False): cv.boolean,
285
298
  cv.Optional(CONF_VOLUME_INCREMENT, default=0.05): cv.percentage,
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.10.0b2"
7
+ __version__ = "2025.10.0b3"
8
8
 
9
9
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
10
10
  VALID_SUBSTITUTIONS_CHARACTERS = (
esphome/writer.py CHANGED
@@ -15,6 +15,8 @@ from esphome.const import (
15
15
  from esphome.core import CORE, EsphomeError
16
16
  from esphome.helpers import (
17
17
  copy_file_if_changed,
18
+ get_str_env,
19
+ is_ha_addon,
18
20
  read_file,
19
21
  walk_files,
20
22
  write_file_if_changed,
@@ -338,16 +340,21 @@ def clean_build():
338
340
  def clean_all(configuration: list[str]):
339
341
  import shutil
340
342
 
341
- # Clean entire build dir
342
- for dir in configuration:
343
- build_dir = Path(dir) / ".esphome"
344
- if build_dir.is_dir():
345
- _LOGGER.info("Cleaning %s", build_dir)
346
- # Don't remove storage as it will cause the dashboard to regenerate all configs
347
- for item in build_dir.iterdir():
348
- if item.is_file():
343
+ data_dirs = [Path(dir) / ".esphome" for dir in configuration]
344
+ if is_ha_addon():
345
+ data_dirs.append(Path("/data"))
346
+ if "ESPHOME_DATA_DIR" in os.environ:
347
+ data_dirs.append(Path(get_str_env("ESPHOME_DATA_DIR", None)))
348
+
349
+ # Clean build dir
350
+ for dir in data_dirs:
351
+ if dir.is_dir():
352
+ _LOGGER.info("Cleaning %s", dir)
353
+ # Don't remove storage or .json files which are needed by the dashboard
354
+ for item in dir.iterdir():
355
+ if item.is_file() and not item.name.endswith(".json"):
349
356
  item.unlink()
350
- elif item.name != "storage" and item.is_dir():
357
+ elif item.is_dir() and item.name != "storage":
351
358
  shutil.rmtree(item)
352
359
 
353
360
  # Clean PlatformIO project files
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esphome
3
- Version: 2025.10.0b2
3
+ Version: 2025.10.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@openhomefoundation.org>
6
6
  License-Expression: MIT
@@ -35,7 +35,7 @@ Requires-Dist: pyserial==3.5
35
35
  Requires-Dist: platformio==6.1.18
36
36
  Requires-Dist: esptool==5.1.0
37
37
  Requires-Dist: click==8.1.7
38
- Requires-Dist: esphome-dashboard==20251009.0
38
+ Requires-Dist: esphome-dashboard==20251013.0
39
39
  Requires-Dist: aioesphomeapi==41.14.0
40
40
  Requires-Dist: zeroconf==0.148.0
41
41
  Requires-Dist: puremagic==1.30
@@ -1,12 +1,12 @@
1
1
  esphome/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- esphome/__main__.py,sha256=_KU57_Jt8TWsehWgYEemzB3liEe_dECr1cUQARPYNv4,41843
2
+ esphome/__main__.py,sha256=ecT5QSWDElewwl7FsrwxD-nrpYN-6QQdEagcS4GHTvc,42029
3
3
  esphome/address_cache.py,sha256=mXLDjOZ6NZebwRXSldZLnpPn51jfXeReRx0YdQ6oxOE,4622
4
4
  esphome/automation.py,sha256=Gd_VHPDp5a1GYVNgwrzsCMuzHobmv49gcWdlV3y646g,17696
5
5
  esphome/codegen.py,sha256=91Q9SVbTlgH_gFU4_sbVi6YEAiOjLuAGHG6qqV3lLHo,1939
6
6
  esphome/config.py,sha256=yfwaqzZb--kLHyfhZxyTo5cXImtJrMC9Xs9lxurKNww,45135
7
7
  esphome/config_helpers.py,sha256=E0UO0khX9JW-br_NSsDlLH3VuE-YwMQ99_pzEQVupDc,5391
8
8
  esphome/config_validation.py,sha256=WOIf3s3CIhWiAFJ7NdpmMzLfCNv89J67pvZXHmiBz5I,64808
9
- esphome/const.py,sha256=CSwRoWNfxg_G5UVrrDEzh1KQJAokladM4v3XXFjq3l8,44458
9
+ esphome/const.py,sha256=vnpMkgGPCDUfkGNiAM89CaFjzSh9it1Yi0DHaW70470,44458
10
10
  esphome/coroutine.py,sha256=JFBDo8ngY46zhxvjk5aQ5MO_-qrqKDfKQTglEIqHrYY,11946
11
11
  esphome/cpp_generator.py,sha256=DhHZT5s-Pbx5MJ762N_hFOYFo4Q9c0wJQG4p7UU_1lc,31901
12
12
  esphome/cpp_helpers.py,sha256=r-hrUp7luke-ByuK2Z0TCzIvn4tTswMUkAzlVoKntiI,4039
@@ -30,7 +30,7 @@ esphome/util.py,sha256=NMwGggf5_h9kRMEj4B-0ndBHouWInawoH-XHjlUYgMU,11728
30
30
  esphome/voluptuous_schema.py,sha256=EKm4CIP5-e6wY6L1_RleMGCDYbFOWTK_Sa_oO94Advc,9529
31
31
  esphome/vscode.py,sha256=g0I4Uv71DcB-DfG9kt7lfhTjvPPMTjff9lsnquCZ04c,4264
32
32
  esphome/wizard.py,sha256=jZ2n5DWU2l2e8MZqv3NQ_gSRYqCuM5eTkyHsWEQglz4,17552
33
- esphome/writer.py,sha256=Z7zyZVSCExxsPJCohrW0O3ujgcX1bj9CMfZyAJG5lkc,12111
33
+ esphome/writer.py,sha256=KSsMs30K_oVOa8hJgdzz3sM4dweXiaOksnzPzbhiikw,12341
34
34
  esphome/yaml_util.py,sha256=g-reUyAFy-EOqaFjkYxJrUMbNEQXKZR4S2mOW8Kkr8I,23419
35
35
  esphome/zeroconf.py,sha256=G4TeJNf8jKGA5iO0Fjhx2FxiTBTMaZDoigK33oGOu34,6891
36
36
  esphome/build_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -2421,7 +2421,7 @@ esphome/components/preferences/syncer.h,sha256=AaSl8_J86_P6bZFVx2j7I8cXz8VGeSdGC
2421
2421
  esphome/components/prometheus/__init__.py,sha256=nDE6iM3mGGovPVT74EOrDgXKv4yq0kQaK2UUbEbSllg,1697
2422
2422
  esphome/components/prometheus/prometheus_handler.cpp,sha256=OnEcCw03VQPTJIm5kEisrW_TjA8zYzvrmfiwkxx94so,41003
2423
2423
  esphome/components/prometheus/prometheus_handler.h,sha256=oohyR_wpYfb2I7s6zWV3rO-zO9ZsQ3ybxEJSsvdbeEY,7834
2424
- esphome/components/psram/__init__.py,sha256=AeJnk8JJ2ztsH06aKP8hxQw2EmZIOsY2tljflj20GAM,5007
2424
+ esphome/components/psram/__init__.py,sha256=goylC3Bof88NBfwffwlrkMIgsSSjY9SgWH7JUCKmXPI,5054
2425
2425
  esphome/components/psram/psram.cpp,sha256=ILopiIgTMmmb4mD431OuaZMEPU6v24u9Pn9K9Du1dgw,637
2426
2426
  esphome/components/psram/psram.h,sha256=LdElwxbKK68o4J9sdmMX8RZn5D94lXhCCSDm83Ge2jc,239
2427
2427
  esphome/components/pulse_counter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -2931,7 +2931,7 @@ esphome/components/sound_level/sound_level.h,sha256=1hhig0wa96Qu-6zoU1zA02tVG18_
2931
2931
  esphome/components/speaker/__init__.py,sha256=COv7sMjD5PfFjlU0XFKSmi7hxiXD5IuHUtNRtajAkzE,4399
2932
2932
  esphome/components/speaker/automation.h,sha256=tVSTV49GvHk0bCEgLz3rNYFe8B1F0kXLgE-WihuRaV8,2320
2933
2933
  esphome/components/speaker/speaker.h,sha256=Y6EuDzsIx8GDcFeWnYXg4cXiBU-6CkmrRCaMpXQYiWo,4355
2934
- esphome/components/speaker/media_player/__init__.py,sha256=ACNetxXlWnf0ytk5uSiobFU4T5MgZNaunVR_JbakSg8,14493
2934
+ esphome/components/speaker/media_player/__init__.py,sha256=fg-P1TWdMgXyzx6g5YAyK3mgsrCDumtq2SwM5myXj6A,14801
2935
2935
  esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=RBCbXXH3rpuy6nyvtzcD7SChJ4WqSpiIClAjeDk266E,22369
2936
2936
  esphome/components/speaker/media_player/audio_pipeline.h,sha256=QAQGzGUnBjx7_WaZYGIuLKtrKrs7-f3YV329h2wahQM,5029
2937
2937
  esphome/components/speaker/media_player/automation.h,sha256=I8psUHnJ8T3fkM05h1yEYDxb0yWe6Vjz7i30OSVA3Is,683
@@ -3786,9 +3786,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3786
3786
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3787
3787
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3788
3788
  esphome/dashboard/util/text.py,sha256=wwFtORlvHjsYkqb68IT-772LHAhWxT4OtnkIcPICQB0,317
3789
- esphome-2025.10.0b2.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3790
- esphome-2025.10.0b2.dist-info/METADATA,sha256=CMu__vbx03CuswyAVBGQIvbajJxmqMO-4XoDMrSYY2o,3635
3791
- esphome-2025.10.0b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3792
- esphome-2025.10.0b2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3793
- esphome-2025.10.0b2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3794
- esphome-2025.10.0b2.dist-info/RECORD,,
3789
+ esphome-2025.10.0b3.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3790
+ esphome-2025.10.0b3.dist-info/METADATA,sha256=8ekM5N3F0xnpkd0GTgswnTQ8tGxZSEBAxi3u9KNBAjU,3635
3791
+ esphome-2025.10.0b3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3792
+ esphome-2025.10.0b3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3793
+ esphome-2025.10.0b3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3794
+ esphome-2025.10.0b3.dist-info/RECORD,,