esphome 2025.7.5__py3-none-any.whl → 2025.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (756) hide show
  1. esphome/__main__.py +190 -83
  2. esphome/automation.py +2 -4
  3. esphome/build_gen/__init__.py +0 -0
  4. esphome/build_gen/platformio.py +102 -0
  5. esphome/components/a4988/a4988.cpp +0 -1
  6. esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
  7. esphome/components/absolute_humidity/sensor.py +2 -2
  8. esphome/components/adc/__init__.py +123 -85
  9. esphome/components/adc/adc_sensor.h +98 -35
  10. esphome/components/adc/adc_sensor_common.cpp +10 -4
  11. esphome/components/adc/adc_sensor_esp32.cpp +291 -123
  12. esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
  13. esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
  14. esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
  15. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  16. esphome/components/adc/sensor.py +61 -27
  17. esphome/components/adc128s102/adc128s102.cpp +1 -4
  18. esphome/components/ade7880/sensor.py +75 -49
  19. esphome/components/ads1115/ads1115.cpp +0 -1
  20. esphome/components/ads1118/ads1118.cpp +0 -1
  21. esphome/components/ags10/ags10.cpp +0 -4
  22. esphome/components/aht10/aht10.cpp +0 -4
  23. esphome/components/aic3204/aic3204.cpp +0 -2
  24. esphome/components/airthings_wave_plus/__init__.py +1 -1
  25. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
  26. esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
  27. esphome/components/airthings_wave_plus/sensor.py +55 -28
  28. esphome/components/alarm_control_panel/__init__.py +4 -9
  29. esphome/components/am2315c/am2315c.cpp +0 -2
  30. esphome/components/am2320/am2320.cpp +0 -1
  31. esphome/components/animation/__init__.py +14 -11
  32. esphome/components/apds9306/apds9306.cpp +0 -4
  33. esphome/components/apds9960/apds9960.cpp +0 -1
  34. esphome/components/api/__init__.py +29 -4
  35. esphome/components/api/api_connection.cpp +378 -401
  36. esphome/components/api/api_connection.h +102 -52
  37. esphome/components/api/api_frame_helper.cpp +69 -896
  38. esphome/components/api/api_frame_helper.h +31 -126
  39. esphome/components/api/api_frame_helper_noise.cpp +583 -0
  40. esphome/components/api/api_frame_helper_noise.h +68 -0
  41. esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
  42. esphome/components/api/api_frame_helper_plaintext.h +53 -0
  43. esphome/components/api/api_noise_context.h +2 -4
  44. esphome/components/api/api_pb2.cpp +1601 -1808
  45. esphome/components/api/api_pb2.h +367 -323
  46. esphome/components/api/api_pb2_dump.cpp +1137 -3466
  47. esphome/components/api/api_pb2_includes.h +34 -0
  48. esphome/components/api/api_pb2_service.cpp +94 -105
  49. esphome/components/api/api_pb2_service.h +27 -16
  50. esphome/components/api/api_server.cpp +18 -17
  51. esphome/components/api/api_server.h +8 -5
  52. esphome/components/api/client.py +16 -8
  53. esphome/components/api/custom_api_device.h +68 -14
  54. esphome/components/api/homeassistant_service.h +24 -19
  55. esphome/components/api/list_entities.cpp +3 -5
  56. esphome/components/api/list_entities.h +2 -4
  57. esphome/components/api/proto.cpp +3 -5
  58. esphome/components/api/proto.h +239 -274
  59. esphome/components/api/subscribe_state.cpp +2 -4
  60. esphome/components/api/subscribe_state.h +2 -4
  61. esphome/components/api/user_services.cpp +2 -4
  62. esphome/components/api/user_services.h +8 -8
  63. esphome/components/as3935/as3935.cpp +0 -2
  64. esphome/components/as3935_spi/as3935_spi.cpp +0 -2
  65. esphome/components/as5600/__init__.py +1 -1
  66. esphome/components/as5600/as5600.cpp +0 -2
  67. esphome/components/as5600/sensor/__init__.py +0 -1
  68. esphome/components/as7341/as7341.cpp +0 -1
  69. esphome/components/async_tcp/__init__.py +1 -1
  70. esphome/components/at581x/at581x.cpp +1 -1
  71. esphome/components/atm90e26/atm90e26.cpp +0 -1
  72. esphome/components/atm90e32/atm90e32.cpp +475 -116
  73. esphome/components/atm90e32/atm90e32.h +43 -5
  74. esphome/components/audio/audio.h +2 -2
  75. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
  76. esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
  77. esphome/components/bh1750/bh1750.cpp +0 -1
  78. esphome/components/binary_sensor/__init__.py +14 -12
  79. esphome/components/ble_client/__init__.py +4 -7
  80. esphome/components/bluetooth_proxy/__init__.py +40 -3
  81. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +392 -81
  82. esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
  83. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
  84. esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
  85. esphome/components/bme280_base/bme280_base.cpp +15 -16
  86. esphome/components/bme680/bme680.cpp +2 -3
  87. esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
  88. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
  89. esphome/components/bmi160/bmi160.cpp +0 -1
  90. esphome/components/bmp085/bmp085.cpp +0 -1
  91. esphome/components/bmp280_base/bmp280_base.cpp +13 -14
  92. esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
  93. esphome/components/bmp581/bmp581.cpp +0 -2
  94. esphome/components/bp1658cj/bp1658cj.cpp +0 -1
  95. esphome/components/bp5758d/bp5758d.cpp +0 -1
  96. esphome/components/button/__init__.py +0 -1
  97. esphome/components/canbus/__init__.py +2 -3
  98. esphome/components/canbus/canbus.cpp +0 -1
  99. esphome/components/cap1188/cap1188.cpp +0 -2
  100. esphome/components/captive_portal/__init__.py +1 -1
  101. esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
  102. esphome/components/ch422g/ch422g.cpp +0 -1
  103. esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
  104. esphome/components/climate/__init__.py +0 -1
  105. esphome/components/climate/climate_traits.h +24 -0
  106. esphome/components/cm1106/cm1106.cpp +0 -1
  107. esphome/components/const/__init__.py +6 -0
  108. esphome/components/cover/__init__.py +0 -1
  109. esphome/components/cover/cover.cpp +9 -13
  110. esphome/components/cs5460a/cs5460a.cpp +0 -2
  111. esphome/components/cse7761/cse7761.cpp +0 -1
  112. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
  113. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
  114. esphome/components/dac7678/dac7678_output.cpp +0 -2
  115. esphome/components/dallas_temp/dallas_temp.cpp +0 -1
  116. esphome/components/datetime/__init__.py +0 -2
  117. esphome/components/debug/__init__.py +15 -1
  118. esphome/components/debug/debug_zephyr.cpp +281 -0
  119. esphome/components/debug/sensor.py +2 -1
  120. esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
  121. esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
  122. esphome/components/dfrobot_sen0395/__init__.py +1 -2
  123. esphome/components/dht/dht.cpp +0 -1
  124. esphome/components/dht12/dht12.cpp +0 -1
  125. esphome/components/display/__init__.py +16 -3
  126. esphome/components/display_menu_base/__init__.py +1 -1
  127. esphome/components/dps310/dps310.cpp +0 -2
  128. esphome/components/ds1307/ds1307.cpp +0 -1
  129. esphome/components/ds2484/ds2484.cpp +0 -1
  130. esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
  131. esphome/components/ee895/ee895.cpp +0 -1
  132. esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
  133. esphome/components/emc2101/emc2101.cpp +0 -2
  134. esphome/components/ens160_base/ens160_base.cpp +0 -2
  135. esphome/components/ens210/ens210.cpp +0 -1
  136. esphome/components/es7210/es7210.cpp +0 -2
  137. esphome/components/es7243e/es7243e.cpp +0 -2
  138. esphome/components/es8156/es8156.cpp +0 -2
  139. esphome/components/es8311/es8311.cpp +0 -2
  140. esphome/components/es8388/es8388.cpp +0 -2
  141. esphome/components/esp32/__init__.py +203 -60
  142. esphome/components/esp32/boards.py +17 -0
  143. esphome/components/esp32/gpio.cpp +0 -1
  144. esphome/components/esp32/gpio.py +1 -2
  145. esphome/components/esp32/gpio_esp32_h2.py +2 -7
  146. esphome/components/esp32/gpio_esp32_p4.py +2 -7
  147. esphome/components/esp32/post_build.py.script +112 -61
  148. esphome/components/esp32_ble/__init__.py +41 -2
  149. esphome/components/esp32_ble/ble.cpp +14 -10
  150. esphome/components/esp32_ble/ble.h +18 -18
  151. esphome/components/esp32_ble/ble_advertising.cpp +5 -5
  152. esphome/components/esp32_ble/ble_advertising.h +7 -5
  153. esphome/components/esp32_ble/ble_event.h +139 -73
  154. esphome/components/esp32_ble/ble_scan_result.h +2 -4
  155. esphome/components/esp32_ble/ble_uuid.cpp +5 -5
  156. esphome/components/esp32_ble/ble_uuid.h +6 -5
  157. esphome/components/esp32_ble_beacon/__init__.py +4 -0
  158. esphome/components/esp32_ble_client/__init__.py +1 -1
  159. esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
  160. esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
  161. esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
  162. esphome/components/esp32_ble_client/ble_client_base.h +17 -6
  163. esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
  164. esphome/components/esp32_ble_client/ble_service.cpp +4 -4
  165. esphome/components/esp32_ble_client/ble_service.h +6 -4
  166. esphome/components/esp32_ble_server/__init__.py +15 -12
  167. esphome/components/esp32_ble_tracker/__init__.py +79 -11
  168. esphome/components/esp32_ble_tracker/automation.h +4 -4
  169. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
  170. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
  171. esphome/components/esp32_camera/__init__.py +13 -1
  172. esphome/components/esp32_camera/esp32_camera.cpp +7 -2
  173. esphome/components/esp32_camera/esp32_camera.h +1 -0
  174. esphome/components/esp32_dac/esp32_dac.cpp +3 -19
  175. esphome/components/esp32_dac/esp32_dac.h +4 -8
  176. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
  177. esphome/components/esp32_rmt_led_strip/light.py +1 -1
  178. esphome/components/esp32_touch/__init__.py +2 -3
  179. esphome/components/esp32_touch/esp32_touch.h +9 -6
  180. esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
  181. esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
  182. esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
  183. esphome/components/esp8266/__init__.py +3 -1
  184. esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
  185. esphome/components/esphome/ota/__init__.py +1 -2
  186. esphome/components/esphome/ota/ota_esphome.cpp +150 -77
  187. esphome/components/esphome/ota/ota_esphome.h +8 -1
  188. esphome/components/espnow/__init__.py +309 -0
  189. esphome/components/espnow/automation.h +175 -0
  190. esphome/components/espnow/espnow_component.cpp +468 -0
  191. esphome/components/espnow/espnow_component.h +183 -0
  192. esphome/components/espnow/espnow_err.h +19 -0
  193. esphome/components/espnow/espnow_packet.h +166 -0
  194. esphome/components/ethernet/__init__.py +7 -1
  195. esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
  196. esphome/components/ethernet/ethernet_component.cpp +0 -1
  197. esphome/components/ethernet/ethernet_component.h +4 -0
  198. esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
  199. esphome/components/event/__init__.py +0 -1
  200. esphome/components/factory_reset/__init__.py +92 -0
  201. esphome/components/factory_reset/factory_reset.cpp +76 -0
  202. esphome/components/factory_reset/factory_reset.h +43 -0
  203. esphome/components/fan/__init__.py +0 -1
  204. esphome/components/fan/fan_traits.h +16 -0
  205. esphome/components/fastled_base/fastled_light.cpp +0 -1
  206. esphome/components/fastled_spi/light.py +1 -3
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
  208. esphome/components/fs3000/fs3000.cpp +0 -2
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  210. esphome/components/ft63x6/ft63x6.cpp +0 -1
  211. esphome/components/gdk101/gdk101.cpp +0 -1
  212. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  213. esphome/components/gl_r01_i2c/sensor.py +1 -1
  214. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  215. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  216. esphome/components/gpio_expander/cached_gpio.h +24 -15
  217. esphome/components/gps/__init__.py +6 -2
  218. esphome/components/gps/gps.cpp +50 -49
  219. esphome/components/gps/gps.h +4 -8
  220. esphome/components/gps/time/gps_time.cpp +3 -9
  221. esphome/components/gps/time/gps_time.h +4 -7
  222. esphome/components/graph/__init__.py +1 -1
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  225. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  227. esphome/components/haier/climate.py +5 -10
  228. esphome/components/haier/haier_base.cpp +0 -1
  229. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  230. esphome/components/hdc1080/hdc1080.cpp +0 -2
  231. esphome/components/heatpumpir/climate.py +2 -2
  232. esphome/components/hlw8012/hlw8012.cpp +0 -1
  233. esphome/components/hm3301/hm3301.cpp +0 -1
  234. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  235. esphome/components/homeassistant/__init__.py +1 -0
  236. esphome/components/homeassistant/number/__init__.py +1 -0
  237. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  238. esphome/components/homeassistant/switch/__init__.py +1 -0
  239. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  240. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  241. esphome/components/host/__init__.py +2 -0
  242. esphome/components/hte501/hte501.cpp +0 -1
  243. esphome/components/http_request/__init__.py +2 -3
  244. esphome/components/http_request/http_request_idf.cpp +2 -2
  245. esphome/components/htu21d/htu21d.cpp +0 -2
  246. esphome/components/htu31d/htu31d.cpp +0 -2
  247. esphome/components/hx711/hx711.cpp +0 -1
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  249. esphome/components/hydreon_rgxx/sensor.py +4 -5
  250. esphome/components/i2c/i2c_bus.h +1 -1
  251. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  253. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  254. esphome/components/i2s_audio/__init__.py +6 -5
  255. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  257. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  262. esphome/components/ili9xxx/display.py +4 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  264. esphome/components/image/__init__.py +123 -92
  265. esphome/components/improv_serial/__init__.py +7 -8
  266. esphome/components/ina219/ina219.cpp +0 -1
  267. esphome/components/ina226/ina226.cpp +0 -2
  268. esphome/components/ina260/ina260.cpp +0 -2
  269. esphome/components/ina2xx_base/__init__.py +2 -5
  270. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  271. esphome/components/ina3221/ina3221.cpp +0 -1
  272. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  273. esphome/components/interval/interval.h +5 -9
  274. esphome/components/json/__init__.py +1 -1
  275. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  276. esphome/components/lc709203f/lc709203f.cpp +0 -2
  277. esphome/components/lcd_gpio/display.py +1 -3
  278. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  279. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  280. esphome/components/ld2410/__init__.py +4 -6
  281. esphome/components/ld2410/binary_sensor.py +4 -0
  282. esphome/components/ld2410/ld2410.cpp +56 -100
  283. esphome/components/ld2410/ld2410.h +17 -15
  284. esphome/components/ld2410/sensor.py +24 -10
  285. esphome/components/ld2412/__init__.py +46 -0
  286. esphome/components/ld2412/binary_sensor.py +70 -0
  287. esphome/components/ld2412/button/__init__.py +74 -0
  288. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  289. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  290. esphome/components/ld2412/button/query_button.cpp +9 -0
  291. esphome/components/ld2412/button/query_button.h +18 -0
  292. esphome/components/ld2412/button/restart_button.cpp +9 -0
  293. esphome/components/ld2412/button/restart_button.h +18 -0
  294. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  296. esphome/components/ld2412/ld2412.cpp +861 -0
  297. esphome/components/ld2412/ld2412.h +141 -0
  298. esphome/components/ld2412/number/__init__.py +126 -0
  299. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  300. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  301. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  302. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  303. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  305. esphome/components/ld2412/select/__init__.py +82 -0
  306. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  307. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  308. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  309. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  310. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  311. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  312. esphome/components/ld2412/sensor.py +124 -0
  313. esphome/components/ld2412/switch/__init__.py +45 -0
  314. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  316. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  318. esphome/components/ld2412/text_sensor.py +34 -0
  319. esphome/components/ld2420/ld2420.cpp +0 -1
  320. esphome/components/ld2450/__init__.py +3 -4
  321. esphome/components/ld2450/binary_sensor.py +3 -0
  322. esphome/components/ld2450/ld2450.cpp +77 -165
  323. esphome/components/ld2450/ld2450.h +26 -54
  324. esphome/components/ld2450/sensor.py +120 -6
  325. esphome/components/ld2450/text_sensor.py +5 -4
  326. esphome/components/ld24xx/__init__.py +1 -0
  327. esphome/components/ld24xx/ld24xx.h +65 -0
  328. esphome/components/ledc/ledc_output.cpp +0 -1
  329. esphome/components/libretiny/__init__.py +2 -0
  330. esphome/components/light/__init__.py +0 -1
  331. esphome/components/light/effects.py +70 -45
  332. esphome/components/light/light_call.cpp +101 -66
  333. esphome/components/light/light_color_values.h +16 -11
  334. esphome/components/light/light_json_schema.cpp +46 -44
  335. esphome/components/light/light_state.cpp +8 -11
  336. esphome/components/light/light_traits.h +17 -0
  337. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  338. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  339. esphome/components/lock/__init__.py +0 -1
  340. esphome/components/logger/__init__.py +31 -9
  341. esphome/components/logger/logger.cpp +12 -7
  342. esphome/components/logger/logger.h +25 -14
  343. esphome/components/logger/logger_esp32.cpp +2 -7
  344. esphome/components/logger/logger_esp8266.cpp +2 -4
  345. esphome/components/logger/logger_host.cpp +2 -4
  346. esphome/components/logger/logger_libretiny.cpp +2 -4
  347. esphome/components/logger/logger_rp2040.cpp +2 -4
  348. esphome/components/logger/logger_zephyr.cpp +86 -0
  349. esphome/components/logger/select/logger_level_select.cpp +2 -4
  350. esphome/components/logger/select/logger_level_select.h +2 -4
  351. esphome/components/logger/task_log_buffer.cpp +2 -4
  352. esphome/components/logger/task_log_buffer.h +2 -4
  353. esphome/components/lps22/sensor.py +5 -5
  354. esphome/components/ltr390/ltr390.cpp +0 -2
  355. esphome/components/ltr501/ltr501.cpp +0 -1
  356. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  357. esphome/components/lvgl/__init__.py +14 -13
  358. esphome/components/lvgl/automation.py +2 -4
  359. esphome/components/lvgl/defines.py +0 -2
  360. esphome/components/lvgl/helpers.py +1 -1
  361. esphome/components/lvgl/lv_validation.py +7 -4
  362. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  363. esphome/components/lvgl/styles.py +2 -2
  364. esphome/components/lvgl/types.py +1 -1
  365. esphome/components/lvgl/widgets/__init__.py +2 -2
  366. esphome/components/lvgl/widgets/arc.py +14 -11
  367. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  368. esphome/components/lvgl/widgets/qrcode.py +7 -7
  369. esphome/components/lvgl/widgets/spinner.py +6 -6
  370. esphome/components/lvgl/widgets/switch.py +2 -2
  371. esphome/components/lvgl/widgets/tabview.py +3 -3
  372. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  373. esphome/components/matrix_keypad/__init__.py +4 -3
  374. esphome/components/max17043/max17043.cpp +0 -2
  375. esphome/components/max31855/max31855.cpp +1 -4
  376. esphome/components/max31856/max31856.cpp +0 -4
  377. esphome/components/max31865/max31865.cpp +0 -1
  378. esphome/components/max44009/max44009.cpp +0 -1
  379. esphome/components/max6675/max6675.cpp +1 -4
  380. esphome/components/max6956/max6956.cpp +0 -1
  381. esphome/components/max7219/max7219.cpp +0 -1
  382. esphome/components/max7219digit/display.py +1 -1
  383. esphome/components/max7219digit/max7219digit.cpp +0 -1
  384. esphome/components/max9611/max9611.cpp +0 -1
  385. esphome/components/mcp23008/__init__.py +1 -1
  386. esphome/components/mcp23008/mcp23008.cpp +0 -1
  387. esphome/components/mcp23016/mcp23016.cpp +0 -1
  388. esphome/components/mcp23017/__init__.py +1 -1
  389. esphome/components/mcp23017/mcp23017.cpp +0 -1
  390. esphome/components/mcp23s08/__init__.py +1 -1
  391. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  392. esphome/components/mcp23s17/__init__.py +1 -1
  393. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  394. esphome/components/mcp23x08_base/__init__.py +2 -0
  395. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  396. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  397. esphome/components/mcp23x17_base/__init__.py +2 -0
  398. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  399. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  400. esphome/components/mcp23xxx_base/__init__.py +11 -5
  401. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  402. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  403. esphome/components/mcp3008/mcp3008.cpp +1 -4
  404. esphome/components/mcp3204/mcp3204.cpp +1 -4
  405. esphome/components/mcp4461/mcp4461.cpp +0 -1
  406. esphome/components/mcp4725/mcp4725.cpp +0 -1
  407. esphome/components/mcp4728/mcp4728.cpp +0 -1
  408. esphome/components/mcp9600/mcp9600.cpp +0 -2
  409. esphome/components/mcp9808/mcp9808.cpp +0 -2
  410. esphome/components/mdns/__init__.py +3 -0
  411. esphome/components/mdns/mdns_component.cpp +2 -0
  412. esphome/components/mdns/mdns_component.h +4 -0
  413. esphome/components/media_player/__init__.py +40 -0
  414. esphome/components/media_player/automation.h +16 -0
  415. esphome/components/media_player/media_player.cpp +13 -0
  416. esphome/components/media_player/media_player.h +50 -3
  417. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  418. esphome/components/mics_4514/mics_4514.cpp +1 -6
  419. esphome/components/midea/ir_transmitter.h +4 -4
  420. esphome/components/mipi/__init__.py +416 -0
  421. esphome/components/mipi_dsi/__init__.py +5 -0
  422. esphome/components/mipi_dsi/display.py +233 -0
  423. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  424. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  425. esphome/components/mipi_dsi/models/__init__.py +0 -0
  426. esphome/components/mipi_dsi/models/guition.py +38 -0
  427. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  428. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  429. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  430. esphome/components/mipi_spi/__init__.py +0 -9
  431. esphome/components/mipi_spi/display.py +220 -256
  432. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  433. esphome/components/mipi_spi/mipi_spi.h +556 -108
  434. esphome/components/mipi_spi/models/__init__.py +0 -65
  435. esphome/components/mipi_spi/models/adafruit.py +30 -0
  436. esphome/components/mipi_spi/models/amoled.py +41 -5
  437. esphome/components/mipi_spi/models/ili.py +5 -5
  438. esphome/components/mipi_spi/models/jc.py +1 -3
  439. esphome/components/mipi_spi/models/lilygo.py +1 -1
  440. esphome/components/mipi_spi/models/waveshare.py +16 -1
  441. esphome/components/mixer/speaker/__init__.py +4 -5
  442. esphome/components/mlx90393/sensor.py +7 -5
  443. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  444. esphome/components/mlx90614/mlx90614.cpp +0 -1
  445. esphome/components/mmc5603/mmc5603.cpp +0 -1
  446. esphome/components/mmc5983/mmc5983.cpp +0 -2
  447. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  448. esphome/components/mpr121/__init__.py +7 -6
  449. esphome/components/mpr121/mpr121.cpp +0 -1
  450. esphome/components/mpu6050/mpu6050.cpp +0 -1
  451. esphome/components/mpu6886/mpu6886.cpp +0 -1
  452. esphome/components/mqtt/__init__.py +1 -2
  453. esphome/components/mqtt/mqtt_button.cpp +1 -1
  454. esphome/components/mqtt/mqtt_client.cpp +0 -1
  455. esphome/components/mqtt/mqtt_component.cpp +8 -14
  456. esphome/components/mqtt/mqtt_component.h +0 -7
  457. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  458. esphome/components/mqtt/mqtt_sensor.h +0 -1
  459. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  461. esphome/components/ms5611/ms5611.cpp +0 -1
  462. esphome/components/ms8607/ms8607.cpp +0 -1
  463. esphome/components/msa3xx/msa3xx.cpp +0 -2
  464. esphome/components/my9231/my9231.cpp +0 -2
  465. esphome/components/nau7802/nau7802.cpp +0 -1
  466. esphome/components/neopixelbus/light.py +3 -0
  467. esphome/components/network/util.cpp +29 -0
  468. esphome/components/nextion/nextion.cpp +2 -2
  469. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  470. esphome/components/npi19/npi19.cpp +0 -2
  471. esphome/components/nrf52/__init__.py +223 -0
  472. esphome/components/nrf52/boards.py +34 -0
  473. esphome/components/nrf52/const.py +18 -0
  474. esphome/components/nrf52/gpio.py +79 -0
  475. esphome/components/number/__init__.py +2 -1
  476. esphome/components/one_wire/__init__.py +1 -2
  477. esphome/components/one_wire/one_wire.cpp +0 -2
  478. esphome/components/one_wire/one_wire.h +0 -2
  479. esphome/components/opentherm/hub.cpp +0 -1
  480. esphome/components/opentherm/number/__init__.py +2 -2
  481. esphome/components/openthread/__init__.py +2 -3
  482. esphome/components/openthread/openthread.cpp +30 -13
  483. esphome/components/openthread/openthread.h +3 -0
  484. esphome/components/openthread/openthread_esp.cpp +3 -1
  485. esphome/components/opt3001/sensor.py +2 -6
  486. esphome/components/output/__init__.py +38 -0
  487. esphome/components/output/automation.h +24 -0
  488. esphome/components/output/switch/output_switch.cpp +0 -2
  489. esphome/components/packages/__init__.py +1 -2
  490. esphome/components/packet_transport/__init__.py +4 -3
  491. esphome/components/pca6416a/pca6416a.cpp +0 -1
  492. esphome/components/pca9554/pca9554.cpp +0 -1
  493. esphome/components/pca9685/pca9685_output.cpp +0 -2
  494. esphome/components/pcf85063/pcf85063.cpp +0 -1
  495. esphome/components/pcf8563/pcf8563.cpp +0 -1
  496. esphome/components/pcf8574/pcf8574.cpp +0 -1
  497. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  498. esphome/components/pipsolar/pipsolar.cpp +54 -42
  499. esphome/components/pipsolar/pipsolar.h +5 -4
  500. esphome/components/pipsolar/sensor/__init__.py +1 -1
  501. esphome/components/pm2005/pm2005.cpp +0 -1
  502. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  503. esphome/components/pmwcs3/sensor.py +1 -2
  504. esphome/components/pn532/pn532.cpp +0 -2
  505. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  506. esphome/components/power_supply/power_supply.cpp +7 -10
  507. esphome/components/power_supply/power_supply.h +1 -1
  508. esphome/components/psram/__init__.py +6 -1
  509. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  510. esphome/components/pulse_counter/sensor.py +9 -6
  511. esphome/components/pylontech/pylontech.cpp +0 -1
  512. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  513. esphome/components/qmp6988/qmp6988.cpp +0 -2
  514. esphome/components/qspi_dbi/display.py +2 -3
  515. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  516. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  517. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  518. esphome/components/rc522/rc522.cpp +9 -31
  519. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  520. esphome/components/remote_base/__init__.py +5 -6
  521. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  522. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  523. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  524. esphome/components/remote_transmitter/__init__.py +26 -0
  525. esphome/components/remote_transmitter/automation.h +18 -0
  526. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  527. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  528. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  529. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  530. esphome/components/resampler/speaker/__init__.py +4 -5
  531. esphome/components/rf_bridge/__init__.py +4 -8
  532. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  533. esphome/components/rp2040/__init__.py +3 -1
  534. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  535. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  536. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  537. esphome/components/rpi_dpi_rgb/display.py +13 -15
  538. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  539. esphome/components/runtime_stats/__init__.py +34 -0
  540. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  541. esphome/components/runtime_stats/runtime_stats.h +132 -0
  542. esphome/components/scd30/scd30.cpp +0 -2
  543. esphome/components/scd30/sensor.py +1 -2
  544. esphome/components/scd4x/scd4x.cpp +0 -1
  545. esphome/components/scd4x/sensor.py +1 -3
  546. esphome/components/sdl/display.py +3 -1
  547. esphome/components/sdl/sdl_esphome.cpp +0 -2
  548. esphome/components/sdp3x/sdp3x.cpp +0 -2
  549. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  550. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  551. esphome/components/select/__init__.py +2 -3
  552. esphome/components/select/select_traits.cpp +1 -1
  553. esphome/components/select/select_traits.h +1 -1
  554. esphome/components/sen0321/sen0321.cpp +0 -1
  555. esphome/components/sen5x/sen5x.cpp +0 -2
  556. esphome/components/senseair/senseair.cpp +7 -3
  557. esphome/components/senseair/senseair.h +11 -0
  558. esphome/components/sensor/__init__.py +36 -4
  559. esphome/components/sensor/filter.cpp +49 -10
  560. esphome/components/sensor/filter.h +22 -7
  561. esphome/components/sensor/sensor.cpp +0 -1
  562. esphome/components/sensor/sensor.h +0 -9
  563. esphome/components/sfa30/sfa30.cpp +0 -4
  564. esphome/components/sgp30/sgp30.cpp +0 -2
  565. esphome/components/sgp4x/sensor.py +1 -1
  566. esphome/components/sgp4x/sgp4x.cpp +0 -2
  567. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  568. esphome/components/sht3xd/sht3xd.cpp +0 -2
  569. esphome/components/sht4x/sht4x.cpp +0 -2
  570. esphome/components/shtcx/shtcx.cpp +0 -1
  571. esphome/components/sim800l/__init__.py +2 -4
  572. esphome/components/sm16716/sm16716.cpp +0 -1
  573. esphome/components/sm2135/sm2135.cpp +0 -1
  574. esphome/components/sm2235/sm2235.cpp +0 -1
  575. esphome/components/sm2335/sm2335.cpp +0 -1
  576. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  577. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  578. esphome/components/sntp/sntp_component.cpp +0 -1
  579. esphome/components/sound_level/sensor.py +1 -1
  580. esphome/components/speaker/media_player/__init__.py +21 -33
  581. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  582. esphome/components/spi/__init__.py +29 -13
  583. esphome/components/spi/spi.cpp +0 -2
  584. esphome/components/spi_device/spi_device.cpp +1 -4
  585. esphome/components/sprinkler/__init__.py +4 -4
  586. esphome/components/sps30/sps30.cpp +0 -1
  587. esphome/components/ssd1306_base/__init__.py +11 -11
  588. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  589. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  590. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  591. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  592. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  593. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  594. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  595. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  596. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  597. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  598. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  599. esphome/components/st7701s/display.py +10 -14
  600. esphome/components/st7701s/st7701s.cpp +0 -3
  601. esphome/components/st7735/st7735.cpp +0 -1
  602. esphome/components/st7789v/st7789v.cpp +0 -1
  603. esphome/components/st7920/st7920.cpp +0 -1
  604. esphome/components/status_led/light/status_led_light.cpp +0 -2
  605. esphome/components/status_led/status_led.cpp +0 -1
  606. esphome/components/stepper/__init__.py +2 -4
  607. esphome/components/sts3x/sts3x.cpp +0 -1
  608. esphome/components/substitutions/__init__.py +10 -16
  609. esphome/components/substitutions/jinja.py +24 -1
  610. esphome/components/sun/__init__.py +2 -3
  611. esphome/components/switch/__init__.py +31 -1
  612. esphome/components/switch/automation.h +24 -0
  613. esphome/components/switch/switch.cpp +8 -0
  614. esphome/components/switch/switch.h +8 -0
  615. esphome/components/sx126x/sx126x.cpp +0 -2
  616. esphome/components/sx127x/sx127x.cpp +0 -2
  617. esphome/components/sx1509/__init__.py +7 -5
  618. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  619. esphome/components/sx1509/sx1509.cpp +0 -2
  620. esphome/components/syslog/esphome_syslog.cpp +1 -1
  621. esphome/components/tc74/tc74.cpp +0 -1
  622. esphome/components/tca9548a/tca9548a.cpp +0 -1
  623. esphome/components/tca9555/tca9555.cpp +0 -1
  624. esphome/components/tcs34725/tcs34725.cpp +0 -1
  625. esphome/components/tee501/tee501.cpp +0 -1
  626. esphome/components/tem3200/tem3200.cpp +0 -2
  627. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  628. esphome/components/template/cover/template_cover.cpp +0 -1
  629. esphome/components/template/select/template_select.cpp +0 -1
  630. esphome/components/template/text/template_text.cpp +0 -2
  631. esphome/components/template/valve/template_valve.cpp +0 -1
  632. esphome/components/text/__init__.py +0 -1
  633. esphome/components/text/text_traits.h +2 -0
  634. esphome/components/text_sensor/__init__.py +2 -1
  635. esphome/components/text_sensor/text_sensor.cpp +0 -2
  636. esphome/components/text_sensor/text_sensor.h +0 -8
  637. esphome/components/thermostat/climate.py +4 -4
  638. esphome/components/time/__init__.py +7 -4
  639. esphome/components/time/real_time_clock.cpp +16 -3
  640. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  641. esphome/components/tlc5947/tlc5947.cpp +0 -2
  642. esphome/components/tlc5971/tlc5971.cpp +0 -2
  643. esphome/components/tm1621/tm1621.cpp +0 -2
  644. esphome/components/tm1637/tm1637.cpp +0 -2
  645. esphome/components/tm1638/tm1638.cpp +0 -2
  646. esphome/components/tm1651/__init__.py +45 -48
  647. esphome/components/tm1651/tm1651.cpp +213 -47
  648. esphome/components/tm1651/tm1651.h +37 -32
  649. esphome/components/tmp117/tmp117.cpp +0 -2
  650. esphome/components/tsl2561/tsl2561.cpp +0 -1
  651. esphome/components/tsl2591/tsl2591.cpp +0 -1
  652. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  653. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  654. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  655. esphome/components/tuya/climate/__init__.py +9 -10
  656. esphome/components/tuya/number/__init__.py +8 -6
  657. esphome/components/tx20/tx20.cpp +0 -1
  658. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  659. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  660. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  661. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  662. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  663. esphome/components/udp/__init__.py +1 -1
  664. esphome/components/ufire_ec/sensor.py +1 -2
  665. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  666. esphome/components/ufire_ise/sensor.py +1 -2
  667. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  668. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  669. esphome/components/update/__init__.py +0 -1
  670. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  671. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  672. esphome/components/usb_host/usb_host_client.cpp +0 -1
  673. esphome/components/usb_host/usb_host_component.cpp +0 -1
  674. esphome/components/valve/__init__.py +0 -1
  675. esphome/components/veml3235/veml3235.cpp +0 -3
  676. esphome/components/veml7700/veml7700.cpp +0 -2
  677. esphome/components/version/version_text_sensor.cpp +0 -1
  678. esphome/components/version/version_text_sensor.h +0 -1
  679. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  680. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  681. esphome/components/web_server/__init__.py +13 -0
  682. esphome/components/web_server/web_server.cpp +188 -353
  683. esphome/components/web_server/web_server.h +61 -1
  684. esphome/components/web_server_base/__init__.py +1 -1
  685. esphome/components/web_server_base/web_server_base.cpp +2 -0
  686. esphome/components/web_server_base/web_server_base.h +6 -0
  687. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  688. esphome/components/web_server_idf/web_server_idf.h +2 -0
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  690. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  691. esphome/components/wifi/__init__.py +17 -43
  692. esphome/components/wifi/wifi_component.cpp +100 -36
  693. esphome/components/wifi/wifi_component.h +5 -1
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  695. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  696. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  697. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  698. esphome/components/wireguard/wireguard.cpp +0 -2
  699. esphome/components/x9c/x9c.cpp +0 -2
  700. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  701. esphome/components/xl9535/xl9535.cpp +0 -2
  702. esphome/components/zephyr/__init__.py +252 -0
  703. esphome/components/zephyr/const.py +16 -0
  704. esphome/components/zephyr/core.cpp +90 -0
  705. esphome/components/zephyr/gpio.cpp +120 -0
  706. esphome/components/zephyr/gpio.h +38 -0
  707. esphome/components/zephyr/pre_build.py.script +4 -0
  708. esphome/components/zephyr/preferences.cpp +156 -0
  709. esphome/components/zephyr/preferences.h +13 -0
  710. esphome/config.py +38 -16
  711. esphome/config_helpers.py +1 -2
  712. esphome/config_validation.py +12 -16
  713. esphome/const.py +26 -1
  714. esphome/core/__init__.py +92 -51
  715. esphome/core/application.cpp +75 -21
  716. esphome/core/application.h +106 -171
  717. esphome/core/color.h +10 -0
  718. esphome/core/component.cpp +41 -25
  719. esphome/core/component.h +9 -6
  720. esphome/core/component_iterator.cpp +61 -261
  721. esphome/core/component_iterator.h +15 -0
  722. esphome/core/config.py +26 -11
  723. esphome/core/defines.h +40 -2
  724. esphome/core/entity_base.h +18 -0
  725. esphome/core/entity_helpers.py +45 -10
  726. esphome/core/helpers.cpp +8 -15
  727. esphome/core/helpers.h +60 -6
  728. esphome/core/lock_free_queue.h +1 -1
  729. esphome/core/scheduler.cpp +311 -77
  730. esphome/core/scheduler.h +141 -28
  731. esphome/cpp_generator.py +2 -6
  732. esphome/cpp_helpers.py +1 -1
  733. esphome/dashboard/dashboard.py +2 -3
  734. esphome/dashboard/dns.py +2 -8
  735. esphome/dashboard/web_server.py +34 -19
  736. esphome/espota2.py +1 -4
  737. esphome/git.py +3 -1
  738. esphome/helpers.py +23 -4
  739. esphome/log.py +3 -1
  740. esphome/mqtt.py +3 -5
  741. esphome/platformio_api.py +7 -4
  742. esphome/types.py +12 -0
  743. esphome/util.py +20 -8
  744. esphome/voluptuous_schema.py +4 -3
  745. esphome/vscode.py +1 -2
  746. esphome/wizard.py +1 -4
  747. esphome/writer.py +16 -108
  748. esphome/yaml_util.py +7 -5
  749. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
  750. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/RECORD +755 -675
  751. esphome/components/mipi_spi/models/commands.py +0 -82
  752. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  753. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
  754. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
  755. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
  756. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
