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,7 +1,7 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import display
4
- from esphome.const import CONF_DIMENSIONS, CONF_POSITION, CONF_DATA
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_DATA, CONF_DIMENSIONS, CONF_POSITION
5
5
 
6
6
  CONF_USER_CHARACTERS = "user_characters"
7
7
 
@@ -1,14 +1,14 @@
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 lcd_base
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
6
  CONF_DATA_PINS,
7
7
  CONF_ENABLE_PIN,
8
- CONF_RS_PIN,
9
- CONF_RW_PIN,
10
8
  CONF_ID,
11
9
  CONF_LAMBDA,
10
+ CONF_RS_PIN,
11
+ CONF_RW_PIN,
12
12
  )
13
13
 
14
14
  AUTO_LOAD = ["lcd_base"]
@@ -1,17 +1,13 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
- from esphome.const import (
4
- CONF_ID,
5
- CONF_DIMENSIONS,
6
- CONF_DISPLAY_ID,
7
- )
8
- from esphome.core.entity_helpers import inherit_property_from
9
2
  from esphome.components import lcd_base
10
3
  from esphome.components.display_menu_base import (
11
4
  DISPLAY_MENU_BASE_SCHEMA,
12
5
  DisplayMenuComponent,
13
6
  display_menu_to_code,
14
7
  )
8
+ import esphome.config_validation as cv
9
+ from esphome.const import CONF_DIMENSIONS, CONF_DISPLAY_ID, CONF_ID
10
+ from esphome.core.entity_helpers import inherit_property_from
15
11
 
16
12
  CODEOWNERS = ["@numo68"]
17
13
 
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.components import i2c, lcd_base
2
3
  import esphome.config_validation as cv
3
- from esphome.components import lcd_base, i2c
4
4
  from esphome.const import CONF_ID, CONF_LAMBDA
5
5
 
6
6
  DEPENDENCIES = ["i2c"]
@@ -1,9 +1,9 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
- from esphome.components import uart
4
- from esphome.const import CONF_ID, CONF_THROTTLE, CONF_TIMEOUT, CONF_PASSWORD
5
1
  from esphome import automation
6
2
  from esphome.automation import maybe_simple_id
3
+ import esphome.codegen as cg
4
+ from esphome.components import uart
5
+ import esphome.config_validation as cv
6
+ from esphome.const import CONF_ID, CONF_PASSWORD, CONF_THROTTLE, CONF_TIMEOUT
7
7
 
8
8
  DEPENDENCIES = ["uart"]
9
9
  CODEOWNERS = ["@sebcaps", "@regevbr"]
@@ -2,16 +2,17 @@ import esphome.codegen as cg
2
2
  from esphome.components import binary_sensor
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import (
5
+ CONF_HAS_MOVING_TARGET,
6
+ CONF_HAS_STILL_TARGET,
7
+ CONF_HAS_TARGET,
5
8
  DEVICE_CLASS_MOTION,
6
9
  DEVICE_CLASS_OCCUPANCY,
7
10
  DEVICE_CLASS_PRESENCE,
8
11
  ENTITY_CATEGORY_DIAGNOSTIC,
9
- ICON_MOTION_SENSOR,
10
12
  ICON_ACCOUNT,
11
- CONF_HAS_TARGET,
12
- CONF_HAS_MOVING_TARGET,
13
- CONF_HAS_STILL_TARGET,
13
+ ICON_MOTION_SENSOR,
14
14
  )
15
+
15
16
  from . import CONF_LD2410_ID, LD2410Component
16
17
 
17
18
  DEPENDENCIES = ["ld2410"]
@@ -5,12 +5,13 @@ from esphome.const import (
5
5
  CONF_FACTORY_RESET,
6
6
  CONF_RESTART,
7
7
  DEVICE_CLASS_RESTART,
8
- ENTITY_CATEGORY_DIAGNOSTIC,
9
8
  ENTITY_CATEGORY_CONFIG,
9
+ ENTITY_CATEGORY_DIAGNOSTIC,
10
+ ICON_DATABASE,
10
11
  ICON_RESTART,
11
12
  ICON_RESTART_ALERT,
12
- ICON_DATABASE,
13
13
  )
14
+
14
15
  from .. import CONF_LD2410_ID, LD2410Component, ld2410_ns
15
16
 
16
17
  QueryButton = ld2410_ns.class_("QueryButton", button.Button)
