esphome 2025.3.3__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 (695) 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/dps310/sensor.py +3 -3
  141. esphome/components/ds1307/time.py +2 -3
  142. esphome/components/dsmr/__init__.py +3 -7
  143. esphome/components/dsmr/sensor.py +5 -4
  144. esphome/components/dsmr/text_sensor.py +3 -2
  145. esphome/components/duty_cycle/sensor.py +3 -8
  146. esphome/components/duty_time/sensor.py +7 -7
  147. esphome/components/e131/__init__.py +3 -3
  148. esphome/components/ee895/sensor.py +5 -5
  149. esphome/components/ektf2232/touchscreen/__init__.py +2 -3
  150. esphome/components/emc2101/__init__.py +1 -1
  151. esphome/components/emc2101/output/__init__.py +3 -2
  152. esphome/components/emc2101/sensor/__init__.py +4 -3
  153. esphome/components/emmeti/climate.py +1 -1
  154. esphome/components/endstop/cover.py +3 -3
  155. esphome/components/ens160_base/__init__.py +1 -1
  156. esphome/components/ens160_i2c/sensor.py +2 -1
  157. esphome/components/ens160_spi/sensor.py +2 -1
  158. esphome/components/ens210/sensor.py +1 -1
  159. esphome/components/esp32/__init__.py +10 -0
  160. esphome/components/esp32_ble_tracker/__init__.py +135 -51
  161. esphome/components/esp32_camera/__init__.py +7 -8
  162. esphome/components/esp32_camera_web_server/__init__.py +2 -2
  163. esphome/components/esp32_can/canbus.py +21 -0
  164. esphome/components/esp32_can/esp32_can.cpp +1 -1
  165. esphome/components/esp32_can/esp32_can.h +4 -0
  166. esphome/components/esp32_dac/output.py +2 -2
  167. esphome/components/esp32_hall/sensor.py +2 -6
  168. esphome/components/esp32_touch/__init__.py +7 -7
  169. esphome/components/esp32_touch/binary_sensor.py +4 -7
  170. esphome/components/esp8266_pwm/output.py +3 -8
  171. esphome/components/ethernet/__init__.py +1 -0
  172. esphome/components/ethernet/ethernet_component.cpp +1 -1
  173. esphome/components/ethernet_info/ethernet_info_text_sensor.h +1 -0
  174. esphome/components/exposure_notifications/__init__.py +2 -2
  175. esphome/components/external_components/__init__.py +1 -1
  176. esphome/components/ezo/sensor.py +2 -2
  177. esphome/components/ezo_pmp/__init__.py +4 -4
  178. esphome/components/ezo_pmp/binary_sensor.py +4 -4
  179. esphome/components/ezo_pmp/sensor.py +4 -5
  180. esphome/components/ezo_pmp/text_sensor.py +2 -6
  181. esphome/components/factory_reset/button/__init__.py +2 -1
  182. esphome/components/factory_reset/switch/__init__.py +3 -2
  183. esphome/components/fastled_base/__init__.py +3 -3
  184. esphome/components/fastled_clockless/light.py +2 -2
  185. esphome/components/fastled_spi/light.py +2 -2
  186. esphome/components/feedback/cover.py +3 -3
  187. esphome/components/fingerprint_grow/__init__.py +5 -6
  188. esphome/components/fingerprint_grow/binary_sensor.py +2 -1
  189. esphome/components/fingerprint_grow/sensor.py +2 -1
  190. esphome/components/fs3000/sensor.py +2 -6
  191. esphome/components/ft5x06/touchscreen/__init__.py +2 -2
  192. esphome/components/ft63x6/touchscreen.py +2 -3
  193. esphome/components/fujitsu_general/climate.py +1 -1
  194. esphome/components/gcja5/sensor.py +4 -4
  195. esphome/components/gdk101/__init__.py +1 -1
  196. esphome/components/gdk101/binary_sensor.py +2 -1
  197. esphome/components/gdk101/sensor.py +5 -4
  198. esphome/components/globals/__init__.py +1 -2
  199. esphome/components/gp2y1010au0f/sensor.py +3 -3
  200. esphome/components/gp8403/__init__.py +1 -2
  201. esphome/components/gp8403/output/__init__.py +3 -4
  202. esphome/components/gpio/binary_sensor/__init__.py +3 -2
  203. esphome/components/gpio/one_wire/__init__.py +3 -2
  204. esphome/components/gpio/output/__init__.py +3 -2
  205. esphome/components/gpio/switch/__init__.py +3 -2
  206. esphome/components/gps/__init__.py +4 -5
  207. esphome/components/gps/time/__init__.py +3 -2
  208. esphome/components/graph/__init__.py +12 -12
  209. esphome/components/grove_tb6612fng/__init__.py +5 -6
  210. esphome/components/growatt_solar/sensor.py +1 -1
  211. esphome/components/gt911/binary_sensor/__init__.py +2 -2
  212. esphome/components/haier/binary_sensor/__init__.py +4 -10
  213. esphome/components/haier/button/__init__.py +3 -6
  214. esphome/components/haier/sensor/__init__.py +4 -6
  215. esphome/components/haier/switch/__init__.py +4 -7
  216. esphome/components/haier/text_sensor/__init__.py +4 -9
  217. esphome/components/havells_solar/sensor.py +1 -1
  218. esphome/components/hbridge/fan/__init__.py +6 -6
  219. esphome/components/hbridge/light/__init__.py +2 -1
  220. esphome/components/hdc1080/sensor.py +1 -1
  221. esphome/components/he60r/cover.py +2 -6
  222. esphome/components/heatpumpir/climate.py +1 -1
  223. esphome/components/hitachi_ac344/climate.py +1 -1
  224. esphome/components/hitachi_ac424/climate.py +1 -1
  225. esphome/components/hlw8012/sensor.py +6 -6
  226. esphome/components/hm3301/sensor.py +3 -3
  227. esphome/components/hmc5883l/sensor.py +4 -4
  228. esphome/components/homeassistant/time/__init__.py +2 -1
  229. esphome/components/honeywell_hih_i2c/sensor.py +3 -3
  230. esphome/components/honeywellabp/sensor.py +1 -2
  231. esphome/components/honeywellabp2_i2c/sensor.py +1 -2
  232. esphome/components/host/time/__init__.py +2 -2
  233. esphome/components/hrxl_maxsonar_wr/sensor.py +1 -1
  234. esphome/components/hte501/sensor.py +3 -3
  235. esphome/components/http_request/ota/__init__.py +5 -9
  236. esphome/components/http_request/update/__init__.py +3 -7
  237. esphome/components/htu21d/sensor.py +6 -6
  238. esphome/components/htu31d/sensor.py +1 -1
  239. esphome/components/hx711/sensor.py +3 -8
  240. esphome/components/hydreon_rgxx/binary_sensor.py +3 -7
  241. esphome/components/hydreon_rgxx/sensor.py +4 -4
  242. esphome/components/hyt271/sensor.py +1 -1
  243. esphome/components/i2c_device/__init__.py +1 -1
  244. esphome/components/i2s_audio/media_player/__init__.py +6 -8
  245. esphome/components/iaqcore/sensor.py +2 -2
  246. esphome/components/ina219/sensor.py +2 -2
  247. esphome/components/ina226/sensor.py +4 -4
  248. esphome/components/ina260/sensor.py +4 -4
  249. esphome/components/ina2xx_base/__init__.py +2 -2
  250. esphome/components/ina2xx_i2c/sensor.py +1 -1
  251. esphome/components/ina2xx_spi/sensor.py +1 -1
  252. esphome/components/ina3221/sensor.py +3 -3
  253. esphome/components/inkbird_ibsth1_mini/sensor.py +2 -2
  254. esphome/components/inkplate6/display.py +2 -2
  255. esphome/components/integration/sensor.py +4 -4
  256. esphome/components/internal_temperature/sensor.py +5 -7
  257. esphome/components/interval/__init__.py +1 -1
  258. esphome/components/jsn_sr04t/sensor.py +3 -3
  259. esphome/components/kamstrup_kmp/sensor.py +1 -1
  260. esphome/components/key_collector/__init__.py +2 -2
  261. esphome/components/kmeteriso/sensor.py +2 -2
  262. esphome/components/kuntze/sensor.py +5 -5
  263. esphome/components/lcd_base/__init__.py +2 -2
  264. esphome/components/lcd_gpio/display.py +4 -4
  265. esphome/components/lcd_menu/__init__.py +3 -7
  266. esphome/components/lcd_pcf8574/display.py +1 -1
  267. esphome/components/ld2410/__init__.py +4 -4
  268. esphome/components/ld2410/binary_sensor.py +5 -4
  269. esphome/components/ld2410/button/__init__.py +3 -2
  270. esphome/components/ld2410/number/__init__.py +5 -4
  271. esphome/components/ld2410/select/__init__.py +4 -3
  272. esphome/components/ld2410/sensor.py +6 -5
  273. esphome/components/ld2410/switch/__init__.py +2 -1
  274. esphome/components/ld2410/text_sensor.py +3 -2
  275. esphome/components/ld2420/__init__.py +1 -1
  276. esphome/components/ld2420/binary_sensor/__init__.py +4 -3
  277. esphome/components/ld2420/button/__init__.py +3 -2
  278. esphome/components/ld2420/number/__init__.py +3 -2
  279. esphome/components/ld2420/select/__init__.py +1 -0
  280. esphome/components/ld2420/sensor/__init__.py +3 -2
  281. esphome/components/ld2420/text_sensor/__init__.py +2 -6
  282. esphome/components/ld2450/__init__.py +2 -5
  283. esphome/components/ledc/output.py +3 -3
  284. esphome/components/libretiny/text_sensor.py +1 -1
  285. esphome/components/libretiny_pwm/output.py +3 -7
  286. esphome/components/lightwaverf/__init__.py +6 -8
  287. esphome/components/lilygo_t5_47/touchscreen/__init__.py +2 -3
  288. esphome/components/ltr390/sensor.py +1 -1
  289. esphome/components/ltr501/sensor.py +2 -2
  290. esphome/components/ltr_als_ps/sensor.py +2 -2
  291. esphome/components/lvgl/__init__.py +9 -12
  292. esphome/components/lvgl/automation.py +1 -1
  293. esphome/components/lvgl/defines.py +5 -2
  294. esphome/components/lvgl/lv_validation.py +17 -9
  295. esphome/components/lvgl/lvcode.py +9 -8
  296. esphome/components/lvgl/lvgl_esphome.h +19 -0
  297. esphome/components/lvgl/schemas.py +67 -18
  298. esphome/components/lvgl/styles.py +42 -11
  299. esphome/components/lvgl/trigger.py +10 -1
  300. esphome/components/lvgl/widgets/__init__.py +1 -2
  301. esphome/components/lvgl/widgets/canvas.py +403 -0
  302. esphome/components/lvgl/widgets/line.py +22 -32
  303. esphome/components/m5stack_8angle/__init__.py +1 -2
  304. esphome/components/m5stack_8angle/binary_sensor/__init__.py +2 -3
  305. esphome/components/m5stack_8angle/light/__init__.py +2 -4
  306. esphome/components/m5stack_8angle/sensor/__init__.py +2 -4
  307. esphome/components/matrix_keypad/binary_sensor/__init__.py +4 -3
  308. esphome/components/max31855/sensor.py +1 -1
  309. esphome/components/max31865/sensor.py +1 -1
  310. esphome/components/max44009/sensor.py +1 -1
  311. esphome/components/max6675/sensor.py +1 -1
  312. esphome/components/max6956/__init__.py +5 -5
  313. esphome/components/max6956/output/__init__.py +4 -3
  314. esphome/components/max7219/display.py +1 -1
  315. esphome/components/max7219digit/display.py +1 -1
  316. esphome/components/max9611/sensor.py +10 -10
  317. esphome/components/mcp23008/__init__.py +1 -1
  318. esphome/components/mcp23016/__init__.py +4 -4
  319. esphome/components/mcp23017/__init__.py +1 -1
  320. esphome/components/mcp23s08/__init__.py +1 -1
  321. esphome/components/mcp23s17/__init__.py +1 -1
  322. esphome/components/mcp23xxx_base/__init__.py +4 -4
  323. esphome/components/mcp2515/canbus.py +2 -2
  324. esphome/components/mcp3008/__init__.py +1 -1
  325. esphome/components/mcp3008/sensor/__init__.py +4 -4
  326. esphome/components/mcp3204/__init__.py +1 -1
  327. esphome/components/mcp3204/sensor/__init__.py +3 -2
  328. esphome/components/mcp4461/__init__.py +42 -0
  329. esphome/components/mcp4461/mcp4461.cpp +618 -0
  330. esphome/components/mcp4461/mcp4461.h +171 -0
  331. esphome/components/mcp4461/output/__init__.py +60 -0
  332. esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
  333. esphome/components/mcp4461/output/mcp4461_output.h +49 -0
  334. esphome/components/mcp4725/output.py +2 -2
  335. esphome/components/mcp4728/__init__.py +1 -1
  336. esphome/components/mcp4728/output/__init__.py +4 -3
  337. esphome/components/mcp47a1/output.py +2 -2
  338. esphome/components/mcp9808/sensor.py +1 -1
  339. esphome/components/mhz19/sensor.py +4 -4
  340. esphome/components/micronova/__init__.py +3 -5
  341. esphome/components/micronova/button/__init__.py +5 -5
  342. esphome/components/micronova/number/__init__.py +6 -10
  343. esphome/components/micronova/sensor/__init__.py +6 -6
  344. esphome/components/micronova/switch/__init__.py +6 -8
  345. esphome/components/micronova/text_sensor/__init__.py +5 -5
  346. esphome/components/microphone/__init__.py +2 -4
  347. esphome/components/midea/climate.py +6 -10
  348. esphome/components/midea_ir/climate.py +1 -1
  349. esphome/components/mitsubishi/climate.py +1 -1
  350. esphome/components/mlx90614/sensor.py +1 -1
  351. esphome/components/mmc5603/sensor.py +4 -4
  352. esphome/components/mmc5983/sensor.py +1 -1
  353. esphome/components/modbus/__init__.py +5 -9
  354. esphome/components/modbus_controller/__init__.py +1 -1
  355. esphome/components/monochromatic/light.py +2 -2
  356. esphome/components/mopeka_ble/__init__.py +1 -1
  357. esphome/components/mopeka_pro_check/sensor.py +12 -12
  358. esphome/components/mopeka_std_check/sensor.py +8 -8
  359. esphome/components/mpl3115a2/sensor.py +1 -1
  360. esphome/components/mpr121/__init__.py +3 -3
  361. esphome/components/mpr121/binary_sensor/__init__.py +5 -4
  362. esphome/components/mpu6050/sensor.py +4 -4
  363. esphome/components/mpu6886/sensor.py +4 -4
  364. esphome/components/mqtt_subscribe/sensor/__init__.py +3 -5
  365. esphome/components/mqtt_subscribe/text_sensor/__init__.py +1 -1
  366. esphome/components/ms5611/sensor.py +2 -2
  367. esphome/components/ms8607/sensor.py +1 -1
  368. esphome/components/my9231/__init__.py +1 -1
  369. esphome/components/my9231/output.py +2 -1
  370. esphome/components/nau7802/nau7802.cpp +0 -4
  371. esphome/components/nau7802/nau7802.h +0 -2
  372. esphome/components/neopixelbus/_methods.py +11 -9
  373. esphome/components/neopixelbus/light.py +11 -18
  374. esphome/components/nextion/binary_sensor/__init__.py +6 -14
  375. esphome/components/nextion/sensor/__init__.py +7 -10
  376. esphome/components/nextion/switch/__init__.py +3 -5
  377. esphome/components/nextion/text_sensor/__init__.py +3 -7
  378. esphome/components/noblex/climate.py +1 -1
  379. esphome/components/ntc/sensor.py +1 -1
  380. esphome/components/opentherm/__init__.py +6 -6
  381. esphome/components/opentherm/input.py +2 -1
  382. esphome/components/opentherm/number/__init__.py +5 -4
  383. esphome/components/opentherm/output/__init__.py +3 -2
  384. esphome/components/opentherm/schema.py +7 -7
  385. esphome/components/opentherm/switch/__init__.py +3 -2
  386. esphome/components/opentherm/validate.py +1 -1
  387. esphome/components/output/__init__.py +2 -3
  388. esphome/components/output/button/__init__.py +3 -2
  389. esphome/components/output/lock/__init__.py +2 -1
  390. esphome/components/output/switch/__init__.py +2 -1
  391. esphome/components/partition/light.py +4 -4
  392. esphome/components/pca6416a/__init__.py +4 -4
  393. esphome/components/pca9554/__init__.py +4 -4
  394. esphome/components/pca9685/__init__.py +2 -2
  395. esphome/components/pca9685/output.py +2 -1
  396. esphome/components/pcf85063/time.py +2 -3
  397. esphome/components/pcf8563/time.py +2 -2
  398. esphome/components/pcf8574/__init__.py +4 -4
  399. esphome/components/pid/climate.py +2 -2
  400. esphome/components/pid/sensor/__init__.py +4 -8
  401. esphome/components/pipsolar/__init__.py +1 -1
  402. esphome/components/pipsolar/binary_sensor/__init__.py +2 -2
  403. esphome/components/pipsolar/output/__init__.py +4 -3
  404. esphome/components/pipsolar/sensor/__init__.py +5 -4
  405. esphome/components/pipsolar/switch/__init__.py +2 -1
  406. esphome/components/pipsolar/text_sensor/__init__.py +2 -1
  407. esphome/components/pm1006/sensor.py +2 -2
  408. esphome/components/pmsa003i/sensor.py +4 -4
  409. esphome/components/pmsx003/sensor.py +10 -11
  410. esphome/components/pmwcs3/sensor.py +5 -5
  411. esphome/components/pn532/__init__.py +3 -3
  412. esphome/components/pn532_i2c/__init__.py +1 -1
  413. esphome/components/pn532_spi/__init__.py +1 -1
  414. esphome/components/pn7150/__init__.py +2 -2
  415. esphome/components/pn7150_i2c/__init__.py +1 -1
  416. esphome/components/pn7160/__init__.py +2 -2
  417. esphome/components/pn7160_i2c/__init__.py +1 -1
  418. esphome/components/pn7160_spi/__init__.py +1 -1
  419. esphome/components/power_supply/__init__.py +1 -1
  420. esphome/components/prometheus/__init__.py +3 -8
  421. esphome/components/psram/__init__.py +75 -11
  422. esphome/components/psram/psram.cpp +18 -7
  423. esphome/components/pulse_counter/sensor.py +4 -4
  424. esphome/components/pulse_meter/sensor.py +3 -3
  425. esphome/components/pulse_width/sensor.py +3 -8
  426. esphome/components/pvvx_mithermometer/display/__init__.py +1 -1
  427. esphome/components/pvvx_mithermometer/sensor.py +3 -3
  428. esphome/components/pylontech/__init__.py +1 -0
  429. esphome/components/pylontech/sensor/__init__.py +8 -13
  430. esphome/components/pylontech/text_sensor/__init__.py +2 -7
  431. esphome/components/pzem004t/sensor.py +3 -3
  432. esphome/components/pzemac/sensor.py +9 -9
  433. esphome/components/pzemdc/sensor.py +6 -6
  434. esphome/components/qmc5883l/sensor.py +5 -5
  435. esphome/components/qmp6988/sensor.py +3 -3
  436. esphome/components/qr_code/__init__.py +1 -1
  437. esphome/components/qspi_dbi/display.py +1 -1
  438. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  439. esphome/components/qspi_dbi/qspi_dbi.h +1 -1
  440. esphome/components/qwiic_pir/binary_sensor.py +2 -5
  441. esphome/components/radon_eye_ble/__init__.py +1 -1
  442. esphome/components/radon_eye_rd200/sensor.py +3 -4
  443. esphome/components/rc522/__init__.py +3 -3
  444. esphome/components/rc522_i2c/__init__.py +1 -1
  445. esphome/components/rc522_spi/__init__.py +1 -1
  446. esphome/components/rdm6300/__init__.py +2 -2
  447. esphome/components/rdm6300/binary_sensor.py +2 -1
  448. esphome/components/resistance/sensor.py +2 -2
  449. esphome/components/restart/button/__init__.py +1 -1
  450. esphome/components/restart/switch/__init__.py +2 -5
  451. esphome/components/rf_bridge/__init__.py +3 -3
  452. esphome/components/rgb/light.py +2 -2
  453. esphome/components/rgbct/light.py +3 -3
  454. esphome/components/rgbw/light.py +2 -2
  455. esphome/components/rgbww/light.py +4 -4
  456. esphome/components/rotary_encoder/sensor.py +8 -8
  457. esphome/components/rp2040_pio/__init__.py +0 -1
  458. esphome/components/rp2040_pio_led_strip/light.py +2 -4
  459. esphome/components/rp2040_pwm/output.py +3 -7
  460. esphome/components/rtttl/__init__.py +6 -6
  461. esphome/components/ruuvi_ble/__init__.py +1 -1
  462. esphome/components/ruuvitag/sensor.py +15 -15
  463. esphome/components/safe_mode/__init__.py +2 -3
  464. esphome/components/safe_mode/button/__init__.py +3 -2
  465. esphome/components/safe_mode/switch/__init__.py +4 -7
  466. esphome/components/scd30/sensor.py +5 -6
  467. esphome/components/scd4x/sensor.py +6 -8
  468. esphome/components/script/__init__.py +2 -2
  469. esphome/components/sdl/display.py +3 -3
  470. esphome/components/sdl/touchscreen/__init__.py +2 -2
  471. esphome/components/sdm_meter/sensor.py +3 -3
  472. esphome/components/sdp3x/sensor.py +1 -2
  473. esphome/components/sds011/sensor.py +4 -4
  474. esphome/components/seeed_mr24hpc1/__init__.py +1 -1
  475. esphome/components/seeed_mr24hpc1/binary_sensor.py +2 -5
  476. esphome/components/seeed_mr24hpc1/button/__init__.py +1 -0
  477. esphome/components/seeed_mr24hpc1/number/__init__.py +2 -4
  478. esphome/components/seeed_mr24hpc1/select/__init__.py +2 -3
  479. esphome/components/seeed_mr24hpc1/sensor.py +1 -0
  480. esphome/components/seeed_mr24hpc1/switch/__init__.py +2 -4
  481. esphome/components/seeed_mr24hpc1/text_sensor.py +1 -0
  482. esphome/components/seeed_mr60bha2/binary_sensor.py +2 -4
  483. esphome/components/seeed_mr60bha2/sensor.py +1 -1
  484. esphome/components/seeed_mr60fda2/button/__init__.py +1 -1
  485. esphome/components/seeed_mr60fda2/select/__init__.py +0 -1
  486. esphome/components/selec_meter/sensor.py +1 -1
  487. esphome/components/sen0321/sensor.py +2 -2
  488. esphome/components/sen21231/sensor.py +1 -1
  489. esphome/components/senseair/sensor.py +3 -3
  490. esphome/components/sensirion_common/__init__.py +0 -2
  491. esphome/components/servo/__init__.py +3 -3
  492. esphome/components/sfa30/sensor.py +4 -5
  493. esphome/components/sgp4x/sensor.py +2 -2
  494. esphome/components/shelly_dimmer/light.py +16 -16
  495. esphome/components/sht3xd/sensor.py +1 -1
  496. esphome/components/sht4x/sensor.py +6 -6
  497. esphome/components/shtcx/sensor.py +1 -1
  498. esphome/components/shutdown/button/__init__.py +2 -6
  499. esphome/components/shutdown/switch/__init__.py +2 -5
  500. esphome/components/sigma_delta_output/output.py +2 -7
  501. esphome/components/sim800l/__init__.py +3 -7
  502. esphome/components/sim800l/binary_sensor.py +3 -5
  503. esphome/components/sim800l/sensor.py +2 -1
  504. esphome/components/slow_pwm/output.py +4 -5
  505. esphome/components/sm10bit_base/__init__.py +2 -6
  506. esphome/components/sm16716/__init__.py +1 -1
  507. esphome/components/sm16716/output.py +2 -1
  508. esphome/components/sm2135/__init__.py +2 -6
  509. esphome/components/sm2135/output.py +2 -1
  510. esphome/components/sm2235/__init__.py +1 -1
  511. esphome/components/sm2235/output.py +2 -1
  512. esphome/components/sm2335/__init__.py +1 -1
  513. esphome/components/sm2335/output.py +2 -1
  514. esphome/components/sm300d2/sensor.py +13 -13
  515. esphome/components/sml/__init__.py +1 -1
  516. esphome/components/sml/sensor/__init__.py +1 -1
  517. esphome/components/sml/text_sensor/__init__.py +1 -1
  518. esphome/components/smt100/sensor.py +5 -6
  519. esphome/components/sn74hc165/__init__.py +5 -5
  520. esphome/components/sn74hc595/__init__.py +5 -5
  521. esphome/components/socket/__init__.py +1 -1
  522. esphome/components/sonoff_d1/light.py +2 -6
  523. esphome/components/speed/fan/__init__.py +2 -2
  524. esphome/components/spi/__init__.py +45 -36
  525. esphome/components/spi/spi.h +1 -0
  526. esphome/components/spi/spi_esp_idf.cpp +13 -5
  527. esphome/components/sprinkler/__init__.py +4 -5
  528. esphome/components/sps30/sensor.py +8 -8
  529. esphome/components/ssd1306_i2c/display.py +2 -2
  530. esphome/components/ssd1322_base/__init__.py +2 -2
  531. esphome/components/ssd1325_base/__init__.py +2 -2
  532. esphome/components/ssd1327_base/__init__.py +2 -2
  533. esphome/components/ssd1327_i2c/display.py +1 -1
  534. esphome/components/ssd1331_base/__init__.py +2 -2
  535. esphome/components/ssd1351_base/__init__.py +2 -2
  536. esphome/components/st7567_base/__init__.py +4 -4
  537. esphome/components/st7567_i2c/display.py +1 -1
  538. esphome/components/st7920/display.py +2 -2
  539. esphome/components/statsd/__init__.py +3 -3
  540. esphome/components/status/binary_sensor.py +2 -5
  541. esphome/components/status_led/__init__.py +1 -1
  542. esphome/components/status_led/light/__init__.py +2 -1
  543. esphome/components/stepper/__init__.py +2 -2
  544. esphome/components/sts3x/sensor.py +1 -1
  545. esphome/components/substitutions/__init__.py +2 -2
  546. esphome/components/sun/__init__.py +4 -4
  547. esphome/components/sun/sensor/__init__.py +4 -7
  548. esphome/components/sun/text_sensor/__init__.py +5 -4
  549. esphome/components/sun_gtil2/__init__.py +1 -1
  550. esphome/components/sun_gtil2/sensor.py +7 -6
  551. esphome/components/sun_gtil2/text_sensor.py +3 -2
  552. esphome/components/sx1509/__init__.py +5 -5
  553. esphome/components/sx1509/binary_sensor/__init__.py +3 -3
  554. esphome/components/sx1509/output/__init__.py +4 -3
  555. esphome/components/t6615/sensor.py +1 -1
  556. esphome/components/tca9548a/__init__.py +1 -1
  557. esphome/components/tcl112/climate.py +1 -1
  558. esphome/components/tcs34725/sensor.py +4 -4
  559. esphome/components/tee501/sensor.py +1 -1
  560. esphome/components/teleinfo/__init__.py +1 -1
  561. esphome/components/teleinfo/sensor/__init__.py +1 -7
  562. esphome/components/teleinfo/text_sensor/__init__.py +1 -1
  563. esphome/components/tem3200/sensor.py +1 -2
  564. esphome/components/template/alarm_control_panel/__init__.py +3 -10
  565. esphome/components/template/cover/__init__.py +4 -3
  566. esphome/components/template/datetime/__init__.py +8 -9
  567. esphome/components/template/event/__init__.py +2 -5
  568. esphome/components/template/fan/__init__.py +2 -6
  569. esphome/components/template/lock/__init__.py +3 -2
  570. esphome/components/template/number/__init__.py +3 -2
  571. esphome/components/template/output/__init__.py +4 -3
  572. esphome/components/template/select/__init__.py +3 -2
  573. esphome/components/template/sensor/__init__.py +4 -7
  574. esphome/components/template/switch/__init__.py +3 -2
  575. esphome/components/template/text/__init__.py +4 -3
  576. esphome/components/template/text_sensor/__init__.py +3 -2
  577. esphome/components/template/valve/__init__.py +3 -2
  578. esphome/components/time/real_time_clock.cpp +0 -4
  579. esphome/components/time/real_time_clock.h +4 -3
  580. esphome/components/time_based/cover.py +3 -3
  581. esphome/components/tlc59208f/__init__.py +1 -1
  582. esphome/components/tlc59208f/output.py +2 -1
  583. esphome/components/tlc5947/__init__.py +1 -1
  584. esphome/components/tlc5947/output/__init__.py +2 -1
  585. esphome/components/tlc5971/__init__.py +2 -8
  586. esphome/components/tlc5971/output/__init__.py +2 -1
  587. esphome/components/tm1621/display.py +3 -3
  588. esphome/components/tm1637/binary_sensor.py +1 -1
  589. esphome/components/tm1637/display.py +3 -3
  590. esphome/components/tm1651/__init__.py +4 -4
  591. esphome/components/tmp102/sensor.py +1 -1
  592. esphome/components/tmp1075/sensor.py +2 -2
  593. esphome/components/tmp117/sensor.py +1 -1
  594. esphome/components/tof10120/sensor.py +2 -2
  595. esphome/components/tormatic/cover.py +2 -6
  596. esphome/components/toshiba/climate.py +1 -1
  597. esphome/components/total_daily_energy/sensor.py +4 -4
  598. esphome/components/tsl2561/sensor.py +1 -1
  599. esphome/components/tsl2591/sensor.py +9 -9
  600. esphome/components/tt21100/binary_sensor/__init__.py +2 -2
  601. esphome/components/tt21100/touchscreen/__init__.py +2 -3
  602. esphome/components/ttp229_bsf/__init__.py +2 -2
  603. esphome/components/ttp229_bsf/binary_sensor.py +3 -2
  604. esphome/components/ttp229_lsf/__init__.py +1 -1
  605. esphome/components/ttp229_lsf/binary_sensor.py +3 -2
  606. esphome/components/tuya/__init__.py +3 -5
  607. esphome/components/tuya/binary_sensor/__init__.py +2 -2
  608. esphome/components/tuya/climate/__init__.py +6 -5
  609. esphome/components/tuya/cover/__init__.py +5 -4
  610. esphome/components/tuya/fan/__init__.py +3 -2
  611. esphome/components/tuya/light/__init__.py +9 -8
  612. esphome/components/tuya/number/__init__.py +6 -5
  613. esphome/components/tuya/select/__init__.py +4 -3
  614. esphome/components/tuya/sensor/__init__.py +3 -2
  615. esphome/components/tuya/switch/__init__.py +3 -2
  616. esphome/components/tuya/text_sensor/__init__.py +3 -2
  617. esphome/components/tx20/sensor.py +6 -6
  618. esphome/components/uart/__init__.py +20 -19
  619. esphome/components/uart/button/__init__.py +2 -1
  620. esphome/components/uart/switch/__init__.py +2 -1
  621. esphome/components/ufire_ise/sensor.py +2 -2
  622. esphome/components/uln2003/stepper.py +2 -2
  623. esphome/components/ultrasonic/sensor.py +4 -4
  624. esphome/components/uponor_smatrix/__init__.py +2 -6
  625. esphome/components/uponor_smatrix/climate/__init__.py +3 -3
  626. esphome/components/vbus/__init__.py +1 -1
  627. esphome/components/vbus/binary_sensor/__init__.py +7 -6
  628. esphome/components/vbus/sensor/__init__.py +7 -6
  629. esphome/components/veml3235/sensor.py +1 -1
  630. esphome/components/veml7700/sensor.py +1 -1
  631. esphome/components/version/text_sensor.py +2 -6
  632. esphome/components/vl53l0x/sensor.py +6 -6
  633. esphome/components/web_server_base/__init__.py +2 -2
  634. esphome/components/web_server_idf/__init__.py +1 -1
  635. esphome/components/weikai/__init__.py +1 -1
  636. esphome/components/whirlpool/climate.py +1 -1
  637. esphome/components/whynter/climate.py +1 -1
  638. esphome/components/wireguard/binary_sensor.py +1 -1
  639. esphome/components/wireguard/sensor.py +2 -5
  640. esphome/components/wireguard/text_sensor.py +2 -5
  641. esphome/components/wk2132_i2c/__init__.py +1 -1
  642. esphome/components/wk2132_spi/__init__.py +1 -2
  643. esphome/components/wk2168_i2c/__init__.py +3 -8
  644. esphome/components/wk2168_spi/__init__.py +3 -8
  645. esphome/components/wk2204_i2c/__init__.py +1 -1
  646. esphome/components/wk2204_spi/__init__.py +1 -1
  647. esphome/components/wk2212_i2c/__init__.py +3 -8
  648. esphome/components/wk2212_spi/__init__.py +3 -8
  649. esphome/components/wl_134/text_sensor.py +2 -4
  650. esphome/components/wled/__init__.py +2 -2
  651. esphome/components/x9c/output.py +4 -4
  652. esphome/components/xgzp68xx/sensor.py +5 -5
  653. esphome/components/xiaomi_ble/__init__.py +1 -1
  654. esphome/components/xiaomi_cgd1/sensor.py +3 -3
  655. esphome/components/xiaomi_cgdk2/sensor.py +3 -3
  656. esphome/components/xiaomi_cgg1/sensor.py +2 -2
  657. esphome/components/xiaomi_cgpr1/binary_sensor.py +6 -6
  658. esphome/components/xiaomi_gcls002/sensor.py +7 -7
  659. esphome/components/xiaomi_hhccjcy01/sensor.py +9 -9
  660. esphome/components/xiaomi_hhccjcy10/sensor.py +9 -9
  661. esphome/components/xiaomi_hhccpot002/sensor.py +7 -7
  662. esphome/components/xiaomi_jqjcy01ym/sensor.py +6 -6
  663. esphome/components/xiaomi_lywsd02/sensor.py +4 -4
  664. esphome/components/xiaomi_lywsd02mmc/sensor.py +5 -5
  665. esphome/components/xiaomi_lywsd03mmc/sensor.py +6 -6
  666. esphome/components/xiaomi_lywsdcgq/sensor.py +5 -5
  667. esphome/components/xiaomi_mhoc303/sensor.py +4 -4
  668. esphome/components/xiaomi_mhoc401/sensor.py +6 -6
  669. esphome/components/xiaomi_miscale/sensor.py +6 -6
  670. esphome/components/xiaomi_mjyd02yla/binary_sensor.py +8 -8
  671. esphome/components/xiaomi_mue4094rt/binary_sensor.py +2 -7
  672. esphome/components/xiaomi_rtcgq02lm/__init__.py +2 -3
  673. esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +3 -3
  674. esphome/components/xiaomi_rtcgq02lm/sensor.py +3 -3
  675. esphome/components/xiaomi_wx08zm/binary_sensor.py +2 -3
  676. esphome/components/xl9535/__init__.py +2 -2
  677. esphome/components/yashima/climate.py +1 -1
  678. esphome/components/zhlt01/climate.py +1 -1
  679. esphome/components/zio_ultrasonic/sensor.py +2 -5
  680. esphome/components/zyaura/sensor.py +7 -7
  681. esphome/const.py +3 -1
  682. esphome/core/component.cpp +3 -1
  683. esphome/core/component.h +15 -2
  684. esphome/core/config.py +4 -0
  685. esphome/core/defines.h +21 -0
  686. esphome/core/helpers.cpp +6 -7
  687. esphome/core/scheduler.cpp +34 -67
  688. esphome/core/scheduler.h +7 -17
  689. esphome/dashboard/status/mqtt.py +0 -2
  690. {esphome-2025.3.3.dist-info → esphome-2025.4.0b1.dist-info}/METADATA +45 -44
  691. {esphome-2025.3.3.dist-info → esphome-2025.4.0b1.dist-info}/RECORD +695 -688
  692. {esphome-2025.3.3.dist-info → esphome-2025.4.0b1.dist-info}/WHEEL +1 -1
  693. {esphome-2025.3.3.dist-info → esphome-2025.4.0b1.dist-info}/entry_points.txt +0 -0
  694. {esphome-2025.3.3.dist-info → esphome-2025.4.0b1.dist-info/licenses}/LICENSE +0 -0
  695. {esphome-2025.3.3.dist-info → esphome-2025.4.0b1.dist-info}/top_level.txt +0 -0
