esphome 2024.11.3__py3-none-any.whl → 2024.12.0b1__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.
Files changed (178) hide show
  1. esphome/components/adc/adc_sensor.h +7 -8
  2. esphome/components/adc/adc_sensor_common.cpp +24 -0
  3. esphome/components/adc/{adc_sensor.cpp → adc_sensor_esp32.cpp} +10 -179
  4. esphome/components/adc/adc_sensor_esp8266.cpp +58 -0
  5. esphome/components/adc/adc_sensor_rp2040.cpp +93 -0
  6. esphome/components/alarm_control_panel/alarm_control_panel_call.cpp +3 -4
  7. esphome/components/animation/__init__.py +1 -2
  8. esphome/components/apds9306/apds9306.cpp +2 -1
  9. esphome/components/audio/audio.h +1 -1
  10. esphome/components/bk72xx/__init__.py +1 -1
  11. esphome/components/cse7766/cse7766.cpp +1 -1
  12. esphome/components/deep_sleep/deep_sleep_esp32.cpp +2 -2
  13. esphome/components/dht/dht.cpp +2 -1
  14. esphome/components/display/display.cpp +10 -6
  15. esphome/components/display/display.h +14 -0
  16. esphome/components/display_menu_base/__init__.py +0 -2
  17. esphome/components/display_menu_base/display_menu_base.cpp +1 -1
  18. esphome/components/dsmr/dsmr.cpp +1 -1
  19. esphome/components/esp32/__init__.py +94 -12
  20. esphome/components/esp32/boards.py +222 -14
  21. esphome/components/esp32_ble/__init__.py +22 -2
  22. esphome/components/esp32_ble/ble.cpp +13 -5
  23. esphome/components/esp32_ble/ble.h +2 -0
  24. esphome/components/esp32_ble/ble_advertising.cpp +1 -1
  25. esphome/components/esp32_ble/ble_uuid.cpp +9 -10
  26. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +4 -1
  27. esphome/components/esp32_camera_web_server/camera_web_server.h +1 -1
  28. esphome/components/esp32_rmt_led_strip/light.py +3 -3
  29. esphome/components/esp8266/__init__.py +5 -7
  30. esphome/components/ezo/ezo.cpp +14 -26
  31. esphome/components/font/__init__.py +5 -23
  32. esphome/components/font/font.cpp +5 -3
  33. esphome/components/graphical_display_menu/__init__.py +2 -0
  34. esphome/components/haier/hon_climate.cpp +79 -80
  35. esphome/components/hbridge/switch/__init__.py +44 -0
  36. esphome/components/hbridge/switch/hbridge_switch.cpp +95 -0
  37. esphome/components/hbridge/switch/hbridge_switch.h +50 -0
  38. esphome/components/hitachi_ac344/hitachi_ac344.cpp +4 -2
  39. esphome/components/hitachi_ac424/hitachi_ac424.cpp +4 -2
  40. esphome/components/homeassistant/number/homeassistant_number.cpp +3 -0
  41. esphome/components/hx711/hx711.cpp +1 -1
  42. esphome/components/hx711/hx711.h +1 -1
  43. esphome/components/i2c/i2c_bus_esp_idf.cpp +2 -2
  44. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +61 -59
  45. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +8 -17
  46. esphome/components/ili9xxx/display.py +1 -2
  47. esphome/components/ili9xxx/ili9xxx_display.cpp +3 -2
  48. esphome/components/image/__init__.py +1 -2
  49. esphome/components/logger/logger.cpp +1 -1
  50. esphome/components/ltr501/ltr501.cpp +1 -1
  51. esphome/components/lvgl/defines.py +8 -1
  52. esphome/components/lvgl/lv_validation.py +8 -3
  53. esphome/components/lvgl/lvgl_esphome.cpp +1 -1
  54. esphome/components/lvgl/lvgl_esphome.h +16 -0
  55. esphome/components/lvgl/widgets/animimg.py +12 -17
  56. esphome/components/lvgl/widgets/img.py +1 -3
  57. esphome/components/matrix_keypad/__init__.py +15 -3
  58. esphome/components/matrix_keypad/matrix_keypad.cpp +4 -0
  59. esphome/components/matrix_keypad/matrix_keypad.h +5 -0
  60. esphome/components/max31865/max31865.cpp +4 -2
  61. esphome/components/modbus_controller/modbus_controller.cpp +24 -24
  62. esphome/components/modbus_controller/modbus_controller.h +22 -22
  63. esphome/components/modbus_controller/number/modbus_number.cpp +8 -8
  64. esphome/components/modbus_controller/number/modbus_number.h +4 -4
  65. esphome/components/modbus_controller/output/modbus_output.cpp +7 -6
  66. esphome/components/modbus_controller/output/modbus_output.h +5 -5
  67. esphome/components/modbus_controller/select/modbus_select.cpp +4 -3
  68. esphome/components/modbus_controller/select/modbus_select.h +4 -4
  69. esphome/components/modbus_controller/switch/modbus_switch.cpp +5 -5
  70. esphome/components/modbus_controller/switch/modbus_switch.h +2 -2
  71. esphome/components/mqtt/__init__.py +4 -0
  72. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -5
  73. esphome/components/mqtt/mqtt_backend_esp32.cpp +3 -3
  74. esphome/components/mqtt/mqtt_client.cpp +4 -0
  75. esphome/components/mqtt/mqtt_client.h +6 -0
  76. esphome/components/mqtt/mqtt_climate.cpp +13 -3
  77. esphome/components/mqtt/mqtt_sensor.cpp +2 -0
  78. esphome/components/network/ip_address.h +1 -1
  79. esphome/components/nextion/__init__.py +2 -0
  80. esphome/components/nextion/automation.h +76 -0
  81. esphome/components/nextion/base_component.py +1 -0
  82. esphome/components/nextion/binary_sensor/__init__.py +43 -2
  83. esphome/components/nextion/display.py +15 -0
  84. esphome/components/nextion/nextion.cpp +8 -5
  85. esphome/components/nextion/nextion.h +7 -0
  86. esphome/components/nextion/nextion_upload_idf.cpp +2 -2
  87. esphome/components/nextion/sensor/__init__.py +38 -5
  88. esphome/components/nextion/switch/__init__.py +38 -2
  89. esphome/components/nextion/text_sensor/__init__.py +37 -2
  90. esphome/components/nfc/ndef_record.cpp +3 -3
  91. esphome/components/online_image/__init__.py +1 -0
  92. esphome/components/opentherm/opentherm.cpp +3 -3
  93. esphome/components/opentherm/opentherm.h +1 -1
  94. esphome/components/ota/automation.h +1 -1
  95. esphome/components/output/float_output.cpp +1 -1
  96. esphome/components/pca6416a/pca6416a.cpp +5 -3
  97. esphome/components/pca9554/pca9554.cpp +4 -4
  98. esphome/components/pipsolar/pipsolar.cpp +2 -2
  99. esphome/components/pipsolar/switch/pipsolar_switch.cpp +2 -2
  100. esphome/components/pn532/pn532_mifare_ultralight.cpp +2 -2
  101. esphome/components/pn7150/pn7150_mifare_ultralight.cpp +2 -2
  102. esphome/components/pn7160/pn7160_mifare_ultralight.cpp +2 -2
  103. esphome/components/qmc5883l/qmc5883l.cpp +45 -19
  104. esphome/components/qmc5883l/qmc5883l.h +1 -1
  105. esphome/components/qspi_dbi/qspi_dbi.cpp +2 -1
  106. esphome/components/remote_base/raw_protocol.cpp +1 -1
  107. esphome/components/rotary_encoder/rotary_encoder.cpp +3 -1
  108. esphome/components/rp2040/__init__.py +1 -1
  109. esphome/components/rtl87xx/__init__.py +1 -1
  110. esphome/components/safe_mode/automation.h +1 -1
  111. esphome/components/seeed_mr60bha2/__init__.py +41 -0
  112. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +173 -0
  113. esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +61 -0
  114. esphome/components/seeed_mr60bha2/sensor.py +57 -0
  115. esphome/components/seeed_mr60fda2/__init__.py +41 -0
  116. esphome/components/seeed_mr60fda2/binary_sensor.py +33 -0
  117. esphome/components/seeed_mr60fda2/button/__init__.py +45 -0
  118. esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.cpp +9 -0
  119. esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.h +18 -0
  120. esphome/components/seeed_mr60fda2/button/reset_radar_button.cpp +9 -0
  121. esphome/components/seeed_mr60fda2/button/reset_radar_button.h +18 -0
  122. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +368 -0
  123. esphome/components/seeed_mr60fda2/seeed_mr60fda2.h +101 -0
  124. esphome/components/seeed_mr60fda2/select/__init__.py +59 -0
  125. esphome/components/seeed_mr60fda2/select/height_threshold_select.cpp +15 -0
  126. esphome/components/seeed_mr60fda2/select/height_threshold_select.h +18 -0
  127. esphome/components/seeed_mr60fda2/select/install_height_select.cpp +15 -0
  128. esphome/components/seeed_mr60fda2/select/install_height_select.h +18 -0
  129. esphome/components/seeed_mr60fda2/select/sensitivity_select.cpp +15 -0
  130. esphome/components/seeed_mr60fda2/select/sensitivity_select.h +18 -0
  131. esphome/components/sen5x/sensor.py +5 -6
  132. esphome/components/shelly_dimmer/shelly_dimmer.cpp +1 -1
  133. esphome/components/sim800l/sim800l.cpp +1 -1
  134. esphome/components/sntp/sntp_component.cpp +14 -20
  135. esphome/components/sntp/sntp_component.h +6 -9
  136. esphome/components/sntp/time.py +4 -7
  137. esphome/components/sprinkler/sprinkler.cpp +2 -2
  138. esphome/components/st7735/st7735.cpp +1 -1
  139. esphome/components/st7789v/st7789v.cpp +1 -1
  140. esphome/components/stepper/stepper.h +0 -1
  141. esphome/components/sun_gtil2/sun_gtil2.cpp +1 -1
  142. esphome/components/switch/binary_sensor/__init__.py +31 -0
  143. esphome/components/switch/binary_sensor/switch_binary_sensor.cpp +17 -0
  144. esphome/components/switch/binary_sensor/switch_binary_sensor.h +22 -0
  145. esphome/components/sx1509/sx1509_gpio_pin.cpp +2 -1
  146. esphome/components/sx1509/sx1509_gpio_pin.h +5 -5
  147. esphome/components/uart/uart.h +1 -1
  148. esphome/components/udp/udp_component.cpp +32 -16
  149. esphome/components/ufire_ec/sensor.py +4 -4
  150. esphome/components/uln2003/uln2003.cpp +4 -1
  151. esphome/components/waveshare_epaper/display.py +8 -0
  152. esphome/components/waveshare_epaper/waveshare_epaper.cpp +191 -0
  153. esphome/components/waveshare_epaper/waveshare_epaper.h +56 -0
  154. esphome/components/wiegand/__init__.py +3 -4
  155. esphome/components/wifi/__init__.py +42 -0
  156. esphome/components/wifi/wifi_component.cpp +2 -2
  157. esphome/components/wifi/wifi_component.h +82 -1
  158. esphome/components/wifi/wifi_component_esp32_arduino.cpp +1 -1
  159. esphome/components/wifi/wifi_component_esp8266.cpp +1 -1
  160. esphome/components/wifi/wifi_component_esp_idf.cpp +1 -1
  161. esphome/components/wifi/wifi_component_libretiny.cpp +1 -1
  162. esphome/components/wifi/wifi_component_pico_w.cpp +1 -1
  163. esphome/components/wireguard/wireguard.cpp +2 -2
  164. esphome/components/xiaomi_ble/xiaomi_ble.cpp +1 -1
  165. esphome/config_validation.py +15 -11
  166. esphome/const.py +7 -1
  167. esphome/core/component.cpp +1 -1
  168. esphome/core/config.py +1 -2
  169. esphome/core/defines.h +3 -1
  170. esphome/core/helpers.cpp +6 -1
  171. esphome/core/helpers.h +2 -1
  172. esphome/core/optional.h +2 -2
  173. {esphome-2024.11.3.dist-info → esphome-2024.12.0b1.dist-info}/METADATA +3 -3
  174. {esphome-2024.11.3.dist-info → esphome-2024.12.0b1.dist-info}/RECORD +178 -149
  175. {esphome-2024.11.3.dist-info → esphome-2024.12.0b1.dist-info}/LICENSE +0 -0
  176. {esphome-2024.11.3.dist-info → esphome-2024.12.0b1.dist-info}/WHEEL +0 -0
  177. {esphome-2024.11.3.dist-info → esphome-2024.12.0b1.dist-info}/entry_points.txt +0 -0
  178. {esphome-2024.11.3.dist-info → esphome-2024.12.0b1.dist-info}/top_level.txt +0 -0
@@ -65,6 +65,8 @@ _LOGGER = logging.getLogger(__name__)
65
65
  CODEOWNERS = ["@esphome/core"]
66
66
  AUTO_LOAD = ["preferences"]
67
67
 
68
+ CONF_RELEASE = "release"
69
+
68
70
 
69
71
  def set_core_data(config):
70
72
  CORE.data[KEY_ESP32] = {}
@@ -216,11 +218,17 @@ def _format_framework_arduino_version(ver: cv.Version) -> str:
216
218
  return f"~3.{ver.major}{ver.minor:02d}{ver.patch:02d}.0"
217
219
 
218
220
 
219
- def _format_framework_espidf_version(ver: cv.Version) -> str:
221
+ def _format_framework_espidf_version(
222
+ ver: cv.Version, release: str, for_platformio: bool
223
+ ) -> str:
220
224
  # format the given arduino (https://github.com/espressif/esp-idf/releases) version to
221
225
  # a PIO platformio/framework-espidf value
222
226
  # List of package versions: https://api.registry.platformio.org/v3/packages/platformio/tool/framework-espidf
223
- return f"~3.{ver.major}{ver.minor:02d}{ver.patch:02d}.0"
227
+ if for_platformio:
228
+ return f"platformio/framework-espidf@~3.{ver.major}{ver.minor:02d}{ver.patch:02d}.0"
229
+ if release:
230
+ return f"pioarduino/framework-espidf@https://github.com/pioarduino/esp-idf/releases/download/v{str(ver)}.{release}/esp-idf-v{str(ver)}.zip"
231
+ return f"pioarduino/framework-espidf@https://github.com/pioarduino/esp-idf/releases/download/v{str(ver)}/esp-idf-v{str(ver)}.zip"
224
232
 
225
233
 
226
234
  # NOTE: Keep this in mind when updating the recommended version:
@@ -241,11 +249,33 @@ ARDUINO_PLATFORM_VERSION = cv.Version(5, 4, 0)
241
249
  # The default/recommended esp-idf framework version
242
250
  # - https://github.com/espressif/esp-idf/releases
243
251
  # - https://api.registry.platformio.org/v3/packages/platformio/tool/framework-espidf
244
- RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(4, 4, 8)
252
+ RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(5, 1, 5)
245
253
  # The platformio/espressif32 version to use for esp-idf frameworks
246
254
  # - https://github.com/platformio/platform-espressif32/releases
247
255
  # - https://api.registry.platformio.org/v3/packages/platformio/platform/espressif32
248
- ESP_IDF_PLATFORM_VERSION = cv.Version(5, 4, 0)
256
+ ESP_IDF_PLATFORM_VERSION = cv.Version(51, 3, 7)
257
+
258
+ # List based on https://registry.platformio.org/tools/platformio/framework-espidf/versions
259
+ SUPPORTED_PLATFORMIO_ESP_IDF_5X = [
260
+ cv.Version(5, 3, 1),
261
+ cv.Version(5, 3, 0),
262
+ cv.Version(5, 2, 2),
263
+ cv.Version(5, 2, 1),
264
+ cv.Version(5, 1, 2),
265
+ cv.Version(5, 1, 1),
266
+ cv.Version(5, 1, 0),
267
+ cv.Version(5, 0, 2),
268
+ cv.Version(5, 0, 1),
269
+ cv.Version(5, 0, 0),
270
+ ]
271
+
272
+ # pioarduino versions that don't require a release number
273
+ # List based on https://github.com/pioarduino/esp-idf/releases
274
+ SUPPORTED_PIOARDUINO_ESP_IDF_5X = [
275
+ cv.Version(5, 3, 1),
276
+ cv.Version(5, 3, 0),
277
+ cv.Version(5, 1, 5),
278
+ ]
249
279
 
250
280
 
251
281
  def _arduino_check_versions(value):
@@ -286,8 +316,8 @@ def _arduino_check_versions(value):
286
316
  def _esp_idf_check_versions(value):
287
317
  value = value.copy()
288
318
  lookups = {
289
- "dev": (cv.Version(5, 1, 2), "https://github.com/espressif/esp-idf.git"),
290
- "latest": (cv.Version(5, 1, 2), None),
319
+ "dev": (cv.Version(5, 1, 5), "https://github.com/espressif/esp-idf.git"),
320
+ "latest": (cv.Version(5, 1, 5), None),
291
321
  "recommended": (RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION, None),
292
322
  }
293
323
 
@@ -305,13 +335,51 @@ def _esp_idf_check_versions(value):
305
335
  if version < cv.Version(4, 0, 0):
306
336
  raise cv.Invalid("Only ESP-IDF 4.0+ is supported.")
307
337
 
308
- value[CONF_VERSION] = str(version)
309
- value[CONF_SOURCE] = source or _format_framework_espidf_version(version)
338
+ # flag this for later *before* we set value[CONF_PLATFORM_VERSION] below
339
+ has_platform_ver = CONF_PLATFORM_VERSION in value
310
340
 
311
341
  value[CONF_PLATFORM_VERSION] = value.get(
312
342
  CONF_PLATFORM_VERSION, _parse_platform_version(str(ESP_IDF_PLATFORM_VERSION))
313
343
  )
314
344
 
345
+ if (
346
+ (is_platformio := _platform_is_platformio(value[CONF_PLATFORM_VERSION]))
347
+ and version.major >= 5
348
+ and version not in SUPPORTED_PLATFORMIO_ESP_IDF_5X
349
+ ):
350
+ raise cv.Invalid(
351
+ f"ESP-IDF {str(version)} not supported by platformio/espressif32"
352
+ )
353
+
354
+ if (
355
+ version.major < 5
356
+ or (
357
+ version in SUPPORTED_PLATFORMIO_ESP_IDF_5X
358
+ and version not in SUPPORTED_PIOARDUINO_ESP_IDF_5X
359
+ )
360
+ ) and not has_platform_ver:
361
+ raise cv.Invalid(
362
+ f"ESP-IDF {value[CONF_VERSION]} may be supported by platformio/espressif32; please specify '{CONF_PLATFORM_VERSION}'"
363
+ )
364
+
365
+ if (
366
+ not is_platformio
367
+ and CONF_RELEASE not in value
368
+ and version not in SUPPORTED_PIOARDUINO_ESP_IDF_5X
369
+ ):
370
+ raise cv.Invalid(
371
+ f"ESP-IDF {value[CONF_VERSION]} is not available with pioarduino; you may need to specify '{CONF_RELEASE}'"
372
+ )
373
+
374
+ value[CONF_VERSION] = str(version)
375
+ value[CONF_SOURCE] = source or _format_framework_espidf_version(
376
+ version, value.get(CONF_RELEASE, None), is_platformio
377
+ )
378
+
379
+ if value[CONF_SOURCE].startswith("http"):
380
+ # prefix is necessary or platformio will complain with a cryptic error
381
+ value[CONF_SOURCE] = f"framework-espidf@{value[CONF_SOURCE]}"
382
+
315
383
  if version != RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION:
316
384
  _LOGGER.warning(
317
385
  "The selected ESP-IDF framework version is not the recommended one. "
@@ -323,6 +391,12 @@ def _esp_idf_check_versions(value):
323
391
 
324
392
  def _parse_platform_version(value):
325
393
  try:
394
+ ver = cv.Version.parse(cv.version_number(value))
395
+ if ver.major >= 50: # a pioarduino version
396
+ if "-" in value:
397
+ # maybe a release candidate?...definitely not our default, just use it as-is...
398
+ return f"https://github.com/pioarduino/platform-espressif32.git#{value}"
399
+ return f"https://github.com/pioarduino/platform-espressif32.git#{ver.major}.{ver.minor:02d}.{ver.patch:02d}"
326
400
  # if platform version is a valid version constraint, prefix the default package
327
401
  cv.platformio_version_constraint(value)
328
402
  return f"platformio/espressif32@{value}"
@@ -330,6 +404,14 @@ def _parse_platform_version(value):
330
404
  return value
331
405
 
332
406
 
407
+ def _platform_is_platformio(value):
408
+ try:
409
+ ver = cv.Version.parse(cv.version_number(value))
410
+ return ver.major < 50
411
+ except cv.Invalid:
412
+ return "platformio" in value
413
+
414
+
333
415
  def _detect_variant(value):
334
416
  board = value[CONF_BOARD]
335
417
  if board in BOARDS:
@@ -408,6 +490,7 @@ ESP_IDF_FRAMEWORK_SCHEMA = cv.All(
408
490
  cv.Schema(
409
491
  {
410
492
  cv.Optional(CONF_VERSION, default="recommended"): cv.string_strict,
493
+ cv.Optional(CONF_RELEASE): cv.string_strict,
411
494
  cv.Optional(CONF_SOURCE): cv.string_strict,
412
495
  cv.Optional(CONF_PLATFORM_VERSION): _parse_platform_version,
413
496
  cv.Optional(CONF_SDKCONFIG_OPTIONS, default={}): {
@@ -511,10 +594,9 @@ async def to_code(config):
511
594
  cg.add_build_flag("-DUSE_ESP_IDF")
512
595
  cg.add_build_flag("-DUSE_ESP32_FRAMEWORK_ESP_IDF")
513
596
  cg.add_build_flag("-Wno-nonnull-compare")
514
- cg.add_platformio_option(
515
- "platform_packages",
516
- [f"platformio/framework-espidf@{conf[CONF_SOURCE]}"],
517
- )
597
+
598
+ cg.add_platformio_option("platform_packages", [conf[CONF_SOURCE]])
599
+
518
600
  # platformio/toolchain-esp32ulp does not support linux_aarch64 yet and has not been updated for over 2 years
519
601
  # This is espressif's own published version which is more up to date.
520
602
  cg.add_platformio_option(
@@ -1,4 +1,12 @@
1
- from .const import VARIANT_ESP32, VARIANT_ESP32C3, VARIANT_ESP32S2, VARIANT_ESP32S3
1
+ from .const import (
2
+ VARIANT_ESP32,
3
+ VARIANT_ESP32C2,
4
+ VARIANT_ESP32C3,
5
+ VARIANT_ESP32C6,
6
+ VARIANT_ESP32H2,
7
+ VARIANT_ESP32S2,
8
+ VARIANT_ESP32S3,
9
+ )
2
10
 
3
11
  ESP32_BASE_PINS = {
4
12
  "TX": 1,
@@ -1344,6 +1352,26 @@ done | sort
1344
1352
  """
1345
1353
 
1346
1354
  BOARDS = {
1355
+ "4d_systems_esp32s3_gen4_r8n16": {
1356
+ "name": "4D Systems GEN4-ESP32 16MB (ESP32S3-R8N16)",
1357
+ "variant": VARIANT_ESP32S3,
1358
+ },
1359
+ "adafruit_camera_esp32s3": {
1360
+ "name": "Adafruit pyCamera S3",
1361
+ "variant": VARIANT_ESP32S3,
1362
+ },
1363
+ "adafruit_feather_esp32c6": {
1364
+ "name": "Adafruit Feather ESP32-C6",
1365
+ "variant": VARIANT_ESP32C6,
1366
+ },
1367
+ "adafruit_feather_esp32s2": {
1368
+ "name": "Adafruit Feather ESP32-S2",
1369
+ "variant": VARIANT_ESP32S2,
1370
+ },
1371
+ "adafruit_feather_esp32s2_reversetft": {
1372
+ "name": "Adafruit Feather ESP32-S2 Reverse TFT",
1373
+ "variant": VARIANT_ESP32S2,
1374
+ },
1347
1375
  "adafruit_feather_esp32s2_tft": {
1348
1376
  "name": "Adafruit Feather ESP32-S2 TFT",
1349
1377
  "variant": VARIANT_ESP32S2,
@@ -1356,6 +1384,10 @@ BOARDS = {
1356
1384
  "name": "Adafruit Feather ESP32-S3 No PSRAM",
1357
1385
  "variant": VARIANT_ESP32S3,
1358
1386
  },
1387
+ "adafruit_feather_esp32s3_reversetft": {
1388
+ "name": "Adafruit Feather ESP32-S3 Reverse TFT",
1389
+ "variant": VARIANT_ESP32S3,
1390
+ },
1359
1391
  "adafruit_feather_esp32s3_tft": {
1360
1392
  "name": "Adafruit Feather ESP32-S3 TFT",
1361
1393
  "variant": VARIANT_ESP32S3,
@@ -1376,10 +1408,18 @@ BOARDS = {
1376
1408
  "name": "Adafruit MagTag 2.9",
1377
1409
  "variant": VARIANT_ESP32S2,
1378
1410
  },
1411
+ "adafruit_matrixportal_esp32s3": {
1412
+ "name": "Adafruit MatrixPortal ESP32-S3",
1413
+ "variant": VARIANT_ESP32S3,
1414
+ },
1379
1415
  "adafruit_metro_esp32s2": {
1380
1416
  "name": "Adafruit Metro ESP32-S2",
1381
1417
  "variant": VARIANT_ESP32S2,
1382
1418
  },
1419
+ "adafruit_metro_esp32s3": {
1420
+ "name": "Adafruit Metro ESP32-S3",
1421
+ "variant": VARIANT_ESP32S3,
1422
+ },
1383
1423
  "adafruit_qtpy_esp32c3": {
1384
1424
  "name": "Adafruit QT Py ESP32-C3",
1385
1425
  "variant": VARIANT_ESP32C3,
@@ -1392,10 +1432,18 @@ BOARDS = {
1392
1432
  "name": "Adafruit QT Py ESP32-S2",
1393
1433
  "variant": VARIANT_ESP32S2,
1394
1434
  },
1435
+ "adafruit_qtpy_esp32s3_n4r2": {
1436
+ "name": "Adafruit QT Py ESP32-S3 (4M Flash 2M PSRAM)",
1437
+ "variant": VARIANT_ESP32S3,
1438
+ },
1395
1439
  "adafruit_qtpy_esp32s3_nopsram": {
1396
1440
  "name": "Adafruit QT Py ESP32-S3 No PSRAM",
1397
1441
  "variant": VARIANT_ESP32S3,
1398
1442
  },
1443
+ "adafruit_qualia_s3_rgb666": {
1444
+ "name": "Adafruit Qualia ESP32-S3 RGB666",
1445
+ "variant": VARIANT_ESP32S3,
1446
+ },
1399
1447
  "airm2m_core_esp32c3": {
1400
1448
  "name": "AirM2M CORE ESP32C3",
1401
1449
  "variant": VARIANT_ESP32C3,
@@ -1404,14 +1452,30 @@ BOARDS = {
1404
1452
  "name": "ALKS ESP32",
1405
1453
  "variant": VARIANT_ESP32,
1406
1454
  },
1455
+ "arduino_nano_esp32": {
1456
+ "name": "Arduino Nano ESP32",
1457
+ "variant": VARIANT_ESP32S3,
1458
+ },
1459
+ "atd147_s3": {
1460
+ "name": "ArtronShop ATD1.47-S3",
1461
+ "variant": VARIANT_ESP32S3,
1462
+ },
1407
1463
  "atmegazero_esp32s2": {
1408
1464
  "name": "EspinalLab ATMegaZero ESP32-S2",
1409
1465
  "variant": VARIANT_ESP32S2,
1410
1466
  },
1467
+ "aventen_s3_sync": {
1468
+ "name": "Aventen S3 Sync",
1469
+ "variant": VARIANT_ESP32S3,
1470
+ },
1411
1471
  "az-delivery-devkit-v4": {
1412
1472
  "name": "AZ-Delivery ESP-32 Dev Kit C V4",
1413
1473
  "variant": VARIANT_ESP32,
1414
1474
  },
1475
+ "bee_data_logger": {
1476
+ "name": "Smart Bee Data Logger",
1477
+ "variant": VARIANT_ESP32S3,
1478
+ },
1415
1479
  "bee_motion_mini": {
1416
1480
  "name": "Smart Bee Motion Mini",
1417
1481
  "variant": VARIANT_ESP32C3,
@@ -1436,14 +1500,6 @@ BOARDS = {
1436
1500
  "name": "BPI-Leaf-S3",
1437
1501
  "variant": VARIANT_ESP32S3,
1438
1502
  },
1439
- "briki_abc_esp32": {
1440
- "name": "Briki ABC (MBC-WB) - ESP32",
1441
- "variant": VARIANT_ESP32,
1442
- },
1443
- "briki_mbc-wb_esp32": {
1444
- "name": "Briki MBC-WB - ESP32",
1445
- "variant": VARIANT_ESP32,
1446
- },
1447
1503
  "cnrs_aw2eth": {
1448
1504
  "name": "CNRS AW2ETH",
1449
1505
  "variant": VARIANT_ESP32,
@@ -1496,18 +1552,38 @@ BOARDS = {
1496
1552
  "name": "DFRobot Beetle ESP32-C3",
1497
1553
  "variant": VARIANT_ESP32C3,
1498
1554
  },
1555
+ "dfrobot_firebeetle2_esp32e": {
1556
+ "name": "DFRobot Firebeetle 2 ESP32-E",
1557
+ "variant": VARIANT_ESP32,
1558
+ },
1499
1559
  "dfrobot_firebeetle2_esp32s3": {
1500
1560
  "name": "DFRobot Firebeetle 2 ESP32-S3",
1501
1561
  "variant": VARIANT_ESP32S3,
1502
1562
  },
1563
+ "dfrobot_romeo_esp32s3": {
1564
+ "name": "DFRobot Romeo ESP32-S3",
1565
+ "variant": VARIANT_ESP32S3,
1566
+ },
1503
1567
  "dpu_esp32": {
1504
1568
  "name": "TAMC DPU ESP32",
1505
1569
  "variant": VARIANT_ESP32,
1506
1570
  },
1571
+ "edgebox-esp-100": {
1572
+ "name": "Seeed Studio Edgebox-ESP-100",
1573
+ "variant": VARIANT_ESP32S3,
1574
+ },
1507
1575
  "esp320": {
1508
1576
  "name": "Electronic SweetPeas ESP320",
1509
1577
  "variant": VARIANT_ESP32,
1510
1578
  },
1579
+ "esp32-c2-devkitm-1": {
1580
+ "name": "Espressif ESP32-C2-DevKitM-1",
1581
+ "variant": VARIANT_ESP32C2,
1582
+ },
1583
+ "esp32-c3-devkitc-02": {
1584
+ "name": "Espressif ESP32-C3-DevKitC-02",
1585
+ "variant": VARIANT_ESP32C3,
1586
+ },
1511
1587
  "esp32-c3-devkitm-1": {
1512
1588
  "name": "Espressif ESP32-C3-DevKitM-1",
1513
1589
  "variant": VARIANT_ESP32C3,
@@ -1516,6 +1592,14 @@ BOARDS = {
1516
1592
  "name": "Ai-Thinker ESP-C3-M1-I-Kit",
1517
1593
  "variant": VARIANT_ESP32C3,
1518
1594
  },
1595
+ "esp32-c6-devkitc-1": {
1596
+ "name": "Espressif ESP32-C6-DevKitC-1",
1597
+ "variant": VARIANT_ESP32C6,
1598
+ },
1599
+ "esp32-c6-devkitm-1": {
1600
+ "name": "Espressif ESP32-C6-DevKitM-1",
1601
+ "variant": VARIANT_ESP32C6,
1602
+ },
1519
1603
  "esp32cam": {
1520
1604
  "name": "AI Thinker ESP32-CAM",
1521
1605
  "variant": VARIANT_ESP32,
@@ -1544,6 +1628,14 @@ BOARDS = {
1544
1628
  "name": "OLIMEX ESP32-GATEWAY",
1545
1629
  "variant": VARIANT_ESP32,
1546
1630
  },
1631
+ "esp32-h2-devkitm-1": {
1632
+ "name": "Espressif ESP32-H2-DevKit",
1633
+ "variant": VARIANT_ESP32H2,
1634
+ },
1635
+ "esp32-pico-devkitm-2": {
1636
+ "name": "Espressif ESP32-PICO-DevKitM-2",
1637
+ "variant": VARIANT_ESP32,
1638
+ },
1547
1639
  "esp32-poe-iso": {
1548
1640
  "name": "OLIMEX ESP32-PoE-ISO",
1549
1641
  "variant": VARIANT_ESP32,
@@ -1580,10 +1672,22 @@ BOARDS = {
1580
1672
  "name": "Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)",
1581
1673
  "variant": VARIANT_ESP32S3,
1582
1674
  },
1583
- "esp32-s3-korvo-2": {
1584
- "name": "Espressif ESP32-S3-Korvo-2",
1675
+ "esp32-s3-devkitm-1": {
1676
+ "name": "Espressif ESP32-S3-DevKitM-1",
1585
1677
  "variant": VARIANT_ESP32S3,
1586
1678
  },
1679
+ "esp32s3_powerfeather": {
1680
+ "name": "ESP32-S3 PowerFeather",
1681
+ "variant": VARIANT_ESP32S3,
1682
+ },
1683
+ "esp32s3usbotg": {
1684
+ "name": "Espressif ESP32-S3-USB-OTG",
1685
+ "variant": VARIANT_ESP32S3,
1686
+ },
1687
+ "esp32-solo1": {
1688
+ "name": "Espressif Generic ESP32-solo1 4M Flash",
1689
+ "variant": VARIANT_ESP32,
1690
+ },
1587
1691
  "esp32thing": {
1588
1692
  "name": "SparkFun ESP32 Thing",
1589
1693
  "variant": VARIANT_ESP32,
@@ -1652,9 +1756,9 @@ BOARDS = {
1652
1756
  "name": "Heltec WiFi Kit 32",
1653
1757
  "variant": VARIANT_ESP32,
1654
1758
  },
1655
- "heltec_wifi_kit_32_v2": {
1656
- "name": "Heltec WiFi Kit 32 (V2)",
1657
- "variant": VARIANT_ESP32,
1759
+ "heltec_wifi_kit_32_V3": {
1760
+ "name": "Heltec WiFi Kit 32 (V3)",
1761
+ "variant": VARIANT_ESP32S3,
1658
1762
  },
1659
1763
  "heltec_wifi_lora_32": {
1660
1764
  "name": "Heltec WiFi LoRa 32",
@@ -1664,6 +1768,10 @@ BOARDS = {
1664
1768
  "name": "Heltec WiFi LoRa 32 (V2)",
1665
1769
  "variant": VARIANT_ESP32,
1666
1770
  },
1771
+ "heltec_wifi_lora_32_V3": {
1772
+ "name": "Heltec WiFi LoRa 32 (V3)",
1773
+ "variant": VARIANT_ESP32S3,
1774
+ },
1667
1775
  "heltec_wireless_stick_lite": {
1668
1776
  "name": "Heltec Wireless Stick Lite",
1669
1777
  "variant": VARIANT_ESP32,
@@ -1708,6 +1816,14 @@ BOARDS = {
1708
1816
  "name": "oddWires IoT-Bus Proteus",
1709
1817
  "variant": VARIANT_ESP32,
1710
1818
  },
1819
+ "ioxesp32": {
1820
+ "name": "ArtronShop IOXESP32",
1821
+ "variant": VARIANT_ESP32,
1822
+ },
1823
+ "ioxesp32ps": {
1824
+ "name": "ArtronShop IOXESP32PS",
1825
+ "variant": VARIANT_ESP32,
1826
+ },
1711
1827
  "kb32-ft": {
1712
1828
  "name": "MakerAsia KB32-FT",
1713
1829
  "variant": VARIANT_ESP32,
@@ -1720,10 +1836,26 @@ BOARDS = {
1720
1836
  "name": "Labplus mPython",
1721
1837
  "variant": VARIANT_ESP32,
1722
1838
  },
1839
+ "lilka_v2": {
1840
+ "name": "Lilka v2",
1841
+ "variant": VARIANT_ESP32S3,
1842
+ },
1843
+ "lilygo-t-display": {
1844
+ "name": "LilyGo T-Display",
1845
+ "variant": VARIANT_ESP32,
1846
+ },
1847
+ "lilygo-t-display-s3": {
1848
+ "name": "LilyGo T-Display-S3",
1849
+ "variant": VARIANT_ESP32S3,
1850
+ },
1723
1851
  "lionbit": {
1724
1852
  "name": "Lion:Bit Dev Board",
1725
1853
  "variant": VARIANT_ESP32,
1726
1854
  },
1855
+ "lionbits3": {
1856
+ "name": "Lion:Bit S3 STEM Dev Board",
1857
+ "variant": VARIANT_ESP32S3,
1858
+ },
1727
1859
  "lolin32_lite": {
1728
1860
  "name": "WEMOS LOLIN32 Lite",
1729
1861
  "variant": VARIANT_ESP32,
@@ -1752,10 +1884,18 @@ BOARDS = {
1752
1884
  "name": "WEMOS LOLIN S2 PICO",
1753
1885
  "variant": VARIANT_ESP32S2,
1754
1886
  },
1887
+ "lolin_s3_mini": {
1888
+ "name": "WEMOS LOLIN S3 Mini",
1889
+ "variant": VARIANT_ESP32S3,
1890
+ },
1755
1891
  "lolin_s3": {
1756
1892
  "name": "WEMOS LOLIN S3",
1757
1893
  "variant": VARIANT_ESP32S3,
1758
1894
  },
1895
+ "lolin_s3_pro": {
1896
+ "name": "WEMOS LOLIN S3 PRO",
1897
+ "variant": VARIANT_ESP32S3,
1898
+ },
1759
1899
  "lopy4": {
1760
1900
  "name": "Pycom LoPy4",
1761
1901
  "variant": VARIANT_ESP32,
@@ -1768,10 +1908,18 @@ BOARDS = {
1768
1908
  "name": "M5Stack-ATOM",
1769
1909
  "variant": VARIANT_ESP32,
1770
1910
  },
1911
+ "m5stack-atoms3": {
1912
+ "name": "M5Stack AtomS3",
1913
+ "variant": VARIANT_ESP32S3,
1914
+ },
1771
1915
  "m5stack-core2": {
1772
1916
  "name": "M5Stack Core2",
1773
1917
  "variant": VARIANT_ESP32,
1774
1918
  },
1919
+ "m5stack-core-esp32-16M": {
1920
+ "name": "M5Stack Core ESP32 16M",
1921
+ "variant": VARIANT_ESP32,
1922
+ },
1775
1923
  "m5stack-core-esp32": {
1776
1924
  "name": "M5Stack Core ESP32",
1777
1925
  "variant": VARIANT_ESP32,
@@ -1780,6 +1928,10 @@ BOARDS = {
1780
1928
  "name": "M5Stack-Core Ink",
1781
1929
  "variant": VARIANT_ESP32,
1782
1930
  },
1931
+ "m5stack-cores3": {
1932
+ "name": "M5Stack CoreS3",
1933
+ "variant": VARIANT_ESP32S3,
1934
+ },
1783
1935
  "m5stack-fire": {
1784
1936
  "name": "M5Stack FIRE",
1785
1937
  "variant": VARIANT_ESP32,
@@ -1788,6 +1940,14 @@ BOARDS = {
1788
1940
  "name": "M5Stack GREY ESP32",
1789
1941
  "variant": VARIANT_ESP32,
1790
1942
  },
1943
+ "m5stack_paper": {
1944
+ "name": "M5Stack Paper",
1945
+ "variant": VARIANT_ESP32,
1946
+ },
1947
+ "m5stack-stamps3": {
1948
+ "name": "M5Stack StampS3",
1949
+ "variant": VARIANT_ESP32S3,
1950
+ },
1791
1951
  "m5stack-station": {
1792
1952
  "name": "M5Stack Station",
1793
1953
  "variant": VARIANT_ESP32,
@@ -1796,6 +1956,10 @@ BOARDS = {
1796
1956
  "name": "M5Stack Timer CAM",
1797
1957
  "variant": VARIANT_ESP32,
1798
1958
  },
1959
+ "m5stamp-pico": {
1960
+ "name": "M5Stamp-Pico",
1961
+ "variant": VARIANT_ESP32,
1962
+ },
1799
1963
  "m5stick-c": {
1800
1964
  "name": "M5Stick-C",
1801
1965
  "variant": VARIANT_ESP32,
@@ -1832,10 +1996,26 @@ BOARDS = {
1832
1996
  "name": "Deparment of Alchemy MiniMain ESP32-S2",
1833
1997
  "variant": VARIANT_ESP32S2,
1834
1998
  },
1999
+ "motorgo_mini_1": {
2000
+ "name": "MotorGo Mini 1 (ESP32-S3)",
2001
+ "variant": VARIANT_ESP32S3,
2002
+ },
2003
+ "namino_arancio": {
2004
+ "name": "Namino Arancio",
2005
+ "variant": VARIANT_ESP32S3,
2006
+ },
2007
+ "namino_rosso": {
2008
+ "name": "Namino Rosso",
2009
+ "variant": VARIANT_ESP32S3,
2010
+ },
1835
2011
  "nano32": {
1836
2012
  "name": "MakerAsia Nano32",
1837
2013
  "variant": VARIANT_ESP32,
1838
2014
  },
2015
+ "nebulas3": {
2016
+ "name": "Kinetic Dynamics Nebula S3",
2017
+ "variant": VARIANT_ESP32S3,
2018
+ },
1839
2019
  "nina_w10": {
1840
2020
  "name": "u-blox NINA-W10 series",
1841
2021
  "variant": VARIANT_ESP32,
@@ -1896,10 +2076,22 @@ BOARDS = {
1896
2076
  "name": "Munich Labs RedPill ESP32-S3",
1897
2077
  "variant": VARIANT_ESP32S3,
1898
2078
  },
2079
+ "roboheart_hercules": {
2080
+ "name": "RoboHeart Hercules",
2081
+ "variant": VARIANT_ESP32,
2082
+ },
1899
2083
  "seeed_xiao_esp32c3": {
1900
2084
  "name": "Seeed Studio XIAO ESP32C3",
1901
2085
  "variant": VARIANT_ESP32C3,
1902
2086
  },
2087
+ "seeed_xiao_esp32s3": {
2088
+ "name": "Seeed Studio XIAO ESP32S3",
2089
+ "variant": VARIANT_ESP32S3,
2090
+ },
2091
+ "sensebox_mcu_esp32s2": {
2092
+ "name": "senseBox MCU-S2 ESP32-S2",
2093
+ "variant": VARIANT_ESP32S2,
2094
+ },
1903
2095
  "sensesiot_weizen": {
1904
2096
  "name": "LOGISENSES Senses Weizen",
1905
2097
  "variant": VARIANT_ESP32,
@@ -1912,6 +2104,10 @@ BOARDS = {
1912
2104
  "name": "S.ODI Ultra v1",
1913
2105
  "variant": VARIANT_ESP32,
1914
2106
  },
2107
+ "sparkfun_esp32c6_thing_plus": {
2108
+ "name": "Sparkfun ESP32-C6 Thing Plus",
2109
+ "variant": VARIANT_ESP32C6,
2110
+ },
1915
2111
  "sparkfun_esp32_iot_redboard": {
1916
2112
  "name": "SparkFun ESP32 IoT RedBoard",
1917
2113
  "variant": VARIANT_ESP32,
@@ -2004,6 +2200,10 @@ BOARDS = {
2004
2200
  "name": "Unexpected Maker FeatherS3",
2005
2201
  "variant": VARIANT_ESP32S3,
2006
2202
  },
2203
+ "um_nanos3": {
2204
+ "name": "Unexpected Maker NanoS3",
2205
+ "variant": VARIANT_ESP32S3,
2206
+ },
2007
2207
  "um_pros3": {
2008
2208
  "name": "Unexpected Maker PROS3",
2009
2209
  "variant": VARIANT_ESP32S3,
@@ -2040,6 +2240,14 @@ BOARDS = {
2040
2240
  "name": "uPesy ESP32 Wrover DevKit",
2041
2241
  "variant": VARIANT_ESP32,
2042
2242
  },
2243
+ "valtrack_v4_mfw_esp32_c3": {
2244
+ "name": "Valetron Systems VALTRACK-V4MVF",
2245
+ "variant": VARIANT_ESP32C3,
2246
+ },
2247
+ "valtrack_v4_vts_esp32_c3": {
2248
+ "name": "Valetron Systems VALTRACK-V4VTS",
2249
+ "variant": VARIANT_ESP32C3,
2250
+ },
2043
2251
  "vintlabs-devkit-v1": {
2044
2252
  "name": "VintLabs ESP32 Devkit",
2045
2253
  "variant": VARIANT_ESP32,
@@ -2,8 +2,10 @@ from esphome import automation
2
2
  import esphome.codegen as cg
3
3
  from esphome.components.esp32 import add_idf_sdkconfig_option, const, get_esp32_variant
4
4
  import esphome.config_validation as cv
5
- from esphome.const import CONF_ENABLE_ON_BOOT, CONF_ID
5
+ from esphome.const import CONF_ENABLE_ON_BOOT, CONF_ESPHOME, CONF_ID, CONF_NAME
6
6
  from esphome.core import CORE
7
+ from esphome.core.config import CONF_NAME_ADD_MAC_SUFFIX
8
+ import esphome.final_validate as fv
7
9
 
8
10
  DEPENDENCIES = ["esp32"]
9
11
  CODEOWNERS = ["@jesserockz", "@Rapsssito"]
@@ -50,6 +52,7 @@ TX_POWER_LEVELS = {
50
52
  CONFIG_SCHEMA = cv.Schema(
51
53
  {
52
54
  cv.GenerateID(): cv.declare_id(ESP32BLE),
55
+ cv.Optional(CONF_NAME): cv.All(cv.string, cv.Length(max=20)),
53
56
  cv.Optional(CONF_IO_CAPABILITY, default="none"): cv.enum(
54
57
  IO_CAPABILITY, lower=True
55
58
  ),
@@ -67,7 +70,22 @@ def validate_variant(_):
67
70
  raise cv.Invalid(f"{variant} does not support Bluetooth")
68
71
 
69
72
 
70
- FINAL_VALIDATE_SCHEMA = validate_variant
73
+ def final_validation(config):
74
+ validate_variant(config)
75
+ if (name := config.get(CONF_NAME)) is not None:
76
+ full_config = fv.full_config.get()
77
+ max_length = 20
78
+ if full_config[CONF_ESPHOME][CONF_NAME_ADD_MAC_SUFFIX]:
79
+ max_length -= 7 # "-AABBCC" is appended when add mac suffix option is used
80
+ if len(name) > max_length:
81
+ raise cv.Invalid(
82
+ f"Name '{name}' is too long, maximum length is {max_length} characters"
83
+ )
84
+
85
+ return config
86
+
87
+
88
+ FINAL_VALIDATE_SCHEMA = final_validation
71
89
 
72
90
 
73
91
  async def to_code(config):
@@ -75,6 +93,8 @@ async def to_code(config):
75
93
  cg.add(var.set_enable_on_boot(config[CONF_ENABLE_ON_BOOT]))
76
94
  cg.add(var.set_io_capability(config[CONF_IO_CAPABILITY]))
77
95
  cg.add(var.set_advertising_cycle_time(config[CONF_ADVERTISING_CYCLE_TIME]))
96
+ if (name := config.get(CONF_NAME)) is not None:
97
+ cg.add(var.set_name(name))
78
98
  await cg.register_component(var, config)
79
99
 
80
100
  if CORE.using_esp_idf: