esphome 2025.7.5__py3-none-any.whl → 2025.8.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 (756) hide show
  1. esphome/__main__.py +190 -83
  2. esphome/automation.py +2 -4
  3. esphome/build_gen/__init__.py +0 -0
  4. esphome/build_gen/platformio.py +102 -0
  5. esphome/components/a4988/a4988.cpp +0 -1
  6. esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
  7. esphome/components/absolute_humidity/sensor.py +2 -2
  8. esphome/components/adc/__init__.py +123 -85
  9. esphome/components/adc/adc_sensor.h +98 -35
  10. esphome/components/adc/adc_sensor_common.cpp +10 -4
  11. esphome/components/adc/adc_sensor_esp32.cpp +291 -123
  12. esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
  13. esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
  14. esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
  15. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  16. esphome/components/adc/sensor.py +61 -27
  17. esphome/components/adc128s102/adc128s102.cpp +1 -4
  18. esphome/components/ade7880/sensor.py +75 -49
  19. esphome/components/ads1115/ads1115.cpp +0 -1
  20. esphome/components/ads1118/ads1118.cpp +0 -1
  21. esphome/components/ags10/ags10.cpp +0 -4
  22. esphome/components/aht10/aht10.cpp +0 -4
  23. esphome/components/aic3204/aic3204.cpp +0 -2
  24. esphome/components/airthings_wave_plus/__init__.py +1 -1
  25. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
  26. esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
  27. esphome/components/airthings_wave_plus/sensor.py +55 -28
  28. esphome/components/alarm_control_panel/__init__.py +4 -9
  29. esphome/components/am2315c/am2315c.cpp +0 -2
  30. esphome/components/am2320/am2320.cpp +0 -1
  31. esphome/components/animation/__init__.py +14 -11
  32. esphome/components/apds9306/apds9306.cpp +0 -4
  33. esphome/components/apds9960/apds9960.cpp +0 -1
  34. esphome/components/api/__init__.py +29 -4
  35. esphome/components/api/api_connection.cpp +378 -401
  36. esphome/components/api/api_connection.h +102 -52
  37. esphome/components/api/api_frame_helper.cpp +69 -896
  38. esphome/components/api/api_frame_helper.h +31 -126
  39. esphome/components/api/api_frame_helper_noise.cpp +583 -0
  40. esphome/components/api/api_frame_helper_noise.h +68 -0
  41. esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
  42. esphome/components/api/api_frame_helper_plaintext.h +53 -0
  43. esphome/components/api/api_noise_context.h +2 -4
  44. esphome/components/api/api_pb2.cpp +1601 -1808
  45. esphome/components/api/api_pb2.h +367 -323
  46. esphome/components/api/api_pb2_dump.cpp +1137 -3466
  47. esphome/components/api/api_pb2_includes.h +34 -0
  48. esphome/components/api/api_pb2_service.cpp +94 -105
  49. esphome/components/api/api_pb2_service.h +27 -16
  50. esphome/components/api/api_server.cpp +18 -17
  51. esphome/components/api/api_server.h +8 -5
  52. esphome/components/api/client.py +16 -8
  53. esphome/components/api/custom_api_device.h +68 -14
  54. esphome/components/api/homeassistant_service.h +24 -19
  55. esphome/components/api/list_entities.cpp +3 -5
  56. esphome/components/api/list_entities.h +2 -4
  57. esphome/components/api/proto.cpp +3 -5
  58. esphome/components/api/proto.h +239 -274
  59. esphome/components/api/subscribe_state.cpp +2 -4
  60. esphome/components/api/subscribe_state.h +2 -4
  61. esphome/components/api/user_services.cpp +2 -4
  62. esphome/components/api/user_services.h +8 -8
  63. esphome/components/as3935/as3935.cpp +0 -2
  64. esphome/components/as3935_spi/as3935_spi.cpp +0 -2
  65. esphome/components/as5600/__init__.py +1 -1
  66. esphome/components/as5600/as5600.cpp +0 -2
  67. esphome/components/as5600/sensor/__init__.py +0 -1
  68. esphome/components/as7341/as7341.cpp +0 -1
  69. esphome/components/async_tcp/__init__.py +1 -1
  70. esphome/components/at581x/at581x.cpp +1 -1
  71. esphome/components/atm90e26/atm90e26.cpp +0 -1
  72. esphome/components/atm90e32/atm90e32.cpp +475 -116
  73. esphome/components/atm90e32/atm90e32.h +43 -5
  74. esphome/components/audio/audio.h +2 -2
  75. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
  76. esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
  77. esphome/components/bh1750/bh1750.cpp +0 -1
  78. esphome/components/binary_sensor/__init__.py +14 -12
  79. esphome/components/ble_client/__init__.py +4 -7
  80. esphome/components/bluetooth_proxy/__init__.py +40 -3
  81. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +392 -81
  82. esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
  83. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
  84. esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
  85. esphome/components/bme280_base/bme280_base.cpp +15 -16
  86. esphome/components/bme680/bme680.cpp +2 -3
  87. esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
  88. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
  89. esphome/components/bmi160/bmi160.cpp +0 -1
  90. esphome/components/bmp085/bmp085.cpp +0 -1
  91. esphome/components/bmp280_base/bmp280_base.cpp +13 -14
  92. esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
  93. esphome/components/bmp581/bmp581.cpp +0 -2
  94. esphome/components/bp1658cj/bp1658cj.cpp +0 -1
  95. esphome/components/bp5758d/bp5758d.cpp +0 -1
  96. esphome/components/button/__init__.py +0 -1
  97. esphome/components/canbus/__init__.py +2 -3
  98. esphome/components/canbus/canbus.cpp +0 -1
  99. esphome/components/cap1188/cap1188.cpp +0 -2
  100. esphome/components/captive_portal/__init__.py +1 -1
  101. esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
  102. esphome/components/ch422g/ch422g.cpp +0 -1
  103. esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
  104. esphome/components/climate/__init__.py +0 -1
  105. esphome/components/climate/climate_traits.h +24 -0
  106. esphome/components/cm1106/cm1106.cpp +0 -1
  107. esphome/components/const/__init__.py +6 -0
  108. esphome/components/cover/__init__.py +0 -1
  109. esphome/components/cover/cover.cpp +9 -13
  110. esphome/components/cs5460a/cs5460a.cpp +0 -2
  111. esphome/components/cse7761/cse7761.cpp +0 -1
  112. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
  113. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
  114. esphome/components/dac7678/dac7678_output.cpp +0 -2
  115. esphome/components/dallas_temp/dallas_temp.cpp +0 -1
  116. esphome/components/datetime/__init__.py +0 -2
  117. esphome/components/debug/__init__.py +15 -1
  118. esphome/components/debug/debug_zephyr.cpp +281 -0
  119. esphome/components/debug/sensor.py +2 -1
  120. esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
  121. esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
  122. esphome/components/dfrobot_sen0395/__init__.py +1 -2
  123. esphome/components/dht/dht.cpp +0 -1
  124. esphome/components/dht12/dht12.cpp +0 -1
  125. esphome/components/display/__init__.py +16 -3
  126. esphome/components/display_menu_base/__init__.py +1 -1
  127. esphome/components/dps310/dps310.cpp +0 -2
  128. esphome/components/ds1307/ds1307.cpp +0 -1
  129. esphome/components/ds2484/ds2484.cpp +0 -1
  130. esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
  131. esphome/components/ee895/ee895.cpp +0 -1
  132. esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
  133. esphome/components/emc2101/emc2101.cpp +0 -2
  134. esphome/components/ens160_base/ens160_base.cpp +0 -2
  135. esphome/components/ens210/ens210.cpp +0 -1
  136. esphome/components/es7210/es7210.cpp +0 -2
  137. esphome/components/es7243e/es7243e.cpp +0 -2
  138. esphome/components/es8156/es8156.cpp +0 -2
  139. esphome/components/es8311/es8311.cpp +0 -2
  140. esphome/components/es8388/es8388.cpp +0 -2
  141. esphome/components/esp32/__init__.py +203 -60
  142. esphome/components/esp32/boards.py +17 -0
  143. esphome/components/esp32/gpio.cpp +0 -1
  144. esphome/components/esp32/gpio.py +1 -2
  145. esphome/components/esp32/gpio_esp32_h2.py +2 -7
  146. esphome/components/esp32/gpio_esp32_p4.py +2 -7
  147. esphome/components/esp32/post_build.py.script +112 -61
  148. esphome/components/esp32_ble/__init__.py +41 -2
  149. esphome/components/esp32_ble/ble.cpp +14 -10
  150. esphome/components/esp32_ble/ble.h +18 -18
  151. esphome/components/esp32_ble/ble_advertising.cpp +5 -5
  152. esphome/components/esp32_ble/ble_advertising.h +7 -5
  153. esphome/components/esp32_ble/ble_event.h +139 -73
  154. esphome/components/esp32_ble/ble_scan_result.h +2 -4
  155. esphome/components/esp32_ble/ble_uuid.cpp +5 -5
  156. esphome/components/esp32_ble/ble_uuid.h +6 -5
  157. esphome/components/esp32_ble_beacon/__init__.py +4 -0
  158. esphome/components/esp32_ble_client/__init__.py +1 -1
  159. esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
  160. esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
  161. esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
  162. esphome/components/esp32_ble_client/ble_client_base.h +17 -6
  163. esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
  164. esphome/components/esp32_ble_client/ble_service.cpp +4 -4
  165. esphome/components/esp32_ble_client/ble_service.h +6 -4
  166. esphome/components/esp32_ble_server/__init__.py +15 -12
  167. esphome/components/esp32_ble_tracker/__init__.py +79 -11
  168. esphome/components/esp32_ble_tracker/automation.h +4 -4
  169. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
  170. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
  171. esphome/components/esp32_camera/__init__.py +13 -1
  172. esphome/components/esp32_camera/esp32_camera.cpp +7 -2
  173. esphome/components/esp32_camera/esp32_camera.h +1 -0
  174. esphome/components/esp32_dac/esp32_dac.cpp +3 -19
  175. esphome/components/esp32_dac/esp32_dac.h +4 -8
  176. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
  177. esphome/components/esp32_rmt_led_strip/light.py +1 -1
  178. esphome/components/esp32_touch/__init__.py +2 -3
  179. esphome/components/esp32_touch/esp32_touch.h +9 -6
  180. esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
  181. esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
  182. esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
  183. esphome/components/esp8266/__init__.py +3 -1
  184. esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
  185. esphome/components/esphome/ota/__init__.py +1 -2
  186. esphome/components/esphome/ota/ota_esphome.cpp +150 -77
  187. esphome/components/esphome/ota/ota_esphome.h +8 -1
  188. esphome/components/espnow/__init__.py +309 -0
  189. esphome/components/espnow/automation.h +175 -0
  190. esphome/components/espnow/espnow_component.cpp +468 -0
  191. esphome/components/espnow/espnow_component.h +183 -0
  192. esphome/components/espnow/espnow_err.h +19 -0
  193. esphome/components/espnow/espnow_packet.h +166 -0
  194. esphome/components/ethernet/__init__.py +7 -1
  195. esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
  196. esphome/components/ethernet/ethernet_component.cpp +0 -1
  197. esphome/components/ethernet/ethernet_component.h +4 -0
  198. esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
  199. esphome/components/event/__init__.py +0 -1
  200. esphome/components/factory_reset/__init__.py +92 -0
  201. esphome/components/factory_reset/factory_reset.cpp +76 -0
  202. esphome/components/factory_reset/factory_reset.h +43 -0
  203. esphome/components/fan/__init__.py +0 -1
  204. esphome/components/fan/fan_traits.h +16 -0
  205. esphome/components/fastled_base/fastled_light.cpp +0 -1
  206. esphome/components/fastled_spi/light.py +1 -3
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
  208. esphome/components/fs3000/fs3000.cpp +0 -2
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  210. esphome/components/ft63x6/ft63x6.cpp +0 -1
  211. esphome/components/gdk101/gdk101.cpp +0 -1
  212. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  213. esphome/components/gl_r01_i2c/sensor.py +1 -1
  214. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  215. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  216. esphome/components/gpio_expander/cached_gpio.h +24 -15
  217. esphome/components/gps/__init__.py +6 -2
  218. esphome/components/gps/gps.cpp +50 -49
  219. esphome/components/gps/gps.h +4 -8
  220. esphome/components/gps/time/gps_time.cpp +3 -9
  221. esphome/components/gps/time/gps_time.h +4 -7
  222. esphome/components/graph/__init__.py +1 -1
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  225. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  227. esphome/components/haier/climate.py +5 -10
  228. esphome/components/haier/haier_base.cpp +0 -1
  229. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  230. esphome/components/hdc1080/hdc1080.cpp +0 -2
  231. esphome/components/heatpumpir/climate.py +2 -2
  232. esphome/components/hlw8012/hlw8012.cpp +0 -1
  233. esphome/components/hm3301/hm3301.cpp +0 -1
  234. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  235. esphome/components/homeassistant/__init__.py +1 -0
  236. esphome/components/homeassistant/number/__init__.py +1 -0
  237. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  238. esphome/components/homeassistant/switch/__init__.py +1 -0
  239. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  240. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  241. esphome/components/host/__init__.py +2 -0
  242. esphome/components/hte501/hte501.cpp +0 -1
  243. esphome/components/http_request/__init__.py +2 -3
  244. esphome/components/http_request/http_request_idf.cpp +2 -2
  245. esphome/components/htu21d/htu21d.cpp +0 -2
  246. esphome/components/htu31d/htu31d.cpp +0 -2
  247. esphome/components/hx711/hx711.cpp +0 -1
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  249. esphome/components/hydreon_rgxx/sensor.py +4 -5
  250. esphome/components/i2c/i2c_bus.h +1 -1
  251. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  253. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  254. esphome/components/i2s_audio/__init__.py +6 -5
  255. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  257. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  262. esphome/components/ili9xxx/display.py +4 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  264. esphome/components/image/__init__.py +123 -92
  265. esphome/components/improv_serial/__init__.py +7 -8
  266. esphome/components/ina219/ina219.cpp +0 -1
  267. esphome/components/ina226/ina226.cpp +0 -2
  268. esphome/components/ina260/ina260.cpp +0 -2
  269. esphome/components/ina2xx_base/__init__.py +2 -5
  270. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  271. esphome/components/ina3221/ina3221.cpp +0 -1
  272. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  273. esphome/components/interval/interval.h +5 -9
  274. esphome/components/json/__init__.py +1 -1
  275. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  276. esphome/components/lc709203f/lc709203f.cpp +0 -2
  277. esphome/components/lcd_gpio/display.py +1 -3
  278. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  279. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  280. esphome/components/ld2410/__init__.py +4 -6
  281. esphome/components/ld2410/binary_sensor.py +4 -0
  282. esphome/components/ld2410/ld2410.cpp +56 -100
  283. esphome/components/ld2410/ld2410.h +17 -15
  284. esphome/components/ld2410/sensor.py +24 -10
  285. esphome/components/ld2412/__init__.py +46 -0
  286. esphome/components/ld2412/binary_sensor.py +70 -0
  287. esphome/components/ld2412/button/__init__.py +74 -0
  288. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  289. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  290. esphome/components/ld2412/button/query_button.cpp +9 -0
  291. esphome/components/ld2412/button/query_button.h +18 -0
  292. esphome/components/ld2412/button/restart_button.cpp +9 -0
  293. esphome/components/ld2412/button/restart_button.h +18 -0
  294. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  296. esphome/components/ld2412/ld2412.cpp +861 -0
  297. esphome/components/ld2412/ld2412.h +141 -0
  298. esphome/components/ld2412/number/__init__.py +126 -0
  299. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  300. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  301. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  302. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  303. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  305. esphome/components/ld2412/select/__init__.py +82 -0
  306. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  307. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  308. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  309. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  310. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  311. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  312. esphome/components/ld2412/sensor.py +124 -0
  313. esphome/components/ld2412/switch/__init__.py +45 -0
  314. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  316. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  318. esphome/components/ld2412/text_sensor.py +34 -0
  319. esphome/components/ld2420/ld2420.cpp +0 -1
  320. esphome/components/ld2450/__init__.py +3 -4
  321. esphome/components/ld2450/binary_sensor.py +3 -0
  322. esphome/components/ld2450/ld2450.cpp +77 -165
  323. esphome/components/ld2450/ld2450.h +26 -54
  324. esphome/components/ld2450/sensor.py +120 -6
  325. esphome/components/ld2450/text_sensor.py +5 -4
  326. esphome/components/ld24xx/__init__.py +1 -0
  327. esphome/components/ld24xx/ld24xx.h +65 -0
  328. esphome/components/ledc/ledc_output.cpp +0 -1
  329. esphome/components/libretiny/__init__.py +2 -0
  330. esphome/components/light/__init__.py +0 -1
  331. esphome/components/light/effects.py +70 -45
  332. esphome/components/light/light_call.cpp +101 -66
  333. esphome/components/light/light_color_values.h +16 -11
  334. esphome/components/light/light_json_schema.cpp +46 -44
  335. esphome/components/light/light_state.cpp +8 -11
  336. esphome/components/light/light_traits.h +17 -0
  337. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  338. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  339. esphome/components/lock/__init__.py +0 -1
  340. esphome/components/logger/__init__.py +31 -9
  341. esphome/components/logger/logger.cpp +12 -7
  342. esphome/components/logger/logger.h +25 -14
  343. esphome/components/logger/logger_esp32.cpp +2 -7
  344. esphome/components/logger/logger_esp8266.cpp +2 -4
  345. esphome/components/logger/logger_host.cpp +2 -4
  346. esphome/components/logger/logger_libretiny.cpp +2 -4
  347. esphome/components/logger/logger_rp2040.cpp +2 -4
  348. esphome/components/logger/logger_zephyr.cpp +86 -0
  349. esphome/components/logger/select/logger_level_select.cpp +2 -4
  350. esphome/components/logger/select/logger_level_select.h +2 -4
  351. esphome/components/logger/task_log_buffer.cpp +2 -4
  352. esphome/components/logger/task_log_buffer.h +2 -4
  353. esphome/components/lps22/sensor.py +5 -5
  354. esphome/components/ltr390/ltr390.cpp +0 -2
  355. esphome/components/ltr501/ltr501.cpp +0 -1
  356. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  357. esphome/components/lvgl/__init__.py +14 -13
  358. esphome/components/lvgl/automation.py +2 -4
  359. esphome/components/lvgl/defines.py +0 -2
  360. esphome/components/lvgl/helpers.py +1 -1
  361. esphome/components/lvgl/lv_validation.py +7 -4
  362. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  363. esphome/components/lvgl/styles.py +2 -2
  364. esphome/components/lvgl/types.py +1 -1
  365. esphome/components/lvgl/widgets/__init__.py +2 -2
  366. esphome/components/lvgl/widgets/arc.py +14 -11
  367. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  368. esphome/components/lvgl/widgets/qrcode.py +7 -7
  369. esphome/components/lvgl/widgets/spinner.py +6 -6
  370. esphome/components/lvgl/widgets/switch.py +2 -2
  371. esphome/components/lvgl/widgets/tabview.py +3 -3
  372. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  373. esphome/components/matrix_keypad/__init__.py +4 -3
  374. esphome/components/max17043/max17043.cpp +0 -2
  375. esphome/components/max31855/max31855.cpp +1 -4
  376. esphome/components/max31856/max31856.cpp +0 -4
  377. esphome/components/max31865/max31865.cpp +0 -1
  378. esphome/components/max44009/max44009.cpp +0 -1
  379. esphome/components/max6675/max6675.cpp +1 -4
  380. esphome/components/max6956/max6956.cpp +0 -1
  381. esphome/components/max7219/max7219.cpp +0 -1
  382. esphome/components/max7219digit/display.py +1 -1
  383. esphome/components/max7219digit/max7219digit.cpp +0 -1
  384. esphome/components/max9611/max9611.cpp +0 -1
  385. esphome/components/mcp23008/__init__.py +1 -1
  386. esphome/components/mcp23008/mcp23008.cpp +0 -1
  387. esphome/components/mcp23016/mcp23016.cpp +0 -1
  388. esphome/components/mcp23017/__init__.py +1 -1
  389. esphome/components/mcp23017/mcp23017.cpp +0 -1
  390. esphome/components/mcp23s08/__init__.py +1 -1
  391. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  392. esphome/components/mcp23s17/__init__.py +1 -1
  393. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  394. esphome/components/mcp23x08_base/__init__.py +2 -0
  395. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  396. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  397. esphome/components/mcp23x17_base/__init__.py +2 -0
  398. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  399. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  400. esphome/components/mcp23xxx_base/__init__.py +11 -5
  401. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  402. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  403. esphome/components/mcp3008/mcp3008.cpp +1 -4
  404. esphome/components/mcp3204/mcp3204.cpp +1 -4
  405. esphome/components/mcp4461/mcp4461.cpp +0 -1
  406. esphome/components/mcp4725/mcp4725.cpp +0 -1
  407. esphome/components/mcp4728/mcp4728.cpp +0 -1
  408. esphome/components/mcp9600/mcp9600.cpp +0 -2
  409. esphome/components/mcp9808/mcp9808.cpp +0 -2
  410. esphome/components/mdns/__init__.py +3 -0
  411. esphome/components/mdns/mdns_component.cpp +2 -0
  412. esphome/components/mdns/mdns_component.h +4 -0
  413. esphome/components/media_player/__init__.py +40 -0
  414. esphome/components/media_player/automation.h +16 -0
  415. esphome/components/media_player/media_player.cpp +13 -0
  416. esphome/components/media_player/media_player.h +50 -3
  417. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  418. esphome/components/mics_4514/mics_4514.cpp +1 -6
  419. esphome/components/midea/ir_transmitter.h +4 -4
  420. esphome/components/mipi/__init__.py +416 -0
  421. esphome/components/mipi_dsi/__init__.py +5 -0
  422. esphome/components/mipi_dsi/display.py +233 -0
  423. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  424. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  425. esphome/components/mipi_dsi/models/__init__.py +0 -0
  426. esphome/components/mipi_dsi/models/guition.py +38 -0
  427. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  428. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  429. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  430. esphome/components/mipi_spi/__init__.py +0 -9
  431. esphome/components/mipi_spi/display.py +220 -256
  432. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  433. esphome/components/mipi_spi/mipi_spi.h +556 -108
  434. esphome/components/mipi_spi/models/__init__.py +0 -65
  435. esphome/components/mipi_spi/models/adafruit.py +30 -0
  436. esphome/components/mipi_spi/models/amoled.py +41 -5
  437. esphome/components/mipi_spi/models/ili.py +5 -5
  438. esphome/components/mipi_spi/models/jc.py +1 -3
  439. esphome/components/mipi_spi/models/lilygo.py +1 -1
  440. esphome/components/mipi_spi/models/waveshare.py +16 -1
  441. esphome/components/mixer/speaker/__init__.py +4 -5
  442. esphome/components/mlx90393/sensor.py +7 -5
  443. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  444. esphome/components/mlx90614/mlx90614.cpp +0 -1
  445. esphome/components/mmc5603/mmc5603.cpp +0 -1
  446. esphome/components/mmc5983/mmc5983.cpp +0 -2
  447. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  448. esphome/components/mpr121/__init__.py +7 -6
  449. esphome/components/mpr121/mpr121.cpp +0 -1
  450. esphome/components/mpu6050/mpu6050.cpp +0 -1
  451. esphome/components/mpu6886/mpu6886.cpp +0 -1
  452. esphome/components/mqtt/__init__.py +1 -2
  453. esphome/components/mqtt/mqtt_button.cpp +1 -1
  454. esphome/components/mqtt/mqtt_client.cpp +0 -1
  455. esphome/components/mqtt/mqtt_component.cpp +8 -14
  456. esphome/components/mqtt/mqtt_component.h +0 -7
  457. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  458. esphome/components/mqtt/mqtt_sensor.h +0 -1
  459. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  461. esphome/components/ms5611/ms5611.cpp +0 -1
  462. esphome/components/ms8607/ms8607.cpp +0 -1
  463. esphome/components/msa3xx/msa3xx.cpp +0 -2
  464. esphome/components/my9231/my9231.cpp +0 -2
  465. esphome/components/nau7802/nau7802.cpp +0 -1
  466. esphome/components/neopixelbus/light.py +3 -0
  467. esphome/components/network/util.cpp +29 -0
  468. esphome/components/nextion/nextion.cpp +2 -2
  469. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  470. esphome/components/npi19/npi19.cpp +0 -2
  471. esphome/components/nrf52/__init__.py +223 -0
  472. esphome/components/nrf52/boards.py +34 -0
  473. esphome/components/nrf52/const.py +18 -0
  474. esphome/components/nrf52/gpio.py +79 -0
  475. esphome/components/number/__init__.py +2 -1
  476. esphome/components/one_wire/__init__.py +1 -2
  477. esphome/components/one_wire/one_wire.cpp +0 -2
  478. esphome/components/one_wire/one_wire.h +0 -2
  479. esphome/components/opentherm/hub.cpp +0 -1
  480. esphome/components/opentherm/number/__init__.py +2 -2
  481. esphome/components/openthread/__init__.py +2 -3
  482. esphome/components/openthread/openthread.cpp +30 -13
  483. esphome/components/openthread/openthread.h +3 -0
  484. esphome/components/openthread/openthread_esp.cpp +3 -1
  485. esphome/components/opt3001/sensor.py +2 -6
  486. esphome/components/output/__init__.py +38 -0
  487. esphome/components/output/automation.h +24 -0
  488. esphome/components/output/switch/output_switch.cpp +0 -2
  489. esphome/components/packages/__init__.py +1 -2
  490. esphome/components/packet_transport/__init__.py +4 -3
  491. esphome/components/pca6416a/pca6416a.cpp +0 -1
  492. esphome/components/pca9554/pca9554.cpp +0 -1
  493. esphome/components/pca9685/pca9685_output.cpp +0 -2
  494. esphome/components/pcf85063/pcf85063.cpp +0 -1
  495. esphome/components/pcf8563/pcf8563.cpp +0 -1
  496. esphome/components/pcf8574/pcf8574.cpp +0 -1
  497. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  498. esphome/components/pipsolar/pipsolar.cpp +54 -42
  499. esphome/components/pipsolar/pipsolar.h +5 -4
  500. esphome/components/pipsolar/sensor/__init__.py +1 -1
  501. esphome/components/pm2005/pm2005.cpp +0 -1
  502. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  503. esphome/components/pmwcs3/sensor.py +1 -2
  504. esphome/components/pn532/pn532.cpp +0 -2
  505. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  506. esphome/components/power_supply/power_supply.cpp +7 -10
  507. esphome/components/power_supply/power_supply.h +1 -1
  508. esphome/components/psram/__init__.py +6 -1
  509. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  510. esphome/components/pulse_counter/sensor.py +9 -6
  511. esphome/components/pylontech/pylontech.cpp +0 -1
  512. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  513. esphome/components/qmp6988/qmp6988.cpp +0 -2
  514. esphome/components/qspi_dbi/display.py +2 -3
  515. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  516. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  517. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  518. esphome/components/rc522/rc522.cpp +9 -31
  519. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  520. esphome/components/remote_base/__init__.py +5 -6
  521. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  522. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  523. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  524. esphome/components/remote_transmitter/__init__.py +26 -0
  525. esphome/components/remote_transmitter/automation.h +18 -0
  526. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  527. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  528. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  529. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  530. esphome/components/resampler/speaker/__init__.py +4 -5
  531. esphome/components/rf_bridge/__init__.py +4 -8
  532. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  533. esphome/components/rp2040/__init__.py +3 -1
  534. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  535. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  536. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  537. esphome/components/rpi_dpi_rgb/display.py +13 -15
  538. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  539. esphome/components/runtime_stats/__init__.py +34 -0
  540. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  541. esphome/components/runtime_stats/runtime_stats.h +132 -0
  542. esphome/components/scd30/scd30.cpp +0 -2
  543. esphome/components/scd30/sensor.py +1 -2
  544. esphome/components/scd4x/scd4x.cpp +0 -1
  545. esphome/components/scd4x/sensor.py +1 -3
  546. esphome/components/sdl/display.py +3 -1
  547. esphome/components/sdl/sdl_esphome.cpp +0 -2
  548. esphome/components/sdp3x/sdp3x.cpp +0 -2
  549. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  550. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  551. esphome/components/select/__init__.py +2 -3
  552. esphome/components/select/select_traits.cpp +1 -1
  553. esphome/components/select/select_traits.h +1 -1
  554. esphome/components/sen0321/sen0321.cpp +0 -1
  555. esphome/components/sen5x/sen5x.cpp +0 -2
  556. esphome/components/senseair/senseair.cpp +7 -3
  557. esphome/components/senseair/senseair.h +11 -0
  558. esphome/components/sensor/__init__.py +36 -4
  559. esphome/components/sensor/filter.cpp +49 -10
  560. esphome/components/sensor/filter.h +22 -7
  561. esphome/components/sensor/sensor.cpp +0 -1
  562. esphome/components/sensor/sensor.h +0 -9
  563. esphome/components/sfa30/sfa30.cpp +0 -4
  564. esphome/components/sgp30/sgp30.cpp +0 -2
  565. esphome/components/sgp4x/sensor.py +1 -1
  566. esphome/components/sgp4x/sgp4x.cpp +0 -2
  567. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  568. esphome/components/sht3xd/sht3xd.cpp +0 -2
  569. esphome/components/sht4x/sht4x.cpp +0 -2
  570. esphome/components/shtcx/shtcx.cpp +0 -1
  571. esphome/components/sim800l/__init__.py +2 -4
  572. esphome/components/sm16716/sm16716.cpp +0 -1
  573. esphome/components/sm2135/sm2135.cpp +0 -1
  574. esphome/components/sm2235/sm2235.cpp +0 -1
  575. esphome/components/sm2335/sm2335.cpp +0 -1
  576. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  577. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  578. esphome/components/sntp/sntp_component.cpp +0 -1
  579. esphome/components/sound_level/sensor.py +1 -1
  580. esphome/components/speaker/media_player/__init__.py +21 -33
  581. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  582. esphome/components/spi/__init__.py +29 -13
  583. esphome/components/spi/spi.cpp +0 -2
  584. esphome/components/spi_device/spi_device.cpp +1 -4
  585. esphome/components/sprinkler/__init__.py +4 -4
  586. esphome/components/sps30/sps30.cpp +0 -1
  587. esphome/components/ssd1306_base/__init__.py +11 -11
  588. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  589. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  590. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  591. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  592. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  593. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  594. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  595. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  596. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  597. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  598. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  599. esphome/components/st7701s/display.py +10 -14
  600. esphome/components/st7701s/st7701s.cpp +0 -3
  601. esphome/components/st7735/st7735.cpp +0 -1
  602. esphome/components/st7789v/st7789v.cpp +0 -1
  603. esphome/components/st7920/st7920.cpp +0 -1
  604. esphome/components/status_led/light/status_led_light.cpp +0 -2
  605. esphome/components/status_led/status_led.cpp +0 -1
  606. esphome/components/stepper/__init__.py +2 -4
  607. esphome/components/sts3x/sts3x.cpp +0 -1
  608. esphome/components/substitutions/__init__.py +10 -16
  609. esphome/components/substitutions/jinja.py +24 -1
  610. esphome/components/sun/__init__.py +2 -3
  611. esphome/components/switch/__init__.py +31 -1
  612. esphome/components/switch/automation.h +24 -0
  613. esphome/components/switch/switch.cpp +8 -0
  614. esphome/components/switch/switch.h +8 -0
  615. esphome/components/sx126x/sx126x.cpp +0 -2
  616. esphome/components/sx127x/sx127x.cpp +0 -2
  617. esphome/components/sx1509/__init__.py +7 -5
  618. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  619. esphome/components/sx1509/sx1509.cpp +0 -2
  620. esphome/components/syslog/esphome_syslog.cpp +1 -1
  621. esphome/components/tc74/tc74.cpp +0 -1
  622. esphome/components/tca9548a/tca9548a.cpp +0 -1
  623. esphome/components/tca9555/tca9555.cpp +0 -1
  624. esphome/components/tcs34725/tcs34725.cpp +0 -1
  625. esphome/components/tee501/tee501.cpp +0 -1
  626. esphome/components/tem3200/tem3200.cpp +0 -2
  627. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  628. esphome/components/template/cover/template_cover.cpp +0 -1
  629. esphome/components/template/select/template_select.cpp +0 -1
  630. esphome/components/template/text/template_text.cpp +0 -2
  631. esphome/components/template/valve/template_valve.cpp +0 -1
  632. esphome/components/text/__init__.py +0 -1
  633. esphome/components/text/text_traits.h +2 -0
  634. esphome/components/text_sensor/__init__.py +2 -1
  635. esphome/components/text_sensor/text_sensor.cpp +0 -2
  636. esphome/components/text_sensor/text_sensor.h +0 -8
  637. esphome/components/thermostat/climate.py +4 -4
  638. esphome/components/time/__init__.py +7 -4
  639. esphome/components/time/real_time_clock.cpp +16 -3
  640. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  641. esphome/components/tlc5947/tlc5947.cpp +0 -2
  642. esphome/components/tlc5971/tlc5971.cpp +0 -2
  643. esphome/components/tm1621/tm1621.cpp +0 -2
  644. esphome/components/tm1637/tm1637.cpp +0 -2
  645. esphome/components/tm1638/tm1638.cpp +0 -2
  646. esphome/components/tm1651/__init__.py +45 -48
  647. esphome/components/tm1651/tm1651.cpp +213 -47
  648. esphome/components/tm1651/tm1651.h +37 -32
  649. esphome/components/tmp117/tmp117.cpp +0 -2
  650. esphome/components/tsl2561/tsl2561.cpp +0 -1
  651. esphome/components/tsl2591/tsl2591.cpp +0 -1
  652. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  653. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  654. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  655. esphome/components/tuya/climate/__init__.py +9 -10
  656. esphome/components/tuya/number/__init__.py +8 -6
  657. esphome/components/tx20/tx20.cpp +0 -1
  658. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  659. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  660. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  661. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  662. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  663. esphome/components/udp/__init__.py +1 -1
  664. esphome/components/ufire_ec/sensor.py +1 -2
  665. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  666. esphome/components/ufire_ise/sensor.py +1 -2
  667. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  668. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  669. esphome/components/update/__init__.py +0 -1
  670. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  671. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  672. esphome/components/usb_host/usb_host_client.cpp +0 -1
  673. esphome/components/usb_host/usb_host_component.cpp +0 -1
  674. esphome/components/valve/__init__.py +0 -1
  675. esphome/components/veml3235/veml3235.cpp +0 -3
  676. esphome/components/veml7700/veml7700.cpp +0 -2
  677. esphome/components/version/version_text_sensor.cpp +0 -1
  678. esphome/components/version/version_text_sensor.h +0 -1
  679. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  680. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  681. esphome/components/web_server/__init__.py +13 -0
  682. esphome/components/web_server/web_server.cpp +188 -353
  683. esphome/components/web_server/web_server.h +61 -1
  684. esphome/components/web_server_base/__init__.py +1 -1
  685. esphome/components/web_server_base/web_server_base.cpp +2 -0
  686. esphome/components/web_server_base/web_server_base.h +6 -0
  687. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  688. esphome/components/web_server_idf/web_server_idf.h +2 -0
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  690. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  691. esphome/components/wifi/__init__.py +17 -43
  692. esphome/components/wifi/wifi_component.cpp +100 -36
  693. esphome/components/wifi/wifi_component.h +5 -1
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  695. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  696. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  697. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  698. esphome/components/wireguard/wireguard.cpp +0 -2
  699. esphome/components/x9c/x9c.cpp +0 -2
  700. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  701. esphome/components/xl9535/xl9535.cpp +0 -2
  702. esphome/components/zephyr/__init__.py +252 -0
  703. esphome/components/zephyr/const.py +16 -0
  704. esphome/components/zephyr/core.cpp +90 -0
  705. esphome/components/zephyr/gpio.cpp +120 -0
  706. esphome/components/zephyr/gpio.h +38 -0
  707. esphome/components/zephyr/pre_build.py.script +4 -0
  708. esphome/components/zephyr/preferences.cpp +156 -0
  709. esphome/components/zephyr/preferences.h +13 -0
  710. esphome/config.py +38 -16
  711. esphome/config_helpers.py +1 -2
  712. esphome/config_validation.py +12 -16
  713. esphome/const.py +26 -1
  714. esphome/core/__init__.py +92 -51
  715. esphome/core/application.cpp +75 -21
  716. esphome/core/application.h +106 -171
  717. esphome/core/color.h +10 -0
  718. esphome/core/component.cpp +41 -25
  719. esphome/core/component.h +9 -6
  720. esphome/core/component_iterator.cpp +61 -261
  721. esphome/core/component_iterator.h +15 -0
  722. esphome/core/config.py +26 -11
  723. esphome/core/defines.h +40 -2
  724. esphome/core/entity_base.h +18 -0
  725. esphome/core/entity_helpers.py +45 -10
  726. esphome/core/helpers.cpp +8 -15
  727. esphome/core/helpers.h +60 -6
  728. esphome/core/lock_free_queue.h +1 -1
  729. esphome/core/scheduler.cpp +311 -77
  730. esphome/core/scheduler.h +141 -28
  731. esphome/cpp_generator.py +2 -6
  732. esphome/cpp_helpers.py +1 -1
  733. esphome/dashboard/dashboard.py +2 -3
  734. esphome/dashboard/dns.py +2 -8
  735. esphome/dashboard/web_server.py +34 -19
  736. esphome/espota2.py +1 -4
  737. esphome/git.py +3 -1
  738. esphome/helpers.py +23 -4
  739. esphome/log.py +3 -1
  740. esphome/mqtt.py +3 -5
  741. esphome/platformio_api.py +7 -4
  742. esphome/types.py +12 -0
  743. esphome/util.py +20 -8
  744. esphome/voluptuous_schema.py +4 -3
  745. esphome/vscode.py +1 -2
  746. esphome/wizard.py +1 -4
  747. esphome/writer.py +16 -108
  748. esphome/yaml_util.py +7 -5
  749. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
  750. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/RECORD +755 -675
  751. esphome/components/mipi_spi/models/commands.py +0 -82
  752. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  753. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
  754. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
  755. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
  756. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
@@ -3,16 +3,14 @@
3
3
  #ifdef USE_ESP32
4
4
 
5
5
  #include <cstddef> // for offsetof
6
- #include <vector>
7
-
6
+ #include <cstring> // for memcpy
8
7
  #include <esp_gap_ble_api.h>
9
8
  #include <esp_gattc_api.h>
10
9
  #include <esp_gatts_api.h>
11
10
 
12
11
  #include "ble_scan_result.h"
13
12
 
14
- namespace esphome {
15
- namespace esp32_ble {
13
+ namespace esphome::esp32_ble {
16
14
 
17
15
  // Compile-time verification that ESP-IDF scan complete events only contain a status field
18
16
  // This ensures our reinterpret_cast in ble.cpp is safe
@@ -63,10 +61,24 @@ static_assert(offsetof(esp_ble_gap_cb_param_t, read_rssi_cmpl.rssi) == sizeof(es
63
61
  static_assert(offsetof(esp_ble_gap_cb_param_t, read_rssi_cmpl.remote_addr) == sizeof(esp_bt_status_t) + sizeof(int8_t),
64
62
  "remote_addr must follow rssi in read_rssi_cmpl");
65
63
 
64
+ // Param struct sizes on ESP32
65
+ static constexpr size_t GATTC_PARAM_SIZE = 28;
66
+ static constexpr size_t GATTS_PARAM_SIZE = 32;
67
+
68
+ // Maximum size for inline storage of data
69
+ // GATTC: 80 - 28 (param) - 8 (other fields) = 44 bytes for data
70
+ // GATTS: 80 - 32 (param) - 8 (other fields) = 40 bytes for data
71
+ static constexpr size_t GATTC_INLINE_DATA_SIZE = 44;
72
+ static constexpr size_t GATTS_INLINE_DATA_SIZE = 40;
73
+
74
+ // Verify param struct sizes
75
+ static_assert(sizeof(esp_ble_gattc_cb_param_t) == GATTC_PARAM_SIZE, "GATTC param size unexpected");
76
+ static_assert(sizeof(esp_ble_gatts_cb_param_t) == GATTS_PARAM_SIZE, "GATTS param size unexpected");
77
+
66
78
  // Received GAP, GATTC and GATTS events are only queued, and get processed in the main loop().
67
79
  // This class stores each event with minimal memory usage.
68
- // GAP events (99% of traffic) don't have the vector overhead.
69
- // GATTC/GATTS events use heap allocation for their param and data.
80
+ // GAP events (99% of traffic) don't have the heap allocation overhead.
81
+ // GATTC/GATTS events use heap allocation for their param and inline storage for small data.
70
82
  //
71
83
  // Event flow:
72
84
  // 1. ESP-IDF BLE stack calls our static handlers in the BLE task context
@@ -113,21 +125,21 @@ class BLEEvent {
113
125
  this->init_gap_data_(e, p);
114
126
  }
115
127
 
116
- // Constructor for GATTC events - uses heap allocation
117
- // IMPORTANT: The heap allocation is REQUIRED and must not be removed as an optimization.
118
- // The param pointer from ESP-IDF is only valid during the callback execution.
119
- // Since BLE events are processed asynchronously in the main loop, we must create
120
- // our own copy to ensure the data remains valid until the event is processed.
128
+ // Constructor for GATTC events - param stored inline, data may use heap
129
+ // IMPORTANT: We MUST copy the param struct because the pointer from ESP-IDF
130
+ // is only valid during the callback execution. Since BLE events are processed
131
+ // asynchronously in the main loop, we store our own copy inline to ensure
132
+ // the data remains valid until the event is processed.
121
133
  BLEEvent(esp_gattc_cb_event_t e, esp_gatt_if_t i, esp_ble_gattc_cb_param_t *p) {
122
134
  this->type_ = GATTC;
123
135
  this->init_gattc_data_(e, i, p);
124
136
  }
125
137
 
126
- // Constructor for GATTS events - uses heap allocation
127
- // IMPORTANT: The heap allocation is REQUIRED and must not be removed as an optimization.
128
- // The param pointer from ESP-IDF is only valid during the callback execution.
129
- // Since BLE events are processed asynchronously in the main loop, we must create
130
- // our own copy to ensure the data remains valid until the event is processed.
138
+ // Constructor for GATTS events - param stored inline, data may use heap
139
+ // IMPORTANT: We MUST copy the param struct because the pointer from ESP-IDF
140
+ // is only valid during the callback execution. Since BLE events are processed
141
+ // asynchronously in the main loop, we store our own copy inline to ensure
142
+ // the data remains valid until the event is processed.
131
143
  BLEEvent(esp_gatts_cb_event_t e, esp_gatt_if_t i, esp_ble_gatts_cb_param_t *p) {
132
144
  this->type_ = GATTS;
133
145
  this->init_gatts_data_(e, i, p);
@@ -137,25 +149,32 @@ class BLEEvent {
137
149
  ~BLEEvent() { this->release(); }
138
150
 
139
151
  // Default constructor for pre-allocation in pool
140
- BLEEvent() : type_(GAP) {}
152
+ BLEEvent() : event_{}, type_(GAP) {}
141
153
 
142
154
  // Invoked on return to EventPool - clean up any heap-allocated data
143
155
  void release() {
144
- if (this->type_ == GAP) {
145
- return;
146
- }
147
- if (this->type_ == GATTC) {
148
- delete this->event_.gattc.gattc_param;
149
- delete this->event_.gattc.data;
150
- this->event_.gattc.gattc_param = nullptr;
151
- this->event_.gattc.data = nullptr;
152
- return;
153
- }
154
- if (this->type_ == GATTS) {
155
- delete this->event_.gatts.gatts_param;
156
- delete this->event_.gatts.data;
157
- this->event_.gatts.gatts_param = nullptr;
158
- this->event_.gatts.data = nullptr;
156
+ switch (this->type_) {
157
+ case GAP:
158
+ // GAP events don't have heap allocations
159
+ break;
160
+ case GATTC:
161
+ // Param is now stored inline, only delete heap data if it was heap-allocated
162
+ if (!this->event_.gattc.is_inline && this->event_.gattc.data.heap_data != nullptr) {
163
+ delete[] this->event_.gattc.data.heap_data;
164
+ }
165
+ // Clear critical fields to prevent issues if type changes
166
+ this->event_.gattc.is_inline = false;
167
+ this->event_.gattc.data.heap_data = nullptr;
168
+ break;
169
+ case GATTS:
170
+ // Param is now stored inline, only delete heap data if it was heap-allocated
171
+ if (!this->event_.gatts.is_inline && this->event_.gatts.data.heap_data != nullptr) {
172
+ delete[] this->event_.gatts.data.heap_data;
173
+ }
174
+ // Clear critical fields to prevent issues if type changes
175
+ this->event_.gatts.is_inline = false;
176
+ this->event_.gatts.data.heap_data = nullptr;
177
+ break;
159
178
  }
160
179
  }
161
180
 
@@ -207,20 +226,30 @@ class BLEEvent {
207
226
 
208
227
  // NOLINTNEXTLINE(readability-identifier-naming)
209
228
  struct gattc_event {
210
- esp_gattc_cb_event_t gattc_event;
211
- esp_gatt_if_t gattc_if;
212
- esp_ble_gattc_cb_param_t *gattc_param; // Heap-allocated
213
- std::vector<uint8_t> *data; // Heap-allocated
214
- } gattc; // 16 bytes (pointers only)
229
+ esp_ble_gattc_cb_param_t gattc_param; // Stored inline (28 bytes)
230
+ esp_gattc_cb_event_t gattc_event; // 4 bytes
231
+ union {
232
+ uint8_t *heap_data; // 4 bytes when heap-allocated
233
+ uint8_t inline_data[GATTC_INLINE_DATA_SIZE]; // 44 bytes when stored inline
234
+ } data; // 44 bytes total
235
+ uint16_t data_len; // 2 bytes
236
+ esp_gatt_if_t gattc_if; // 1 byte
237
+ bool is_inline; // 1 byte - true when data is stored inline
238
+ } gattc; // Total: 80 bytes
215
239
 
216
240
  // NOLINTNEXTLINE(readability-identifier-naming)
217
241
  struct gatts_event {
218
- esp_gatts_cb_event_t gatts_event;
219
- esp_gatt_if_t gatts_if;
220
- esp_ble_gatts_cb_param_t *gatts_param; // Heap-allocated
221
- std::vector<uint8_t> *data; // Heap-allocated
222
- } gatts; // 16 bytes (pointers only)
223
- } event_; // 80 bytes
242
+ esp_ble_gatts_cb_param_t gatts_param; // Stored inline (32 bytes)
243
+ esp_gatts_cb_event_t gatts_event; // 4 bytes
244
+ union {
245
+ uint8_t *heap_data; // 4 bytes when heap-allocated
246
+ uint8_t inline_data[GATTS_INLINE_DATA_SIZE]; // 40 bytes when stored inline
247
+ } data; // 40 bytes total
248
+ uint16_t data_len; // 2 bytes
249
+ esp_gatt_if_t gatts_if; // 1 byte
250
+ bool is_inline; // 1 byte - true when data is stored inline
251
+ } gatts; // Total: 80 bytes
252
+ } event_; // 80 bytes
224
253
 
225
254
  ble_event_t type_;
226
255
 
@@ -234,6 +263,29 @@ class BLEEvent {
234
263
  const esp_ble_sec_t &security() const { return event_.gap.security; }
235
264
 
236
265
  private:
266
+ // Helper to copy data with inline storage optimization
267
+ template<typename EventStruct, size_t InlineSize>
268
+ void copy_data_with_inline_storage_(EventStruct &event, const uint8_t *src_data, uint16_t len,
269
+ uint8_t **param_value_ptr) {
270
+ event.data_len = len;
271
+ if (len > 0) {
272
+ if (len <= InlineSize) {
273
+ event.is_inline = true;
274
+ memcpy(event.data.inline_data, src_data, len);
275
+ *param_value_ptr = event.data.inline_data;
276
+ } else {
277
+ event.is_inline = false;
278
+ event.data.heap_data = new uint8_t[len];
279
+ memcpy(event.data.heap_data, src_data, len);
280
+ *param_value_ptr = event.data.heap_data;
281
+ }
282
+ } else {
283
+ event.is_inline = false;
284
+ event.data.heap_data = nullptr;
285
+ *param_value_ptr = nullptr;
286
+ }
287
+ }
288
+
237
289
  // Initialize GAP event data
238
290
  void init_gap_data_(esp_gap_ble_cb_event_t e, esp_ble_gap_cb_param_t *p) {
239
291
  this->event_.gap.gap_event = e;
@@ -318,35 +370,38 @@ class BLEEvent {
318
370
  this->event_.gattc.gattc_if = i;
319
371
 
320
372
  if (p == nullptr) {
321
- this->event_.gattc.gattc_param = nullptr;
322
- this->event_.gattc.data = nullptr;
373
+ // Zero out the param struct when null
374
+ memset(&this->event_.gattc.gattc_param, 0, sizeof(this->event_.gattc.gattc_param));
375
+ this->event_.gattc.is_inline = false;
376
+ this->event_.gattc.data.heap_data = nullptr;
377
+ this->event_.gattc.data_len = 0;
323
378
  return; // Invalid event, but we can't log in header file
324
379
  }
325
380
 
326
- // Heap-allocate param and data
327
- // Heap allocation is used because GATTC/GATTS events are rare (<1% of events)
328
- // while GAP events (99%) are stored inline to minimize memory usage
329
- // IMPORTANT: This heap allocation provides clear ownership semantics:
330
- // - The BLEEvent owns the allocated memory for its lifetime
331
- // - The data remains valid from the BLE callback context until processed in the main loop
332
- // - Without this copy, we'd have use-after-free bugs as ESP-IDF reuses the callback memory
333
- this->event_.gattc.gattc_param = new esp_ble_gattc_cb_param_t(*p);
381
+ // Copy param struct inline (no heap allocation!)
382
+ // GATTC/GATTS events are rare (<1% of events) but we can still store them inline
383
+ // along with small data payloads, eliminating all heap allocations for typical BLE operations
384
+ // CRITICAL: This copy is REQUIRED for memory safety - the ESP-IDF param pointer
385
+ // is only valid during the callback and will be reused/freed after we return
386
+ this->event_.gattc.gattc_param = *p;
334
387
 
335
388
  // Copy data for events that need it
336
389
  // The param struct contains pointers (e.g., notify.value) that point to temporary buffers.
337
390
  // We must copy this data to ensure it remains valid when the event is processed later.
338
391
  switch (e) {
339
392
  case ESP_GATTC_NOTIFY_EVT:
340
- this->event_.gattc.data = new std::vector<uint8_t>(p->notify.value, p->notify.value + p->notify.value_len);
341
- this->event_.gattc.gattc_param->notify.value = this->event_.gattc.data->data();
393
+ copy_data_with_inline_storage_<decltype(this->event_.gattc), GATTC_INLINE_DATA_SIZE>(
394
+ this->event_.gattc, p->notify.value, p->notify.value_len, &this->event_.gattc.gattc_param.notify.value);
342
395
  break;
343
396
  case ESP_GATTC_READ_CHAR_EVT:
344
397
  case ESP_GATTC_READ_DESCR_EVT:
345
- this->event_.gattc.data = new std::vector<uint8_t>(p->read.value, p->read.value + p->read.value_len);
346
- this->event_.gattc.gattc_param->read.value = this->event_.gattc.data->data();
398
+ copy_data_with_inline_storage_<decltype(this->event_.gattc), GATTC_INLINE_DATA_SIZE>(
399
+ this->event_.gattc, p->read.value, p->read.value_len, &this->event_.gattc.gattc_param.read.value);
347
400
  break;
348
401
  default:
349
- this->event_.gattc.data = nullptr;
402
+ this->event_.gattc.is_inline = false;
403
+ this->event_.gattc.data.heap_data = nullptr;
404
+ this->event_.gattc.data_len = 0;
350
405
  break;
351
406
  }
352
407
  }
@@ -357,30 +412,33 @@ class BLEEvent {
357
412
  this->event_.gatts.gatts_if = i;
358
413
 
359
414
  if (p == nullptr) {
360
- this->event_.gatts.gatts_param = nullptr;
361
- this->event_.gatts.data = nullptr;
415
+ // Zero out the param struct when null
416
+ memset(&this->event_.gatts.gatts_param, 0, sizeof(this->event_.gatts.gatts_param));
417
+ this->event_.gatts.is_inline = false;
418
+ this->event_.gatts.data.heap_data = nullptr;
419
+ this->event_.gatts.data_len = 0;
362
420
  return; // Invalid event, but we can't log in header file
363
421
  }
364
422
 
365
- // Heap-allocate param and data
366
- // Heap allocation is used because GATTC/GATTS events are rare (<1% of events)
367
- // while GAP events (99%) are stored inline to minimize memory usage
368
- // IMPORTANT: This heap allocation provides clear ownership semantics:
369
- // - The BLEEvent owns the allocated memory for its lifetime
370
- // - The data remains valid from the BLE callback context until processed in the main loop
371
- // - Without this copy, we'd have use-after-free bugs as ESP-IDF reuses the callback memory
372
- this->event_.gatts.gatts_param = new esp_ble_gatts_cb_param_t(*p);
423
+ // Copy param struct inline (no heap allocation!)
424
+ // GATTC/GATTS events are rare (<1% of events) but we can still store them inline
425
+ // along with small data payloads, eliminating all heap allocations for typical BLE operations
426
+ // CRITICAL: This copy is REQUIRED for memory safety - the ESP-IDF param pointer
427
+ // is only valid during the callback and will be reused/freed after we return
428
+ this->event_.gatts.gatts_param = *p;
373
429
 
374
430
  // Copy data for events that need it
375
431
  // The param struct contains pointers (e.g., write.value) that point to temporary buffers.
376
432
  // We must copy this data to ensure it remains valid when the event is processed later.
377
433
  switch (e) {
378
434
  case ESP_GATTS_WRITE_EVT:
379
- this->event_.gatts.data = new std::vector<uint8_t>(p->write.value, p->write.value + p->write.len);
380
- this->event_.gatts.gatts_param->write.value = this->event_.gatts.data->data();
435
+ copy_data_with_inline_storage_<decltype(this->event_.gatts), GATTS_INLINE_DATA_SIZE>(
436
+ this->event_.gatts, p->write.value, p->write.len, &this->event_.gatts.gatts_param.write.value);
381
437
  break;
382
438
  default:
383
- this->event_.gatts.data = nullptr;
439
+ this->event_.gatts.is_inline = false;
440
+ this->event_.gatts.data.heap_data = nullptr;
441
+ this->event_.gatts.data_len = 0;
384
442
  break;
385
443
  }
386
444
  }
@@ -390,12 +448,20 @@ class BLEEvent {
390
448
  // The gap member in the union should be 80 bytes (including the gap_event enum)
391
449
  static_assert(sizeof(decltype(((BLEEvent *) nullptr)->event_.gap)) <= 80, "gap_event struct has grown beyond 80 bytes");
392
450
 
451
+ // Verify GATTC and GATTS structs don't exceed GAP struct size
452
+ // This ensures the union size is determined by GAP (the most common event type)
453
+ static_assert(sizeof(decltype(((BLEEvent *) nullptr)->event_.gattc)) <=
454
+ sizeof(decltype(((BLEEvent *) nullptr)->event_.gap)),
455
+ "gattc_event struct exceeds gap_event size - union size would increase");
456
+ static_assert(sizeof(decltype(((BLEEvent *) nullptr)->event_.gatts)) <=
457
+ sizeof(decltype(((BLEEvent *) nullptr)->event_.gap)),
458
+ "gatts_event struct exceeds gap_event size - union size would increase");
459
+
393
460
  // Verify esp_ble_sec_t fits within our union
394
461
  static_assert(sizeof(esp_ble_sec_t) <= 73, "esp_ble_sec_t is larger than BLEScanResult");
395
462
 
396
463
  // BLEEvent total size: 84 bytes (80 byte union + 1 byte type + 3 bytes padding)
397
464
 
398
- } // namespace esp32_ble
399
- } // namespace esphome
465
+ } // namespace esphome::esp32_ble
400
466
 
401
467
  #endif
@@ -4,8 +4,7 @@
4
4
 
5
5
  #include <esp_gap_ble_api.h>
6
6
 
7
- namespace esphome {
8
- namespace esp32_ble {
7
+ namespace esphome::esp32_ble {
9
8
 
10
9
  // Structure for BLE scan results - only fields we actually use
11
10
  struct __attribute__((packed)) BLEScanResult {
@@ -18,7 +17,6 @@ struct __attribute__((packed)) BLEScanResult {
18
17
  uint8_t search_evt;
19
18
  }; // ~73 bytes vs ~400 bytes for full esp_ble_gap_cb_param_t
20
19
 
21
- } // namespace esp32_ble
22
- } // namespace esphome
20
+ } // namespace esphome::esp32_ble
23
21
 
24
22
  #endif
@@ -1,14 +1,14 @@
1
1
  #include "ble_uuid.h"
2
2
 
3
3
  #ifdef USE_ESP32
4
+ #ifdef USE_ESP32_BLE_UUID
4
5
 
5
6
  #include <cstring>
6
7
  #include <cstdio>
7
8
  #include <cinttypes>
8
9
  #include "esphome/core/log.h"
9
10
 
10
- namespace esphome {
11
- namespace esp32_ble {
11
+ namespace esphome::esp32_ble {
12
12
 
13
13
  static const char *const TAG = "esp32_ble";
14
14
 
@@ -189,7 +189,7 @@ std::string ESPBTUUID::to_string() const {
189
189
  return "";
190
190
  }
191
191
 
192
- } // namespace esp32_ble
193
- } // namespace esphome
192
+ } // namespace esphome::esp32_ble
194
193
 
195
- #endif
194
+ #endif // USE_ESP32_BLE_UUID
195
+ #endif // USE_ESP32
@@ -1,15 +1,16 @@
1
1
  #pragma once
2
2
 
3
+ #include "esphome/core/defines.h"
3
4
  #include "esphome/core/hal.h"
4
5
  #include "esphome/core/helpers.h"
5
6
 
6
7
  #ifdef USE_ESP32
8
+ #ifdef USE_ESP32_BLE_UUID
7
9
 
8
10
  #include <string>
9
11
  #include <esp_bt_defs.h>
10
12
 
11
- namespace esphome {
12
- namespace esp32_ble {
13
+ namespace esphome::esp32_ble {
13
14
 
14
15
  class ESPBTUUID {
15
16
  public:
@@ -41,7 +42,7 @@ class ESPBTUUID {
41
42
  esp_bt_uuid_t uuid_;
42
43
  };
43
44
 
44
- } // namespace esp32_ble
45
- } // namespace esphome
45
+ } // namespace esphome::esp32_ble
46
46
 
47
- #endif
47
+ #endif // USE_ESP32_BLE_UUID
48
+ #endif // USE_ESP32
@@ -65,6 +65,8 @@ FINAL_VALIDATE_SCHEMA = esp32_ble.validate_variant
65
65
 
66
66
 
67
67
  async def to_code(config):
68
+ cg.add_define("USE_ESP32_BLE_UUID")
69
+
68
70
  uuid = config[CONF_UUID].hex
69
71
  uuid_arr = [
70
72
  cg.RawExpression(f"0x{uuid[i : i + 2]}") for i in range(0, len(uuid), 2)
@@ -82,6 +84,8 @@ async def to_code(config):
82
84
  cg.add(var.set_measured_power(config[CONF_MEASURED_POWER]))
83
85
  cg.add(var.set_tx_power(config[CONF_TX_POWER]))
84
86
 
87
+ cg.add_define("USE_ESP32_BLE_ADVERTISING")
88
+
85
89
  if CORE.using_esp_idf:
86
90
  add_idf_sdkconfig_option("CONFIG_BT_ENABLED", True)
87
91
  add_idf_sdkconfig_option("CONFIG_BT_BLE_42_FEATURES_SUPPORTED", True)
@@ -2,7 +2,7 @@ import esphome.codegen as cg
2
2
  from esphome.components import esp32_ble_tracker
3
3
 
4
4
  AUTO_LOAD = ["esp32_ble_tracker"]
5
- CODEOWNERS = ["@jesserockz"]
5
+ CODEOWNERS = ["@jesserockz", "@bdraco"]
6
6
  DEPENDENCIES = ["esp32"]
7
7
 
8
8
  esp32_ble_client_ns = cg.esphome_ns.namespace("esp32_ble_client")
@@ -5,9 +5,9 @@
5
5
  #include "esphome/core/log.h"
6
6
 
7
7
  #ifdef USE_ESP32
8
+ #ifdef USE_ESP32_BLE_DEVICE
8
9
 
9
- namespace esphome {
10
- namespace esp32_ble_client {
10
+ namespace esphome::esp32_ble_client {
11
11
 
12
12
  static const char *const TAG = "esp32_ble_client";
13
13
 
@@ -93,7 +93,7 @@ esp_err_t BLECharacteristic::write_value(uint8_t *new_val, int16_t new_val_size)
93
93
  return write_value(new_val, new_val_size, ESP_GATT_WRITE_TYPE_NO_RSP);
94
94
  }
95
95
 
96
- } // namespace esp32_ble_client
97
- } // namespace esphome
96
+ } // namespace esphome::esp32_ble_client
98
97
 
98
+ #endif // USE_ESP32_BLE_DEVICE
99
99
  #endif // USE_ESP32
@@ -1,6 +1,9 @@
1
1
  #pragma once
2
2
 
3
+ #include "esphome/core/defines.h"
4
+
3
5
  #ifdef USE_ESP32
6
+ #ifdef USE_ESP32_BLE_DEVICE
4
7
 
5
8
  #include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h"
6
9
 
@@ -8,8 +11,7 @@
8
11
 
9
12
  #include <vector>
10
13
 
11
- namespace esphome {
12
- namespace esp32_ble_client {
14
+ namespace esphome::esp32_ble_client {
13
15
 
14
16
  namespace espbt = esphome::esp32_ble_tracker;
15
17
 
@@ -33,7 +35,7 @@ class BLECharacteristic {
33
35
  BLEService *service;
34
36
  };
35
37
 
36
- } // namespace esp32_ble_client
37
- } // namespace esphome
38
+ } // namespace esphome::esp32_ble_client
38
39
 
40
+ #endif // USE_ESP32_BLE_DEVICE
39
41
  #endif // USE_ESP32