@@ -5,15 +5,16 @@ from esphome.const import (
5
5
  CONF_ID,
6
6
  CONF_TIMEOUT,
7
7
  DEVICE_CLASS_DISTANCE,
8
- DEVICE_CLASS_SIGNAL_STRENGTH,
9
8
  DEVICE_CLASS_ILLUMINANCE,
10
- UNIT_SECOND,
11
- UNIT_PERCENT,
9
+ DEVICE_CLASS_SIGNAL_STRENGTH,
12
10
  ENTITY_CATEGORY_CONFIG,
11
+ ICON_LIGHTBULB,
13
12
  ICON_MOTION_SENSOR,
14
13
  ICON_TIMELAPSE,
15
- ICON_LIGHTBULB,
14
+ UNIT_PERCENT,
15
+ UNIT_SECOND,
16
16
  )
17
+
17
18
  from .. import CONF_LD2410_ID, LD2410Component, ld2410_ns
18
19
 
19
20
  GateThresholdNumber = ld2410_ns.class_("GateThresholdNumber", number.Number)
@@ -2,13 +2,14 @@ import esphome.codegen as cg
2
2
  from esphome.components import select
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import (
5
- ENTITY_CATEGORY_CONFIG,
6
5
  CONF_BAUD_RATE,
7
- ICON_THERMOMETER,
8
- ICON_SCALE,
6
+ ENTITY_CATEGORY_CONFIG,
9
7
  ICON_LIGHTBULB,
10
8
  ICON_RULER,
9
+ ICON_SCALE,
10
+ ICON_THERMOMETER,
11
11
  )
12
+
12
13
  from .. import CONF_LD2410_ID, LD2410Component, ld2410_ns
13
14
 
14
15
  BaudRateSelect = ld2410_ns.class_("BaudRateSelect", select.Select)
@@ -2,17 +2,18 @@ import esphome.codegen as cg
2
2
  from esphome.components import sensor
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import (
5
- DEVICE_CLASS_DISTANCE,
6
- UNIT_CENTIMETER,
7
- UNIT_PERCENT,
8
5
  CONF_LIGHT,
6
+ DEVICE_CLASS_DISTANCE,
9
7
  DEVICE_CLASS_ILLUMINANCE,
10
8
  ENTITY_CATEGORY_DIAGNOSTIC,
11
- ICON_SIGNAL,
12
9
  ICON_FLASH,
13
- ICON_MOTION_SENSOR,
14
10
  ICON_LIGHTBULB,
11
+ ICON_MOTION_SENSOR,
12
+ ICON_SIGNAL,
13
+ UNIT_CENTIMETER,
14
+ UNIT_PERCENT,
15
15
  )
16
+
16
17
  from . import CONF_LD2410_ID, LD2410Component
17
18
 
18
19
  DEPENDENCIES = ["ld2410"]
@@ -3,10 +3,11 @@ from esphome.components import switch
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import (
5
5
  DEVICE_CLASS_SWITCH,
6
- ICON_BLUETOOTH,
7
6
  ENTITY_CATEGORY_CONFIG,
7
+ ICON_BLUETOOTH,
8
8
  ICON_PULSE,
9
9
  )
10
+
10
11
  from .. import CONF_LD2410_ID, LD2410Component, ld2410_ns
11
12
 
12
13
  BluetoothSwitch = ld2410_ns.class_("BluetoothSwitch", switch.Switch)
@@ -2,12 +2,13 @@ import esphome.codegen as cg
2
2
  from esphome.components import text_sensor
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import (
5
- ENTITY_CATEGORY_DIAGNOSTIC,
6
- CONF_VERSION,
7
5
  CONF_MAC_ADDRESS,
6
+ CONF_VERSION,
7
+ ENTITY_CATEGORY_DIAGNOSTIC,
8
8
  ICON_BLUETOOTH,
9
9
  ICON_CHIP,
10
10
  )
11
+
11
12
  from . import CONF_LD2410_ID, LD2410Component
12
13
 
