esphome 2025.6.3__py3-none-any.whl → 2025.7.0b2__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 (606) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +57 -21
  22. esphome/components/api/api_connection.cpp +344 -539
  23. esphome/components/api/api_connection.h +224 -141
  24. esphome/components/api/api_frame_helper.cpp +91 -127
  25. esphome/components/api/api_frame_helper.h +64 -54
  26. esphome/components/api/api_pb2.cpp +1837 -9044
  27. esphome/components/api/api_pb2.h +532 -685
  28. esphome/components/api/api_pb2_dump.cpp +4432 -0
  29. esphome/components/api/api_pb2_service.cpp +184 -425
  30. esphome/components/api/api_pb2_service.h +13 -6
  31. esphome/components/api/api_server.cpp +131 -167
  32. esphome/components/api/api_server.h +38 -10
  33. esphome/components/api/client.py +8 -2
  34. esphome/components/api/custom_api_device.h +8 -0
  35. esphome/components/api/list_entities.cpp +37 -104
  36. esphome/components/api/list_entities.h +33 -23
  37. esphome/components/api/proto.h +532 -26
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/api/user_services.h +2 -0
  41. esphome/components/as5600/as5600.h +0 -1
  42. esphome/components/async_tcp/__init__.py +14 -5
  43. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  44. esphome/components/atm90e32/atm90e32.cpp +2 -1
  45. esphome/components/audio/audio_decoder.cpp +1 -1
  46. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  47. esphome/components/b_parasite/b_parasite.h +0 -1
  48. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  49. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  50. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  51. esphome/components/bh1750/bh1750.cpp +5 -5
  52. esphome/components/binary_sensor/__init__.py +82 -5
  53. esphome/components/binary_sensor/automation.h +19 -1
  54. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  55. esphome/components/binary_sensor/binary_sensor.h +11 -25
  56. esphome/components/binary_sensor/filter.cpp +29 -24
  57. esphome/components/binary_sensor/filter.h +20 -10
  58. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  60. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  61. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  62. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  63. esphome/components/ble_client/switch/ble_switch.h +0 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  65. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  66. esphome/components/ble_presence/ble_presence_device.h +0 -1
  67. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  68. esphome/components/ble_scanner/ble_scanner.h +0 -1
  69. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  71. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  72. esphome/components/bme680/sensor.py +1 -1
  73. esphome/components/bmp581/bmp581.h +0 -2
  74. esphome/components/button/__init__.py +5 -2
  75. esphome/components/camera/__init__.py +1 -0
  76. esphome/components/camera/camera.cpp +22 -0
  77. esphome/components/camera/camera.h +80 -0
  78. esphome/components/canbus/__init__.py +1 -0
  79. esphome/components/cap1188/cap1188.h +0 -1
  80. esphome/components/captive_portal/__init__.py +12 -2
  81. esphome/components/captive_portal/captive_portal.cpp +12 -2
  82. esphome/components/captive_portal/captive_portal.h +5 -2
  83. esphome/components/ccs811/ccs811.h +0 -2
  84. esphome/components/climate/__init__.py +5 -2
  85. esphome/components/cm1106/sensor.py +2 -2
  86. esphome/components/const/__init__.py +2 -0
  87. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  88. esphome/components/copy/button/copy_button.h +0 -1
  89. esphome/components/copy/cover/copy_cover.h +0 -1
  90. esphome/components/copy/fan/copy_fan.h +0 -1
  91. esphome/components/copy/lock/copy_lock.h +0 -1
  92. esphome/components/copy/number/copy_number.h +0 -1
  93. esphome/components/copy/select/copy_select.h +0 -1
  94. esphome/components/copy/sensor/copy_sensor.h +0 -1
  95. esphome/components/copy/switch/copy_switch.h +0 -1
  96. esphome/components/copy/text/copy_text.h +0 -1
  97. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  98. esphome/components/cover/__init__.py +5 -2
  99. esphome/components/cs5460a/cs5460a.h +0 -1
  100. esphome/components/datetime/__init__.py +4 -2
  101. esphome/components/debug/__init__.py +20 -0
  102. esphome/components/debug/debug_esp32.cpp +2 -0
  103. esphome/components/deep_sleep/__init__.py +43 -9
  104. esphome/components/demo/__init__.py +2 -2
  105. esphome/components/display/display.cpp +4 -3
  106. esphome/components/display/display.h +0 -2
  107. esphome/components/display/display_buffer.cpp +1 -1
  108. esphome/components/ds2484/__init__.py +1 -0
  109. esphome/components/ds2484/ds2484.cpp +209 -0
  110. esphome/components/ds2484/ds2484.h +43 -0
  111. esphome/components/ds2484/one_wire.py +37 -0
  112. esphome/components/duty_time/duty_time_sensor.h +0 -1
  113. esphome/components/ens160_base/ens160_base.h +0 -1
  114. esphome/components/es7210/es7210.h +0 -1
  115. esphome/components/es7243e/es7243e.h +0 -1
  116. esphome/components/es8156/es8156.h +0 -1
  117. esphome/components/es8311/es8311.h +0 -1
  118. esphome/components/es8388/es8388.h +0 -1
  119. esphome/components/esp32/__init__.py +103 -135
  120. esphome/components/esp32/core.cpp +0 -4
  121. esphome/components/esp32/gpio.h +1 -1
  122. esphome/components/esp32/helpers.cpp +69 -0
  123. esphome/components/esp32_ble/ble.cpp +5 -6
  124. esphome/components/esp32_ble/ble.h +29 -14
  125. esphome/components/esp32_ble/ble_event.h +6 -6
  126. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  127. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  128. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  129. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  130. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  131. esphome/components/esp32_camera/__init__.py +112 -98
  132. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  133. esphome/components/esp32_camera/esp32_camera.h +35 -30
  134. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  135. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  136. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  137. esphome/components/esp32_hall/sensor.py +2 -21
  138. esphome/components/esp32_hosted/__init__.py +101 -0
  139. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  140. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  141. esphome/components/esp32_rmt/__init__.py +0 -58
  142. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  143. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  144. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  145. esphome/components/esp32_touch/esp32_touch.h +174 -28
  146. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  147. esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
  148. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  149. esphome/components/esp8266/__init__.py +2 -0
  150. esphome/components/esp8266/gpio.cpp +10 -10
  151. esphome/components/esp8266/helpers.cpp +31 -0
  152. esphome/components/esphome/ota/__init__.py +1 -0
  153. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  154. esphome/components/ethernet/__init__.py +42 -23
  155. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  156. esphome/components/ethernet/ethernet_component.cpp +69 -29
  157. esphome/components/ethernet/ethernet_component.h +18 -10
  158. esphome/components/event/__init__.py +5 -2
  159. esphome/components/ezo/ezo.h +0 -1
  160. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  161. esphome/components/fan/__init__.py +5 -2
  162. esphome/components/feedback/feedback_cover.h +0 -1
  163. esphome/components/font/__init__.py +92 -82
  164. esphome/components/font/font.cpp +9 -2
  165. esphome/components/font/font.h +20 -5
  166. esphome/components/fs3000/fs3000.h +0 -1
  167. esphome/components/gcja5/gcja5.h +0 -1
  168. esphome/components/gl_r01_i2c/__init__.py +0 -0
  169. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  170. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  171. esphome/components/gl_r01_i2c/sensor.py +36 -0
  172. esphome/components/gp8403/gp8403.h +0 -1
  173. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  174. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  175. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  176. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  177. esphome/components/he60r/he60r.h +0 -1
  178. esphome/components/heatpumpir/climate.py +2 -1
  179. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  180. esphome/components/heatpumpir/heatpumpir.h +1 -0
  181. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  182. esphome/components/host/__init__.py +3 -1
  183. esphome/components/host/helpers.cpp +57 -0
  184. esphome/components/http_request/__init__.py +19 -1
  185. esphome/components/http_request/http_request.h +1 -1
  186. esphome/components/http_request/http_request_arduino.h +1 -0
  187. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  188. esphome/components/http_request/update/http_request_update.cpp +28 -9
  189. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  190. esphome/components/hydreon_rgxx/sensor.py +1 -1
  191. esphome/components/i2c/__init__.py +23 -11
  192. esphome/components/i2c/i2c_bus.h +8 -1
  193. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  194. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  195. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  196. esphome/components/i2c_device/i2c_device.h +0 -1
  197. esphome/components/i2s_audio/__init__.py +2 -10
  198. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  199. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  200. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  201. esphome/components/iaqcore/iaqcore.h +0 -2
  202. esphome/components/image/__init__.py +123 -24
  203. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  204. esphome/components/ina219/ina219.cpp +7 -0
  205. esphome/components/ina219/ina219.h +1 -0
  206. esphome/components/ina260/ina260.h +0 -2
  207. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  208. esphome/components/inkplate6/display.py +15 -0
  209. esphome/components/inkplate6/inkplate.cpp +2 -2
  210. esphome/components/integration/integration_sensor.h +0 -1
  211. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  212. esphome/components/internal_temperature/sensor.py +0 -26
  213. esphome/components/interval/interval.h +0 -2
  214. esphome/components/ld2410/button/__init__.py +3 -3
  215. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  216. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  217. esphome/components/ld2410/ld2410.cpp +421 -268
  218. esphome/components/ld2410/ld2410.h +44 -146
  219. esphome/components/ld2410/number/__init__.py +2 -2
  220. esphome/components/ld2410/sensor.py +1 -1
  221. esphome/components/ld2410/switch/__init__.py +1 -1
  222. esphome/components/ld2420/ld2420.cpp +196 -100
  223. esphome/components/ld2420/ld2420.h +46 -118
  224. esphome/components/ld2420/number/__init__.py +2 -2
  225. esphome/components/ld2420/sensor/__init__.py +6 -2
  226. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  227. esphome/components/ld2450/button/__init__.py +3 -3
  228. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  229. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  230. esphome/components/ld2450/ld2450.cpp +384 -232
  231. esphome/components/ld2450/ld2450.h +60 -69
  232. esphome/components/ld2450/switch/__init__.py +1 -1
  233. esphome/components/ledc/ledc_output.cpp +1 -63
  234. esphome/components/libretiny/__init__.py +5 -3
  235. esphome/components/libretiny/const.py +5 -0
  236. esphome/components/libretiny/generate_components.py +1 -0
  237. esphome/components/libretiny/helpers.cpp +35 -0
  238. esphome/components/libretiny/lt_component.cpp +5 -3
  239. esphome/components/light/__init__.py +4 -2
  240. esphome/components/light/addressable_light.h +3 -3
  241. esphome/components/light/light_call.cpp +180 -243
  242. esphome/components/light/light_call.h +72 -20
  243. esphome/components/light/light_color_values.h +14 -14
  244. esphome/components/light/light_state.h +15 -13
  245. esphome/components/light/transformers.h +2 -2
  246. esphome/components/ln882x/__init__.py +52 -0
  247. esphome/components/ln882x/boards.py +285 -0
  248. esphome/components/lock/__init__.py +5 -2
  249. esphome/components/logger/__init__.py +40 -3
  250. esphome/components/logger/logger.cpp +47 -12
  251. esphome/components/logger/logger.h +80 -49
  252. esphome/components/logger/logger_esp32.cpp +3 -3
  253. esphome/components/lps22/__init__.py +0 -0
  254. esphome/components/lps22/lps22.cpp +75 -0
  255. esphome/components/lps22/lps22.h +27 -0
  256. esphome/components/lps22/sensor.py +58 -0
  257. esphome/components/ltr390/ltr390.h +0 -1
  258. esphome/components/ltr501/ltr501.h +0 -1
  259. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  260. esphome/components/lvgl/__init__.py +1 -1
  261. esphome/components/lvgl/schemas.py +66 -6
  262. esphome/components/lvgl/styles.py +24 -16
  263. esphome/components/lvgl/widgets/__init__.py +12 -2
  264. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  265. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  266. esphome/components/max9611/max9611.h +0 -1
  267. esphome/components/mcp23016/__init__.py +1 -1
  268. esphome/components/mcp23xxx_base/__init__.py +1 -1
  269. esphome/components/mcp4461/__init__.py +1 -1
  270. esphome/components/mcp4461/output/__init__.py +3 -2
  271. esphome/components/mcp9600/mcp9600.h +0 -2
  272. esphome/components/md5/md5.cpp +3 -3
  273. esphome/components/md5/md5.h +1 -6
  274. esphome/components/mdns/__init__.py +22 -11
  275. esphome/components/media_player/__init__.py +4 -3
  276. esphome/components/micro_wake_word/__init__.py +1 -5
  277. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  278. esphome/components/microphone/microphone.cpp +7 -9
  279. esphome/components/microphone/microphone.h +0 -2
  280. esphome/components/mipi_spi/display.py +1 -0
  281. esphome/components/mmc5603/mmc5603.cpp +1 -1
  282. esphome/components/modbus/modbus.cpp +33 -15
  283. esphome/components/modbus/modbus.h +9 -0
  284. esphome/components/modbus_controller/__init__.py +42 -10
  285. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  286. esphome/components/modbus_controller/modbus_controller.h +61 -7
  287. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  288. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  289. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  290. esphome/components/mqtt/__init__.py +16 -0
  291. esphome/components/mqtt/mqtt_backend.h +2 -1
  292. esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
  293. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  294. esphome/components/mqtt/mqtt_client.cpp +15 -9
  295. esphome/components/mqtt/mqtt_client.h +8 -3
  296. esphome/components/ms8607/ms8607.h +0 -1
  297. esphome/components/neopixelbus/light.py +4 -1
  298. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  299. esphome/components/network/__init__.py +4 -1
  300. esphome/components/network/ip_address.h +1 -0
  301. esphome/components/nextion/__init__.py +16 -0
  302. esphome/components/nextion/base_component.py +1 -0
  303. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  304. esphome/components/nextion/display.py +14 -4
  305. esphome/components/nextion/nextion.cpp +166 -101
  306. esphome/components/nextion/nextion.h +84 -53
  307. esphome/components/nextion/nextion_commands.cpp +11 -10
  308. esphome/components/nextion/nextion_component.cpp +28 -28
  309. esphome/components/nextion/nextion_component.h +53 -18
  310. esphome/components/nextion/nextion_component_base.h +3 -0
  311. esphome/components/nextion/nextion_upload.cpp +36 -0
  312. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  313. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  314. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  315. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  316. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  317. esphome/components/nfc/nfc.cpp +3 -22
  318. esphome/components/nfc/nfc.h +3 -3
  319. esphome/components/number/__init__.py +5 -2
  320. esphome/components/online_image/__init__.py +5 -0
  321. esphome/components/online_image/online_image.cpp +6 -2
  322. esphome/components/online_image/online_image.h +4 -1
  323. esphome/components/opentherm/opentherm.cpp +7 -12
  324. esphome/components/openthread/__init__.py +47 -40
  325. esphome/components/openthread/const.py +1 -0
  326. esphome/components/openthread/openthread_esp.cpp +27 -5
  327. esphome/components/opt3001/__init__.py +0 -0
  328. esphome/components/opt3001/opt3001.cpp +122 -0
  329. esphome/components/opt3001/opt3001.h +27 -0
  330. esphome/components/opt3001/sensor.py +35 -0
  331. esphome/components/ota/__init__.py +17 -0
  332. esphome/components/ota/ota_backend.h +27 -1
  333. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  334. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  335. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  336. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  337. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  338. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  339. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  340. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  341. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  342. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  343. esphome/components/packages/__init__.py +5 -2
  344. esphome/components/packet_transport/binary_sensor.py +61 -4
  345. esphome/components/packet_transport/packet_transport.cpp +34 -1
  346. esphome/components/packet_transport/packet_transport.h +11 -5
  347. esphome/components/pcf8574/__init__.py +1 -1
  348. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  349. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  350. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  351. esphome/components/pmsa003i/pmsa003i.h +0 -1
  352. esphome/components/pmsx003/pmsx003.h +0 -1
  353. esphome/components/pn7150/pn7150.cpp +7 -7
  354. esphome/components/pn7150/pn7150.h +0 -1
  355. esphome/components/pn7160/pn7160.cpp +7 -7
  356. esphome/components/pn7160/pn7160.h +0 -1
  357. esphome/components/preferences/syncer.h +2 -0
  358. esphome/components/prometheus/prometheus_handler.h +1 -1
  359. esphome/components/psram/psram.cpp +0 -20
  360. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  361. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  362. esphome/components/pulse_width/pulse_width.h +0 -1
  363. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  364. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  365. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  366. esphome/components/qr_code/__init__.py +13 -10
  367. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  368. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  369. esphome/components/rc522/rc522.h +0 -1
  370. esphome/components/rdm6300/rdm6300.h +0 -2
  371. esphome/components/remote_base/__init__.py +7 -5
  372. esphome/components/remote_base/remote_base.cpp +24 -21
  373. esphome/components/remote_base/remote_base.h +3 -26
  374. esphome/components/remote_receiver/__init__.py +40 -46
  375. esphome/components/remote_receiver/remote_receiver.h +4 -18
  376. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  377. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  378. esphome/components/remote_transmitter/__init__.py +42 -43
  379. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  380. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  381. esphome/components/resistance/resistance_sensor.h +0 -1
  382. esphome/components/rp2040/__init__.py +2 -0
  383. esphome/components/rp2040/helpers.cpp +55 -0
  384. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  385. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  386. esphome/components/rtttl/__init__.py +4 -4
  387. esphome/components/rtttl/rtttl.cpp +10 -1
  388. esphome/components/ruuvitag/ruuvitag.h +0 -1
  389. esphome/components/safe_mode/safe_mode.cpp +2 -0
  390. esphome/components/safe_mode/safe_mode.h +4 -1
  391. esphome/components/scd30/scd30.h +0 -1
  392. esphome/components/scd30/sensor.py +2 -2
  393. esphome/components/scd4x/scd4x.cpp +61 -54
  394. esphome/components/scd4x/scd4x.h +17 -15
  395. esphome/components/scd4x/sensor.py +4 -4
  396. esphome/components/script/script.h +0 -2
  397. esphome/components/sdp3x/sensor.py +1 -1
  398. esphome/components/select/__init__.py +5 -2
  399. esphome/components/sen5x/sen5x.h +0 -1
  400. esphome/components/senseair/senseair.h +0 -1
  401. esphome/components/sensor/__init__.py +4 -2
  402. esphome/components/sensor/filter.cpp +1 -1
  403. esphome/components/sensor/sensor.cpp +12 -6
  404. esphome/components/sensor/sensor.h +13 -5
  405. esphome/components/servo/servo.h +0 -1
  406. esphome/components/sfa30/sfa30.h +0 -1
  407. esphome/components/sgp30/sgp30.h +0 -1
  408. esphome/components/sgp4x/sgp4x.h +0 -1
  409. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  410. esphome/components/sht4x/sht4x.h +0 -1
  411. esphome/components/sm300d2/sm300d2.h +0 -2
  412. esphome/components/smt100/sensor.py +8 -4
  413. esphome/components/smt100/smt100.cpp +5 -5
  414. esphome/components/smt100/smt100.h +3 -3
  415. esphome/components/sn74hc595/__init__.py +1 -1
  416. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  417. esphome/components/sntp/sntp_component.cpp +9 -3
  418. esphome/components/sntp/time.py +2 -0
  419. esphome/components/socket/__init__.py +17 -0
  420. esphome/components/spi/__init__.py +27 -6
  421. esphome/components/spi/spi.cpp +3 -2
  422. esphome/components/spi/spi.h +9 -3
  423. esphome/components/spi/spi_arduino.cpp +3 -5
  424. esphome/components/spi/spi_esp_idf.cpp +40 -21
  425. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  426. esphome/components/sps30/sps30.h +0 -1
  427. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  428. esphome/components/st7701s/st7701s.cpp +0 -4
  429. esphome/components/status/status_binary_sensor.h +0 -2
  430. esphome/components/substitutions/__init__.py +76 -19
  431. esphome/components/substitutions/jinja.py +99 -0
  432. esphome/components/sun/sun.cpp +3 -4
  433. esphome/components/switch/__init__.py +5 -2
  434. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  435. esphome/components/sx126x/__init__.py +317 -0
  436. esphome/components/sx126x/automation.h +62 -0
  437. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  438. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  439. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  440. esphome/components/sx126x/sx126x.cpp +523 -0
  441. esphome/components/sx126x/sx126x.h +140 -0
  442. esphome/components/sx126x/sx126x_reg.h +163 -0
  443. esphome/components/sx127x/__init__.py +325 -0
  444. esphome/components/sx127x/automation.h +62 -0
  445. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  446. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  447. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  448. esphome/components/sx127x/sx127x.cpp +498 -0
  449. esphome/components/sx127x/sx127x.h +128 -0
  450. esphome/components/sx127x/sx127x_reg.h +295 -0
  451. esphome/components/syslog/esphome_syslog.cpp +5 -3
  452. esphome/components/syslog/esphome_syslog.h +1 -1
  453. esphome/components/tca9555/__init__.py +1 -1
  454. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  455. esphome/components/text/__init__.py +5 -2
  456. esphome/components/text_sensor/__init__.py +5 -2
  457. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  458. esphome/components/thermostat/thermostat_climate.h +43 -39
  459. esphome/components/time/__init__.py +16 -2
  460. esphome/components/time/real_time_clock.cpp +4 -0
  461. esphome/components/time/real_time_clock.h +5 -1
  462. esphome/components/tlc5971/tlc5971.cpp +4 -1
  463. esphome/components/tmp1075/tmp1075.h +0 -2
  464. esphome/components/tof10120/tof10120_sensor.h +0 -1
  465. esphome/components/tormatic/tormatic_cover.h +0 -1
  466. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  467. esphome/components/tsl2591/tsl2591.cpp +1 -1
  468. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  469. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  470. esphome/components/tx20/tx20.cpp +2 -2
  471. esphome/components/uart/__init__.py +18 -0
  472. esphome/components/uart/uart_component_esp_idf.cpp +0 -4
  473. esphome/components/update/__init__.py +5 -2
  474. esphome/components/update/update_entity.h +8 -0
  475. esphome/components/usb_host/__init__.py +5 -2
  476. esphome/components/usb_host/usb_host_client.cpp +10 -10
  477. esphome/components/usb_uart/cp210x.cpp +1 -1
  478. esphome/components/usb_uart/usb_uart.cpp +41 -44
  479. esphome/components/usb_uart/usb_uart.h +4 -3
  480. esphome/components/valve/__init__.py +5 -2
  481. esphome/components/vbus/vbus.h +0 -1
  482. esphome/components/veml3235/veml3235.h +0 -1
  483. esphome/components/veml7700/veml7700.h +0 -1
  484. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  485. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  486. esphome/components/watchdog/watchdog.cpp +0 -4
  487. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  488. esphome/components/web_server/__init__.py +34 -19
  489. esphome/components/web_server/ota/__init__.py +32 -0
  490. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  491. esphome/components/web_server/ota/ota_web_server.h +26 -0
  492. esphome/components/web_server/web_server.cpp +305 -427
  493. esphome/components/web_server/web_server.h +33 -23
  494. esphome/components/web_server/web_server_v1.cpp +4 -5
  495. esphome/components/web_server_base/__init__.py +5 -2
  496. esphome/components/web_server_base/web_server_base.cpp +2 -94
  497. esphome/components/web_server_base/web_server_base.h +5 -25
  498. esphome/components/web_server_idf/multipart.cpp +254 -0
  499. esphome/components/web_server_idf/multipart.h +86 -0
  500. esphome/components/web_server_idf/utils.cpp +32 -0
  501. esphome/components/web_server_idf/utils.h +10 -0
  502. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  503. esphome/components/web_server_idf/web_server_idf.h +11 -10
  504. esphome/components/wiegand/wiegand.cpp +2 -2
  505. esphome/components/wifi/__init__.py +18 -0
  506. esphome/components/wifi/wifi_component.cpp +17 -22
  507. esphome/components/wifi/wifi_component.h +27 -23
  508. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  509. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  510. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  511. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  512. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  513. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  514. esphome/components/wireguard/__init__.py +2 -11
  515. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  516. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  517. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  518. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  519. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  520. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  521. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  522. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  523. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  524. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  525. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  526. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  527. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  528. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  529. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  530. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  531. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  532. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  533. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  534. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  535. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  536. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  537. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  538. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  539. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  540. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  541. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  542. esphome/components/zyaura/zyaura.h +0 -1
  543. esphome/config.py +88 -22
  544. esphome/config_helpers.py +74 -1
  545. esphome/config_validation.py +12 -1
  546. esphome/const.py +65 -10
  547. esphome/core/__init__.py +18 -2
  548. esphome/core/application.cpp +163 -10
  549. esphome/core/application.h +145 -165
  550. esphome/core/area.h +19 -0
  551. esphome/core/automation.h +58 -9
  552. esphome/core/color.cpp +3 -5
  553. esphome/core/color.h +16 -16
  554. esphome/core/component.cpp +151 -18
  555. esphome/core/component.h +98 -4
  556. esphome/core/component_iterator.cpp +11 -9
  557. esphome/core/component_iterator.h +12 -10
  558. esphome/core/config.py +155 -6
  559. esphome/core/controller.cpp +4 -2
  560. esphome/core/controller.h +1 -1
  561. esphome/core/datatypes.h +2 -2
  562. esphome/core/defines.h +17 -2
  563. esphome/core/device.h +20 -0
  564. esphome/core/entity_base.cpp +20 -15
  565. esphome/core/entity_base.h +76 -0
  566. esphome/core/entity_helpers.py +168 -1
  567. esphome/core/event_pool.h +81 -0
  568. esphome/core/helpers.cpp +75 -230
  569. esphome/core/helpers.h +164 -104
  570. esphome/core/lock_free_queue.h +151 -0
  571. esphome/core/log.cpp +2 -2
  572. esphome/core/log.h +2 -0
  573. esphome/core/optional.h +5 -0
  574. esphome/core/ring_buffer.cpp +2 -2
  575. esphome/core/scheduler.cpp +275 -103
  576. esphome/core/scheduler.h +154 -17
  577. esphome/core/time.cpp +5 -5
  578. esphome/core/time.h +5 -5
  579. esphome/cpp_generator.py +17 -0
  580. esphome/cpp_helpers.py +0 -22
  581. esphome/cpp_types.py +3 -1
  582. esphome/dashboard/entries.py +1 -1
  583. esphome/dashboard/util/text.py +5 -21
  584. esphome/dashboard/web_server.py +9 -1
  585. esphome/helpers.py +47 -0
  586. esphome/loader.py +15 -1
  587. esphome/pins.py +14 -8
  588. esphome/wizard.py +17 -4
  589. esphome/writer.py +21 -3
  590. esphome/yaml_util.py +0 -2
  591. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
  592. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
  593. esphome/components/api/api_pb2_size.h +0 -361
  594. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  595. esphome/components/esp32_ble/queue.h +0 -85
  596. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  597. esphome/components/esp32_hall/esp32_hall.h +0 -23
  598. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  599. esphome/components/ld2410/button/reset_button.cpp +0 -9
  600. esphome/components/ld2450/button/reset_button.cpp +0 -9
  601. esphome/components/openthread/tlv.py +0 -65
  602. /esphome/{dashboard/enum.py → enum.py} +0 -0
  603. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
  604. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
  605. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
  606. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
