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
@@ -16,373 +16,173 @@ void ComponentIterator::begin(bool include_internal) {
16
16
  this->at_ = 0;
17
17
  this->include_internal_ = include_internal;
18
18
  }
19
+
20
+ void ComponentIterator::advance_platform_() {
21
+ this->state_ = static_cast<IteratorState>(static_cast<uint32_t>(this->state_) + 1);
22
+ this->at_ = 0;
23
+ }
24
+
19
25
  void ComponentIterator::advance() {
20
- bool advance_platform = false;
21
- bool success = true;
22
26
  switch (this->state_) {
23
27
  case IteratorState::NONE:
24
28
  // not started
25
29
  return;
26
30
  case IteratorState::BEGIN:
27
31
  if (this->on_begin()) {
28
- advance_platform = true;
29
- } else {
30
- return;
32
+ advance_platform_();
31
33
  }
32
34
  break;
35
+
33
36
  #ifdef USE_BINARY_SENSOR
34
37
  case IteratorState::BINARY_SENSOR:
35
- if (this->at_ >= App.get_binary_sensors().size()) {
36
- advance_platform = true;
37
- } else {
38
- auto *binary_sensor = App.get_binary_sensors()[this->at_];
39
- if (binary_sensor->is_internal() && !this->include_internal_) {
40
- success = true;
41
- break;
42
- } else {
43
- success = this->on_binary_sensor(binary_sensor);
44
- }
45
- }
38
+ this->process_platform_item_(App.get_binary_sensors(), &ComponentIterator::on_binary_sensor);
46
39
  break;
47
40
  #endif
41
+
48
42
  #ifdef USE_COVER
49
43
  case IteratorState::COVER:
50
- if (this->at_ >= App.get_covers().size()) {
51
- advance_platform = true;
52
- } else {
53
- auto *cover = App.get_covers()[this->at_];
54
- if (cover->is_internal() && !this->include_internal_) {
55
- success = true;
56
- break;
57
- } else {
58
- success = this->on_cover(cover);
59
- }
60
- }
44
+ this->process_platform_item_(App.get_covers(), &ComponentIterator::on_cover);
61
45
  break;
62
46
  #endif
47
+
63
48
  #ifdef USE_FAN
64
49
  case IteratorState::FAN:
65
- if (this->at_ >= App.get_fans().size()) {
66
- advance_platform = true;
67
- } else {
68
- auto *fan = App.get_fans()[this->at_];
69
- if (fan->is_internal() && !this->include_internal_) {
70
- success = true;
71
- break;
72
- } else {
73
- success = this->on_fan(fan);
74
- }
75
- }
50
+ this->process_platform_item_(App.get_fans(), &ComponentIterator::on_fan);
76
51
  break;
77
52
  #endif
53
+
78
54
  #ifdef USE_LIGHT
79
55
  case IteratorState::LIGHT:
80
- if (this->at_ >= App.get_lights().size()) {
81
- advance_platform = true;
82
- } else {
83
- auto *light = App.get_lights()[this->at_];
84
- if (light->is_internal() && !this->include_internal_) {
85
- success = true;
86
- break;
87
- } else {
88
- success = this->on_light(light);
89
- }
90
- }
56
+ this->process_platform_item_(App.get_lights(), &ComponentIterator::on_light);
91
57
  break;
92
58
  #endif
59
+
93
60
  #ifdef USE_SENSOR
94
61
  case IteratorState::SENSOR:
95
- if (this->at_ >= App.get_sensors().size()) {
96
- advance_platform = true;
97
- } else {
98
- auto *sensor = App.get_sensors()[this->at_];
99
- if (sensor->is_internal() && !this->include_internal_) {
100
- success = true;
101
- break;
102
- } else {
103
- success = this->on_sensor(sensor);
104
- }
105
- }
62
+ this->process_platform_item_(App.get_sensors(), &ComponentIterator::on_sensor);
106
63
  break;
107
64
  #endif
65
+
108
66
  #ifdef USE_SWITCH
109
67
  case IteratorState::SWITCH:
110
- if (this->at_ >= App.get_switches().size()) {
111
- advance_platform = true;
112
- } else {
113
- auto *a_switch = App.get_switches()[this->at_];
114
- if (a_switch->is_internal() && !this->include_internal_) {
115
- success = true;
116
- break;
117
- } else {
118
- success = this->on_switch(a_switch);
119
- }
120
- }
68
+ this->process_platform_item_(App.get_switches(), &ComponentIterator::on_switch);
121
69
  break;
122
70
  #endif
71
+
123
72
  #ifdef USE_BUTTON
124
73
  case IteratorState::BUTTON:
125
- if (this->at_ >= App.get_buttons().size()) {
126
- advance_platform = true;
127
- } else {
128
- auto *button = App.get_buttons()[this->at_];
129
- if (button->is_internal() && !this->include_internal_) {
130
- success = true;
131
- break;
132
- } else {
133
- success = this->on_button(button);
134
- }
135
- }
74
+ this->process_platform_item_(App.get_buttons(), &ComponentIterator::on_button);
136
75
  break;
137
76
  #endif
77
+
138
78
  #ifdef USE_TEXT_SENSOR
139
79
  case IteratorState::TEXT_SENSOR:
140
- if (this->at_ >= App.get_text_sensors().size()) {
141
- advance_platform = true;
142
- } else {
143
- auto *text_sensor = App.get_text_sensors()[this->at_];
144
- if (text_sensor->is_internal() && !this->include_internal_) {
145
- success = true;
146
- break;
147
- } else {
148
- success = this->on_text_sensor(text_sensor);
149
- }
150
- }
80
+ this->process_platform_item_(App.get_text_sensors(), &ComponentIterator::on_text_sensor);
151
81
  break;
152
82
  #endif
83
+
153
84
  #ifdef USE_API_SERVICES
154
- case IteratorState ::SERVICE:
155
- if (this->at_ >= api::global_api_server->get_user_services().size()) {
156
- advance_platform = true;
157
- } else {
158
- auto *service = api::global_api_server->get_user_services()[this->at_];
159
- success = this->on_service(service);
160
- }
85
+ case IteratorState::SERVICE:
86
+ this->process_platform_item_(api::global_api_server->get_user_services(), &ComponentIterator::on_service);
161
87
  break;
162
88
  #endif
89
+
163
90
  #ifdef USE_CAMERA
164
- case IteratorState::CAMERA:
165
- if (camera::Camera::instance() == nullptr) {
166
- advance_platform = true;
167
- } else {
168
- if (camera::Camera::instance()->is_internal() && !this->include_internal_) {
169
- advance_platform = success = true;
170
- break;
171
- } else {
172
- advance_platform = success = this->on_camera(camera::Camera::instance());
173
- }
91
+ case IteratorState::CAMERA: {
92
+ camera::Camera *camera_instance = camera::Camera::instance();
93
+ if (camera_instance != nullptr && (!camera_instance->is_internal() || this->include_internal_)) {
94
+ this->on_camera(camera_instance);
174
95
  }
175
- break;
96
+ advance_platform_();
97
+ } break;
176
98
  #endif
99
+
177
100
  #ifdef USE_CLIMATE
178
101
  case IteratorState::CLIMATE:
179
- if (this->at_ >= App.get_climates().size()) {
180
- advance_platform = true;
181
- } else {
182
- auto *climate = App.get_climates()[this->at_];
183
- if (climate->is_internal() && !this->include_internal_) {
184
- success = true;
185
- break;
186
- } else {
187
- success = this->on_climate(climate);
188
- }
189
- }
102
+ this->process_platform_item_(App.get_climates(), &ComponentIterator::on_climate);
190
103
  break;
191
104
  #endif
105
+
192
106
  #ifdef USE_NUMBER
193
107
  case IteratorState::NUMBER:
194
- if (this->at_ >= App.get_numbers().size()) {
195
- advance_platform = true;
196
- } else {
197
- auto *number = App.get_numbers()[this->at_];
198
- if (number->is_internal() && !this->include_internal_) {
199
- success = true;
200
- break;
201
- } else {
202
- success = this->on_number(number);
203
- }
204
- }
108
+ this->process_platform_item_(App.get_numbers(), &ComponentIterator::on_number);
205
109
  break;
206
110
  #endif
111
+
207
112
  #ifdef USE_DATETIME_DATE
208
113
  case IteratorState::DATETIME_DATE:
209
- if (this->at_ >= App.get_dates().size()) {
210
- advance_platform = true;
211
- } else {
212
- auto *date = App.get_dates()[this->at_];
213
- if (date->is_internal() && !this->include_internal_) {
214
- success = true;
215
- break;
216
- } else {
217
- success = this->on_date(date);
218
- }
219
- }
114
+ this->process_platform_item_(App.get_dates(), &ComponentIterator::on_date);
220
115
  break;
221
116
  #endif
117
+
222
118
  #ifdef USE_DATETIME_TIME
223
119
  case IteratorState::DATETIME_TIME:
224
- if (this->at_ >= App.get_times().size()) {
225
- advance_platform = true;
226
- } else {
227
- auto *time = App.get_times()[this->at_];
228
- if (time->is_internal() && !this->include_internal_) {
229
- success = true;
230
- break;
231
- } else {
232
- success = this->on_time(time);
233
- }
234
- }
120
+ this->process_platform_item_(App.get_times(), &ComponentIterator::on_time);
235
121
  break;
236
122
  #endif
123
+
237
124
  #ifdef USE_DATETIME_DATETIME
238
125
  case IteratorState::DATETIME_DATETIME:
239
- if (this->at_ >= App.get_datetimes().size()) {
240
- advance_platform = true;
241
- } else {
242
- auto *datetime = App.get_datetimes()[this->at_];
243
- if (datetime->is_internal() && !this->include_internal_) {
244
- success = true;
245
- break;
246
- } else {
247
- success = this->on_datetime(datetime);
248
- }
249
- }
126
+ this->process_platform_item_(App.get_datetimes(), &ComponentIterator::on_datetime);
250
127
  break;
251
128
  #endif
129
+
252
130
  #ifdef USE_TEXT
253
131
  case IteratorState::TEXT:
254
- if (this->at_ >= App.get_texts().size()) {
255
- advance_platform = true;
256
- } else {
257
- auto *text = App.get_texts()[this->at_];
258
- if (text->is_internal() && !this->include_internal_) {
259
- success = true;
260
- break;
261
- } else {
262
- success = this->on_text(text);
263
- }
264
- }
132
+ this->process_platform_item_(App.get_texts(), &ComponentIterator::on_text);
265
133
  break;
266
134
  #endif
135
+
267
136
  #ifdef USE_SELECT
268
137
  case IteratorState::SELECT:
269
- if (this->at_ >= App.get_selects().size()) {
270
- advance_platform = true;
271
- } else {
272
- auto *select = App.get_selects()[this->at_];
273
- if (select->is_internal() && !this->include_internal_) {
274
- success = true;
275
- break;
276
- } else {
277
- success = this->on_select(select);
278
- }
279
- }
138
+ this->process_platform_item_(App.get_selects(), &ComponentIterator::on_select);
280
139
  break;
281
140
  #endif
141
+
282
142
  #ifdef USE_LOCK
283
143
  case IteratorState::LOCK:
284
- if (this->at_ >= App.get_locks().size()) {
285
- advance_platform = true;
286
- } else {
287
- auto *a_lock = App.get_locks()[this->at_];
288
- if (a_lock->is_internal() && !this->include_internal_) {
289
- success = true;
290
- break;
291
- } else {
292
- success = this->on_lock(a_lock);
293
- }
294
- }
144
+ this->process_platform_item_(App.get_locks(), &ComponentIterator::on_lock);
295
145
  break;
296
146
  #endif
147
+
297
148
  #ifdef USE_VALVE
298
149
  case IteratorState::VALVE:
299
- if (this->at_ >= App.get_valves().size()) {
300
- advance_platform = true;
301
- } else {
302
- auto *valve = App.get_valves()[this->at_];
303
- if (valve->is_internal() && !this->include_internal_) {
304
- success = true;
305
- break;
306
- } else {
307
- success = this->on_valve(valve);
308
- }
309
- }
150
+ this->process_platform_item_(App.get_valves(), &ComponentIterator::on_valve);
310
151
  break;
311
152
  #endif
153
+
312
154
  #ifdef USE_MEDIA_PLAYER
313
155
  case IteratorState::MEDIA_PLAYER:
314
- if (this->at_ >= App.get_media_players().size()) {
315
- advance_platform = true;
316
- } else {
317
- auto *media_player = App.get_media_players()[this->at_];
318
- if (media_player->is_internal() && !this->include_internal_) {
319
- success = true;
320
- break;
321
- } else {
322
- success = this->on_media_player(media_player);
323
- }
324
- }
156
+ this->process_platform_item_(App.get_media_players(), &ComponentIterator::on_media_player);
325
157
  break;
326
158
  #endif
159
+
327
160
  #ifdef USE_ALARM_CONTROL_PANEL
328
161
  case IteratorState::ALARM_CONTROL_PANEL:
329
- if (this->at_ >= App.get_alarm_control_panels().size()) {
330
- advance_platform = true;
331
- } else {
332
- auto *a_alarm_control_panel = App.get_alarm_control_panels()[this->at_];
333
- if (a_alarm_control_panel->is_internal() && !this->include_internal_) {
334
- success = true;
335
- break;
336
- } else {
337
- success = this->on_alarm_control_panel(a_alarm_control_panel);
338
- }
339
- }
162
+ this->process_platform_item_(App.get_alarm_control_panels(), &ComponentIterator::on_alarm_control_panel);
340
163
  break;
341
164
  #endif
165
+
342
166
  #ifdef USE_EVENT
343
167
  case IteratorState::EVENT:
344
- if (this->at_ >= App.get_events().size()) {
345
- advance_platform = true;
346
- } else {
347
- auto *event = App.get_events()[this->at_];
348
- if (event->is_internal() && !this->include_internal_) {
349
- success = true;
350
- break;
351
- } else {
352
- success = this->on_event(event);
353
- }
354
- }
168
+ this->process_platform_item_(App.get_events(), &ComponentIterator::on_event);
355
169
  break;
356
170
  #endif
171
+
357
172
  #ifdef USE_UPDATE
358
173
  case IteratorState::UPDATE:
359
- if (this->at_ >= App.get_updates().size()) {
360
- advance_platform = true;
361
- } else {
362
- auto *update = App.get_updates()[this->at_];
363
- if (update->is_internal() && !this->include_internal_) {
364
- success = true;
365
- break;
366
- } else {
367
- success = this->on_update(update);
368
- }
369
- }
174
+ this->process_platform_item_(App.get_updates(), &ComponentIterator::on_update);
370
175
  break;
371
176
  #endif
177
+
372
178
  case IteratorState::MAX:
373
179
  if (this->on_end()) {
374
180
  this->state_ = IteratorState::NONE;
375
181
  }
376
182
  return;
377
183
  }
378
-
379
- if (advance_platform) {
380
- this->state_ = static_cast<IteratorState>(static_cast<uint8_t>(this->state_) + 1);
381
- this->at_ = 0;
382
- } else if (success) {
383
- this->at_++;
384
- }
385
184
  }
185
+
386
186
  bool ComponentIterator::on_end() { return true; }
387
187
  bool ComponentIterator::on_begin() { return true; }
388
188
  #ifdef USE_API_SERVICES
@@ -171,6 +171,21 @@ class ComponentIterator {
171
171
  } state_{IteratorState::NONE};
172
172
  uint16_t at_{0}; // Supports up to 65,535 entities per type
173
173
  bool include_internal_{false};
174
+
175
+ template<typename Container>
176
+ void process_platform_item_(const Container &items,
177
+ bool (ComponentIterator::*on_item)(typename Container::value_type)) {
178
+ if (this->at_ >= items.size()) {
179
+ this->advance_platform_();
180
+ } else {
181
+ typename Container::value_type item = items[this->at_];
182
+ if ((item->is_internal() && !this->include_internal_) || (this->*on_item)(item)) {
183
+ this->at_++;
184
+ }
185
+ }
186
+ }
187
+
188
+ void advance_platform_();
174
189
  };
175
190
 
176
191
  } // namespace esphome
esphome/core/config.py CHANGED
@@ -317,7 +317,7 @@ def preload_core_config(config, result) -> str:
317
317
 
318
318
  target_platforms = []
319
319
 
320
- for domain, _ in config.items():
320
+ for domain in config:
321
321
  if domain.startswith("."):
322
322
  continue
323
323
  if _is_target_platform(domain):
@@ -419,10 +419,27 @@ async def _add_automations(config):
419
419
  await automation.build_automation(trigger, [], conf)
420
420
 
421
421
 
422
+ # Datetime component has special subtypes that need additional defines
423
+ DATETIME_SUBTYPES = {"date", "time", "datetime"}
424
+
425
+
422
426
  @coroutine_with_priority(-100.0)
423
- async def _add_platform_reserves() -> None:
427
+ async def _add_platform_defines() -> None:
428
+ # Generate compile-time defines for platforms that have actual entities
429
+ # Only add USE_* and count defines when there are entities
424
430
  for platform_name, count in sorted(CORE.platform_counts.items()):
425
- cg.add(cg.RawStatement(f"App.reserve_{platform_name}({count});"), prepend=True)
431
+ if count <= 0:
432
+ continue
433
+
434
+ define_name = f"ESPHOME_ENTITY_{platform_name.upper()}_COUNT"
435
+ cg.add_define(define_name, count)
436
+
437
+ # Datetime subtypes only use USE_DATETIME_* defines
438
+ if platform_name in DATETIME_SUBTYPES:
439
+ cg.add_define(f"USE_DATETIME_{platform_name.upper()}")
440
+ else:
441
+ # Regular platforms use USE_* defines
442
+ cg.add_define(f"USE_{platform_name.upper()}")
426
443
 
427
444
 
428
445
  @coroutine_with_priority(100.0)
@@ -442,12 +459,10 @@ async def to_code(config: ConfigType) -> None:
442
459
  config[CONF_NAME_ADD_MAC_SUFFIX],
443
460
  )
444
461
  )
445
- # Reserve space for components to avoid reallocation during registration
446
- cg.add(
447
- cg.RawStatement(f"App.reserve_components({len(CORE.component_ids)});"),
448
- )
462
+ # Define component count for static allocation
463
+ cg.add_define("ESPHOME_COMPONENT_COUNT", len(CORE.component_ids))
449
464
 
450
- CORE.add_job(_add_platform_reserves)
465
+ CORE.add_job(_add_platform_defines)
451
466
 
452
467
  CORE.add_job(_add_automations, config)
453
468
 
@@ -514,8 +529,8 @@ async def to_code(config: ConfigType) -> None:
514
529
  all_areas.extend(config[CONF_AREAS])
515
530
 
516
531
  if all_areas:
517
- cg.add(cg.RawStatement(f"App.reserve_area({len(all_areas)});"))
518
532
  cg.add_define("USE_AREAS")
533
+ cg.add_define("ESPHOME_AREA_COUNT", len(all_areas))
519
534
 
520
535
  for area_conf in all_areas:
521
536
  area_id: core.ID = area_conf[CONF_ID]
@@ -532,9 +547,9 @@ async def to_code(config: ConfigType) -> None:
532
547
  if not devices:
533
548
  return
534
549
 
535
- # Reserve space for devices
536
- cg.add(cg.RawStatement(f"App.reserve_device({len(devices)});"))
550
+ # Define device count for static allocation
537
551
  cg.add_define("USE_DEVICES")
552
+ cg.add_define("ESPHOME_DEVICE_COUNT", len(devices))
538
553
 
539
554
  # Process each device
540
555
  for dev_conf in devices:
esphome/core/defines.h CHANGED
@@ -15,6 +15,9 @@
15
15
  #define ESPHOME_VARIANT "ESP32"
16
16
  #define ESPHOME_DEBUG_SCHEDULER
17
17
 
18
+ // Default threading model for static analysis (ESP32 is multi-threaded with atomics)
19
+ #define ESPHOME_THREAD_MULTI_ATOMICS
20
+
18
21
  // logger
19
22
  #define ESPHOME_LOG_LEVEL ESPHOME_LOG_LEVEL_VERY_VERBOSE
20
23
 
@@ -106,6 +109,8 @@
106
109
  #define USE_API
107
110
  #define USE_API_CLIENT_CONNECTED_TRIGGER
108
111
  #define USE_API_CLIENT_DISCONNECTED_TRIGGER
112
+ #define USE_API_HOMEASSISTANT_SERVICES
113
+ #define USE_API_HOMEASSISTANT_STATES
109
114
  #define USE_API_NOISE
110
115
  #define USE_API_PLAINTEXT
111
116
  #define USE_API_SERVICES
@@ -142,10 +147,15 @@
142
147
  #define USE_ESPHOME_TASK_LOG_BUFFER
143
148
 
144
149
  #define USE_BLUETOOTH_PROXY
150
+ #define BLUETOOTH_PROXY_MAX_CONNECTIONS 3
151
+ #define BLUETOOTH_PROXY_ADVERTISEMENT_BATCH_SIZE 16
145
152
  #define USE_CAPTIVE_PORTAL
146
153
  #define USE_ESP32_BLE
147
154
  #define USE_ESP32_BLE_CLIENT
155
+ #define USE_ESP32_BLE_DEVICE
148
156
  #define USE_ESP32_BLE_SERVER
157
+ #define USE_ESP32_BLE_UUID
158
+ #define USE_ESP32_BLE_ADVERTISING
149
159
  #define USE_I2C
150
160
  #define USE_IMPROV
151
161
  #define USE_MICROPHONE
@@ -156,18 +166,18 @@
156
166
  #define USE_SPI
157
167
  #define USE_VOICE_ASSISTANT
158
168
  #define USE_WEBSERVER
169
+ #define USE_WEBSERVER_AUTH
159
170
  #define USE_WEBSERVER_OTA
160
171
  #define USE_WEBSERVER_PORT 80 // NOLINT
161
172
  #define USE_WEBSERVER_SORTING
162
173
  #define USE_WIFI_11KV_SUPPORT
163
174
 
164
175
  #ifdef USE_ARDUINO
165
- #define USE_ARDUINO_VERSION_CODE VERSION_CODE(3, 1, 3)
176
+ #define USE_ARDUINO_VERSION_CODE VERSION_CODE(3, 2, 1)
166
177
  #define USE_ETHERNET
167
178
  #endif
168
179
 
169
180
  #ifdef USE_ESP_IDF
170
- #define USE_ESP_IDF_VERSION_CODE VERSION_CODE(5, 3, 2)
171
181
  #define USE_MICRO_WAKE_WORD
172
182
  #define USE_MICRO_WAKE_WORD_VAD
173
183
  #if defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2)
@@ -204,6 +214,7 @@
204
214
  {}
205
215
 
206
216
  #define USE_WEBSERVER
217
+ #define USE_WEBSERVER_AUTH
207
218
  #define USE_WEBSERVER_PORT 80 // NOLINT
208
219
  #endif
209
220
 
@@ -220,6 +231,7 @@
220
231
  #define USE_SOCKET_IMPL_LWIP_SOCKETS
221
232
  #define USE_SOCKET_SELECT_SUPPORT
222
233
  #define USE_WEBSERVER
234
+ #define USE_WEBSERVER_AUTH
223
235
  #define USE_WEBSERVER_PORT 80 // NOLINT
224
236
  #endif
225
237
 
@@ -233,3 +245,29 @@
233
245
  // #define USE_BSEC2 // Requires a library with proprietary license
234
246
 
235
247
  #define USE_DASHBOARD_IMPORT
248
+
249
+ // Default counts for static analysis
250
+ #define ESPHOME_COMPONENT_COUNT 50
251
+ #define ESPHOME_DEVICE_COUNT 10
252
+ #define ESPHOME_AREA_COUNT 10
253
+ #define ESPHOME_ENTITY_ALARM_CONTROL_PANEL_COUNT 1
254
+ #define ESPHOME_ENTITY_BINARY_SENSOR_COUNT 1
255
+ #define ESPHOME_ENTITY_BUTTON_COUNT 1
256
+ #define ESPHOME_ENTITY_CLIMATE_COUNT 1
257
+ #define ESPHOME_ENTITY_COVER_COUNT 1
258
+ #define ESPHOME_ENTITY_DATE_COUNT 1
259
+ #define ESPHOME_ENTITY_DATETIME_COUNT 1
260
+ #define ESPHOME_ENTITY_EVENT_COUNT 1
261
+ #define ESPHOME_ENTITY_FAN_COUNT 1
262
+ #define ESPHOME_ENTITY_LIGHT_COUNT 1
263
+ #define ESPHOME_ENTITY_LOCK_COUNT 1
264
+ #define ESPHOME_ENTITY_MEDIA_PLAYER_COUNT 1
265
+ #define ESPHOME_ENTITY_NUMBER_COUNT 1
266
+ #define ESPHOME_ENTITY_SELECT_COUNT 1
267
+ #define ESPHOME_ENTITY_SENSOR_COUNT 1
268
+ #define ESPHOME_ENTITY_SWITCH_COUNT 1
269
+ #define ESPHOME_ENTITY_TEXT_COUNT 1
270
+ #define ESPHOME_ENTITY_TEXT_SENSOR_COUNT 1
271
+ #define ESPHOME_ENTITY_TIME_COUNT 1
272
+ #define ESPHOME_ENTITY_UPDATE_COUNT 1
273
+ #define ESPHOME_ENTITY_VALVE_COUNT 1
@@ -54,6 +54,14 @@ class EntityBase {
54
54
  // Get/set this entity's icon
55
55
  std::string get_icon() const;
56
56
  void set_icon(const char *icon);
57
+ StringRef get_icon_ref() const {
58
+ static constexpr auto EMPTY_STRING = StringRef::from_lit("");
59
+ #ifdef USE_ENTITY_ICON
60
+ return this->icon_c_str_ == nullptr ? EMPTY_STRING : StringRef(this->icon_c_str_);
61
+ #else
62
+ return EMPTY_STRING;
63
+ #endif
64
+ }
57
65
 
58
66
  #ifdef USE_DEVICES
59
67
  // Get/set this entity's device id
@@ -105,6 +113,11 @@ class EntityBase_DeviceClass { // NOLINT(readability-identifier-naming)
105
113
  std::string get_device_class();
106
114
  /// Manually set the device class.
107
115
  void set_device_class(const char *device_class);
116
+ /// Get the device class as StringRef
117
+ StringRef get_device_class_ref() const {
118
+ static constexpr auto EMPTY_STRING = StringRef::from_lit("");
119
+ return this->device_class_ == nullptr ? EMPTY_STRING : StringRef(this->device_class_);
120
+ }
108
121
 
109
122
  protected:
110
123
  const char *device_class_{nullptr}; ///< Device class override
@@ -116,6 +129,11 @@ class EntityBase_UnitOfMeasurement { // NOLINT(readability-identifier-naming)
116
129
  std::string get_unit_of_measurement();
117
130
  /// Manually set the unit of measurement.
118
131
  void set_unit_of_measurement(const char *unit_of_measurement);
132
+ /// Get the unit of measurement as StringRef
133
+ StringRef get_unit_of_measurement_ref() const {
134
+ static constexpr auto EMPTY_STRING = StringRef::from_lit("");
135
+ return this->unit_of_measurement_ == nullptr ? EMPTY_STRING : StringRef(this->unit_of_measurement_);
136
+ }
119
137
 
120
138
  protected:
121
139
  const char *unit_of_measurement_{nullptr}; ///< Unit of measurement override