esphome 2025.7.4__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 (758) 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 +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 +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/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 +2 -2
  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/pipsolar.cpp +54 -42
  501. esphome/components/pipsolar/pipsolar.h +5 -4
  502. esphome/components/pipsolar/sensor/__init__.py +1 -1
  503. esphome/components/pm2005/pm2005.cpp +0 -1
  504. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  505. esphome/components/pmwcs3/sensor.py +1 -2
  506. esphome/components/pn532/pn532.cpp +0 -2
  507. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  508. esphome/components/power_supply/power_supply.cpp +7 -10
  509. esphome/components/power_supply/power_supply.h +1 -1
  510. esphome/components/psram/__init__.py +6 -1
  511. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  512. esphome/components/pulse_counter/sensor.py +9 -6
  513. esphome/components/pylontech/pylontech.cpp +0 -1
  514. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  515. esphome/components/qmp6988/qmp6988.cpp +0 -2
  516. esphome/components/qspi_dbi/display.py +2 -3
  517. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  518. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  519. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  520. esphome/components/rc522/rc522.cpp +9 -31
  521. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  522. esphome/components/remote_base/__init__.py +5 -6
  523. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  524. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  525. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  526. esphome/components/remote_transmitter/__init__.py +26 -0
  527. esphome/components/remote_transmitter/automation.h +18 -0
  528. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  529. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  530. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  531. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  532. esphome/components/resampler/speaker/__init__.py +4 -5
  533. esphome/components/rf_bridge/__init__.py +4 -8
  534. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  535. esphome/components/rp2040/__init__.py +3 -1
  536. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  537. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  538. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  539. esphome/components/rpi_dpi_rgb/display.py +13 -15
  540. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  541. esphome/components/runtime_stats/__init__.py +34 -0
  542. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  543. esphome/components/runtime_stats/runtime_stats.h +132 -0
  544. esphome/components/scd30/scd30.cpp +0 -2
  545. esphome/components/scd30/sensor.py +1 -2
  546. esphome/components/scd4x/scd4x.cpp +0 -1
  547. esphome/components/scd4x/sensor.py +1 -3
  548. esphome/components/sdl/display.py +3 -1
  549. esphome/components/sdl/sdl_esphome.cpp +0 -2
  550. esphome/components/sdp3x/sdp3x.cpp +0 -2
  551. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  552. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  553. esphome/components/select/__init__.py +2 -3
  554. esphome/components/select/select_traits.cpp +1 -1
  555. esphome/components/select/select_traits.h +1 -1
  556. esphome/components/sen0321/sen0321.cpp +0 -1
  557. esphome/components/sen5x/sen5x.cpp +0 -2
  558. esphome/components/senseair/senseair.cpp +7 -3
  559. esphome/components/senseair/senseair.h +11 -0
  560. esphome/components/sensor/__init__.py +36 -4
  561. esphome/components/sensor/filter.cpp +49 -10
  562. esphome/components/sensor/filter.h +22 -7
  563. esphome/components/sensor/sensor.cpp +0 -1
  564. esphome/components/sensor/sensor.h +0 -9
  565. esphome/components/sfa30/sfa30.cpp +0 -4
  566. esphome/components/sgp30/sgp30.cpp +0 -2
  567. esphome/components/sgp4x/sensor.py +1 -1
  568. esphome/components/sgp4x/sgp4x.cpp +0 -2
  569. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  570. esphome/components/sht3xd/sht3xd.cpp +0 -2
  571. esphome/components/sht4x/sht4x.cpp +0 -2
  572. esphome/components/shtcx/shtcx.cpp +0 -1
  573. esphome/components/sim800l/__init__.py +2 -4
  574. esphome/components/sm16716/sm16716.cpp +0 -1
  575. esphome/components/sm2135/sm2135.cpp +0 -1
  576. esphome/components/sm2235/sm2235.cpp +0 -1
  577. esphome/components/sm2335/sm2335.cpp +0 -1
  578. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  579. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  580. esphome/components/sntp/sntp_component.cpp +0 -1
  581. esphome/components/sound_level/sensor.py +1 -1
  582. esphome/components/speaker/media_player/__init__.py +21 -33
  583. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  584. esphome/components/spi/__init__.py +29 -13
  585. esphome/components/spi/spi.cpp +0 -2
  586. esphome/components/spi_device/spi_device.cpp +1 -4
  587. esphome/components/sprinkler/__init__.py +4 -4
  588. esphome/components/sps30/sps30.cpp +0 -1
  589. esphome/components/ssd1306_base/__init__.py +11 -11
  590. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  591. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  592. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  593. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  594. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  595. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  596. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  597. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  598. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  599. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  600. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  601. esphome/components/st7701s/display.py +10 -14
  602. esphome/components/st7701s/st7701s.cpp +0 -3
  603. esphome/components/st7735/st7735.cpp +0 -1
  604. esphome/components/st7789v/st7789v.cpp +0 -1
  605. esphome/components/st7920/st7920.cpp +0 -1
  606. esphome/components/status_led/light/status_led_light.cpp +0 -2
  607. esphome/components/status_led/status_led.cpp +0 -1
  608. esphome/components/stepper/__init__.py +2 -4
  609. esphome/components/sts3x/sts3x.cpp +0 -1
  610. esphome/components/substitutions/__init__.py +10 -16
  611. esphome/components/substitutions/jinja.py +24 -1
  612. esphome/components/sun/__init__.py +2 -3
  613. esphome/components/switch/__init__.py +31 -1
  614. esphome/components/switch/automation.h +24 -0
  615. esphome/components/switch/switch.cpp +8 -0
  616. esphome/components/switch/switch.h +8 -0
  617. esphome/components/sx126x/sx126x.cpp +0 -2
  618. esphome/components/sx127x/sx127x.cpp +0 -2
  619. esphome/components/sx1509/__init__.py +7 -5
  620. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  621. esphome/components/sx1509/sx1509.cpp +0 -2
  622. esphome/components/syslog/esphome_syslog.cpp +1 -1
  623. esphome/components/tc74/tc74.cpp +0 -1
  624. esphome/components/tca9548a/tca9548a.cpp +0 -1
  625. esphome/components/tca9555/tca9555.cpp +0 -1
  626. esphome/components/tcs34725/tcs34725.cpp +0 -1
  627. esphome/components/tee501/tee501.cpp +0 -1
  628. esphome/components/tem3200/tem3200.cpp +0 -2
  629. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  630. esphome/components/template/cover/template_cover.cpp +0 -1
  631. esphome/components/template/select/template_select.cpp +0 -1
  632. esphome/components/template/text/template_text.cpp +0 -2
  633. esphome/components/template/valve/template_valve.cpp +0 -1
  634. esphome/components/text/__init__.py +0 -1
  635. esphome/components/text/text_traits.h +2 -0
  636. esphome/components/text_sensor/__init__.py +2 -1
  637. esphome/components/text_sensor/text_sensor.cpp +0 -2
  638. esphome/components/text_sensor/text_sensor.h +0 -8
  639. esphome/components/thermostat/climate.py +4 -4
  640. esphome/components/time/__init__.py +7 -4
  641. esphome/components/time/real_time_clock.cpp +16 -3
  642. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  643. esphome/components/tlc5947/tlc5947.cpp +0 -2
  644. esphome/components/tlc5971/tlc5971.cpp +0 -2
  645. esphome/components/tm1621/tm1621.cpp +0 -2
  646. esphome/components/tm1637/tm1637.cpp +0 -2
  647. esphome/components/tm1638/tm1638.cpp +0 -2
  648. esphome/components/tm1651/__init__.py +45 -48
  649. esphome/components/tm1651/tm1651.cpp +213 -47
  650. esphome/components/tm1651/tm1651.h +37 -32
  651. esphome/components/tmp117/tmp117.cpp +0 -2
  652. esphome/components/tsl2561/tsl2561.cpp +0 -1
  653. esphome/components/tsl2591/tsl2591.cpp +0 -1
  654. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  655. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  656. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  657. esphome/components/tuya/climate/__init__.py +9 -10
  658. esphome/components/tuya/number/__init__.py +8 -6
  659. esphome/components/tx20/tx20.cpp +0 -1
  660. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  661. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  662. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  663. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  664. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  665. esphome/components/udp/__init__.py +1 -1
  666. esphome/components/ufire_ec/sensor.py +1 -2
  667. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  668. esphome/components/ufire_ise/sensor.py +1 -2
  669. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  670. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  671. esphome/components/update/__init__.py +0 -1
  672. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  673. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  674. esphome/components/usb_host/usb_host_client.cpp +0 -1
  675. esphome/components/usb_host/usb_host_component.cpp +0 -1
  676. esphome/components/valve/__init__.py +0 -1
  677. esphome/components/veml3235/veml3235.cpp +0 -3
  678. esphome/components/veml7700/veml7700.cpp +0 -2
  679. esphome/components/version/version_text_sensor.cpp +0 -1
  680. esphome/components/version/version_text_sensor.h +0 -1
  681. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  682. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  683. esphome/components/web_server/__init__.py +13 -0
  684. esphome/components/web_server/web_server.cpp +188 -353
  685. esphome/components/web_server/web_server.h +61 -1
  686. esphome/components/web_server_base/__init__.py +1 -1
  687. esphome/components/web_server_base/web_server_base.cpp +2 -0
  688. esphome/components/web_server_base/web_server_base.h +6 -0
  689. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  690. esphome/components/web_server_idf/web_server_idf.h +2 -0
  691. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  692. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  693. esphome/components/wifi/__init__.py +17 -43
  694. esphome/components/wifi/wifi_component.cpp +100 -36
  695. esphome/components/wifi/wifi_component.h +5 -1
  696. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  697. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  698. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  699. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  700. esphome/components/wireguard/wireguard.cpp +0 -2
  701. esphome/components/x9c/x9c.cpp +0 -2
  702. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  703. esphome/components/xl9535/xl9535.cpp +0 -2
  704. esphome/components/zephyr/__init__.py +252 -0
  705. esphome/components/zephyr/const.py +16 -0
  706. esphome/components/zephyr/core.cpp +90 -0
  707. esphome/components/zephyr/gpio.cpp +120 -0
  708. esphome/components/zephyr/gpio.h +38 -0
  709. esphome/components/zephyr/pre_build.py.script +4 -0
  710. esphome/components/zephyr/preferences.cpp +156 -0
  711. esphome/components/zephyr/preferences.h +13 -0
  712. esphome/config.py +38 -16
  713. esphome/config_helpers.py +1 -2
  714. esphome/config_validation.py +12 -16
  715. esphome/const.py +26 -1
  716. esphome/core/__init__.py +92 -51
  717. esphome/core/application.cpp +75 -21
  718. esphome/core/application.h +106 -171
  719. esphome/core/color.h +10 -0
  720. esphome/core/component.cpp +41 -25
  721. esphome/core/component.h +9 -6
  722. esphome/core/component_iterator.cpp +61 -261
  723. esphome/core/component_iterator.h +15 -0
  724. esphome/core/config.py +26 -11
  725. esphome/core/defines.h +40 -2
  726. esphome/core/entity_base.h +18 -0
  727. esphome/core/entity_helpers.py +45 -10
  728. esphome/core/helpers.cpp +8 -15
  729. esphome/core/helpers.h +60 -6
  730. esphome/core/lock_free_queue.h +1 -1
  731. esphome/core/scheduler.cpp +311 -77
  732. esphome/core/scheduler.h +141 -28
  733. esphome/cpp_generator.py +2 -6
  734. esphome/cpp_helpers.py +1 -1
  735. esphome/dashboard/dashboard.py +2 -3
  736. esphome/dashboard/dns.py +2 -8
  737. esphome/dashboard/web_server.py +34 -19
  738. esphome/espota2.py +1 -4
  739. esphome/git.py +3 -1
  740. esphome/helpers.py +23 -4
  741. esphome/log.py +3 -1
  742. esphome/mqtt.py +3 -5
  743. esphome/platformio_api.py +7 -4
  744. esphome/types.py +12 -0
  745. esphome/util.py +20 -8
  746. esphome/voluptuous_schema.py +4 -3
  747. esphome/vscode.py +1 -2
  748. esphome/wizard.py +1 -4
  749. esphome/writer.py +16 -108
  750. esphome/yaml_util.py +7 -5
  751. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
  752. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/RECORD +757 -677
  753. esphome/components/mipi_spi/models/commands.py +0 -82
  754. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  755. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
  756. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
  757. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
  758. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
@@ -72,70 +72,57 @@ class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Comp
72
72
 
73
73
  protected:
74
74
  /// @brief Function for the FreeRTOS task handling audio output.
75
- /// After receiving the COMMAND_START signal, allocates space for the buffers, starts the I2S driver, and reads
76
- /// audio from the ring buffer and writes audio to the I2S port. Stops immmiately after receiving the COMMAND_STOP
77
- /// signal and stops only after the ring buffer is empty after receiving the COMMAND_STOP_GRACEFULLY signal. Stops if
78
- /// the ring buffer hasn't read data for more than timeout_ milliseconds. When stopping, it deallocates the buffers,
79
- /// stops the I2S driver, unlocks the I2S port, and deletes the task. It communicates the state and any errors via
80
- /// event_group_.
75
+ /// Allocates space for the buffers, reads audio from the ring buffer and writes audio to the I2S port. Stops
76
+ /// immmiately after receiving the COMMAND_STOP signal and stops only after the ring buffer is empty after receiving
77
+ /// the COMMAND_STOP_GRACEFULLY signal. Stops if the ring buffer hasn't read data for more than timeout_ milliseconds.
78
+ /// When stopping, it deallocates the buffers. It communicates its state and any errors via ``event_group_``.
81
79
  /// @param params I2SAudioSpeaker component
82
80
  static void speaker_task(void *params);
83
81
 
84
- /// @brief Sends a stop command to the speaker task via event_group_.
82
+ /// @brief Sends a stop command to the speaker task via ``event_group_``.
85
83
  /// @param wait_on_empty If false, sends the COMMAND_STOP signal. If true, sends the COMMAND_STOP_GRACEFULLY signal.
86
84
  void stop_(bool wait_on_empty);
87
85
 
88
- /// @brief Sets the corresponding ERR_ESP event group bits.
89
- /// @param err esp_err_t error code.
90
- /// @return True if an ERR_ESP bit is set and false if err == ESP_OK
91
- bool send_esp_err_to_event_group_(esp_err_t err);
92
-
93
86
  #ifndef USE_I2S_LEGACY
94
- static bool i2s_overflow_cb(i2s_chan_handle_t handle, i2s_event_data_t *event, void *user_ctx);
87
+ /// @brief Callback function used to send playback timestamps the to the speaker task.
88
+ /// @param handle (i2s_chan_handle_t)
89
+ /// @param event (i2s_event_data_t)
90
+ /// @param user_ctx (void*) User context pointer that the callback accesses
91
+ /// @return True if a higher priority task was interrupted
92
+ static bool i2s_on_sent_cb(i2s_chan_handle_t handle, i2s_event_data_t *event, void *user_ctx);
95
93
  #endif
96
94
 
97
- /// @brief Allocates the data buffer and ring buffer
98
- /// @param data_buffer_size Number of bytes to allocate for the data buffer.
99
- /// @param ring_buffer_size Number of bytes to allocate for the ring buffer.
100
- /// @return ESP_ERR_NO_MEM if either buffer fails to allocate
101
- /// ESP_OK if successful
102
- esp_err_t allocate_buffers_(size_t data_buffer_size, size_t ring_buffer_size);
103
-
104
95
  /// @brief Starts the ESP32 I2S driver.
105
96
  /// Attempts to lock the I2S port, starts the I2S driver using the passed in stream information, and sets the data out
106
- /// pin. If it fails, it will unlock the I2S port and uninstall the driver, if necessary.
97
+ /// pin. If it fails, it will unlock the I2S port and uninstalls the driver, if necessary.
107
98
  /// @param audio_stream_info Stream information for the I2S driver.
108
99
  /// @return ESP_ERR_NOT_ALLOWED if the I2S port can't play the incoming audio stream.
109
100
  /// ESP_ERR_INVALID_STATE if the I2S port is already locked.
110
- /// ESP_ERR_INVALID_ARG if nstalling the driver or setting the data outpin fails due to a parameter error.
101
+ /// ESP_ERR_INVALID_ARG if installing the driver or setting the data outpin fails due to a parameter error.
111
102
  /// ESP_ERR_NO_MEM if the driver fails to install due to a memory allocation error.
112
- /// ESP_FAIL if setting the data out pin fails due to an IO error ESP_OK if successful
103
+ /// ESP_FAIL if setting the data out pin fails due to an IO error
104
+ /// ESP_OK if successful
113
105
  esp_err_t start_i2s_driver_(audio::AudioStreamInfo &audio_stream_info);
114
106
 
115
- /// @brief Deletes the speaker's task.
116
- /// Deallocates the data_buffer_ and audio_ring_buffer_, if necessary, and deletes the task. Should only be called by
117
- /// the speaker_task itself.
118
- /// @param buffer_size The allocated size of the data_buffer_.
119
- void delete_task_(size_t buffer_size);
107
+ /// @brief Stops the I2S driver and unlocks the I2S port
108
+ void stop_i2s_driver_();
120
109
 
121
110
  TaskHandle_t speaker_task_handle_{nullptr};
122
111
  EventGroupHandle_t event_group_{nullptr};
123
112
 
124
113
  QueueHandle_t i2s_event_queue_;
125
114
 
126
- uint8_t *data_buffer_;
127
- std::shared_ptr<RingBuffer> audio_ring_buffer_;
115
+ std::weak_ptr<RingBuffer> audio_ring_buffer_;
128
116
 
129
117
  uint32_t buffer_duration_ms_;
130
118
 
131
119
  optional<uint32_t> timeout_;
132
120
 
133
- bool task_created_{false};
134
121
  bool pause_state_{false};
135
122
 
136
123
  int16_t q15_volume_factor_{INT16_MAX};
137
124
 
138
- size_t bytes_written_{0};
125
+ audio::AudioStreamInfo current_stream_info_; // The currently loaded driver's stream info
139
126
 
140
127
  #ifdef USE_I2S_LEGACY
141
128
  #if SOC_I2S_SUPPORTS_DAC
@@ -148,8 +135,6 @@ class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Comp
148
135
  std::string i2s_comm_fmt_;
149
136
  i2s_chan_handle_t tx_handle_;
150
137
  #endif
151
-
152
- uint32_t accumulated_frames_written_{0};
153
138
  };
154
139
 
155
140
  } // namespace i2s_audio
@@ -138,9 +138,10 @@ def _validate(config):
138
138
  ]:
139
139
  raise cv.Invalid("Selected model can't run on ESP8266.")
140
140
 
141
- if model == "CUSTOM":
142
- if CONF_INIT_SEQUENCE not in config or CONF_DIMENSIONS not in config:
143
- raise cv.Invalid("CUSTOM model requires init_sequence and dimensions")
141
+ if model == "CUSTOM" and (
142
+ CONF_INIT_SEQUENCE not in config or CONF_DIMENSIONS not in config
143
+ ):
144
+ raise cv.Invalid("CUSTOM model requires init_sequence and dimensions")
144
145
 
145
146
  return config
146
147
 
@@ -31,8 +31,6 @@ void ILI9XXXDisplay::set_madctl() {
31
31
  }
32
32
 
33
33
  void ILI9XXXDisplay::setup() {
34
- ESP_LOGD(TAG, "Setting up ILI9xxx");
35
-
36
34
  this->setup_pins_();
37
35
  this->init_lcd_(this->init_sequence_);
38
36
  this->init_lcd_(this->extra_init_sequence_.data());
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import contextlib
3
4
  import hashlib
4
5
  import io
5
6
  import logging
@@ -107,6 +108,24 @@ class ImageEncoder:
107
108
  :return:
108
109
  """
109
110
 
111
+ @classmethod
112
+ def is_endian(cls) -> bool:
113
+ """
114
+ Check if the image encoder supports endianness configuration
115
+ """
116
+ return getattr(cls, "set_big_endian", None) is not None
117
+
118
+ @classmethod
119
+ def get_options(cls) -> list[str]:
120
+ """
121
+ Get the available options for this image encoder
122
+ """
123
+ options = [*OPTIONS]
124
+ if not cls.is_endian():
125
+ options.remove(CONF_BYTE_ORDER)
126
+ options.append(CONF_RAW_DATA_ID)
127
+ return options
128
+
110
129
 
111
130
  def is_alpha_only(image: Image):
112
131
  """
@@ -174,9 +193,8 @@ class ImageGrayscale(ImageEncoder):
174
193
  b = 1
175
194
  if self.invert_alpha:
176
195
  b ^= 0xFF
177
- if self.transparency == CONF_ALPHA_CHANNEL:
178
- if a != 0xFF:
179
- b = a
196
+ if self.transparency == CONF_ALPHA_CHANNEL and a != 0xFF:
197
+ b = a
180
198
  self.data[self.index] = b
181
199
  self.index += 1
182
200
 
@@ -446,13 +464,14 @@ def validate_type(image_types):
446
464
  return validate
447
465
 
448
466
 
449
- def validate_settings(value):
467
+ def validate_settings(value, path=()):
450
468
  """
451
469
  Validate the settings for a single image configuration.
452
470
  """
453
471
  conf_type = value[CONF_TYPE]
454
472
  type_class = IMAGE_TYPE[conf_type]
455
- transparency = value[CONF_TRANSPARENCY].lower()
473
+
474
+ transparency = value.get(CONF_TRANSPARENCY, CONF_OPAQUE).lower()
456
475
  if transparency not in type_class.allow_config:
457
476
  raise cv.Invalid(
458
477
  f"Image format '{conf_type}' cannot have transparency: {transparency}"
@@ -464,11 +483,10 @@ def validate_settings(value):
464
483
  and CONF_INVERT_ALPHA not in type_class.allow_config
465
484
  ):
466
485
  raise cv.Invalid("No alpha channel to invert")
467
- if value.get(CONF_BYTE_ORDER) is not None and not callable(
468
- getattr(type_class, "set_big_endian", None)
469
- ):
486
+ if value.get(CONF_BYTE_ORDER) is not None and not type_class.is_endian():
470
487
  raise cv.Invalid(
471
- f"Image format '{conf_type}' does not support byte order configuration"
488
+ f"Image format '{conf_type}' does not support byte order configuration",
489
+ path=path,
472
490
  )
473
491
  if file := value.get(CONF_FILE):
474
492
  file = Path(file)
@@ -479,7 +497,7 @@ def validate_settings(value):
479
497
  Image.open(file)
480
498
  except UnidentifiedImageError as exc:
481
499
  raise cv.Invalid(
482
- f"File can't be opened as image: {file.absolute()}"
500
+ f"File can't be opened as image: {file.absolute()}", path=path
483
501
  ) from exc
484
502
  return value
485
503
 
@@ -499,6 +517,10 @@ OPTIONS_SCHEMA = {
499
517
  cv.Optional(CONF_INVERT_ALPHA, default=False): cv.boolean,
500
518
  cv.Optional(CONF_BYTE_ORDER): cv.one_of("BIG_ENDIAN", "LITTLE_ENDIAN", upper=True),
501
519
  cv.Optional(CONF_TRANSPARENCY, default=CONF_OPAQUE): validate_transparency(),
520
+ }
521
+
522
+ DEFAULTS_SCHEMA = {
523
+ **OPTIONS_SCHEMA,
502
524
  cv.Optional(CONF_TYPE): validate_type(IMAGE_TYPE),
503
525
  }
504
526
 
@@ -510,47 +532,61 @@ IMAGE_SCHEMA_NO_DEFAULTS = {
510
532
  **{cv.Optional(key): OPTIONS_SCHEMA[key] for key in OPTIONS},
511
533
  }
512
534
 
513
- BASE_SCHEMA = cv.Schema(
535
+ IMAGE_SCHEMA = cv.Schema(
514
536
  {
515
537
  **IMAGE_ID_SCHEMA,
516
538
  **OPTIONS_SCHEMA,
517
- }
518
- ).add_extra(validate_settings)
519
-
520
- IMAGE_SCHEMA = BASE_SCHEMA.extend(
521
- {
522
539
  cv.Required(CONF_TYPE): validate_type(IMAGE_TYPE),
523
540
  }
524
541
  )
525
542
 
526
543
 
544
+ def apply_defaults(image, defaults, path):
545
+ """
546
+ Apply defaults to an image configuration
547
+ """
548
+ type = image.get(CONF_TYPE, defaults.get(CONF_TYPE))
549
+ if type is None:
550
+ raise cv.Invalid(
551
+ "Type is required either in the image config or in the defaults", path=path
552
+ )
553
+ type_class = IMAGE_TYPE[type]
554
+ config = {
555
+ **{key: image.get(key, defaults.get(key)) for key in type_class.get_options()},
556
+ **{key.schema: image[key.schema] for key in IMAGE_ID_SCHEMA},
557
+ CONF_TYPE: image.get(CONF_TYPE, defaults.get(CONF_TYPE)),
558
+ }
559
+ validate_settings(config, path)
560
+ return config
561
+
562
+
527
563
  def validate_defaults(value):
528
564
  """
529
- Validate the options for images with defaults
565
+ Apply defaults to the images in the configuration and flatten to a single list.
530
566
  """
531
567
  defaults = value[CONF_DEFAULTS]
532
568
  result = []
533
- for index, image in enumerate(value[CONF_IMAGES]):
534
- type = image.get(CONF_TYPE, defaults.get(CONF_TYPE))
535
- if type is None:
536
- raise cv.Invalid(
537
- "Type is required either in the image config or in the defaults",
538
- path=[CONF_IMAGES, index],
539
- )
540
- type_class = IMAGE_TYPE[type]
541
- # A default byte order should be simply ignored if the type does not support it
542
- available_options = [*OPTIONS]
543
- if (
544
- not callable(getattr(type_class, "set_big_endian", None))
545
- and CONF_BYTE_ORDER not in image
546
- ):
547
- available_options.remove(CONF_BYTE_ORDER)
548
- config = {
549
- **{key: image.get(key, defaults.get(key)) for key in available_options},
550
- **{key.schema: image[key.schema] for key in IMAGE_ID_SCHEMA},
551
- }
552
- validate_settings(config)
553
- result.append(config)
569
+ # Apply defaults to the images: list and add the list entries to the result
570
+ for index, image in enumerate(value.get(CONF_IMAGES, [])):
571
+ result.append(apply_defaults(image, defaults, [CONF_IMAGES, index]))
572
+
573
+ # Apply defaults to images under the type keys and add them to the result
574
+ for image_type, type_config in value.items():
575
+ type_upper = image_type.upper()
576
+ if type_upper not in IMAGE_TYPE:
577
+ continue
578
+ type_class = IMAGE_TYPE[type_upper]
579
+ if isinstance(type_config, list):
580
+ # If the type is a list, apply defaults to each entry
581
+ for index, image in enumerate(type_config):
582
+ result.append(apply_defaults(image, defaults, [image_type, index]))
583
+ else:
584
+ # Handle transparency options for the type
585
+ for trans_type in set(type_class.allow_config).intersection(type_config):
586
+ for index, image in enumerate(type_config[trans_type]):
587
+ result.append(
588
+ apply_defaults(image, defaults, [image_type, trans_type, index])
589
+ )
554
590
  return result
555
591
 
556
592
 
@@ -562,16 +598,20 @@ def typed_image_schema(image_type):
562
598
  cv.Schema(
563
599
  {
564
600
  cv.Optional(t.lower()): cv.ensure_list(
565
- BASE_SCHEMA.extend(
566
- {
567
- cv.Optional(
568
- CONF_TRANSPARENCY, default=t
569
- ): validate_transparency((t,)),
570
- cv.Optional(CONF_TYPE, default=image_type): validate_type(
571
- (image_type,)
572
- ),
573
- }
574
- )
601
+ {
602
+ **IMAGE_ID_SCHEMA,
603
+ **{
604
+ cv.Optional(key): OPTIONS_SCHEMA[key]
605
+ for key in OPTIONS
606
+ if key != CONF_TRANSPARENCY
607
+ },
608
+ cv.Optional(
609
+ CONF_TRANSPARENCY, default=t
610
+ ): validate_transparency((t,)),
611
+ cv.Optional(CONF_TYPE, default=image_type): validate_type(
612
+ (image_type,)
613
+ ),
614
+ }
575
615
  )
576
616
  for t in IMAGE_TYPE[image_type].allow_config.intersection(
577
617
  TRANSPARENCY_TYPES
@@ -580,46 +620,44 @@ def typed_image_schema(image_type):
580
620
  ),
581
621
  # Allow a default configuration with no transparency preselected
582
622
  cv.ensure_list(
583
- BASE_SCHEMA.extend(
584
- {
585
- cv.Optional(
586
- CONF_TRANSPARENCY, default=CONF_OPAQUE
587
- ): validate_transparency(),
588
- cv.Optional(CONF_TYPE, default=image_type): validate_type(
589
- (image_type,)
590
- ),
591
- }
592
- )
623
+ {
624
+ **IMAGE_SCHEMA_NO_DEFAULTS,
625
+ cv.Optional(CONF_TYPE, default=image_type): validate_type(
626
+ (image_type,)
627
+ ),
628
+ }
593
629
  ),
594
630
  )
595
631
 
596
632
 
597
633
  # The config schema can be a (possibly empty) single list of images,
598
- # or a dictionary of image types each with a list of images
599
- # or a dictionary with keys `defaults:` and `images:`
634
+ # or a dictionary with optional keys `defaults:`, `images:` and the image types
600
635
 
601
636
 
602
- def _config_schema(config):
603
- if isinstance(config, list):
604
- return cv.Schema([IMAGE_SCHEMA])(config)
605
- if not isinstance(config, dict):
637
+ def _config_schema(value):
638
+ if isinstance(value, list) or (
639
+ isinstance(value, dict) and (CONF_ID in value or CONF_FILE in value)
640
+ ):
641
+ return cv.ensure_list(cv.All(IMAGE_SCHEMA, validate_settings))(value)
642
+ if not isinstance(value, dict):
606
643
  raise cv.Invalid(
607
- "Badly formed image configuration, expected a list or a dictionary"
608
- )
609
- if CONF_DEFAULTS in config or CONF_IMAGES in config:
610
- return validate_defaults(
611
- cv.Schema(
612
- {
613
- cv.Required(CONF_DEFAULTS): OPTIONS_SCHEMA,
614
- cv.Required(CONF_IMAGES): cv.ensure_list(IMAGE_SCHEMA_NO_DEFAULTS),
615
- }
616
- )(config)
644
+ "Badly formed image configuration, expected a list or a dictionary",
617
645
  )
618
- if CONF_ID in config or CONF_FILE in config:
619
- return cv.ensure_list(IMAGE_SCHEMA)([config])
620
- return cv.Schema(
621
- {cv.Optional(t.lower()): typed_image_schema(t) for t in IMAGE_TYPE}
622
- )(config)
646
+ return cv.All(
647
+ cv.Schema(
648
+ {
649
+ cv.Optional(CONF_DEFAULTS, default={}): DEFAULTS_SCHEMA,
650
+ cv.Optional(CONF_IMAGES, default=[]): cv.ensure_list(
651
+ {
652
+ **IMAGE_SCHEMA_NO_DEFAULTS,
653
+ cv.Optional(CONF_TYPE): validate_type(IMAGE_TYPE),
654
+ }
655
+ ),
656
+ **{cv.Optional(t.lower()): typed_image_schema(t) for t in IMAGE_TYPE},
657
+ }
658
+ ),
659
+ validate_defaults,
660
+ )(value)
623
661
 
624
662
 
625
663
  CONFIG_SCHEMA = _config_schema
@@ -668,14 +706,12 @@ async def write_image(config, all_frames=False):
668
706
  else Image.Dither.FLOYDSTEINBERG
669
707
  )
670
708
  type = config[CONF_TYPE]
671
- transparency = config[CONF_TRANSPARENCY]
709
+ transparency = config.get(CONF_TRANSPARENCY, CONF_OPAQUE)
672
710
  invert_alpha = config[CONF_INVERT_ALPHA]
673
711
  frame_count = 1
674
712
  if all_frames:
675
- try:
713
+ with contextlib.suppress(AttributeError):
676
714
  frame_count = image.n_frames
677
- except AttributeError:
678
- pass
679
715
  if frame_count <= 1:
680
716
  _LOGGER.warning("Image file %s has no animation frames", path)
681
717
 
@@ -701,14 +737,9 @@ async def write_image(config, all_frames=False):
701
737
 
702
738
 
703
739
  async def to_code(config):
704
- if isinstance(config, list):
705
- for entry in config:
706
- await to_code(entry)
707
- elif CONF_ID not in config:
708
- for entry in config.values():
709
- await to_code(entry)
710
- else:
711
- prog_arr, width, height, image_type, trans_value, _ = await write_image(config)
740
+ # By now the config should be a simple list.
741
+ for entry in config:
742
+ prog_arr, width, height, image_type, trans_value, _ = await write_image(entry)
712
743
  cg.new_Pvariable(
713
- config[CONF_ID], prog_arr, width, height, image_type, trans_value
744
+ entry[CONF_ID], prog_arr, width, height, image_type, trans_value
714
745
  )
@@ -27,14 +27,13 @@ def validate_logger(config):
27
27
  logger_conf = fv.full_config.get()[CONF_LOGGER]
28
28
  if logger_conf[CONF_BAUD_RATE] == 0:
29
29
  raise cv.Invalid("improv_serial requires the logger baud_rate to be not 0")
30
- if CORE.using_esp_idf:
31
- if (
32
- logger_conf[CONF_HARDWARE_UART] == USB_CDC
33
- and get_esp32_variant() == VARIANT_ESP32S3
34
- ):
35
- raise cv.Invalid(
36
- "improv_serial does not support the selected logger hardware_uart"
37
- )
30
+ if CORE.using_esp_idf and (
31
+ logger_conf[CONF_HARDWARE_UART] == USB_CDC
32
+ and get_esp32_variant() == VARIANT_ESP32S3
33
+ ):
34
+ raise cv.Invalid(
35
+ "improv_serial does not support the selected logger hardware_uart"
36
+ )
38
37
  return config
39
38
 
40
39
 
@@ -34,7 +34,6 @@ static const uint8_t INA219_REGISTER_CURRENT = 0x04;
34
34
  static const uint8_t INA219_REGISTER_CALIBRATION = 0x05;
35
35
 
36
36
  void INA219Component::setup() {
37
- ESP_LOGCONFIG(TAG, "Running setup");
38
37
  // Config Register
39
38
  // 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
40
39
  if (!this->write_byte_16(INA219_REGISTER_CONFIG, 0x8000)) {
@@ -37,8 +37,6 @@ static const uint16_t INA226_ADC_TIMES[] = {140, 204, 332, 588, 1100, 2116, 4156
37
37
  static const uint16_t INA226_ADC_AVG_SAMPLES[] = {1, 4, 16, 64, 128, 256, 512, 1024};
38
38
 
39
39
  void INA226Component::setup() {
40
- ESP_LOGCONFIG(TAG, "Running setup");
41
-
42
40
  ConfigurationRegister config;
43
41
 
44
42
  config.reset = 1;
@@ -35,8 +35,6 @@ static const uint8_t INA260_REGISTER_MANUFACTURE_ID = 0xFE;
35
35
  static const uint8_t INA260_REGISTER_DEVICE_ID = 0xFF;
36
36
 
37
37
  void INA260Component::setup() {
38
- ESP_LOGCONFIG(TAG, "Running setup");
39
-
40
38
  // Reset device on setup
41
39
  if (!this->write_byte_16(INA260_REGISTER_CONFIG, 0x8000)) {
42
40
  this->error_code_ = DEVICE_RESET_FAILED;
@@ -78,11 +78,8 @@ def validate_model_config(config):
78
78
  model = config[CONF_MODEL]
79
79
 
80
80
  for key in config:
81
- if key in SENSOR_MODEL_OPTIONS:
82
- if model not in SENSOR_MODEL_OPTIONS[key]:
83
- raise cv.Invalid(
84
- f"Device model '{model}' does not support '{key}' sensor"
85
- )
81
+ if key in SENSOR_MODEL_OPTIONS and model not in SENSOR_MODEL_OPTIONS[key]:
82
+ raise cv.Invalid(f"Device model '{model}' does not support '{key}' sensor")
86
83
 
87
84
  tempco = config[CONF_TEMPERATURE_COEFFICIENT]
88
85
  if tempco > 0 and model not in ["INA228", "INA229"]:
@@ -50,8 +50,6 @@ static bool check_model_and_device_match(INAModel model, uint16_t dev_id) {
50
50
  }
51
51
 
52
52
  void INA2XX::setup() {
53
- ESP_LOGCONFIG(TAG, "Running setup");
54
-
55
53
  if (!this->reset_config_()) {
56
54
  ESP_LOGE(TAG, "Reset failed, check connection");
57
55
  this->mark_failed();
@@ -22,7 +22,6 @@ static const uint8_t INA3221_REGISTER_CHANNEL3_BUS_VOLTAGE = 0x06;
22
22
  // A0 = SCL -> 0x43
23
23
 
24
24
  void INA3221Component::setup() {
25
- ESP_LOGCONFIG(TAG, "Running setup");
26
25
  // Config Register
27
26
  // 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
28
27
  if (!this->write_byte_16(INA3221_REGISTER_CONFIG, 0x8000)) {
@@ -84,8 +84,6 @@ void InternalTemperatureSensor::setup() {
84
84
  #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S2) || \
85
85
  defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32H2) || defined(USE_ESP32_VARIANT_ESP32C2) || \
86
86
  defined(USE_ESP32_VARIANT_ESP32P4)
87
- ESP_LOGCONFIG(TAG, "Running setup");
88
-
89
87
  temperature_sensor_config_t tsens_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80);
90
88
 
91
89
  esp_err_t result = temperature_sensor_install(&tsens_config, &tsensNew);
@@ -1,6 +1,7 @@
1
1
  #pragma once
2
2
 
3
3
  #include "esphome/core/component.h"
4
+ #include "esphome/core/log.h"
4
5
  #include "esphome/core/automation.h"
5
6
 
6
7
  namespace esphome {
@@ -8,16 +9,12 @@ namespace interval {
8
9
 
9
10
  class IntervalTrigger : public Trigger<>, public PollingComponent {
10
11
  public:
11
- void update() override {
12
- if (this->started_)
13
- this->trigger();
14
- }
12
+ void update() override { this->trigger(); }
15
13
 
16
14
  void setup() override {
17
- if (this->startup_delay_ == 0) {
18
- this->started_ = true;
19
- } else {
20
- this->set_timeout(this->startup_delay_, [this] { this->started_ = true; });
15
+ if (this->startup_delay_ != 0) {
16
+ this->stop_poller();
17
+ this->set_timeout(this->startup_delay_, [this] { this->start_poller(); });
21
18
  }
22
19
  }
23
20
 
@@ -25,7 +22,6 @@ class IntervalTrigger : public Trigger<>, public PollingComponent {
25
22
 
26
23
  protected:
27
24
  uint32_t startup_delay_{0};
28
- bool started_{false};
29
25
  };
30
26
 
31
27
  } // namespace interval
@@ -2,7 +2,7 @@ import esphome.codegen as cg
2
2
  import esphome.config_validation as cv
3
3
  from esphome.core import coroutine_with_priority
4
4
 
5
- CODEOWNERS = ["@OttoWinter"]
5
+ CODEOWNERS = ["@esphome/core"]
6
6
  json_ns = cg.esphome_ns.namespace("json")
7
7
 
8
8
  CONFIG_SCHEMA = cv.All(
@@ -14,7 +14,6 @@ static const uint8_t KMETER_INTERNAL_TEMP_VAL_REG = 0x10;
14
14
  static const uint8_t KMETER_FIRMWARE_VERSION_REG = 0xFE;
15
15
 
16
16
  void KMeterISOComponent::setup() {
17
- ESP_LOGCONFIG(TAG, "Running setup");
18
17
  this->error_code_ = NONE;
19
18
 
20
19
  // Mark as not failed before initializing. Some devices will turn off sensors to save on batteries
@@ -46,7 +45,6 @@ void KMeterISOComponent::setup() {
46
45
  this->mark_failed();
47
46
  return;
48
47
  }
49
- ESP_LOGCONFIG(TAG, "The device was successfully setup.");
50
48
  }
51
49
 
52
50
  float KMeterISOComponent::get_setup_priority() const { return setup_priority::DATA; }
@@ -49,8 +49,6 @@ void Lc709203f::setup() {
49
49
  // initialization code checks the return code from those functions. If they don't return
50
50
  // NO_ERROR (0x00), that part of the initialization aborts and will be retried on the next
51
51
  // call to update().
52
- ESP_LOGCONFIG(TAG, "Running setup");
53
-
54
52
  // Set power mode to on. Note that, unlike some other similar devices, in sleep mode the IC
55
53
  // does not record power usage. If there is significant power consumption during sleep mode,
56
54
  // the pack RSOC will likely no longer be correct. Because of that, I do not implement
@@ -41,9 +41,7 @@ CONFIG_SCHEMA = lcd_base.LCD_SCHEMA.extend(
41
41
  async def to_code(config):
42
42
  var = cg.new_Pvariable(config[CONF_ID])
43
43
  await lcd_base.setup_lcd_display(var, config)
44
- pins_ = []
45
- for conf in config[CONF_DATA_PINS]:
46
- pins_.append(await cg.gpio_pin_expression(conf))
44
+ pins_ = [await cg.gpio_pin_expression(conf) for conf in config[CONF_DATA_PINS]]
47
45
  cg.add(var.set_data_pins(*pins_))
48
46
  enable = await cg.gpio_pin_expression(config[CONF_ENABLE_PIN])
49
47
  cg.add(var.set_enable_pin(enable))
@@ -7,7 +7,6 @@ namespace lcd_gpio {
7
7
  static const char *const TAG = "lcd_gpio";
8
8
 
9
9
  void GPIOLCDDisplay::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  this->rs_pin_->setup(); // OUTPUT
12
11
  this->rs_pin_->digital_write(false);
13
12
  if (this->rw_pin_ != nullptr) {
@@ -11,7 +11,6 @@ static const uint8_t LCD_DISPLAY_BACKLIGHT_ON = 0x08;
11
11
  static const uint8_t LCD_DISPLAY_BACKLIGHT_OFF = 0x00;
12
12
 
13
13
  void PCF8574LCDDisplay::setup() {
14
- ESP_LOGCONFIG(TAG, "Running setup");
15
14
  this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
16
15
  if (!this->write_bytes(this->backlight_value_, nullptr, 0)) {
17
16
  this->mark_failed();