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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. esphome/__main__.py +34 -10
  2. esphome/components/a01nyub/sensor.py +2 -2
  3. esphome/components/a02yyuw/sensor.py +2 -2
  4. esphome/components/a4988/stepper.py +1 -2
  5. esphome/components/absolute_humidity/sensor.py +3 -3
  6. esphome/components/ac_dimmer/output.py +3 -3
  7. esphome/components/adalight/__init__.py +2 -2
  8. esphome/components/adc128s102/__init__.py +1 -1
  9. esphome/components/adc128s102/sensor/__init__.py +3 -3
  10. esphome/components/addressable_light/display.py +5 -5
  11. esphome/components/ade7880/sensor.py +2 -2
  12. esphome/components/ade7953_base/__init__.py +10 -10
  13. esphome/components/ade7953_i2c/sensor.py +1 -2
  14. esphome/components/ade7953_spi/sensor.py +1 -2
  15. esphome/components/ads1115/__init__.py +1 -1
  16. esphome/components/ads1115/sensor/__init__.py +4 -3
  17. esphome/components/ads1118/__init__.py +1 -1
  18. esphome/components/ads1118/sensor/__init__.py +5 -4
  19. esphome/components/ags10/sensor.py +9 -9
  20. esphome/components/aht10/sensor.py +2 -2
  21. esphome/components/airthings_ble/__init__.py +1 -1
  22. esphome/components/airthings_wave_base/__init__.py +2 -3
  23. esphome/components/airthings_wave_mini/sensor.py +2 -5
  24. esphome/components/airthings_wave_plus/sensor.py +8 -9
  25. esphome/components/alpha3/sensor.py +5 -5
  26. esphome/components/am2315c/am2315c.cpp +4 -4
  27. esphome/components/am2315c/sensor.py +1 -1
  28. esphome/components/am2320/sensor.py +1 -1
  29. esphome/components/am43/cover/__init__.py +1 -1
  30. esphome/components/am43/sensor/__init__.py +3 -3
  31. esphome/components/analog_threshold/binary_sensor.py +2 -5
  32. esphome/components/anova/climate.py +1 -1
  33. esphome/components/apds9306/sensor.py +1 -1
  34. esphome/components/apds9960/__init__.py +1 -1
  35. esphome/components/apds9960/binary_sensor.py +2 -1
  36. esphome/components/apds9960/sensor.py +3 -2
  37. esphome/components/api/api_frame_helper.cpp +25 -1
  38. esphome/components/as3935/__init__.py +3 -3
  39. esphome/components/as3935/binary_sensor.py +2 -1
  40. esphome/components/as3935/sensor.py +4 -3
  41. esphome/components/as3935_i2c/__init__.py +1 -1
  42. esphome/components/as3935_spi/__init__.py +1 -1
  43. esphome/components/as5600/__init__.py +2 -2
  44. esphome/components/as5600/sensor/__init__.py +10 -9
  45. esphome/components/as7341/sensor.py +1 -2
  46. esphome/components/at581x/__init__.py +4 -8
  47. esphome/components/at581x/switch/__init__.py +2 -4
  48. esphome/components/atc_mithermometer/sensor.py +3 -3
  49. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +7 -3
  50. esphome/components/b_parasite/sensor.py +2 -2
  51. esphome/components/ballu/climate.py +1 -1
  52. esphome/components/bang_bang/climate.py +2 -2
  53. esphome/components/bedjet/__init__.py +2 -6
  54. esphome/components/bedjet/climate/__init__.py +3 -6
  55. esphome/components/bedjet/fan/__init__.py +4 -9
  56. esphome/components/bedjet/sensor/__init__.py +3 -6
  57. esphome/components/beken_spi_led_strip/light.py +2 -2
  58. esphome/components/bh1750/sensor.py +2 -6
  59. esphome/components/binary/fan/__init__.py +2 -1
  60. esphome/components/binary/light/__init__.py +3 -2
  61. esphome/components/binary_sensor_map/sensor.py +5 -6
  62. esphome/components/bl0939/sensor.py +1 -1
  63. esphome/components/bl0940/sensor.py +3 -3
  64. esphome/components/ble_client/__init__.py +3 -2
  65. esphome/components/ble_client/sensor/__init__.py +1 -1
  66. esphome/components/ble_client/text_sensor/__init__.py +1 -1
  67. esphome/components/bluetooth_proxy/__init__.py +35 -23
  68. esphome/components/bme280_base/__init__.py +1 -1
  69. esphome/components/bme280_i2c/sensor.py +3 -2
  70. esphome/components/bme280_spi/sensor.py +3 -2
  71. esphome/components/bme680/sensor.py +4 -4
  72. esphome/components/bme680_bsec/__init__.py +1 -1
  73. esphome/components/bme680_bsec/sensor.py +3 -6
  74. esphome/components/bme680_bsec/text_sensor.py +3 -2
  75. esphome/components/bmi160/sensor.py +6 -6
  76. esphome/components/bmp085/sensor.py +1 -1
  77. esphome/components/bmp280_base/__init__.py +1 -1
  78. esphome/components/bmp280_i2c/sensor.py +3 -2
  79. esphome/components/bmp280_spi/sensor.py +3 -2
  80. esphome/components/bmp3xx_base/__init__.py +1 -1
  81. esphome/components/bmp3xx_i2c/sensor.py +2 -1
  82. esphome/components/bmp3xx_spi/sensor.py +2 -1
  83. esphome/components/bmp581/sensor.py +2 -1
  84. esphome/components/bp1658cj/__init__.py +2 -6
  85. esphome/components/bp1658cj/output.py +2 -1
  86. esphome/components/bp5758d/__init__.py +2 -6
  87. esphome/components/bp5758d/output.py +3 -2
  88. esphome/components/canbus/__init__.py +13 -2
  89. esphome/components/canbus/canbus.cpp +7 -1
  90. esphome/components/cap1188/__init__.py +2 -2
  91. esphome/components/cap1188/binary_sensor.py +3 -2
  92. esphome/components/captive_portal/__init__.py +3 -3
  93. esphome/components/ccs811/sensor.py +10 -10
  94. esphome/components/cd74hc4067/__init__.py +2 -5
  95. esphome/components/cd74hc4067/sensor.py +6 -5
  96. esphome/components/climate_ir/__init__.py +2 -2
  97. esphome/components/climate_ir_lg/climate.py +1 -1
  98. esphome/components/color/__init__.py +1 -2
  99. esphome/components/color_temperature/light.py +2 -2
  100. esphome/components/combination/sensor.py +1 -1
  101. esphome/components/coolix/climate.py +1 -1
  102. esphome/components/copy/binary_sensor/__init__.py +1 -1
  103. esphome/components/copy/button/__init__.py +1 -1
  104. esphome/components/copy/cover/__init__.py +1 -1
  105. esphome/components/copy/fan/__init__.py +2 -7
  106. esphome/components/copy/lock/__init__.py +2 -7
  107. esphome/components/copy/number/__init__.py +1 -1
  108. esphome/components/copy/select/__init__.py +2 -7
  109. esphome/components/copy/sensor/__init__.py +2 -2
  110. esphome/components/copy/switch/__init__.py +1 -1
  111. esphome/components/copy/text/__init__.py +2 -7
  112. esphome/components/copy/text_sensor/__init__.py +2 -6
  113. esphome/components/cs5460a/sensor.py +7 -7
  114. esphome/components/cse7761/sensor.py +2 -2
  115. esphome/components/cse7766/sensor.py +1 -1
  116. esphome/components/cst226/touchscreen/__init__.py +3 -4
  117. esphome/components/ct_clamp/sensor.py +1 -1
  118. esphome/components/current_based/cover.py +3 -4
  119. esphome/components/cwww/light.py +3 -3
  120. esphome/components/dac7678/__init__.py +1 -1
  121. esphome/components/dac7678/output.py +2 -1
  122. esphome/components/daikin/climate.py +1 -1
  123. esphome/components/daikin_arc/climate.py +1 -1
  124. esphome/components/daikin_brc/climate.py +1 -1
  125. esphome/components/dallas_temp/sensor.py +1 -1
  126. esphome/components/daly_bms/__init__.py +2 -2
  127. esphome/components/daly_bms/binary_sensor.py +3 -2
  128. esphome/components/daly_bms/sensor.py +14 -13
  129. esphome/components/daly_bms/text_sensor.py +3 -2
  130. esphome/components/dashboard_import/__init__.py +5 -5
  131. esphome/components/debug/sensor.py +7 -6
  132. esphome/components/debug/text_sensor.py +1 -1
  133. esphome/components/deep_sleep/__init__.py +12 -13
  134. esphome/components/delonghi/climate.py +1 -1
  135. esphome/components/demo/__init__.py +1 -1
  136. esphome/components/dfplayer/__init__.py +3 -3
  137. esphome/components/dfrobot_sen0395/__init__.py +3 -3
  138. esphome/components/dfrobot_sen0395/binary_sensor.py +2 -1
  139. esphome/components/dfrobot_sen0395/switch/__init__.py +2 -3
  140. esphome/components/dht/sensor.py +4 -5
  141. esphome/components/dht12/sensor.py +3 -3
  142. esphome/components/display/display.cpp +2 -2
  143. esphome/components/dps310/sensor.py +3 -3
  144. esphome/components/ds1307/time.py +2 -3
  145. esphome/components/dsmr/__init__.py +3 -7
  146. esphome/components/dsmr/sensor.py +5 -4
  147. esphome/components/dsmr/text_sensor.py +3 -2
  148. esphome/components/duty_cycle/sensor.py +3 -8
  149. esphome/components/duty_time/sensor.py +7 -7
  150. esphome/components/e131/__init__.py +3 -3
  151. esphome/components/ee895/sensor.py +5 -5
  152. esphome/components/ektf2232/touchscreen/__init__.py +2 -3
  153. esphome/components/emc2101/__init__.py +1 -1
  154. esphome/components/emc2101/output/__init__.py +3 -2
  155. esphome/components/emc2101/sensor/__init__.py +4 -3
  156. esphome/components/emmeti/climate.py +1 -1
  157. esphome/components/endstop/cover.py +3 -3
  158. esphome/components/ens160_base/__init__.py +1 -1
  159. esphome/components/ens160_i2c/sensor.py +2 -1
  160. esphome/components/ens160_spi/sensor.py +2 -1
  161. esphome/components/ens210/sensor.py +1 -1
  162. esphome/components/esp32/__init__.py +10 -0
  163. esphome/components/esp32_ble_tracker/__init__.py +135 -51
  164. esphome/components/esp32_camera/__init__.py +7 -8
  165. esphome/components/esp32_camera_web_server/__init__.py +2 -2
  166. esphome/components/esp32_can/canbus.py +21 -0
  167. esphome/components/esp32_can/esp32_can.cpp +1 -1
  168. esphome/components/esp32_can/esp32_can.h +4 -0
  169. esphome/components/esp32_dac/output.py +2 -2
  170. esphome/components/esp32_hall/sensor.py +2 -6
  171. esphome/components/esp32_touch/__init__.py +7 -7
  172. esphome/components/esp32_touch/binary_sensor.py +4 -7
  173. esphome/components/esp8266_pwm/output.py +3 -8
  174. esphome/components/ethernet/__init__.py +1 -0
  175. esphome/components/ethernet/ethernet_component.cpp +1 -1
  176. esphome/components/ethernet_info/ethernet_info_text_sensor.h +1 -0
  177. esphome/components/exposure_notifications/__init__.py +2 -2
  178. esphome/components/external_components/__init__.py +1 -1
  179. esphome/components/ezo/sensor.py +2 -2
  180. esphome/components/ezo_pmp/__init__.py +4 -4
  181. esphome/components/ezo_pmp/binary_sensor.py +4 -4
  182. esphome/components/ezo_pmp/sensor.py +4 -5
  183. esphome/components/ezo_pmp/text_sensor.py +2 -6
  184. esphome/components/factory_reset/button/__init__.py +2 -1
  185. esphome/components/factory_reset/switch/__init__.py +3 -2
  186. esphome/components/fastled_base/__init__.py +3 -3
  187. esphome/components/fastled_clockless/light.py +2 -2
  188. esphome/components/fastled_spi/light.py +2 -2
  189. esphome/components/feedback/cover.py +3 -3
  190. esphome/components/fingerprint_grow/__init__.py +5 -6
  191. esphome/components/fingerprint_grow/binary_sensor.py +2 -1
  192. esphome/components/fingerprint_grow/sensor.py +2 -1
  193. esphome/components/fs3000/sensor.py +2 -6
  194. esphome/components/ft5x06/touchscreen/__init__.py +2 -2
  195. esphome/components/ft63x6/touchscreen.py +2 -3
  196. esphome/components/fujitsu_general/climate.py +1 -1
  197. esphome/components/gcja5/sensor.py +4 -4
  198. esphome/components/gdk101/__init__.py +1 -1
  199. esphome/components/gdk101/binary_sensor.py +2 -1
  200. esphome/components/gdk101/sensor.py +5 -4
  201. esphome/components/globals/__init__.py +1 -2
  202. esphome/components/gp2y1010au0f/sensor.py +3 -3
  203. esphome/components/gp8403/__init__.py +1 -2
  204. esphome/components/gp8403/output/__init__.py +3 -4
  205. esphome/components/gpio/binary_sensor/__init__.py +3 -2
  206. esphome/components/gpio/one_wire/__init__.py +3 -2
  207. esphome/components/gpio/output/__init__.py +3 -2
  208. esphome/components/gpio/switch/__init__.py +3 -2
  209. esphome/components/gps/__init__.py +4 -5
  210. esphome/components/gps/time/__init__.py +3 -2
  211. esphome/components/graph/__init__.py +12 -12
  212. esphome/components/grove_tb6612fng/__init__.py +5 -6
  213. esphome/components/growatt_solar/sensor.py +1 -1
  214. esphome/components/gt911/binary_sensor/__init__.py +2 -2
  215. esphome/components/haier/binary_sensor/__init__.py +4 -10
  216. esphome/components/haier/button/__init__.py +3 -6
  217. esphome/components/haier/sensor/__init__.py +4 -6
  218. esphome/components/haier/switch/__init__.py +4 -7
  219. esphome/components/haier/text_sensor/__init__.py +4 -9
  220. esphome/components/havells_solar/sensor.py +1 -1
  221. esphome/components/hbridge/fan/__init__.py +6 -6
  222. esphome/components/hbridge/light/__init__.py +2 -1
  223. esphome/components/hdc1080/sensor.py +1 -1
  224. esphome/components/he60r/cover.py +2 -6
  225. esphome/components/heatpumpir/climate.py +1 -1
  226. esphome/components/hitachi_ac344/climate.py +1 -1
  227. esphome/components/hitachi_ac424/climate.py +1 -1
  228. esphome/components/hlw8012/sensor.py +6 -6
  229. esphome/components/hm3301/sensor.py +3 -3
  230. esphome/components/hmc5883l/sensor.py +4 -4
  231. esphome/components/homeassistant/time/__init__.py +2 -1
  232. esphome/components/honeywell_hih_i2c/sensor.py +3 -3
  233. esphome/components/honeywellabp/sensor.py +1 -2
  234. esphome/components/honeywellabp2_i2c/sensor.py +1 -2
  235. esphome/components/host/time/__init__.py +2 -2
  236. esphome/components/hrxl_maxsonar_wr/sensor.py +1 -1
  237. esphome/components/hte501/sensor.py +3 -3
  238. esphome/components/http_request/ota/__init__.py +5 -9
  239. esphome/components/http_request/update/__init__.py +3 -7
  240. esphome/components/htu21d/sensor.py +6 -6
  241. esphome/components/htu31d/sensor.py +1 -1
  242. esphome/components/hx711/sensor.py +3 -8
  243. esphome/components/hydreon_rgxx/binary_sensor.py +3 -7
  244. esphome/components/hydreon_rgxx/sensor.py +4 -4
  245. esphome/components/hyt271/sensor.py +1 -1
  246. esphome/components/i2c_device/__init__.py +1 -1
  247. esphome/components/i2s_audio/media_player/__init__.py +6 -8
  248. esphome/components/iaqcore/sensor.py +2 -2
  249. esphome/components/ina219/sensor.py +2 -2
  250. esphome/components/ina226/sensor.py +4 -4
  251. esphome/components/ina260/sensor.py +4 -4
  252. esphome/components/ina2xx_base/__init__.py +2 -2
  253. esphome/components/ina2xx_i2c/sensor.py +1 -1
  254. esphome/components/ina2xx_spi/sensor.py +1 -1
  255. esphome/components/ina3221/sensor.py +3 -3
  256. esphome/components/inkbird_ibsth1_mini/sensor.py +2 -2
  257. esphome/components/inkplate6/display.py +2 -2
  258. esphome/components/integration/sensor.py +4 -4
  259. esphome/components/internal_temperature/sensor.py +5 -7
  260. esphome/components/interval/__init__.py +1 -1
  261. esphome/components/jsn_sr04t/sensor.py +3 -3
  262. esphome/components/kamstrup_kmp/sensor.py +1 -1
  263. esphome/components/key_collector/__init__.py +2 -2
  264. esphome/components/kmeteriso/sensor.py +2 -2
  265. esphome/components/kuntze/sensor.py +5 -5
  266. esphome/components/lcd_base/__init__.py +2 -2
  267. esphome/components/lcd_gpio/display.py +4 -4
  268. esphome/components/lcd_menu/__init__.py +3 -7
  269. esphome/components/lcd_pcf8574/display.py +1 -1
  270. esphome/components/ld2410/__init__.py +4 -4
  271. esphome/components/ld2410/binary_sensor.py +5 -4
  272. esphome/components/ld2410/button/__init__.py +3 -2
  273. esphome/components/ld2410/number/__init__.py +5 -4
  274. esphome/components/ld2410/select/__init__.py +4 -3
  275. esphome/components/ld2410/sensor.py +6 -5
  276. esphome/components/ld2410/switch/__init__.py +2 -1
  277. esphome/components/ld2410/text_sensor.py +3 -2
  278. esphome/components/ld2420/__init__.py +1 -1
  279. esphome/components/ld2420/binary_sensor/__init__.py +4 -3
  280. esphome/components/ld2420/button/__init__.py +3 -2
  281. esphome/components/ld2420/number/__init__.py +3 -2
  282. esphome/components/ld2420/select/__init__.py +1 -0
  283. esphome/components/ld2420/sensor/__init__.py +3 -2
  284. esphome/components/ld2420/text_sensor/__init__.py +2 -6
  285. esphome/components/ld2450/__init__.py +2 -5
  286. esphome/components/ledc/output.py +3 -3
  287. esphome/components/libretiny/text_sensor.py +1 -1
  288. esphome/components/libretiny_pwm/output.py +3 -7
  289. esphome/components/lightwaverf/__init__.py +6 -8
  290. esphome/components/lilygo_t5_47/touchscreen/__init__.py +2 -3
  291. esphome/components/ltr390/sensor.py +1 -1
  292. esphome/components/ltr501/sensor.py +2 -2
  293. esphome/components/ltr_als_ps/sensor.py +2 -2
  294. esphome/components/lvgl/__init__.py +9 -12
  295. esphome/components/lvgl/automation.py +15 -3
  296. esphome/components/lvgl/defines.py +5 -2
  297. esphome/components/lvgl/encoders.py +3 -2
  298. esphome/components/lvgl/lv_validation.py +17 -9
  299. esphome/components/lvgl/lvcode.py +11 -9
  300. esphome/components/lvgl/lvgl_esphome.h +21 -0
  301. esphome/components/lvgl/number/__init__.py +23 -20
  302. esphome/components/lvgl/number/lvgl_number.h +27 -14
  303. esphome/components/lvgl/schemas.py +70 -19
  304. esphome/components/lvgl/select/__init__.py +11 -13
  305. esphome/components/lvgl/select/lvgl_select.h +25 -18
  306. esphome/components/lvgl/styles.py +42 -11
  307. esphome/components/lvgl/switch/__init__.py +13 -8
  308. esphome/components/lvgl/switch/lvgl_switch.h +5 -16
  309. esphome/components/lvgl/trigger.py +10 -1
  310. esphome/components/lvgl/widgets/__init__.py +1 -2
  311. esphome/components/lvgl/widgets/buttonmatrix.py +2 -2
  312. esphome/components/lvgl/widgets/canvas.py +407 -0
  313. esphome/components/lvgl/widgets/line.py +22 -32
  314. esphome/components/lvgl/widgets/meter.py +3 -1
  315. esphome/components/m5stack_8angle/__init__.py +1 -2
  316. esphome/components/m5stack_8angle/binary_sensor/__init__.py +2 -3
  317. esphome/components/m5stack_8angle/light/__init__.py +2 -4
  318. esphome/components/m5stack_8angle/sensor/__init__.py +2 -4
  319. esphome/components/matrix_keypad/binary_sensor/__init__.py +4 -3
  320. esphome/components/max31855/sensor.py +1 -1
  321. esphome/components/max31865/sensor.py +1 -1
  322. esphome/components/max44009/sensor.py +1 -1
  323. esphome/components/max6675/sensor.py +1 -1
  324. esphome/components/max6956/__init__.py +5 -5
  325. esphome/components/max6956/output/__init__.py +4 -3
  326. esphome/components/max7219/display.py +1 -1
  327. esphome/components/max7219digit/display.py +1 -1
  328. esphome/components/max9611/sensor.py +10 -10
  329. esphome/components/mcp23008/__init__.py +1 -1
  330. esphome/components/mcp23016/__init__.py +4 -4
  331. esphome/components/mcp23017/__init__.py +1 -1
  332. esphome/components/mcp23s08/__init__.py +1 -1
  333. esphome/components/mcp23s17/__init__.py +1 -1
  334. esphome/components/mcp23xxx_base/__init__.py +4 -4
  335. esphome/components/mcp2515/canbus.py +2 -2
  336. esphome/components/mcp3008/__init__.py +1 -1
  337. esphome/components/mcp3008/sensor/__init__.py +4 -4
  338. esphome/components/mcp3204/__init__.py +1 -1
  339. esphome/components/mcp3204/sensor/__init__.py +3 -2
  340. esphome/components/mcp4461/__init__.py +42 -0
  341. esphome/components/mcp4461/mcp4461.cpp +618 -0
  342. esphome/components/mcp4461/mcp4461.h +171 -0
  343. esphome/components/mcp4461/output/__init__.py +60 -0
  344. esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
  345. esphome/components/mcp4461/output/mcp4461_output.h +49 -0
  346. esphome/components/mcp4725/output.py +2 -2
  347. esphome/components/mcp4728/__init__.py +1 -1
  348. esphome/components/mcp4728/output/__init__.py +4 -3
  349. esphome/components/mcp47a1/output.py +2 -2
  350. esphome/components/mcp9808/sensor.py +1 -1
  351. esphome/components/mdns/__init__.py +1 -1
  352. esphome/components/mhz19/sensor.py +4 -4
  353. esphome/components/micronova/__init__.py +3 -5
  354. esphome/components/micronova/button/__init__.py +5 -5
  355. esphome/components/micronova/number/__init__.py +6 -10
  356. esphome/components/micronova/sensor/__init__.py +6 -6
  357. esphome/components/micronova/switch/__init__.py +6 -8
  358. esphome/components/micronova/text_sensor/__init__.py +5 -5
  359. esphome/components/microphone/__init__.py +2 -4
  360. esphome/components/midea/climate.py +6 -10
  361. esphome/components/midea_ir/climate.py +1 -1
  362. esphome/components/mitsubishi/climate.py +1 -1
  363. esphome/components/mlx90614/sensor.py +1 -1
  364. esphome/components/mmc5603/sensor.py +4 -4
  365. esphome/components/mmc5983/sensor.py +1 -1
  366. esphome/components/modbus/__init__.py +5 -9
  367. esphome/components/modbus_controller/__init__.py +1 -1
  368. esphome/components/monochromatic/light.py +2 -2
  369. esphome/components/mopeka_ble/__init__.py +1 -1
  370. esphome/components/mopeka_pro_check/sensor.py +12 -12
  371. esphome/components/mopeka_std_check/sensor.py +8 -8
  372. esphome/components/mpl3115a2/sensor.py +1 -1
  373. esphome/components/mpr121/__init__.py +3 -3
  374. esphome/components/mpr121/binary_sensor/__init__.py +5 -4
  375. esphome/components/mpu6050/sensor.py +4 -4
  376. esphome/components/mpu6886/sensor.py +4 -4
  377. esphome/components/mqtt_subscribe/sensor/__init__.py +3 -5
  378. esphome/components/mqtt_subscribe/text_sensor/__init__.py +1 -1
  379. esphome/components/ms5611/sensor.py +2 -2
  380. esphome/components/ms8607/sensor.py +1 -1
  381. esphome/components/my9231/__init__.py +1 -1
  382. esphome/components/my9231/output.py +2 -1
  383. esphome/components/nau7802/nau7802.cpp +0 -4
  384. esphome/components/nau7802/nau7802.h +0 -2
  385. esphome/components/neopixelbus/_methods.py +11 -9
  386. esphome/components/neopixelbus/light.py +11 -18
  387. esphome/components/nextion/binary_sensor/__init__.py +6 -14
  388. esphome/components/nextion/sensor/__init__.py +7 -10
  389. esphome/components/nextion/switch/__init__.py +3 -5
  390. esphome/components/nextion/text_sensor/__init__.py +3 -7
  391. esphome/components/noblex/climate.py +1 -1
  392. esphome/components/ntc/sensor.py +1 -1
  393. esphome/components/opentherm/__init__.py +6 -6
  394. esphome/components/opentherm/input.py +2 -1
  395. esphome/components/opentherm/number/__init__.py +5 -4
  396. esphome/components/opentherm/output/__init__.py +3 -2
  397. esphome/components/opentherm/schema.py +7 -7
  398. esphome/components/opentherm/switch/__init__.py +3 -2
  399. esphome/components/opentherm/validate.py +1 -1
  400. esphome/components/output/__init__.py +2 -3
  401. esphome/components/output/button/__init__.py +3 -2
  402. esphome/components/output/lock/__init__.py +2 -1
  403. esphome/components/output/switch/__init__.py +2 -1
  404. esphome/components/partition/light.py +4 -4
  405. esphome/components/pca6416a/__init__.py +4 -4
  406. esphome/components/pca9554/__init__.py +4 -4
  407. esphome/components/pca9685/__init__.py +2 -2
  408. esphome/components/pca9685/output.py +2 -1
  409. esphome/components/pcf85063/time.py +2 -3
  410. esphome/components/pcf8563/time.py +2 -2
  411. esphome/components/pcf8574/__init__.py +4 -4
  412. esphome/components/pid/climate.py +2 -2
  413. esphome/components/pid/sensor/__init__.py +4 -8
  414. esphome/components/pipsolar/__init__.py +1 -1
  415. esphome/components/pipsolar/binary_sensor/__init__.py +2 -2
  416. esphome/components/pipsolar/output/__init__.py +4 -3
  417. esphome/components/pipsolar/sensor/__init__.py +5 -4
  418. esphome/components/pipsolar/switch/__init__.py +2 -1
  419. esphome/components/pipsolar/text_sensor/__init__.py +2 -1
  420. esphome/components/pm1006/sensor.py +2 -2
  421. esphome/components/pmsa003i/sensor.py +4 -4
  422. esphome/components/pmsx003/sensor.py +10 -11
  423. esphome/components/pmwcs3/sensor.py +5 -5
  424. esphome/components/pn532/__init__.py +3 -3
  425. esphome/components/pn532_i2c/__init__.py +1 -1
  426. esphome/components/pn532_spi/__init__.py +1 -1
  427. esphome/components/pn7150/__init__.py +2 -2
  428. esphome/components/pn7150_i2c/__init__.py +1 -1
  429. esphome/components/pn7160/__init__.py +2 -2
  430. esphome/components/pn7160_i2c/__init__.py +1 -1
  431. esphome/components/pn7160_spi/__init__.py +1 -1
  432. esphome/components/power_supply/__init__.py +1 -1
  433. esphome/components/prometheus/__init__.py +3 -8
  434. esphome/components/psram/__init__.py +75 -11
  435. esphome/components/psram/psram.cpp +18 -7
  436. esphome/components/pulse_counter/sensor.py +4 -4
  437. esphome/components/pulse_meter/sensor.py +3 -3
  438. esphome/components/pulse_width/sensor.py +3 -8
  439. esphome/components/pvvx_mithermometer/display/__init__.py +1 -1
  440. esphome/components/pvvx_mithermometer/sensor.py +3 -3
  441. esphome/components/pylontech/__init__.py +1 -0
  442. esphome/components/pylontech/sensor/__init__.py +8 -13
  443. esphome/components/pylontech/text_sensor/__init__.py +2 -7
  444. esphome/components/pzem004t/sensor.py +3 -3
  445. esphome/components/pzemac/sensor.py +9 -9
  446. esphome/components/pzemdc/sensor.py +6 -6
  447. esphome/components/qmc5883l/sensor.py +5 -5
  448. esphome/components/qmp6988/sensor.py +3 -3
  449. esphome/components/qr_code/__init__.py +1 -1
  450. esphome/components/qspi_dbi/display.py +1 -1
  451. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  452. esphome/components/qspi_dbi/qspi_dbi.h +1 -1
  453. esphome/components/qwiic_pir/binary_sensor.py +2 -5
  454. esphome/components/radon_eye_ble/__init__.py +1 -1
  455. esphome/components/radon_eye_rd200/sensor.py +3 -4
  456. esphome/components/rc522/__init__.py +3 -3
  457. esphome/components/rc522_i2c/__init__.py +1 -1
  458. esphome/components/rc522_spi/__init__.py +1 -1
  459. esphome/components/rdm6300/__init__.py +2 -2
  460. esphome/components/rdm6300/binary_sensor.py +2 -1
  461. esphome/components/resistance/sensor.py +2 -2
  462. esphome/components/restart/button/__init__.py +1 -1
  463. esphome/components/restart/switch/__init__.py +2 -5
  464. esphome/components/rf_bridge/__init__.py +3 -3
  465. esphome/components/rgb/light.py +2 -2
  466. esphome/components/rgbct/light.py +3 -3
  467. esphome/components/rgbw/light.py +2 -2
  468. esphome/components/rgbww/light.py +4 -4
  469. esphome/components/rotary_encoder/sensor.py +8 -8
  470. esphome/components/rp2040_pio/__init__.py +0 -1
  471. esphome/components/rp2040_pio_led_strip/light.py +2 -4
  472. esphome/components/rp2040_pwm/output.py +3 -7
  473. esphome/components/rtttl/__init__.py +6 -6
  474. esphome/components/ruuvi_ble/__init__.py +1 -1
  475. esphome/components/ruuvitag/sensor.py +15 -15
  476. esphome/components/safe_mode/__init__.py +2 -3
  477. esphome/components/safe_mode/button/__init__.py +3 -2
  478. esphome/components/safe_mode/switch/__init__.py +4 -7
  479. esphome/components/scd30/sensor.py +5 -6
  480. esphome/components/scd4x/sensor.py +6 -8
  481. esphome/components/script/__init__.py +2 -2
  482. esphome/components/sdl/display.py +3 -3
  483. esphome/components/sdl/touchscreen/__init__.py +2 -2
  484. esphome/components/sdm_meter/sensor.py +3 -3
  485. esphome/components/sdp3x/sensor.py +1 -2
  486. esphome/components/sds011/sensor.py +4 -4
  487. esphome/components/seeed_mr24hpc1/__init__.py +1 -1
  488. esphome/components/seeed_mr24hpc1/binary_sensor.py +2 -5
  489. esphome/components/seeed_mr24hpc1/button/__init__.py +1 -0
  490. esphome/components/seeed_mr24hpc1/number/__init__.py +2 -4
  491. esphome/components/seeed_mr24hpc1/select/__init__.py +2 -3
  492. esphome/components/seeed_mr24hpc1/sensor.py +1 -0
  493. esphome/components/seeed_mr24hpc1/switch/__init__.py +2 -4
  494. esphome/components/seeed_mr24hpc1/text_sensor.py +1 -0
  495. esphome/components/seeed_mr60bha2/binary_sensor.py +2 -4
  496. esphome/components/seeed_mr60bha2/sensor.py +1 -1
  497. esphome/components/seeed_mr60fda2/button/__init__.py +1 -1
  498. esphome/components/seeed_mr60fda2/select/__init__.py +0 -1
  499. esphome/components/selec_meter/sensor.py +1 -1
  500. esphome/components/sen0321/sensor.py +2 -2
  501. esphome/components/sen21231/sensor.py +1 -1
  502. esphome/components/senseair/sensor.py +3 -3
  503. esphome/components/sensirion_common/__init__.py +0 -2
  504. esphome/components/servo/__init__.py +3 -3
  505. esphome/components/sfa30/sensor.py +4 -5
  506. esphome/components/sgp4x/sensor.py +2 -2
  507. esphome/components/shelly_dimmer/light.py +16 -16
  508. esphome/components/sht3xd/sensor.py +1 -1
  509. esphome/components/sht4x/sensor.py +6 -6
  510. esphome/components/shtcx/sensor.py +1 -1
  511. esphome/components/shutdown/button/__init__.py +2 -6
  512. esphome/components/shutdown/switch/__init__.py +2 -5
  513. esphome/components/sigma_delta_output/output.py +2 -7
  514. esphome/components/sim800l/__init__.py +3 -7
  515. esphome/components/sim800l/binary_sensor.py +3 -5
  516. esphome/components/sim800l/sensor.py +2 -1
  517. esphome/components/slow_pwm/output.py +4 -5
  518. esphome/components/sm10bit_base/__init__.py +2 -6
  519. esphome/components/sm16716/__init__.py +1 -1
  520. esphome/components/sm16716/output.py +2 -1
  521. esphome/components/sm2135/__init__.py +2 -6
  522. esphome/components/sm2135/output.py +2 -1
  523. esphome/components/sm2235/__init__.py +1 -1
  524. esphome/components/sm2235/output.py +2 -1
  525. esphome/components/sm2335/__init__.py +1 -1
  526. esphome/components/sm2335/output.py +2 -1
  527. esphome/components/sm300d2/sensor.py +13 -13
  528. esphome/components/sml/__init__.py +1 -1
  529. esphome/components/sml/sensor/__init__.py +1 -1
  530. esphome/components/sml/sml.cpp +8 -6
  531. esphome/components/sml/sml.h +1 -1
  532. esphome/components/sml/sml_parser.cpp +16 -18
  533. esphome/components/sml/sml_parser.h +42 -12
  534. esphome/components/sml/text_sensor/__init__.py +1 -1
  535. esphome/components/smt100/sensor.py +5 -6
  536. esphome/components/sn74hc165/__init__.py +5 -5
  537. esphome/components/sn74hc595/__init__.py +5 -5
  538. esphome/components/socket/__init__.py +1 -1
  539. esphome/components/sonoff_d1/light.py +2 -6
  540. esphome/components/speaker/media_player/audio_pipeline.cpp +3 -2
  541. esphome/components/speaker/media_player/speaker_media_player.cpp +47 -12
  542. esphome/components/speed/fan/__init__.py +2 -2
  543. esphome/components/spi/__init__.py +45 -36
  544. esphome/components/spi/spi.h +1 -0
  545. esphome/components/spi/spi_esp_idf.cpp +13 -5
  546. esphome/components/sprinkler/__init__.py +4 -5
  547. esphome/components/sps30/sensor.py +8 -8
  548. esphome/components/ssd1306_i2c/display.py +2 -2
  549. esphome/components/ssd1322_base/__init__.py +2 -2
  550. esphome/components/ssd1325_base/__init__.py +2 -2
  551. esphome/components/ssd1327_base/__init__.py +2 -2
  552. esphome/components/ssd1327_i2c/display.py +1 -1
  553. esphome/components/ssd1331_base/__init__.py +2 -2
  554. esphome/components/ssd1351_base/__init__.py +2 -2
  555. esphome/components/st7567_base/__init__.py +4 -4
  556. esphome/components/st7567_i2c/display.py +1 -1
  557. esphome/components/st7920/display.py +2 -2
  558. esphome/components/statsd/__init__.py +3 -3
  559. esphome/components/status/binary_sensor.py +2 -5
  560. esphome/components/status_led/__init__.py +1 -1
  561. esphome/components/status_led/light/__init__.py +2 -1
  562. esphome/components/stepper/__init__.py +2 -2
  563. esphome/components/sts3x/sensor.py +1 -1
  564. esphome/components/substitutions/__init__.py +2 -2
  565. esphome/components/sun/__init__.py +4 -4
  566. esphome/components/sun/sensor/__init__.py +4 -7
  567. esphome/components/sun/text_sensor/__init__.py +5 -4
  568. esphome/components/sun_gtil2/__init__.py +1 -1
  569. esphome/components/sun_gtil2/sensor.py +7 -6
  570. esphome/components/sun_gtil2/text_sensor.py +3 -2
  571. esphome/components/sx1509/__init__.py +5 -5
  572. esphome/components/sx1509/binary_sensor/__init__.py +3 -3
  573. esphome/components/sx1509/output/__init__.py +4 -3
  574. esphome/components/t6615/sensor.py +1 -1
  575. esphome/components/tca9548a/__init__.py +1 -1
  576. esphome/components/tcl112/climate.py +1 -1
  577. esphome/components/tcs34725/sensor.py +4 -4
  578. esphome/components/tee501/sensor.py +1 -1
  579. esphome/components/teleinfo/__init__.py +1 -1
  580. esphome/components/teleinfo/sensor/__init__.py +1 -7
  581. esphome/components/teleinfo/text_sensor/__init__.py +1 -1
  582. esphome/components/tem3200/sensor.py +1 -2
  583. esphome/components/template/alarm_control_panel/__init__.py +3 -10
  584. esphome/components/template/cover/__init__.py +4 -3
  585. esphome/components/template/datetime/__init__.py +8 -9
  586. esphome/components/template/event/__init__.py +2 -5
  587. esphome/components/template/fan/__init__.py +2 -6
  588. esphome/components/template/lock/__init__.py +3 -2
  589. esphome/components/template/number/__init__.py +3 -2
  590. esphome/components/template/output/__init__.py +4 -3
  591. esphome/components/template/select/__init__.py +3 -2
  592. esphome/components/template/sensor/__init__.py +4 -7
  593. esphome/components/template/switch/__init__.py +3 -2
  594. esphome/components/template/text/__init__.py +4 -3
  595. esphome/components/template/text_sensor/__init__.py +3 -2
  596. esphome/components/template/valve/__init__.py +3 -2
  597. esphome/components/time/real_time_clock.cpp +0 -4
  598. esphome/components/time/real_time_clock.h +4 -3
  599. esphome/components/time_based/cover.py +3 -3
  600. esphome/components/tlc59208f/__init__.py +1 -1
  601. esphome/components/tlc59208f/output.py +2 -1
  602. esphome/components/tlc5947/__init__.py +1 -1
  603. esphome/components/tlc5947/output/__init__.py +2 -1
  604. esphome/components/tlc5971/__init__.py +2 -8
  605. esphome/components/tlc5971/output/__init__.py +2 -1
  606. esphome/components/tm1621/display.py +3 -3
  607. esphome/components/tm1637/binary_sensor.py +1 -1
  608. esphome/components/tm1637/display.py +3 -3
  609. esphome/components/tm1651/__init__.py +4 -4
  610. esphome/components/tmp102/sensor.py +1 -1
  611. esphome/components/tmp1075/sensor.py +2 -2
  612. esphome/components/tmp117/sensor.py +1 -1
  613. esphome/components/tof10120/sensor.py +2 -2
  614. esphome/components/tormatic/cover.py +2 -6
  615. esphome/components/toshiba/climate.py +1 -1
  616. esphome/components/total_daily_energy/sensor.py +4 -4
  617. esphome/components/tsl2561/sensor.py +1 -1
  618. esphome/components/tsl2591/sensor.py +9 -9
  619. esphome/components/tt21100/binary_sensor/__init__.py +2 -2
  620. esphome/components/tt21100/touchscreen/__init__.py +2 -3
  621. esphome/components/ttp229_bsf/__init__.py +2 -2
  622. esphome/components/ttp229_bsf/binary_sensor.py +3 -2
  623. esphome/components/ttp229_lsf/__init__.py +1 -1
  624. esphome/components/ttp229_lsf/binary_sensor.py +3 -2
  625. esphome/components/tuya/__init__.py +3 -5
  626. esphome/components/tuya/binary_sensor/__init__.py +2 -2
  627. esphome/components/tuya/climate/__init__.py +6 -5
  628. esphome/components/tuya/cover/__init__.py +5 -4
  629. esphome/components/tuya/fan/__init__.py +3 -2
  630. esphome/components/tuya/light/__init__.py +9 -8
  631. esphome/components/tuya/number/__init__.py +6 -5
  632. esphome/components/tuya/select/__init__.py +4 -3
  633. esphome/components/tuya/sensor/__init__.py +3 -2
  634. esphome/components/tuya/switch/__init__.py +3 -2
  635. esphome/components/tuya/text_sensor/__init__.py +3 -2
  636. esphome/components/tx20/sensor.py +6 -6
  637. esphome/components/uart/__init__.py +20 -19
  638. esphome/components/uart/button/__init__.py +2 -1
  639. esphome/components/uart/switch/__init__.py +2 -1
  640. esphome/components/ufire_ise/sensor.py +2 -2
  641. esphome/components/uln2003/stepper.py +2 -2
  642. esphome/components/ultrasonic/sensor.py +4 -4
  643. esphome/components/uponor_smatrix/__init__.py +2 -6
  644. esphome/components/uponor_smatrix/climate/__init__.py +3 -3
  645. esphome/components/vbus/__init__.py +1 -1
  646. esphome/components/vbus/binary_sensor/__init__.py +7 -6
  647. esphome/components/vbus/sensor/__init__.py +7 -6
  648. esphome/components/veml3235/sensor.py +1 -1
  649. esphome/components/veml7700/sensor.py +1 -1
  650. esphome/components/version/text_sensor.py +2 -6
  651. esphome/components/vl53l0x/sensor.py +6 -6
  652. esphome/components/web_server_base/__init__.py +2 -2
  653. esphome/components/web_server_idf/__init__.py +1 -1
  654. esphome/components/weikai/__init__.py +1 -1
  655. esphome/components/whirlpool/climate.py +1 -1
  656. esphome/components/whynter/climate.py +1 -1
  657. esphome/components/wireguard/binary_sensor.py +1 -1
  658. esphome/components/wireguard/sensor.py +2 -5
  659. esphome/components/wireguard/text_sensor.py +2 -5
  660. esphome/components/wk2132_i2c/__init__.py +1 -1
  661. esphome/components/wk2132_spi/__init__.py +1 -2
  662. esphome/components/wk2168_i2c/__init__.py +3 -8
  663. esphome/components/wk2168_spi/__init__.py +3 -8
  664. esphome/components/wk2204_i2c/__init__.py +1 -1
  665. esphome/components/wk2204_spi/__init__.py +1 -1
  666. esphome/components/wk2212_i2c/__init__.py +3 -8
  667. esphome/components/wk2212_spi/__init__.py +3 -8
  668. esphome/components/wl_134/text_sensor.py +2 -4
  669. esphome/components/wled/__init__.py +2 -2
  670. esphome/components/x9c/output.py +4 -4
  671. esphome/components/xgzp68xx/sensor.py +5 -5
  672. esphome/components/xiaomi_ble/__init__.py +1 -1
  673. esphome/components/xiaomi_cgd1/sensor.py +3 -3
  674. esphome/components/xiaomi_cgdk2/sensor.py +3 -3
  675. esphome/components/xiaomi_cgg1/sensor.py +2 -2
  676. esphome/components/xiaomi_cgpr1/binary_sensor.py +6 -6
  677. esphome/components/xiaomi_gcls002/sensor.py +7 -7
  678. esphome/components/xiaomi_hhccjcy01/sensor.py +9 -9
  679. esphome/components/xiaomi_hhccjcy10/sensor.py +9 -9
  680. esphome/components/xiaomi_hhccpot002/sensor.py +7 -7
  681. esphome/components/xiaomi_jqjcy01ym/sensor.py +6 -6
  682. esphome/components/xiaomi_lywsd02/sensor.py +4 -4
  683. esphome/components/xiaomi_lywsd02mmc/sensor.py +5 -5
  684. esphome/components/xiaomi_lywsd03mmc/sensor.py +6 -6
  685. esphome/components/xiaomi_lywsdcgq/sensor.py +5 -5
  686. esphome/components/xiaomi_mhoc303/sensor.py +4 -4
  687. esphome/components/xiaomi_mhoc401/sensor.py +6 -6
  688. esphome/components/xiaomi_miscale/sensor.py +6 -6
  689. esphome/components/xiaomi_mjyd02yla/binary_sensor.py +8 -8
  690. esphome/components/xiaomi_mue4094rt/binary_sensor.py +2 -7
  691. esphome/components/xiaomi_rtcgq02lm/__init__.py +2 -3
  692. esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +3 -3
  693. esphome/components/xiaomi_rtcgq02lm/sensor.py +3 -3
  694. esphome/components/xiaomi_wx08zm/binary_sensor.py +2 -3
  695. esphome/components/xl9535/__init__.py +2 -2
  696. esphome/components/yashima/climate.py +1 -1
  697. esphome/components/zhlt01/climate.py +1 -1
  698. esphome/components/zio_ultrasonic/sensor.py +2 -5
  699. esphome/components/zyaura/sensor.py +7 -7
  700. esphome/config_validation.py +0 -42
  701. esphome/const.py +3 -1
  702. esphome/core/__init__.py +0 -1
  703. esphome/core/component.cpp +3 -1
  704. esphome/core/component.h +15 -2
  705. esphome/core/config.py +4 -0
  706. esphome/core/defines.h +21 -0
  707. esphome/core/helpers.cpp +6 -7
  708. esphome/core/scheduler.cpp +34 -67
  709. esphome/core/scheduler.h +7 -17
  710. esphome/dashboard/status/mqtt.py +0 -2
  711. esphome/vscode.py +27 -8
  712. esphome/yaml_util.py +75 -39
  713. {esphome-2025.3.2.dist-info → esphome-2025.4.0.dist-info}/METADATA +45 -44
  714. {esphome-2025.3.2.dist-info → esphome-2025.4.0.dist-info}/RECORD +718 -711
  715. {esphome-2025.3.2.dist-info → esphome-2025.4.0.dist-info}/WHEEL +1 -1
  716. {esphome-2025.3.2.dist-info → esphome-2025.4.0.dist-info}/entry_points.txt +0 -0
  717. {esphome-2025.3.2.dist-info → esphome-2025.4.0.dist-info/licenses}/LICENSE +0 -0
  718. {esphome-2025.3.2.dist-info → esphome-2025.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,171 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/core/log.h"
5
+ #include "esphome/components/i2c/i2c.h"
6
+
7
+ namespace esphome {
8
+ namespace mcp4461 {
9
+
10
+ struct WiperState {
11
+ bool enabled = true;
12
+ uint16_t state = 0;
13
+ optional<float> initial_value;
14
+ bool terminal_a = true;
15
+ bool terminal_b = true;
16
+ bool terminal_w = true;
17
+ bool terminal_hw = true;
18
+ bool wiper_lock_active = false;
19
+ bool update_level = false;
20
+ bool update_terminal = false;
21
+ };
22
+
23
+ // default wiper state is 128 / 0x80h
24
+ enum class Mcp4461Commands : uint8_t { WRITE = 0x00, INCREMENT = 0x04, DECREMENT = 0x08, READ = 0x0C };
25
+
26
+ enum class Mcp4461Addresses : uint8_t {
27
+ MCP4461_VW0 = 0x00,
28
+ MCP4461_VW1 = 0x10,
29
+ MCP4461_VW2 = 0x60,
30
+ MCP4461_VW3 = 0x70,
31
+ MCP4461_STATUS = 0x50,
32
+ MCP4461_TCON0 = 0x40,
33
+ MCP4461_TCON1 = 0xA0,
34
+ MCP4461_EEPROM_1 = 0xB0
35
+ };
36
+
37
+ enum class Mcp4461WiperIdx : uint8_t {
38
+ MCP4461_WIPER_0 = 0,
39
+ MCP4461_WIPER_1 = 1,
40
+ MCP4461_WIPER_2 = 2,
41
+ MCP4461_WIPER_3 = 3,
42
+ MCP4461_WIPER_4 = 4,
43
+ MCP4461_WIPER_5 = 5,
44
+ MCP4461_WIPER_6 = 6,
45
+ MCP4461_WIPER_7 = 7
46
+ };
47
+
48
+ enum class Mcp4461EepromLocation : uint8_t {
49
+ MCP4461_EEPROM_0 = 0,
50
+ MCP4461_EEPROM_1 = 1,
51
+ MCP4461_EEPROM_2 = 2,
52
+ MCP4461_EEPROM_3 = 3,
53
+ MCP4461_EEPROM_4 = 4
54
+ };
55
+
56
+ enum class Mcp4461TerminalIdx : uint8_t { MCP4461_TERMINAL_0 = 0, MCP4461_TERMINAL_1 = 1 };
57
+
58
+ class Mcp4461Wiper;
59
+
60
+ // Mcp4461Component
61
+ class Mcp4461Component : public Component, public i2c::I2CDevice {
62
+ public:
63
+ Mcp4461Component(bool disable_wiper_0, bool disable_wiper_1, bool disable_wiper_2, bool disable_wiper_3)
64
+ : wiper_0_disabled_(disable_wiper_0),
65
+ wiper_1_disabled_(disable_wiper_1),
66
+ wiper_2_disabled_(disable_wiper_2),
67
+ wiper_3_disabled_(disable_wiper_3) {
68
+ this->reg_[0].enabled = !wiper_0_disabled_;
69
+ this->reg_[1].enabled = !wiper_1_disabled_;
70
+ this->reg_[2].enabled = !wiper_2_disabled_;
71
+ this->reg_[3].enabled = !wiper_3_disabled_;
72
+ }
73
+
74
+ void setup() override;
75
+ void dump_config() override;
76
+ float get_setup_priority() const override { return setup_priority::HARDWARE; }
77
+ void loop() override;
78
+ /// @brief get eeprom value from location
79
+ /// @param[in] location - eeprom location 0-4
80
+ /// @return eeprom value of specified location (9 bits max)
81
+ uint16_t get_eeprom_value(Mcp4461EepromLocation location);
82
+ /// @brief set eeprom value at specified location
83
+ /// @param[in] location - eeprom location 0-4
84
+ /// @param[in] value - 9 bits value to store
85
+ bool set_eeprom_value(Mcp4461EepromLocation location, uint16_t value);
86
+ /// @brief public function used to set initial value
87
+ /// @param[in] wiper - the wiper to set the value for
88
+ /// @param[in] initial_value - the initial value in range 0-1.0 as float
89
+ void set_initial_value(Mcp4461WiperIdx wiper, float initial_value);
90
+ /// @brief public function used to set disable terminal config
91
+ /// @param[in] wiper - the wiper to set the value for
92
+ /// @param[in] terminal - the terminal to disable, one of ['a','b','w','h']
93
+ void initialize_terminal_disabled(Mcp4461WiperIdx wiper, char terminal);
94
+ /// @brief read status register to log
95
+ void read_status_register_to_log();
96
+
97
+ protected:
98
+ friend class Mcp4461Wiper;
99
+ void update_write_protection_status_();
100
+ uint8_t get_wiper_address_(uint8_t wiper);
101
+ uint16_t read_wiper_level_(uint8_t wiper);
102
+ uint8_t get_status_register_();
103
+ uint16_t get_wiper_level_(Mcp4461WiperIdx wiper);
104
+ bool set_wiper_level_(Mcp4461WiperIdx wiper, uint16_t value);
105
+ bool update_wiper_level_(Mcp4461WiperIdx wiper);
106
+ void enable_wiper_(Mcp4461WiperIdx wiper);
107
+ void disable_wiper_(Mcp4461WiperIdx wiper);
108
+ bool increase_wiper_(Mcp4461WiperIdx wiper);
109
+ bool decrease_wiper_(Mcp4461WiperIdx wiper);
110
+ void enable_terminal_(Mcp4461WiperIdx wiper, char terminal);
111
+ void disable_terminal_(Mcp4461WiperIdx, char terminal);
112
+ bool is_writing_();
113
+ bool is_eeprom_ready_for_writing_(bool wait_if_not_ready);
114
+ void write_wiper_level_(uint8_t wiper, uint16_t value);
115
+ bool mcp4461_write_(uint8_t addr, uint16_t data, bool nonvolatile = false);
116
+ uint8_t calc_terminal_connector_byte_(Mcp4461TerminalIdx terminal_connector);
117
+ void update_terminal_register_(Mcp4461TerminalIdx terminal_connector);
118
+ uint8_t get_terminal_register_(Mcp4461TerminalIdx terminal_connector);
119
+ bool set_terminal_register_(Mcp4461TerminalIdx terminal_connector, uint8_t data);
120
+
121
+ // Converts a status to a human readable string
122
+ static const LogString *get_message_string(int status) {
123
+ switch (status) {
124
+ case MCP4461_STATUS_I2C_ERROR:
125
+ return LOG_STR("I2C error - communication with MCP4461 failed!");
126
+ case MCP4461_STATUS_REGISTER_ERROR:
127
+ return LOG_STR("Status register could not be read");
128
+ case MCP4461_STATUS_REGISTER_INVALID:
129
+ return LOG_STR("Invalid status register value - bits 1,7 or 8 are 0");
130
+ case MCP4461_VALUE_INVALID:
131
+ return LOG_STR("Invalid value for wiper given");
132
+ case MCP4461_WRITE_PROTECTED:
133
+ return LOG_STR("MCP4461 is write protected. Setting nonvolatile wipers/eeprom values is prohibited.");
134
+ case MCP4461_WIPER_ENABLED:
135
+ return LOG_STR("MCP4461 Wiper is already enabled, ignoring cmd to enable.");
136
+ case MCP4461_WIPER_DISABLED:
137
+ return LOG_STR("MCP4461 Wiper is disabled. All actions on this wiper are prohibited.");
138
+ case MCP4461_WIPER_LOCKED:
139
+ return LOG_STR("MCP4461 Wiper is locked using WiperLock-technology. All actions on this wiper are prohibited.");
140
+ case MCP4461_STATUS_OK:
141
+ return LOG_STR("Status OK");
142
+ default:
143
+ return LOG_STR("Unknown");
144
+ }
145
+ }
146
+
147
+ enum ErrorCode {
148
+ MCP4461_STATUS_OK = 0, // CMD completed successfully
149
+ MCP4461_FAILED, // component failed
150
+ MCP4461_STATUS_I2C_ERROR, // Unable to communicate with device
151
+ MCP4461_STATUS_REGISTER_INVALID, // Status register value was invalid
152
+ MCP4461_STATUS_REGISTER_ERROR, // Error fetching status register
153
+ MCP4461_PROHIBITED_FOR_NONVOLATILE, //
154
+ MCP4461_VALUE_INVALID, // Invalid value given for wiper / eeprom
155
+ MCP4461_WRITE_PROTECTED, // The value was read, but the CRC over the payload (valid and data) does not match
156
+ MCP4461_WIPER_ENABLED, // The wiper is enabled, discard additional enabling actions
157
+ MCP4461_WIPER_DISABLED, // The wiper is disabled - all actions for this wiper will be aborted/discarded
158
+ MCP4461_WIPER_LOCKED, // The wiper is locked using WiperLock-technology - all actions for this wiper will be
159
+ // aborted/discarded
160
+ } error_code_{MCP4461_STATUS_OK};
161
+
162
+ WiperState reg_[8];
163
+ bool last_eeprom_write_timed_out_{false};
164
+ bool write_protected_{false};
165
+ bool wiper_0_disabled_{false};
166
+ bool wiper_1_disabled_{false};
167
+ bool wiper_2_disabled_{false};
168
+ bool wiper_3_disabled_{false};
169
+ };
170
+ } // namespace mcp4461
171
+ } // namespace esphome
@@ -0,0 +1,60 @@
1
+ import esphome.codegen as cg
2
+ import esphome.config_validation as cv
3
+ from esphome.components import output
4
+ from esphome.const import CONF_CHANNEL, CONF_ID, CONF_INITIAL_VALUE
5
+ from .. import Mcp4461Component, CONF_MCP4461_ID, mcp4461_ns
6
+
7
+ DEPENDENCIES = ["mcp4461"]
8
+
9
+ Mcp4461Wiper = mcp4461_ns.class_(
10
+ "Mcp4461Wiper", output.FloatOutput, cg.Parented.template(Mcp4461Component)
11
+ )
12
+
13
+ Mcp4461WiperIdx = mcp4461_ns.enum("Mcp4461WiperIdx", is_class=True)
14
+ CHANNEL_OPTIONS = {
15
+ "A": Mcp4461WiperIdx.MCP4461_WIPER_0,
16
+ "B": Mcp4461WiperIdx.MCP4461_WIPER_1,
17
+ "C": Mcp4461WiperIdx.MCP4461_WIPER_2,
18
+ "D": Mcp4461WiperIdx.MCP4461_WIPER_3,
19
+ "E": Mcp4461WiperIdx.MCP4461_WIPER_4,
20
+ "F": Mcp4461WiperIdx.MCP4461_WIPER_5,
21
+ "G": Mcp4461WiperIdx.MCP4461_WIPER_6,
22
+ "H": Mcp4461WiperIdx.MCP4461_WIPER_7,
23
+ }
24
+
25
+ CONF_TERMINAL_A = "terminal_a"
26
+ CONF_TERMINAL_B = "terminal_b"
27
+ CONF_TERMINAL_W = "terminal_w"
28
+
29
+ CONFIG_SCHEMA = output.FLOAT_OUTPUT_SCHEMA.extend(
30
+ {
31
+ cv.Required(CONF_ID): cv.declare_id(Mcp4461Wiper),
32
+ cv.GenerateID(CONF_MCP4461_ID): cv.use_id(Mcp4461Component),
33
+ cv.Required(CONF_CHANNEL): cv.enum(CHANNEL_OPTIONS, upper=True),
34
+ cv.Optional(CONF_TERMINAL_A, default=True): cv.boolean,
35
+ cv.Optional(CONF_TERMINAL_B, default=True): cv.boolean,
36
+ cv.Optional(CONF_TERMINAL_W, default=True): cv.boolean,
37
+ cv.Optional(CONF_INITIAL_VALUE): cv.float_range(min=0.0, max=1.0),
38
+ }
39
+ )
40
+
41
+
42
+ async def to_code(config):
43
+ parent = await cg.get_variable(config[CONF_MCP4461_ID])
44
+ var = cg.new_Pvariable(
45
+ config[CONF_ID],
46
+ parent,
47
+ config[CONF_CHANNEL],
48
+ )
49
+ if not config[CONF_TERMINAL_A]:
50
+ cg.add(parent.initialize_terminal_disabled(config[CONF_CHANNEL], "a"))
51
+ if not config[CONF_TERMINAL_B]:
52
+ cg.add(parent.initialize_terminal_disabled(config[CONF_CHANNEL], "b"))
53
+ if not config[CONF_TERMINAL_W]:
54
+ cg.add(parent.initialize_terminal_disabled(config[CONF_CHANNEL], "w"))
55
+ if CONF_INITIAL_VALUE in config:
56
+ cg.add(
57
+ parent.set_initial_value(config[CONF_CHANNEL], config[CONF_INITIAL_VALUE])
58
+ )
59
+ await output.register_output(var, config)
60
+ await cg.register_parented(var, config[CONF_MCP4461_ID])
@@ -0,0 +1,73 @@
1
+ #include "mcp4461_output.h"
2
+ #include <cmath>
3
+
4
+ #include "esphome/core/helpers.h"
5
+ #include "esphome/core/log.h"
6
+
7
+ namespace esphome {
8
+ namespace mcp4461 {
9
+
10
+ static const char *const TAG = "mcp4461.output";
11
+
12
+ // public set_level function
13
+ void Mcp4461Wiper::set_level(float state) {
14
+ if (!std::isfinite(state)) {
15
+ ESP_LOGW(TAG, "Finite state state value is required.");
16
+ return;
17
+ }
18
+ state = clamp(state, 0.0f, 1.0f);
19
+ if (this->is_inverted()) {
20
+ state = 1.0f - state;
21
+ }
22
+ this->write_state(state);
23
+ }
24
+
25
+ // floats from other components (like light etc.) are passed as "percentage floats"
26
+ // this function converts them to the 0 - 256 range used by the MCP4461
27
+ void Mcp4461Wiper::write_state(float state) {
28
+ if (this->parent_->set_wiper_level_(this->wiper_, static_cast<uint16_t>(std::roundf(state * 256)))) {
29
+ this->state_ = state;
30
+ }
31
+ }
32
+
33
+ float Mcp4461Wiper::read_state() { return (static_cast<float>(this->parent_->get_wiper_level_(this->wiper_)) / 256.0); }
34
+
35
+ float Mcp4461Wiper::update_state() {
36
+ this->state_ = this->read_state();
37
+ return this->state_;
38
+ }
39
+
40
+ void Mcp4461Wiper::set_state(bool state) {
41
+ if (state) {
42
+ this->turn_on();
43
+ } else {
44
+ this->turn_off();
45
+ }
46
+ }
47
+
48
+ void Mcp4461Wiper::turn_on() { this->parent_->enable_wiper_(this->wiper_); }
49
+
50
+ void Mcp4461Wiper::turn_off() { this->parent_->disable_wiper_(this->wiper_); }
51
+
52
+ void Mcp4461Wiper::increase_wiper() {
53
+ if (this->parent_->increase_wiper_(this->wiper_)) {
54
+ this->state_ = this->update_state();
55
+ ESP_LOGV(TAG, "Increased wiper %u to %u", static_cast<uint8_t>(this->wiper_),
56
+ static_cast<uint16_t>(std::roundf(this->state_ * 256)));
57
+ }
58
+ }
59
+
60
+ void Mcp4461Wiper::decrease_wiper() {
61
+ if (this->parent_->decrease_wiper_(this->wiper_)) {
62
+ this->state_ = this->update_state();
63
+ ESP_LOGV(TAG, "Decreased wiper %u to %u", static_cast<uint8_t>(this->wiper_),
64
+ static_cast<uint16_t>(std::roundf(this->state_ * 256)));
65
+ }
66
+ }
67
+
68
+ void Mcp4461Wiper::enable_terminal(char terminal) { this->parent_->enable_terminal_(this->wiper_, terminal); }
69
+
70
+ void Mcp4461Wiper::disable_terminal(char terminal) { this->parent_->disable_terminal_(this->wiper_, terminal); }
71
+
72
+ } // namespace mcp4461
73
+ } // namespace esphome
@@ -0,0 +1,49 @@
1
+ #pragma once
2
+
3
+ #include "../mcp4461.h"
4
+ #include "esphome/core/component.h"
5
+ #include "esphome/components/output/float_output.h"
6
+ #include "esphome/components/i2c/i2c.h"
7
+
8
+ namespace esphome {
9
+ namespace mcp4461 {
10
+
11
+ class Mcp4461Wiper : public output::FloatOutput, public Parented<Mcp4461Component> {
12
+ public:
13
+ Mcp4461Wiper(Mcp4461Component *parent, Mcp4461WiperIdx wiper) : parent_(parent), wiper_(wiper) {}
14
+ /// @brief Set level of wiper
15
+ /// @param[in] state - The desired float level in range 0-1.0
16
+ void set_level(float state);
17
+ /// @brief Enables/Disables current output using bool parameter
18
+ /// @param[in] state boolean var representing desired state (true=ON, false=OFF)
19
+ void set_state(bool state) override;
20
+ /// @brief Enables current output
21
+ void turn_on() override;
22
+ /// @brief Disables current output
23
+ void turn_off() override;
24
+ /// @brief Read current device wiper state without updating internal output state
25
+ /// @return float - current device state as float in range 0 - 1.0
26
+ float read_state();
27
+ /// @brief Update current output state using device wiper state
28
+ /// @return float - current updated output state as float in range 0 - 1.0
29
+ float update_state();
30
+ /// @brief Increase wiper by 1 tap
31
+ void increase_wiper();
32
+ /// @brief Decrease wiper by 1 tap
33
+ void decrease_wiper();
34
+ /// @brief Enable given terminal
35
+ /// @param[in] terminal single char parameter defining desired terminal to enable, one of { 'a', 'b', 'w', 'h' }
36
+ void enable_terminal(char terminal);
37
+ /// @brief Disable given terminal
38
+ /// @param[in] terminal single char parameter defining desired terminal to disable, one of { 'a', 'b', 'w', 'h' }
39
+ void disable_terminal(char terminal);
40
+
41
+ protected:
42
+ void write_state(float state) override;
43
+ Mcp4461Component *parent_;
44
+ Mcp4461WiperIdx wiper_;
45
+ float state_;
46
+ };
47
+
48
+ } // namespace mcp4461
49
+ } // namespace esphome
@@ -1,6 +1,6 @@
1
- import esphome.config_validation as cv
2
1
  import esphome.codegen as cg
3
- from esphome.components import output, i2c
2
+ from esphome.components import i2c, output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  DEPENDENCIES = ["i2c"]
@@ -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
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  CODEOWNERS = ["@berfenger"]
@@ -1,8 +1,9 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import output
4
- from esphome.const import CONF_CHANNEL, CONF_ID, CONF_GAIN
5
- from .. import MCP4728Component, CONF_MCP4728_ID, mcp4728_ns
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_CHANNEL, CONF_GAIN, CONF_ID
5
+
6
+ from .. import CONF_MCP4728_ID, MCP4728Component, mcp4728_ns
6
7
 
7
8
  DEPENDENCIES = ["mcp4728"]
8
9
 
@@ -1,6 +1,6 @@
1
- import esphome.config_validation as cv
2
1
  import esphome.codegen as cg
3
- from esphome.components import output, i2c
2
+ from esphome.components import i2c, output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  CODEOWNERS = ["@jesserockz"]
@@ -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
  DEVICE_CLASS_TEMPERATURE,
6
6
  STATE_CLASS_MEASUREMENT,
@@ -91,7 +91,7 @@ async def to_code(config):
91
91
  add_idf_component(
92
92
  name="mdns",
93
93
  repo="https://github.com/espressif/esp-protocols.git",
94
- ref="mdns-v1.8.0",
94
+ ref="mdns-v1.8.2",
95
95
  path="components/mdns",
96
96
  )
97
97
 
@@ -1,18 +1,18 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
4
2
  from esphome.automation import maybe_simple_id
3
+ import esphome.codegen as cg
5
4
  from esphome.components import sensor, uart
5
+ import esphome.config_validation as cv
6
6
  from esphome.const import (
7
7
  CONF_CO2,
8
8
  CONF_ID,
9
9
  CONF_TEMPERATURE,
10
- DEVICE_CLASS_TEMPERATURE,
11
10
  DEVICE_CLASS_CARBON_DIOXIDE,
11
+ DEVICE_CLASS_TEMPERATURE,
12
12
  ICON_MOLECULE_CO2,
13
13
  STATE_CLASS_MEASUREMENT,
14
- UNIT_PARTS_PER_MILLION,
15
14
  UNIT_CELSIUS,
15
+ UNIT_PARTS_PER_MILLION,
16
16
  )
17
17
 
18
18
  DEPENDENCIES = ["uart"]
@@ -1,10 +1,8 @@
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 uart
5
- from esphome.const import (
6
- CONF_ID,
7
- )
4
+ import esphome.config_validation as cv
5
+ from esphome.const import CONF_ID
8
6
 
9
7
  CODEOWNERS = ["@jorre05"]
10
8
 
@@ -1,14 +1,14 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import button
3
+ import esphome.config_validation as cv
4
4
 
5
5
  from .. import (
6
- MicroNova,
7
- MicroNovaFunctions,
8
- CONF_MICRONOVA_ID,
9
- CONF_MEMORY_LOCATION,
10
6
  CONF_MEMORY_ADDRESS,
7
+ CONF_MEMORY_LOCATION,
8
+ CONF_MICRONOVA_ID,
11
9
  MICRONOVA_LISTENER_SCHEMA,
10
+ MicroNova,
11
+ MicroNovaFunctions,
12
12
  micronova_ns,
13
13
  )
14
14
 
@@ -1,19 +1,15 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import number
4
- from esphome.const import (
5
- DEVICE_CLASS_TEMPERATURE,
6
- UNIT_CELSIUS,
7
- CONF_STEP,
8
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_STEP, DEVICE_CLASS_TEMPERATURE, UNIT_CELSIUS
9
5
 
10
6
  from .. import (
11
- MicroNova,
12
- MicroNovaFunctions,
13
- CONF_MICRONOVA_ID,
14
- CONF_MEMORY_LOCATION,
15
7
  CONF_MEMORY_ADDRESS,
8
+ CONF_MEMORY_LOCATION,
9
+ CONF_MICRONOVA_ID,
16
10
  MICRONOVA_LISTENER_SCHEMA,
11
+ MicroNova,
12
+ MicroNovaFunctions,
17
13
  micronova_ns,
18
14
  )
19
15
 
@@ -1,21 +1,21 @@
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
- DEVICE_CLASS_TEMPERATURE,
6
5
  DEVICE_CLASS_PRESSURE,
6
+ DEVICE_CLASS_TEMPERATURE,
7
7
  STATE_CLASS_MEASUREMENT,
8
8
  UNIT_CELSIUS,
9
9
  UNIT_REVOLUTIONS_PER_MINUTE,
10
10
  )
11
11
 
12
12
  from .. import (
13
- MicroNova,
14
- MicroNovaFunctions,
15
- CONF_MICRONOVA_ID,
16
- CONF_MEMORY_LOCATION,
17
13
  CONF_MEMORY_ADDRESS,
14
+ CONF_MEMORY_LOCATION,
15
+ CONF_MICRONOVA_ID,
18
16
  MICRONOVA_LISTENER_SCHEMA,
17
+ MicroNova,
18
+ MicroNovaFunctions,
19
19
  micronova_ns,
20
20
  )
21
21
 
@@ -1,17 +1,15 @@
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
- ICON_POWER,
6
- )
3
+ import esphome.config_validation as cv
4
+ from esphome.const import ICON_POWER
7
5
 