@@ -4,6 +4,7 @@ import esphome.codegen as cg
4
4
  from esphome.components import i2c, sensirion_common, sensor
5
5
  import esphome.config_validation as cv
6
6
  from esphome.const import (
7
+ CONF_ALTITUDE_COMPENSATION,
7
8
  CONF_AMBIENT_PRESSURE_COMPENSATION,
8
9
  CONF_AMBIENT_PRESSURE_COMPENSATION_SOURCE,
9
10
  CONF_AUTOMATIC_SELF_CALIBRATION,
@@ -49,9 +50,6 @@ PerformForcedCalibrationAction = scd4x_ns.class_(
49
50
  )
50
51
  FactoryResetAction = scd4x_ns.class_("FactoryResetAction", automation.Action)
51
52
 
52
-
53
- CONF_ALTITUDE_COMPENSATION = "altitude_compensation"
54
-
55
53
  CONFIG_SCHEMA = (
56
54
  cv.Schema(
57
55
  {
@@ -36,7 +36,9 @@ def get_sdl_options(value):
36
36
  if value != "":
37
37
  return value
38
38
  try:
39
- return subprocess.check_output(["sdl2-config", "--cflags", "--libs"]).decode()
39
+ return subprocess.check_output(
40
+ ["sdl2-config", "--cflags", "--libs"], close_fds=False
41
+ ).decode()
40
42
  except Exception as e:
41
43
  raise cv.Invalid("Unable to run sdl2-config - have you installed sdl2?") from e
42
44
 
@@ -6,7 +6,6 @@ namespace esphome {
6
6
  namespace sdl {
7
7
 
8
8
  void Sdl::setup() {
9
- ESP_LOGD(TAG, "Starting setup");
10
9
  SDL_Init(SDL_INIT_VIDEO);
11
10
  this->window_ = SDL_CreateWindow(App.get_name().c_str(), this->pos_x_, this->pos_y_, this->width_, this->height_,
12
11
  this->window_options_);
@@ -15,7 +14,6 @@ void Sdl::setup() {
15
14
  this->texture_ =
16
15
  SDL_CreateTexture(this->renderer_, SDL_PIXELFORMAT_RGB565, SDL_TEXTUREACCESS_STATIC, this->width_, this->height_);
17
16
  SDL_SetTextureBlendMode(this->texture_, SDL_BLENDMODE_BLEND);
18
- ESP_LOGD(TAG, "Setup Complete");
19
17
  }
20
18
  void Sdl::update() {
21
19
  this->do_update_();
@@ -17,8 +17,6 @@ static const uint16_t SDP3X_STOP_MEAS = 0x3FF9;
17
17
  void SDP3XComponent::update() { this->read_pressure_(); }
18
18
 
19
19
  void SDP3XComponent::setup() {
20
- ESP_LOGCONFIG(TAG, "Running setup");
21
-
22
20
  if (!this->write_command(SDP3X_STOP_MEAS)) {
23
21
  ESP_LOGW(TAG, "Stop failed"); // This sometimes fails for no good reason
24
22
  }
@@ -62,7 +62,6 @@ void MR24HPC1Component::dump_config() {
62
62
 
63
63
  // Initialisation functions
64
64
  void MR24HPC1Component::setup() {
65
- ESP_LOGCONFIG(TAG, "Running setup");
66
65
  this->check_uart_settings(115200);
67
66
 
68
67
  if (this->custom_mode_number_ != nullptr) {
@@ -91,7 +90,6 @@ void MR24HPC1Component::setup() {
91
90
  memset(this->sg_frame_buf_, 0, FRAME_BUF_MAX_SIZE);
92
91
 
93
92
  this->set_interval(8000, [this]() { this->update_(); });
94
- ESP_LOGCONFIG(TAG, "Set up MR24HPC1 complete");
95
93
  }
96
94
 
97
95
  // Timed polling of radar data
@@ -31,7 +31,6 @@ void MR60FDA2Component::dump_config() {
31
31
 
32
32
  // Initialisation functions
33
33
  void MR60FDA2Component::setup() {
34
- ESP_LOGCONFIG(TAG, "Running setup");
35
34
  this->check_uart_settings(115200);
36
35
 
37
36
  this->current_frame_locate_ = LOCATE_FRAME_HEADER;
@@ -43,8 +42,6 @@ void MR60FDA2Component::setup() {
43
42
 
44
43
  memset(this->current_frame_buf_, 0, FRAME_BUF_MAX_SIZE);
45
44
  memset(this->current_data_buf_, 0, DATA_BUF_MAX_SIZE);
46
-
47
- ESP_LOGCONFIG(TAG, "Set up MR60FDA2 complete");
48
45
  }
49
46
 
50
47
  // main loop
@@ -118,15 +118,14 @@ async def register_select(var, config, *, options: list[str]):
118
118
  await setup_select_core_(var, config, options=options)
119
119
 
120
120
 
121
- async def new_select(config, *, options: list[str]):
122
- var = cg.new_Pvariable(config[CONF_ID])
121
+ async def new_select(config, *args, options: list[str]):
122
+ var = cg.new_Pvariable(config[CONF_ID], *args)
123
123
  await register_select(var, config, options=options)
124
124
  return var
125
125
 
126
126
 
127
127
  @coroutine_with_priority(100.0)
128
128
  async def to_code(config):
129
- cg.add_define("USE_SELECT")
130
129
  cg.add_global(select_ns.using)
131
130
 
132
131
 
@@ -5,7 +5,7 @@ namespace select {
5
5
 
6
6
  void SelectTraits::set_options(std::vector<std::string> options) { this->options_ = std::move(options); }
7
7
 
8
- std::vector<std::string> SelectTraits::get_options() const { return this->options_; }
8
+ const std::vector<std::string> &SelectTraits::get_options() const { return this->options_; }
9
9
 
10
10
  } // namespace select
11
11
  } // namespace esphome
@@ -9,7 +9,7 @@ namespace select {
9
9
  class SelectTraits {
10
10
  public:
11
11
  void set_options(std::vector<std::string> options);
12
- std::vector<std::string> get_options() const;
12
+ const std::vector<std::string> &get_options() const;
13
13
 
14
14
  protected:
15
15
  std::vector<std::string> options_;
@@ -8,7 +8,6 @@ namespace sen0321_sensor {
8
8
  static const char *const TAG = "sen0321_sensor.sensor";
9
9
 
10
10
  void Sen0321Sensor::setup() {
11
- ESP_LOGCONFIG(TAG, "Running setup");
12
11
  if (!this->write_byte(SENSOR_MODE_REGISTER, SENSOR_MODE_AUTO)) {
13
12
  ESP_LOGW(TAG, "Error setting measurement mode.");
14
13
  this->mark_failed();
@@ -30,8 +30,6 @@ static const int8_t SEN5X_MIN_INDEX_VALUE = 1 * SEN5X_INDEX_SCALE_FACTOR; //
30
30
  static const int16_t SEN5X_MAX_INDEX_VALUE = 500 * SEN5X_INDEX_SCALE_FACTOR; // must be adjusted by the scale factor
31
31
 
32
32
  void SEN5XComponent::setup() {
33
- ESP_LOGCONFIG(TAG, "Running setup");
34
-
35
33
  // the sensor needs 1000 ms to enter the idle state
36
34
  this->set_timeout(1000, [this]() {
37
35
  // Check if measurement is ready before reading the value
@@ -53,10 +53,14 @@ void SenseAirComponent::update() {
53
53
 
54
54
  this->status_clear_warning();
55
55
  const uint8_t length = response[2];
56
- const uint16_t status = (uint16_t(response[3]) << 8) | response[4];
57
- const int16_t ppm = int16_t((response[length + 1] << 8) | response[length + 2]);
56
+ const uint16_t status = encode_uint16(response[3], response[4]);
57
+ const uint16_t ppm = encode_uint16(response[length + 1], response[length + 2]);
58
58
 
59
- ESP_LOGD(TAG, "SenseAir Received CO₂=%dppm Status=0x%02X", ppm, status);
59
+ ESP_LOGD(TAG, "SenseAir Received CO₂=%uppm Status=0x%02X", ppm, status);
60
+ if (ppm == 0 && (status & SenseAirStatus::OUT_OF_RANGE_ERROR) != 0) {
61
+ ESP_LOGD(TAG, "Discarding 0 ppm reading with out-of-range status.");
62
+ return;
63
+ }
60
64
  if (this->co2_sensor_ != nullptr)
61
65
  this->co2_sensor_->publish_state(ppm);
62
66
  }
@@ -8,6 +8,17 @@
8
8
  namespace esphome {
9
9
  namespace senseair {
10
10
 
11
+ enum SenseAirStatus : uint8_t {
12
+ FATAL_ERROR = 1 << 0,
13
+ OFFSET_ERROR = 1 << 1,
14
+ ALGORITHM_ERROR = 1 << 2,
15
+ OUTPUT_ERROR = 1 << 3,
16
+ SELF_DIAGNOSTIC_ERROR = 1 << 4,
17
+ OUT_OF_RANGE_ERROR = 1 << 5,
18
+ MEMORY_ERROR = 1 << 6,
19
+ RESERVED = 1 << 7
20
+ };
21
+
11
22
  class SenseAirComponent : public PollingComponent, public uart::UARTDevice {
12
23
  public:
13
24
  void set_co2_sensor(sensor::Sensor *co2_sensor) { co2_sensor_ = co2_sensor; }
@@ -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();