13
14
  DEPENDENCIES = ["ld2410"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import uart
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  CODEOWNERS = ["@descipher"]
@@ -1,8 +1,9 @@
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 CONF_ID, DEVICE_CLASS_OCCUPANCY, CONF_HAS_TARGET
5
- from .. import ld2420_ns, LD2420Component, CONF_LD2420_ID
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_HAS_TARGET, CONF_ID, DEVICE_CLASS_OCCUPANCY
5
+
6
+ from .. import CONF_LD2420_ID, LD2420Component, ld2420_ns
6
7
 
7
8
  LD2420BinarySensor = ld2420_ns.class_(
8
9
  "LD2420BinarySensor", binary_sensor.BinarySensor, cg.Component
@@ -4,12 +4,13 @@ import esphome.config_validation as cv
4
4
  from esphome.const import (
5
5
  CONF_FACTORY_RESET,
6
6
  DEVICE_CLASS_RESTART,
7
- ENTITY_CATEGORY_DIAGNOSTIC,
8
7
  ENTITY_CATEGORY_CONFIG,
8
+ ENTITY_CATEGORY_DIAGNOSTIC,
9
+ ICON_DATABASE,
9
10
  ICON_RESTART,
10
11
  ICON_RESTART_ALERT,
11
- ICON_DATABASE,
12
12
  )
13
+
13
14
  from .. import CONF_LD2420_ID, LD2420Component, ld2420_ns
14
15
 
15
16
  LD2420ApplyConfigButton = ld2420_ns.class_("LD2420ApplyConfigButton", button.Button)
@@ -4,12 +4,13 @@ import esphome.config_validation as cv
4
4
  from esphome.const import (
5
5
  CONF_ID,
6
6
  DEVICE_CLASS_DISTANCE,
7
- UNIT_SECOND,
8
7
  ENTITY_CATEGORY_CONFIG,
9
8
  ICON_MOTION_SENSOR,
10
- ICON_TIMELAPSE,
11
9
  ICON_SCALE,
10
+ ICON_TIMELAPSE,
11
+ UNIT_SECOND,
12
12
  )
13
+
13
14
  from .. import CONF_LD2420_ID, LD2420Component, ld2420_ns
14
15
 
15
16
  LD2420TimeoutNumber = ld2420_ns.class_("LD2420TimeoutNumber", number.Number)
@@ -2,6 +2,7 @@ import esphome.codegen as cg
2
2
  from esphome.components import select
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import ENTITY_CATEGORY_CONFIG
5
+
5
6
  from .. import CONF_LD2420_ID, LD2420Component, ld2420_ns
6
7
 
7
8
  CONF_OPERATING_MODE = "operating_mode"
@@ -1,8 +1,9 @@
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, DEVICE_CLASS_DISTANCE, UNIT_CENTIMETER
5
- from .. import ld2420_ns, LD2420Component, CONF_LD2420_ID
5
+
6
+ from .. import CONF_LD2420_ID, LD2420Component, ld2420_ns
6
7
 
7
8
  LD2420Sensor = ld2420_ns.class_("LD2420Sensor", sensor.Sensor, cg.Component)
8
9
 
@@ -1,13 +1,9 @@
1
1
  import esphome.codegen as cg
2
2
  from esphome.components import text_sensor
3
3
  import esphome.config_validation as cv
4
- from esphome.const import (
5
- CONF_ID,
6
- ENTITY_CATEGORY_DIAGNOSTIC,
7
- ICON_CHIP,
8
- )
4
+ from esphome.const import CONF_ID, ENTITY_CATEGORY_DIAGNOSTIC, ICON_CHIP
9
5
 
10
- from .. import ld2420_ns, LD2420Component, CONF_LD2420_ID
6
+ from .. import CONF_LD2420_ID, LD2420Component, ld2420_ns
11
7
 
12
8
  LD2420TextSensor = ld2420_ns.class_(
13
9
  "LD2420TextSensor", text_sensor.TextSensor, 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 uart
4
- from esphome.const import (
5
- CONF_ID,
6
- CONF_THROTTLE,
7
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_ID, CONF_THROTTLE
8
5
 
9
6
  DEPENDENCIES = ["uart"]
10
7
  CODEOWNERS = ["@hareeshmu"]
@@ -1,12 +1,12 @@
1
- from esphome import pins, automation
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
5
  from esphome.const import (
6
- CONF_PHASE_ANGLE,
7
6
  CONF_CHANNEL,
8
7
  CONF_FREQUENCY,
9
8
  CONF_ID,
9
+ CONF_PHASE_ANGLE,
10
10
  CONF_PIN,
11
11
  )
12
12
 
@@ -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 (
5
5
  CONF_VERSION,
6
6
  ENTITY_CATEGORY_DIAGNOSTIC,
@@ -1,12 +1,8 @@
1
- from esphome import pins, automation
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_FREQUENCY,
7
- CONF_ID,
8
- CONF_PIN,
9
- )
5
+ from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_PIN
10
6
 
11
7
  DEPENDENCIES = ["libretiny"]
12
8
 
@@ -1,17 +1,15 @@
1
+ from esphome import automation, pins
1
2
  import esphome.codegen as cg
2
3
  import esphome.config_validation as cv
3
- from esphome import pins
4
- from esphome import automation
5
-
6
4
  from esphome.const import (
7
- CONF_READ_PIN,
5
+ CONF_CODE,
8
6
  CONF_ID,
9
- CONF_NAME,
10
- CONF_WRITE_PIN,
11
- CONF_REPEAT,
12
7
  CONF_INVERTED,
8
+ CONF_NAME,
13
9
  CONF_PULSE_LENGTH,
14
- CONF_CODE,
10
+ CONF_READ_PIN,
11
+ CONF_REPEAT,
12
+ CONF_WRITE_PIN,
15
13
  )
16
14
  from esphome.cpp_helpers import gpio_pin_expression
17
15
 
@@ -1,8 +1,7 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
-
4
1
  from esphome import pins
2
+ import esphome.codegen as cg
5
3
  from esphome.components import i2c, touchscreen
4
+ import esphome.config_validation as cv
6
5
  from esphome.const import CONF_ID, CONF_INTERRUPT_PIN
7
6
 
8
7
  from .. import lilygo_t5_47_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 i2c, sensor
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import (
5
5
  CONF_AMBIENT_LIGHT,
6
6
  CONF_GAIN,
@@ -1,7 +1,7 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
2
+ import esphome.codegen as cg
4
3
  from esphome.components import i2c, sensor
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
6
  CONF_ACTUAL_GAIN,
7
7
  CONF_ACTUAL_INTEGRATION_TIME,
@@ -1,7 +1,7 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
2
+ import esphome.codegen as cg
4
3
  from esphome.components import i2c, sensor
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
6
  CONF_ACTUAL_GAIN,
7
7
  CONF_ACTUAL_INTEGRATION_TIME,
@@ -10,6 +10,7 @@ from esphome.const import (
10
10
  CONF_GROUP,
11
11
  CONF_ID,
12
12
  CONF_LAMBDA,
13
+ CONF_ON_BOOT,
13
14
  CONF_ON_IDLE,
14
15
  CONF_PAGES,
15
16
  CONF_TIMEOUT,
@@ -38,19 +39,18 @@ from .lvcode import LvContext, LvglComponent, lvgl_static
38
39
  from .schemas import (
39
40
  DISP_BG_SCHEMA,
40
41
  FLEX_OBJ_SCHEMA,
42
+ FULL_STYLE_SCHEMA,
41
43
  GRID_CELL_SCHEMA,
42
44
  LAYOUT_SCHEMAS,
43
- STYLE_SCHEMA,
44
45
  WIDGET_TYPES,
45
46
  any_widget_schema,
46
47
  container_schema,
47
48
  create_modify_schema,
48
- grid_alignments,
49
49
  obj_schema,
50
50
  )
51
51
  from .styles import add_top_layer, styles_to_code, theme_to_code
52
52
  from .touchscreens import touchscreen_schema, touchscreens_to_code
53
- from .trigger import generate_triggers
53
+ from .trigger import add_on_boot_triggers, generate_triggers
54
54
  from .types import (
55
55
  FontEngine,
56
56
  IdleTrigger,
@@ -73,6 +73,7 @@ from .widgets.animimg import animimg_spec
73
73
  from .widgets.arc import arc_spec
74
74
  from .widgets.button import button_spec
75
75
  from .widgets.buttonmatrix import buttonmatrix_spec
76
+ from .widgets.canvas import canvas_spec
76
77
  from .widgets.checkbox import checkbox_spec
77
78
  from .widgets.dropdown import dropdown_spec
78
79
  from .widgets.img import img_spec
@@ -125,6 +126,7 @@ for w_type in (
125
126
  keyboard_spec,
126
127
  tileview_spec,
127
128
  qr_code_spec,
129
+ canvas_spec,
128
130
  ):
129
131
  WIDGET_TYPES[w_type.name] = w_type
130
132
 
@@ -365,6 +367,7 @@ async def to_code(configs):
365
367
  conf[CONF_TRIGGER_ID], lv_component, False
366
368
  )
367
369
  await build_automation(resume_trigger, [], conf)
370
+ await add_on_boot_triggers(config.get(CONF_ON_BOOT, ()))
368
371
 
369
372
  # This must be done after all widgets are created
370
373
  for comp in helpers.lvgl_components_required:
@@ -373,6 +376,7 @@ async def to_code(configs):
373
376
  add_define("LV_COLOR_SCREEN_TRANSP", "1")
374
377
  for use in helpers.lv_uses:
375
378
  add_define(f"LV_USE_{use.upper()}")
379
+ cg.add_define(f"USE_LVGL_{use.upper()}")
376
380
  lv_conf_h_file = CORE.relative_src_path(LV_CONF_FILENAME)
377
381
  write_file_if_changed(lv_conf_h_file, generate_lv_conf_h())
378
382
  cg.add_build_flag("-DLV_CONF_H=1")
@@ -418,15 +422,8 @@ LVGL_SCHEMA = cv.All(
418
422
  "big_endian", "little_endian"
419
423
  ),
420
424
  cv.Optional(df.CONF_STYLE_DEFINITIONS): cv.ensure_list(
421
- cv.Schema({cv.Required(CONF_ID): cv.declare_id(lv_style_t)})
422
- .extend(STYLE_SCHEMA)
423
- .extend(
424
- {
425
- cv.Optional(df.CONF_GRID_CELL_X_ALIGN): grid_alignments,
426
- cv.Optional(df.CONF_GRID_CELL_Y_ALIGN): grid_alignments,
427
- cv.Optional(df.CONF_PAD_ROW): lvalid.pixels,
428
- cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels,
429
- }
425
+ cv.Schema({cv.Required(CONF_ID): cv.declare_id(lv_style_t)}).extend(
426
+ FULL_STYLE_SCHEMA
430
427
  )
431
428
  ),
432
429
  cv.Optional(CONF_ON_IDLE): validate_automation(
@@ -17,6 +17,7 @@ from .defines import (
17
17
  CONF_SHOW_SNOW,
18
18
  PARTS,
19
19
  literal,
20
+ static_cast,
20
21
  )
21
22
  from .lv_validation import lv_bool, lv_color, lv_image, opacity
22
23
  from .lvcode import (
@@ -32,7 +33,6 @@ from .lvcode import (
32
33
  lv_expr,
33
34
  lv_obj,
34
35
  lvgl_comp,
35
- static_cast,
36
36
  )
37
37
  from .schemas import DISP_BG_SCHEMA, LIST_ACTION_SCHEMA, LVGL_SCHEMA, base_update_schema
38
38
  from .types import (
@@ -29,12 +29,16 @@ def add_define(macro, value="1"):
29
29
  lv_defines[macro] = value
30
30
 
31
31
 
32
- def literal(arg):
32
+ def literal(arg) -> MockObj:
33
33
  if isinstance(arg, str):
34
34
  return MockObj(arg)
35
35
  return arg
36
36
 
37
37
 
38
+ def static_cast(type, value):
39
+ return literal(f"static_cast<{type}>({value})")
40
+
41
+
38
42
  def call_lambda(lamb: LambdaExpression):
39
43
  expr = lamb.content.strip()
40
44
  if expr.startswith("return") and expr.endswith(";"):
@@ -416,7 +420,6 @@ CONF_CHANGE_RATE = "change_rate"
416
420
  CONF_CLOSE_BUTTON = "close_button"
417
421
  CONF_COLOR_DEPTH = "color_depth"
418
422
  CONF_CONTROL = "control"
419
- CONF_DEFAULT = "default"
420
423
  CONF_DEFAULT_FONT = "default_font"
421
424
  CONF_DEFAULT_GROUP = "default_group"
422
425
  CONF_DIR = "dir"
@@ -254,11 +254,27 @@ def pixels_or_percent_validator(value):
254
254
  pixels_or_percent = LValidator(pixels_or_percent_validator, uint32, retmapper=literal)
255
255
 
256
256
 
257
- def zoom(value):
257
+ def pixels_validator(value):
258
+ if isinstance(value, str) and value.lower().endswith("px"):
259
+ value = value[:-2]
260
+ return cv.positive_int(value)
261
+
262
+
263
+ pixels = LValidator(pixels_validator, uint32, retmapper=literal)
264
+
265
+
266
+ def zoom_validator(value):
258
267
  value = cv.float_range(0.1, 10.0)(value)
268
+ return value
269
+
270
+
271
+ def zoom_retmapper(value):
259
272
  return int(value * 256)
260
273
 
261
274
 
275
+ zoom = LValidator(zoom_validator, uint32, retmapper=zoom_retmapper)
276
+
277
+
262
278
  def angle(value):
263
279
  """
264
280
  Validation for an angle in degrees, converted to an integer representing 0.1deg units
@@ -286,14 +302,6 @@ def size_validator(value):
286
302
  size = LValidator(size_validator, uint32, retmapper=literal)
287
303
 
288
304
 
289
- def pixels_validator(value):
290
- if isinstance(value, str) and value.lower().endswith("px"):
291
- return cv.int_(value[:-2])
292
- return cv.int_(value)
293
-
294
-
295
- pixels = LValidator(pixels_validator, uint32, retmapper=literal)
296
-
297
305
  radius_consts = LvConstant("LV_RADIUS_", "CIRCLE")
298
306
 
299
307
 
@@ -206,11 +206,16 @@ class LocalVariable(MockObj):
206
206
 
207
207
  def __enter__(self):
208
208
  CodeContext.start_block()
209
- CodeContext.append(
210
- VariableDeclarationExpression(self.base.type, self.modifier, self.base.id)
211
- )
212
209
  if self.rhs is not None:
213
- CodeContext.append(AssignmentExpression(None, "", self.base, self.rhs))
210
+ CodeContext.append(
211
+ AssignmentExpression(self.base.type, self.modifier, self.base, self.rhs)
212
+ )
213
+ else:
214
+ CodeContext.append(
215
+ VariableDeclarationExpression(
216
+ self.base.type, self.modifier, self.base.id
217
+ )
218
+ )
214
219
  return MockObj(self.base)
215
220
 
216
221
  def __exit__(self, *args):
@@ -285,10 +290,6 @@ class LvExpr(MockLv):
285
290
  pass
286
291
 
287
292
 
288
- def static_cast(type, value):
289
- return literal(f"static_cast<{type}>({value})")
290
-
291
-
292
293
  # Top level mock for generic lv_ calls to be recorded
293
294
  lv = MockLv("lv_")
294
295
  # Just generate an expression
@@ -63,6 +63,11 @@ inline void lv_disp_set_bg_image(lv_disp_t *disp, esphome::image::Image *image)
63
63
  inline void lv_obj_set_style_bg_img_src(lv_obj_t *obj, esphome::image::Image *image, lv_style_selector_t selector) {
64
64
  lv_obj_set_style_bg_img_src(obj, image->get_lv_img_dsc(), selector);
65
65
  }
66
+ inline void lv_canvas_draw_img(lv_obj_t *canvas, lv_coord_t x, lv_coord_t y, image::Image *image,
67
+ lv_draw_img_dsc_t *dsc) {
68
+ lv_canvas_draw_img(canvas, x, y, image->get_lv_img_dsc(), dsc);
69
+ }
70
+
66
71
  #ifdef USE_LVGL_METER
67
72
  inline lv_meter_indicator_t *lv_meter_add_needle_img(lv_obj_t *obj, lv_meter_scale_t *scale, esphome::image::Image *src,
68
73
  lv_coord_t pivot_x, lv_coord_t pivot_y) {
@@ -90,6 +95,7 @@ inline void lv_animimg_set_src(lv_obj_t *img, std::vector<image::Image *> images
90
95
  // Parent class for things that wrap an LVGL object
91
96
  class LvCompound {
92
97
  public:
98
+ virtual ~LvCompound() = default;
93
99
  virtual void set_obj(lv_obj_t *lv_obj) { this->obj = lv_obj; }
94
100
  lv_obj_t *obj{};
95
101
  };
@@ -330,6 +336,19 @@ class LVEncoderListener : public Parented<LvglComponent> {
330
336
  };
331
337
  #endif // USE_LVGL_KEY_LISTENER
332
338
 
339
+ #ifdef USE_LVGL_LINE
340
+ class LvLineType : public LvCompound {
341
+ public:
342
+ std::vector<lv_point_t> get_points() { return this->points_; }
343
+ void set_points(std::vector<lv_point_t> points) {
344
+ this->points_ = std::move(points);
345
+ lv_line_set_points(this->obj, this->points_.data(), this->points_.size());
346
+ }
347
+
348
+ protected:
349
+ std::vector<lv_point_t> points_{};
350
+ };
351
+ #endif
333
352
  #if defined(USE_LVGL_DROPDOWN) || defined(LV_USE_ROLLER)
334
353
  class LvSelectable : public LvCompound {
335
354
  public: