esphome 2025.5.2__py3-none-any.whl → 2025.6.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 (715) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +712 -358
  29. esphome/components/api/api_connection.h +343 -284
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +2 -0
  33. esphome/components/api/api_pb2.h +637 -1
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -2
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +4 -3
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -14
  67. esphome/components/bme280_base/bme280_base.cpp +3 -3
  68. esphome/components/bme680/bme680.cpp +3 -3
  69. esphome/components/bme680/sensor.py +2 -2
  70. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  71. esphome/components/bme680_bsec/sensor.py +7 -3
  72. esphome/components/bme68x_bsec2/__init__.py +6 -5
  73. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  74. esphome/components/bme68x_bsec2/sensor.py +4 -4
  75. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  76. esphome/components/bmi160/bmi160.cpp +11 -11
  77. esphome/components/bmp085/bmp085.cpp +2 -2
  78. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  79. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  80. esphome/components/bmp581/bmp581.cpp +33 -27
  81. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  82. esphome/components/bp5758d/bp5758d.cpp +1 -1
  83. esphome/components/button/__init__.py +1 -0
  84. esphome/components/canbus/canbus.cpp +1 -1
  85. esphome/components/cap1188/cap1188.cpp +6 -4
  86. esphome/components/captive_portal/captive_portal.cpp +1 -1
  87. esphome/components/ccs811/ccs811.cpp +3 -2
  88. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  89. esphome/components/ch422g/ch422g.cpp +2 -2
  90. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  91. esphome/components/climate/__init__.py +1 -0
  92. esphome/components/climate/climate.cpp +12 -7
  93. esphome/components/climate/climate.h +1 -1
  94. esphome/components/climate_ir/climate_ir.cpp +7 -4
  95. esphome/components/cm1106/__init__.py +1 -0
  96. esphome/components/cm1106/cm1106.cpp +112 -0
  97. esphome/components/cm1106/cm1106.h +40 -0
  98. esphome/components/cm1106/sensor.py +72 -0
  99. esphome/components/const/__init__.py +1 -0
  100. esphome/components/cover/__init__.py +1 -0
  101. esphome/components/cs5460a/cs5460a.cpp +16 -11
  102. esphome/components/cse7761/cse7761.cpp +2 -2
  103. esphome/components/cse7766/cse7766.cpp +0 -5
  104. esphome/components/cse7766/cse7766.h +5 -1
  105. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  106. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  107. esphome/components/current_based/current_based_cover.cpp +4 -2
  108. esphome/components/dac7678/dac7678_output.cpp +4 -4
  109. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  110. esphome/components/daly_bms/daly_bms.cpp +2 -1
  111. esphome/components/dashboard_import/__init__.py +1 -2
  112. esphome/components/datetime/__init__.py +3 -1
  113. esphome/components/debug/debug_component.cpp +1 -1
  114. esphome/components/debug/debug_component.h +1 -1
  115. esphome/components/debug/debug_esp32.cpp +4 -2
  116. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  117. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  118. esphome/components/demo/__init__.py +206 -0
  119. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  120. esphome/components/demo/demo_button.h +15 -0
  121. esphome/components/demo/demo_date.h +34 -0
  122. esphome/components/demo/demo_datetime.h +40 -0
  123. esphome/components/demo/demo_lock.h +17 -0
  124. esphome/components/demo/demo_select.h +15 -0
  125. esphome/components/demo/demo_text.h +18 -0
  126. esphome/components/demo/demo_time.h +34 -0
  127. esphome/components/demo/demo_valve.h +54 -0
  128. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  129. esphome/components/dht/dht.cpp +29 -50
  130. esphome/components/dht12/dht12.cpp +2 -2
  131. esphome/components/display/display.h +5 -3
  132. esphome/components/dps310/dps310.cpp +7 -5
  133. esphome/components/ds1307/ds1307.cpp +2 -2
  134. esphome/components/dsmr/dsmr.cpp +5 -3
  135. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  136. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  137. esphome/components/ee895/ee895.cpp +3 -3
  138. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  139. esphome/components/emc2101/emc2101.cpp +11 -9
  140. esphome/components/ens160_base/ens160_base.cpp +2 -2
  141. esphome/components/ens210/ens210.cpp +2 -2
  142. esphome/components/es7210/es7210.cpp +6 -4
  143. esphome/components/es7243e/es7243e.cpp +1 -1
  144. esphome/components/es8156/es8156.cpp +1 -1
  145. esphome/components/es8311/es8311.cpp +8 -6
  146. esphome/components/es8388/__init__.py +0 -0
  147. esphome/components/es8388/audio_dac.py +26 -0
  148. esphome/components/es8388/es8388.cpp +289 -0
  149. esphome/components/es8388/es8388.h +81 -0
  150. esphome/components/es8388/es8388_const.h +83 -0
  151. esphome/components/es8388/select/__init__.py +47 -0
  152. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  153. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  154. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  155. esphome/components/es8388/select/dac_output_select.h +15 -0
  156. esphome/components/esp32/__init__.py +88 -20
  157. esphome/components/esp32/boards.py +208 -125
  158. esphome/components/esp32/const.py +6 -0
  159. esphome/components/esp32/gpio.py +14 -1
  160. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  161. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  162. esphome/components/esp32/preferences.cpp +7 -7
  163. esphome/components/esp32_ble/__init__.py +115 -0
  164. esphome/components/esp32_ble/ble.cpp +11 -9
  165. esphome/components/esp32_ble/ble_uuid.h +1 -1
  166. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  167. esphome/components/esp32_ble_server/__init__.py +4 -1
  168. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  169. esphome/components/esp32_ble_server/ble_server.h +0 -1
  170. esphome/components/esp32_ble_tracker/__init__.py +6 -2
  171. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
  172. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  173. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  174. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  175. esphome/components/esp32_improv/__init__.py +5 -1
  176. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  177. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  178. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  179. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  180. esphome/components/esp8266/preferences.cpp +6 -6
  181. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  182. esphome/components/esp_ldo/__init__.py +91 -0
  183. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  184. esphome/components/esp_ldo/esp_ldo.h +43 -0
  185. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  186. esphome/components/ethernet/ethernet_component.cpp +38 -26
  187. esphome/components/ethernet/ethernet_component.h +1 -1
  188. esphome/components/event/__init__.py +1 -0
  189. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  190. esphome/components/ezo/ezo.cpp +1 -1
  191. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  192. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  193. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  194. esphome/components/fan/__init__.py +1 -0
  195. esphome/components/fan/fan.cpp +4 -2
  196. esphome/components/fastled_base/fastled_light.cpp +7 -5
  197. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  198. esphome/components/fs3000/fs3000.cpp +1 -1
  199. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  200. esphome/components/ft63x6/ft63x6.cpp +5 -3
  201. esphome/components/gcja5/gcja5.cpp +0 -12
  202. esphome/components/gcja5/gcja5.h +8 -3
  203. esphome/components/gdk101/gdk101.cpp +2 -2
  204. esphome/components/globals/globals_component.h +13 -10
  205. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  206. esphome/components/gp8403/gp8403.cpp +4 -2
  207. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  208. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  209. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  210. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  211. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  212. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  213. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  215. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  216. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  217. esphome/components/haier/haier_base.cpp +2 -2
  218. esphome/components/haier/hon_climate.cpp +13 -6
  219. esphome/components/havells_solar/havells_solar.cpp +5 -2
  220. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  221. esphome/components/hdc1080/hdc1080.cpp +2 -2
  222. esphome/components/he60r/he60r.cpp +4 -2
  223. esphome/components/hlw8012/hlw8012.cpp +6 -4
  224. esphome/components/hm3301/hm3301.cpp +2 -2
  225. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  226. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  227. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  228. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  229. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  230. esphome/components/hte501/hte501.cpp +3 -2
  231. esphome/components/http_request/__init__.py +2 -2
  232. esphome/components/http_request/http_request.cpp +7 -5
  233. esphome/components/http_request/http_request_idf.cpp +4 -2
  234. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  235. esphome/components/htu21d/htu21d.cpp +2 -2
  236. esphome/components/htu31d/htu31d.cpp +2 -2
  237. esphome/components/hx711/hx711.cpp +2 -2
  238. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  239. esphome/components/hyt271/hyt271.cpp +2 -2
  240. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  241. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  242. esphome/components/i2s_audio/__init__.py +2 -0
  243. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  244. esphome/components/i2s_audio/i2s_audio.h +1 -1
  245. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  246. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  247. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +1 -1
  248. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  249. esphome/components/iaqcore/iaqcore.cpp +3 -3
  250. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  251. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  252. esphome/components/image/image.cpp +1 -0
  253. esphome/components/ina219/ina219.cpp +2 -2
  254. esphome/components/ina226/ina226.cpp +8 -5
  255. esphome/components/ina260/ina260.cpp +1 -1
  256. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  257. esphome/components/ina3221/ina3221.cpp +2 -2
  258. esphome/components/inkplate6/display.py +12 -2
  259. esphome/components/inkplate6/inkplate.cpp +13 -9
  260. esphome/components/inkplate6/inkplate.h +7 -6
  261. esphome/components/integration/integration_sensor.cpp +1 -1
  262. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  263. esphome/components/json/json_util.cpp +4 -5
  264. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  265. esphome/components/key_collector/key_collector.cpp +4 -2
  266. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  267. esphome/components/kuntze/kuntze.cpp +4 -2
  268. esphome/components/lc709203f/__init__.py +1 -0
  269. esphome/components/lc709203f/lc709203f.cpp +299 -0
  270. esphome/components/lc709203f/lc709203f.h +55 -0
  271. esphome/components/lc709203f/sensor.py +93 -0
  272. esphome/components/lcd_base/lcd_display.cpp +2 -2
  273. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  274. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  275. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  276. esphome/components/ld2410/ld2410.cpp +6 -7
  277. esphome/components/ld2420/ld2420.cpp +9 -7
  278. esphome/components/ld2450/ld2450.cpp +6 -4
  279. esphome/components/ld2450/sensor.py +2 -2
  280. esphome/components/ledc/ledc_output.cpp +32 -28
  281. esphome/components/libretiny/const.py +1 -1
  282. esphome/components/libretiny/preferences.cpp +6 -7
  283. esphome/components/light/__init__.py +2 -1
  284. esphome/components/light/esp_hsv_color.h +1 -1
  285. esphome/components/light/light_state.cpp +9 -5
  286. esphome/components/light/light_transformer.h +1 -1
  287. esphome/components/lightwaverf/LwTx.cpp +1 -1
  288. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  289. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  290. esphome/components/lock/__init__.py +1 -0
  291. esphome/components/lock/lock.h +1 -1
  292. esphome/components/logger/__init__.py +6 -0
  293. esphome/components/logger/logger.cpp +9 -5
  294. esphome/components/logger/logger_esp32.cpp +5 -5
  295. esphome/components/ltr390/ltr390.cpp +8 -5
  296. esphome/components/ltr501/ltr501.cpp +19 -14
  297. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  298. esphome/components/lvgl/__init__.py +2 -2
  299. esphome/components/lvgl/automation.py +5 -4
  300. esphome/components/lvgl/defines.py +0 -2
  301. esphome/components/lvgl/lv_validation.py +1 -3
  302. esphome/components/lvgl/lvcode.py +7 -8
  303. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  304. esphome/components/lvgl/schemas.py +22 -23
  305. esphome/components/lvgl/trigger.py +8 -3
  306. esphome/components/lvgl/widgets/__init__.py +2 -2
  307. esphome/components/lvgl/widgets/canvas.py +9 -3
  308. esphome/components/lvgl/widgets/line.py +2 -1
  309. esphome/components/lvgl/widgets/tabview.py +7 -0
  310. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  311. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  312. esphome/components/max17043/max17043.cpp +2 -2
  313. esphome/components/max31855/max31855.cpp +2 -1
  314. esphome/components/max31856/max31856.cpp +9 -11
  315. esphome/components/max31865/max31865.cpp +6 -4
  316. esphome/components/max44009/max44009.cpp +2 -2
  317. esphome/components/max6675/max6675.cpp +1 -1
  318. esphome/components/max6956/max6956.cpp +5 -3
  319. esphome/components/max7219/max7219.cpp +8 -6
  320. esphome/components/max7219digit/automation.h +52 -0
  321. esphome/components/max7219digit/display.py +93 -1
  322. esphome/components/max7219digit/max7219digit.cpp +16 -13
  323. esphome/components/max9611/max9611.cpp +9 -6
  324. esphome/components/mcp23008/mcp23008.cpp +1 -1
  325. esphome/components/mcp23016/mcp23016.cpp +1 -1
  326. esphome/components/mcp23017/mcp23017.cpp +1 -1
  327. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  328. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  329. esphome/components/mcp3008/mcp3008.cpp +1 -1
  330. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  331. esphome/components/mcp3204/mcp3204.cpp +1 -1
  332. esphome/components/mcp4461/mcp4461.cpp +2 -2
  333. esphome/components/mcp4725/mcp4725.cpp +2 -2
  334. esphome/components/mcp4728/mcp4728.cpp +2 -2
  335. esphome/components/mcp9600/mcp9600.cpp +1 -1
  336. esphome/components/mcp9808/mcp9808.cpp +4 -4
  337. esphome/components/mdns/mdns_component.cpp +8 -2
  338. esphome/components/mdns/mdns_component.h +3 -1
  339. esphome/components/mdns/mdns_esp32.cpp +2 -2
  340. esphome/components/media_player/__init__.py +1 -0
  341. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  342. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  343. esphome/components/micronova/micronova.h +2 -2
  344. esphome/components/mics_4514/mics_4514.cpp +2 -2
  345. esphome/components/midea/air_conditioner.cpp +7 -5
  346. esphome/components/midea_ir/midea_ir.cpp +1 -1
  347. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  348. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  349. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  350. esphome/components/mlx90614/mlx90614.cpp +4 -3
  351. esphome/components/mmc5603/mmc5603.cpp +2 -2
  352. esphome/components/mmc5983/mmc5983.cpp +1 -1
  353. esphome/components/modbus/modbus.cpp +7 -5
  354. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  355. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  356. esphome/components/modbus_controller/switch/__init__.py +6 -2
  357. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  358. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  359. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  360. esphome/components/mpr121/mpr121.cpp +2 -2
  361. esphome/components/mpu6050/mpu6050.cpp +6 -6
  362. esphome/components/mpu6886/mpu6886.cpp +6 -6
  363. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  364. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  365. esphome/components/mqtt/mqtt_client.cpp +31 -24
  366. esphome/components/mqtt/mqtt_component.cpp +2 -2
  367. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  368. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  369. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  370. esphome/components/ms5611/ms5611.cpp +2 -2
  371. esphome/components/ms8607/ms8607.cpp +2 -2
  372. esphome/components/msa3xx/msa3xx.cpp +16 -12
  373. esphome/components/my9231/my9231.cpp +7 -5
  374. esphome/components/nau7802/nau7802.cpp +6 -4
  375. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  376. esphome/components/network/ip_address.h +1 -1
  377. esphome/components/network/util.cpp +13 -0
  378. esphome/components/nextion/base_component.py +2 -0
  379. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  380. esphome/components/nextion/display.py +34 -22
  381. esphome/components/nextion/nextion.cpp +182 -143
  382. esphome/components/nextion/nextion.h +36 -0
  383. esphome/components/nextion/nextion_commands.cpp +3 -3
  384. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  385. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  386. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  387. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  388. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  389. esphome/components/nfc/nci_message.h +1 -1
  390. esphome/components/nfc/ndef_record.h +1 -1
  391. esphome/components/nfc/ndef_record_text.h +1 -1
  392. esphome/components/nfc/ndef_record_uri.h +1 -1
  393. esphome/components/nfc/nfc.h +1 -1
  394. esphome/components/nfc/nfc_tag.h +1 -1
  395. esphome/components/noblex/noblex.cpp +1 -1
  396. esphome/components/npi19/npi19.cpp +5 -7
  397. esphome/components/number/__init__.py +11 -0
  398. esphome/components/online_image/__init__.py +13 -1
  399. esphome/components/online_image/online_image.cpp +26 -4
  400. esphome/components/online_image/online_image.h +21 -4
  401. esphome/components/opentherm/generate.py +3 -3
  402. esphome/components/opentherm/hub.cpp +11 -7
  403. esphome/components/opentherm/number/number.cpp +5 -3
  404. esphome/components/opentherm/opentherm.h +1 -1
  405. esphome/components/opentherm/schema.py +13 -13
  406. esphome/components/opentherm/validate.py +1 -1
  407. esphome/components/openthread/__init__.py +146 -0
  408. esphome/components/openthread/const.py +10 -0
  409. esphome/components/openthread/openthread.cpp +206 -0
  410. esphome/components/openthread/openthread.h +68 -0
  411. esphome/components/openthread/openthread_esp.cpp +164 -0
  412. esphome/components/openthread/tlv.py +58 -0
  413. esphome/components/openthread_info/__init__.py +0 -0
  414. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  415. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  416. esphome/components/openthread_info/text_sensor.py +105 -0
  417. esphome/components/output/float_output.cpp +1 -1
  418. esphome/components/output/switch/output_switch.cpp +1 -1
  419. esphome/components/packet_transport/packet_transport.cpp +6 -4
  420. esphome/components/pca6416a/pca6416a.cpp +2 -2
  421. esphome/components/pca9554/pca9554.cpp +6 -4
  422. esphome/components/pca9685/pca9685_output.cpp +12 -8
  423. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  424. esphome/components/pcf85063/pcf85063.cpp +2 -2
  425. esphome/components/pcf8563/pcf8563.cpp +2 -2
  426. esphome/components/pcf8574/pcf8574.cpp +2 -2
  427. esphome/components/pid/pid_climate.cpp +8 -5
  428. esphome/components/pid/pid_climate.h +1 -1
  429. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  430. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  431. esphome/components/pipsolar/pipsolar.cpp +3 -3
  432. esphome/components/pm1006/pm1006.cpp +3 -7
  433. esphome/components/pm1006/pm1006.h +4 -1
  434. esphome/components/pm2005/pm2005.cpp +12 -13
  435. esphome/components/pm2005/sensor.py +1 -1
  436. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  437. esphome/components/pmsx003/pmsx003.cpp +0 -4
  438. esphome/components/pmsx003/pmsx003.h +5 -2
  439. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  440. esphome/components/pmwcs3/pmwcs3.h +0 -1
  441. esphome/components/pn532/pn532.cpp +7 -7
  442. esphome/components/pn532/pn532.h +1 -1
  443. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  444. esphome/components/pn7150/pn7150.cpp +4 -4
  445. esphome/components/pn7160/pn7160.cpp +4 -4
  446. esphome/components/power_supply/power_supply.cpp +6 -4
  447. esphome/components/power_supply/power_supply.h +1 -1
  448. esphome/components/psram/__init__.py +59 -35
  449. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  450. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  451. esphome/components/pylontech/pylontech.cpp +2 -2
  452. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  453. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  454. esphome/components/pzemac/pzemac.cpp +4 -2
  455. esphome/components/pzemdc/pzemdc.cpp +4 -2
  456. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  457. esphome/components/qmp6988/qmp6988.cpp +2 -2
  458. esphome/components/qmp6988/qmp6988.h +1 -1
  459. esphome/components/qr_code/qr_code.cpp +5 -3
  460. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  461. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  462. esphome/components/rc522/rc522.cpp +5 -5
  463. esphome/components/rdm6300/rdm6300.cpp +1 -0
  464. esphome/components/remote_receiver/__init__.py +10 -2
  465. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  466. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  467. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  468. esphome/components/remote_transmitter/__init__.py +10 -2
  469. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  470. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  471. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  472. esphome/components/resistance/resistance_sensor.cpp +6 -3
  473. esphome/components/restart/button/restart_button.cpp +1 -1
  474. esphome/components/restart/switch/restart_switch.cpp +1 -1
  475. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  476. esphome/components/rp2040/__init__.py +7 -0
  477. esphome/components/rp2040/core.cpp +8 -1
  478. esphome/components/rp2040/preferences.cpp +3 -3
  479. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  480. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  481. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  482. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  483. esphome/components/rtttl/rtttl.cpp +11 -9
  484. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  485. esphome/components/safe_mode/safe_mode.cpp +9 -8
  486. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  487. esphome/components/scd30/scd30.cpp +11 -8
  488. esphome/components/scd4x/scd4x.cpp +12 -8
  489. esphome/components/sdl/display.py +40 -0
  490. esphome/components/sdl/sdl_esphome.cpp +2 -2
  491. esphome/components/sdl/sdl_esphome.h +8 -0
  492. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  493. esphome/components/sdp3x/sdp3x.cpp +11 -11
  494. esphome/components/sds011/sds011.cpp +5 -6
  495. esphome/components/sds011/sds011.h +4 -1
  496. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  497. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  498. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  499. esphome/components/selec_meter/selec_meter.cpp +5 -2
  500. esphome/components/select/__init__.py +1 -0
  501. esphome/components/sen0321/sen0321.cpp +2 -2
  502. esphome/components/sen21231/sen21231.cpp +1 -1
  503. esphome/components/sen5x/sen5x.cpp +10 -7
  504. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  505. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  506. esphome/components/sensor/__init__.py +11 -1
  507. esphome/components/sensor/filter.h +1 -1
  508. esphome/components/sensor/sensor.h +9 -5
  509. esphome/components/servo/servo.cpp +12 -9
  510. esphome/components/servo/servo.h +1 -1
  511. esphome/components/sfa30/sfa30.cpp +1 -1
  512. esphome/components/sgp30/sgp30.cpp +10 -8
  513. esphome/components/sgp4x/sgp4x.cpp +49 -61
  514. esphome/components/sgp4x/sgp4x.h +0 -1
  515. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  516. esphome/components/sht3xd/sht3xd.cpp +1 -1
  517. esphome/components/sht4x/sht4x.cpp +2 -2
  518. esphome/components/shtcx/shtcx.cpp +13 -16
  519. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  520. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  521. esphome/components/sim800l/sim800l.cpp +2 -2
  522. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  523. esphome/components/sm16716/sm16716.cpp +1 -1
  524. esphome/components/sm2135/sm2135.cpp +1 -1
  525. esphome/components/sm2235/sm2235.cpp +5 -3
  526. esphome/components/sm2335/sm2335.cpp +5 -3
  527. esphome/components/sml/sml.cpp +1 -1
  528. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  529. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  530. esphome/components/sntp/sntp_component.cpp +1 -1
  531. esphome/components/socket/__init__.py +2 -0
  532. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  533. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  534. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  535. esphome/components/socket/socket.cpp +31 -0
  536. esphome/components/socket/socket.h +27 -1
  537. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  538. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  539. esphome/components/sound_level/sound_level.cpp +4 -2
  540. esphome/components/speaker/media_player/__init__.py +3 -0
  541. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  542. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  543. esphome/components/spi/__init__.py +10 -2
  544. esphome/components/spi/spi.cpp +4 -4
  545. esphome/components/spi_device/spi_device.cpp +1 -2
  546. esphome/components/sprinkler/sprinkler.cpp +9 -6
  547. esphome/components/sps30/sps30.cpp +16 -15
  548. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  549. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  550. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  551. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  552. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  553. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  554. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  555. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  556. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  557. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  558. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  559. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  560. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  561. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  562. esphome/components/st7567_base/st7567_base.cpp +3 -3
  563. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  564. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  565. esphome/components/st7701s/st7701s.cpp +4 -2
  566. esphome/components/st7735/st7735.cpp +3 -3
  567. esphome/components/st7789v/st7789v.cpp +10 -7
  568. esphome/components/st7920/st7920.cpp +6 -4
  569. esphome/components/statsd/statsd.cpp +9 -5
  570. esphome/components/status_led/light/status_led_light.cpp +1 -1
  571. esphome/components/status_led/status_led.cpp +1 -1
  572. esphome/components/stepper/stepper.h +5 -3
  573. esphome/components/sts3x/sts3x.cpp +2 -2
  574. esphome/components/switch/__init__.py +1 -0
  575. esphome/components/switch/switch.cpp +18 -12
  576. esphome/components/switch/switch.h +1 -1
  577. esphome/components/sx1509/__init__.py +53 -20
  578. esphome/components/sx1509/sx1509.cpp +29 -5
  579. esphome/components/sx1509/sx1509.h +9 -1
  580. esphome/components/t6615/t6615.cpp +1 -0
  581. esphome/components/tc74/tc74.cpp +1 -1
  582. esphome/components/tca9548a/tca9548a.cpp +1 -1
  583. esphome/components/tca9555/tca9555.cpp +2 -2
  584. esphome/components/tcs34725/tcs34725.cpp +4 -4
  585. esphome/components/tee501/tee501.cpp +3 -2
  586. esphome/components/tem3200/tem3200.cpp +5 -6
  587. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  588. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  589. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  590. esphome/components/template/cover/template_cover.cpp +1 -1
  591. esphome/components/template/select/template_select.cpp +6 -4
  592. esphome/components/template/text/template_text.cpp +2 -3
  593. esphome/components/template/valve/template_valve.cpp +5 -3
  594. esphome/components/text/__init__.py +10 -11
  595. esphome/components/text_sensor/__init__.py +1 -0
  596. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  597. esphome/components/time/__init__.py +1 -2
  598. esphome/components/time_based/time_based_cover.cpp +4 -2
  599. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  600. esphome/components/tm1621/tm1621.cpp +3 -3
  601. esphome/components/tm1637/tm1637.cpp +9 -7
  602. esphome/components/tm1638/tm1638.cpp +7 -5
  603. esphome/components/tm1651/tm1651.cpp +2 -2
  604. esphome/components/tmp102/tmp102.cpp +1 -3
  605. esphome/components/tmp102/tmp102.h +0 -3
  606. esphome/components/tmp1075/tmp1075.cpp +12 -9
  607. esphome/components/tmp117/tmp117.cpp +2 -2
  608. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  609. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  610. esphome/components/tsl2561/tsl2561.cpp +7 -5
  611. esphome/components/tsl2591/tsl2591.cpp +25 -27
  612. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  613. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  614. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  615. esphome/components/tuya/select/tuya_select.cpp +5 -3
  616. esphome/components/tx20/tx20.cpp +3 -3
  617. esphome/components/uart/__init__.py +4 -5
  618. esphome/components/uart/button/uart_button.cpp +1 -1
  619. esphome/components/uart/switch/uart_switch.cpp +2 -2
  620. esphome/components/uart/uart.cpp +2 -2
  621. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  622. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  623. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  624. esphome/components/uart/uart_component_host.cpp +11 -8
  625. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  626. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  627. esphome/components/udp/udp_component.cpp +9 -5
  628. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  629. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  630. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  631. esphome/components/update/__init__.py +1 -0
  632. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  633. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  634. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  635. esphome/components/usb_host/__init__.py +64 -0
  636. esphome/components/usb_host/usb_host.h +116 -0
  637. esphome/components/usb_host/usb_host_client.cpp +394 -0
  638. esphome/components/usb_host/usb_host_component.cpp +35 -0
  639. esphome/components/usb_uart/__init__.py +134 -0
  640. esphome/components/usb_uart/ch34x.cpp +80 -0
  641. esphome/components/usb_uart/cp210x.cpp +126 -0
  642. esphome/components/usb_uart/usb_uart.cpp +328 -0
  643. esphome/components/usb_uart/usb_uart.h +151 -0
  644. esphome/components/valve/__init__.py +1 -0
  645. esphome/components/veml3235/veml3235.cpp +13 -9
  646. esphome/components/veml7700/veml7700.cpp +10 -6
  647. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  648. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  649. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  650. esphome/components/web_server/server_index_v2.h +632 -630
  651. esphome/components/web_server/server_index_v3.h +411 -409
  652. esphome/components/web_server/web_server.cpp +5 -3
  653. esphome/components/web_server_base/web_server_base.cpp +1 -1
  654. esphome/components/web_server_idf/utils.cpp +1 -1
  655. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  656. esphome/components/weikai/__init__.py +2 -0
  657. esphome/components/weikai/weikai.cpp +23 -21
  658. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  659. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  660. esphome/components/wiegand/wiegand.cpp +1 -1
  661. esphome/components/wifi/wifi_component.cpp +50 -37
  662. esphome/components/wifi/wifi_component.h +7 -4
  663. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  664. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  665. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  666. esphome/components/wireguard/wireguard.cpp +21 -21
  667. esphome/components/wl_134/text_sensor.py +1 -2
  668. esphome/components/wled/wled_light_effect.cpp +1 -1
  669. esphome/components/x9c/x9c.cpp +5 -3
  670. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  671. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  672. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  673. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  674. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  675. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  676. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  677. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  678. esphome/components/xl9535/xl9535.cpp +2 -2
  679. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  680. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  681. esphome/config.py +3 -2
  682. esphome/config_validation.py +46 -17
  683. esphome/const.py +10 -1
  684. esphome/core/__init__.py +37 -18
  685. esphome/core/application.cpp +188 -5
  686. esphome/core/application.h +110 -0
  687. esphome/core/component.h +13 -0
  688. esphome/core/config.py +12 -0
  689. esphome/core/defines.h +10 -2
  690. esphome/core/helpers.cpp +1 -1
  691. esphome/core/helpers.h +4 -4
  692. esphome/core/log.h +2 -0
  693. esphome/core/log_const_en.h +4 -0
  694. esphome/core/scheduler.cpp +2 -2
  695. esphome/coroutine.py +3 -4
  696. esphome/cpp_generator.py +32 -32
  697. esphome/dashboard/core.py +2 -2
  698. esphome/dashboard/web_server.py +2 -2
  699. esphome/git.py +4 -4
  700. esphome/helpers.py +5 -6
  701. esphome/loader.py +8 -7
  702. esphome/log.py +7 -1
  703. esphome/platformio_api.py +2 -3
  704. esphome/storage_json.py +13 -5
  705. esphome/types.py +12 -13
  706. esphome/util.py +1 -2
  707. esphome/writer.py +5 -3
  708. esphome/yaml_util.py +6 -1
  709. esphome/zeroconf.py +1 -1
  710. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  711. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +715 -662
  712. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  713. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  714. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  715. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,7 @@
1
+ from collections.abc import Callable
1
2
  from dataclasses import dataclass
2
3
  import logging
3
- from typing import Any, Callable
4
+ from typing import Any
4
5
 
5
6
  from esphome import pins
6
7
  import esphome.codegen as cg
@@ -26,8 +27,10 @@ from .const import (
26
27
  VARIANT_ESP32,
27
28
  VARIANT_ESP32C2,
28
29
  VARIANT_ESP32C3,
30
+ VARIANT_ESP32C5,
29
31
  VARIANT_ESP32C6,
30
32
  VARIANT_ESP32H2,
33
+ VARIANT_ESP32P4,
31
34
  VARIANT_ESP32S2,
32
35
  VARIANT_ESP32S3,
33
36
  esp32_ns,
@@ -35,8 +38,10 @@ from .const import (
35
38
  from .gpio_esp32 import esp32_validate_gpio_pin, esp32_validate_supports
36
39
  from .gpio_esp32_c2 import esp32_c2_validate_gpio_pin, esp32_c2_validate_supports
37
40
  from .gpio_esp32_c3 import esp32_c3_validate_gpio_pin, esp32_c3_validate_supports
41
+ from .gpio_esp32_c5 import esp32_c5_validate_gpio_pin, esp32_c5_validate_supports
38
42
  from .gpio_esp32_c6 import esp32_c6_validate_gpio_pin, esp32_c6_validate_supports
39
43
  from .gpio_esp32_h2 import esp32_h2_validate_gpio_pin, esp32_h2_validate_supports
44
+ from .gpio_esp32_p4 import esp32_p4_validate_gpio_pin, esp32_p4_validate_supports
40
45
  from .gpio_esp32_s2 import esp32_s2_validate_gpio_pin, esp32_s2_validate_supports
41
46
  from .gpio_esp32_s3 import esp32_s3_validate_gpio_pin, esp32_s3_validate_supports
42
47
 
@@ -97,6 +102,10 @@ _esp32_validations = {
97
102
  pin_validation=esp32_c3_validate_gpio_pin,
98
103
  usage_validation=esp32_c3_validate_supports,
99
104
  ),
105
+ VARIANT_ESP32C5: ESP32ValidationFunctions(
106
+ pin_validation=esp32_c5_validate_gpio_pin,
107
+ usage_validation=esp32_c5_validate_supports,
108
+ ),
100
109
  VARIANT_ESP32C6: ESP32ValidationFunctions(
101
110
  pin_validation=esp32_c6_validate_gpio_pin,
102
111
  usage_validation=esp32_c6_validate_supports,
@@ -105,6 +114,10 @@ _esp32_validations = {
105
114
  pin_validation=esp32_h2_validate_gpio_pin,
106
115
  usage_validation=esp32_h2_validate_supports,
107
116
  ),
117
+ VARIANT_ESP32P4: ESP32ValidationFunctions(
118
+ pin_validation=esp32_p4_validate_gpio_pin,
119
+ usage_validation=esp32_p4_validate_supports,
120
+ ),
108
121
  VARIANT_ESP32S2: ESP32ValidationFunctions(
109
122
  pin_validation=esp32_s2_validate_gpio_pin,
110
123
  usage_validation=esp32_s2_validate_supports,
@@ -0,0 +1,45 @@
1
+ import logging
2
+
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_INPUT, CONF_MODE, CONF_NUMBER
5
+ from esphome.pins import check_strapping_pin
6
+
7
+ _ESP32C5_SPI_PSRAM_PINS = {
8
+ 16: "SPICS0",
9
+ 17: "SPIQ",
10
+ 18: "SPIWP",
11
+ 19: "VDD_SPI",
12
+ 20: "SPIHD",
13
+ 21: "SPICLK",
14
+ 22: "SPID",
15
+ }
16
+
17
+ _ESP32C5_STRAPPING_PINS = {2, 7, 27, 28}
18
+
19
+ _LOGGER = logging.getLogger(__name__)
20
+
21
+
22
+ def esp32_c5_validate_gpio_pin(value):
23
+ if value < 0 or value > 28:
24
+ raise cv.Invalid(f"Invalid pin number: {value} (must be 0-28)")
25
+ if value in _ESP32C5_SPI_PSRAM_PINS:
26
+ raise cv.Invalid(
27
+ f"This pin cannot be used on ESP32-C5s and is already used by the SPI/PSRAM interface (function: {_ESP32C5_SPI_PSRAM_PINS[value]})"
28
+ )
29
+
30
+ return value
31
+
32
+
33
+ def esp32_c5_validate_supports(value):
34
+ num = value[CONF_NUMBER]
35
+ mode = value[CONF_MODE]
36
+ is_input = mode[CONF_INPUT]
37
+
38
+ if num < 0 or num > 28:
39
+ raise cv.Invalid(f"Invalid pin number: {num} (must be 0-28)")
40
+ if is_input:
41
+ # All ESP32 pins support input mode
42
+ pass
43
+
44
+ check_strapping_pin(value, _ESP32C5_STRAPPING_PINS, _LOGGER)
45
+ return value
@@ -0,0 +1,43 @@
1
+ import logging
2
+
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_INPUT, CONF_MODE, CONF_NUMBER
5
+
6
+ _ESP32P4_USB_JTAG_PINS = {24, 25}
7
+
8
+ _ESP32P4_STRAPPING_PINS = {34, 35, 36, 37, 38}
9
+
10
+ _LOGGER = logging.getLogger(__name__)
11
+
12
+
13
+ def esp32_p4_validate_gpio_pin(value):
14
+ if value < 0 or value > 54:
15
+ raise cv.Invalid(f"Invalid pin number: {value} (must be 0-54)")
16
+ if value in _ESP32P4_STRAPPING_PINS:
17
+ _LOGGER.warning(
18
+ "GPIO%d is a Strapping PIN and should be avoided.\n"
19
+ "Attaching external pullup/down resistors to strapping pins can cause unexpected failures.\n"
20
+ "See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins",
21
+ value,
22
+ )
23
+ if value in _ESP32P4_USB_JTAG_PINS:
24
+ _LOGGER.warning(
25
+ "GPIO%d is reserved for the USB-Serial-JTAG interface.\n"
26
+ "To use this pin as GPIO, USB-Serial-JTAG will be disabled.",
27
+ value,
28
+ )
29
+
30
+ return value
31
+
32
+
33
+ def esp32_p4_validate_supports(value):
34
+ num = value[CONF_NUMBER]
35
+ mode = value[CONF_MODE]
36
+ is_input = mode[CONF_INPUT]
37
+
38
+ if num < 0 or num > 54:
39
+ raise cv.Invalid(f"Invalid pin number: {value} (must be 0-54)")
40
+ if is_input:
41
+ # All ESP32 pins support input mode
42
+ pass
43
+ return value
@@ -1,8 +1,8 @@
1
1
  #ifdef USE_ESP32
2
2
 
3
- #include "esphome/core/preferences.h"
4
3
  #include "esphome/core/helpers.h"
5
4
  #include "esphome/core/log.h"
5
+ #include "esphome/core/preferences.h"
6
6
  #include <nvs_flash.h>
7
7
  #include <cstring>
8
8
  #include <cinttypes>
@@ -84,7 +84,7 @@ class ESP32Preferences : public ESPPreferences {
84
84
  if (err == 0)
85
85
  return;
86
86
 
87
- ESP_LOGW(TAG, "nvs_open failed: %s - erasing NVS...", esp_err_to_name(err));
87
+ ESP_LOGW(TAG, "nvs_open failed: %s - erasing NVS", esp_err_to_name(err));
88
88
  nvs_flash_deinit();
89
89
  nvs_flash_erase();
90
90
  nvs_flash_init();
@@ -111,7 +111,7 @@ class ESP32Preferences : public ESPPreferences {
111
111
  if (s_pending_save.empty())
112
112
  return true;
113
113
 
114
- ESP_LOGD(TAG, "Saving %d preferences to flash...", s_pending_save.size());
114
+ ESP_LOGV(TAG, "Saving %d items...", s_pending_save.size());
115
115
  // goal try write all pending saves even if one fails
116
116
  int cached = 0, written = 0, failed = 0;
117
117
  esp_err_t last_err = ESP_OK;
@@ -139,10 +139,10 @@ class ESP32Preferences : public ESPPreferences {
139
139
  }
140
140
  s_pending_save.erase(s_pending_save.begin() + i);
141
141
  }
142
- ESP_LOGD(TAG, "Saving %d preferences to flash: %d cached, %d written, %d failed", cached + written + failed, cached,
143
- written, failed);
142
+ ESP_LOGD(TAG, "Writing %d items: %d cached, %d written, %d failed", cached + written + failed, cached, written,
143
+ failed);
144
144
  if (failed > 0) {
145
- ESP_LOGE(TAG, "Error saving %d preferences to flash. Last error=%s for key=%s", failed, esp_err_to_name(last_err),
145
+ ESP_LOGE(TAG, "Writing %d items failed. Last error=%s for key=%s", failed, esp_err_to_name(last_err),
146
146
  last_key.c_str());
147
147
  }
148
148
 
@@ -173,7 +173,7 @@ class ESP32Preferences : public ESPPreferences {
173
173
  }
174
174
 
175
175
  bool reset() override {
176
- ESP_LOGD(TAG, "Cleaning up preferences in flash...");
176
+ ESP_LOGD(TAG, "Erasing storage");
177
177
  s_pending_save.clear();
178
178
 
179
179
  nvs_flash_deinit();
@@ -1,3 +1,4 @@
1
+ from enum import Enum
1
2
  import re
2
3
 
3
4
  from esphome import automation
@@ -12,9 +13,110 @@ import esphome.final_validate as fv
12
13
  DEPENDENCIES = ["esp32"]
13
14
  CODEOWNERS = ["@jesserockz", "@Rapsssito"]
14
15
 
16
+
17
+ class BTLoggers(Enum):
18
+ """Bluetooth logger categories available in ESP-IDF.
19
+
20
+ Each logger controls debug output for a specific Bluetooth subsystem.
21
+ The value is the ESP-IDF sdkconfig option name for controlling the log level.
22
+ """
23
+
24
+ # Core Stack Layers
25
+ HCI = "CONFIG_BT_LOG_HCI_TRACE_LEVEL"
26
+ """Host Controller Interface - Low-level interface between host and controller"""
27
+
28
+ BTM = "CONFIG_BT_LOG_BTM_TRACE_LEVEL"
29
+ """Bluetooth Manager - Core device control, connections, and security"""
30
+
31
+ L2CAP = "CONFIG_BT_LOG_L2CAP_TRACE_LEVEL"
32
+ """Logical Link Control and Adaptation Protocol - Connection multiplexing"""
33
+
34
+ RFCOMM = "CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL"
35
+ """Serial port emulation over Bluetooth (Classic only)"""
36
+
37
+ SDP = "CONFIG_BT_LOG_SDP_TRACE_LEVEL"
38
+ """Service Discovery Protocol - Service discovery (Classic only)"""
39
+
40
+ GAP = "CONFIG_BT_LOG_GAP_TRACE_LEVEL"
41
+ """Generic Access Profile - Device discovery and connections"""
42
+
43
+ # Network Protocols
44
+ BNEP = "CONFIG_BT_LOG_BNEP_TRACE_LEVEL"
45
+ """Bluetooth Network Encapsulation Protocol - IP over Bluetooth"""
46
+
47
+ PAN = "CONFIG_BT_LOG_PAN_TRACE_LEVEL"
48
+ """Personal Area Networking - Ethernet over Bluetooth"""
49
+
50
+ # Audio/Video Profiles (Classic Bluetooth)
51
+ A2D = "CONFIG_BT_LOG_A2D_TRACE_LEVEL"
52
+ """Advanced Audio Distribution - A2DP audio streaming"""
53
+
54
+ AVDT = "CONFIG_BT_LOG_AVDT_TRACE_LEVEL"
55
+ """Audio/Video Distribution Transport - A2DP transport protocol"""
56
+
57
+ AVCT = "CONFIG_BT_LOG_AVCT_TRACE_LEVEL"
58
+ """Audio/Video Control Transport - AVRCP transport protocol"""
59
+
60
+ AVRC = "CONFIG_BT_LOG_AVRC_TRACE_LEVEL"
61
+ """Audio/Video Remote Control - Media playback control"""
62
+
63
+ # Security
64
+ SMP = "CONFIG_BT_LOG_SMP_TRACE_LEVEL"
65
+ """Security Manager Protocol - BLE pairing and encryption"""
66
+
67
+ # Application Layer
68
+ BTIF = "CONFIG_BT_LOG_BTIF_TRACE_LEVEL"
69
+ """Bluetooth Interface - Application interface layer"""
70
+
71
+ BTC = "CONFIG_BT_LOG_BTC_TRACE_LEVEL"
72
+ """Bluetooth Common - Task handling and coordination"""
73
+
74
+ # BLE Specific
75
+ BLE_SCAN = "CONFIG_BT_LOG_BLE_SCAN_TRACE_LEVEL"
76
+ """BLE scanning operations"""
77
+
78
+ GATT = "CONFIG_BT_LOG_GATT_TRACE_LEVEL"
79
+ """Generic Attribute Profile - BLE data exchange protocol"""
80
+
81
+ # Other Profiles
82
+ MCA = "CONFIG_BT_LOG_MCA_TRACE_LEVEL"
83
+ """Multi-Channel Adaptation - Health device profile"""
84
+
85
+ HID = "CONFIG_BT_LOG_HID_TRACE_LEVEL"
86
+ """Human Interface Device - Keyboards, mice, controllers"""
87
+
88
+ APPL = "CONFIG_BT_LOG_APPL_TRACE_LEVEL"
89
+ """Application layer logging"""
90
+
91
+ OSI = "CONFIG_BT_LOG_OSI_TRACE_LEVEL"
92
+ """OS abstraction layer - Threading, memory, timers"""
93
+
94
+ BLUFI = "CONFIG_BT_LOG_BLUFI_TRACE_LEVEL"
95
+ """ESP32 WiFi provisioning over Bluetooth"""
96
+
97
+
98
+ # Set to track which loggers are needed by components
99
+ _required_loggers: set[BTLoggers] = set()
100
+
101
+
102
+ def register_bt_logger(*loggers: BTLoggers) -> None:
103
+ """Register Bluetooth logger categories that a component needs.
104
+
105
+ Args:
106
+ *loggers: One or more BTLoggers enum members
107
+ """
108
+ for logger in loggers:
109
+ if not isinstance(logger, BTLoggers):
110
+ raise TypeError(
111
+ f"Logger must be a BTLoggers enum member, got {type(logger)}"
112
+ )
113
+ _required_loggers.add(logger)
114
+
115
+
15
116
  CONF_BLE_ID = "ble_id"
16
117
  CONF_IO_CAPABILITY = "io_capability"
17
118
  CONF_ADVERTISING_CYCLE_TIME = "advertising_cycle_time"
119
+ CONF_DISABLE_BT_LOGS = "disable_bt_logs"
18
120
 
19
121
  NO_BLUETOOTH_VARIANTS = [const.VARIANT_ESP32S2]
20
122
 
@@ -62,6 +164,9 @@ CONFIG_SCHEMA = cv.Schema(
62
164
  cv.Optional(
63
165
  CONF_ADVERTISING_CYCLE_TIME, default="10s"
64
166
  ): cv.positive_time_period_milliseconds,
167
+ cv.SplitDefault(CONF_DISABLE_BT_LOGS, esp32_idf=True): cv.All(
168
+ cv.only_with_esp_idf, cv.boolean
169
+ ),
65
170
  }
66
171
  ).extend(cv.COMPONENT_SCHEMA)
67
172
 
@@ -140,6 +245,16 @@ async def to_code(config):
140
245
  add_idf_sdkconfig_option("CONFIG_BT_ENABLED", True)
141
246
  add_idf_sdkconfig_option("CONFIG_BT_BLE_42_FEATURES_SUPPORTED", True)
142
247
 
248
+ # Register the core BLE loggers that are always needed
249
+ register_bt_logger(BTLoggers.GAP, BTLoggers.BTM, BTLoggers.HCI)
250
+
251
+ # Apply logger settings if log disabling is enabled
252
+ if config.get(CONF_DISABLE_BT_LOGS, False):
253
+ # Disable all Bluetooth loggers that are not required
254
+ for logger in BTLoggers:
255
+ if logger not in _required_loggers:
256
+ add_idf_sdkconfig_option(f"{logger.value}_NONE", True)
257
+
143
258
  cg.add_define("USE_ESP32_BLE")
144
259
 
145
260
 
@@ -28,7 +28,7 @@ static RAMAllocator<BLEEvent> EVENT_ALLOCATOR( // NOLINT(cppcoreguidelines-avoi
28
28
 
29
29
  void ESP32BLE::setup() {
30
30
  global_ble = this;
31
- ESP_LOGCONFIG(TAG, "Setting up BLE...");
31
+ ESP_LOGCONFIG(TAG, "Running setup");
32
32
 
33
33
  if (!ble_pre_setup_()) {
34
34
  ESP_LOGE(TAG, "BLE could not be prepared for configuration");
@@ -270,14 +270,14 @@ void ESP32BLE::loop() {
270
270
  case BLE_COMPONENT_STATE_DISABLED:
271
271
  return;
272
272
  case BLE_COMPONENT_STATE_DISABLE: {
273
- ESP_LOGD(TAG, "Disabling BLE...");
273
+ ESP_LOGD(TAG, "Disabling");
274
274
 
275
275
  for (auto *ble_event_handler : this->ble_status_event_handlers_) {
276
276
  ble_event_handler->ble_before_disabled_event_handler();
277
277
  }
278
278
 
279
279
  if (!ble_dismantle_()) {
280
- ESP_LOGE(TAG, "BLE could not be dismantled");
280
+ ESP_LOGE(TAG, "Could not be dismantled");
281
281
  this->mark_failed();
282
282
  return;
283
283
  }
@@ -285,11 +285,11 @@ void ESP32BLE::loop() {
285
285
  return;
286
286
  }
287
287
  case BLE_COMPONENT_STATE_ENABLE: {
288
- ESP_LOGD(TAG, "Enabling BLE...");
288
+ ESP_LOGD(TAG, "Enabling");
289
289
  this->state_ = BLE_COMPONENT_STATE_OFF;
290
290
 
291
291
  if (!ble_setup_()) {
292
- ESP_LOGE(TAG, "BLE could not be set up");
292
+ ESP_LOGE(TAG, "Could not be set up");
293
293
  this->mark_failed();
294
294
  return;
295
295
  }
@@ -408,10 +408,12 @@ void ESP32BLE::dump_config() {
408
408
  io_capability_s = "invalid";
409
409
  break;
410
410
  }
411
- ESP_LOGCONFIG(TAG, "ESP32 BLE:");
412
- ESP_LOGCONFIG(TAG, " MAC address: %02X:%02X:%02X:%02X:%02X:%02X", mac_address[0], mac_address[1], mac_address[2],
413
- mac_address[3], mac_address[4], mac_address[5]);
414
- ESP_LOGCONFIG(TAG, " IO Capability: %s", io_capability_s);
411
+ ESP_LOGCONFIG(TAG,
412
+ "ESP32 BLE:\n"
413
+ " MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n"
414
+ " IO Capability: %s",
415
+ mac_address[0], mac_address[1], mac_address[2], mac_address[3], mac_address[4], mac_address[5],
416
+ io_capability_s);
415
417
  } else {
416
418
  ESP_LOGCONFIG(TAG, "ESP32 BLE: bluetooth stack is not enabled");
417
419
  }
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include "esphome/core/helpers.h"
4
3
  #include "esphome/core/hal.h"
4
+ #include "esphome/core/helpers.h"
5
5
 
6
6
  #ifdef USE_ESP32
7
7
 
@@ -45,8 +45,10 @@ void BLEClientBase::loop() {
45
45
  float BLEClientBase::get_setup_priority() const { return setup_priority::AFTER_BLUETOOTH; }
46
46
 
47
47
  void BLEClientBase::dump_config() {
48
- ESP_LOGCONFIG(TAG, " Address: %s", this->address_str().c_str());
49
- ESP_LOGCONFIG(TAG, " Auto-Connect: %s", TRUEFALSE(this->auto_connect_));
48
+ ESP_LOGCONFIG(TAG,
49
+ " Address: %s\n"
50
+ " Auto-Connect: %s",
51
+ this->address_str().c_str(), TRUEFALSE(this->auto_connect_));
50
52
  std::string state_name;
51
53
  switch (this->state()) {
52
54
  case espbt::ClientState::INIT:
@@ -4,7 +4,7 @@ from esphome import automation
4
4
  import esphome.codegen as cg
5
5
  from esphome.components import esp32_ble
6
6
  from esphome.components.esp32 import add_idf_sdkconfig_option
7
- from esphome.components.esp32_ble import bt_uuid
7
+ from esphome.components.esp32_ble import BTLoggers, bt_uuid
8
8
  import esphome.config_validation as cv
9
9
  from esphome.config_validation import UNDEFINED
10
10
  from esphome.const import (
@@ -525,6 +525,9 @@ async def to_code_characteristic(service_var, char_conf):
525
525
 
526
526
 
527
527
  async def to_code(config):
528
+ # Register the loggers this component needs
529
+ esp32_ble.register_bt_logger(BTLoggers.GATT, BTLoggers.SMP)
530
+
528
531
  var = cg.new_Pvariable(config[CONF_ID])
529
532
 
530
533
  await cg.register_component(var, config)
@@ -2,6 +2,7 @@
2
2
  #include "ble_server.h"
3
3
  #include "ble_service.h"
4
4
 
5
+ #include "esphome/core/helpers.h"
5
6
  #include "esphome/core/log.h"
6
7
 
7
8
  #ifdef USE_ESP32
@@ -43,7 +43,6 @@ class BLEServer : public Component,
43
43
  float get_setup_priority() const override;
44
44
  bool can_proceed() override;
45
45
 
46
- void teardown();
47
46
  bool is_running();
48
47
 
49
48
  void set_manufacturer_data(const std::vector<uint8_t> &data) {
@@ -1,14 +1,15 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import MutableMapping
3
+ from collections.abc import Callable, MutableMapping
4
4
  import logging
5
- from typing import Any, Callable
5
+ from typing import Any
6
6
 
7
7
  from esphome import automation
8
8
  import esphome.codegen as cg
9
9
  from esphome.components import esp32_ble
10
10
  from esphome.components.esp32 import add_idf_sdkconfig_option
11
11
  from esphome.components.esp32_ble import (
12
+ BTLoggers,
12
13
  bt_uuid,
13
14
  bt_uuid16_format,
14
15
  bt_uuid32_format,
@@ -259,6 +260,9 @@ ESP_BLE_DEVICE_SCHEMA = cv.Schema(
259
260
 
260
261
 
261
262
  async def to_code(config):
263
+ # Register the loggers this component needs
264
+ esp32_ble.register_bt_logger(BTLoggers.BLE_SCAN)
265
+
262
266
  var = cg.new_Pvariable(config[CONF_ID])
263
267
  await cg.register_component(var, config)
264
268
 
@@ -172,7 +172,7 @@ void ESP32BLETracker::loop() {
172
172
  (this->scan_set_param_failed_ && this->scanner_state_ == ScannerState::RUNNING)) {
173
173
  this->stop_scan_();
174
174
  if (this->scan_start_fail_count_ == std::numeric_limits<uint8_t>::max()) {
175
- ESP_LOGE(TAG, "ESP-IDF BLE scan could not restart after %d attempts, rebooting to restore BLE stack...",
175
+ ESP_LOGE(TAG, "Scan could not restart after %d attempts, rebooting to restore stack (IDF)",
176
176
  std::numeric_limits<uint8_t>::max());
177
177
  App.reboot();
178
178
  }
@@ -219,10 +219,10 @@ void ESP32BLETracker::loop() {
219
219
  for (auto *client : this->clients_) {
220
220
  if (client->state() == ClientState::DISCOVERED) {
221
221
  if (this->scanner_state_ == ScannerState::RUNNING) {
222
- ESP_LOGD(TAG, "Stopping scan to make connection...");
222
+ ESP_LOGD(TAG, "Stopping scan to make connection");
223
223
  this->stop_scan_();
224
224
  } else if (this->scanner_state_ == ScannerState::IDLE) {
225
- ESP_LOGD(TAG, "Promoting client to connect...");
225
+ ESP_LOGD(TAG, "Promoting client to connect");
226
226
  // We only want to promote one client at a time.
227
227
  // once the scanner is fully stopped.
228
228
  #ifdef USE_ESP32_BLE_SOFTWARE_COEXISTENCE
@@ -306,7 +306,7 @@ void ESP32BLETracker::start_scan_(bool first) {
306
306
 
307
307
  // Start timeout before scan is started. Otherwise scan never starts if any error.
308
308
  this->set_timeout("scan", this->scan_duration_ * 2000, []() {
309
- ESP_LOGE(TAG, "ESP-IDF BLE scan never terminated, rebooting to restore BLE stack...");
309
+ ESP_LOGE(TAG, "Scan never terminated, rebooting to restore stack (IDF)");
310
310
  App.reboot();
311
311
  });
312
312
 
@@ -731,11 +731,14 @@ uint64_t ESPBTDevice::address_uint64() const { return esp32_ble::ble_addr_to_uin
731
731
 
732
732
  void ESP32BLETracker::dump_config() {
733
733
  ESP_LOGCONFIG(TAG, "BLE Tracker:");
734
- ESP_LOGCONFIG(TAG, " Scan Duration: %" PRIu32 " s", this->scan_duration_);
735
- ESP_LOGCONFIG(TAG, " Scan Interval: %.1f ms", this->scan_interval_ * 0.625f);
736
- ESP_LOGCONFIG(TAG, " Scan Window: %.1f ms", this->scan_window_ * 0.625f);
737
- ESP_LOGCONFIG(TAG, " Scan Type: %s", this->scan_active_ ? "ACTIVE" : "PASSIVE");
738
- ESP_LOGCONFIG(TAG, " Continuous Scanning: %s", YESNO(this->scan_continuous_));
734
+ ESP_LOGCONFIG(TAG,
735
+ " Scan Duration: %" PRIu32 " s\n"
736
+ " Scan Interval: %.1f ms\n"
737
+ " Scan Window: %.1f ms\n"
738
+ " Scan Type: %s\n"
739
+ " Continuous Scanning: %s",
740
+ this->scan_duration_, this->scan_interval_ * 0.625f, this->scan_window_ * 0.625f,
741
+ this->scan_active_ ? "ACTIVE" : "PASSIVE", YESNO(this->scan_continuous_));
739
742
  switch (this->scanner_state_) {
740
743
  case ScannerState::IDLE:
741
744
  ESP_LOGCONFIG(TAG, " Scanner State: IDLE");
@@ -46,17 +46,20 @@ void ESP32Camera::setup() {
46
46
 
47
47
  void ESP32Camera::dump_config() {
48
48
  auto conf = this->config_;
49
- ESP_LOGCONFIG(TAG, "ESP32 Camera:");
50
- ESP_LOGCONFIG(TAG, " Name: %s", this->name_.c_str());
51
- ESP_LOGCONFIG(TAG, " Internal: %s", YESNO(this->internal_));
52
- ESP_LOGCONFIG(TAG, " Data Pins: D0:%d D1:%d D2:%d D3:%d D4:%d D5:%d D6:%d D7:%d", conf.pin_d0, conf.pin_d1,
53
- conf.pin_d2, conf.pin_d3, conf.pin_d4, conf.pin_d5, conf.pin_d6, conf.pin_d7);
54
- ESP_LOGCONFIG(TAG, " VSYNC Pin: %d", conf.pin_vsync);
55
- ESP_LOGCONFIG(TAG, " HREF Pin: %d", conf.pin_href);
56
- ESP_LOGCONFIG(TAG, " Pixel Clock Pin: %d", conf.pin_pclk);
57
- ESP_LOGCONFIG(TAG, " External Clock: Pin:%d Frequency:%u", conf.pin_xclk, conf.xclk_freq_hz);
58
- ESP_LOGCONFIG(TAG, " I2C Pins: SDA:%d SCL:%d", conf.pin_sccb_sda, conf.pin_sccb_scl);
59
- ESP_LOGCONFIG(TAG, " Reset Pin: %d", conf.pin_reset);
49
+ ESP_LOGCONFIG(TAG,
50
+ "ESP32 Camera:\n"
51
+ " Name: %s\n"
52
+ " Internal: %s\n"
53
+ " Data Pins: D0:%d D1:%d D2:%d D3:%d D4:%d D5:%d D6:%d D7:%d\n"
54
+ " VSYNC Pin: %d\n"
55
+ " HREF Pin: %d\n"
56
+ " Pixel Clock Pin: %d\n"
57
+ " External Clock: Pin:%d Frequency:%u\n"
58
+ " I2C Pins: SDA:%d SCL:%d\n"
59
+ " Reset Pin: %d",
60
+ this->name_.c_str(), YESNO(this->internal_), conf.pin_d0, conf.pin_d1, conf.pin_d2, conf.pin_d3,
61
+ conf.pin_d4, conf.pin_d5, conf.pin_d6, conf.pin_d7, conf.pin_vsync, conf.pin_href, conf.pin_pclk,
62
+ conf.pin_xclk, conf.xclk_freq_hz, conf.pin_sccb_sda, conf.pin_sccb_scl, conf.pin_reset);
60
63
  switch (this->config_.frame_size) {
61
64
  case FRAMESIZE_QQVGA:
62
65
  ESP_LOGCONFIG(TAG, " Resolution: 160x120 (QQVGA)");
@@ -123,24 +126,29 @@ void ESP32Camera::dump_config() {
123
126
 
124
127
  sensor_t *s = esp_camera_sensor_get();
125
128
  auto st = s->status;
126
- ESP_LOGCONFIG(TAG, " JPEG Quality: %u", st.quality);
127
- ESP_LOGCONFIG(TAG, " Framebuffer Count: %u", conf.fb_count);
128
- ESP_LOGCONFIG(TAG, " Contrast: %d", st.contrast);
129
- ESP_LOGCONFIG(TAG, " Brightness: %d", st.brightness);
130
- ESP_LOGCONFIG(TAG, " Saturation: %d", st.saturation);
131
- ESP_LOGCONFIG(TAG, " Vertical Flip: %s", ONOFF(st.vflip));
132
- ESP_LOGCONFIG(TAG, " Horizontal Mirror: %s", ONOFF(st.hmirror));
133
- ESP_LOGCONFIG(TAG, " Special Effect: %u", st.special_effect);
134
- ESP_LOGCONFIG(TAG, " White Balance Mode: %u", st.wb_mode);
129
+ ESP_LOGCONFIG(TAG,
130
+ " JPEG Quality: %u\n"
131
+ " Framebuffer Count: %u\n"
132
+ " Contrast: %d\n"
133
+ " Brightness: %d\n"
134
+ " Saturation: %d\n"
135
+ " Vertical Flip: %s\n"
136
+ " Horizontal Mirror: %s\n"
137
+ " Special Effect: %u\n"
138
+ " White Balance Mode: %u",
139
+ st.quality, conf.fb_count, st.contrast, st.brightness, st.saturation, ONOFF(st.vflip),
140
+ ONOFF(st.hmirror), st.special_effect, st.wb_mode);
135
141
  // ESP_LOGCONFIG(TAG, " Auto White Balance: %u", st.awb);
136
142
  // ESP_LOGCONFIG(TAG, " Auto White Balance Gain: %u", st.awb_gain);
137
- ESP_LOGCONFIG(TAG, " Auto Exposure Control: %u", st.aec);
138
- ESP_LOGCONFIG(TAG, " Auto Exposure Control 2: %u", st.aec2);
139
- ESP_LOGCONFIG(TAG, " Auto Exposure Level: %d", st.ae_level);
140
- ESP_LOGCONFIG(TAG, " Auto Exposure Value: %u", st.aec_value);
141
- ESP_LOGCONFIG(TAG, " AGC: %u", st.agc);
142
- ESP_LOGCONFIG(TAG, " AGC Gain: %u", st.agc_gain);
143
- ESP_LOGCONFIG(TAG, " Gain Ceiling: %u", st.gainceiling);
143
+ ESP_LOGCONFIG(TAG,
144
+ " Auto Exposure Control: %u\n"
145
+ " Auto Exposure Control 2: %u\n"
146
+ " Auto Exposure Level: %d\n"
147
+ " Auto Exposure Value: %u\n"
148
+ " AGC: %u\n"
149
+ " AGC Gain: %u\n"
150
+ " Gain Ceiling: %u",
151
+ st.aec, st.aec2, st.ae_level, st.aec_value, st.agc, st.agc_gain, st.gainceiling);
144
152
  // ESP_LOGCONFIG(TAG, " BPC: %u", st.bpc);
145
153
  // ESP_LOGCONFIG(TAG, " WPC: %u", st.wpc);
146
154
  // ESP_LOGCONFIG(TAG, " RAW_GMA: %u", st.raw_gma);
@@ -85,8 +85,10 @@ void CameraWebServer::on_shutdown() {
85
85
  }
86
86
 
87
87
  void CameraWebServer::dump_config() {
88
- ESP_LOGCONFIG(TAG, "ESP32 Camera Web Server:");
89
- ESP_LOGCONFIG(TAG, " Port: %d", this->port_);
88
+ ESP_LOGCONFIG(TAG,
89
+ "ESP32 Camera Web Server:\n"
90
+ " Port: %d",
91
+ this->port_);
90
92
  if (this->mode_ == STREAM) {
91
93
  ESP_LOGCONFIG(TAG, " Mode: stream");
92
94
  } else {
@@ -1,6 +1,6 @@
1
1
  #include "esp32_dac.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  #ifdef USE_ESP32
6
6
 
@@ -20,7 +20,7 @@ static constexpr uint8_t DAC0_PIN = 25;
20
20
  static const char *const TAG = "esp32_dac";
21
21
 
22
22
  void ESP32DAC::setup() {
23
- ESP_LOGCONFIG(TAG, "Setting up ESP32 DAC Output...");
23
+ ESP_LOGCONFIG(TAG, "Running setup");
24
24
  this->pin_->setup();
25
25
  this->turn_off();
26
26
 
@@ -1,6 +1,7 @@
1
1
  from esphome import automation
2
2
  import esphome.codegen as cg
3
- from esphome.components import binary_sensor, output
3
+ from esphome.components import binary_sensor, esp32_ble, output
4
+ from esphome.components.esp32_ble import BTLoggers
4
5
  import esphome.config_validation as cv
5
6
  from esphome.const import CONF_ID, CONF_ON_STATE, CONF_TRIGGER_ID
6
7
 
@@ -94,6 +95,9 @@ CONFIG_SCHEMA = cv.Schema(
94
95
 
95
96
 
96
97
  async def to_code(config):
98
+ # Register the loggers this component needs
99
+ esp32_ble.register_bt_logger(BTLoggers.GATT, BTLoggers.SMP)
100
+
97
101
  var = cg.new_Pvariable(config[CONF_ID])
98
102
  await cg.register_component(var, config)
99
103