esphome 2025.3.3__py3-none-any.whl → 2025.4.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 (713) hide show
  1. esphome/__main__.py +34 -10
  2. esphome/components/a01nyub/sensor.py +2 -2
  3. esphome/components/a02yyuw/sensor.py +2 -2
  4. esphome/components/a4988/stepper.py +1 -2
  5. esphome/components/absolute_humidity/sensor.py +3 -3
  6. esphome/components/ac_dimmer/output.py +3 -3
  7. esphome/components/adalight/__init__.py +2 -2
  8. esphome/components/adc128s102/__init__.py +1 -1
  9. esphome/components/adc128s102/sensor/__init__.py +3 -3
  10. esphome/components/addressable_light/display.py +5 -5
  11. esphome/components/ade7880/sensor.py +2 -2
  12. esphome/components/ade7953_base/__init__.py +10 -10
  13. esphome/components/ade7953_i2c/sensor.py +1 -2
  14. esphome/components/ade7953_spi/sensor.py +1 -2
  15. esphome/components/ads1115/__init__.py +1 -1
  16. esphome/components/ads1115/sensor/__init__.py +4 -3
  17. esphome/components/ads1118/__init__.py +1 -1
  18. esphome/components/ads1118/sensor/__init__.py +5 -4
  19. esphome/components/ags10/sensor.py +9 -9
  20. esphome/components/aht10/sensor.py +2 -2
  21. esphome/components/airthings_ble/__init__.py +1 -1
  22. esphome/components/airthings_wave_base/__init__.py +2 -3
  23. esphome/components/airthings_wave_mini/sensor.py +2 -5
  24. esphome/components/airthings_wave_plus/sensor.py +8 -9
  25. esphome/components/alpha3/sensor.py +5 -5
  26. esphome/components/am2315c/am2315c.cpp +4 -4
  27. esphome/components/am2315c/sensor.py +1 -1
  28. esphome/components/am2320/sensor.py +1 -1
  29. esphome/components/am43/cover/__init__.py +1 -1
  30. esphome/components/am43/sensor/__init__.py +3 -3
  31. esphome/components/analog_threshold/binary_sensor.py +2 -5
  32. esphome/components/anova/climate.py +1 -1
  33. esphome/components/apds9306/sensor.py +1 -1
  34. esphome/components/apds9960/__init__.py +1 -1
  35. esphome/components/apds9960/binary_sensor.py +2 -1
  36. esphome/components/apds9960/sensor.py +3 -2
  37. esphome/components/api/api_frame_helper.cpp +25 -1
  38. esphome/components/as3935/__init__.py +3 -3
  39. esphome/components/as3935/binary_sensor.py +2 -1
  40. esphome/components/as3935/sensor.py +4 -3
  41. esphome/components/as3935_i2c/__init__.py +1 -1
  42. esphome/components/as3935_spi/__init__.py +1 -1
  43. esphome/components/as5600/__init__.py +2 -2
  44. esphome/components/as5600/sensor/__init__.py +10 -9
  45. esphome/components/as7341/sensor.py +1 -2
  46. esphome/components/at581x/__init__.py +4 -8
  47. esphome/components/at581x/switch/__init__.py +2 -4
  48. esphome/components/atc_mithermometer/sensor.py +3 -3
  49. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +7 -3
  50. esphome/components/b_parasite/sensor.py +2 -2
  51. esphome/components/ballu/climate.py +1 -1
  52. esphome/components/bang_bang/climate.py +2 -2
  53. esphome/components/bedjet/__init__.py +2 -6
  54. esphome/components/bedjet/climate/__init__.py +3 -6
  55. esphome/components/bedjet/fan/__init__.py +4 -9
  56. esphome/components/bedjet/sensor/__init__.py +3 -6
  57. esphome/components/beken_spi_led_strip/light.py +2 -2
  58. esphome/components/bh1750/sensor.py +2 -6
  59. esphome/components/binary/fan/__init__.py +2 -1
  60. esphome/components/binary/light/__init__.py +3 -2
  61. esphome/components/binary_sensor_map/sensor.py +5 -6
  62. esphome/components/bl0939/sensor.py +1 -1
  63. esphome/components/bl0940/sensor.py +3 -3
  64. esphome/components/ble_client/__init__.py +3 -2
  65. esphome/components/ble_client/sensor/__init__.py +1 -1
  66. esphome/components/ble_client/text_sensor/__init__.py +1 -1
  67. esphome/components/bluetooth_proxy/__init__.py +35 -23
  68. esphome/components/bme280_base/__init__.py +1 -1
  69. esphome/components/bme280_i2c/sensor.py +3 -2
  70. esphome/components/bme280_spi/sensor.py +3 -2
  71. esphome/components/bme680/sensor.py +4 -4
  72. esphome/components/bme680_bsec/__init__.py +1 -1
  73. esphome/components/bme680_bsec/sensor.py +3 -6
  74. esphome/components/bme680_bsec/text_sensor.py +3 -2
  75. esphome/components/bmi160/sensor.py +6 -6
  76. esphome/components/bmp085/sensor.py +1 -1
  77. esphome/components/bmp280_base/__init__.py +1 -1
  78. esphome/components/bmp280_i2c/sensor.py +3 -2
  79. esphome/components/bmp280_spi/sensor.py +3 -2
  80. esphome/components/bmp3xx_base/__init__.py +1 -1
  81. esphome/components/bmp3xx_i2c/sensor.py +2 -1
  82. esphome/components/bmp3xx_spi/sensor.py +2 -1
  83. esphome/components/bmp581/sensor.py +2 -1
  84. esphome/components/bp1658cj/__init__.py +2 -6
  85. esphome/components/bp1658cj/output.py +2 -1
  86. esphome/components/bp5758d/__init__.py +2 -6
  87. esphome/components/bp5758d/output.py +3 -2
  88. esphome/components/canbus/__init__.py +13 -2
  89. esphome/components/canbus/canbus.cpp +7 -1
  90. esphome/components/cap1188/__init__.py +2 -2
  91. esphome/components/cap1188/binary_sensor.py +3 -2
  92. esphome/components/captive_portal/__init__.py +3 -3
  93. esphome/components/ccs811/sensor.py +10 -10
  94. esphome/components/cd74hc4067/__init__.py +2 -5
  95. esphome/components/cd74hc4067/sensor.py +6 -5
  96. esphome/components/climate_ir/__init__.py +2 -2
  97. esphome/components/climate_ir_lg/climate.py +1 -1
  98. esphome/components/color/__init__.py +1 -2
  99. esphome/components/color_temperature/light.py +2 -2
  100. esphome/components/combination/sensor.py +1 -1
  101. esphome/components/coolix/climate.py +1 -1
  102. esphome/components/copy/binary_sensor/__init__.py +1 -1
  103. esphome/components/copy/button/__init__.py +1 -1
  104. esphome/components/copy/cover/__init__.py +1 -1
  105. esphome/components/copy/fan/__init__.py +2 -7
  106. esphome/components/copy/lock/__init__.py +2 -7
  107. esphome/components/copy/number/__init__.py +1 -1
  108. esphome/components/copy/select/__init__.py +2 -7
  109. esphome/components/copy/sensor/__init__.py +2 -2
  110. esphome/components/copy/switch/__init__.py +1 -1
  111. esphome/components/copy/text/__init__.py +2 -7
  112. esphome/components/copy/text_sensor/__init__.py +2 -6
  113. esphome/components/cs5460a/sensor.py +7 -7
  114. esphome/components/cse7761/sensor.py +2 -2
  115. esphome/components/cse7766/sensor.py +1 -1
  116. esphome/components/cst226/touchscreen/__init__.py +3 -4
  117. esphome/components/ct_clamp/sensor.py +1 -1
  118. esphome/components/current_based/cover.py +3 -4
  119. esphome/components/cwww/light.py +3 -3
  120. esphome/components/dac7678/__init__.py +1 -1
  121. esphome/components/dac7678/output.py +2 -1
  122. esphome/components/daikin/climate.py +1 -1
  123. esphome/components/daikin_arc/climate.py +1 -1
  124. esphome/components/daikin_brc/climate.py +1 -1
  125. esphome/components/dallas_temp/sensor.py +1 -1
  126. esphome/components/daly_bms/__init__.py +2 -2
  127. esphome/components/daly_bms/binary_sensor.py +3 -2
  128. esphome/components/daly_bms/sensor.py +14 -13
  129. esphome/components/daly_bms/text_sensor.py +3 -2
  130. esphome/components/dashboard_import/__init__.py +5 -5
  131. esphome/components/debug/sensor.py +7 -6
  132. esphome/components/debug/text_sensor.py +1 -1
  133. esphome/components/deep_sleep/__init__.py +12 -13
  134. esphome/components/delonghi/climate.py +1 -1
  135. esphome/components/demo/__init__.py +1 -1
  136. esphome/components/dfplayer/__init__.py +3 -3
  137. esphome/components/dfrobot_sen0395/__init__.py +3 -3
  138. esphome/components/dfrobot_sen0395/binary_sensor.py +2 -1
  139. esphome/components/dfrobot_sen0395/switch/__init__.py +2 -3
  140. esphome/components/dht/sensor.py +4 -5
  141. esphome/components/dht12/sensor.py +3 -3
  142. esphome/components/dps310/sensor.py +3 -3
  143. esphome/components/ds1307/time.py +2 -3
  144. esphome/components/dsmr/__init__.py +3 -7
  145. esphome/components/dsmr/sensor.py +5 -4
  146. esphome/components/dsmr/text_sensor.py +3 -2
  147. esphome/components/duty_cycle/sensor.py +3 -8
  148. esphome/components/duty_time/sensor.py +7 -7
  149. esphome/components/e131/__init__.py +3 -3
  150. esphome/components/ee895/sensor.py +5 -5
  151. esphome/components/ektf2232/touchscreen/__init__.py +2 -3
  152. esphome/components/emc2101/__init__.py +1 -1
  153. esphome/components/emc2101/output/__init__.py +3 -2
  154. esphome/components/emc2101/sensor/__init__.py +4 -3
  155. esphome/components/emmeti/climate.py +1 -1
  156. esphome/components/endstop/cover.py +3 -3
  157. esphome/components/ens160_base/__init__.py +1 -1
  158. esphome/components/ens160_i2c/sensor.py +2 -1
  159. esphome/components/ens160_spi/sensor.py +2 -1
  160. esphome/components/ens210/sensor.py +1 -1
  161. esphome/components/esp32/__init__.py +10 -0
  162. esphome/components/esp32_ble_tracker/__init__.py +135 -51
  163. esphome/components/esp32_camera/__init__.py +7 -8
  164. esphome/components/esp32_camera_web_server/__init__.py +2 -2
  165. esphome/components/esp32_can/canbus.py +21 -0
  166. esphome/components/esp32_can/esp32_can.cpp +1 -1
  167. esphome/components/esp32_can/esp32_can.h +4 -0
  168. esphome/components/esp32_dac/output.py +2 -2
  169. esphome/components/esp32_hall/sensor.py +2 -6
  170. esphome/components/esp32_touch/__init__.py +7 -7
  171. esphome/components/esp32_touch/binary_sensor.py +4 -7
  172. esphome/components/esp8266_pwm/output.py +3 -8
  173. esphome/components/ethernet/__init__.py +1 -0
  174. esphome/components/ethernet/ethernet_component.cpp +1 -1
  175. esphome/components/ethernet_info/ethernet_info_text_sensor.h +1 -0
  176. esphome/components/exposure_notifications/__init__.py +2 -2
  177. esphome/components/external_components/__init__.py +1 -1
  178. esphome/components/ezo/sensor.py +2 -2
  179. esphome/components/ezo_pmp/__init__.py +4 -4
  180. esphome/components/ezo_pmp/binary_sensor.py +4 -4
  181. esphome/components/ezo_pmp/sensor.py +4 -5
  182. esphome/components/ezo_pmp/text_sensor.py +2 -6
  183. esphome/components/factory_reset/button/__init__.py +2 -1
  184. esphome/components/factory_reset/switch/__init__.py +3 -2
  185. esphome/components/fastled_base/__init__.py +3 -3
  186. esphome/components/fastled_clockless/light.py +2 -2
  187. esphome/components/fastled_spi/light.py +2 -2
  188. esphome/components/feedback/cover.py +3 -3
  189. esphome/components/fingerprint_grow/__init__.py +5 -6
  190. esphome/components/fingerprint_grow/binary_sensor.py +2 -1
  191. esphome/components/fingerprint_grow/sensor.py +2 -1
  192. esphome/components/fs3000/sensor.py +2 -6
  193. esphome/components/ft5x06/touchscreen/__init__.py +2 -2
  194. esphome/components/ft63x6/touchscreen.py +2 -3
  195. esphome/components/fujitsu_general/climate.py +1 -1
  196. esphome/components/gcja5/sensor.py +4 -4
  197. esphome/components/gdk101/__init__.py +1 -1
  198. esphome/components/gdk101/binary_sensor.py +2 -1
  199. esphome/components/gdk101/sensor.py +5 -4
  200. esphome/components/globals/__init__.py +1 -2
  201. esphome/components/gp2y1010au0f/sensor.py +3 -3
  202. esphome/components/gp8403/__init__.py +1 -2
  203. esphome/components/gp8403/output/__init__.py +3 -4
  204. esphome/components/gpio/binary_sensor/__init__.py +3 -2
  205. esphome/components/gpio/one_wire/__init__.py +3 -2
  206. esphome/components/gpio/output/__init__.py +3 -2
  207. esphome/components/gpio/switch/__init__.py +3 -2
  208. esphome/components/gps/__init__.py +4 -5
  209. esphome/components/gps/time/__init__.py +3 -2
  210. esphome/components/graph/__init__.py +12 -12
  211. esphome/components/grove_tb6612fng/__init__.py +5 -6
  212. esphome/components/growatt_solar/sensor.py +1 -1
  213. esphome/components/gt911/binary_sensor/__init__.py +2 -2
  214. esphome/components/haier/binary_sensor/__init__.py +4 -10
  215. esphome/components/haier/button/__init__.py +3 -6
  216. esphome/components/haier/sensor/__init__.py +4 -6
  217. esphome/components/haier/switch/__init__.py +4 -7
  218. esphome/components/haier/text_sensor/__init__.py +4 -9
  219. esphome/components/havells_solar/sensor.py +1 -1
  220. esphome/components/hbridge/fan/__init__.py +6 -6
  221. esphome/components/hbridge/light/__init__.py +2 -1
  222. esphome/components/hdc1080/sensor.py +1 -1
  223. esphome/components/he60r/cover.py +2 -6
  224. esphome/components/heatpumpir/climate.py +1 -1
  225. esphome/components/hitachi_ac344/climate.py +1 -1
  226. esphome/components/hitachi_ac424/climate.py +1 -1
  227. esphome/components/hlw8012/sensor.py +6 -6
  228. esphome/components/hm3301/sensor.py +3 -3
  229. esphome/components/hmc5883l/sensor.py +4 -4
  230. esphome/components/homeassistant/time/__init__.py +2 -1
  231. esphome/components/honeywell_hih_i2c/sensor.py +3 -3
  232. esphome/components/honeywellabp/sensor.py +1 -2
  233. esphome/components/honeywellabp2_i2c/sensor.py +1 -2
  234. esphome/components/host/time/__init__.py +2 -2
  235. esphome/components/hrxl_maxsonar_wr/sensor.py +1 -1
  236. esphome/components/hte501/sensor.py +3 -3
  237. esphome/components/http_request/ota/__init__.py +5 -9
  238. esphome/components/http_request/update/__init__.py +3 -7
  239. esphome/components/htu21d/sensor.py +6 -6
  240. esphome/components/htu31d/sensor.py +1 -1
  241. esphome/components/hx711/sensor.py +3 -8
  242. esphome/components/hydreon_rgxx/binary_sensor.py +3 -7
  243. esphome/components/hydreon_rgxx/sensor.py +4 -4
  244. esphome/components/hyt271/sensor.py +1 -1
  245. esphome/components/i2c_device/__init__.py +1 -1
  246. esphome/components/i2s_audio/media_player/__init__.py +6 -8
  247. esphome/components/iaqcore/sensor.py +2 -2
  248. esphome/components/ina219/sensor.py +2 -2
  249. esphome/components/ina226/sensor.py +4 -4
  250. esphome/components/ina260/sensor.py +4 -4
  251. esphome/components/ina2xx_base/__init__.py +2 -2
  252. esphome/components/ina2xx_i2c/sensor.py +1 -1
  253. esphome/components/ina2xx_spi/sensor.py +1 -1
  254. esphome/components/ina3221/sensor.py +3 -3
  255. esphome/components/inkbird_ibsth1_mini/sensor.py +2 -2
  256. esphome/components/inkplate6/display.py +2 -2
  257. esphome/components/integration/sensor.py +4 -4
  258. esphome/components/internal_temperature/sensor.py +5 -7
  259. esphome/components/interval/__init__.py +1 -1
  260. esphome/components/jsn_sr04t/sensor.py +3 -3
  261. esphome/components/kamstrup_kmp/sensor.py +1 -1
  262. esphome/components/key_collector/__init__.py +2 -2
  263. esphome/components/kmeteriso/sensor.py +2 -2
  264. esphome/components/kuntze/sensor.py +5 -5
  265. esphome/components/lcd_base/__init__.py +2 -2
  266. esphome/components/lcd_gpio/display.py +4 -4
  267. esphome/components/lcd_menu/__init__.py +3 -7
  268. esphome/components/lcd_pcf8574/display.py +1 -1
  269. esphome/components/ld2410/__init__.py +4 -4
  270. esphome/components/ld2410/binary_sensor.py +5 -4
  271. esphome/components/ld2410/button/__init__.py +3 -2
  272. esphome/components/ld2410/number/__init__.py +5 -4
  273. esphome/components/ld2410/select/__init__.py +4 -3
  274. esphome/components/ld2410/sensor.py +6 -5
  275. esphome/components/ld2410/switch/__init__.py +2 -1
  276. esphome/components/ld2410/text_sensor.py +3 -2
  277. esphome/components/ld2420/__init__.py +1 -1
  278. esphome/components/ld2420/binary_sensor/__init__.py +4 -3
  279. esphome/components/ld2420/button/__init__.py +3 -2
  280. esphome/components/ld2420/number/__init__.py +3 -2
  281. esphome/components/ld2420/select/__init__.py +1 -0
  282. esphome/components/ld2420/sensor/__init__.py +3 -2
  283. esphome/components/ld2420/text_sensor/__init__.py +2 -6
  284. esphome/components/ld2450/__init__.py +2 -5
  285. esphome/components/ledc/output.py +3 -3
  286. esphome/components/libretiny/text_sensor.py +1 -1
  287. esphome/components/libretiny_pwm/output.py +3 -7
  288. esphome/components/lightwaverf/__init__.py +6 -8
  289. esphome/components/lilygo_t5_47/touchscreen/__init__.py +2 -3
  290. esphome/components/ltr390/sensor.py +1 -1
  291. esphome/components/ltr501/sensor.py +2 -2
  292. esphome/components/ltr_als_ps/sensor.py +2 -2
  293. esphome/components/lvgl/__init__.py +9 -12
  294. esphome/components/lvgl/automation.py +15 -3
  295. esphome/components/lvgl/defines.py +5 -2
  296. esphome/components/lvgl/encoders.py +3 -2
  297. esphome/components/lvgl/lv_validation.py +17 -9
  298. esphome/components/lvgl/lvcode.py +11 -9
  299. esphome/components/lvgl/lvgl_esphome.h +21 -0
  300. esphome/components/lvgl/number/__init__.py +23 -20
  301. esphome/components/lvgl/number/lvgl_number.h +27 -14
  302. esphome/components/lvgl/schemas.py +70 -19
  303. esphome/components/lvgl/select/__init__.py +11 -13
  304. esphome/components/lvgl/select/lvgl_select.h +25 -18
  305. esphome/components/lvgl/styles.py +42 -11
  306. esphome/components/lvgl/trigger.py +10 -1
  307. esphome/components/lvgl/widgets/__init__.py +1 -2
  308. esphome/components/lvgl/widgets/buttonmatrix.py +2 -2
  309. esphome/components/lvgl/widgets/canvas.py +407 -0
  310. esphome/components/lvgl/widgets/line.py +22 -32
  311. esphome/components/lvgl/widgets/meter.py +3 -1
  312. esphome/components/m5stack_8angle/__init__.py +1 -2
  313. esphome/components/m5stack_8angle/binary_sensor/__init__.py +2 -3
  314. esphome/components/m5stack_8angle/light/__init__.py +2 -4
  315. esphome/components/m5stack_8angle/sensor/__init__.py +2 -4
  316. esphome/components/matrix_keypad/binary_sensor/__init__.py +4 -3
  317. esphome/components/max31855/sensor.py +1 -1
  318. esphome/components/max31865/sensor.py +1 -1
  319. esphome/components/max44009/sensor.py +1 -1
  320. esphome/components/max6675/sensor.py +1 -1
  321. esphome/components/max6956/__init__.py +5 -5
  322. esphome/components/max6956/output/__init__.py +4 -3
  323. esphome/components/max7219/display.py +1 -1
  324. esphome/components/max7219digit/display.py +1 -1
  325. esphome/components/max9611/sensor.py +10 -10
  326. esphome/components/mcp23008/__init__.py +1 -1
  327. esphome/components/mcp23016/__init__.py +4 -4
  328. esphome/components/mcp23017/__init__.py +1 -1
  329. esphome/components/mcp23s08/__init__.py +1 -1
  330. esphome/components/mcp23s17/__init__.py +1 -1
  331. esphome/components/mcp23xxx_base/__init__.py +4 -4
  332. esphome/components/mcp2515/canbus.py +2 -2
  333. esphome/components/mcp3008/__init__.py +1 -1
  334. esphome/components/mcp3008/sensor/__init__.py +4 -4
  335. esphome/components/mcp3204/__init__.py +1 -1
  336. esphome/components/mcp3204/sensor/__init__.py +3 -2
  337. esphome/components/mcp4461/__init__.py +42 -0
  338. esphome/components/mcp4461/mcp4461.cpp +618 -0
  339. esphome/components/mcp4461/mcp4461.h +171 -0
  340. esphome/components/mcp4461/output/__init__.py +60 -0
  341. esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
  342. esphome/components/mcp4461/output/mcp4461_output.h +49 -0
  343. esphome/components/mcp4725/output.py +2 -2
  344. esphome/components/mcp4728/__init__.py +1 -1
  345. esphome/components/mcp4728/output/__init__.py +4 -3
  346. esphome/components/mcp47a1/output.py +2 -2
  347. esphome/components/mcp9808/sensor.py +1 -1
  348. esphome/components/mhz19/sensor.py +4 -4
  349. esphome/components/micronova/__init__.py +3 -5
  350. esphome/components/micronova/button/__init__.py +5 -5
  351. esphome/components/micronova/number/__init__.py +6 -10
  352. esphome/components/micronova/sensor/__init__.py +6 -6
  353. esphome/components/micronova/switch/__init__.py +6 -8
  354. esphome/components/micronova/text_sensor/__init__.py +5 -5
  355. esphome/components/microphone/__init__.py +2 -4
  356. esphome/components/midea/climate.py +6 -10
  357. esphome/components/midea_ir/climate.py +1 -1
  358. esphome/components/mitsubishi/climate.py +1 -1
  359. esphome/components/mlx90614/sensor.py +1 -1
  360. esphome/components/mmc5603/sensor.py +4 -4
  361. esphome/components/mmc5983/sensor.py +1 -1
  362. esphome/components/modbus/__init__.py +5 -9
  363. esphome/components/modbus_controller/__init__.py +1 -1
  364. esphome/components/monochromatic/light.py +2 -2
  365. esphome/components/mopeka_ble/__init__.py +1 -1
  366. esphome/components/mopeka_pro_check/sensor.py +12 -12
  367. esphome/components/mopeka_std_check/sensor.py +8 -8
  368. esphome/components/mpl3115a2/sensor.py +1 -1
  369. esphome/components/mpr121/__init__.py +3 -3
  370. esphome/components/mpr121/binary_sensor/__init__.py +5 -4
  371. esphome/components/mpu6050/sensor.py +4 -4
  372. esphome/components/mpu6886/sensor.py +4 -4
  373. esphome/components/mqtt_subscribe/sensor/__init__.py +3 -5
  374. esphome/components/mqtt_subscribe/text_sensor/__init__.py +1 -1
  375. esphome/components/ms5611/sensor.py +2 -2
  376. esphome/components/ms8607/sensor.py +1 -1
  377. esphome/components/my9231/__init__.py +1 -1
  378. esphome/components/my9231/output.py +2 -1
  379. esphome/components/nau7802/nau7802.cpp +0 -4
  380. esphome/components/nau7802/nau7802.h +0 -2
  381. esphome/components/neopixelbus/_methods.py +11 -9
  382. esphome/components/neopixelbus/light.py +11 -18
  383. esphome/components/nextion/binary_sensor/__init__.py +6 -14
  384. esphome/components/nextion/sensor/__init__.py +7 -10
  385. esphome/components/nextion/switch/__init__.py +3 -5
  386. esphome/components/nextion/text_sensor/__init__.py +3 -7
  387. esphome/components/noblex/climate.py +1 -1
  388. esphome/components/ntc/sensor.py +1 -1
  389. esphome/components/opentherm/__init__.py +6 -6
  390. esphome/components/opentherm/input.py +2 -1
  391. esphome/components/opentherm/number/__init__.py +5 -4
  392. esphome/components/opentherm/output/__init__.py +3 -2
  393. esphome/components/opentherm/schema.py +7 -7
  394. esphome/components/opentherm/switch/__init__.py +3 -2
  395. esphome/components/opentherm/validate.py +1 -1
  396. esphome/components/output/__init__.py +2 -3
  397. esphome/components/output/button/__init__.py +3 -2
  398. esphome/components/output/lock/__init__.py +2 -1
  399. esphome/components/output/switch/__init__.py +2 -1
  400. esphome/components/partition/light.py +4 -4
  401. esphome/components/pca6416a/__init__.py +4 -4
  402. esphome/components/pca9554/__init__.py +4 -4
  403. esphome/components/pca9685/__init__.py +2 -2
  404. esphome/components/pca9685/output.py +2 -1
  405. esphome/components/pcf85063/time.py +2 -3
  406. esphome/components/pcf8563/time.py +2 -2
  407. esphome/components/pcf8574/__init__.py +4 -4
  408. esphome/components/pid/climate.py +2 -2
  409. esphome/components/pid/sensor/__init__.py +4 -8
  410. esphome/components/pipsolar/__init__.py +1 -1
  411. esphome/components/pipsolar/binary_sensor/__init__.py +2 -2
  412. esphome/components/pipsolar/output/__init__.py +4 -3
  413. esphome/components/pipsolar/sensor/__init__.py +5 -4
  414. esphome/components/pipsolar/switch/__init__.py +2 -1
  415. esphome/components/pipsolar/text_sensor/__init__.py +2 -1
  416. esphome/components/pm1006/sensor.py +2 -2
  417. esphome/components/pmsa003i/sensor.py +4 -4
  418. esphome/components/pmsx003/sensor.py +10 -11
  419. esphome/components/pmwcs3/sensor.py +5 -5
  420. esphome/components/pn532/__init__.py +3 -3
  421. esphome/components/pn532_i2c/__init__.py +1 -1
  422. esphome/components/pn532_spi/__init__.py +1 -1
  423. esphome/components/pn7150/__init__.py +2 -2
  424. esphome/components/pn7150_i2c/__init__.py +1 -1
  425. esphome/components/pn7160/__init__.py +2 -2
  426. esphome/components/pn7160_i2c/__init__.py +1 -1
  427. esphome/components/pn7160_spi/__init__.py +1 -1
  428. esphome/components/power_supply/__init__.py +1 -1
  429. esphome/components/prometheus/__init__.py +3 -8
  430. esphome/components/psram/__init__.py +75 -11
  431. esphome/components/psram/psram.cpp +18 -7
  432. esphome/components/pulse_counter/sensor.py +4 -4
  433. esphome/components/pulse_meter/sensor.py +3 -3
  434. esphome/components/pulse_width/sensor.py +3 -8
  435. esphome/components/pvvx_mithermometer/display/__init__.py +1 -1
  436. esphome/components/pvvx_mithermometer/sensor.py +3 -3
  437. esphome/components/pylontech/__init__.py +1 -0
  438. esphome/components/pylontech/sensor/__init__.py +8 -13
  439. esphome/components/pylontech/text_sensor/__init__.py +2 -7
  440. esphome/components/pzem004t/sensor.py +3 -3
  441. esphome/components/pzemac/sensor.py +9 -9
  442. esphome/components/pzemdc/sensor.py +6 -6
  443. esphome/components/qmc5883l/sensor.py +5 -5
  444. esphome/components/qmp6988/sensor.py +3 -3
  445. esphome/components/qr_code/__init__.py +1 -1
  446. esphome/components/qspi_dbi/display.py +1 -1
  447. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  448. esphome/components/qspi_dbi/qspi_dbi.h +1 -1
  449. esphome/components/qwiic_pir/binary_sensor.py +2 -5
  450. esphome/components/radon_eye_ble/__init__.py +1 -1
  451. esphome/components/radon_eye_rd200/sensor.py +3 -4
  452. esphome/components/rc522/__init__.py +3 -3
  453. esphome/components/rc522_i2c/__init__.py +1 -1
  454. esphome/components/rc522_spi/__init__.py +1 -1
  455. esphome/components/rdm6300/__init__.py +2 -2
  456. esphome/components/rdm6300/binary_sensor.py +2 -1
  457. esphome/components/resistance/sensor.py +2 -2
  458. esphome/components/restart/button/__init__.py +1 -1
  459. esphome/components/restart/switch/__init__.py +2 -5
  460. esphome/components/rf_bridge/__init__.py +3 -3
  461. esphome/components/rgb/light.py +2 -2
  462. esphome/components/rgbct/light.py +3 -3
  463. esphome/components/rgbw/light.py +2 -2
  464. esphome/components/rgbww/light.py +4 -4
  465. esphome/components/rotary_encoder/sensor.py +8 -8
  466. esphome/components/rp2040_pio/__init__.py +0 -1
  467. esphome/components/rp2040_pio_led_strip/light.py +2 -4
  468. esphome/components/rp2040_pwm/output.py +3 -7
  469. esphome/components/rtttl/__init__.py +6 -6
  470. esphome/components/ruuvi_ble/__init__.py +1 -1
  471. esphome/components/ruuvitag/sensor.py +15 -15
  472. esphome/components/safe_mode/__init__.py +2 -3
  473. esphome/components/safe_mode/button/__init__.py +3 -2
  474. esphome/components/safe_mode/switch/__init__.py +4 -7
  475. esphome/components/scd30/sensor.py +5 -6
  476. esphome/components/scd4x/sensor.py +6 -8
  477. esphome/components/script/__init__.py +2 -2
  478. esphome/components/sdl/display.py +3 -3
  479. esphome/components/sdl/touchscreen/__init__.py +2 -2
  480. esphome/components/sdm_meter/sensor.py +3 -3
  481. esphome/components/sdp3x/sensor.py +1 -2
  482. esphome/components/sds011/sensor.py +4 -4
  483. esphome/components/seeed_mr24hpc1/__init__.py +1 -1
  484. esphome/components/seeed_mr24hpc1/binary_sensor.py +2 -5
  485. esphome/components/seeed_mr24hpc1/button/__init__.py +1 -0
  486. esphome/components/seeed_mr24hpc1/number/__init__.py +2 -4
  487. esphome/components/seeed_mr24hpc1/select/__init__.py +2 -3
  488. esphome/components/seeed_mr24hpc1/sensor.py +1 -0
  489. esphome/components/seeed_mr24hpc1/switch/__init__.py +2 -4
  490. esphome/components/seeed_mr24hpc1/text_sensor.py +1 -0
  491. esphome/components/seeed_mr60bha2/binary_sensor.py +2 -4
  492. esphome/components/seeed_mr60bha2/sensor.py +1 -1
  493. esphome/components/seeed_mr60fda2/button/__init__.py +1 -1
  494. esphome/components/seeed_mr60fda2/select/__init__.py +0 -1
  495. esphome/components/selec_meter/sensor.py +1 -1
  496. esphome/components/sen0321/sensor.py +2 -2
  497. esphome/components/sen21231/sensor.py +1 -1
  498. esphome/components/senseair/sensor.py +3 -3
  499. esphome/components/sensirion_common/__init__.py +0 -2
  500. esphome/components/servo/__init__.py +3 -3
  501. esphome/components/sfa30/sensor.py +4 -5
  502. esphome/components/sgp4x/sensor.py +2 -2
  503. esphome/components/shelly_dimmer/light.py +16 -16
  504. esphome/components/sht3xd/sensor.py +1 -1
  505. esphome/components/sht4x/sensor.py +6 -6
  506. esphome/components/shtcx/sensor.py +1 -1
  507. esphome/components/shutdown/button/__init__.py +2 -6
  508. esphome/components/shutdown/switch/__init__.py +2 -5
  509. esphome/components/sigma_delta_output/output.py +2 -7
  510. esphome/components/sim800l/__init__.py +3 -7
  511. esphome/components/sim800l/binary_sensor.py +3 -5
  512. esphome/components/sim800l/sensor.py +2 -1
  513. esphome/components/slow_pwm/output.py +4 -5
  514. esphome/components/sm10bit_base/__init__.py +2 -6
  515. esphome/components/sm16716/__init__.py +1 -1
  516. esphome/components/sm16716/output.py +2 -1
  517. esphome/components/sm2135/__init__.py +2 -6
  518. esphome/components/sm2135/output.py +2 -1
  519. esphome/components/sm2235/__init__.py +1 -1
  520. esphome/components/sm2235/output.py +2 -1
  521. esphome/components/sm2335/__init__.py +1 -1
  522. esphome/components/sm2335/output.py +2 -1
  523. esphome/components/sm300d2/sensor.py +13 -13
  524. esphome/components/sml/__init__.py +1 -1
  525. esphome/components/sml/sensor/__init__.py +1 -1
  526. esphome/components/sml/sml.cpp +8 -6
  527. esphome/components/sml/sml.h +1 -1
  528. esphome/components/sml/sml_parser.cpp +16 -18
  529. esphome/components/sml/sml_parser.h +42 -12
  530. esphome/components/sml/text_sensor/__init__.py +1 -1
  531. esphome/components/smt100/sensor.py +5 -6
  532. esphome/components/sn74hc165/__init__.py +5 -5
  533. esphome/components/sn74hc595/__init__.py +5 -5
  534. esphome/components/socket/__init__.py +1 -1
  535. esphome/components/sonoff_d1/light.py +2 -6
  536. esphome/components/speaker/media_player/audio_pipeline.cpp +3 -2
  537. esphome/components/speed/fan/__init__.py +2 -2
  538. esphome/components/spi/__init__.py +45 -36
  539. esphome/components/spi/spi.h +1 -0
  540. esphome/components/spi/spi_esp_idf.cpp +13 -5
  541. esphome/components/sprinkler/__init__.py +4 -5
  542. esphome/components/sps30/sensor.py +8 -8
  543. esphome/components/ssd1306_i2c/display.py +2 -2
  544. esphome/components/ssd1322_base/__init__.py +2 -2
  545. esphome/components/ssd1325_base/__init__.py +2 -2
  546. esphome/components/ssd1327_base/__init__.py +2 -2
  547. esphome/components/ssd1327_i2c/display.py +1 -1
  548. esphome/components/ssd1331_base/__init__.py +2 -2
  549. esphome/components/ssd1351_base/__init__.py +2 -2
  550. esphome/components/st7567_base/__init__.py +4 -4
  551. esphome/components/st7567_i2c/display.py +1 -1
  552. esphome/components/st7920/display.py +2 -2
  553. esphome/components/statsd/__init__.py +3 -3
  554. esphome/components/status/binary_sensor.py +2 -5
  555. esphome/components/status_led/__init__.py +1 -1
  556. esphome/components/status_led/light/__init__.py +2 -1
  557. esphome/components/stepper/__init__.py +2 -2
  558. esphome/components/sts3x/sensor.py +1 -1
  559. esphome/components/substitutions/__init__.py +2 -2
  560. esphome/components/sun/__init__.py +4 -4
  561. esphome/components/sun/sensor/__init__.py +4 -7
  562. esphome/components/sun/text_sensor/__init__.py +5 -4
  563. esphome/components/sun_gtil2/__init__.py +1 -1
  564. esphome/components/sun_gtil2/sensor.py +7 -6
  565. esphome/components/sun_gtil2/text_sensor.py +3 -2
  566. esphome/components/sx1509/__init__.py +5 -5
  567. esphome/components/sx1509/binary_sensor/__init__.py +3 -3
  568. esphome/components/sx1509/output/__init__.py +4 -3
  569. esphome/components/t6615/sensor.py +1 -1
  570. esphome/components/tca9548a/__init__.py +1 -1
  571. esphome/components/tcl112/climate.py +1 -1
  572. esphome/components/tcs34725/sensor.py +4 -4
  573. esphome/components/tee501/sensor.py +1 -1
  574. esphome/components/teleinfo/__init__.py +1 -1
  575. esphome/components/teleinfo/sensor/__init__.py +1 -7
  576. esphome/components/teleinfo/text_sensor/__init__.py +1 -1
  577. esphome/components/tem3200/sensor.py +1 -2
  578. esphome/components/template/alarm_control_panel/__init__.py +3 -10
  579. esphome/components/template/cover/__init__.py +4 -3
  580. esphome/components/template/datetime/__init__.py +8 -9
  581. esphome/components/template/event/__init__.py +2 -5
  582. esphome/components/template/fan/__init__.py +2 -6
  583. esphome/components/template/lock/__init__.py +3 -2
  584. esphome/components/template/number/__init__.py +3 -2
  585. esphome/components/template/output/__init__.py +4 -3
  586. esphome/components/template/select/__init__.py +3 -2
  587. esphome/components/template/sensor/__init__.py +4 -7
  588. esphome/components/template/switch/__init__.py +3 -2
  589. esphome/components/template/text/__init__.py +4 -3
  590. esphome/components/template/text_sensor/__init__.py +3 -2
  591. esphome/components/template/valve/__init__.py +3 -2
  592. esphome/components/time/real_time_clock.cpp +0 -4
  593. esphome/components/time/real_time_clock.h +4 -3
  594. esphome/components/time_based/cover.py +3 -3
  595. esphome/components/tlc59208f/__init__.py +1 -1
  596. esphome/components/tlc59208f/output.py +2 -1
  597. esphome/components/tlc5947/__init__.py +1 -1
  598. esphome/components/tlc5947/output/__init__.py +2 -1
  599. esphome/components/tlc5971/__init__.py +2 -8
  600. esphome/components/tlc5971/output/__init__.py +2 -1
  601. esphome/components/tm1621/display.py +3 -3
  602. esphome/components/tm1637/binary_sensor.py +1 -1
  603. esphome/components/tm1637/display.py +3 -3
  604. esphome/components/tm1651/__init__.py +4 -4
  605. esphome/components/tmp102/sensor.py +1 -1
  606. esphome/components/tmp1075/sensor.py +2 -2
  607. esphome/components/tmp117/sensor.py +1 -1
  608. esphome/components/tof10120/sensor.py +2 -2
  609. esphome/components/tormatic/cover.py +2 -6
  610. esphome/components/toshiba/climate.py +1 -1
  611. esphome/components/total_daily_energy/sensor.py +4 -4
  612. esphome/components/tsl2561/sensor.py +1 -1
  613. esphome/components/tsl2591/sensor.py +9 -9
  614. esphome/components/tt21100/binary_sensor/__init__.py +2 -2
  615. esphome/components/tt21100/touchscreen/__init__.py +2 -3
  616. esphome/components/ttp229_bsf/__init__.py +2 -2
  617. esphome/components/ttp229_bsf/binary_sensor.py +3 -2
  618. esphome/components/ttp229_lsf/__init__.py +1 -1
  619. esphome/components/ttp229_lsf/binary_sensor.py +3 -2
  620. esphome/components/tuya/__init__.py +3 -5
  621. esphome/components/tuya/binary_sensor/__init__.py +2 -2
  622. esphome/components/tuya/climate/__init__.py +6 -5
  623. esphome/components/tuya/cover/__init__.py +5 -4
  624. esphome/components/tuya/fan/__init__.py +3 -2
  625. esphome/components/tuya/light/__init__.py +9 -8
  626. esphome/components/tuya/number/__init__.py +6 -5
  627. esphome/components/tuya/select/__init__.py +4 -3
  628. esphome/components/tuya/sensor/__init__.py +3 -2
  629. esphome/components/tuya/switch/__init__.py +3 -2
  630. esphome/components/tuya/text_sensor/__init__.py +3 -2
  631. esphome/components/tx20/sensor.py +6 -6
  632. esphome/components/uart/__init__.py +20 -19
  633. esphome/components/uart/button/__init__.py +2 -1
  634. esphome/components/uart/switch/__init__.py +2 -1
  635. esphome/components/ufire_ise/sensor.py +2 -2
  636. esphome/components/uln2003/stepper.py +2 -2
  637. esphome/components/ultrasonic/sensor.py +4 -4
  638. esphome/components/uponor_smatrix/__init__.py +2 -6
  639. esphome/components/uponor_smatrix/climate/__init__.py +3 -3
  640. esphome/components/vbus/__init__.py +1 -1
  641. esphome/components/vbus/binary_sensor/__init__.py +7 -6
  642. esphome/components/vbus/sensor/__init__.py +7 -6
  643. esphome/components/veml3235/sensor.py +1 -1
  644. esphome/components/veml7700/sensor.py +1 -1
  645. esphome/components/version/text_sensor.py +2 -6
  646. esphome/components/vl53l0x/sensor.py +6 -6
  647. esphome/components/web_server_base/__init__.py +2 -2
  648. esphome/components/web_server_idf/__init__.py +1 -1
  649. esphome/components/weikai/__init__.py +1 -1
  650. esphome/components/whirlpool/climate.py +1 -1
  651. esphome/components/whynter/climate.py +1 -1
  652. esphome/components/wireguard/binary_sensor.py +1 -1
  653. esphome/components/wireguard/sensor.py +2 -5
  654. esphome/components/wireguard/text_sensor.py +2 -5
  655. esphome/components/wk2132_i2c/__init__.py +1 -1
  656. esphome/components/wk2132_spi/__init__.py +1 -2
  657. esphome/components/wk2168_i2c/__init__.py +3 -8
  658. esphome/components/wk2168_spi/__init__.py +3 -8
  659. esphome/components/wk2204_i2c/__init__.py +1 -1
  660. esphome/components/wk2204_spi/__init__.py +1 -1
  661. esphome/components/wk2212_i2c/__init__.py +3 -8
  662. esphome/components/wk2212_spi/__init__.py +3 -8
  663. esphome/components/wl_134/text_sensor.py +2 -4
  664. esphome/components/wled/__init__.py +2 -2
  665. esphome/components/x9c/output.py +4 -4
  666. esphome/components/xgzp68xx/sensor.py +5 -5
  667. esphome/components/xiaomi_ble/__init__.py +1 -1
  668. esphome/components/xiaomi_cgd1/sensor.py +3 -3
  669. esphome/components/xiaomi_cgdk2/sensor.py +3 -3
  670. esphome/components/xiaomi_cgg1/sensor.py +2 -2
  671. esphome/components/xiaomi_cgpr1/binary_sensor.py +6 -6
  672. esphome/components/xiaomi_gcls002/sensor.py +7 -7
  673. esphome/components/xiaomi_hhccjcy01/sensor.py +9 -9
  674. esphome/components/xiaomi_hhccjcy10/sensor.py +9 -9
  675. esphome/components/xiaomi_hhccpot002/sensor.py +7 -7
  676. esphome/components/xiaomi_jqjcy01ym/sensor.py +6 -6
  677. esphome/components/xiaomi_lywsd02/sensor.py +4 -4
  678. esphome/components/xiaomi_lywsd02mmc/sensor.py +5 -5
  679. esphome/components/xiaomi_lywsd03mmc/sensor.py +6 -6
  680. esphome/components/xiaomi_lywsdcgq/sensor.py +5 -5
  681. esphome/components/xiaomi_mhoc303/sensor.py +4 -4
  682. esphome/components/xiaomi_mhoc401/sensor.py +6 -6
  683. esphome/components/xiaomi_miscale/sensor.py +6 -6
  684. esphome/components/xiaomi_mjyd02yla/binary_sensor.py +8 -8
  685. esphome/components/xiaomi_mue4094rt/binary_sensor.py +2 -7
  686. esphome/components/xiaomi_rtcgq02lm/__init__.py +2 -3
  687. esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +3 -3
  688. esphome/components/xiaomi_rtcgq02lm/sensor.py +3 -3
  689. esphome/components/xiaomi_wx08zm/binary_sensor.py +2 -3
  690. esphome/components/xl9535/__init__.py +2 -2
  691. esphome/components/yashima/climate.py +1 -1
  692. esphome/components/zhlt01/climate.py +1 -1
  693. esphome/components/zio_ultrasonic/sensor.py +2 -5
  694. esphome/components/zyaura/sensor.py +7 -7
  695. esphome/config_validation.py +0 -42
  696. esphome/const.py +3 -1
  697. esphome/core/__init__.py +0 -1
  698. esphome/core/component.cpp +3 -1
  699. esphome/core/component.h +15 -2
  700. esphome/core/config.py +4 -0
  701. esphome/core/defines.h +21 -0
  702. esphome/core/helpers.cpp +6 -7
  703. esphome/core/scheduler.cpp +34 -67
  704. esphome/core/scheduler.h +7 -17
  705. esphome/dashboard/status/mqtt.py +0 -2
  706. esphome/vscode.py +27 -8
  707. esphome/yaml_util.py +75 -39
  708. {esphome-2025.3.3.dist-info → esphome-2025.4.0.dist-info}/METADATA +45 -44
  709. {esphome-2025.3.3.dist-info → esphome-2025.4.0.dist-info}/RECORD +713 -706
  710. {esphome-2025.3.3.dist-info → esphome-2025.4.0.dist-info}/WHEEL +1 -1
  711. {esphome-2025.3.3.dist-info → esphome-2025.4.0.dist-info}/entry_points.txt +0 -0
  712. {esphome-2025.3.3.dist-info → esphome-2025.4.0.dist-info/licenses}/LICENSE +0 -0
  713. {esphome-2025.3.3.dist-info → esphome-2025.4.0.dist-info}/top_level.txt +0 -0
@@ -1,23 +1,23 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import binary_sensor, esp32_ble_tracker, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import sensor, binary_sensor, esp32_ble_tracker
4
4
  from esphome.const import (
5
- CONF_MAC_ADDRESS,
5
+ CONF_BATTERY_LEVEL,
6
6
  CONF_BINDKEY,
7
+ CONF_IDLE_TIME,
8
+ CONF_ILLUMINANCE,
7
9
  CONF_LIGHT,
8
- CONF_BATTERY_LEVEL,
10
+ CONF_MAC_ADDRESS,
9
11
  DEVICE_CLASS_BATTERY,
10
12
  DEVICE_CLASS_ILLUMINANCE,
11
13
  DEVICE_CLASS_LIGHT,
12
14
  DEVICE_CLASS_MOTION,
13
15
  ENTITY_CATEGORY_DIAGNOSTIC,
16
+ ICON_TIMELAPSE,
14
17
  STATE_CLASS_MEASUREMENT,
15
- UNIT_PERCENT,
16
- CONF_IDLE_TIME,
17
- CONF_ILLUMINANCE,
18
- UNIT_MINUTE,
19
18
  UNIT_LUX,
20
- ICON_TIMELAPSE,
19
+ UNIT_MINUTE,
20
+ UNIT_PERCENT,
21
21
  )
22
22
 
23
23
  DEPENDENCIES = ["esp32_ble_tracker"]
@@ -1,12 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import binary_sensor, esp32_ble_tracker
4
- from esphome.const import (
5
- CONF_MAC_ADDRESS,
6
- CONF_TIMEOUT,
7
- DEVICE_CLASS_MOTION,
8
- )
9
-
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_MAC_ADDRESS, CONF_TIMEOUT, DEVICE_CLASS_MOTION
10
5
 
11
6
  DEPENDENCIES = ["esp32_ble_tracker"]
12
7
  AUTO_LOAD = ["xiaomi_ble"]
@@ -1,8 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import esp32_ble_tracker
4
- from esphome.const import CONF_MAC_ADDRESS, CONF_ID, CONF_BINDKEY
5
-
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_BINDKEY, CONF_ID, CONF_MAC_ADDRESS
6
5
 
7
6
  AUTO_LOAD = ["xiaomi_ble"]
8
7
  CODEOWNERS = ["@jesserockz"]
@@ -1,14 +1,14 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import binary_sensor
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import (
5
+ CONF_BUTTON,
6
+ CONF_ID,
5
7
  CONF_LIGHT,
6
8
  CONF_MOTION,
7
9
  CONF_TIMEOUT,
8
10
  DEVICE_CLASS_LIGHT,
9
11
  DEVICE_CLASS_MOTION,
10
- CONF_ID,
11
- CONF_BUTTON,
12
12
  )
13
13
  from esphome.core import TimePeriod
14
14
 
@@ -1,13 +1,13 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import sensor
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import (
5
5
  CONF_BATTERY_LEVEL,
6
+ CONF_ID,
7
+ DEVICE_CLASS_BATTERY,
6
8
  ENTITY_CATEGORY_DIAGNOSTIC,
7
9
  STATE_CLASS_MEASUREMENT,
8
10
  UNIT_PERCENT,
9
- CONF_ID,
10
- DEVICE_CLASS_BATTERY,
11
11
  )
12
12
 
13
13
  from . import XiaomiRTCGQ02LM
@@ -1,18 +1,17 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import binary_sensor, esp32_ble_tracker, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import sensor, binary_sensor, esp32_ble_tracker
4
4
  from esphome.const import (
5
5
  CONF_BATTERY_LEVEL,
6
6
  CONF_MAC_ADDRESS,
7
7
  CONF_TABLET,
8
8
  DEVICE_CLASS_BATTERY,
9
9
  ENTITY_CATEGORY_DIAGNOSTIC,
10
+ ICON_BUG,
10
11
  STATE_CLASS_MEASUREMENT,
11
12
  UNIT_PERCENT,
12
- ICON_BUG,
13
13
  )
14
14
 
15
-
16
15
  DEPENDENCIES = ["esp32_ble_tracker"]
17
16
  AUTO_LOAD = ["xiaomi_ble", "sensor"]
18
17
 
@@ -1,6 +1,7 @@
1
+ from esphome import pins
1
2
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
3
  from esphome.components import i2c
4
+ import esphome.config_validation as cv
4
5
  from esphome.const import (
5
6
  CONF_ID,
6
7
  CONF_INPUT,
@@ -9,7 +10,6 @@ from esphome.const import (
9
10
  CONF_NUMBER,
10
11
  CONF_OUTPUT,
11
12
  )
12
- from esphome import pins
13
13
 
14
14
  CONF_XL9535 = "xl9535"
15
15
 
@@ -1,7 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import climate, remote_transmitter, sensor
4
3
  from esphome.components.remote_base import CONF_TRANSMITTER_ID
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import CONF_ID, CONF_SENSOR, CONF_SUPPORTS_COOL, CONF_SUPPORTS_HEAT
6
6
 
7
7
  AUTO_LOAD = ["sensor"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import climate_ir
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  AUTO_LOAD = ["climate_ir"]
@@ -1,10 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import i2c, sensor
4
- from esphome.const import (
5
- DEVICE_CLASS_DISTANCE,
6
- STATE_CLASS_MEASUREMENT,
7
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import DEVICE_CLASS_DISTANCE, STATE_CLASS_MEASUREMENT
8
5
 
9
6
  DEPENDENCIES = ["i2c"]
10
7
  CODEOWNERS = ["@kahrendt"]
@@ -1,22 +1,22 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import pins
2
+ import esphome.codegen as cg
4
3
  from esphome.components import sensor
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
- CONF_ID,
7
6
  CONF_CLOCK_PIN,
8
- CONF_DATA_PIN,
9
7
  CONF_CO2,
10
- CONF_TEMPERATURE,
8
+ CONF_DATA_PIN,
11
9
  CONF_HUMIDITY,
10
+ CONF_ID,
11
+ CONF_TEMPERATURE,
12
12
  DEVICE_CLASS_CARBON_DIOXIDE,
13
13
  DEVICE_CLASS_HUMIDITY,
14
14
  DEVICE_CLASS_TEMPERATURE,
15
+ ICON_MOLECULE_CO2,
15
16
  STATE_CLASS_MEASUREMENT,
16
- UNIT_PARTS_PER_MILLION,
17
17
  UNIT_CELSIUS,
18
+ UNIT_PARTS_PER_MILLION,
18
19
  UNIT_PERCENT,
19
- ICON_MOLECULE_CO2,
20
20
  )
21
21
  from esphome.cpp_helpers import gpio_pin_expression
22
22
 
@@ -1499,30 +1499,9 @@ def dimensions(value):
1499
1499
 
1500
1500
 
1501
1501
  def directory(value):
1502
- import json
1503
-
1504
1502
  value = string(value)
1505
1503
  path = CORE.relative_config_path(value)
1506
1504
 
1507
- if CORE.vscode and (
1508
- not CORE.ace or os.path.abspath(path) == os.path.abspath(CORE.config_path)
1509
- ):
1510
- print(
1511
- json.dumps(
1512
- {
1513
- "type": "check_directory_exists",
1514
- "path": path,
1515
- }
1516
- )
1517
- )
1518
- data = json.loads(input())
1519
- assert data["type"] == "directory_exists_response"
1520
- if data["content"]:
1521
- return value
1522
- raise Invalid(
1523
- f"Could not find directory '{path}'. Please make sure it exists (full path: {os.path.abspath(path)})."
1524
- )
1525
-
1526
1505
  if not os.path.exists(path):
1527
1506
  raise Invalid(
1528
1507
  f"Could not find directory '{path}'. Please make sure it exists (full path: {os.path.abspath(path)})."
@@ -1535,30 +1514,9 @@ def directory(value):
1535
1514
 
1536
1515
 
1537
1516
  def file_(value):
1538
- import json
1539
-
1540
1517
  value = string(value)
1541
1518
  path = CORE.relative_config_path(value)
1542
1519
 
1543
- if CORE.vscode and (
1544
- not CORE.ace or os.path.abspath(path) == os.path.abspath(CORE.config_path)
1545
- ):
1546
- print(
1547
- json.dumps(
1548
- {
1549
- "type": "check_file_exists",
1550
- "path": path,
1551
- }
1552
- )
1553
- )
1554
- data = json.loads(input())
1555
- assert data["type"] == "file_exists_response"
1556
- if data["content"]:
1557
- return value
1558
- raise Invalid(
1559
- f"Could not find file '{path}'. Please make sure it exists (full path: {os.path.abspath(path)})."
1560
- )
1561
-
1562
1520
  if not os.path.exists(path):
1563
1521
  raise Invalid(
1564
1522
  f"Could not find file '{path}'. Please make sure it exists (full path: {os.path.abspath(path)})."
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2025.3.3"
3
+ __version__ = "2025.4.0"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
@@ -196,8 +196,10 @@ CONF_DC_PIN = "dc_pin"
196
196
  CONF_DEASSERT_RTS_DTR = "deassert_rts_dtr"
197
197
  CONF_DEBOUNCE = "debounce"
198
198
  CONF_DEBUG = "debug"
199
+ CONF_DEBUG_SCHEDULER = "debug_scheduler"
199
200
  CONF_DECAY_MODE = "decay_mode"
200
201
  CONF_DECELERATION = "deceleration"
202
+ CONF_DEFAULT = "default"
201
203
  CONF_DEFAULT_MODE = "default_mode"
202
204
  CONF_DEFAULT_TARGET_TEMPERATURE_HIGH = "default_target_temperature_high"
203
205
  CONF_DEFAULT_TARGET_TEMPERATURE_LOW = "default_target_temperature_low"
esphome/core/__init__.py CHANGED
@@ -475,7 +475,6 @@ class EsphomeCore:
475
475
  self.dashboard = False
476
476
  # True if command is run from vscode api
477
477
  self.vscode = False
478
- self.ace = False
479
478
  # The name of the node
480
479
  self.name: Optional[str] = None
481
480
  # The friendly name of the node
@@ -79,7 +79,7 @@ void Component::call_setup() { this->setup(); }
79
79
  void Component::call_dump_config() {
80
80
  this->dump_config();
81
81
  if (this->is_failed()) {
82
- ESP_LOGE(TAG, " Component %s is marked FAILED", this->get_component_source());
82
+ ESP_LOGE(TAG, " Component %s is marked FAILED: %s", this->get_component_source(), this->error_message_.c_str());
83
83
  }
84
84
  }
85
85
 
@@ -162,6 +162,8 @@ void Component::status_set_error(const char *message) {
162
162
  this->component_state_ |= STATUS_LED_ERROR;
163
163
  App.app_state_ |= STATUS_LED_ERROR;
164
164
  ESP_LOGE(TAG, "Component %s set Error flag: %s", this->get_component_source(), message);
165
+ if (strcmp(message, "unspecified") != 0)
166
+ this->error_message_ = message;
165
167
  }
166
168
  void Component::status_clear_warning() {
167
169
  if ((this->component_state_ & STATUS_LED_WARNING) == 0)
esphome/core/component.h CHANGED
@@ -118,6 +118,11 @@ class Component {
118
118
  */
119
119
  virtual void mark_failed();
120
120
 
121
+ void mark_failed(const char *message) {
122
+ this->status_set_error(message);
123
+ this->mark_failed();
124
+ }
125
+
121
126
  bool is_failed() const;
122
127
 
123
128
  bool is_ready() const;
@@ -165,10 +170,17 @@ class Component {
165
170
  * This will call f every interval ms. Can be cancelled via CancelInterval().
166
171
  * Similar to javascript's setInterval().
167
172
  *
168
- * IMPORTANT: Do not rely on this having correct timing. This is only called from
169
- * loop() and therefore can be significantly delay. If you need exact timing please
173
+ * IMPORTANT NOTE:
174
+ * The only guarantee offered by this call is that the callback will be called no *earlier* than
175
+ * the specified interval after the previous call. Any given interval may be longer due to
176
+ * other components blocking the loop() call.
177
+ *
178
+ * So do not rely on this having correct timing. If you need exact timing please
170
179
  * use hardware timers.
171
180
  *
181
+ * Note also that the first call to f will not happen immediately, but after a random delay. This is
182
+ * intended to prevent many interval functions from being called at the same time.
183
+ *
172
184
  * @param name The identifier for this interval function.
173
185
  * @param interval The interval in ms.
174
186
  * @param f The function (or lambda) that should be called
@@ -272,6 +284,7 @@ class Component {
272
284
  uint32_t component_state_{0x0000}; ///< State of this component.
273
285
  float setup_priority_override_{NAN};
274
286
  const char *component_source_{nullptr};
287
+ std::string error_message_{};
275
288
  };
276
289
 
277
290
  /** This class simplifies creating components that periodically check a state.
esphome/core/config.py CHANGED
@@ -10,6 +10,7 @@ from esphome.const import (
10
10
  CONF_BUILD_PATH,
11
11
  CONF_COMMENT,
12
12
  CONF_COMPILE_PROCESS_LIMIT,
13
+ CONF_DEBUG_SCHEDULER,
13
14
  CONF_ESPHOME,
14
15
  CONF_FRIENDLY_NAME,
15
16
  CONF_INCLUDES,
@@ -144,6 +145,7 @@ CONFIG_SCHEMA = cv.All(
144
145
  cv.Optional(CONF_INCLUDES, default=[]): cv.ensure_list(valid_include),
145
146
  cv.Optional(CONF_LIBRARIES, default=[]): cv.ensure_list(cv.string_strict),
146
147
  cv.Optional(CONF_NAME_ADD_MAC_SUFFIX, default=False): cv.boolean,
148
+ cv.Optional(CONF_DEBUG_SCHEDULER, default=False): cv.boolean,
147
149
  cv.Optional(CONF_PROJECT): cv.Schema(
148
150
  {
149
151
  cv.Required(CONF_NAME): cv.All(
@@ -369,6 +371,8 @@ async def to_code(config):
369
371
  cg.add_build_flag("-Wno-unused-variable")
370
372
  cg.add_build_flag("-Wno-unused-but-set-variable")
371
373
  cg.add_build_flag("-Wno-sign-compare")
374
+ if config[CONF_DEBUG_SCHEDULER]:
375
+ cg.add_define("ESPHOME_DEBUG_SCHEDULER")
372
376
 
373
377
  if CORE.using_arduino and not CORE.is_bk72xx:
374
378
  CORE.add_job(add_arduino_global_workaround)
esphome/core/defines.h CHANGED
@@ -13,6 +13,7 @@
13
13
  #define ESPHOME_PROJECT_VERSION "v2"
14
14
  #define ESPHOME_PROJECT_VERSION_30 "v2"
15
15
  #define ESPHOME_VARIANT "ESP32"
16
+ #define ESPHOME_DEBUG_SCHEDULER
16
17
 
17
18
  // logger
18
19
  #define ESPHOME_LOG_LEVEL ESPHOME_LOG_LEVEL_VERY_VERBOSE
@@ -47,16 +48,36 @@
47
48
  #define USE_LOGGER
48
49
  #define USE_LVGL
49
50
  #define USE_LVGL_ANIMIMG
51
+ #define USE_LVGL_ARC
50
52
  #define USE_LVGL_BINARY_SENSOR
53
+ #define USE_LVGL_BUTTON
51
54
  #define USE_LVGL_BUTTONMATRIX
55
+ #define USE_LVGL_CANVAS
56
+ #define USE_LVGL_CHART
57
+ #define USE_LVGL_CHECKBOX
52
58
  #define USE_LVGL_DROPDOWN
53
59
  #define USE_LVGL_FONT
54
60
  #define USE_LVGL_IMAGE
61
+ #define USE_LVGL_IMAGEBUTTON
55
62
  #define USE_LVGL_KEY_LISTENER
56
63
  #define USE_LVGL_KEYBOARD
64
+ #define USE_LVGL_LABEL
65
+ #define USE_LVGL_LINE
66
+ #define USE_LVGL_LIST
67
+ #define USE_LVGL_MENU
57
68
  #define USE_LVGL_METER
69
+ #define USE_LVGL_MSGBOX
58
70
  #define USE_LVGL_ROLLER
59
71
  #define USE_LVGL_ROTARY_ENCODER
72
+ #define USE_LVGL_SLIDER
73
+ #define USE_LVGL_SPAN
74
+ #define USE_LVGL_SPINBOX
75
+ #define USE_LVGL_SPINNER
76
+ #define USE_LVGL_SWITCH
77
+ #define USE_LVGL_TABLE
78
+ #define USE_LVGL_TABVIEW
79
+ #define USE_LVGL_TEXTAREA
80
+ #define USE_LVGL_TILEVIEW
60
81
  #define USE_LVGL_TOUCHSCREEN
61
82
  #define USE_MD5
62
83
  #define USE_MDNS
esphome/core/helpers.cpp CHANGED
@@ -44,10 +44,7 @@
44
44
  #include <random>
45
45
  #endif
46
46
  #ifdef USE_ESP32
47
- #include "esp32/rom/crc.h"
48
- #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 3, 2)
49
- #include "esp_mac.h"
50
- #endif
47
+ #include "rom/crc.h"
51
48
  #include "esp_efuse.h"
52
49
  #include "esp_efuse_table.h"
53
50
  #endif
@@ -70,7 +67,9 @@ static const uint16_t CRC16_8408_LE_LUT_L[] = {0x0000, 0x1189, 0x2312, 0x329b, 0
70
67
  0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7};
71
68
  static const uint16_t CRC16_8408_LE_LUT_H[] = {0x0000, 0x1081, 0x2102, 0x3183, 0x4204, 0x5285, 0x6306, 0x7387,
72
69
  0x8408, 0x9489, 0xa50a, 0xb58b, 0xc60c, 0xd68d, 0xe70e, 0xf78f};
70
+ #endif
73
71
 
72
+ #if !defined(USE_ESP32) || defined(USE_ESP32_VARIANT_ESP32S2)
74
73
  static const uint16_t CRC16_1021_BE_LUT_L[] = {0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
75
74
  0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef};
76
75
  static const uint16_t CRC16_1021_BE_LUT_H[] = {0x0000, 0x1231, 0x2462, 0x3653, 0x48c4, 0x5af5, 0x6ca6, 0x7e97,
@@ -151,7 +150,7 @@ uint16_t crc16(const uint8_t *data, uint16_t len, uint16_t crc, uint16_t reverse
151
150
  }
152
151
 
153
152
  uint16_t crc16be(const uint8_t *data, uint16_t len, uint16_t crc, uint16_t poly, bool refin, bool refout) {
154
- #ifdef USE_ESP32
153
+ #if defined(USE_ESP32) && !defined(USE_ESP32_VARIANT_ESP32S2)
155
154
  if (poly == 0x1021) {
156
155
  crc = crc16_be(refin ? crc : (crc ^ 0xffff), data, len);
157
156
  return refout ? crc : (crc ^ 0xffff);
@@ -160,7 +159,7 @@ uint16_t crc16be(const uint8_t *data, uint16_t len, uint16_t crc, uint16_t poly,
160
159
  if (refin) {
161
160
  crc ^= 0xffff;
162
161
  }
163
- #ifndef USE_ESP32
162
+ #if !defined(USE_ESP32) || defined(USE_ESP32_VARIANT_ESP32S2)
164
163
  if (poly == 0x1021) {
165
164
  while (len--) {
166
165
  uint8_t combo = (crc >> 8) ^ *data++;
@@ -178,7 +177,7 @@ uint16_t crc16be(const uint8_t *data, uint16_t len, uint16_t crc, uint16_t poly,
178
177
  }
179
178
  }
180
179
  }
181
- #ifndef USE_ESP32
180
+ #if !defined(USE_ESP32) || defined(USE_ESP32_VARIANT_ESP32S2)
182
181
  }
183
182
  #endif
184
183
  return refout ? (crc ^ 0xffff) : crc;