8
6
  from .. import (
9
- MicroNova,
10
- MicroNovaFunctions,
11
- CONF_MICRONOVA_ID,
12
- CONF_MEMORY_LOCATION,
13
7
  CONF_MEMORY_ADDRESS,
8
+ CONF_MEMORY_LOCATION,
9
+ CONF_MICRONOVA_ID,
14
10
  MICRONOVA_LISTENER_SCHEMA,
11
+ MicroNova,
12
+ MicroNovaFunctions,
15
13
  micronova_ns,
16
14
  )
17
15
 
@@ -1,14 +1,14 @@
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
 
5
5
  from .. import (
6
- MicroNova,
7
- MicroNovaFunctions,
8
- CONF_MICRONOVA_ID,
9
- CONF_MEMORY_LOCATION,
10
6
  CONF_MEMORY_ADDRESS,
7
+ CONF_MEMORY_LOCATION,
8
+ CONF_MICRONOVA_ID,
11
9
  MICRONOVA_LISTENER_SCHEMA,
10
+ MicroNova,
11
+ MicroNovaFunctions,
12
12
  micronova_ns,
13
13
  )
14
14
 
@@ -1,13 +1,11 @@
1
1
  from esphome import automation
2
- import esphome.config_validation as cv
3
- import esphome.codegen as cg
4
-
5
2
  from esphome.automation import maybe_simple_id