@@ -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
 
@@ -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
  )
@@ -37,6 +37,7 @@ CODEOWNERS = ["@esphome/core", "@clydebarrow"]
37
37
  spi_ns = cg.esphome_ns.namespace("spi")
38
38
  SPIComponent = spi_ns.class_("SPIComponent", cg.Component)
39
39
  QuadSPIComponent = spi_ns.class_("QuadSPIComponent", cg.Component)
40
+ OctalSPIComponent = spi_ns.class_("OctalSPIComponent", cg.Component)
40
41
  SPIDevice = spi_ns.class_("SPIDevice")
41
42
  SPIDataRate = spi_ns.enum("SPIDataRate")
42
43
  SPIMode = spi_ns.enum("SPIMode")
@@ -78,6 +79,13 @@ CONF_INTERFACE = "interface"
78
79
  CONF_INTERFACE_INDEX = "interface_index"
79
80
  TYPE_SINGLE = "single"
80
81
  TYPE_QUAD = "quad"
82
+ TYPE_OCTAL = "octal"
83
+
84
+ TYPE_CLASS = {
85
+ TYPE_SINGLE: SPIComponent,
86
+ TYPE_QUAD: QuadSPIComponent,
87
+ TYPE_OCTAL: OctalSPIComponent,
88
+ }
81
89
 
82
90
  # RP2040 SPI pin assignments are complicated;
83
91
  # refer to GPIO function select table in https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf
@@ -230,7 +238,7 @@ def validate_spi_config(config):
230
238
  ):
231
239
  raise cv.Invalid("Invalid pin selections for hardware SPI interface")
232
240
  if CONF_DATA_PINS in spi and CONF_INTERFACE_INDEX not in spi:
233
- raise cv.Invalid("Quad mode requires a hardware interface")
241
+ raise cv.Invalid("Quad and octal modes requires a hardware interface")
234
242
 
235
243
  return config
236
244
 
@@ -251,7 +259,7 @@ def get_spi_interface(index):
251
259
  return "new SPIClass(HSPI)"
252
260
 
253
261
 
254
- SPI_SCHEMA = cv.All(
262
+ SPI_SINGLE_SCHEMA = cv.All(
255
263
  cv.Schema(
256
264
  {
257
265
  cv.GenerateID(): cv.declare_id(SPIComponent),
@@ -266,7 +274,7 @@ SPI_SCHEMA = cv.All(
266
274
  lower=True,
267
275
  ),
268
276
  cv.Optional(CONF_DATA_PINS): cv.invalid(
269
- "'data_pins' should be used with 'type: quad' only"
277
+ "'data_pins' should be used with 'type: quad or octal' only"
270
278
  ),
271
279
  }
272
280
  ),
@@ -274,38 +282,41 @@ SPI_SCHEMA = cv.All(
274
282
  cv.only_on([PLATFORM_ESP32, PLATFORM_ESP8266, PLATFORM_RP2040]),
275
283
  )
276
284
 
277
- SPI_QUAD_SCHEMA = cv.All(
278
- cv.Schema(
279
- {
280
- cv.GenerateID(): cv.declare_id(QuadSPIComponent),
281
- cv.Required(CONF_CLK_PIN): pins.gpio_output_pin_schema,
282
- cv.Required(CONF_DATA_PINS): cv.All(
283
- cv.ensure_list(pins.internal_gpio_output_pin_number),
284
- cv.Length(min=4, max=4),
285
- ),
286
- cv.Optional(CONF_INTERFACE, default="hardware"): cv.one_of(
287
- *sum(get_hw_interface_list(), ["hardware"]),
288
- lower=True,
289
- ),
290
- cv.Optional(CONF_MISO_PIN): cv.invalid(
291
- "'miso_pin' should not be used with quad SPI"
292
- ),
293
- cv.Optional(CONF_MOSI_PIN): cv.invalid(
294
- "'mosi_pin' should not be used with quad SPI"
295
- ),
296
- }
297
- ),
298
- cv.only_on([PLATFORM_ESP32]),
299
- cv.only_with_esp_idf,
300
- )
285
+
286
+ def spi_mode_schema(mode):
287
+ if mode == TYPE_SINGLE:
288
+ return SPI_SINGLE_SCHEMA
289
+ pin_count = 4 if mode == TYPE_QUAD else 8
290
+ return cv.All(
291
+ cv.Schema(
292
+ {
293
+ cv.GenerateID(): cv.declare_id(TYPE_CLASS[mode]),
294
+ cv.Required(CONF_CLK_PIN): pins.gpio_output_pin_schema,
295
+ cv.Required(CONF_DATA_PINS): cv.All(
296
+ cv.ensure_list(pins.internal_gpio_output_pin_number),
297
+ cv.Length(min=pin_count, max=pin_count),
298
+ ),
299
+ cv.Optional(CONF_INTERFACE, default="hardware"): cv.one_of(
300
+ *sum(get_hw_interface_list(), ["hardware"]),
301
+ lower=True,
302
+ ),
303
+ cv.Optional(CONF_MISO_PIN): cv.invalid(
304
+ f"'miso_pin' should not be used with {mode} SPI"
305
+ ),
306
+ cv.Optional(CONF_MOSI_PIN): cv.invalid(
307
+ f"'mosi_pin' should not be used with {mode} SPI"
308
+ ),
309
+ }
310
+ ),
311
+ cv.only_on([PLATFORM_ESP32]),
312
+ cv.only_with_esp_idf,
313
+ )
314
+
301
315
 
302
316
  CONFIG_SCHEMA = cv.All(
303
317
  cv.ensure_list(
304
318
  cv.typed_schema(
305
- {
306
- TYPE_SINGLE: SPI_SCHEMA,
307
- TYPE_QUAD: SPI_QUAD_SCHEMA,
308
- },
319
+ {k: spi_mode_schema(k) for k in TYPE_CLASS},
309
320
  default_type=TYPE_SINGLE,
310
321
  )
311
322
  ),
@@ -344,19 +355,17 @@ def spi_device_schema(
344
355
  cs_pin_required=True,
345
356
  default_data_rate=cv.UNDEFINED,
346
357
  default_mode=cv.UNDEFINED,
347
- quad=False,
358
+ mode=TYPE_SINGLE,
348
359
  ):
349
360
  """Create a schema for an SPI device.
350
361
  :param cs_pin_required: If true, make the CS_PIN required in the config.
351
362
  :param default_data_rate: Optional data_rate to use as default
352
363
  :param default_mode Optional. The default SPI mode to use.
353
- :param quad If set, will require an SPI component configured as quad data bits.
364
+ :param mode Choose single, quad or octal mode.
354
365
  :return: The SPI device schema, `extend` this in your config schema.
355
366
  """
356
367
  schema = {
357
- cv.GenerateID(CONF_SPI_ID): cv.use_id(
358
- QuadSPIComponent if quad else SPIComponent
359
- ),
368
+ cv.GenerateID(CONF_SPI_ID): cv.use_id(TYPE_CLASS[mode]),
360
369
  cv.Optional(CONF_DATA_RATE, default=default_data_rate): SPI_DATA_RATE_SCHEMA,
361
370
  cv.Optional(CONF_SPI_MODE, default=default_mode): cv.enum(
362
371
  SPI_MODE_OPTIONS, upper=True
@@ -369,6 +369,7 @@ class SPIComponent : public Component {
369
369
  };
370
370
 
371
371
  using QuadSPIComponent = SPIComponent;
372
+ using OctalSPIComponent = SPIComponent;
372
373
  /**
373
374
  * Base class for SPIDevice, un-templated.
374
375
  */
@@ -211,11 +211,19 @@ class SPIBusHw : public SPIBus {
211
211
  buscfg.data1_io_num = data_pins[1];
212
212
  buscfg.data2_io_num = data_pins[2];
213
213
  buscfg.data3_io_num = data_pins[3];
214
- buscfg.data4_io_num = -1;
215
- buscfg.data5_io_num = -1;
216
- buscfg.data6_io_num = -1;
217
- buscfg.data7_io_num = -1;
218
- buscfg.flags |= SPICOMMON_BUSFLAG_QUAD;
214
+ if (data_pins.size() == 8) {
215
+ buscfg.data4_io_num = data_pins[4];
216
+ buscfg.data5_io_num = data_pins[5];
217
+ buscfg.data6_io_num = data_pins[6];
218
+ buscfg.data7_io_num = data_pins[7];
219
+ buscfg.flags |= SPICOMMON_BUSFLAG_OCTAL;
220
+ } else {
221
+ buscfg.data4_io_num = -1;
222
+ buscfg.data5_io_num = -1;
223
+ buscfg.data6_io_num = -1;
224
+ buscfg.data7_io_num = -1;
225
+ buscfg.flags |= SPICOMMON_BUSFLAG_QUAD;
226
+ }
219
227
  }
220
228
  buscfg.max_transfer_sz = MAX_TRANSFER_SIZE;
221
229
  auto err = spi_bus_initialize(channel, &buscfg, SPI_DMA_CH_AUTO);
@@ -1,9 +1,8 @@
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
5
- from esphome.components import number
6
- from esphome.components import switch
3
+ import esphome.codegen as cg
4
+ from esphome.components import number, switch
5
+ import esphome.config_validation as cv
7
6
  from esphome.const import (
8
7
  CONF_ENTITY_CATEGORY,
9
8
  CONF_ID,
@@ -14,12 +13,12 @@ from esphome.const import (
14
13
  CONF_REPEAT,
15
14
  CONF_RESTORE_VALUE,
16
15
  CONF_RUN_DURATION,
16
+ CONF_SET_ACTION,
17
17
  CONF_STEP,
18
18
  CONF_UNIT_OF_MEASUREMENT,
19
19
  ENTITY_CATEGORY_CONFIG,
20
20
  UNIT_MINUTE,
21
21
  UNIT_SECOND,
22
- CONF_SET_ACTION,
23
22
  )
24
23
 
25
24
  AUTO_LOAD = ["number", "switch"]