@@ -23,8 +23,10 @@ from esphome.const import (
23
23
  CONF_INTERRUPT_PIN,
24
24
  CONF_MANUAL_IP,
25
25
  CONF_MISO_PIN,
26
+ CONF_MODE,
26
27
  CONF_MOSI_PIN,
27
28
  CONF_PAGE_ID,
29
+ CONF_PIN,
28
30
  CONF_POLLING_INTERVAL,
29
31
  CONF_RESET_PIN,
30
32
  CONF_SPI,
@@ -49,6 +51,7 @@ PHYRegister = ethernet_ns.struct("PHYRegister")
49
51
  CONF_PHY_ADDR = "phy_addr"
50
52
  CONF_MDC_PIN = "mdc_pin"
51
53
  CONF_MDIO_PIN = "mdio_pin"
54
+ CONF_CLK = "clk"
52
55
  CONF_CLK_MODE = "clk_mode"
53
56
  CONF_POWER_PIN = "power_pin"
54
57
  CONF_PHY_REGISTERS = "phy_registers"
@@ -66,32 +69,25 @@ ETHERNET_TYPES = {
66
69
  "KSZ8081RNA": EthernetType.ETHERNET_TYPE_KSZ8081RNA,
67
70
  "W5500": EthernetType.ETHERNET_TYPE_W5500,
68
71
  "OPENETH": EthernetType.ETHERNET_TYPE_OPENETH,
72
+ "DM9051": EthernetType.ETHERNET_TYPE_DM9051,
69
73
  }
70
74
 
71
- SPI_ETHERNET_TYPES = ["W5500"]
75
+ SPI_ETHERNET_TYPES = ["W5500", "DM9051"]
72
76
  SPI_ETHERNET_DEFAULT_POLLING_INTERVAL = TimePeriodMilliseconds(milliseconds=10)
73
77
 
74
78
  emac_rmii_clock_mode_t = cg.global_ns.enum("emac_rmii_clock_mode_t")
75
- emac_rmii_clock_gpio_t = cg.global_ns.enum("emac_rmii_clock_gpio_t")
79
+
76
80
  CLK_MODES = {
77
- "GPIO0_IN": (
78
- emac_rmii_clock_mode_t.EMAC_CLK_EXT_IN,
79
- emac_rmii_clock_gpio_t.EMAC_CLK_IN_GPIO,
80
- ),
81
- "GPIO0_OUT": (
82
- emac_rmii_clock_mode_t.EMAC_CLK_OUT,
83
- emac_rmii_clock_gpio_t.EMAC_APPL_CLK_OUT_GPIO,
84
- ),
85
- "GPIO16_OUT": (
86
- emac_rmii_clock_mode_t.EMAC_CLK_OUT,
87
- emac_rmii_clock_gpio_t.EMAC_CLK_OUT_GPIO,
88
- ),
89
- "GPIO17_OUT": (
90
- emac_rmii_clock_mode_t.EMAC_CLK_OUT,
91
- emac_rmii_clock_gpio_t.EMAC_CLK_OUT_180_GPIO,
92
- ),
81
+ "CLK_EXT_IN": emac_rmii_clock_mode_t.EMAC_CLK_EXT_IN,
82
+ "CLK_OUT": emac_rmii_clock_mode_t.EMAC_CLK_OUT,
93
83
  }
94
84
 
85
+ CLK_MODES_DEPRECATED = {
86
+ "GPIO0_IN": ("CLK_EXT_IN", 0),
87
+ "GPIO0_OUT": ("CLK_OUT", 0),
88
+ "GPIO16_OUT": ("CLK_OUT", 16),
89
+ "GPIO17_OUT": ("CLK_OUT", 17),
90
+ }
95
91
 
96
92
  MANUAL_IP_SCHEMA = cv.Schema(
97
93
  {
@@ -153,6 +149,18 @@ def _validate(config):
153
149
  f"({CORE.target_framework} {CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION]}), "
154
150
  f"'{CONF_INTERRUPT_PIN}' is a required option for [ethernet]."
155
151
  )
152
+ elif config[CONF_TYPE] != "OPENETH":
153
+ if CONF_CLK_MODE in config:
154
+ LOGGER.warning(
155
+ "[ethernet] The 'clk_mode' option is deprecated and will be removed in ESPHome 2026.1. "
156
+ "Please update your configuration to use 'clk' instead."
157
+ )
158
+ mode = CLK_MODES_DEPRECATED[config[CONF_CLK_MODE]]
159
+ config[CONF_CLK] = CLK_SCHEMA({CONF_MODE: mode[0], CONF_PIN: mode[1]})
160
+ del config[CONF_CLK_MODE]
161
+ elif CONF_CLK not in config:
162
+ raise cv.Invalid("'clk' is a required option for [ethernet].")
163
+
156
164
  return config
157
165
 
158
166
 
@@ -176,14 +184,21 @@ PHY_REGISTER_SCHEMA = cv.Schema(
176
184
  cv.Optional(CONF_PAGE_ID): cv.hex_int,
177
185
  }
178
186
  )
187
+ CLK_SCHEMA = cv.Schema(
188
+ {
189
+ cv.Required(CONF_MODE): cv.enum(CLK_MODES, upper=True, space="_"),
190
+ cv.Required(CONF_PIN): pins.internal_gpio_pin_number,
191
+ }
192
+ )
179
193
  RMII_SCHEMA = BASE_SCHEMA.extend(
180
194
  cv.Schema(
181
195
  {
182
196
  cv.Required(CONF_MDC_PIN): pins.internal_gpio_output_pin_number,
183
197
  cv.Required(CONF_MDIO_PIN): pins.internal_gpio_output_pin_number,
184
- cv.Optional(CONF_CLK_MODE, default="GPIO0_IN"): cv.enum(
185
- CLK_MODES, upper=True, space="_"
198
+ cv.Optional(CONF_CLK_MODE): cv.enum(
199
+ CLK_MODES_DEPRECATED, upper=True, space="_"
186
200
  ),
201
+ cv.Optional(CONF_CLK): CLK_SCHEMA,
187
202
  cv.Optional(CONF_PHY_ADDR, default=0): cv.int_range(min=0, max=31),
188
203
  cv.Optional(CONF_POWER_PIN): pins.internal_gpio_output_pin_number,
189
204
  cv.Optional(CONF_PHY_REGISTERS): cv.ensure_list(PHY_REGISTER_SCHEMA),
@@ -224,6 +239,7 @@ CONFIG_SCHEMA = cv.All(
224
239
  "KSZ8081RNA": RMII_SCHEMA,
225
240
  "W5500": SPI_SCHEMA,
226
241
  "OPENETH": BASE_SCHEMA,
242
+ "DM9051": SPI_SCHEMA,
227
243
  },
228
244
  upper=True,
229
245
  ),
@@ -278,7 +294,7 @@ async def to_code(config):
278
294
  var = cg.new_Pvariable(config[CONF_ID])
279
295
  await cg.register_component(var, config)
280
296
 
281
- if config[CONF_TYPE] == "W5500":
297
+ if config[CONF_TYPE] in SPI_ETHERNET_TYPES:
282
298
  cg.add(var.set_clk_pin(config[CONF_CLK_PIN]))
283
299
  cg.add(var.set_miso_pin(config[CONF_MISO_PIN]))
284
300
  cg.add(var.set_mosi_pin(config[CONF_MOSI_PIN]))
@@ -296,7 +312,9 @@ async def to_code(config):
296
312
  cg.add_define("USE_ETHERNET_SPI")
297
313
  if CORE.using_esp_idf:
298
314
  add_idf_sdkconfig_option("CONFIG_ETH_USE_SPI_ETHERNET", True)
299
- add_idf_sdkconfig_option("CONFIG_ETH_SPI_ETHERNET_W5500", True)
315
+ add_idf_sdkconfig_option(
316
+ f"CONFIG_ETH_SPI_ETHERNET_{config[CONF_TYPE]}", True
317
+ )
300
318
  elif config[CONF_TYPE] == "OPENETH":
301
319
  cg.add_define("USE_ETHERNET_OPENETH")
302
320
  add_idf_sdkconfig_option("CONFIG_ETH_USE_OPENETH", True)
@@ -304,7 +322,8 @@ async def to_code(config):
304
322
  cg.add(var.set_phy_addr(config[CONF_PHY_ADDR]))
305
323
  cg.add(var.set_mdc_pin(config[CONF_MDC_PIN]))
306
324
  cg.add(var.set_mdio_pin(config[CONF_MDIO_PIN]))
307
- cg.add(var.set_clk_mode(*CLK_MODES[config[CONF_CLK_MODE]]))
325
+ cg.add(var.set_clk_mode(config[CONF_CLK][CONF_MODE]))
326
+ cg.add(var.set_clk_pin(config[CONF_CLK][CONF_PIN]))
308
327
  if CONF_POWER_PIN in config:
309
328
  cg.add(var.set_power_pin(config[CONF_POWER_PIN]))
310
329
  for register_value in config.get(CONF_PHY_REGISTERS, []):
@@ -19,11 +19,7 @@
19
19
  #include <sys/cdefs.h>
20
20
  #include "esp_log.h"
21
21
  #include "esp_eth.h"
22
- #if ESP_IDF_VERSION_MAJOR >= 5
23
22
  #include "esp_eth_phy_802_3.h"
24
- #else
25
- #include "eth_phy_regs_struct.h"
26
- #endif
27
23
  #include "freertos/FreeRTOS.h"
28
24
  #include "freertos/task.h"
29
25
  #include "driver/gpio.h"
@@ -174,11 +170,7 @@ static esp_err_t jl1101_reset_hw(esp_eth_phy_t *phy) {
174
170
  return ESP_OK;
175
171
  }
176
172
 
177
- #if ESP_IDF_VERSION_MAJOR >= 5
178
173
  static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy, eth_phy_autoneg_cmd_t cmd, bool *nego_state) {
179
- #else
180
- static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy) {
181
- #endif
182
174
  phy_jl1101_t *jl1101 = __containerof(phy, phy_jl1101_t, parent);
183
175
  esp_eth_mediator_t *eth = jl1101->eth;
184
176
  /* in case any link status has changed, let's assume we're in link down status */
@@ -293,11 +285,7 @@ static esp_err_t jl1101_init(esp_eth_phy_t *phy) {
293
285
  esp_eth_mediator_t *eth = jl1101->eth;
294
286
  // Detect PHY address
295
287
  if (jl1101->addr == ESP_ETH_PHY_ADDR_AUTO) {
296
- #if ESP_IDF_VERSION_MAJOR >= 5
297
288
  PHY_CHECK(esp_eth_phy_802_3_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
298
- #else
299
- PHY_CHECK(esp_eth_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
300
- #endif
301
289
  }
302
290
  /* Power on Ethernet PHY */
303
291
  PHY_CHECK(jl1101_pwrctl(phy, true) == ESP_OK, "power control failed", err);
@@ -336,11 +324,7 @@ esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config) {
336
324
  jl1101->parent.init = jl1101_init;
337
325
  jl1101->parent.deinit = jl1101_deinit;
338
326
  jl1101->parent.set_mediator = jl1101_set_mediator;
339
- #if ESP_IDF_VERSION_MAJOR >= 5
340
327
  jl1101->parent.autonego_ctrl = jl1101_negotiate;
341
- #else
342
- jl1101->parent.negotiate = jl1101_negotiate;
343
- #endif
344
328
  jl1101->parent.get_link = jl1101_get_link;
345
329
  jl1101->parent.pwrctl = jl1101_pwrctl;
346
330
  jl1101->parent.get_addr = jl1101_get_addr;
@@ -17,6 +17,22 @@
17
17
  namespace esphome {
18
18
  namespace ethernet {
19
19
 
20
+ #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2)
21
+ // work around IDF compile issue on P4 https://github.com/espressif/esp-idf/pull/15637
22
+ #ifdef USE_ESP32_VARIANT_ESP32P4
23
+ #undef ETH_ESP32_EMAC_DEFAULT_CONFIG
24
+ #define ETH_ESP32_EMAC_DEFAULT_CONFIG() \
25
+ { \
26
+ .smi_gpio = {.mdc_num = 31, .mdio_num = 52}, .interface = EMAC_DATA_INTERFACE_RMII, \
27
+ .clock_config = {.rmii = {.clock_mode = EMAC_CLK_EXT_IN, .clock_gpio = (emac_rmii_clock_gpio_t) 50}}, \
28
+ .dma_burst_len = ETH_DMA_BURST_LEN_32, .intr_priority = 0, \
29
+ .emac_dataif_gpio = \
30
+ {.rmii = {.tx_en_num = 49, .txd0_num = 34, .txd1_num = 35, .crs_dv_num = 28, .rxd0_num = 29, .rxd1_num = 30}}, \
31
+ .clock_config_out_in = {.rmii = {.clock_mode = EMAC_CLK_EXT_IN, .clock_gpio = (emac_rmii_clock_gpio_t) -1}}, \
32
+ }
33
+ #endif
34
+ #endif
35
+
20
36
  static const char *const TAG = "ethernet";
21
37
 
22
38
  EthernetComponent *global_eth_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
@@ -90,8 +106,8 @@ void EthernetComponent::setup() {
90
106
 
91
107
  #ifdef USE_ETHERNET_SPI // Configure SPI interface and Ethernet driver for specific SPI module
92
108
  spi_device_interface_config_t devcfg = {
93
- .command_bits = 16, // Actually it's the address phase in W5500 SPI frame
94
- .address_bits = 8, // Actually it's the control phase in W5500 SPI frame
109
+ .command_bits = 0,
110
+ .address_bits = 0,
95
111
  .dummy_bits = 0,
96
112
  .mode = 0,
97
113
  .duty_cycle_pos = 0,
@@ -106,45 +122,49 @@ void EthernetComponent::setup() {
106
122
  .post_cb = nullptr,
107
123
  };
108
124
 
109
- #if USE_ESP_IDF && (ESP_IDF_VERSION_MAJOR >= 5)
125
+ #if CONFIG_ETH_SPI_ETHERNET_W5500
110
126
  eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(host, &devcfg);
111
- #else
112
- spi_device_handle_t spi_handle = nullptr;
113
- err = spi_bus_add_device(host, &devcfg, &spi_handle);
114
- ESPHL_ERROR_CHECK(err, "SPI bus add device error");
115
-
116
- eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(spi_handle);
117
127
  #endif
128
+ #if CONFIG_ETH_SPI_ETHERNET_DM9051
129
+ eth_dm9051_config_t dm9051_config = ETH_DM9051_DEFAULT_CONFIG(host, &devcfg);
130
+ #endif
131
+
132
+ #if CONFIG_ETH_SPI_ETHERNET_W5500
118
133
  w5500_config.int_gpio_num = this->interrupt_pin_;
119
134
  #ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
120
135
  w5500_config.poll_period_ms = this->polling_interval_;
121
136
  #endif
137
+ #endif
138
+
139
+ #if CONFIG_ETH_SPI_ETHERNET_DM9051
140
+ dm9051_config.int_gpio_num = this->interrupt_pin_;
141
+ #ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
142
+ dm9051_config.poll_period_ms = this->polling_interval_;
143
+ #endif
144
+ #endif
145
+
122
146
  phy_config.phy_addr = this->phy_addr_spi_;
123
147
  phy_config.reset_gpio_num = this->reset_pin_;
124
148
 
125
- esp_eth_mac_t *mac = esp_eth_mac_new_w5500(&w5500_config, &mac_config);
149
+ esp_eth_mac_t *mac = nullptr;
126
150
  #elif defined(USE_ETHERNET_OPENETH)
127
151
  esp_eth_mac_t *mac = esp_eth_mac_new_openeth(&mac_config);
128
152
  #else
129
153
  phy_config.phy_addr = this->phy_addr_;
130
154
  phy_config.reset_gpio_num = this->power_pin_;
131
155
 
132
- #if ESP_IDF_VERSION_MAJOR >= 5
133
156
  eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG();
157
+ #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 3, 0)
158
+ esp32_emac_config.smi_gpio.mdc_num = this->mdc_pin_;
159
+ esp32_emac_config.smi_gpio.mdio_num = this->mdio_pin_;
160
+ #else
134
161
  esp32_emac_config.smi_mdc_gpio_num = this->mdc_pin_;
135
162
  esp32_emac_config.smi_mdio_gpio_num = this->mdio_pin_;
163
+ #endif
136
164
  esp32_emac_config.clock_config.rmii.clock_mode = this->clk_mode_;
137
- esp32_emac_config.clock_config.rmii.clock_gpio = this->clk_gpio_;
165
+ esp32_emac_config.clock_config.rmii.clock_gpio = (emac_rmii_clock_gpio_t) this->clk_pin_;
138
166
 
139
167
  esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config);
140
- #else
141
- mac_config.smi_mdc_gpio_num = this->mdc_pin_;
142
- mac_config.smi_mdio_gpio_num = this->mdio_pin_;
143
- mac_config.clock_config.rmii.clock_mode = this->clk_mode_;
144
- mac_config.clock_config.rmii.clock_gpio = this->clk_gpio_;
145
-
146
- esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
147
- #endif
148
168
  #endif
149
169
 
150
170
  switch (this->type_) {
@@ -178,19 +198,25 @@ void EthernetComponent::setup() {
178
198
  }
179
199
  case ETHERNET_TYPE_KSZ8081:
180
200
  case ETHERNET_TYPE_KSZ8081RNA: {
181
- #if ESP_IDF_VERSION_MAJOR >= 5
182
201
  this->phy_ = esp_eth_phy_new_ksz80xx(&phy_config);
183
- #else
184
- this->phy_ = esp_eth_phy_new_ksz8081(&phy_config);
185
- #endif
186
202
  break;
187
203
  }
188
204
  #endif
189
205
  #ifdef USE_ETHERNET_SPI
206
+ #if CONFIG_ETH_SPI_ETHERNET_W5500
190
207
  case ETHERNET_TYPE_W5500: {
208
+ mac = esp_eth_mac_new_w5500(&w5500_config, &mac_config);
191
209
  this->phy_ = esp_eth_phy_new_w5500(&phy_config);
192
210
  break;
193
211
  }
212
+ #endif
213
+ #if CONFIG_ETH_SPI_ETHERNET_DM9051
214
+ case ETHERNET_TYPE_DM9051: {
215
+ mac = esp_eth_mac_new_dm9051(&dm9051_config, &mac_config);
216
+ this->phy_ = esp_eth_phy_new_dm9051(&phy_config);
217
+ break;
218
+ }
219
+ #endif
194
220
  #endif
195
221
  default: {
196
222
  this->mark_failed();
@@ -274,6 +300,9 @@ void EthernetComponent::loop() {
274
300
  ESP_LOGW(TAG, "Connection lost; reconnecting");
275
301
  this->state_ = EthernetComponentState::CONNECTING;
276
302
  this->start_connect_();
303
+ } else {
304
+ // When connected and stable, disable the loop to save CPU cycles
305
+ this->disable_loop();
277
306
  }
278
307
  break;
279
308
  }
@@ -318,6 +347,10 @@ void EthernetComponent::dump_config() {
318
347
  eth_type = "OPENETH";
319
348
  break;
320
349
 
350
+ case ETHERNET_TYPE_DM9051:
351
+ eth_type = "DM9051";
352
+ break;
353
+
321
354
  default:
322
355
  eth_type = "Unknown";
323
356
  break;
@@ -349,10 +382,11 @@ void EthernetComponent::dump_config() {
349
382
  ESP_LOGCONFIG(TAG, " Power Pin: %u", this->power_pin_);
350
383
  }
351
384
  ESP_LOGCONFIG(TAG,
385
+ " CLK Pin: %u\n"
352
386
  " MDC Pin: %u\n"
353
387
  " MDIO Pin: %u\n"
354
388
  " PHY addr: %u",
355
- this->mdc_pin_, this->mdio_pin_, this->phy_addr_);
389
+ this->clk_pin_, this->mdc_pin_, this->mdio_pin_, this->phy_addr_);
356
390
  #endif
357
391
  ESP_LOGCONFIG(TAG, " Type: %s", eth_type);
358
392
  }
@@ -397,11 +431,13 @@ void EthernetComponent::eth_event_handler(void *arg, esp_event_base_t event_base
397
431
  case ETHERNET_EVENT_START:
398
432
  event_name = "ETH started";
399
433
  global_eth_component->started_ = true;
434
+ global_eth_component->enable_loop_soon_any_context();
400
435
  break;
401
436
  case ETHERNET_EVENT_STOP:
402
437
  event_name = "ETH stopped";
403
438
  global_eth_component->started_ = false;
404
439
  global_eth_component->connected_ = false;
440
+ global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
405
441
  break;
406
442
  case ETHERNET_EVENT_CONNECTED:
407
443
  event_name = "ETH connected";
@@ -409,6 +445,7 @@ void EthernetComponent::eth_event_handler(void *arg, esp_event_base_t event_base
409
445
  case ETHERNET_EVENT_DISCONNECTED:
410
446
  event_name = "ETH disconnected";
411
447
  global_eth_component->connected_ = false;
448
+ global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
412
449
  break;
413
450
  default:
414
451
  return;
@@ -425,8 +462,10 @@ void EthernetComponent::got_ip_event_handler(void *arg, esp_event_base_t event_b
425
462
  global_eth_component->got_ipv4_address_ = true;
426
463
  #if USE_NETWORK_IPV6 && (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
427
464
  global_eth_component->connected_ = global_eth_component->ipv6_count_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT;
465
+ global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
428
466
  #else
429
467
  global_eth_component->connected_ = true;
468
+ global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
430
469
  #endif /* USE_NETWORK_IPV6 */
431
470
  }
432
471
 
@@ -439,8 +478,10 @@ void EthernetComponent::got_ip6_event_handler(void *arg, esp_event_base_t event_
439
478
  #if (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
440
479
  global_eth_component->connected_ =
441
480
  global_eth_component->got_ipv4_address_ && (global_eth_component->ipv6_count_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT);
481
+ global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
442
482
  #else
443
483
  global_eth_component->connected_ = global_eth_component->got_ipv4_address_;
484
+ global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
444
485
  #endif
445
486
  }
446
487
  #endif /* USE_NETWORK_IPV6 */
@@ -566,10 +607,8 @@ void EthernetComponent::set_phy_addr(uint8_t phy_addr) { this->phy_addr_ = phy_a
566
607
  void EthernetComponent::set_power_pin(int power_pin) { this->power_pin_ = power_pin; }
567
608
  void EthernetComponent::set_mdc_pin(uint8_t mdc_pin) { this->mdc_pin_ = mdc_pin; }
568
609
  void EthernetComponent::set_mdio_pin(uint8_t mdio_pin) { this->mdio_pin_ = mdio_pin; }
569
- void EthernetComponent::set_clk_mode(emac_rmii_clock_mode_t clk_mode, emac_rmii_clock_gpio_t clk_gpio) {
570
- this->clk_mode_ = clk_mode;
571
- this->clk_gpio_ = clk_gpio;
572
- }
610
+ void EthernetComponent::set_clk_pin(uint8_t clk_pin) { this->clk_pin_ = clk_pin; }
611
+ void EthernetComponent::set_clk_mode(emac_rmii_clock_mode_t clk_mode) { this->clk_mode_ = clk_mode; }
573
612
  void EthernetComponent::add_phy_register(PHYRegister register_value) { this->phy_registers_.push_back(register_value); }
574
613
  #endif
575
614
  void EthernetComponent::set_type(EthernetType type) { this->type_ = type; }
@@ -620,6 +659,7 @@ bool EthernetComponent::powerdown() {
620
659
  }
621
660
  this->connected_ = false;
622
661
  this->started_ = false;
662
+ // No need to enable_loop() here as this is only called during shutdown/reboot
623
663
  if (this->phy_->pwrctl(this->phy_, false) != ESP_OK) {
624
664
  ESP_LOGE(TAG, "Error powering down ethernet PHY");
625
665
  return false;
@@ -15,7 +15,7 @@
15
15
  namespace esphome {
16
16
  namespace ethernet {
17
17
 
18
- enum EthernetType {
18
+ enum EthernetType : uint8_t {
19
19
  ETHERNET_TYPE_UNKNOWN = 0,
20
20
  ETHERNET_TYPE_LAN8720,
21
21
  ETHERNET_TYPE_RTL8201,
@@ -26,6 +26,7 @@ enum EthernetType {
26
26
  ETHERNET_TYPE_KSZ8081RNA,
27
27
  ETHERNET_TYPE_W5500,
28
28
  ETHERNET_TYPE_OPENETH,
29
+ ETHERNET_TYPE_DM9051,
29
30
  };
30
31
 
31
32
  struct ManualIP {
@@ -42,7 +43,7 @@ struct PHYRegister {
42
43
  uint32_t page;
43
44
  };
44
45
 
45
- enum class EthernetComponentState {
46
+ enum class EthernetComponentState : uint8_t {
46
47
  STOPPED,
47
48
  CONNECTING,
48
49
  CONNECTED,
@@ -75,7 +76,8 @@ class EthernetComponent : public Component {
75
76
  void set_power_pin(int power_pin);
76
77
  void set_mdc_pin(uint8_t mdc_pin);
77
78
  void set_mdio_pin(uint8_t mdio_pin);
78
- void set_clk_mode(emac_rmii_clock_mode_t clk_mode, emac_rmii_clock_gpio_t clk_gpio);
79
+ void set_clk_pin(uint8_t clk_pin);
80
+ void set_clk_mode(emac_rmii_clock_mode_t clk_mode);
79
81
  void add_phy_register(PHYRegister register_value);
80
82
  #endif
81
83
  void set_type(EthernetType type);
@@ -119,25 +121,31 @@ class EthernetComponent : public Component {
119
121
  uint32_t polling_interval_{0};
120
122
  #endif
121
123
  #else
122
- uint8_t phy_addr_{0};
124
+ // Group all 32-bit members first
123
125
  int power_pin_{-1};
124
- uint8_t mdc_pin_{23};
125
- uint8_t mdio_pin_{18};
126
126
  emac_rmii_clock_mode_t clk_mode_{EMAC_CLK_EXT_IN};
127
- emac_rmii_clock_gpio_t clk_gpio_{EMAC_CLK_IN_GPIO};
128
127
  std::vector<PHYRegister> phy_registers_{};
128
+
129
+ // Group all 8-bit members together
130
+ uint8_t clk_pin_{0};
131
+ uint8_t phy_addr_{0};
132
+ uint8_t mdc_pin_{23};
133
+ uint8_t mdio_pin_{18};
129
134
  #endif
130
- EthernetType type_{ETHERNET_TYPE_UNKNOWN};
131
135
  optional<ManualIP> manual_ip_{};
136
+ uint32_t connect_begin_;
132
137
 
138
+ // Group all uint8_t types together (enums and bools)
139
+ EthernetType type_{ETHERNET_TYPE_UNKNOWN};
140
+ EthernetComponentState state_{EthernetComponentState::STOPPED};
133
141
  bool started_{false};
134
142
  bool connected_{false};
135
143
  bool got_ipv4_address_{false};
136
144
  #if LWIP_IPV6
137
145
  uint8_t ipv6_count_{0};
138
146
  #endif /* LWIP_IPV6 */
139
- EthernetComponentState state_{EthernetComponentState::STOPPED};
140
- uint32_t connect_begin_;
147
+
148
+ // Pointers at the end (naturally aligned)
141
149
  esp_netif_t *eth_netif_{nullptr};
142
150
  esp_eth_handle_t eth_handle_;
143
151
  esp_eth_phy_t *phy_{nullptr};
@@ -18,8 +18,8 @@ from esphome.const import (
18
18
  DEVICE_CLASS_MOTION,
19
19
  )
20
20
  from esphome.core import CORE, coroutine_with_priority
21
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
21
22
  from esphome.cpp_generator import MockObjClass
22
- from esphome.cpp_helpers import setup_entity
23
23
 
24
24
  CODEOWNERS = ["@nohat"]
25
25
  IS_PLATFORM_COMPONENT = True
@@ -59,6 +59,9 @@ _EVENT_SCHEMA = (
59
59
  )
60
60
 
61
61
 
62
+ _EVENT_SCHEMA.add_extra(entity_duplicate_validator("event"))
63
+
64
+
62
65
  def event_schema(
63
66
  class_: MockObjClass = cv.UNDEFINED,
64
67
  *,
@@ -88,7 +91,7 @@ EVENT_SCHEMA.add_extra(cv.deprecated_schema_constant("event"))
88
91
 
89
92
 
90
93
  async def setup_event_core_(var, config, *, event_types: list[str]):
91
- await setup_entity(var, config)
94
+ await setup_entity(var, config, "event")
92
95
 
93
96
  for conf in config.get(CONF_ON_EVENT, []):
94
97
  trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
@@ -38,7 +38,6 @@ class EZOSensor : public sensor::Sensor, public PollingComponent, public i2c::I2
38
38
  void loop() override;
39
39
  void dump_config() override;
40
40
  void update() override;
41
- float get_setup_priority() const override { return setup_priority::DATA; };
42
41
 
43
42
  // I2C
44
43
  void set_address(uint8_t address);
@@ -23,7 +23,6 @@ namespace ezo_pmp {
23
23
  class EzoPMP : public PollingComponent, public i2c::I2CDevice {
24
24
  public:
25
25
  void dump_config() override;
26
- float get_setup_priority() const override { return setup_priority::DATA; };
27
26
 
28
27
  void loop() override;
29
28
  void update() override;
@@ -32,7 +32,7 @@ from esphome.const import (
32
32
  CONF_WEB_SERVER,
33
33
  )
34
34
  from esphome.core import CORE, coroutine_with_priority
35
- from esphome.cpp_helpers import setup_entity
35
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
36
36
 
37
37
  IS_PLATFORM_COMPONENT = True
38
38
 
@@ -161,6 +161,9 @@ _FAN_SCHEMA = (
161
161
  )
162
162
 
163
163
 
164
+ _FAN_SCHEMA.add_extra(entity_duplicate_validator("fan"))
165
+
166
+
164
167
  def fan_schema(
165
168
  class_: cg.Pvariable,
166
169
  *,
@@ -225,7 +228,7 @@ def validate_preset_modes(value):
225
228
 
226
229
 
227
230
  async def setup_fan_core_(var, config):
228
- await setup_entity(var, config)
231
+ await setup_entity(var, config, "fan")
229
232
 
230
233
  cg.add(var.set_restore_mode(config[CONF_RESTORE_MODE]))
231
234
 
@@ -16,7 +16,6 @@ class FeedbackCover : public cover::Cover, public Component {
16
16
  void setup() override;
17
17
  void loop() override;
18
18
  void dump_config() override;
19
- float get_setup_priority() const override { return setup_priority::DATA; };
20
19
 
21
20
  Trigger<> *get_open_trigger() const { return this->open_trigger_; }
22
21
  Trigger<> *get_close_trigger() const { return this->close_trigger_; }