esphome 2025.3.2__py3-none-any.whl → 2025.4.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. esphome/__main__.py +29 -7
  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/sensor.py +1 -1
  27. esphome/components/am2320/sensor.py +1 -1
  28. esphome/components/am43/cover/__init__.py +1 -1
  29. esphome/components/am43/sensor/__init__.py +3 -3
  30. esphome/components/analog_threshold/binary_sensor.py +2 -5
  31. esphome/components/anova/climate.py +1 -1
  32. esphome/components/apds9306/sensor.py +1 -1
  33. esphome/components/apds9960/__init__.py +1 -1
  34. esphome/components/apds9960/binary_sensor.py +2 -1
  35. esphome/components/apds9960/sensor.py +3 -2
  36. esphome/components/api/api_frame_helper.cpp +21 -1
  37. esphome/components/as3935/__init__.py +3 -3
  38. esphome/components/as3935/binary_sensor.py +2 -1
  39. esphome/components/as3935/sensor.py +4 -3
  40. esphome/components/as3935_i2c/__init__.py +1 -1
  41. esphome/components/as3935_spi/__init__.py +1 -1
  42. esphome/components/as5600/__init__.py +2 -2
  43. esphome/components/as5600/sensor/__init__.py +10 -9
  44. esphome/components/as7341/sensor.py +1 -2
  45. esphome/components/at581x/__init__.py +4 -8
  46. esphome/components/at581x/switch/__init__.py +2 -4
  47. esphome/components/atc_mithermometer/sensor.py +3 -3
  48. esphome/components/b_parasite/sensor.py +2 -2
  49. esphome/components/ballu/climate.py +1 -1
  50. esphome/components/bang_bang/climate.py +2 -2
  51. esphome/components/bedjet/__init__.py +2 -6
  52. esphome/components/bedjet/climate/__init__.py +3 -6
  53. esphome/components/bedjet/fan/__init__.py +4 -9
  54. esphome/components/bedjet/sensor/__init__.py +3 -6
  55. esphome/components/beken_spi_led_strip/light.py +2 -2
  56. esphome/components/bh1750/sensor.py +2 -6
  57. esphome/components/binary/fan/__init__.py +2 -1
  58. esphome/components/binary/light/__init__.py +3 -2
  59. esphome/components/binary_sensor_map/sensor.py +5 -6
  60. esphome/components/bl0939/sensor.py +1 -1
  61. esphome/components/bl0940/sensor.py +3 -3
  62. esphome/components/ble_client/__init__.py +3 -2
  63. esphome/components/ble_client/sensor/__init__.py +1 -1
  64. esphome/components/ble_client/text_sensor/__init__.py +1 -1
  65. esphome/components/bluetooth_proxy/__init__.py +35 -23
  66. esphome/components/bme280_base/__init__.py +1 -1
  67. esphome/components/bme280_i2c/sensor.py +3 -2
  68. esphome/components/bme280_spi/sensor.py +3 -2
  69. esphome/components/bme680/sensor.py +4 -4
  70. esphome/components/bme680_bsec/__init__.py +1 -1
  71. esphome/components/bme680_bsec/sensor.py +3 -6
  72. esphome/components/bme680_bsec/text_sensor.py +3 -2
  73. esphome/components/bmi160/sensor.py +6 -6
  74. esphome/components/bmp085/sensor.py +1 -1
  75. esphome/components/bmp280_base/__init__.py +1 -1
  76. esphome/components/bmp280_i2c/sensor.py +3 -2
  77. esphome/components/bmp280_spi/sensor.py +3 -2
  78. esphome/components/bmp3xx_base/__init__.py +1 -1
  79. esphome/components/bmp3xx_i2c/sensor.py +2 -1
  80. esphome/components/bmp3xx_spi/sensor.py +2 -1
  81. esphome/components/bmp581/sensor.py +2 -1
  82. esphome/components/bp1658cj/__init__.py +2 -6
  83. esphome/components/bp1658cj/output.py +2 -1
  84. esphome/components/bp5758d/__init__.py +2 -6
  85. esphome/components/bp5758d/output.py +3 -2
  86. esphome/components/canbus/__init__.py +13 -2
  87. esphome/components/canbus/canbus.cpp +7 -1
  88. esphome/components/cap1188/__init__.py +2 -2
  89. esphome/components/cap1188/binary_sensor.py +3 -2
  90. esphome/components/captive_portal/__init__.py +3 -3
  91. esphome/components/ccs811/sensor.py +10 -10
  92. esphome/components/cd74hc4067/__init__.py +2 -5
  93. esphome/components/cd74hc4067/sensor.py +6 -5
  94. esphome/components/climate_ir/__init__.py +2 -2
  95. esphome/components/climate_ir_lg/climate.py +1 -1
  96. esphome/components/color/__init__.py +1 -2
  97. esphome/components/color_temperature/light.py +2 -2
  98. esphome/components/combination/sensor.py +1 -1
  99. esphome/components/coolix/climate.py +1 -1
  100. esphome/components/copy/binary_sensor/__init__.py +1 -1
  101. esphome/components/copy/button/__init__.py +1 -1
  102. esphome/components/copy/cover/__init__.py +1 -1
  103. esphome/components/copy/fan/__init__.py +2 -7
  104. esphome/components/copy/lock/__init__.py +2 -7
  105. esphome/components/copy/number/__init__.py +1 -1
  106. esphome/components/copy/select/__init__.py +2 -7
  107. esphome/components/copy/sensor/__init__.py +2 -2
  108. esphome/components/copy/switch/__init__.py +1 -1
  109. esphome/components/copy/text/__init__.py +2 -7
  110. esphome/components/copy/text_sensor/__init__.py +2 -6
  111. esphome/components/cs5460a/sensor.py +7 -7
  112. esphome/components/cse7761/sensor.py +2 -2
  113. esphome/components/cse7766/sensor.py +1 -1
  114. esphome/components/cst226/touchscreen/__init__.py +3 -4
  115. esphome/components/ct_clamp/sensor.py +1 -1
  116. esphome/components/current_based/cover.py +3 -4
  117. esphome/components/cwww/light.py +3 -3
  118. esphome/components/dac7678/__init__.py +1 -1
  119. esphome/components/dac7678/output.py +2 -1
  120. esphome/components/daikin/climate.py +1 -1
  121. esphome/components/daikin_arc/climate.py +1 -1
  122. esphome/components/daikin_brc/climate.py +1 -1
  123. esphome/components/dallas_temp/sensor.py +1 -1
  124. esphome/components/daly_bms/__init__.py +2 -2
  125. esphome/components/daly_bms/binary_sensor.py +3 -2
  126. esphome/components/daly_bms/sensor.py +14 -13
  127. esphome/components/daly_bms/text_sensor.py +3 -2
  128. esphome/components/dashboard_import/__init__.py +5 -5
  129. esphome/components/debug/sensor.py +7 -6
  130. esphome/components/debug/text_sensor.py +1 -1
  131. esphome/components/deep_sleep/__init__.py +12 -13
  132. esphome/components/delonghi/climate.py +1 -1
  133. esphome/components/demo/__init__.py +1 -1
  134. esphome/components/dfplayer/__init__.py +3 -3
  135. esphome/components/dfrobot_sen0395/__init__.py +3 -3
  136. esphome/components/dfrobot_sen0395/binary_sensor.py +2 -1
  137. esphome/components/dfrobot_sen0395/switch/__init__.py +2 -3
  138. esphome/components/dht/sensor.py +4 -5
  139. esphome/components/dht12/sensor.py +3 -3
  140. esphome/components/display/display.cpp +2 -2
  141. esphome/components/dps310/sensor.py +3 -3
  142. esphome/components/ds1307/time.py +2 -3
  143. esphome/components/dsmr/__init__.py +3 -7
  144. esphome/components/dsmr/sensor.py +5 -4
  145. esphome/components/dsmr/text_sensor.py +3 -2
  146. esphome/components/duty_cycle/sensor.py +3 -8
  147. esphome/components/duty_time/sensor.py +7 -7
  148. esphome/components/e131/__init__.py +3 -3
  149. esphome/components/ee895/sensor.py +5 -5
  150. esphome/components/ektf2232/touchscreen/__init__.py +2 -3
  151. esphome/components/emc2101/__init__.py +1 -1
  152. esphome/components/emc2101/output/__init__.py +3 -2
  153. esphome/components/emc2101/sensor/__init__.py +4 -3
  154. esphome/components/emmeti/climate.py +1 -1
  155. esphome/components/endstop/cover.py +3 -3
  156. esphome/components/ens160_base/__init__.py +1 -1
  157. esphome/components/ens160_i2c/sensor.py +2 -1
  158. esphome/components/ens160_spi/sensor.py +2 -1
  159. esphome/components/ens210/sensor.py +1 -1
  160. esphome/components/esp32/__init__.py +10 -0
  161. esphome/components/esp32_ble_tracker/__init__.py +135 -51
  162. esphome/components/esp32_camera/__init__.py +7 -8
  163. esphome/components/esp32_camera_web_server/__init__.py +2 -2
  164. esphome/components/esp32_can/canbus.py +21 -0
  165. esphome/components/esp32_can/esp32_can.cpp +1 -1
  166. esphome/components/esp32_can/esp32_can.h +4 -0
  167. esphome/components/esp32_dac/output.py +2 -2
  168. esphome/components/esp32_hall/sensor.py +2 -6
  169. esphome/components/esp32_touch/__init__.py +7 -7
  170. esphome/components/esp32_touch/binary_sensor.py +4 -7
  171. esphome/components/esp8266_pwm/output.py +3 -8
  172. esphome/components/ethernet/__init__.py +1 -0
  173. esphome/components/ethernet/ethernet_component.cpp +1 -1
  174. esphome/components/ethernet_info/ethernet_info_text_sensor.h +1 -0
  175. esphome/components/exposure_notifications/__init__.py +2 -2
  176. esphome/components/external_components/__init__.py +1 -1
  177. esphome/components/ezo/sensor.py +2 -2
  178. esphome/components/ezo_pmp/__init__.py +4 -4
  179. esphome/components/ezo_pmp/binary_sensor.py +4 -4
  180. esphome/components/ezo_pmp/sensor.py +4 -5
  181. esphome/components/ezo_pmp/text_sensor.py +2 -6
  182. esphome/components/factory_reset/button/__init__.py +2 -1
  183. esphome/components/factory_reset/switch/__init__.py +3 -2
  184. esphome/components/fastled_base/__init__.py +3 -3
  185. esphome/components/fastled_clockless/light.py +2 -2
  186. esphome/components/fastled_spi/light.py +2 -2
  187. esphome/components/feedback/cover.py +3 -3
  188. esphome/components/fingerprint_grow/__init__.py +5 -6
  189. esphome/components/fingerprint_grow/binary_sensor.py +2 -1
  190. esphome/components/fingerprint_grow/sensor.py +2 -1
  191. esphome/components/fs3000/sensor.py +2 -6
  192. esphome/components/ft5x06/touchscreen/__init__.py +2 -2
  193. esphome/components/ft63x6/touchscreen.py +2 -3
  194. esphome/components/fujitsu_general/climate.py +1 -1
  195. esphome/components/gcja5/sensor.py +4 -4
  196. esphome/components/gdk101/__init__.py +1 -1
  197. esphome/components/gdk101/binary_sensor.py +2 -1
  198. esphome/components/gdk101/sensor.py +5 -4
  199. esphome/components/globals/__init__.py +1 -2
  200. esphome/components/gp2y1010au0f/sensor.py +3 -3
  201. esphome/components/gp8403/__init__.py +1 -2
  202. esphome/components/gp8403/output/__init__.py +3 -4
  203. esphome/components/gpio/binary_sensor/__init__.py +3 -2
  204. esphome/components/gpio/one_wire/__init__.py +3 -2
  205. esphome/components/gpio/output/__init__.py +3 -2
  206. esphome/components/gpio/switch/__init__.py +3 -2
  207. esphome/components/gps/__init__.py +4 -5
  208. esphome/components/gps/time/__init__.py +3 -2
  209. esphome/components/graph/__init__.py +12 -12
  210. esphome/components/grove_tb6612fng/__init__.py +5 -6
  211. esphome/components/growatt_solar/sensor.py +1 -1
  212. esphome/components/gt911/binary_sensor/__init__.py +2 -2
  213. esphome/components/haier/binary_sensor/__init__.py +4 -10
  214. esphome/components/haier/button/__init__.py +3 -6
  215. esphome/components/haier/sensor/__init__.py +4 -6
  216. esphome/components/haier/switch/__init__.py +4 -7
  217. esphome/components/haier/text_sensor/__init__.py +4 -9
  218. esphome/components/havells_solar/sensor.py +1 -1
  219. esphome/components/hbridge/fan/__init__.py +6 -6
  220. esphome/components/hbridge/light/__init__.py +2 -1
  221. esphome/components/hdc1080/sensor.py +1 -1
  222. esphome/components/he60r/cover.py +2 -6
  223. esphome/components/heatpumpir/climate.py +1 -1
  224. esphome/components/hitachi_ac344/climate.py +1 -1
  225. esphome/components/hitachi_ac424/climate.py +1 -1
  226. esphome/components/hlw8012/sensor.py +6 -6
  227. esphome/components/hm3301/sensor.py +3 -3
  228. esphome/components/hmc5883l/sensor.py +4 -4
  229. esphome/components/homeassistant/time/__init__.py +2 -1
  230. esphome/components/honeywell_hih_i2c/sensor.py +3 -3
  231. esphome/components/honeywellabp/sensor.py +1 -2
  232. esphome/components/honeywellabp2_i2c/sensor.py +1 -2
  233. esphome/components/host/time/__init__.py +2 -2
  234. esphome/components/hrxl_maxsonar_wr/sensor.py +1 -1
  235. esphome/components/hte501/sensor.py +3 -3
  236. esphome/components/http_request/ota/__init__.py +5 -9
  237. esphome/components/http_request/update/__init__.py +3 -7
  238. esphome/components/htu21d/sensor.py +6 -6
  239. esphome/components/htu31d/sensor.py +1 -1
  240. esphome/components/hx711/sensor.py +3 -8
  241. esphome/components/hydreon_rgxx/binary_sensor.py +3 -7
  242. esphome/components/hydreon_rgxx/sensor.py +4 -4
  243. esphome/components/hyt271/sensor.py +1 -1
  244. esphome/components/i2c_device/__init__.py +1 -1
  245. esphome/components/i2s_audio/media_player/__init__.py +6 -8
  246. esphome/components/iaqcore/sensor.py +2 -2
  247. esphome/components/ina219/sensor.py +2 -2
  248. esphome/components/ina226/sensor.py +4 -4
  249. esphome/components/ina260/sensor.py +4 -4
  250. esphome/components/ina2xx_base/__init__.py +2 -2
  251. esphome/components/ina2xx_i2c/sensor.py +1 -1
  252. esphome/components/ina2xx_spi/sensor.py +1 -1
  253. esphome/components/ina3221/sensor.py +3 -3
  254. esphome/components/inkbird_ibsth1_mini/sensor.py +2 -2
  255. esphome/components/inkplate6/display.py +2 -2
  256. esphome/components/integration/sensor.py +4 -4
  257. esphome/components/internal_temperature/sensor.py +5 -7
  258. esphome/components/interval/__init__.py +1 -1
  259. esphome/components/jsn_sr04t/sensor.py +3 -3
  260. esphome/components/kamstrup_kmp/sensor.py +1 -1
  261. esphome/components/key_collector/__init__.py +2 -2
  262. esphome/components/kmeteriso/sensor.py +2 -2
  263. esphome/components/kuntze/sensor.py +5 -5
  264. esphome/components/lcd_base/__init__.py +2 -2
  265. esphome/components/lcd_gpio/display.py +4 -4
  266. esphome/components/lcd_menu/__init__.py +3 -7
  267. esphome/components/lcd_pcf8574/display.py +1 -1
  268. esphome/components/ld2410/__init__.py +4 -4
  269. esphome/components/ld2410/binary_sensor.py +5 -4
  270. esphome/components/ld2410/button/__init__.py +3 -2
  271. esphome/components/ld2410/number/__init__.py +5 -4
  272. esphome/components/ld2410/select/__init__.py +4 -3
  273. esphome/components/ld2410/sensor.py +6 -5
  274. esphome/components/ld2410/switch/__init__.py +2 -1
  275. esphome/components/ld2410/text_sensor.py +3 -2
  276. esphome/components/ld2420/__init__.py +1 -1
  277. esphome/components/ld2420/binary_sensor/__init__.py +4 -3
  278. esphome/components/ld2420/button/__init__.py +3 -2
  279. esphome/components/ld2420/number/__init__.py +3 -2
  280. esphome/components/ld2420/select/__init__.py +1 -0
  281. esphome/components/ld2420/sensor/__init__.py +3 -2
  282. esphome/components/ld2420/text_sensor/__init__.py +2 -6
  283. esphome/components/ld2450/__init__.py +2 -5
  284. esphome/components/ledc/output.py +3 -3
  285. esphome/components/libretiny/text_sensor.py +1 -1
  286. esphome/components/libretiny_pwm/output.py +3 -7
  287. esphome/components/lightwaverf/__init__.py +6 -8
  288. esphome/components/lilygo_t5_47/touchscreen/__init__.py +2 -3
  289. esphome/components/ltr390/sensor.py +1 -1
  290. esphome/components/ltr501/sensor.py +2 -2
  291. esphome/components/ltr_als_ps/sensor.py +2 -2
  292. esphome/components/lvgl/__init__.py +9 -12
  293. esphome/components/lvgl/automation.py +1 -1
  294. esphome/components/lvgl/defines.py +5 -2
  295. esphome/components/lvgl/lv_validation.py +17 -9
  296. esphome/components/lvgl/lvcode.py +9 -8
  297. esphome/components/lvgl/lvgl_esphome.h +19 -0
  298. esphome/components/lvgl/schemas.py +67 -18
  299. esphome/components/lvgl/styles.py +42 -11
  300. esphome/components/lvgl/switch/__init__.py +13 -8
  301. esphome/components/lvgl/switch/lvgl_switch.h +5 -16
  302. esphome/components/lvgl/trigger.py +10 -1
  303. esphome/components/lvgl/widgets/__init__.py +1 -2
  304. esphome/components/lvgl/widgets/canvas.py +403 -0
  305. esphome/components/lvgl/widgets/line.py +22 -32
  306. esphome/components/m5stack_8angle/__init__.py +1 -2
  307. esphome/components/m5stack_8angle/binary_sensor/__init__.py +2 -3
  308. esphome/components/m5stack_8angle/light/__init__.py +2 -4
  309. esphome/components/m5stack_8angle/sensor/__init__.py +2 -4
  310. esphome/components/matrix_keypad/binary_sensor/__init__.py +4 -3
  311. esphome/components/max31855/sensor.py +1 -1
  312. esphome/components/max31865/sensor.py +1 -1
  313. esphome/components/max44009/sensor.py +1 -1
  314. esphome/components/max6675/sensor.py +1 -1
  315. esphome/components/max6956/__init__.py +5 -5
  316. esphome/components/max6956/output/__init__.py +4 -3
  317. esphome/components/max7219/display.py +1 -1
  318. esphome/components/max7219digit/display.py +1 -1
  319. esphome/components/max9611/sensor.py +10 -10
  320. esphome/components/mcp23008/__init__.py +1 -1
  321. esphome/components/mcp23016/__init__.py +4 -4
  322. esphome/components/mcp23017/__init__.py +1 -1
  323. esphome/components/mcp23s08/__init__.py +1 -1
  324. esphome/components/mcp23s17/__init__.py +1 -1
  325. esphome/components/mcp23xxx_base/__init__.py +4 -4
  326. esphome/components/mcp2515/canbus.py +2 -2
  327. esphome/components/mcp3008/__init__.py +1 -1
  328. esphome/components/mcp3008/sensor/__init__.py +4 -4
  329. esphome/components/mcp3204/__init__.py +1 -1
  330. esphome/components/mcp3204/sensor/__init__.py +3 -2
  331. esphome/components/mcp4461/__init__.py +42 -0
  332. esphome/components/mcp4461/mcp4461.cpp +618 -0
  333. esphome/components/mcp4461/mcp4461.h +171 -0
  334. esphome/components/mcp4461/output/__init__.py +60 -0
  335. esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
  336. esphome/components/mcp4461/output/mcp4461_output.h +49 -0
  337. esphome/components/mcp4725/output.py +2 -2
  338. esphome/components/mcp4728/__init__.py +1 -1
  339. esphome/components/mcp4728/output/__init__.py +4 -3
  340. esphome/components/mcp47a1/output.py +2 -2
  341. esphome/components/mcp9808/sensor.py +1 -1
  342. esphome/components/mdns/__init__.py +1 -1
  343. esphome/components/mhz19/sensor.py +4 -4
  344. esphome/components/micronova/__init__.py +3 -5
  345. esphome/components/micronova/button/__init__.py +5 -5
  346. esphome/components/micronova/number/__init__.py +6 -10
  347. esphome/components/micronova/sensor/__init__.py +6 -6
  348. esphome/components/micronova/switch/__init__.py +6 -8
  349. esphome/components/micronova/text_sensor/__init__.py +5 -5
  350. esphome/components/microphone/__init__.py +2 -4
  351. esphome/components/midea/climate.py +6 -10
  352. esphome/components/midea_ir/climate.py +1 -1
  353. esphome/components/mitsubishi/climate.py +1 -1
  354. esphome/components/mlx90614/sensor.py +1 -1
  355. esphome/components/mmc5603/sensor.py +4 -4
  356. esphome/components/mmc5983/sensor.py +1 -1
  357. esphome/components/modbus/__init__.py +5 -9
  358. esphome/components/modbus_controller/__init__.py +1 -1
  359. esphome/components/monochromatic/light.py +2 -2
  360. esphome/components/mopeka_ble/__init__.py +1 -1
  361. esphome/components/mopeka_pro_check/sensor.py +12 -12
  362. esphome/components/mopeka_std_check/sensor.py +8 -8
  363. esphome/components/mpl3115a2/sensor.py +1 -1
  364. esphome/components/mpr121/__init__.py +3 -3
  365. esphome/components/mpr121/binary_sensor/__init__.py +5 -4
  366. esphome/components/mpu6050/sensor.py +4 -4
  367. esphome/components/mpu6886/sensor.py +4 -4
  368. esphome/components/mqtt_subscribe/sensor/__init__.py +3 -5
  369. esphome/components/mqtt_subscribe/text_sensor/__init__.py +1 -1
  370. esphome/components/ms5611/sensor.py +2 -2
  371. esphome/components/ms8607/sensor.py +1 -1
  372. esphome/components/my9231/__init__.py +1 -1
  373. esphome/components/my9231/output.py +2 -1
  374. esphome/components/nau7802/nau7802.cpp +0 -4
  375. esphome/components/nau7802/nau7802.h +0 -2
  376. esphome/components/neopixelbus/_methods.py +11 -9
  377. esphome/components/neopixelbus/light.py +11 -18
  378. esphome/components/nextion/binary_sensor/__init__.py +6 -14
  379. esphome/components/nextion/sensor/__init__.py +7 -10
  380. esphome/components/nextion/switch/__init__.py +3 -5
  381. esphome/components/nextion/text_sensor/__init__.py +3 -7
  382. esphome/components/noblex/climate.py +1 -1
  383. esphome/components/ntc/sensor.py +1 -1
  384. esphome/components/opentherm/__init__.py +6 -6
  385. esphome/components/opentherm/input.py +2 -1
  386. esphome/components/opentherm/number/__init__.py +5 -4
  387. esphome/components/opentherm/output/__init__.py +3 -2
  388. esphome/components/opentherm/schema.py +7 -7
  389. esphome/components/opentherm/switch/__init__.py +3 -2
  390. esphome/components/opentherm/validate.py +1 -1
  391. esphome/components/output/__init__.py +2 -3
  392. esphome/components/output/button/__init__.py +3 -2
  393. esphome/components/output/lock/__init__.py +2 -1
  394. esphome/components/output/switch/__init__.py +2 -1
  395. esphome/components/partition/light.py +4 -4
  396. esphome/components/pca6416a/__init__.py +4 -4
  397. esphome/components/pca9554/__init__.py +4 -4
  398. esphome/components/pca9685/__init__.py +2 -2
  399. esphome/components/pca9685/output.py +2 -1
  400. esphome/components/pcf85063/time.py +2 -3
  401. esphome/components/pcf8563/time.py +2 -2
  402. esphome/components/pcf8574/__init__.py +4 -4
  403. esphome/components/pid/climate.py +2 -2
  404. esphome/components/pid/sensor/__init__.py +4 -8
  405. esphome/components/pipsolar/__init__.py +1 -1
  406. esphome/components/pipsolar/binary_sensor/__init__.py +2 -2
  407. esphome/components/pipsolar/output/__init__.py +4 -3
  408. esphome/components/pipsolar/sensor/__init__.py +5 -4
  409. esphome/components/pipsolar/switch/__init__.py +2 -1
  410. esphome/components/pipsolar/text_sensor/__init__.py +2 -1
  411. esphome/components/pm1006/sensor.py +2 -2
  412. esphome/components/pmsa003i/sensor.py +4 -4
  413. esphome/components/pmsx003/sensor.py +10 -11
  414. esphome/components/pmwcs3/sensor.py +5 -5
  415. esphome/components/pn532/__init__.py +3 -3
  416. esphome/components/pn532_i2c/__init__.py +1 -1
  417. esphome/components/pn532_spi/__init__.py +1 -1
  418. esphome/components/pn7150/__init__.py +2 -2
  419. esphome/components/pn7150_i2c/__init__.py +1 -1
  420. esphome/components/pn7160/__init__.py +2 -2
  421. esphome/components/pn7160_i2c/__init__.py +1 -1
  422. esphome/components/pn7160_spi/__init__.py +1 -1
  423. esphome/components/power_supply/__init__.py +1 -1
  424. esphome/components/prometheus/__init__.py +3 -8
  425. esphome/components/psram/__init__.py +75 -11
  426. esphome/components/psram/psram.cpp +18 -7
  427. esphome/components/pulse_counter/sensor.py +4 -4
  428. esphome/components/pulse_meter/sensor.py +3 -3
  429. esphome/components/pulse_width/sensor.py +3 -8
  430. esphome/components/pvvx_mithermometer/display/__init__.py +1 -1
  431. esphome/components/pvvx_mithermometer/sensor.py +3 -3
  432. esphome/components/pylontech/__init__.py +1 -0
  433. esphome/components/pylontech/sensor/__init__.py +8 -13
  434. esphome/components/pylontech/text_sensor/__init__.py +2 -7
  435. esphome/components/pzem004t/sensor.py +3 -3
  436. esphome/components/pzemac/sensor.py +9 -9
  437. esphome/components/pzemdc/sensor.py +6 -6
  438. esphome/components/qmc5883l/sensor.py +5 -5
  439. esphome/components/qmp6988/sensor.py +3 -3
  440. esphome/components/qr_code/__init__.py +1 -1
  441. esphome/components/qspi_dbi/display.py +1 -1
  442. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  443. esphome/components/qspi_dbi/qspi_dbi.h +1 -1
  444. esphome/components/qwiic_pir/binary_sensor.py +2 -5
  445. esphome/components/radon_eye_ble/__init__.py +1 -1
  446. esphome/components/radon_eye_rd200/sensor.py +3 -4
  447. esphome/components/rc522/__init__.py +3 -3
  448. esphome/components/rc522_i2c/__init__.py +1 -1
  449. esphome/components/rc522_spi/__init__.py +1 -1
  450. esphome/components/rdm6300/__init__.py +2 -2
  451. esphome/components/rdm6300/binary_sensor.py +2 -1
  452. esphome/components/resistance/sensor.py +2 -2
  453. esphome/components/restart/button/__init__.py +1 -1
  454. esphome/components/restart/switch/__init__.py +2 -5
  455. esphome/components/rf_bridge/__init__.py +3 -3
  456. esphome/components/rgb/light.py +2 -2
  457. esphome/components/rgbct/light.py +3 -3
  458. esphome/components/rgbw/light.py +2 -2
  459. esphome/components/rgbww/light.py +4 -4
  460. esphome/components/rotary_encoder/sensor.py +8 -8
  461. esphome/components/rp2040_pio/__init__.py +0 -1
  462. esphome/components/rp2040_pio_led_strip/light.py +2 -4
  463. esphome/components/rp2040_pwm/output.py +3 -7
  464. esphome/components/rtttl/__init__.py +6 -6
  465. esphome/components/ruuvi_ble/__init__.py +1 -1
  466. esphome/components/ruuvitag/sensor.py +15 -15
  467. esphome/components/safe_mode/__init__.py +2 -3
  468. esphome/components/safe_mode/button/__init__.py +3 -2
  469. esphome/components/safe_mode/switch/__init__.py +4 -7
  470. esphome/components/scd30/sensor.py +5 -6
  471. esphome/components/scd4x/sensor.py +6 -8
  472. esphome/components/script/__init__.py +2 -2
  473. esphome/components/sdl/display.py +3 -3
  474. esphome/components/sdl/touchscreen/__init__.py +2 -2
  475. esphome/components/sdm_meter/sensor.py +3 -3
  476. esphome/components/sdp3x/sensor.py +1 -2
  477. esphome/components/sds011/sensor.py +4 -4
  478. esphome/components/seeed_mr24hpc1/__init__.py +1 -1
  479. esphome/components/seeed_mr24hpc1/binary_sensor.py +2 -5
  480. esphome/components/seeed_mr24hpc1/button/__init__.py +1 -0
  481. esphome/components/seeed_mr24hpc1/number/__init__.py +2 -4
  482. esphome/components/seeed_mr24hpc1/select/__init__.py +2 -3
  483. esphome/components/seeed_mr24hpc1/sensor.py +1 -0
  484. esphome/components/seeed_mr24hpc1/switch/__init__.py +2 -4
  485. esphome/components/seeed_mr24hpc1/text_sensor.py +1 -0
  486. esphome/components/seeed_mr60bha2/binary_sensor.py +2 -4
  487. esphome/components/seeed_mr60bha2/sensor.py +1 -1
  488. esphome/components/seeed_mr60fda2/button/__init__.py +1 -1
  489. esphome/components/seeed_mr60fda2/select/__init__.py +0 -1
  490. esphome/components/selec_meter/sensor.py +1 -1
  491. esphome/components/sen0321/sensor.py +2 -2
  492. esphome/components/sen21231/sensor.py +1 -1
  493. esphome/components/senseair/sensor.py +3 -3
  494. esphome/components/sensirion_common/__init__.py +0 -2
  495. esphome/components/servo/__init__.py +3 -3
  496. esphome/components/sfa30/sensor.py +4 -5
  497. esphome/components/sgp4x/sensor.py +2 -2
  498. esphome/components/shelly_dimmer/light.py +16 -16
  499. esphome/components/sht3xd/sensor.py +1 -1
  500. esphome/components/sht4x/sensor.py +6 -6
  501. esphome/components/shtcx/sensor.py +1 -1
  502. esphome/components/shutdown/button/__init__.py +2 -6
  503. esphome/components/shutdown/switch/__init__.py +2 -5
  504. esphome/components/sigma_delta_output/output.py +2 -7
  505. esphome/components/sim800l/__init__.py +3 -7
  506. esphome/components/sim800l/binary_sensor.py +3 -5
  507. esphome/components/sim800l/sensor.py +2 -1
  508. esphome/components/slow_pwm/output.py +4 -5
  509. esphome/components/sm10bit_base/__init__.py +2 -6
  510. esphome/components/sm16716/__init__.py +1 -1
  511. esphome/components/sm16716/output.py +2 -1
  512. esphome/components/sm2135/__init__.py +2 -6
  513. esphome/components/sm2135/output.py +2 -1
  514. esphome/components/sm2235/__init__.py +1 -1
  515. esphome/components/sm2235/output.py +2 -1
  516. esphome/components/sm2335/__init__.py +1 -1
  517. esphome/components/sm2335/output.py +2 -1
  518. esphome/components/sm300d2/sensor.py +13 -13
  519. esphome/components/sml/__init__.py +1 -1
  520. esphome/components/sml/sensor/__init__.py +1 -1
  521. esphome/components/sml/text_sensor/__init__.py +1 -1
  522. esphome/components/smt100/sensor.py +5 -6
  523. esphome/components/sn74hc165/__init__.py +5 -5
  524. esphome/components/sn74hc595/__init__.py +5 -5
  525. esphome/components/socket/__init__.py +1 -1
  526. esphome/components/sonoff_d1/light.py +2 -6
  527. esphome/components/speaker/media_player/speaker_media_player.cpp +47 -12
  528. esphome/components/speed/fan/__init__.py +2 -2
  529. esphome/components/spi/__init__.py +45 -36
  530. esphome/components/spi/spi.h +1 -0
  531. esphome/components/spi/spi_esp_idf.cpp +13 -5
  532. esphome/components/sprinkler/__init__.py +4 -5
  533. esphome/components/sps30/sensor.py +8 -8
  534. esphome/components/ssd1306_i2c/display.py +2 -2
  535. esphome/components/ssd1322_base/__init__.py +2 -2
  536. esphome/components/ssd1325_base/__init__.py +2 -2
  537. esphome/components/ssd1327_base/__init__.py +2 -2
  538. esphome/components/ssd1327_i2c/display.py +1 -1
  539. esphome/components/ssd1331_base/__init__.py +2 -2
  540. esphome/components/ssd1351_base/__init__.py +2 -2
  541. esphome/components/st7567_base/__init__.py +4 -4
  542. esphome/components/st7567_i2c/display.py +1 -1
  543. esphome/components/st7920/display.py +2 -2
  544. esphome/components/statsd/__init__.py +3 -3
  545. esphome/components/status/binary_sensor.py +2 -5
  546. esphome/components/status_led/__init__.py +1 -1
  547. esphome/components/status_led/light/__init__.py +2 -1
  548. esphome/components/stepper/__init__.py +2 -2
  549. esphome/components/sts3x/sensor.py +1 -1
  550. esphome/components/substitutions/__init__.py +2 -2
  551. esphome/components/sun/__init__.py +4 -4
  552. esphome/components/sun/sensor/__init__.py +4 -7
  553. esphome/components/sun/text_sensor/__init__.py +5 -4
  554. esphome/components/sun_gtil2/__init__.py +1 -1
  555. esphome/components/sun_gtil2/sensor.py +7 -6
  556. esphome/components/sun_gtil2/text_sensor.py +3 -2
  557. esphome/components/sx1509/__init__.py +5 -5
  558. esphome/components/sx1509/binary_sensor/__init__.py +3 -3
  559. esphome/components/sx1509/output/__init__.py +4 -3
  560. esphome/components/t6615/sensor.py +1 -1
  561. esphome/components/tca9548a/__init__.py +1 -1
  562. esphome/components/tcl112/climate.py +1 -1
  563. esphome/components/tcs34725/sensor.py +4 -4
  564. esphome/components/tee501/sensor.py +1 -1
  565. esphome/components/teleinfo/__init__.py +1 -1
  566. esphome/components/teleinfo/sensor/__init__.py +1 -7
  567. esphome/components/teleinfo/text_sensor/__init__.py +1 -1
  568. esphome/components/tem3200/sensor.py +1 -2
  569. esphome/components/template/alarm_control_panel/__init__.py +3 -10
  570. esphome/components/template/cover/__init__.py +4 -3
  571. esphome/components/template/datetime/__init__.py +8 -9
  572. esphome/components/template/event/__init__.py +2 -5
  573. esphome/components/template/fan/__init__.py +2 -6
  574. esphome/components/template/lock/__init__.py +3 -2
  575. esphome/components/template/number/__init__.py +3 -2
  576. esphome/components/template/output/__init__.py +4 -3
  577. esphome/components/template/select/__init__.py +3 -2
  578. esphome/components/template/sensor/__init__.py +4 -7
  579. esphome/components/template/switch/__init__.py +3 -2
  580. esphome/components/template/text/__init__.py +4 -3
  581. esphome/components/template/text_sensor/__init__.py +3 -2
  582. esphome/components/template/valve/__init__.py +3 -2
  583. esphome/components/time/real_time_clock.cpp +0 -4
  584. esphome/components/time/real_time_clock.h +4 -3
  585. esphome/components/time_based/cover.py +3 -3
  586. esphome/components/tlc59208f/__init__.py +1 -1
  587. esphome/components/tlc59208f/output.py +2 -1
  588. esphome/components/tlc5947/__init__.py +1 -1
  589. esphome/components/tlc5947/output/__init__.py +2 -1
  590. esphome/components/tlc5971/__init__.py +2 -8
  591. esphome/components/tlc5971/output/__init__.py +2 -1
  592. esphome/components/tm1621/display.py +3 -3
  593. esphome/components/tm1637/binary_sensor.py +1 -1
  594. esphome/components/tm1637/display.py +3 -3
  595. esphome/components/tm1651/__init__.py +4 -4
  596. esphome/components/tmp102/sensor.py +1 -1
  597. esphome/components/tmp1075/sensor.py +2 -2
  598. esphome/components/tmp117/sensor.py +1 -1
  599. esphome/components/tof10120/sensor.py +2 -2
  600. esphome/components/tormatic/cover.py +2 -6
  601. esphome/components/toshiba/climate.py +1 -1
  602. esphome/components/total_daily_energy/sensor.py +4 -4
  603. esphome/components/tsl2561/sensor.py +1 -1
  604. esphome/components/tsl2591/sensor.py +9 -9
  605. esphome/components/tt21100/binary_sensor/__init__.py +2 -2
  606. esphome/components/tt21100/touchscreen/__init__.py +2 -3
  607. esphome/components/ttp229_bsf/__init__.py +2 -2
  608. esphome/components/ttp229_bsf/binary_sensor.py +3 -2
  609. esphome/components/ttp229_lsf/__init__.py +1 -1
  610. esphome/components/ttp229_lsf/binary_sensor.py +3 -2
  611. esphome/components/tuya/__init__.py +3 -5
  612. esphome/components/tuya/binary_sensor/__init__.py +2 -2
  613. esphome/components/tuya/climate/__init__.py +6 -5
  614. esphome/components/tuya/cover/__init__.py +5 -4
  615. esphome/components/tuya/fan/__init__.py +3 -2
  616. esphome/components/tuya/light/__init__.py +9 -8
  617. esphome/components/tuya/number/__init__.py +6 -5
  618. esphome/components/tuya/select/__init__.py +4 -3
  619. esphome/components/tuya/sensor/__init__.py +3 -2
  620. esphome/components/tuya/switch/__init__.py +3 -2
  621. esphome/components/tuya/text_sensor/__init__.py +3 -2
  622. esphome/components/tx20/sensor.py +6 -6
  623. esphome/components/uart/__init__.py +20 -19
  624. esphome/components/uart/button/__init__.py +2 -1
  625. esphome/components/uart/switch/__init__.py +2 -1
  626. esphome/components/ufire_ise/sensor.py +2 -2
  627. esphome/components/uln2003/stepper.py +2 -2
  628. esphome/components/ultrasonic/sensor.py +4 -4
  629. esphome/components/uponor_smatrix/__init__.py +2 -6
  630. esphome/components/uponor_smatrix/climate/__init__.py +3 -3
  631. esphome/components/vbus/__init__.py +1 -1
  632. esphome/components/vbus/binary_sensor/__init__.py +7 -6
  633. esphome/components/vbus/sensor/__init__.py +7 -6
  634. esphome/components/veml3235/sensor.py +1 -1
  635. esphome/components/veml7700/sensor.py +1 -1
  636. esphome/components/version/text_sensor.py +2 -6
  637. esphome/components/vl53l0x/sensor.py +6 -6
  638. esphome/components/web_server_base/__init__.py +2 -2
  639. esphome/components/web_server_idf/__init__.py +1 -1
  640. esphome/components/weikai/__init__.py +1 -1
  641. esphome/components/whirlpool/climate.py +1 -1
  642. esphome/components/whynter/climate.py +1 -1
  643. esphome/components/wireguard/binary_sensor.py +1 -1
  644. esphome/components/wireguard/sensor.py +2 -5
  645. esphome/components/wireguard/text_sensor.py +2 -5
  646. esphome/components/wk2132_i2c/__init__.py +1 -1
  647. esphome/components/wk2132_spi/__init__.py +1 -2
  648. esphome/components/wk2168_i2c/__init__.py +3 -8
  649. esphome/components/wk2168_spi/__init__.py +3 -8
  650. esphome/components/wk2204_i2c/__init__.py +1 -1
  651. esphome/components/wk2204_spi/__init__.py +1 -1
  652. esphome/components/wk2212_i2c/__init__.py +3 -8
  653. esphome/components/wk2212_spi/__init__.py +3 -8
  654. esphome/components/wl_134/text_sensor.py +2 -4
  655. esphome/components/wled/__init__.py +2 -2
  656. esphome/components/x9c/output.py +4 -4
  657. esphome/components/xgzp68xx/sensor.py +5 -5
  658. esphome/components/xiaomi_ble/__init__.py +1 -1
  659. esphome/components/xiaomi_cgd1/sensor.py +3 -3
  660. esphome/components/xiaomi_cgdk2/sensor.py +3 -3
  661. esphome/components/xiaomi_cgg1/sensor.py +2 -2
  662. esphome/components/xiaomi_cgpr1/binary_sensor.py +6 -6
  663. esphome/components/xiaomi_gcls002/sensor.py +7 -7
  664. esphome/components/xiaomi_hhccjcy01/sensor.py +9 -9
  665. esphome/components/xiaomi_hhccjcy10/sensor.py +9 -9
  666. esphome/components/xiaomi_hhccpot002/sensor.py +7 -7
  667. esphome/components/xiaomi_jqjcy01ym/sensor.py +6 -6
  668. esphome/components/xiaomi_lywsd02/sensor.py +4 -4
  669. esphome/components/xiaomi_lywsd02mmc/sensor.py +5 -5
  670. esphome/components/xiaomi_lywsd03mmc/sensor.py +6 -6
  671. esphome/components/xiaomi_lywsdcgq/sensor.py +5 -5
  672. esphome/components/xiaomi_mhoc303/sensor.py +4 -4
  673. esphome/components/xiaomi_mhoc401/sensor.py +6 -6
  674. esphome/components/xiaomi_miscale/sensor.py +6 -6
  675. esphome/components/xiaomi_mjyd02yla/binary_sensor.py +8 -8
  676. esphome/components/xiaomi_mue4094rt/binary_sensor.py +2 -7
  677. esphome/components/xiaomi_rtcgq02lm/__init__.py +2 -3
  678. esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +3 -3
  679. esphome/components/xiaomi_rtcgq02lm/sensor.py +3 -3
  680. esphome/components/xiaomi_wx08zm/binary_sensor.py +2 -3
  681. esphome/components/xl9535/__init__.py +2 -2
  682. esphome/components/yashima/climate.py +1 -1
  683. esphome/components/zhlt01/climate.py +1 -1
  684. esphome/components/zio_ultrasonic/sensor.py +2 -5
  685. esphome/components/zyaura/sensor.py +7 -7
  686. esphome/const.py +3 -1
  687. esphome/core/component.cpp +3 -1
  688. esphome/core/component.h +15 -2
  689. esphome/core/config.py +4 -0
  690. esphome/core/defines.h +21 -0
  691. esphome/core/helpers.cpp +6 -7
  692. esphome/core/scheduler.cpp +34 -67
  693. esphome/core/scheduler.h +7 -17
  694. esphome/dashboard/status/mqtt.py +0 -2
  695. {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/METADATA +45 -44
  696. {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/RECORD +700 -693
  697. {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/WHEEL +1 -1
  698. {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/entry_points.txt +0 -0
  699. {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info/licenses}/LICENSE +0 -0
  700. {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,15 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
4
2
  from esphome.automation import maybe_simple_id
3
+ import esphome.codegen as cg
5
4
  from esphome.components.output import FloatOutput
5
+ import esphome.config_validation as cv
6
6
  from esphome.const import (
7
7
  CONF_ID,
8
8
  CONF_IDLE_LEVEL,
9
+ CONF_LEVEL,
9
10
  CONF_MAX_LEVEL,
10
11
  CONF_MIN_LEVEL,
11
12
  CONF_OUTPUT,
12
- CONF_LEVEL,
13
13
  CONF_RESTORE,
14
14
  CONF_TRANSITION_LENGTH,
15
15
  )
@@ -1,22 +1,21 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, sensirion_common, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import i2c, sensor, sensirion_common
4
-
5
4
  from esphome.const import (
6
- CONF_ID,
7
5
  CONF_FORMALDEHYDE,
8
6
  CONF_HUMIDITY,
7
+ CONF_ID,
9
8
  CONF_TEMPERATURE,
10
9
  DEVICE_CLASS_GAS,
11
10
  DEVICE_CLASS_HUMIDITY,
12
11
  DEVICE_CLASS_TEMPERATURE,
13
12
  ICON_RADIATOR,
14
- ICON_WATER_PERCENT,
15
13
  ICON_THERMOMETER,
14
+ ICON_WATER_PERCENT,
16
15
  STATE_CLASS_MEASUREMENT,
16
+ UNIT_CELSIUS,
17
17
  UNIT_PARTS_PER_BILLION,
18
18
  UNIT_PERCENT,
19
- UNIT_CELSIUS,
20
19
  )
21
20
 
22
21
  CODEOWNERS = ["@ghsensdev"]
@@ -1,13 +1,13 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, sensirion_common, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import i2c, sensor, sensirion_common
4
4
  from esphome.const import (
5
5
  CONF_COMPENSATION,
6
6
  CONF_ID,
7
7
  CONF_STORE_BASELINE,
8
8
  CONF_TEMPERATURE_SOURCE,
9
- ICON_RADIATOR,
10
9
  DEVICE_CLASS_AQI,
10
+ ICON_RADIATOR,
11
11
  STATE_CLASS_MEASUREMENT,
12
12
  )
13
13
 
@@ -1,32 +1,32 @@
1
- from pathlib import Path
2
1
  import hashlib
2
+ from pathlib import Path
3
3
  import re
4
- import requests
5
4
 
5
+ import requests
6
6
 
7
- import esphome.codegen as cg
8
- import esphome.config_validation as cv
9
7
  from esphome import pins
8
+ import esphome.codegen as cg
10
9
  from esphome.components import light, sensor, uart
10
+ import esphome.config_validation as cv
11
11
  from esphome.const import (
12
- CONF_OUTPUT_ID,
12
+ CONF_CURRENT,
13
13
  CONF_GAMMA_CORRECT,
14
+ CONF_MAX_BRIGHTNESS,
15
+ CONF_MIN_BRIGHTNESS,
16
+ CONF_OUTPUT_ID,
14
17
  CONF_POWER,
15
- CONF_VOLTAGE,
16
- CONF_CURRENT,
17
- CONF_VERSION,
18
- CONF_URL,
19
18
  CONF_UPDATE_INTERVAL,
20
- UNIT_VOLT,
21
- UNIT_AMPERE,
22
- UNIT_WATT,
19
+ CONF_URL,
20
+ CONF_VERSION,
21
+ CONF_VOLTAGE,
22
+ DEVICE_CLASS_CURRENT,
23
23
  DEVICE_CLASS_POWER,
24
24
  DEVICE_CLASS_VOLTAGE,
25
- DEVICE_CLASS_CURRENT,
26
- CONF_MIN_BRIGHTNESS,
27
- CONF_MAX_BRIGHTNESS,
25
+ UNIT_AMPERE,
26
+ UNIT_VOLT,
27
+ UNIT_WATT,
28
28
  )
29
- from esphome.core import HexInt, CORE
29
+ from esphome.core import CORE, HexInt
30
30
 
31
31
  DOMAIN = "shelly_dimmer"
32
32
  AUTO_LOAD = ["sensor"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, sensirion_common, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import i2c, sensor, sensirion_common
4
4
  from esphome.const import (
5
5
  CONF_HUMIDITY,
6
6
  CONF_ID,
@@ -1,17 +1,17 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, sensirion_common, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import i2c, sensor, sensirion_common
4
4
  from esphome.const import (
5
+ CONF_HUMIDITY,
5
6
  CONF_ID,
6
7
  CONF_TEMPERATURE,
7
- CONF_HUMIDITY,
8
+ DEVICE_CLASS_HUMIDITY,
9
+ DEVICE_CLASS_TEMPERATURE,
10
+ ICON_THERMOMETER,
11
+ ICON_WATER_PERCENT,
8
12
  STATE_CLASS_MEASUREMENT,
9
13
  UNIT_CELSIUS,
10
14
  UNIT_PERCENT,
11
- ICON_THERMOMETER,
12
- ICON_WATER_PERCENT,
13
- DEVICE_CLASS_TEMPERATURE,
14
- DEVICE_CLASS_HUMIDITY,
15
15
  )
16
16
 
17
17
  CODEOWNERS = ["@sjtrny"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, sensirion_common, sensor
2
3
  import esphome.config_validation as cv
3
- from esphome.components import i2c, sensor, sensirion_common
4
4
  from esphome.const import (
5
5
  CONF_HUMIDITY,
6
6
  CONF_ID,
@@ -1,11 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import button
4
- from esphome.const import (
5
- CONF_ID,
6
- ENTITY_CATEGORY_CONFIG,
7
- ICON_POWER,
8
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_ID, ENTITY_CATEGORY_CONFIG, ICON_POWER
9
5
 
10
6
  shutdown_ns = cg.esphome_ns.namespace("shutdown")
11
7
  ShutdownButton = shutdown_ns.class_("ShutdownButton", button.Button, cg.Component)
@@ -1,10 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import switch
4
- from esphome.const import (
5
- ENTITY_CATEGORY_CONFIG,
6
- ICON_POWER,
7
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import ENTITY_CATEGORY_CONFIG, ICON_POWER
8
5
 
9
6
  shutdown_ns = cg.esphome_ns.namespace("shutdown")
10
7
  ShutdownSwitch = shutdown_ns.class_("ShutdownSwitch", switch.Switch, cg.Component)
@@ -1,13 +1,8 @@
1
1
  from esphome import automation, pins
2
+ import esphome.codegen as cg
2
3
  from esphome.components import output
3
4
  import esphome.config_validation as cv
4
- import esphome.codegen as cg
5
- from esphome.const import (
6
- CONF_ID,
7
- CONF_PIN,
8
- CONF_TURN_ON_ACTION,
9
- CONF_TURN_OFF_ACTION,
10
- )
5
+ from esphome.const import CONF_ID, CONF_PIN, CONF_TURN_OFF_ACTION, CONF_TURN_ON_ACTION
11
6
 
12
7
  DEPENDENCIES = []
13
8
 
@@ -1,12 +1,8 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
4
- from esphome.const import (
5
- CONF_ID,
6
- CONF_MESSAGE,
7
- CONF_TRIGGER_ID,
8
- )
2
+ import esphome.codegen as cg
9
3
  from esphome.components import uart
4
+ import esphome.config_validation as cv
5
+ from esphome.const import CONF_ID, CONF_MESSAGE, CONF_TRIGGER_ID
10
6
 
11
7
  DEPENDENCIES = ["uart"]
12
8
  CODEOWNERS = ["@glmnet"]
@@ -1,10 +1,8 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import binary_sensor
4
- from esphome.const import (
5
- DEVICE_CLASS_CONNECTIVITY,
6
- ENTITY_CATEGORY_DIAGNOSTIC,
7
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import DEVICE_CLASS_CONNECTIVITY, ENTITY_CATEGORY_DIAGNOSTIC
5
+
8
6
  from . import CONF_SIM800L_ID, Sim800LComponent
9
7
 
10
8
  DEPENDENCIES = ["sim800l"]
@@ -1,12 +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
  DEVICE_CLASS_SIGNAL_STRENGTH,
6
6
  ENTITY_CATEGORY_DIAGNOSTIC,
7
7
  STATE_CLASS_MEASUREMENT,
8
8
  UNIT_DECIBEL_MILLIWATT,
9
9
  )
10
+
10
11
  from . import CONF_SIM800L_ID, Sim800LComponent
11
12
 
12
13
  DEPENDENCIES = ["sim800l"]
@@ -1,14 +1,13 @@
1
- from esphome import pins, core
1
+ from esphome import automation, core, pins
2
+ import esphome.codegen as cg
2
3
  from esphome.components import output
3
4
  import esphome.config_validation as cv
4
- import esphome.codegen as cg
5
- from esphome import automation
6
5
  from esphome.const import (
7
6
  CONF_ID,
8
- CONF_PIN,
9
7
  CONF_PERIOD,
10
- CONF_TURN_ON_ACTION,
8
+ CONF_PIN,
11
9
  CONF_TURN_OFF_ACTION,
10
+ CONF_TURN_ON_ACTION,
12
11
  )
13
12
 
14
13
  slow_pwm_ns = cg.esphome_ns.namespace("slow_pwm")
@@ -1,11 +1,7 @@
1
+ from esphome import pins
1
2
  import esphome.codegen as cg
2
3
  import esphome.config_validation as cv
3
- from esphome import pins
4
- from esphome.const import (
5
- CONF_CLOCK_PIN,
6
- CONF_DATA_PIN,
7
- CONF_ID,
8
- )
4
+ from esphome.const import CONF_CLOCK_PIN, CONF_DATA_PIN, CONF_ID
9
5
 
10
6
  CODEOWNERS = ["@Cossid"]
11
7
  MULTI_CONF = True
@@ -1,6 +1,6 @@
1
+ from esphome import pins
1
2
  import esphome.codegen as cg
2
3
  import esphome.config_validation as cv
3
- from esphome import pins
4
4
  from esphome.const import (
5
5
  CONF_CLOCK_PIN,
6
6
  CONF_DATA_PIN,
@@ -1,7 +1,8 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_CHANNEL, CONF_ID
5
+
5
6
  from . import SM16716
6
7
 
7
8
  DEPENDENCIES = ["sm16716"]
@@ -1,11 +1,7 @@
1
+ from esphome import pins
1
2
  import esphome.codegen as cg
2
3
  import esphome.config_validation as cv
3
- from esphome import pins
4
- from esphome.const import (
5
- CONF_CLOCK_PIN,
6
- CONF_DATA_PIN,
7
- CONF_ID,
8
- )
4
+ from esphome.const import CONF_CLOCK_PIN, CONF_DATA_PIN, CONF_ID
9
5
 
10
6
  AUTO_LOAD = ["output"]
11
7
  CODEOWNERS = ["@BoukeHaarsma23", "@matika77", "@dd32"]
@@ -1,7 +1,8 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_CHANNEL, CONF_ID
5
+
5
6
  from . import SM2135
6
7
 
7
8
  DEPENDENCIES = ["sm2135"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import sm10bit_base
3
+ import esphome.config_validation as cv
4
4
 
5
5
  AUTO_LOAD = ["sm10bit_base", "output"]
6
6
  CODEOWNERS = ["@Cossid"]
@@ -1,7 +1,8 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_CHANNEL, CONF_ID
5
+
5
6
  from . import SM2235
6
7
 
7
8
  DEPENDENCIES = ["sm2235"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import sm10bit_base
3
+ import esphome.config_validation as cv
4
4
 
5
5
  AUTO_LOAD = ["sm10bit_base", "output"]
6
6
  CODEOWNERS = ["@Cossid"]
@@ -1,7 +1,8 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_CHANNEL, CONF_ID
5
+
5
6
  from . import SM2335
6
7
 
7
8
  DEPENDENCIES = ["sm2335"]
@@ -1,30 +1,30 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import sensor, uart
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import (
5
- CONF_ID,
6
5
  CONF_CO2,
7
6
  CONF_FORMALDEHYDE,
8
- CONF_TVOC,
7
+ CONF_HUMIDITY,
8
+ CONF_ID,
9
9
  CONF_PM_2_5,
10
10
  CONF_PM_10_0,
11
11
  CONF_TEMPERATURE,
12
- CONF_HUMIDITY,
12
+ CONF_TVOC,
13
13
  DEVICE_CLASS_CARBON_DIOXIDE,
14
- DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS,
15
- DEVICE_CLASS_PM25,
14
+ DEVICE_CLASS_HUMIDITY,
16
15
  DEVICE_CLASS_PM10,
16
+ DEVICE_CLASS_PM25,
17
17
  DEVICE_CLASS_TEMPERATURE,
18
- DEVICE_CLASS_HUMIDITY,
18
+ DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS,
19
+ ICON_CHEMICAL_WEAPON,
20
+ ICON_FLASK,
21
+ ICON_GRAIN,
22
+ ICON_MOLECULE_CO2,
19
23
  STATE_CLASS_MEASUREMENT,
20
- UNIT_PARTS_PER_MILLION,
21
- UNIT_MICROGRAMS_PER_CUBIC_METER,
22
24
  UNIT_CELSIUS,
25
+ UNIT_MICROGRAMS_PER_CUBIC_METER,
26
+ UNIT_PARTS_PER_MILLION,
23
27
  UNIT_PERCENT,
24
- ICON_MOLECULE_CO2,
25
- ICON_FLASK,
26
- ICON_CHEMICAL_WEAPON,
27
- ICON_GRAIN,
28
28
  )
29
29
 
30
30
  DEPENDENCIES = ["uart"]
@@ -2,8 +2,8 @@ import re
2
2
 
3
3
  from esphome import automation
4
4
  import esphome.codegen as cg
5
- import esphome.config_validation as cv
6
5
  from esphome.components import uart
6
+ import esphome.config_validation as cv
7
7
  from esphome.const import CONF_ID, CONF_TRIGGER_ID
8
8
 
9
9
  CODEOWNERS = ["@alengwenus"]
@@ -1,6 +1,6 @@
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 CONF_ID
5
5
 
6
6
  from .. import CONF_OBIS_CODE, CONF_SERVER_ID, CONF_SML_ID, Sml, obis_code, sml_ns
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import text_sensor
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_FORMAT, CONF_ID
5
5
 
6
6
  from .. import CONF_OBIS_CODE, CONF_SERVER_ID, CONF_SML_ID, Sml, obis_code, sml_ns
@@ -1,20 +1,19 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import sensor, uart
4
-
3
+ import esphome.config_validation as cv
5
4
  from esphome.const import (
6
- CONF_ID,
7
5
  CONF_COUNTS,
8
6
  CONF_DIELECTRIC_CONSTANT,
9
- CONF_TEMPERATURE,
7
+ CONF_ID,
10
8
  CONF_MOISTURE,
9
+ CONF_TEMPERATURE,
11
10
  CONF_VOLTAGE,
12
- ICON_WATER_PERCENT,
13
11
  DEVICE_CLASS_TEMPERATURE,
14
12
  DEVICE_CLASS_VOLTAGE,
13
+ ICON_WATER_PERCENT,
15
14
  STATE_CLASS_MEASUREMENT,
16
- UNIT_EMPTY,
17
15
  UNIT_CELSIUS,
16
+ UNIT_EMPTY,
18
17
  UNIT_PERCENT,
19
18
  UNIT_VOLT,
20
19
  )
@@ -1,14 +1,14 @@
1
+ from esphome import pins
1
2
  import esphome.codegen as cg
2
3
  import esphome.config_validation as cv
3
- from esphome import pins
4
4
  from esphome.const import (
5
+ CONF_CLOCK_PIN,
6
+ CONF_DATA_PIN,
5
7
  CONF_ID,
8
+ CONF_INPUT,
9
+ CONF_INVERTED,
6
10
  CONF_MODE,
7
11
  CONF_NUMBER,
8
- CONF_INVERTED,
9
- CONF_DATA_PIN,
10
- CONF_CLOCK_PIN,
11
- CONF_INPUT,
12
12
  )
13
13
 
14
14
  CODEOWNERS = ["@jesserockz"]
@@ -1,13 +1,13 @@
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 spi
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
+ CONF_CLOCK_PIN,
7
+ CONF_DATA_PIN,
6
8
  CONF_ID,
7
- CONF_NUMBER,
8
9
  CONF_INVERTED,
9
- CONF_DATA_PIN,
10
- CONF_CLOCK_PIN,
10
+ CONF_NUMBER,
11
11
  CONF_OE_PIN,
12
12
  CONF_OUTPUT,
13
13
  CONF_TYPE,
@@ -1,5 +1,5 @@
1
- import esphome.config_validation as cv
2
1
  import esphome.codegen as cg
2
+ import esphome.config_validation as cv
3
3
 
4
4
  CODEOWNERS = ["@esphome/core"]
5
5
 
@@ -1,11 +1,7 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import light, uart
2
3
  import esphome.config_validation as cv
3
- from esphome.components import uart, light
4
- from esphome.const import (
5
- CONF_OUTPUT_ID,
6
- CONF_MIN_VALUE,
7
- CONF_MAX_VALUE,
8
- )
4
+ from esphome.const import CONF_MAX_VALUE, CONF_MIN_VALUE, CONF_OUTPUT_ID
9
5
 
10
6
  CONF_USE_RM433_REMOTE = "use_rm433_remote"
11
7
 
@@ -100,7 +100,7 @@ void SpeakerMediaPlayer::setup() {
100
100
 
101
101
  if (!this->single_pipeline_()) {
102
102
  this->media_pipeline_ = make_unique<AudioPipeline>(this->media_speaker_, this->buffer_size_,
103
- this->task_stack_in_psram_, "ann", MEDIA_PIPELINE_TASK_PRIORITY);
103
+ this->task_stack_in_psram_, "med", MEDIA_PIPELINE_TASK_PRIORITY);
104
104
 
105
105
  if (this->media_pipeline_ == nullptr) {
106
106
  ESP_LOGE(TAG, "Failed to create media pipeline");
@@ -170,12 +170,28 @@ void SpeakerMediaPlayer::watch_media_commands_() {
170
170
  // Ensure the loaded next item doesn't start playing, clear the queue, start the file, and unpause
171
171
  this->cancel_timeout("next_media");
172
172
  this->media_playlist_.clear();
173
- if (media_command.file.has_value()) {
174
- this->media_pipeline_->start_file(playlist_item.file.value());
175
- } else if (media_command.url.has_value()) {
176
- this->media_pipeline_->start_url(playlist_item.url.value());
173
+ if (this->is_paused_) {
174
+ // If paused, stop the media pipeline and unpause it after confirming its stopped. This avoids playing a
175
+ // short segment of the paused file before starting the new one.
176
+ this->media_pipeline_->stop();
177
+ this->set_retry("unpause_med", 50, 3, [this](const uint8_t remaining_attempts) {
178
+ if (this->media_pipeline_state_ == AudioPipelineState::STOPPED) {
179
+ this->media_pipeline_->set_pause_state(false);
180
+ this->is_paused_ = false;
181
+ return RetryResult::DONE;
182
+ }
183
+ return RetryResult::RETRY;
184
+ });
185
+ } else {
186
+ // Not paused, just directly start the file
187
+ if (media_command.file.has_value()) {
188
+ this->media_pipeline_->start_file(playlist_item.file.value());
189
+ } else if (media_command.url.has_value()) {
190
+ this->media_pipeline_->start_url(playlist_item.url.value());
191
+ }
192
+ this->media_pipeline_->set_pause_state(false);
193
+ this->is_paused_ = false;
177
194
  }
178
- this->media_pipeline_->set_pause_state(false);
179
195
  }
180
196
  this->media_playlist_.push_back(playlist_item);
181
197
  }
@@ -203,19 +219,37 @@ void SpeakerMediaPlayer::watch_media_commands_() {
203
219
  this->is_paused_ = true;
204
220
  break;
205
221
  case media_player::MEDIA_PLAYER_COMMAND_STOP:
222
+ // Pipelines do not stop immediately after calling the stop command, so confirm its stopped before unpausing.
223
+ // This avoids an audible short segment playing after receiving the stop command in a paused state.
206
224
  if (this->single_pipeline_() || (media_command.announce.has_value() && media_command.announce.value())) {
207
225
  if (this->announcement_pipeline_ != nullptr) {
208
226
  this->cancel_timeout("next_ann");
209
227
  this->announcement_playlist_.clear();
210
228
  this->announcement_pipeline_->stop();
229
+ this->set_retry("unpause_ann", 50, 3, [this](const uint8_t remaining_attempts) {
230
+ if (this->announcement_pipeline_state_ == AudioPipelineState::STOPPED) {
231
+ this->announcement_pipeline_->set_pause_state(false);
232
+ return RetryResult::DONE;
233
+ }
234
+ return RetryResult::RETRY;
235
+ });
211
236
  }
212
237
  } else {
213
238
  if (this->media_pipeline_ != nullptr) {
214
239
  this->cancel_timeout("next_media");
215
240
  this->media_playlist_.clear();
216
241
  this->media_pipeline_->stop();
242
+ this->set_retry("unpause_med", 50, 3, [this](const uint8_t remaining_attempts) {
243
+ if (this->media_pipeline_state_ == AudioPipelineState::STOPPED) {
244
+ this->media_pipeline_->set_pause_state(false);
245
+ this->is_paused_ = false;
246
+ return RetryResult::DONE;
247
+ }
248
+ return RetryResult::RETRY;
249
+ });
217
250
  }
218
251
  }
252
+
219
253
  break;
220
254
  case media_player::MEDIA_PLAYER_COMMAND_TOGGLE:
221
255
  if (this->media_pipeline_ != nullptr) {
@@ -332,11 +366,11 @@ void SpeakerMediaPlayer::loop() {
332
366
  }
333
367
 
334
368
  if (timeout_ms > 0) {
335
- // Pause pipeline internally to facilitiate delay between items
369
+ // Pause pipeline internally to facilitate the delay between items
336
370
  this->announcement_pipeline_->set_pause_state(true);
337
- // Internally unpause the pipeline after the delay between playlist items
338
- this->set_timeout("next_ann", timeout_ms,
339
- [this]() { this->announcement_pipeline_->set_pause_state(this->is_paused_); });
371
+ // Internally unpause the pipeline after the delay between playlist items. Announcements do not follow the
372
+ // media player's pause state.
373
+ this->set_timeout("next_ann", timeout_ms, [this]() { this->announcement_pipeline_->set_pause_state(false); });
340
374
  }
341
375
  }
342
376
  } else {
@@ -372,9 +406,10 @@ void SpeakerMediaPlayer::loop() {
372
406
  }
373
407
 
374
408
  if (timeout_ms > 0) {
375
- // Pause pipeline internally to facilitiate delay between items
409
+ // Pause pipeline internally to facilitate the delay between items
376
410
  this->media_pipeline_->set_pause_state(true);
377
- // Internally unpause the pipeline after the delay between playlist items
411
+ // Internally unpause the pipeline after the delay between playlist items, if the media player state is
412
+ // not paused.
378
413
  this->set_timeout("next_media", timeout_ms,
379
414
  [this]() { this->media_pipeline_->set_pause_state(this->is_paused_); });
380
415
  }
@@ -1,13 +1,13 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import fan, output
4
3
  from esphome.components.fan import validate_preset_modes
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
- CONF_PRESET_MODES,
7
6
  CONF_DIRECTION_OUTPUT,
8
7
  CONF_OSCILLATION_OUTPUT,
9
8
  CONF_OUTPUT,
10
9
  CONF_OUTPUT_ID,
10
+ CONF_PRESET_MODES,
11
11
  CONF_SPEED,
12
12
  CONF_SPEED_COUNT,
13
13
  )