3
+ import esphome.codegen as cg
4
+ import esphome.config_validation as cv
6
5
  from esphome.const import CONF_ID, CONF_TRIGGER_ID
7
6
  from esphome.core import CORE
8
7
  from esphome.coroutine import coroutine_with_priority
9
8
 
10
-
11
9
  CODEOWNERS = ["@jesserockz"]
12
10
 
13
11
  IS_PLATFORM_COMPONENT = True
@@ -1,9 +1,9 @@
1
- from esphome.core import coroutine
2
1
  from esphome import automation
3
- from esphome.components import climate, sensor, uart, remote_transmitter
2
+ import esphome.codegen as cg
3
+ from esphome.components import climate, remote_transmitter, sensor, uart
4
+ from esphome.components.climate import ClimateMode, ClimatePreset, ClimateSwingMode
4
5
  from esphome.components.remote_base import CONF_TRANSMITTER_ID
5
6
  import esphome.config_validation as cv
6
- import esphome.codegen as cg
7
7
  from esphome.const import (
8
8
  CONF_AUTOCONF,
9
9
  CONF_BEEPER,
@@ -16,12 +16,12 @@ from esphome.const import (
16
16
  CONF_SUPPORTED_MODES,
17
17
  CONF_SUPPORTED_PRESETS,
18
18
  CONF_SUPPORTED_SWING_MODES,
19
- CONF_TIMEOUT,
20
19
  CONF_TEMPERATURE,
20
+ CONF_TIMEOUT,
21
21
  CONF_USE_FAHRENHEIT,
22
+ DEVICE_CLASS_HUMIDITY,
22
23
  DEVICE_CLASS_POWER,
23
24
  DEVICE_CLASS_TEMPERATURE,
24
- DEVICE_CLASS_HUMIDITY,
25
25
  ICON_POWER,
26
26
  ICON_THERMOMETER,
27
27
  ICON_WATER_PERCENT,
@@ -30,11 +30,7 @@ from esphome.const import (
30
30
  UNIT_PERCENT,
31
31
  UNIT_WATT,
32
32
  )
33
- from esphome.components.climate import (
34
- ClimateMode,
35
- ClimatePreset,
36
- ClimateSwingMode,
37
- )
33
+ from esphome.core import coroutine
38
34
 
39
35
  CODEOWNERS = ["@dudanov"]
40
36
  DEPENDENCIES = ["climate", "uart"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import climate_ir
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID, CONF_USE_FAHRENHEIT
5
5
 
6
6
  AUTO_LOAD = ["climate_ir", "coolix"]
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import climate_ir
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  CODEOWNERS = ["@RubyBailey"]
@@ -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_ID,
6
6
  DEVICE_CLASS_TEMPERATURE,