esphome 2024.11.2__py3-none-any.whl → 2024.12.0__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 (192) hide show
  1. esphome/__main__.py +1 -1
  2. esphome/components/adc/adc_sensor.h +7 -8
  3. esphome/components/adc/adc_sensor_common.cpp +24 -0
  4. esphome/components/adc/{adc_sensor.cpp → adc_sensor_esp32.cpp} +10 -179
  5. esphome/components/adc/adc_sensor_esp8266.cpp +58 -0
  6. esphome/components/adc/adc_sensor_libretiny.cpp +48 -0
  7. esphome/components/adc/adc_sensor_rp2040.cpp +93 -0
  8. esphome/components/alarm_control_panel/alarm_control_panel_call.cpp +3 -4
  9. esphome/components/animation/__init__.py +1 -2
  10. esphome/components/apds9306/apds9306.cpp +2 -1
  11. esphome/components/audio/audio.h +1 -1
  12. esphome/components/bk72xx/__init__.py +1 -1
  13. esphome/components/cse7766/cse7766.cpp +1 -1
  14. esphome/components/datetime/datetime_entity.cpp +1 -3
  15. esphome/components/deep_sleep/deep_sleep_esp32.cpp +2 -2
  16. esphome/components/dht/dht.cpp +2 -1
  17. esphome/components/display/display.cpp +10 -6
  18. esphome/components/display/display.h +14 -0
  19. esphome/components/display_menu_base/__init__.py +0 -2
  20. esphome/components/display_menu_base/display_menu_base.cpp +1 -1
  21. esphome/components/dsmr/dsmr.cpp +1 -1
  22. esphome/components/esp32/__init__.py +100 -22
  23. esphome/components/esp32/boards.py +222 -14
  24. esphome/components/esp32_ble/__init__.py +22 -2
  25. esphome/components/esp32_ble/ble.cpp +39 -12
  26. esphome/components/esp32_ble/ble.h +2 -0
  27. esphome/components/esp32_ble/ble_advertising.cpp +1 -1
  28. esphome/components/esp32_ble/ble_uuid.cpp +9 -10
  29. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +4 -1
  30. esphome/components/esp32_camera_web_server/camera_web_server.h +1 -1
  31. esphome/components/esp32_rmt_led_strip/light.py +3 -3
  32. esphome/components/esp8266/__init__.py +5 -7
  33. esphome/components/ezo/ezo.cpp +14 -26
  34. esphome/components/font/__init__.py +10 -25
  35. esphome/components/font/font.cpp +5 -3
  36. esphome/components/graphical_display_menu/__init__.py +2 -0
  37. esphome/components/haier/hon_climate.cpp +79 -80
  38. esphome/components/hbridge/switch/__init__.py +44 -0
  39. esphome/components/hbridge/switch/hbridge_switch.cpp +95 -0
  40. esphome/components/hbridge/switch/hbridge_switch.h +50 -0
  41. esphome/components/hitachi_ac344/hitachi_ac344.cpp +4 -2
  42. esphome/components/hitachi_ac424/hitachi_ac424.cpp +4 -2
  43. esphome/components/homeassistant/number/homeassistant_number.cpp +3 -0
  44. esphome/components/hx711/hx711.cpp +1 -1
  45. esphome/components/hx711/hx711.h +1 -1
  46. esphome/components/i2c/i2c_bus_esp_idf.cpp +2 -2
  47. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +61 -59
  48. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +8 -17
  49. esphome/components/ili9xxx/display.py +1 -2
  50. esphome/components/ili9xxx/ili9xxx_display.cpp +3 -2
  51. esphome/components/image/__init__.py +1 -2
  52. esphome/components/logger/logger.cpp +1 -1
  53. esphome/components/ltr501/ltr501.cpp +1 -1
  54. esphome/components/lvgl/defines.py +9 -2
  55. esphome/components/lvgl/lv_validation.py +8 -3
  56. esphome/components/lvgl/lvgl_esphome.cpp +1 -1
  57. esphome/components/lvgl/lvgl_esphome.h +19 -0
  58. esphome/components/lvgl/widgets/animimg.py +12 -17
  59. esphome/components/lvgl/widgets/img.py +1 -3
  60. esphome/components/lvgl/widgets/line.py +6 -0
  61. esphome/components/lvgl/widgets/msgbox.py +2 -1
  62. esphome/components/matrix_keypad/__init__.py +15 -3
  63. esphome/components/matrix_keypad/matrix_keypad.cpp +4 -0
  64. esphome/components/matrix_keypad/matrix_keypad.h +5 -0
  65. esphome/components/max31865/max31865.cpp +4 -2
  66. esphome/components/modbus_controller/modbus_controller.cpp +24 -24
  67. esphome/components/modbus_controller/modbus_controller.h +22 -22
  68. esphome/components/modbus_controller/number/modbus_number.cpp +8 -8
  69. esphome/components/modbus_controller/number/modbus_number.h +4 -4
  70. esphome/components/modbus_controller/output/modbus_output.cpp +7 -6
  71. esphome/components/modbus_controller/output/modbus_output.h +5 -5
  72. esphome/components/modbus_controller/select/modbus_select.cpp +4 -3
  73. esphome/components/modbus_controller/select/modbus_select.h +4 -4
  74. esphome/components/modbus_controller/switch/modbus_switch.cpp +5 -5
  75. esphome/components/modbus_controller/switch/modbus_switch.h +2 -2
  76. esphome/components/mqtt/__init__.py +4 -0
  77. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -5
  78. esphome/components/mqtt/mqtt_backend_esp32.cpp +3 -3
  79. esphome/components/mqtt/mqtt_client.cpp +4 -0
  80. esphome/components/mqtt/mqtt_client.h +6 -0
  81. esphome/components/mqtt/mqtt_climate.cpp +13 -3
  82. esphome/components/mqtt/mqtt_sensor.cpp +2 -0
  83. esphome/components/network/ip_address.h +1 -1
  84. esphome/components/nextion/__init__.py +2 -0
  85. esphome/components/nextion/automation.h +76 -0
  86. esphome/components/nextion/base_component.py +1 -0
  87. esphome/components/nextion/binary_sensor/__init__.py +43 -2
  88. esphome/components/nextion/display.py +15 -0
  89. esphome/components/nextion/nextion.cpp +8 -5
  90. esphome/components/nextion/nextion.h +7 -0
  91. esphome/components/nextion/nextion_upload_idf.cpp +2 -2
  92. esphome/components/nextion/sensor/__init__.py +38 -5
  93. esphome/components/nextion/switch/__init__.py +38 -2
  94. esphome/components/nextion/text_sensor/__init__.py +37 -2
  95. esphome/components/nfc/ndef_record.cpp +3 -3
  96. esphome/components/online_image/__init__.py +1 -0
  97. esphome/components/online_image/png_image.cpp +4 -0
  98. esphome/components/opentherm/hub.cpp +6 -7
  99. esphome/components/opentherm/opentherm.cpp +18 -34
  100. esphome/components/opentherm/opentherm.h +4 -5
  101. esphome/components/ota/automation.h +1 -1
  102. esphome/components/output/float_output.cpp +1 -1
  103. esphome/components/pca6416a/pca6416a.cpp +5 -3
  104. esphome/components/pca9554/pca9554.cpp +4 -4
  105. esphome/components/pipsolar/pipsolar.cpp +2 -2
  106. esphome/components/pipsolar/switch/pipsolar_switch.cpp +2 -2
  107. esphome/components/pn532/pn532_mifare_ultralight.cpp +2 -2
  108. esphome/components/pn7150/pn7150_mifare_ultralight.cpp +2 -2
  109. esphome/components/pn7160/pn7160_mifare_ultralight.cpp +2 -2
  110. esphome/components/qmc5883l/qmc5883l.cpp +45 -19
  111. esphome/components/qmc5883l/qmc5883l.h +1 -1
  112. esphome/components/qspi_dbi/qspi_dbi.cpp +2 -1
  113. esphome/components/remote_base/raw_protocol.cpp +1 -1
  114. esphome/components/remote_receiver/__init__.py +5 -6
  115. esphome/components/rotary_encoder/rotary_encoder.cpp +3 -1
  116. esphome/components/rp2040/__init__.py +1 -1
  117. esphome/components/rtl87xx/__init__.py +1 -1
  118. esphome/components/safe_mode/automation.h +1 -1
  119. esphome/components/seeed_mr60bha2/__init__.py +41 -0
  120. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +173 -0
  121. esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +61 -0
  122. esphome/components/seeed_mr60bha2/sensor.py +57 -0
  123. esphome/components/seeed_mr60fda2/__init__.py +41 -0
  124. esphome/components/seeed_mr60fda2/binary_sensor.py +33 -0
  125. esphome/components/seeed_mr60fda2/button/__init__.py +45 -0
  126. esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.cpp +9 -0
  127. esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.h +18 -0
  128. esphome/components/seeed_mr60fda2/button/reset_radar_button.cpp +9 -0
  129. esphome/components/seeed_mr60fda2/button/reset_radar_button.h +18 -0
  130. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +368 -0
  131. esphome/components/seeed_mr60fda2/seeed_mr60fda2.h +101 -0
  132. esphome/components/seeed_mr60fda2/select/__init__.py +59 -0
  133. esphome/components/seeed_mr60fda2/select/height_threshold_select.cpp +15 -0
  134. esphome/components/seeed_mr60fda2/select/height_threshold_select.h +18 -0
  135. esphome/components/seeed_mr60fda2/select/install_height_select.cpp +15 -0
  136. esphome/components/seeed_mr60fda2/select/install_height_select.h +18 -0
  137. esphome/components/seeed_mr60fda2/select/sensitivity_select.cpp +15 -0
  138. esphome/components/seeed_mr60fda2/select/sensitivity_select.h +18 -0
  139. esphome/components/sen5x/sensor.py +5 -6
  140. esphome/components/sgp30/sensor.py +8 -9
  141. esphome/components/sgp30/sgp30.cpp +2 -6
  142. esphome/components/shelly_dimmer/shelly_dimmer.cpp +1 -1
  143. esphome/components/sim800l/sim800l.cpp +1 -1
  144. esphome/components/sntp/sntp_component.cpp +14 -20
  145. esphome/components/sntp/sntp_component.h +6 -9
  146. esphome/components/sntp/time.py +4 -7
  147. esphome/components/sprinkler/sprinkler.cpp +2 -2
  148. esphome/components/st7735/st7735.cpp +1 -1
  149. esphome/components/st7789v/st7789v.cpp +1 -1
  150. esphome/components/st7920/st7920.cpp +2 -3
  151. esphome/components/stepper/stepper.h +0 -1
  152. esphome/components/sun_gtil2/sun_gtil2.cpp +1 -1
  153. esphome/components/switch/binary_sensor/__init__.py +31 -0
  154. esphome/components/switch/binary_sensor/switch_binary_sensor.cpp +17 -0
  155. esphome/components/switch/binary_sensor/switch_binary_sensor.h +22 -0
  156. esphome/components/sx1509/sx1509_gpio_pin.cpp +2 -1
  157. esphome/components/sx1509/sx1509_gpio_pin.h +5 -5
  158. esphome/components/uart/uart.h +1 -1
  159. esphome/components/udp/udp_component.cpp +32 -16
  160. esphome/components/ufire_ec/sensor.py +4 -4
  161. esphome/components/uln2003/uln2003.cpp +4 -1
  162. esphome/components/waveshare_epaper/display.py +8 -0
  163. esphome/components/waveshare_epaper/waveshare_epaper.cpp +191 -0
  164. esphome/components/waveshare_epaper/waveshare_epaper.h +56 -0
  165. esphome/components/wiegand/__init__.py +3 -4
  166. esphome/components/wifi/__init__.py +42 -0
  167. esphome/components/wifi/wifi_component.cpp +2 -2
  168. esphome/components/wifi/wifi_component.h +82 -1
  169. esphome/components/wifi/wifi_component_esp32_arduino.cpp +1 -1
  170. esphome/components/wifi/wifi_component_esp8266.cpp +1 -1
  171. esphome/components/wifi/wifi_component_esp_idf.cpp +1 -1
  172. esphome/components/wifi/wifi_component_libretiny.cpp +1 -1
  173. esphome/components/wifi/wifi_component_pico_w.cpp +1 -1
  174. esphome/components/wireguard/wireguard.cpp +2 -2
  175. esphome/components/xiaomi_ble/xiaomi_ble.cpp +1 -1
  176. esphome/config_validation.py +15 -11
  177. esphome/const.py +11 -1
  178. esphome/core/component.cpp +1 -1
  179. esphome/core/config.py +1 -2
  180. esphome/core/defines.h +3 -1
  181. esphome/core/helpers.cpp +20 -2
  182. esphome/core/helpers.h +10 -1
  183. esphome/core/optional.h +2 -2
  184. esphome/core/time.cpp +19 -15
  185. esphome/core/time.h +1 -3
  186. esphome/dashboard/web_server.py +6 -0
  187. {esphome-2024.11.2.dist-info → esphome-2024.12.0.dist-info}/METADATA +4 -4
  188. {esphome-2024.11.2.dist-info → esphome-2024.12.0.dist-info}/RECORD +192 -162
  189. {esphome-2024.11.2.dist-info → esphome-2024.12.0.dist-info}/LICENSE +0 -0
  190. {esphome-2024.11.2.dist-info → esphome-2024.12.0.dist-info}/WHEEL +0 -0
  191. {esphome-2024.11.2.dist-info → esphome-2024.12.0.dist-info}/entry_points.txt +0 -0
  192. {esphome-2024.11.2.dist-info → esphome-2024.12.0.dist-info}/top_level.txt +0 -0
@@ -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:
@@ -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...");
@@ -188,12 +191,20 @@ bool ESP32BLE::ble_setup_() {
188
191
  }
189
192
  }
190
193
 
191
- std::string name = App.get_name();
192
- if (name.length() > 20) {
194
+ std::string name;
195
+ if (this->name_.has_value()) {
196
+ name = this->name_.value();
193
197
  if (App.is_name_add_mac_suffix_enabled()) {
194
- name.erase(name.begin() + 13, name.end() - 7); // Remove characters between 13 and the mac address
195
- } else {
196
- name = name.substr(0, 20);
198
+ name += "-" + get_mac_address().substr(6);
199
+ }
200
+ } else {
201
+ name = App.get_name();
202
+ if (name.length() > 20) {
203
+ if (App.is_name_add_mac_suffix_enabled()) {
204
+ name.erase(name.begin() + 13, name.end() - 7); // Remove characters between 13 and the mac address
205
+ } else {
206
+ name = name.substr(0, 20);
207
+ }
197
208
  }
198
209
  }
199
210
 
@@ -314,7 +325,8 @@ void ESP32BLE::loop() {
314
325
  default:
315
326
  break;
316
327
  }
317
- delete ble_event; // NOLINT(cppcoreguidelines-owning-memory)
328
+ ble_event->~BLEEvent();
329
+ EVENT_ALLOCATOR.deallocate(ble_event, 1);
318
330
  ble_event = this->ble_events_.pop();
319
331
  }
320
332
  if (this->advertising_ != nullptr) {
@@ -323,9 +335,14 @@ void ESP32BLE::loop() {
323
335
  }
324
336
 
325
337
  void ESP32BLE::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) {
326
- 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);
327
344
  global_ble->ble_events_.push(new_event);
328
- } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
345
+ } // NOLINT(clang-analyzer-unix.Malloc)
329
346
 
330
347
  void ESP32BLE::real_gap_event_handler_(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) {
331
348
  ESP_LOGV(TAG, "(BLE) gap_event_handler - %d", event);
@@ -336,9 +353,14 @@ void ESP32BLE::real_gap_event_handler_(esp_gap_ble_cb_event_t event, esp_ble_gap
336
353
 
337
354
  void ESP32BLE::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if,
338
355
  esp_ble_gatts_cb_param_t *param) {
339
- 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);
340
362
  global_ble->ble_events_.push(new_event);
341
- } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
363
+ } // NOLINT(clang-analyzer-unix.Malloc)
342
364
 
343
365
  void ESP32BLE::real_gatts_event_handler_(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if,
344
366
  esp_ble_gatts_cb_param_t *param) {
@@ -350,9 +372,14 @@ void ESP32BLE::real_gatts_event_handler_(esp_gatts_cb_event_t event, esp_gatt_if
350
372
 
351
373
  void ESP32BLE::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
352
374
  esp_ble_gattc_cb_param_t *param) {
353
- 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);
354
381
  global_ble->ble_events_.push(new_event);
355
- } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
382
+ } // NOLINT(clang-analyzer-unix.Malloc)
356
383
 
357
384
  void ESP32BLE::real_gattc_event_handler_(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
358
385
  esp_ble_gattc_cb_param_t *param) {
@@ -90,6 +90,7 @@ class ESP32BLE : public Component {
90
90
  void loop() override;
91
91
  void dump_config() override;
92
92
  float get_setup_priority() const override;
93
+ void set_name(const std::string &name) { this->name_ = name; }
93
94
 
94
95
  void advertising_start();
95
96
  void advertising_set_service_data(const std::vector<uint8_t> &data);
@@ -131,6 +132,7 @@ class ESP32BLE : public Component {
131
132
  esp_ble_io_cap_t io_cap_{ESP_IO_CAP_NONE};
132
133
  uint32_t advertising_cycle_time_;
133
134
  bool enable_on_boot_;
135
+ optional<std::string> name_;
134
136
  };
135
137
 
136
138
  // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
@@ -83,7 +83,7 @@ esp_err_t BLEAdvertising::services_advertisement_() {
83
83
  esp_err_t err;
84
84
 
85
85
  this->advertising_data_.set_scan_rsp = false;
86
- this->advertising_data_.include_name = !this->scan_response_;
86
+ this->advertising_data_.include_name = true;
87
87
  this->advertising_data_.include_txpower = !this->scan_response_;
88
88
  err = esp_ble_gap_config_adv_data(&this->advertising_data_);
89
89
  if (err != ESP_OK) {