esphome 2025.7.4__py3-none-any.whl → 2025.8.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 (754) hide show
  1. esphome/__main__.py +189 -82
  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 +112 -56
  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 +488 -118
  73. esphome/components/atm90e32/atm90e32.h +44 -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 +387 -82
  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 +199 -58
  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 +40 -2
  149. esphome/components/esp32_ble/ble.cpp +12 -8
  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 +2 -4
  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/font/__init__.py +9 -1
  209. esphome/components/fs3000/fs3000.cpp +0 -2
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  211. esphome/components/ft63x6/ft63x6.cpp +0 -1
  212. esphome/components/gdk101/gdk101.cpp +0 -1
  213. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  214. esphome/components/gl_r01_i2c/sensor.py +1 -1
  215. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  216. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  217. esphome/components/gpio_expander/cached_gpio.h +24 -15
  218. esphome/components/gps/__init__.py +6 -2
  219. esphome/components/gps/gps.cpp +50 -49
  220. esphome/components/gps/gps.h +4 -8
  221. esphome/components/gps/time/gps_time.cpp +3 -9
  222. esphome/components/gps/time/gps_time.h +4 -7
  223. esphome/components/graph/__init__.py +1 -1
  224. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  228. esphome/components/haier/climate.py +5 -10
  229. esphome/components/haier/haier_base.cpp +0 -1
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  231. esphome/components/hdc1080/hdc1080.cpp +0 -2
  232. esphome/components/heatpumpir/climate.py +2 -2
  233. esphome/components/hlw8012/hlw8012.cpp +0 -1
  234. esphome/components/hm3301/hm3301.cpp +0 -1
  235. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  236. esphome/components/homeassistant/__init__.py +1 -0
  237. esphome/components/homeassistant/number/__init__.py +1 -0
  238. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  239. esphome/components/homeassistant/switch/__init__.py +1 -0
  240. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  241. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  242. esphome/components/host/__init__.py +2 -0
  243. esphome/components/hte501/hte501.cpp +0 -1
  244. esphome/components/http_request/__init__.py +2 -3
  245. esphome/components/http_request/http_request_idf.cpp +2 -2
  246. esphome/components/htu21d/htu21d.cpp +0 -2
  247. esphome/components/htu31d/htu31d.cpp +0 -2
  248. esphome/components/hx711/hx711.cpp +0 -1
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  250. esphome/components/hydreon_rgxx/sensor.py +4 -5
  251. esphome/components/i2c/i2c_bus.h +1 -1
  252. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  253. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  254. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  255. esphome/components/i2s_audio/__init__.py +6 -5
  256. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  258. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +46 -19
  260. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  262. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  263. esphome/components/ili9xxx/display.py +4 -3
  264. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  265. esphome/components/image/__init__.py +123 -92
  266. esphome/components/improv_serial/__init__.py +7 -8
  267. esphome/components/ina219/ina219.cpp +0 -1
  268. esphome/components/ina226/ina226.cpp +0 -2
  269. esphome/components/ina260/ina260.cpp +0 -2
  270. esphome/components/ina2xx_base/__init__.py +2 -5
  271. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  272. esphome/components/ina3221/ina3221.cpp +0 -1
  273. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  274. esphome/components/interval/interval.h +5 -9
  275. esphome/components/json/__init__.py +1 -1
  276. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  277. esphome/components/lc709203f/lc709203f.cpp +0 -2
  278. esphome/components/lcd_gpio/display.py +1 -3
  279. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  280. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  281. esphome/components/ld2410/__init__.py +4 -6
  282. esphome/components/ld2410/binary_sensor.py +4 -0
  283. esphome/components/ld2410/ld2410.cpp +56 -100
  284. esphome/components/ld2410/ld2410.h +17 -15
  285. esphome/components/ld2410/sensor.py +24 -10
  286. esphome/components/ld2412/__init__.py +46 -0
  287. esphome/components/ld2412/binary_sensor.py +70 -0
  288. esphome/components/ld2412/button/__init__.py +74 -0
  289. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  290. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  291. esphome/components/ld2412/button/query_button.cpp +9 -0
  292. esphome/components/ld2412/button/query_button.h +18 -0
  293. esphome/components/ld2412/button/restart_button.cpp +9 -0
  294. esphome/components/ld2412/button/restart_button.h +18 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  296. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  297. esphome/components/ld2412/ld2412.cpp +861 -0
  298. esphome/components/ld2412/ld2412.h +141 -0
  299. esphome/components/ld2412/number/__init__.py +126 -0
  300. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  301. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  302. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  303. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  305. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  306. esphome/components/ld2412/select/__init__.py +82 -0
  307. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  308. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  309. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  310. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  311. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  312. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  313. esphome/components/ld2412/sensor.py +124 -0
  314. esphome/components/ld2412/switch/__init__.py +45 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  316. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  318. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  319. esphome/components/ld2412/text_sensor.py +34 -0
  320. esphome/components/ld2420/ld2420.cpp +0 -1
  321. esphome/components/ld2450/__init__.py +3 -4
  322. esphome/components/ld2450/binary_sensor.py +3 -0
  323. esphome/components/ld2450/ld2450.cpp +77 -165
  324. esphome/components/ld2450/ld2450.h +26 -54
  325. esphome/components/ld2450/sensor.py +120 -6
  326. esphome/components/ld2450/text_sensor.py +5 -4
  327. esphome/components/ld24xx/__init__.py +1 -0
  328. esphome/components/ld24xx/ld24xx.h +65 -0
  329. esphome/components/ledc/ledc_output.cpp +0 -1
  330. esphome/components/libretiny/__init__.py +2 -0
  331. esphome/components/light/__init__.py +0 -1
  332. esphome/components/light/effects.py +70 -45
  333. esphome/components/light/light_call.cpp +101 -66
  334. esphome/components/light/light_color_values.h +16 -11
  335. esphome/components/light/light_json_schema.cpp +46 -44
  336. esphome/components/light/light_state.cpp +8 -11
  337. esphome/components/light/light_traits.h +17 -0
  338. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  339. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  340. esphome/components/lock/__init__.py +0 -1
  341. esphome/components/logger/__init__.py +31 -9
  342. esphome/components/logger/logger.cpp +12 -7
  343. esphome/components/logger/logger.h +25 -14
  344. esphome/components/logger/logger_esp32.cpp +2 -7
  345. esphome/components/logger/logger_esp8266.cpp +2 -4
  346. esphome/components/logger/logger_host.cpp +2 -4
  347. esphome/components/logger/logger_libretiny.cpp +2 -4
  348. esphome/components/logger/logger_rp2040.cpp +2 -4
  349. esphome/components/logger/logger_zephyr.cpp +86 -0
  350. esphome/components/logger/select/logger_level_select.cpp +2 -4
  351. esphome/components/logger/select/logger_level_select.h +2 -4
  352. esphome/components/logger/task_log_buffer.cpp +2 -4
  353. esphome/components/logger/task_log_buffer.h +2 -4
  354. esphome/components/lps22/sensor.py +5 -5
  355. esphome/components/ltr390/ltr390.cpp +0 -2
  356. esphome/components/ltr501/ltr501.cpp +0 -1
  357. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  358. esphome/components/lvgl/__init__.py +14 -13
  359. esphome/components/lvgl/automation.py +2 -4
  360. esphome/components/lvgl/defines.py +0 -2
  361. esphome/components/lvgl/helpers.py +1 -1
  362. esphome/components/lvgl/lv_validation.py +7 -4
  363. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  364. esphome/components/lvgl/styles.py +2 -2
  365. esphome/components/lvgl/types.py +1 -1
  366. esphome/components/lvgl/widgets/__init__.py +2 -2
  367. esphome/components/lvgl/widgets/arc.py +14 -11
  368. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  369. esphome/components/lvgl/widgets/qrcode.py +7 -7
  370. esphome/components/lvgl/widgets/spinner.py +6 -6
  371. esphome/components/lvgl/widgets/switch.py +2 -2
  372. esphome/components/lvgl/widgets/tabview.py +3 -3
  373. esphome/components/lvgl/widgets/tileview.py +15 -7
  374. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  375. esphome/components/matrix_keypad/__init__.py +4 -3
  376. esphome/components/max17043/max17043.cpp +0 -2
  377. esphome/components/max31855/max31855.cpp +1 -4
  378. esphome/components/max31856/max31856.cpp +0 -4
  379. esphome/components/max31865/max31865.cpp +0 -1
  380. esphome/components/max44009/max44009.cpp +0 -1
  381. esphome/components/max6675/max6675.cpp +1 -4
  382. esphome/components/max6956/max6956.cpp +0 -1
  383. esphome/components/max7219/max7219.cpp +0 -1
  384. esphome/components/max7219digit/display.py +1 -1
  385. esphome/components/max7219digit/max7219digit.cpp +0 -1
  386. esphome/components/max9611/max9611.cpp +0 -1
  387. esphome/components/mcp23008/__init__.py +1 -1
  388. esphome/components/mcp23008/mcp23008.cpp +0 -1
  389. esphome/components/mcp23016/mcp23016.cpp +0 -1
  390. esphome/components/mcp23017/__init__.py +1 -1
  391. esphome/components/mcp23017/mcp23017.cpp +0 -1
  392. esphome/components/mcp23s08/__init__.py +1 -1
  393. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  394. esphome/components/mcp23s17/__init__.py +1 -1
  395. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  396. esphome/components/mcp23x08_base/__init__.py +2 -0
  397. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  398. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  399. esphome/components/mcp23x17_base/__init__.py +2 -0
  400. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  401. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  402. esphome/components/mcp23xxx_base/__init__.py +11 -5
  403. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  404. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  405. esphome/components/mcp3008/mcp3008.cpp +1 -4
  406. esphome/components/mcp3204/mcp3204.cpp +1 -4
  407. esphome/components/mcp4461/mcp4461.cpp +0 -1
  408. esphome/components/mcp4725/mcp4725.cpp +0 -1
  409. esphome/components/mcp4728/mcp4728.cpp +0 -1
  410. esphome/components/mcp9600/mcp9600.cpp +0 -2
  411. esphome/components/mcp9808/mcp9808.cpp +0 -2
  412. esphome/components/mdns/__init__.py +3 -0
  413. esphome/components/mdns/mdns_component.cpp +2 -0
  414. esphome/components/mdns/mdns_component.h +4 -0
  415. esphome/components/media_player/__init__.py +40 -0
  416. esphome/components/media_player/automation.h +16 -0
  417. esphome/components/media_player/media_player.cpp +13 -0
  418. esphome/components/media_player/media_player.h +50 -3
  419. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  420. esphome/components/mics_4514/mics_4514.cpp +1 -6
  421. esphome/components/midea/ir_transmitter.h +4 -4
  422. esphome/components/mipi/__init__.py +416 -0
  423. esphome/components/mipi_dsi/__init__.py +5 -0
  424. esphome/components/mipi_dsi/display.py +233 -0
  425. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  426. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  427. esphome/components/mipi_dsi/models/__init__.py +0 -0
  428. esphome/components/mipi_dsi/models/guition.py +38 -0
  429. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  430. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  431. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  432. esphome/components/mipi_spi/__init__.py +0 -9
  433. esphome/components/mipi_spi/display.py +220 -256
  434. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  435. esphome/components/mipi_spi/mipi_spi.h +556 -108
  436. esphome/components/mipi_spi/models/__init__.py +0 -65
  437. esphome/components/mipi_spi/models/adafruit.py +30 -0
  438. esphome/components/mipi_spi/models/amoled.py +41 -5
  439. esphome/components/mipi_spi/models/ili.py +5 -5
  440. esphome/components/mipi_spi/models/jc.py +1 -3
  441. esphome/components/mipi_spi/models/lilygo.py +1 -1
  442. esphome/components/mipi_spi/models/waveshare.py +16 -1
  443. esphome/components/mixer/speaker/__init__.py +4 -5
  444. esphome/components/mlx90393/sensor.py +7 -5
  445. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  446. esphome/components/mlx90614/mlx90614.cpp +0 -1
  447. esphome/components/mmc5603/mmc5603.cpp +0 -1
  448. esphome/components/mmc5983/mmc5983.cpp +0 -2
  449. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  450. esphome/components/mpr121/__init__.py +7 -6
  451. esphome/components/mpr121/mpr121.cpp +0 -1
  452. esphome/components/mpu6050/mpu6050.cpp +0 -1
  453. esphome/components/mpu6886/mpu6886.cpp +0 -1
  454. esphome/components/mqtt/__init__.py +1 -2
  455. esphome/components/mqtt/mqtt_button.cpp +1 -1
  456. esphome/components/mqtt/mqtt_client.cpp +0 -1
  457. esphome/components/mqtt/mqtt_component.cpp +8 -14
  458. esphome/components/mqtt/mqtt_component.h +0 -7
  459. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_sensor.h +0 -1
  461. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  462. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  463. esphome/components/ms5611/ms5611.cpp +0 -1
  464. esphome/components/ms8607/ms8607.cpp +0 -1
  465. esphome/components/msa3xx/msa3xx.cpp +0 -2
  466. esphome/components/my9231/my9231.cpp +0 -2
  467. esphome/components/nau7802/nau7802.cpp +0 -1
  468. esphome/components/neopixelbus/light.py +3 -0
  469. esphome/components/network/util.cpp +29 -0
  470. esphome/components/nextion/nextion.cpp +0 -1
  471. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  472. esphome/components/npi19/npi19.cpp +0 -2
  473. esphome/components/nrf52/__init__.py +223 -0
  474. esphome/components/nrf52/boards.py +34 -0
  475. esphome/components/nrf52/const.py +18 -0
  476. esphome/components/nrf52/gpio.py +79 -0
  477. esphome/components/number/__init__.py +2 -1
  478. esphome/components/one_wire/__init__.py +1 -2
  479. esphome/components/one_wire/one_wire.cpp +0 -2
  480. esphome/components/one_wire/one_wire.h +0 -2
  481. esphome/components/opentherm/hub.cpp +0 -1
  482. esphome/components/opentherm/number/__init__.py +2 -2
  483. esphome/components/openthread/__init__.py +2 -3
  484. esphome/components/openthread/openthread.cpp +30 -13
  485. esphome/components/openthread/openthread.h +3 -0
  486. esphome/components/openthread/openthread_esp.cpp +3 -1
  487. esphome/components/opt3001/sensor.py +2 -6
  488. esphome/components/output/__init__.py +38 -0
  489. esphome/components/output/automation.h +24 -0
  490. esphome/components/output/switch/output_switch.cpp +0 -2
  491. esphome/components/packages/__init__.py +1 -2
  492. esphome/components/packet_transport/__init__.py +4 -3
  493. esphome/components/pca6416a/pca6416a.cpp +0 -1
  494. esphome/components/pca9554/pca9554.cpp +0 -1
  495. esphome/components/pca9685/pca9685_output.cpp +0 -2
  496. esphome/components/pcf85063/pcf85063.cpp +0 -1
  497. esphome/components/pcf8563/pcf8563.cpp +0 -1
  498. esphome/components/pcf8574/pcf8574.cpp +0 -1
  499. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  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 +2 -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/sensor/__init__.py +36 -4
  557. esphome/components/sensor/filter.cpp +49 -10
  558. esphome/components/sensor/filter.h +22 -7
  559. esphome/components/sensor/sensor.cpp +0 -1
  560. esphome/components/sensor/sensor.h +0 -9
  561. esphome/components/sfa30/sfa30.cpp +0 -4
  562. esphome/components/sgp30/sgp30.cpp +0 -2
  563. esphome/components/sgp4x/sensor.py +1 -1
  564. esphome/components/sgp4x/sgp4x.cpp +0 -2
  565. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  566. esphome/components/sht3xd/sht3xd.cpp +0 -2
  567. esphome/components/sht4x/sht4x.cpp +0 -2
  568. esphome/components/shtcx/shtcx.cpp +0 -1
  569. esphome/components/sim800l/__init__.py +2 -4
  570. esphome/components/sm16716/sm16716.cpp +0 -1
  571. esphome/components/sm2135/sm2135.cpp +0 -1
  572. esphome/components/sm2235/sm2235.cpp +0 -1
  573. esphome/components/sm2335/sm2335.cpp +0 -1
  574. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  575. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  576. esphome/components/sntp/sntp_component.cpp +0 -1
  577. esphome/components/sound_level/sensor.py +1 -1
  578. esphome/components/speaker/media_player/__init__.py +21 -33
  579. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  580. esphome/components/spi/__init__.py +29 -13
  581. esphome/components/spi/spi.cpp +0 -2
  582. esphome/components/spi_device/spi_device.cpp +1 -4
  583. esphome/components/sprinkler/__init__.py +4 -4
  584. esphome/components/sps30/sps30.cpp +0 -1
  585. esphome/components/ssd1306_base/__init__.py +11 -11
  586. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  587. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  588. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  589. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  590. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  591. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  592. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  593. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  594. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  595. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  596. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  597. esphome/components/st7701s/display.py +10 -14
  598. esphome/components/st7701s/st7701s.cpp +0 -3
  599. esphome/components/st7735/st7735.cpp +0 -1
  600. esphome/components/st7789v/st7789v.cpp +0 -1
  601. esphome/components/st7920/st7920.cpp +0 -1
  602. esphome/components/status_led/light/status_led_light.cpp +0 -2
  603. esphome/components/status_led/status_led.cpp +0 -1
  604. esphome/components/stepper/__init__.py +2 -4
  605. esphome/components/sts3x/sts3x.cpp +0 -1
  606. esphome/components/substitutions/__init__.py +10 -16
  607. esphome/components/substitutions/jinja.py +24 -1
  608. esphome/components/sun/__init__.py +2 -3
  609. esphome/components/switch/__init__.py +31 -1
  610. esphome/components/switch/automation.h +24 -0
  611. esphome/components/switch/switch.cpp +8 -0
  612. esphome/components/switch/switch.h +8 -0
  613. esphome/components/sx126x/sx126x.cpp +0 -2
  614. esphome/components/sx127x/sx127x.cpp +0 -2
  615. esphome/components/sx1509/__init__.py +7 -5
  616. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  617. esphome/components/sx1509/sx1509.cpp +0 -2
  618. esphome/components/syslog/esphome_syslog.cpp +1 -1
  619. esphome/components/tc74/tc74.cpp +0 -1
  620. esphome/components/tca9548a/tca9548a.cpp +0 -1
  621. esphome/components/tca9555/tca9555.cpp +0 -1
  622. esphome/components/tcs34725/tcs34725.cpp +0 -1
  623. esphome/components/tee501/tee501.cpp +0 -1
  624. esphome/components/tem3200/tem3200.cpp +0 -2
  625. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  626. esphome/components/template/cover/template_cover.cpp +0 -1
  627. esphome/components/template/select/template_select.cpp +0 -1
  628. esphome/components/template/text/template_text.cpp +0 -2
  629. esphome/components/template/valve/template_valve.cpp +0 -1
  630. esphome/components/text/__init__.py +0 -1
  631. esphome/components/text/text_traits.h +2 -0
  632. esphome/components/text_sensor/__init__.py +2 -1
  633. esphome/components/text_sensor/text_sensor.cpp +0 -2
  634. esphome/components/text_sensor/text_sensor.h +0 -8
  635. esphome/components/thermostat/climate.py +4 -4
  636. esphome/components/time/__init__.py +7 -4
  637. esphome/components/time/real_time_clock.cpp +16 -3
  638. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  639. esphome/components/tlc5947/tlc5947.cpp +0 -2
  640. esphome/components/tlc5971/tlc5971.cpp +0 -2
  641. esphome/components/tm1621/tm1621.cpp +0 -2
  642. esphome/components/tm1637/tm1637.cpp +0 -2
  643. esphome/components/tm1638/tm1638.cpp +0 -2
  644. esphome/components/tm1651/__init__.py +45 -48
  645. esphome/components/tm1651/tm1651.cpp +213 -47
  646. esphome/components/tm1651/tm1651.h +37 -32
  647. esphome/components/tmp117/tmp117.cpp +0 -2
  648. esphome/components/tsl2561/tsl2561.cpp +0 -1
  649. esphome/components/tsl2591/tsl2591.cpp +0 -1
  650. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  651. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  652. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  653. esphome/components/tuya/climate/__init__.py +9 -10
  654. esphome/components/tuya/number/__init__.py +8 -6
  655. esphome/components/tx20/tx20.cpp +0 -1
  656. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  657. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  658. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  659. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  660. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  661. esphome/components/udp/__init__.py +1 -1
  662. esphome/components/ufire_ec/sensor.py +1 -2
  663. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  664. esphome/components/ufire_ise/sensor.py +1 -2
  665. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  666. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  667. esphome/components/update/__init__.py +0 -1
  668. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  669. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  670. esphome/components/usb_host/usb_host_client.cpp +0 -1
  671. esphome/components/usb_host/usb_host_component.cpp +0 -1
  672. esphome/components/valve/__init__.py +0 -1
  673. esphome/components/veml3235/veml3235.cpp +0 -3
  674. esphome/components/veml7700/veml7700.cpp +0 -2
  675. esphome/components/version/version_text_sensor.cpp +0 -1
  676. esphome/components/version/version_text_sensor.h +0 -1
  677. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  678. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  679. esphome/components/web_server/__init__.py +13 -0
  680. esphome/components/web_server/web_server.cpp +187 -352
  681. esphome/components/web_server/web_server.h +61 -1
  682. esphome/components/web_server_base/__init__.py +1 -1
  683. esphome/components/web_server_base/web_server_base.cpp +2 -0
  684. esphome/components/web_server_base/web_server_base.h +6 -0
  685. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  686. esphome/components/web_server_idf/web_server_idf.h +2 -0
  687. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  688. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  689. esphome/components/wifi/__init__.py +8 -43
  690. esphome/components/wifi/wifi_component.cpp +100 -36
  691. esphome/components/wifi/wifi_component.h +5 -1
  692. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  693. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  694. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  695. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  696. esphome/components/wireguard/wireguard.cpp +0 -2
  697. esphome/components/x9c/x9c.cpp +0 -2
  698. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  699. esphome/components/xl9535/xl9535.cpp +0 -2
  700. esphome/components/zephyr/__init__.py +252 -0
  701. esphome/components/zephyr/const.py +16 -0
  702. esphome/components/zephyr/core.cpp +90 -0
  703. esphome/components/zephyr/gpio.cpp +120 -0
  704. esphome/components/zephyr/gpio.h +38 -0
  705. esphome/components/zephyr/pre_build.py.script +4 -0
  706. esphome/components/zephyr/preferences.cpp +156 -0
  707. esphome/components/zephyr/preferences.h +13 -0
  708. esphome/config.py +38 -16
  709. esphome/config_helpers.py +1 -2
  710. esphome/config_validation.py +8 -15
  711. esphome/const.py +26 -1
  712. esphome/core/__init__.py +88 -51
  713. esphome/core/application.cpp +75 -21
  714. esphome/core/application.h +106 -171
  715. esphome/core/color.h +10 -0
  716. esphome/core/component.cpp +41 -25
  717. esphome/core/component.h +9 -6
  718. esphome/core/component_iterator.cpp +61 -261
  719. esphome/core/component_iterator.h +15 -0
  720. esphome/core/config.py +26 -11
  721. esphome/core/defines.h +40 -2
  722. esphome/core/entity_base.h +18 -0
  723. esphome/core/entity_helpers.py +41 -6
  724. esphome/core/helpers.cpp +8 -15
  725. esphome/core/helpers.h +60 -6
  726. esphome/core/lock_free_queue.h +1 -1
  727. esphome/core/scheduler.cpp +277 -74
  728. esphome/core/scheduler.h +89 -27
  729. esphome/cpp_generator.py +2 -6
  730. esphome/cpp_helpers.py +1 -1
  731. esphome/dashboard/dashboard.py +2 -3
  732. esphome/dashboard/dns.py +2 -8
  733. esphome/dashboard/web_server.py +34 -19
  734. esphome/espota2.py +1 -4
  735. esphome/git.py +3 -1
  736. esphome/helpers.py +23 -4
  737. esphome/log.py +3 -1
  738. esphome/mqtt.py +3 -5
  739. esphome/platformio_api.py +7 -4
  740. esphome/types.py +12 -0
  741. esphome/util.py +20 -8
  742. esphome/voluptuous_schema.py +4 -3
  743. esphome/vscode.py +1 -2
  744. esphome/wizard.py +1 -4
  745. esphome/writer.py +5 -107
  746. esphome/yaml_util.py +7 -5
  747. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
  748. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +753 -673
  749. esphome/components/mipi_spi/models/commands.py +0 -82
  750. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  751. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
  752. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
  753. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
  754. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
@@ -41,6 +41,7 @@ from esphome.const import (
41
41
  CONF_VALUE,
42
42
  CONF_WEB_SERVER,
43
43
  CONF_WINDOW_SIZE,
44
+ DEVICE_CLASS_ABSOLUTE_HUMIDITY,
44
45
  DEVICE_CLASS_APPARENT_POWER,
45
46
  DEVICE_CLASS_AQI,
46
47
  DEVICE_CLASS_AREA,
@@ -107,6 +108,7 @@ from esphome.util import Registry
107
108
 
108
109
  CODEOWNERS = ["@esphome/core"]
109
110
  DEVICE_CLASSES = [
111
+ DEVICE_CLASS_ABSOLUTE_HUMIDITY,
110
112
  DEVICE_CLASS_APPARENT_POWER,
111
113
  DEVICE_CLASS_AQI,
112
114
  DEVICE_CLASS_AREA,
@@ -254,6 +256,7 @@ OffsetFilter = sensor_ns.class_("OffsetFilter", Filter)
254
256
  MultiplyFilter = sensor_ns.class_("MultiplyFilter", Filter)
255
257
  FilterOutValueFilter = sensor_ns.class_("FilterOutValueFilter", Filter)
256
258
  ThrottleFilter = sensor_ns.class_("ThrottleFilter", Filter)
259
+ ThrottleWithPriorityFilter = sensor_ns.class_("ThrottleWithPriorityFilter", Filter)
257
260
  TimeoutFilter = sensor_ns.class_("TimeoutFilter", Filter, cg.Component)
258
261
  DebounceFilter = sensor_ns.class_("DebounceFilter", Filter, cg.Component)
259
262
  HeartbeatFilter = sensor_ns.class_("HeartbeatFilter", Filter, cg.Component)
@@ -330,6 +333,7 @@ def sensor_schema(
330
333
  device_class: str = cv.UNDEFINED,
331
334
  state_class: str = cv.UNDEFINED,
332
335
  entity_category: str = cv.UNDEFINED,
336
+ filters: list = cv.UNDEFINED,
333
337
  ) -> cv.Schema:
334
338
  schema = {}
335
339
 
@@ -344,6 +348,7 @@ def sensor_schema(
344
348
  (CONF_DEVICE_CLASS, device_class, validate_device_class),
345
349
  (CONF_STATE_CLASS, state_class, validate_state_class),
346
350
  (CONF_ENTITY_CATEGORY, entity_category, sensor_entity_category),
351
+ (CONF_FILTERS, filters, validate_filters),
347
352
  ]:
348
353
  if default is not cv.UNDEFINED:
349
354
  schema[cv.Optional(key, default=default)] = validator
@@ -591,6 +596,29 @@ async def throttle_filter_to_code(config, filter_id):
591
596
  return cg.new_Pvariable(filter_id, config)
592
597
 
593
598
 
599
+ THROTTLE_WITH_PRIORITY_SCHEMA = cv.maybe_simple_value(
600
+ {
601
+ cv.Required(CONF_TIMEOUT): cv.positive_time_period_milliseconds,
602
+ cv.Optional(CONF_VALUE, default="nan"): cv.Any(
603
+ cv.templatable(cv.float_), [cv.templatable(cv.float_)]
604
+ ),
605
+ },
606
+ key=CONF_TIMEOUT,
607
+ )
608
+
609
+
610
+ @FILTER_REGISTRY.register(
611
+ "throttle_with_priority",
612
+ ThrottleWithPriorityFilter,
613
+ THROTTLE_WITH_PRIORITY_SCHEMA,
614
+ )
615
+ async def throttle_with_priority_filter_to_code(config, filter_id):
616
+ if not isinstance(config[CONF_VALUE], list):
617
+ config[CONF_VALUE] = [config[CONF_VALUE]]
618
+ template_ = [await cg.templatable(x, [], float) for x in config[CONF_VALUE]]
619
+ return cg.new_Pvariable(filter_id, config[CONF_TIMEOUT], template_)
620
+
621
+
594
622
  @FILTER_REGISTRY.register(
595
623
  "heartbeat", HeartbeatFilter, cv.positive_time_period_milliseconds
596
624
  )
@@ -603,7 +631,9 @@ async def heartbeat_filter_to_code(config, filter_id):
603
631
  TIMEOUT_SCHEMA = cv.maybe_simple_value(
604
632
  {
605
633
  cv.Required(CONF_TIMEOUT): cv.positive_time_period_milliseconds,
606
- cv.Optional(CONF_VALUE, default="nan"): cv.templatable(cv.float_),
634
+ cv.Optional(CONF_VALUE, default="nan"): cv.Any(
635
+ "last", cv.templatable(cv.float_)
636
+ ),
607
637
  },
608
638
  key=CONF_TIMEOUT,
609
639
  )
@@ -611,8 +641,11 @@ TIMEOUT_SCHEMA = cv.maybe_simple_value(
611
641
 
612
642
  @FILTER_REGISTRY.register("timeout", TimeoutFilter, TIMEOUT_SCHEMA)
613
643
  async def timeout_filter_to_code(config, filter_id):
614
- template_ = await cg.templatable(config[CONF_VALUE], [], float)
615
- var = cg.new_Pvariable(filter_id, config[CONF_TIMEOUT], template_)
644
+ if config[CONF_VALUE] == "last":
645
+ var = cg.new_Pvariable(filter_id, config[CONF_TIMEOUT])
646
+ else:
647
+ template_ = await cg.templatable(config[CONF_VALUE], [], float)
648
+ var = cg.new_Pvariable(filter_id, config[CONF_TIMEOUT], template_)
616
649
  await cg.register_component(var, {})
617
650
  return var
618
651
 
@@ -1111,5 +1144,4 @@ def _lstsq(a, b):
1111
1144
 
1112
1145
  @coroutine_with_priority(100.0)
1113
1146
  async def to_code(config):
1114
- cg.add_define("USE_SENSOR")
1115
1147
  cg.add_global(sensor_ns.using)
@@ -1,5 +1,6 @@
1
1
  #include "filter.h"
2
2
  #include <cmath>
3
+ #include "esphome/core/application.h"
3
4
  #include "esphome/core/hal.h"
4
5
  #include "esphome/core/log.h"
5
6
  #include "sensor.h"
@@ -50,6 +51,7 @@ optional<float> MedianFilter::new_value(float value) {
50
51
  if (!this->queue_.empty()) {
51
52
  // Copy queue without NaN values
52
53
  std::vector<float> median_queue;
54
+ median_queue.reserve(this->queue_.size());
53
55
  for (auto v : this->queue_) {
54
56
  if (!std::isnan(v)) {
55
57
  median_queue.push_back(v);
@@ -223,7 +225,7 @@ optional<float> SlidingWindowMovingAverageFilter::new_value(float value) {
223
225
 
224
226
  // ExponentialMovingAverageFilter
225
227
  ExponentialMovingAverageFilter::ExponentialMovingAverageFilter(float alpha, size_t send_every, size_t send_first_at)
226
- : send_every_(send_every), send_at_(send_every - send_first_at), alpha_(alpha) {}
228
+ : alpha_(alpha), send_every_(send_every), send_at_(send_every - send_first_at) {}
227
229
  optional<float> ExponentialMovingAverageFilter::new_value(float value) {
228
230
  if (!std::isnan(value)) {
229
231
  if (this->first_value_) {
@@ -323,7 +325,7 @@ optional<float> FilterOutValueFilter::new_value(float value) {
323
325
  // ThrottleFilter
324
326
  ThrottleFilter::ThrottleFilter(uint32_t min_time_between_inputs) : min_time_between_inputs_(min_time_between_inputs) {}
325
327
  optional<float> ThrottleFilter::new_value(float value) {
326
- const uint32_t now = millis();
328
+ const uint32_t now = App.get_loop_component_start_time();
327
329
  if (this->last_input_ == 0 || now - this->last_input_ >= min_time_between_inputs_) {
328
330
  this->last_input_ = now;
329
331
  return value;
@@ -331,21 +333,53 @@ optional<float> ThrottleFilter::new_value(float value) {
331
333
  return {};
332
334
  }
333
335
 
336
+ // ThrottleWithPriorityFilter
337
+ ThrottleWithPriorityFilter::ThrottleWithPriorityFilter(uint32_t min_time_between_inputs,
338
+ std::vector<TemplatableValue<float>> prioritized_values)
339
+ : min_time_between_inputs_(min_time_between_inputs), prioritized_values_(std::move(prioritized_values)) {}
340
+
341
+ optional<float> ThrottleWithPriorityFilter::new_value(float value) {
342
+ bool is_prioritized_value = false;
343
+ int8_t accuracy = this->parent_->get_accuracy_decimals();
344
+ float accuracy_mult = powf(10.0f, accuracy);
345
+ const uint32_t now = App.get_loop_component_start_time();
346
+ // First, determine if the new value is one of the prioritized values
347
+ for (auto prioritized_value : this->prioritized_values_) {
348
+ if (std::isnan(prioritized_value.value())) {
349
+ if (std::isnan(value)) {
350
+ is_prioritized_value = true;
351
+ break;
352
+ }
353
+ continue;
354
+ }
355
+ float rounded_prioritized_value = roundf(accuracy_mult * prioritized_value.value());
356
+ float rounded_value = roundf(accuracy_mult * value);
357
+ if (rounded_prioritized_value == rounded_value) {
358
+ is_prioritized_value = true;
359
+ break;
360
+ }
361
+ }
362
+ // Finally, determine if the new value should be throttled and pass it through if not
363
+ if (this->last_input_ == 0 || now - this->last_input_ >= min_time_between_inputs_ || is_prioritized_value) {
364
+ this->last_input_ = now;
365
+ return value;
366
+ }
367
+ return {};
368
+ }
369
+
334
370
  // DeltaFilter
335
371
  DeltaFilter::DeltaFilter(float delta, bool percentage_mode)
336
- : delta_(delta), current_delta_(delta), percentage_mode_(percentage_mode), last_value_(NAN) {}
372
+ : delta_(delta), current_delta_(delta), last_value_(NAN), percentage_mode_(percentage_mode) {}
337
373
  optional<float> DeltaFilter::new_value(float value) {
338
374
  if (std::isnan(value)) {
339
375
  if (std::isnan(this->last_value_)) {
340
376
  return {};
341
377
  } else {
342
- if (this->percentage_mode_) {
343
- this->current_delta_ = fabsf(value * this->delta_);
344
- }
345
378
  return this->last_value_ = value;
346
379
  }
347
380
  }
348
- if (std::isnan(this->last_value_) || fabsf(value - this->last_value_) >= this->current_delta_) {
381
+ float diff = fabsf(value - this->last_value_);
382
+ if (std::isnan(this->last_value_) || (diff > 0.0f && diff >= this->current_delta_)) {
349
383
  if (this->percentage_mode_) {
350
384
  this->current_delta_ = fabsf(value * this->delta_);
351
385
  }
@@ -383,12 +417,17 @@ void OrFilter::initialize(Sensor *parent, Filter *next) {
383
417
 
384
418
  // TimeoutFilter
385
419
  optional<float> TimeoutFilter::new_value(float value) {
386
- this->set_timeout("timeout", this->time_period_, [this]() { this->output(this->value_.value()); });
420
+ if (this->value_.has_value()) {
421
+ this->set_timeout("timeout", this->time_period_, [this]() { this->output(this->value_.value().value()); });
422
+ } else {
423
+ this->set_timeout("timeout", this->time_period_, [this, value]() { this->output(value); });
424
+ }
387
425
  return value;
388
426
  }
389
427
 
390
- TimeoutFilter::TimeoutFilter(uint32_t time_period, TemplatableValue<float> new_value)
391
- : time_period_(time_period), value_(std::move(new_value)) {}
428
+ TimeoutFilter::TimeoutFilter(uint32_t time_period) : time_period_(time_period) {}
429
+ TimeoutFilter::TimeoutFilter(uint32_t time_period, const TemplatableValue<float> &new_value)
430
+ : time_period_(time_period), value_(new_value) {}
392
431
  float TimeoutFilter::get_setup_priority() const { return setup_priority::HARDWARE; }
393
432
 
394
433
  // DebounceFilter
@@ -221,11 +221,11 @@ class ExponentialMovingAverageFilter : public Filter {
221
221
  void set_alpha(float alpha);
222
222
 
223
223
  protected:
224
- bool first_value_{true};
225
224
  float accumulator_{NAN};
225
+ float alpha_;
226
226
  size_t send_every_;
227
227
  size_t send_at_;
228
- float alpha_;
228
+ bool first_value_{true};
229
229
  };
230
230
 
231
231
  /** Simple throttle average filter.
@@ -243,9 +243,9 @@ class ThrottleAverageFilter : public Filter, public Component {
243
243
  float get_setup_priority() const override;
244
244
 
245
245
  protected:
246
- uint32_t time_period_;
247
246
  float sum_{0.0f};
248
247
  unsigned int n_{0};
248
+ uint32_t time_period_;
249
249
  bool have_nan_{false};
250
250
  };
251
251
 
@@ -314,9 +314,24 @@ class ThrottleFilter : public Filter {
314
314
  uint32_t min_time_between_inputs_;
315
315
  };
316
316
 
317
+ /// Same as 'throttle' but will immediately publish values contained in `value_to_prioritize`.
318
+ class ThrottleWithPriorityFilter : public Filter {
319
+ public:
320
+ explicit ThrottleWithPriorityFilter(uint32_t min_time_between_inputs,
321
+ std::vector<TemplatableValue<float>> prioritized_values);
322
+
323
+ optional<float> new_value(float value) override;
324
+
325
+ protected:
326
+ uint32_t last_input_{0};
327
+ uint32_t min_time_between_inputs_;
328
+ std::vector<TemplatableValue<float>> prioritized_values_;
329
+ };
330
+
317
331
  class TimeoutFilter : public Filter, public Component {
318
332
  public:
319
- explicit TimeoutFilter(uint32_t time_period, TemplatableValue<float> new_value);
333
+ explicit TimeoutFilter(uint32_t time_period);
334
+ explicit TimeoutFilter(uint32_t time_period, const TemplatableValue<float> &new_value);
320
335
 
321
336
  optional<float> new_value(float value) override;
322
337
 
@@ -324,7 +339,7 @@ class TimeoutFilter : public Filter, public Component {
324
339
 
325
340
  protected:
326
341
  uint32_t time_period_;
327
- TemplatableValue<float> value_;
342
+ optional<TemplatableValue<float>> value_;
328
343
  };
329
344
 
330
345
  class DebounceFilter : public Filter, public Component {
@@ -364,8 +379,8 @@ class DeltaFilter : public Filter {
364
379
  protected:
365
380
  float delta_;
366
381
  float current_delta_;
367
- bool percentage_mode_;
368
382
  float last_value_{NAN};
383
+ bool percentage_mode_;
369
384
  };
370
385
 
371
386
  class OrFilter : public Filter {
@@ -387,8 +402,8 @@ class OrFilter : public Filter {
387
402
  };
388
403
 
389
404
  std::vector<Filter *> filters_;
390
- bool has_value_{false};
391
405
  PhiNode phi_;
406
+ bool has_value_{false};
392
407
  };
393
408
 
394
409
  class CalibrateLinearFilter : public Filter {
@@ -96,7 +96,6 @@ void Sensor::clear_filters() {
96
96
  }
97
97
  float Sensor::get_state() const { return this->state; }
98
98
  float Sensor::get_raw_state() const { return this->raw_state; }
99
- std::string Sensor::unique_id() { return ""; }
100
99
 
101
100
  void Sensor::internal_send_state_to_frontend(float state) {
102
101
  this->set_has_state(true);
@@ -28,9 +28,6 @@ namespace sensor {
28
28
  if (!(obj)->get_icon().empty()) { \
29
29
  ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().c_str()); \
30
30
  } \
31
- if (!(obj)->unique_id().empty()) { \
32
- ESP_LOGV(TAG, "%s Unique ID: '%s'", prefix, (obj)->unique_id().c_str()); \
33
- } \
34
31
  if ((obj)->get_force_update()) { \
35
32
  ESP_LOGV(TAG, "%s Force Update: YES", prefix); \
36
33
  } \
@@ -141,12 +138,6 @@ class Sensor : public EntityBase, public EntityBase_DeviceClass, public EntityBa
141
138
  */
142
139
  float raw_state;
143
140
 
144
- /** Override this method to set the unique ID of this sensor.
145
- *
146
- * @deprecated Do not use for new sensors, a suitable unique ID is automatically generated (2023.4).
147
- */
148
- virtual std::string unique_id();
149
-
150
141
  void internal_send_state_to_frontend(float state);
151
142
 
152
143
  protected:
@@ -11,8 +11,6 @@ static const uint16_t SFA30_CMD_START_CONTINUOUS_MEASUREMENTS = 0x0006;
11
11
  static const uint16_t SFA30_CMD_READ_MEASUREMENT = 0x0327;
12
12
 
13
13
  void SFA30Component::setup() {
14
- ESP_LOGCONFIG(TAG, "Running setup");
15
-
16
14
  // Serial Number identification
17
15
  uint16_t raw_device_marking[16];
18
16
  if (!this->get_register(SFA30_CMD_GET_DEVICE_MARKING, raw_device_marking, 16, 5)) {
@@ -34,8 +32,6 @@ void SFA30Component::setup() {
34
32
  this->mark_failed();
35
33
  return;
36
34
  }
37
-
38
- ESP_LOGD(TAG, "Sensor initialized");
39
35
  }
40
36
 
41
37
  void SFA30Component::dump_config() {
@@ -33,8 +33,6 @@ const uint32_t SHORTEST_BASELINE_STORE_INTERVAL = 3600;
33
33
  const uint32_t MAXIMUM_STORAGE_DIFF = 50;
34
34
 
35
35
  void SGP30Component::setup() {
36
- ESP_LOGCONFIG(TAG, "Running setup");
37
-
38
36
  // Serial Number identification
39
37
  uint16_t raw_serial_number[3];
40
38
  if (!this->get_register(SGP30_CMD_GET_SERIAL_ID, raw_serial_number, 3)) {
@@ -139,7 +139,7 @@ async def to_code(config):
139
139
  )
140
140
  )
141
141
  cg.add_library(
142
- None,
142
+ "Sensirion Gas Index Algorithm",
143
143
  None,
144
144
  "https://github.com/Sensirion/arduino-gas-index-algorithm.git#3.2.1",
145
145
  )
@@ -9,8 +9,6 @@ namespace sgp4x {
9
9
  static const char *const TAG = "sgp4x";
10
10
 
11
11
  void SGP4xComponent::setup() {
12
- ESP_LOGCONFIG(TAG, "Running setup");
13
-
14
12
  // Serial Number identification
15
13
  uint16_t raw_serial_number[3];
16
14
  if (!this->get_register(SGP4X_CMD_GET_SERIAL_ID, raw_serial_number, 3, 1)) {
@@ -101,8 +101,6 @@ void ShellyDimmer::setup() {
101
101
  this->pin_nrst_->setup();
102
102
  this->pin_boot0_->setup();
103
103
 
104
- ESP_LOGI(TAG, "Initializing");
105
-
106
104
  this->handle_firmware();
107
105
 
108
106
  this->send_settings_();
@@ -25,7 +25,6 @@ static const uint16_t SHT3XD_COMMAND_POLLING_H = 0x2400;
25
25
  static const uint16_t SHT3XD_COMMAND_FETCH_DATA = 0xE000;
26
26
 
27
27
  void SHT3XDComponent::setup() {
28
- ESP_LOGCONFIG(TAG, "Running setup");
29
28
  uint16_t raw_serial_number[2];
30
29
  if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER_CLOCK_STRETCHING, raw_serial_number, 2)) {
31
30
  this->error_code_ = READ_SERIAL_STRETCHED_FAILED;
@@ -61,7 +60,6 @@ void SHT3XDComponent::dump_config() {
61
60
  ESP_LOGE(TAG, " Communication with SHT3xD failed!");
62
61
  return;
63
62
  }
64
- ESP_LOGD(TAG, " Setup successful");
65
63
  ESP_LOGD(TAG, " Serial Number: 0x%08" PRIX32, this->serial_number_);
66
64
  ESP_LOGD(TAG, " Heater Enabled: %s", this->heater_enabled_ ? "true" : "false");
67
65
 
@@ -18,8 +18,6 @@ void SHT4XComponent::start_heater_() {
18
18
  }
19
19
 
20
20
  void SHT4XComponent::setup() {
21
- ESP_LOGCONFIG(TAG, "Running setup");
22
-
23
21
  auto err = this->write(nullptr, 0);
24
22
  if (err != i2c::ERROR_OK) {
25
23
  this->mark_failed();
@@ -25,7 +25,6 @@ inline const char *to_string(SHTCXType type) {
25
25
  }
26
26
 
27
27
  void SHTCXComponent::setup() {
28
- ESP_LOGCONFIG(TAG, "Running setup");
29
28
  this->wake_up();
30
29
  this->soft_reset();
31
30
 
@@ -171,8 +171,7 @@ async def sim800l_dial_to_code(config, action_id, template_arg, args):
171
171
  )
172
172
  async def sim800l_connect_to_code(config, action_id, template_arg, args):
173
173
  paren = await cg.get_variable(config[CONF_ID])
174
- var = cg.new_Pvariable(action_id, template_arg, paren)
175
- return var
174
+ return cg.new_Pvariable(action_id, template_arg, paren)
176
175
 
177
176
 
178
177
  SIM800L_SEND_USSD_SCHEMA = cv.Schema(
@@ -201,5 +200,4 @@ async def sim800l_send_ussd_to_code(config, action_id, template_arg, args):
201
200
  )
202
201
  async def sim800l_disconnect_to_code(config, action_id, template_arg, args):
203
202
  paren = await cg.get_variable(config[CONF_ID])
204
- var = cg.new_Pvariable(action_id, template_arg, paren)
205
- return var
203
+ return cg.new_Pvariable(action_id, template_arg, paren)
@@ -7,7 +7,6 @@ namespace sm16716 {
7
7
  static const char *const TAG = "sm16716";
8
8
 
9
9
  void SM16716::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  this->data_pin_->setup();
12
11
  this->data_pin_->digital_write(false);
13
12
  this->clock_pin_->setup();
@@ -20,7 +20,6 @@ static const uint8_t SM2135_RGB = 0x00; // RGB channel
20
20
  static const uint8_t SM2135_CW = 0x80; // CW channel (Chip default)
21
21
 
22
22
  void SM2135::setup() {
23
- ESP_LOGCONFIG(TAG, "Running setup");
24
23
  this->data_pin_->setup();
25
24
  this->data_pin_->digital_write(false);
26
25
  this->data_pin_->pin_mode(gpio::FLAG_OUTPUT);
@@ -7,7 +7,6 @@ namespace sm2235 {
7
7
  static const char *const TAG = "sm2235";
8
8
 
9
9
  void SM2235::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  this->data_pin_->setup();
12
11
  this->data_pin_->digital_write(true);
13
12
  this->clock_pin_->setup();
@@ -7,7 +7,6 @@ namespace sm2335 {
7
7
  static const char *const TAG = "sm2335";
8
8
 
9
9
  void SM2335::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  this->data_pin_->setup();
12
11
  this->data_pin_->digital_write(true);
13
12
  this->clock_pin_->setup();
@@ -7,7 +7,6 @@ namespace sn74hc165 {
7
7
  static const char *const TAG = "sn74hc165";
8
8
 
9
9
  void SN74HC165Component::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  // initialize pins
12
11
  this->clock_pin_->setup();
13
12
  this->data_pin_->setup();
@@ -8,7 +8,6 @@ namespace sn74hc595 {
8
8
  static const char *const TAG = "sn74hc595";
9
9
 
10
10
  void SN74HC595Component::pre_setup_() {
11
- ESP_LOGCONFIG(TAG, "Running setup");
12
11
  if (this->have_oe_pin_) { // disable output
13
12
  this->oe_pin_->setup();
14
13
  this->oe_pin_->digital_write(true);
@@ -15,7 +15,6 @@ namespace sntp {
15
15
  static const char *const TAG = "sntp";
16
16
 
17
17
  void SNTPComponent::setup() {
18
- ESP_LOGCONFIG(TAG, "Running setup");
19
18
  #if defined(USE_ESP32)
20
19
  if (esp_sntp_enabled()) {
21
20
  esp_sntp_stop();
@@ -12,7 +12,7 @@ from esphome.const import (
12
12
  UNIT_DECIBEL,
13
13
  )
14
14
 
15
- AUTOLOAD = ["audio"]
15
+ AUTO_LOAD = ["audio"]
16
16
  CODEOWNERS = ["@kahrendt"]
17
17
  DEPENDENCIES = ["microphone"]
18
18
 
@@ -155,8 +155,7 @@ def _read_audio_file_and_type(file_config):
155
155
  import puremagic
156
156
 
157
157
  file_type: str = puremagic.from_string(data)
158
- if file_type.startswith("."):
159
- file_type = file_type[1:]
158
+ file_type = file_type.removeprefix(".")
160
159
 
161
160
  media_file_type = audio.AUDIO_FILE_TYPE_ENUM["NONE"]
162
161
  if file_type in ("wav"):
@@ -204,13 +203,14 @@ def _validate_pipeline(config):
204
203
 
205
204
 
206
205
  def _validate_repeated_speaker(config):
207
- if (announcement_config := config.get(CONF_ANNOUNCEMENT_PIPELINE)) and (
208
- media_config := config.get(CONF_MEDIA_PIPELINE)
206
+ if (
207
+ (announcement_config := config.get(CONF_ANNOUNCEMENT_PIPELINE))
208
+ and (media_config := config.get(CONF_MEDIA_PIPELINE))
209
+ and announcement_config[CONF_SPEAKER] == media_config[CONF_SPEAKER]
209
210
  ):
210
- if announcement_config[CONF_SPEAKER] == media_config[CONF_SPEAKER]:
211
- raise cv.Invalid(
212
- "The announcement and media pipelines cannot use the same speaker. Use the `mixer` speaker component to create two source speakers."
213
- )
211
+ raise cv.Invalid(
212
+ "The announcement and media pipelines cannot use the same speaker. Use the `mixer` speaker component to create two source speakers."
213
+ )
214
214
 
215
215
  return config
216
216
 
@@ -315,31 +315,19 @@ async def to_code(config):
315
315
  cg.add_define("USE_AUDIO_FLAC_SUPPORT", True)
316
316
  cg.add_define("USE_AUDIO_MP3_SUPPORT", True)
317
317
 
318
- # Wifi settings based on https://github.com/espressif/esp-adf/issues/297#issuecomment-783811702
319
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM", 16)
320
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM", 512)
321
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_STATIC_TX_BUFFER", True)
322
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_TX_BUFFER_TYPE", 0)
323
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM", 8)
324
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM", 32)
325
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED", True)
326
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_TX_BA_WIN", 16)
327
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED", True)
328
- esp32.add_idf_sdkconfig_option("CONFIG_ESP32_WIFI_RX_BA_WIN", 32)
329
- esp32.add_idf_sdkconfig_option("CONFIG_LWIP_MAX_ACTIVE_TCP", 16)
330
- esp32.add_idf_sdkconfig_option("CONFIG_LWIP_MAX_LISTENING_TCP", 16)
331
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_MAXRTX", 12)
332
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_SYNMAXRTX", 6)
333
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_MSS", 1436)
334
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_MSL", 60000)
335
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_SND_BUF_DEFAULT", 65535)
336
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_WND_DEFAULT", 512000)
337
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_RECVMBOX_SIZE", 512)
338
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_QUEUE_OOSEQ", True)
339
- esp32.add_idf_sdkconfig_option("CONFIG_TCP_OVERSIZE_MSS", True)
340
- esp32.add_idf_sdkconfig_option("CONFIG_LWIP_WND_SCALE", True)
341
- esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_RCV_SCALE", 3)
342
- esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCPIP_RECVMBOX_SIZE", 512)
318
+ # Based on https://github.com/espressif/esp-idf/blob/release/v5.4/examples/wifi/iperf/sdkconfig.defaults.esp32
319
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM", 16)
320
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM", 64)
321
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM", 64)
322
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_AMPDU_TX_ENABLED", True)
323
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_TX_BA_WIN", 32)
324
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_AMPDU_RX_ENABLED", True)
325
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_RX_BA_WIN", 32)
326
+
327
+ esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_SND_BUF_DEFAULT", 65534)
328
+ esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_WND_DEFAULT", 65534)
329
+ esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_RECVMBOX_SIZE", 64)
330
+ esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCPIP_RECVMBOX_SIZE", 64)
343
331
 
344
332
  # Allocate wifi buffers in PSRAM
345
333
  esp32.add_idf_sdkconfig_option("CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP", True)
@@ -259,13 +259,10 @@ esp_err_t AudioPipeline::allocate_communications_() {
259
259
  esp_err_t AudioPipeline::start_tasks_() {
260
260
  if (this->read_task_handle_ == nullptr) {
261
261
  if (this->read_task_stack_buffer_ == nullptr) {
262
- if (this->task_stack_in_psram_) {
263
- RAMAllocator<StackType_t> stack_allocator(RAMAllocator<StackType_t>::ALLOC_EXTERNAL);
264
- this->read_task_stack_buffer_ = stack_allocator.allocate(READ_TASK_STACK_SIZE);
265
- } else {
266
- RAMAllocator<StackType_t> stack_allocator(RAMAllocator<StackType_t>::ALLOC_INTERNAL);
267
- this->read_task_stack_buffer_ = stack_allocator.allocate(READ_TASK_STACK_SIZE);
268
- }
262
+ // Reader task uses the AudioReader class which uses esp_http_client. This crashes on IDF 5.4 if the task stack is
263
+ // in PSRAM. As a workaround, always allocate the read task in internal memory.
264
+ RAMAllocator<StackType_t> stack_allocator(RAMAllocator<StackType_t>::ALLOC_INTERNAL);
265
+ this->read_task_stack_buffer_ = stack_allocator.allocate(READ_TASK_STACK_SIZE);
269
266
  }
270
267
 
271
268
  if (this->read_task_stack_buffer_ == nullptr) {