esphome 2025.5.1__py3-none-any.whl → 2025.6.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +712 -358
  29. esphome/components/api/api_connection.h +343 -284
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +2 -0
  33. esphome/components/api/api_pb2.h +637 -1
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -2
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +4 -3
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -14
  67. esphome/components/bme280_base/bme280_base.cpp +3 -3
  68. esphome/components/bme680/bme680.cpp +3 -3
  69. esphome/components/bme680/sensor.py +2 -2
  70. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  71. esphome/components/bme680_bsec/sensor.py +7 -3
  72. esphome/components/bme68x_bsec2/__init__.py +6 -5
  73. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  74. esphome/components/bme68x_bsec2/sensor.py +4 -4
  75. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  76. esphome/components/bmi160/bmi160.cpp +11 -11
  77. esphome/components/bmp085/bmp085.cpp +2 -2
  78. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  79. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  80. esphome/components/bmp581/bmp581.cpp +33 -27
  81. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  82. esphome/components/bp5758d/bp5758d.cpp +1 -1
  83. esphome/components/button/__init__.py +1 -0
  84. esphome/components/canbus/canbus.cpp +1 -1
  85. esphome/components/cap1188/cap1188.cpp +6 -4
  86. esphome/components/captive_portal/captive_portal.cpp +1 -1
  87. esphome/components/ccs811/ccs811.cpp +3 -2
  88. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  89. esphome/components/ch422g/ch422g.cpp +2 -2
  90. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  91. esphome/components/climate/__init__.py +1 -0
  92. esphome/components/climate/climate.cpp +12 -7
  93. esphome/components/climate/climate.h +1 -1
  94. esphome/components/climate_ir/climate_ir.cpp +7 -4
  95. esphome/components/cm1106/__init__.py +1 -0
  96. esphome/components/cm1106/cm1106.cpp +112 -0
  97. esphome/components/cm1106/cm1106.h +40 -0
  98. esphome/components/cm1106/sensor.py +72 -0
  99. esphome/components/const/__init__.py +1 -0
  100. esphome/components/cover/__init__.py +1 -0
  101. esphome/components/cs5460a/cs5460a.cpp +16 -11
  102. esphome/components/cse7761/cse7761.cpp +2 -2
  103. esphome/components/cse7766/cse7766.cpp +0 -5
  104. esphome/components/cse7766/cse7766.h +5 -1
  105. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  106. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  107. esphome/components/current_based/current_based_cover.cpp +4 -2
  108. esphome/components/dac7678/dac7678_output.cpp +4 -4
  109. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  110. esphome/components/daly_bms/daly_bms.cpp +2 -1
  111. esphome/components/dashboard_import/__init__.py +1 -2
  112. esphome/components/datetime/__init__.py +3 -1
  113. esphome/components/debug/debug_component.cpp +1 -5
  114. esphome/components/debug/debug_component.h +1 -1
  115. esphome/components/debug/debug_esp32.cpp +4 -2
  116. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  117. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  118. esphome/components/demo/__init__.py +206 -0
  119. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  120. esphome/components/demo/demo_button.h +15 -0
  121. esphome/components/demo/demo_date.h +34 -0
  122. esphome/components/demo/demo_datetime.h +40 -0
  123. esphome/components/demo/demo_lock.h +17 -0
  124. esphome/components/demo/demo_select.h +15 -0
  125. esphome/components/demo/demo_text.h +18 -0
  126. esphome/components/demo/demo_time.h +34 -0
  127. esphome/components/demo/demo_valve.h +54 -0
  128. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  129. esphome/components/dht/dht.cpp +29 -50
  130. esphome/components/dht12/dht12.cpp +2 -2
  131. esphome/components/display/display.h +5 -3
  132. esphome/components/dps310/dps310.cpp +7 -5
  133. esphome/components/ds1307/ds1307.cpp +2 -2
  134. esphome/components/dsmr/dsmr.cpp +5 -3
  135. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  136. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  137. esphome/components/ee895/ee895.cpp +3 -3
  138. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  139. esphome/components/emc2101/emc2101.cpp +11 -9
  140. esphome/components/ens160_base/ens160_base.cpp +2 -2
  141. esphome/components/ens210/ens210.cpp +2 -2
  142. esphome/components/es7210/es7210.cpp +6 -4
  143. esphome/components/es7243e/es7243e.cpp +1 -1
  144. esphome/components/es8156/es8156.cpp +1 -1
  145. esphome/components/es8311/es8311.cpp +8 -6
  146. esphome/components/es8388/__init__.py +0 -0
  147. esphome/components/es8388/audio_dac.py +26 -0
  148. esphome/components/es8388/es8388.cpp +289 -0
  149. esphome/components/es8388/es8388.h +81 -0
  150. esphome/components/es8388/es8388_const.h +83 -0
  151. esphome/components/es8388/select/__init__.py +47 -0
  152. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  153. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  154. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  155. esphome/components/es8388/select/dac_output_select.h +15 -0
  156. esphome/components/esp32/__init__.py +88 -20
  157. esphome/components/esp32/boards.py +208 -125
  158. esphome/components/esp32/const.py +6 -0
  159. esphome/components/esp32/gpio.py +14 -1
  160. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  161. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  162. esphome/components/esp32/preferences.cpp +7 -7
  163. esphome/components/esp32_ble/__init__.py +115 -0
  164. esphome/components/esp32_ble/ble.cpp +11 -9
  165. esphome/components/esp32_ble/ble_uuid.h +1 -1
  166. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  167. esphome/components/esp32_ble_server/__init__.py +4 -1
  168. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  169. esphome/components/esp32_ble_server/ble_server.h +0 -1
  170. esphome/components/esp32_ble_tracker/__init__.py +6 -2
  171. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
  172. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  173. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  174. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  175. esphome/components/esp32_improv/__init__.py +5 -1
  176. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  177. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  178. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  179. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  180. esphome/components/esp8266/gpio.cpp +10 -1
  181. esphome/components/esp8266/preferences.cpp +6 -6
  182. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  183. esphome/components/esp_ldo/__init__.py +91 -0
  184. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  185. esphome/components/esp_ldo/esp_ldo.h +43 -0
  186. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  187. esphome/components/ethernet/ethernet_component.cpp +38 -26
  188. esphome/components/ethernet/ethernet_component.h +1 -1
  189. esphome/components/event/__init__.py +1 -0
  190. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  191. esphome/components/ezo/ezo.cpp +1 -1
  192. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  193. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  194. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  195. esphome/components/fan/__init__.py +1 -0
  196. esphome/components/fan/fan.cpp +4 -2
  197. esphome/components/fastled_base/fastled_light.cpp +7 -5
  198. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  199. esphome/components/fs3000/fs3000.cpp +1 -1
  200. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  201. esphome/components/ft63x6/ft63x6.cpp +5 -3
  202. esphome/components/gcja5/gcja5.cpp +0 -12
  203. esphome/components/gcja5/gcja5.h +8 -3
  204. esphome/components/gdk101/gdk101.cpp +2 -2
  205. esphome/components/globals/globals_component.h +13 -10
  206. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  207. esphome/components/gp8403/gp8403.cpp +4 -2
  208. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  209. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  210. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  211. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  212. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  213. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  215. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  216. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  217. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  218. esphome/components/haier/haier_base.cpp +2 -2
  219. esphome/components/haier/hon_climate.cpp +13 -6
  220. esphome/components/havells_solar/havells_solar.cpp +5 -2
  221. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  222. esphome/components/hdc1080/hdc1080.cpp +2 -2
  223. esphome/components/he60r/he60r.cpp +4 -2
  224. esphome/components/hlw8012/hlw8012.cpp +6 -4
  225. esphome/components/hm3301/hm3301.cpp +2 -2
  226. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  227. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  228. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  229. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  230. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  231. esphome/components/hte501/hte501.cpp +3 -2
  232. esphome/components/http_request/__init__.py +2 -2
  233. esphome/components/http_request/http_request.cpp +7 -5
  234. esphome/components/http_request/http_request_idf.cpp +4 -2
  235. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  236. esphome/components/htu21d/htu21d.cpp +2 -2
  237. esphome/components/htu31d/htu31d.cpp +2 -2
  238. esphome/components/hx711/hx711.cpp +2 -2
  239. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  240. esphome/components/hyt271/hyt271.cpp +2 -2
  241. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  242. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  243. esphome/components/i2s_audio/__init__.py +2 -0
  244. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  245. esphome/components/i2s_audio/i2s_audio.h +1 -1
  246. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  247. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  248. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +54 -64
  249. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -0
  250. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  251. esphome/components/iaqcore/iaqcore.cpp +3 -3
  252. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  253. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  254. esphome/components/image/image.cpp +1 -0
  255. esphome/components/ina219/ina219.cpp +2 -2
  256. esphome/components/ina226/ina226.cpp +8 -5
  257. esphome/components/ina260/ina260.cpp +1 -1
  258. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  259. esphome/components/ina3221/ina3221.cpp +2 -2
  260. esphome/components/inkplate6/display.py +12 -2
  261. esphome/components/inkplate6/inkplate.cpp +13 -9
  262. esphome/components/inkplate6/inkplate.h +7 -6
  263. esphome/components/integration/integration_sensor.cpp +1 -1
  264. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  265. esphome/components/json/json_util.cpp +4 -5
  266. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  267. esphome/components/key_collector/key_collector.cpp +4 -2
  268. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  269. esphome/components/kuntze/kuntze.cpp +4 -2
  270. esphome/components/lc709203f/__init__.py +1 -0
  271. esphome/components/lc709203f/lc709203f.cpp +299 -0
  272. esphome/components/lc709203f/lc709203f.h +55 -0
  273. esphome/components/lc709203f/sensor.py +93 -0
  274. esphome/components/lcd_base/lcd_display.cpp +2 -2
  275. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  276. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  277. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  278. esphome/components/ld2410/ld2410.cpp +6 -7
  279. esphome/components/ld2420/ld2420.cpp +9 -7
  280. esphome/components/ld2450/ld2450.cpp +6 -4
  281. esphome/components/ld2450/sensor.py +2 -2
  282. esphome/components/ledc/ledc_output.cpp +32 -28
  283. esphome/components/libretiny/const.py +1 -1
  284. esphome/components/libretiny/preferences.cpp +6 -7
  285. esphome/components/light/__init__.py +2 -1
  286. esphome/components/light/esp_hsv_color.h +1 -1
  287. esphome/components/light/light_state.cpp +9 -5
  288. esphome/components/light/light_transformer.h +1 -1
  289. esphome/components/lightwaverf/LwTx.cpp +1 -1
  290. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  291. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  292. esphome/components/lock/__init__.py +1 -0
  293. esphome/components/lock/lock.h +1 -1
  294. esphome/components/logger/__init__.py +6 -0
  295. esphome/components/logger/logger.cpp +9 -5
  296. esphome/components/logger/logger.h +4 -4
  297. esphome/components/logger/logger_esp32.cpp +5 -5
  298. esphome/components/ltr390/ltr390.cpp +8 -5
  299. esphome/components/ltr501/ltr501.cpp +19 -14
  300. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  301. esphome/components/lvgl/__init__.py +2 -2
  302. esphome/components/lvgl/automation.py +5 -4
  303. esphome/components/lvgl/defines.py +0 -2
  304. esphome/components/lvgl/lv_validation.py +1 -3
  305. esphome/components/lvgl/lvcode.py +7 -8
  306. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  307. esphome/components/lvgl/schemas.py +22 -23
  308. esphome/components/lvgl/trigger.py +8 -3
  309. esphome/components/lvgl/widgets/__init__.py +2 -2
  310. esphome/components/lvgl/widgets/canvas.py +9 -3
  311. esphome/components/lvgl/widgets/line.py +2 -1
  312. esphome/components/lvgl/widgets/tabview.py +7 -0
  313. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  314. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  315. esphome/components/max17043/max17043.cpp +2 -2
  316. esphome/components/max31855/max31855.cpp +2 -1
  317. esphome/components/max31856/max31856.cpp +9 -11
  318. esphome/components/max31865/max31865.cpp +6 -4
  319. esphome/components/max44009/max44009.cpp +2 -2
  320. esphome/components/max6675/max6675.cpp +1 -1
  321. esphome/components/max6956/max6956.cpp +5 -3
  322. esphome/components/max7219/max7219.cpp +8 -6
  323. esphome/components/max7219digit/automation.h +52 -0
  324. esphome/components/max7219digit/display.py +93 -1
  325. esphome/components/max7219digit/max7219digit.cpp +16 -13
  326. esphome/components/max9611/max9611.cpp +9 -6
  327. esphome/components/mcp23008/mcp23008.cpp +1 -1
  328. esphome/components/mcp23016/mcp23016.cpp +1 -1
  329. esphome/components/mcp23017/mcp23017.cpp +1 -1
  330. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  331. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  332. esphome/components/mcp3008/mcp3008.cpp +1 -1
  333. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  334. esphome/components/mcp3204/mcp3204.cpp +1 -1
  335. esphome/components/mcp4461/mcp4461.cpp +2 -2
  336. esphome/components/mcp4725/mcp4725.cpp +2 -2
  337. esphome/components/mcp4728/mcp4728.cpp +2 -2
  338. esphome/components/mcp9600/mcp9600.cpp +1 -1
  339. esphome/components/mcp9808/mcp9808.cpp +4 -4
  340. esphome/components/mdns/mdns_component.cpp +8 -2
  341. esphome/components/mdns/mdns_component.h +3 -1
  342. esphome/components/mdns/mdns_esp32.cpp +2 -2
  343. esphome/components/media_player/__init__.py +1 -0
  344. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  345. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  346. esphome/components/micronova/micronova.h +2 -2
  347. esphome/components/mics_4514/mics_4514.cpp +2 -2
  348. esphome/components/midea/air_conditioner.cpp +7 -5
  349. esphome/components/midea_ir/midea_ir.cpp +1 -1
  350. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  351. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  352. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  353. esphome/components/mlx90614/mlx90614.cpp +4 -3
  354. esphome/components/mmc5603/mmc5603.cpp +2 -2
  355. esphome/components/mmc5983/mmc5983.cpp +1 -1
  356. esphome/components/modbus/modbus.cpp +7 -5
  357. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  358. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  359. esphome/components/modbus_controller/switch/__init__.py +6 -2
  360. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  361. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  362. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  363. esphome/components/mpr121/mpr121.cpp +2 -2
  364. esphome/components/mpu6050/mpu6050.cpp +6 -6
  365. esphome/components/mpu6886/mpu6886.cpp +6 -6
  366. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  367. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  368. esphome/components/mqtt/mqtt_client.cpp +31 -24
  369. esphome/components/mqtt/mqtt_component.cpp +2 -2
  370. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  371. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  372. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  373. esphome/components/ms5611/ms5611.cpp +2 -2
  374. esphome/components/ms8607/ms8607.cpp +2 -2
  375. esphome/components/msa3xx/msa3xx.cpp +16 -12
  376. esphome/components/my9231/my9231.cpp +7 -5
  377. esphome/components/nau7802/nau7802.cpp +6 -4
  378. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  379. esphome/components/network/ip_address.h +1 -1
  380. esphome/components/network/util.cpp +13 -0
  381. esphome/components/nextion/base_component.py +2 -0
  382. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  383. esphome/components/nextion/display.py +34 -22
  384. esphome/components/nextion/nextion.cpp +182 -143
  385. esphome/components/nextion/nextion.h +36 -0
  386. esphome/components/nextion/nextion_commands.cpp +3 -3
  387. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  388. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  389. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  390. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  391. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  392. esphome/components/nfc/nci_message.h +1 -1
  393. esphome/components/nfc/ndef_record.h +1 -1
  394. esphome/components/nfc/ndef_record_text.h +1 -1
  395. esphome/components/nfc/ndef_record_uri.h +1 -1
  396. esphome/components/nfc/nfc.h +1 -1
  397. esphome/components/nfc/nfc_tag.h +1 -1
  398. esphome/components/noblex/noblex.cpp +1 -1
  399. esphome/components/npi19/npi19.cpp +5 -7
  400. esphome/components/number/__init__.py +11 -0
  401. esphome/components/online_image/__init__.py +13 -1
  402. esphome/components/online_image/online_image.cpp +26 -4
  403. esphome/components/online_image/online_image.h +21 -4
  404. esphome/components/opentherm/generate.py +3 -3
  405. esphome/components/opentherm/hub.cpp +11 -7
  406. esphome/components/opentherm/number/number.cpp +5 -3
  407. esphome/components/opentherm/opentherm.h +1 -1
  408. esphome/components/opentherm/schema.py +13 -13
  409. esphome/components/opentherm/validate.py +1 -1
  410. esphome/components/openthread/__init__.py +146 -0
  411. esphome/components/openthread/const.py +10 -0
  412. esphome/components/openthread/openthread.cpp +206 -0
  413. esphome/components/openthread/openthread.h +68 -0
  414. esphome/components/openthread/openthread_esp.cpp +164 -0
  415. esphome/components/openthread/tlv.py +58 -0
  416. esphome/components/openthread_info/__init__.py +0 -0
  417. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  418. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  419. esphome/components/openthread_info/text_sensor.py +105 -0
  420. esphome/components/output/float_output.cpp +1 -1
  421. esphome/components/output/switch/output_switch.cpp +1 -1
  422. esphome/components/packet_transport/packet_transport.cpp +6 -4
  423. esphome/components/pca6416a/pca6416a.cpp +2 -2
  424. esphome/components/pca9554/pca9554.cpp +6 -4
  425. esphome/components/pca9685/pca9685_output.cpp +12 -8
  426. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  427. esphome/components/pcf85063/pcf85063.cpp +2 -2
  428. esphome/components/pcf8563/pcf8563.cpp +2 -2
  429. esphome/components/pcf8574/pcf8574.cpp +2 -2
  430. esphome/components/pid/pid_climate.cpp +8 -5
  431. esphome/components/pid/pid_climate.h +1 -1
  432. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  433. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  434. esphome/components/pipsolar/pipsolar.cpp +3 -3
  435. esphome/components/pm1006/pm1006.cpp +3 -7
  436. esphome/components/pm1006/pm1006.h +4 -1
  437. esphome/components/pm2005/pm2005.cpp +12 -13
  438. esphome/components/pm2005/sensor.py +1 -1
  439. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  440. esphome/components/pmsx003/pmsx003.cpp +0 -4
  441. esphome/components/pmsx003/pmsx003.h +5 -2
  442. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  443. esphome/components/pmwcs3/pmwcs3.h +0 -1
  444. esphome/components/pn532/pn532.cpp +7 -7
  445. esphome/components/pn532/pn532.h +1 -1
  446. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  447. esphome/components/pn7150/pn7150.cpp +4 -4
  448. esphome/components/pn7160/pn7160.cpp +4 -4
  449. esphome/components/power_supply/power_supply.cpp +6 -4
  450. esphome/components/power_supply/power_supply.h +1 -1
  451. esphome/components/psram/__init__.py +59 -35
  452. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  453. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  454. esphome/components/pylontech/pylontech.cpp +2 -2
  455. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  456. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  457. esphome/components/pzemac/pzemac.cpp +4 -2
  458. esphome/components/pzemdc/pzemdc.cpp +4 -2
  459. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  460. esphome/components/qmp6988/qmp6988.cpp +2 -2
  461. esphome/components/qmp6988/qmp6988.h +1 -1
  462. esphome/components/qr_code/qr_code.cpp +5 -3
  463. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  464. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  465. esphome/components/rc522/rc522.cpp +5 -5
  466. esphome/components/rdm6300/rdm6300.cpp +1 -0
  467. esphome/components/remote_receiver/__init__.py +10 -2
  468. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  469. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  470. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  471. esphome/components/remote_transmitter/__init__.py +10 -2
  472. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  473. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  474. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  475. esphome/components/resistance/resistance_sensor.cpp +6 -3
  476. esphome/components/restart/button/restart_button.cpp +1 -1
  477. esphome/components/restart/switch/restart_switch.cpp +1 -1
  478. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  479. esphome/components/rp2040/__init__.py +7 -0
  480. esphome/components/rp2040/core.cpp +8 -1
  481. esphome/components/rp2040/gpio.cpp +26 -9
  482. esphome/components/rp2040/preferences.cpp +3 -3
  483. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  484. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  485. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  486. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  487. esphome/components/rtttl/rtttl.cpp +11 -9
  488. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  489. esphome/components/safe_mode/safe_mode.cpp +9 -8
  490. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  491. esphome/components/scd30/scd30.cpp +11 -8
  492. esphome/components/scd4x/scd4x.cpp +12 -8
  493. esphome/components/sdl/display.py +40 -0
  494. esphome/components/sdl/sdl_esphome.cpp +2 -2
  495. esphome/components/sdl/sdl_esphome.h +8 -0
  496. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  497. esphome/components/sdp3x/sdp3x.cpp +11 -11
  498. esphome/components/sds011/sds011.cpp +5 -6
  499. esphome/components/sds011/sds011.h +4 -1
  500. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  501. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  502. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  503. esphome/components/selec_meter/selec_meter.cpp +5 -2
  504. esphome/components/select/__init__.py +1 -0
  505. esphome/components/sen0321/sen0321.cpp +2 -2
  506. esphome/components/sen21231/sen21231.cpp +1 -1
  507. esphome/components/sen5x/sen5x.cpp +10 -7
  508. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  509. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  510. esphome/components/sensor/__init__.py +11 -1
  511. esphome/components/sensor/filter.h +1 -1
  512. esphome/components/sensor/sensor.h +9 -5
  513. esphome/components/servo/servo.cpp +12 -9
  514. esphome/components/servo/servo.h +1 -1
  515. esphome/components/sfa30/sfa30.cpp +1 -1
  516. esphome/components/sgp30/sgp30.cpp +10 -8
  517. esphome/components/sgp4x/sgp4x.cpp +49 -61
  518. esphome/components/sgp4x/sgp4x.h +0 -1
  519. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  520. esphome/components/sht3xd/sht3xd.cpp +1 -1
  521. esphome/components/sht4x/sht4x.cpp +2 -2
  522. esphome/components/shtcx/shtcx.cpp +13 -16
  523. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  524. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  525. esphome/components/sim800l/sim800l.cpp +2 -2
  526. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  527. esphome/components/sm16716/sm16716.cpp +1 -1
  528. esphome/components/sm2135/sm2135.cpp +1 -1
  529. esphome/components/sm2235/sm2235.cpp +5 -3
  530. esphome/components/sm2335/sm2335.cpp +5 -3
  531. esphome/components/sml/sml.cpp +1 -1
  532. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  533. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  534. esphome/components/sntp/sntp_component.cpp +1 -1
  535. esphome/components/socket/__init__.py +2 -0
  536. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  537. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  538. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  539. esphome/components/socket/socket.cpp +31 -0
  540. esphome/components/socket/socket.h +27 -1
  541. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  542. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  543. esphome/components/sound_level/sound_level.cpp +4 -2
  544. esphome/components/speaker/media_player/__init__.py +3 -0
  545. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  546. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  547. esphome/components/spi/__init__.py +10 -2
  548. esphome/components/spi/spi.cpp +4 -4
  549. esphome/components/spi_device/spi_device.cpp +1 -2
  550. esphome/components/sprinkler/sprinkler.cpp +9 -6
  551. esphome/components/sps30/sps30.cpp +16 -15
  552. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  553. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  554. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  555. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  556. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  557. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  558. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  559. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  560. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  561. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  562. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  563. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  564. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  565. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  566. esphome/components/st7567_base/st7567_base.cpp +3 -3
  567. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  568. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  569. esphome/components/st7701s/st7701s.cpp +4 -2
  570. esphome/components/st7735/st7735.cpp +3 -3
  571. esphome/components/st7789v/st7789v.cpp +10 -7
  572. esphome/components/st7920/st7920.cpp +6 -4
  573. esphome/components/statsd/statsd.cpp +9 -5
  574. esphome/components/status_led/light/status_led_light.cpp +1 -1
  575. esphome/components/status_led/status_led.cpp +1 -1
  576. esphome/components/stepper/stepper.h +5 -3
  577. esphome/components/sts3x/sts3x.cpp +2 -2
  578. esphome/components/switch/__init__.py +1 -0
  579. esphome/components/switch/switch.cpp +18 -12
  580. esphome/components/switch/switch.h +1 -1
  581. esphome/components/sx1509/__init__.py +53 -20
  582. esphome/components/sx1509/sx1509.cpp +29 -5
  583. esphome/components/sx1509/sx1509.h +9 -1
  584. esphome/components/t6615/t6615.cpp +1 -0
  585. esphome/components/tc74/tc74.cpp +1 -1
  586. esphome/components/tca9548a/tca9548a.cpp +1 -1
  587. esphome/components/tca9555/tca9555.cpp +2 -2
  588. esphome/components/tcs34725/tcs34725.cpp +4 -4
  589. esphome/components/tee501/tee501.cpp +3 -2
  590. esphome/components/tem3200/tem3200.cpp +5 -6
  591. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  592. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  593. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  594. esphome/components/template/cover/template_cover.cpp +1 -1
  595. esphome/components/template/select/template_select.cpp +6 -4
  596. esphome/components/template/text/template_text.cpp +2 -3
  597. esphome/components/template/valve/template_valve.cpp +5 -3
  598. esphome/components/text/__init__.py +10 -11
  599. esphome/components/text_sensor/__init__.py +1 -0
  600. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  601. esphome/components/time/__init__.py +1 -2
  602. esphome/components/time_based/time_based_cover.cpp +4 -2
  603. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  604. esphome/components/tm1621/tm1621.cpp +3 -3
  605. esphome/components/tm1637/tm1637.cpp +9 -7
  606. esphome/components/tm1638/tm1638.cpp +7 -5
  607. esphome/components/tm1651/tm1651.cpp +2 -2
  608. esphome/components/tmp102/tmp102.cpp +1 -3
  609. esphome/components/tmp102/tmp102.h +0 -3
  610. esphome/components/tmp1075/tmp1075.cpp +12 -9
  611. esphome/components/tmp117/tmp117.cpp +2 -2
  612. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  613. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  614. esphome/components/tsl2561/tsl2561.cpp +7 -5
  615. esphome/components/tsl2591/tsl2591.cpp +25 -27
  616. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  617. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  618. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  619. esphome/components/tuya/select/tuya_select.cpp +5 -3
  620. esphome/components/tx20/tx20.cpp +3 -3
  621. esphome/components/uart/__init__.py +4 -5
  622. esphome/components/uart/button/uart_button.cpp +1 -1
  623. esphome/components/uart/switch/uart_switch.cpp +2 -2
  624. esphome/components/uart/uart.cpp +2 -2
  625. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  626. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  627. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  628. esphome/components/uart/uart_component_host.cpp +11 -8
  629. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  630. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  631. esphome/components/udp/udp_component.cpp +9 -5
  632. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  633. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  634. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  635. esphome/components/update/__init__.py +1 -0
  636. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  637. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  638. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  639. esphome/components/usb_host/__init__.py +64 -0
  640. esphome/components/usb_host/usb_host.h +116 -0
  641. esphome/components/usb_host/usb_host_client.cpp +394 -0
  642. esphome/components/usb_host/usb_host_component.cpp +35 -0
  643. esphome/components/usb_uart/__init__.py +134 -0
  644. esphome/components/usb_uart/ch34x.cpp +80 -0
  645. esphome/components/usb_uart/cp210x.cpp +126 -0
  646. esphome/components/usb_uart/usb_uart.cpp +328 -0
  647. esphome/components/usb_uart/usb_uart.h +151 -0
  648. esphome/components/valve/__init__.py +1 -0
  649. esphome/components/veml3235/veml3235.cpp +13 -9
  650. esphome/components/veml7700/veml7700.cpp +10 -6
  651. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  652. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  653. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  654. esphome/components/web_server/server_index_v2.h +632 -630
  655. esphome/components/web_server/server_index_v3.h +411 -409
  656. esphome/components/web_server/web_server.cpp +5 -3
  657. esphome/components/web_server_base/web_server_base.cpp +1 -1
  658. esphome/components/web_server_idf/utils.cpp +1 -1
  659. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  660. esphome/components/weikai/__init__.py +2 -0
  661. esphome/components/weikai/weikai.cpp +23 -21
  662. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  663. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  664. esphome/components/wiegand/wiegand.cpp +1 -1
  665. esphome/components/wifi/wifi_component.cpp +50 -37
  666. esphome/components/wifi/wifi_component.h +7 -4
  667. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  668. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  669. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  670. esphome/components/wireguard/wireguard.cpp +21 -21
  671. esphome/components/wl_134/text_sensor.py +1 -2
  672. esphome/components/wled/wled_light_effect.cpp +1 -1
  673. esphome/components/x9c/x9c.cpp +5 -3
  674. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  675. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  676. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  677. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  678. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  679. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  680. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  681. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  682. esphome/components/xl9535/xl9535.cpp +2 -2
  683. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  684. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  685. esphome/config.py +3 -2
  686. esphome/config_validation.py +46 -17
  687. esphome/const.py +10 -1
  688. esphome/core/__init__.py +37 -18
  689. esphome/core/application.cpp +188 -5
  690. esphome/core/application.h +110 -0
  691. esphome/core/component.h +13 -0
  692. esphome/core/config.py +12 -0
  693. esphome/core/defines.h +10 -2
  694. esphome/core/hal.h +5 -0
  695. esphome/core/helpers.cpp +1 -1
  696. esphome/core/helpers.h +4 -4
  697. esphome/core/log.h +2 -0
  698. esphome/core/log_const_en.h +4 -0
  699. esphome/core/scheduler.cpp +2 -2
  700. esphome/coroutine.py +3 -4
  701. esphome/cpp_generator.py +32 -32
  702. esphome/dashboard/core.py +2 -2
  703. esphome/dashboard/web_server.py +2 -2
  704. esphome/git.py +4 -4
  705. esphome/helpers.py +5 -6
  706. esphome/loader.py +8 -7
  707. esphome/log.py +7 -1
  708. esphome/platformio_api.py +2 -3
  709. esphome/storage_json.py +13 -5
  710. esphome/types.py +12 -13
  711. esphome/util.py +1 -2
  712. esphome/writer.py +5 -3
  713. esphome/yaml_util.py +6 -1
  714. esphome/zeroconf.py +1 -1
  715. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  716. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +720 -667
  717. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  718. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  719. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  720. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -324,10 +324,10 @@ void ESP32ImprovComponent::process_incoming_data_() {
324
324
  this->incoming_data_.clear();
325
325
  }
326
326
  } else if (this->incoming_data_.size() - 2 > length) {
327
- ESP_LOGV(TAG, "Too much data received or data malformed; resetting buffer...");
327
+ ESP_LOGV(TAG, "Too much data received or data malformed; resetting buffer");
328
328
  this->incoming_data_.clear();
329
329
  } else {
330
- ESP_LOGV(TAG, "Waiting for split data packets...");
330
+ ESP_LOGV(TAG, "Waiting for split data packets");
331
331
  }
332
332
  }
333
333
 
@@ -22,7 +22,7 @@ static const uint8_t RMT_CLK_DIV = 2;
22
22
  #endif
23
23
 
24
24
  void ESP32RMTLEDStripLightOutput::setup() {
25
- ESP_LOGCONFIG(TAG, "Setting up ESP32 LED Strip...");
25
+ ESP_LOGCONFIG(TAG, "Running setup");
26
26
 
27
27
  size_t buffer_size = this->get_buffer_size_();
28
28
 
@@ -143,7 +143,7 @@ void ESP32RMTLEDStripLightOutput::write_state(light::LightState *state) {
143
143
  this->last_refresh_ = now;
144
144
  this->mark_shown_();
145
145
 
146
- ESP_LOGVV(TAG, "Writing RGB values to bus...");
146
+ ESP_LOGVV(TAG, "Writing RGB values to bus");
147
147
 
148
148
  #if ESP_IDF_VERSION_MAJOR >= 5
149
149
  esp_err_t error = rmt_tx_wait_all_done(this->channel_, 1000);
@@ -247,8 +247,10 @@ light::ESPColorView ESP32RMTLEDStripLightOutput::get_view_internal(int32_t index
247
247
  }
248
248
 
249
249
  void ESP32RMTLEDStripLightOutput::dump_config() {
250
- ESP_LOGCONFIG(TAG, "ESP32 RMT LED Strip:");
251
- ESP_LOGCONFIG(TAG, " Pin: %u", this->pin_);
250
+ ESP_LOGCONFIG(TAG,
251
+ "ESP32 RMT LED Strip:\n"
252
+ " Pin: %u",
253
+ this->pin_);
252
254
  #if ESP_IDF_VERSION_MAJOR >= 5
253
255
  ESP_LOGCONFIG(TAG, " RMT Symbols: %" PRIu32, this->rmt_symbols_);
254
256
  #else
@@ -278,9 +280,11 @@ void ESP32RMTLEDStripLightOutput::dump_config() {
278
280
  rgb_order = "UNKNOWN";
279
281
  break;
280
282
  }
281
- ESP_LOGCONFIG(TAG, " RGB Order: %s", rgb_order);
282
- ESP_LOGCONFIG(TAG, " Max refresh rate: %" PRIu32, *this->max_refresh_rate_);
283
- ESP_LOGCONFIG(TAG, " Number of LEDs: %u", this->num_leds_);
283
+ ESP_LOGCONFIG(TAG,
284
+ " RGB Order: %s\n"
285
+ " Max refresh rate: %" PRIu32 "\n"
286
+ " Number of LEDs: %u",
287
+ rgb_order, *this->max_refresh_rate_, this->num_leds_);
284
288
  }
285
289
 
286
290
  float ESP32RMTLEDStripLightOutput::get_setup_priority() const { return setup_priority::HARDWARE; }
@@ -131,7 +131,9 @@ CONFIG_SCHEMA = cv.All(
131
131
  esp32_idf=192,
132
132
  esp32_s2_idf=192,
133
133
  esp32_s3_idf=192,
134
+ esp32_p4_idf=192,
134
135
  esp32_c3_idf=96,
136
+ esp32_c5_idf=96,
135
137
  esp32_c6_idf=96,
136
138
  esp32_h2_idf=96,
137
139
  ): cv.All(only_with_new_rmt_driver, cv.int_range(min=2)),
@@ -140,7 +142,9 @@ CONFIG_SCHEMA = cv.All(
140
142
  cv.Optional(CONF_IS_RGBW, default=False): cv.boolean,
141
143
  cv.Optional(CONF_IS_WRGB, default=False): cv.boolean,
142
144
  cv.Optional(CONF_USE_DMA): cv.All(
143
- esp32.only_on_variant(supported=[esp32.const.VARIANT_ESP32S3]),
145
+ esp32.only_on_variant(
146
+ supported=[esp32.const.VARIANT_ESP32S3, esp32.const.VARIANT_ESP32P4]
147
+ ),
144
148
  cv.only_with_esp_idf,
145
149
  cv.boolean,
146
150
  ),
@@ -13,7 +13,7 @@ namespace esp32_touch {
13
13
  static const char *const TAG = "esp32_touch";
14
14
 
15
15
  void ESP32TouchComponent::setup() {
16
- ESP_LOGCONFIG(TAG, "Setting up ESP32 Touch Hub...");
16
+ ESP_LOGCONFIG(TAG, "Running setup");
17
17
  touch_pad_init();
18
18
  // set up and enable/start filtering based on ESP32 variant
19
19
  #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
@@ -75,9 +75,11 @@ void ESP32TouchComponent::setup() {
75
75
  }
76
76
 
77
77
  void ESP32TouchComponent::dump_config() {
78
- ESP_LOGCONFIG(TAG, "Config for ESP32 Touch Hub:");
79
- ESP_LOGCONFIG(TAG, " Meas cycle: %.2fms", this->meas_cycle_ / (8000000.0f / 1000.0f));
80
- ESP_LOGCONFIG(TAG, " Sleep cycle: %.2fms", this->sleep_cycle_ / (150000.0f / 1000.0f));
78
+ ESP_LOGCONFIG(TAG,
79
+ "Config for ESP32 Touch Hub:\n"
80
+ " Meas cycle: %.2fms\n"
81
+ " Sleep cycle: %.2fms",
82
+ this->meas_cycle_ / (8000000.0f / 1000.0f), this->sleep_cycle_ / (150000.0f / 1000.0f));
81
83
 
82
84
  const char *lv_s;
83
85
  switch (this->low_voltage_reference_) {
@@ -171,10 +173,12 @@ void ESP32TouchComponent::dump_config() {
171
173
  filter_mode_s = "UNKNOWN";
172
174
  break;
173
175
  }
174
- ESP_LOGCONFIG(TAG, " Filter mode: %s", filter_mode_s);
175
- ESP_LOGCONFIG(TAG, " Debounce count: %" PRIu32, this->debounce_count_);
176
- ESP_LOGCONFIG(TAG, " Noise threshold coefficient: %" PRIu32, this->noise_threshold_);
177
- ESP_LOGCONFIG(TAG, " Jitter filter step size: %" PRIu32, this->jitter_step_);
176
+ ESP_LOGCONFIG(TAG,
177
+ " Filter mode: %s\n"
178
+ " Debounce count: %" PRIu32 "\n"
179
+ " Noise threshold coefficient: %" PRIu32 "\n"
180
+ " Jitter filter step size: %" PRIu32,
181
+ filter_mode_s, this->debounce_count_, this->noise_threshold_, this->jitter_step_);
178
182
  const char *smooth_level_s;
179
183
  switch (this->smooth_level_) {
180
184
  case TOUCH_PAD_SMOOTH_OFF:
@@ -40,6 +40,7 @@ struct ISRPinArg {
40
40
  volatile uint32_t *mode_set_reg;
41
41
  volatile uint32_t *mode_clr_reg;
42
42
  volatile uint32_t *func_reg;
43
+ volatile uint32_t *control_reg;
43
44
  uint32_t mask;
44
45
  };
45
46
 
@@ -54,6 +55,7 @@ ISRInternalGPIOPin ESP8266GPIOPin::to_isr() const {
54
55
  arg->mode_set_reg = &GPES;
55
56
  arg->mode_clr_reg = &GPEC;
56
57
  arg->func_reg = &GPF(this->pin_);
58
+ arg->control_reg = &GPC(this->pin_);
57
59
  arg->mask = 1 << this->pin_;
58
60
  } else {
59
61
  arg->in_reg = &GP16I;
@@ -62,6 +64,7 @@ ISRInternalGPIOPin ESP8266GPIOPin::to_isr() const {
62
64
  arg->mode_set_reg = &GP16E;
63
65
  arg->mode_clr_reg = nullptr;
64
66
  arg->func_reg = &GPF16;
67
+ arg->control_reg = nullptr;
65
68
  arg->mask = 1;
66
69
  }
67
70
  return ISRInternalGPIOPin((void *) arg);
@@ -143,11 +146,17 @@ void IRAM_ATTR ISRInternalGPIOPin::pin_mode(gpio::Flags flags) {
143
146
  if (arg->pin < 16) {
144
147
  if (flags & gpio::FLAG_OUTPUT) {
145
148
  *arg->mode_set_reg = arg->mask;
146
- } else {
149
+ if (flags & gpio::FLAG_OPEN_DRAIN) {
150
+ *arg->control_reg |= 1 << GPCD;
151
+ } else {
152
+ *arg->control_reg &= ~(1 << GPCD);
153
+ }
154
+ } else if (flags & gpio::FLAG_INPUT) {
147
155
  *arg->mode_clr_reg = arg->mask;
148
156
  }
149
157
  if (flags & gpio::FLAG_PULLUP) {
150
158
  *arg->func_reg |= 1 << GPFPU;
159
+ *arg->control_reg |= 1 << GPCD;
151
160
  } else {
152
161
  *arg->func_reg &= ~(1 << GPFPU);
153
162
  }
@@ -169,7 +169,7 @@ class ESP8266Preferences : public ESPPreferences {
169
169
 
170
170
  void setup() {
171
171
  s_flash_storage = new uint32_t[ESP8266_FLASH_STORAGE_SIZE]; // NOLINT
172
- ESP_LOGVV(TAG, "Loading preferences from flash...");
172
+ ESP_LOGVV(TAG, "Loading preferences from flash");
173
173
 
174
174
  {
175
175
  InterruptLock lock;
@@ -235,7 +235,7 @@ class ESP8266Preferences : public ESPPreferences {
235
235
  if (s_prevent_write)
236
236
  return false;
237
237
 
238
- ESP_LOGD(TAG, "Saving preferences to flash...");
238
+ ESP_LOGD(TAG, "Saving");
239
239
  SpiFlashOpResult erase_res, write_res = SPI_FLASH_RESULT_OK;
240
240
  {
241
241
  InterruptLock lock;
@@ -245,11 +245,11 @@ class ESP8266Preferences : public ESPPreferences {
245
245
  }
246
246
  }
247
247
  if (erase_res != SPI_FLASH_RESULT_OK) {
248
- ESP_LOGE(TAG, "Erase ESP8266 flash failed!");
248
+ ESP_LOGE(TAG, "Erasing failed");
249
249
  return false;
250
250
  }
251
251
  if (write_res != SPI_FLASH_RESULT_OK) {
252
- ESP_LOGE(TAG, "Write ESP8266 flash failed!");
252
+ ESP_LOGE(TAG, "Writing failed");
253
253
  return false;
254
254
  }
255
255
 
@@ -258,14 +258,14 @@ class ESP8266Preferences : public ESPPreferences {
258
258
  }
259
259
 
260
260
  bool reset() override {
261
- ESP_LOGD(TAG, "Cleaning up preferences in flash...");
261
+ ESP_LOGD(TAG, "Erasing storage");
262
262
  SpiFlashOpResult erase_res;
263
263
  {
264
264
  InterruptLock lock;
265
265
  erase_res = spi_flash_erase_sector(get_esp8266_flash_sector());
266
266
  }
267
267
  if (erase_res != SPI_FLASH_RESULT_OK) {
268
- ESP_LOGE(TAG, "Erase ESP8266 flash failed!");
268
+ ESP_LOGE(TAG, "Erasing failed");
269
269
  return false;
270
270
  }
271
271
 
@@ -1,10 +1,10 @@
1
1
  #ifdef USE_ESP8266
2
2
 
3
3
  #include "esp8266_pwm.h"
4
- #include "esphome/core/macros.h"
5
4
  #include "esphome/core/defines.h"
6
- #include "esphome/core/log.h"
7
5
  #include "esphome/core/helpers.h"
6
+ #include "esphome/core/log.h"
7
+ #include "esphome/core/macros.h"
8
8
 
9
9
  #include <core_esp8266_waveform.h>
10
10
 
@@ -14,7 +14,7 @@ namespace esp8266_pwm {
14
14
  static const char *const TAG = "esp8266_pwm";
15
15
 
16
16
  void ESP8266PWM::setup() {
17
- ESP_LOGCONFIG(TAG, "Setting up ESP8266 PWM Output...");
17
+ ESP_LOGCONFIG(TAG, "Running setup");
18
18
  this->pin_->setup();
19
19
  this->turn_off();
20
20
  }
@@ -0,0 +1,91 @@
1
+ from esphome.automation import Action, register_action
2
+ import esphome.codegen as cg
3
+ from esphome.components.esp32 import VARIANT_ESP32P4, only_on_variant
4
+ import esphome.config_validation as cv
5
+ from esphome.const import CONF_CHANNEL, CONF_ID, CONF_VOLTAGE
6
+ from esphome.final_validate import full_config
7
+
8
+ CODEOWNERS = ["@clydebarrow"]
9
+
10
+ DOMAIN = "esp_ldo"
11
+
12
+ esp_ldo_ns = cg.esphome_ns.namespace("esp_ldo")
13
+ EspLdo = esp_ldo_ns.class_("EspLdo", cg.Component)
14
+ AdjustAction = esp_ldo_ns.class_("AdjustAction", Action)
15
+
16
+ CHANNELS = (3, 4)
17
+ CONF_ADJUSTABLE = "adjustable"
18
+
19
+ adjusted_ids = set()
20
+
21
+ CONFIG_SCHEMA = cv.All(
22
+ cv.ensure_list(
23
+ {
24
+ cv.GenerateID(): cv.declare_id(EspLdo),
25
+ cv.Required(CONF_VOLTAGE): cv.All(
26
+ cv.voltage, cv.float_range(min=0.5, max=2.7)
27
+ ),
28
+ cv.Required(CONF_CHANNEL): cv.one_of(*CHANNELS, int=True),
29
+ cv.Optional(CONF_ADJUSTABLE, default=False): cv.boolean,
30
+ }
31
+ ),
32
+ cv.only_with_esp_idf,
33
+ only_on_variant(supported=[VARIANT_ESP32P4]),
34
+ )
35
+
36
+
37
+ async def to_code(configs):
38
+ for config in configs:
39
+ var = cg.new_Pvariable(config[CONF_ID], config[CONF_CHANNEL])
40
+ await cg.register_component(var, config)
41
+ cg.add(var.set_voltage(config[CONF_VOLTAGE]))
42
+ cg.add(var.set_adjustable(config[CONF_ADJUSTABLE]))
43
+
44
+
45
+ def final_validate(configs):
46
+ for channel in CHANNELS:
47
+ used = [config for config in configs if config[CONF_CHANNEL] == channel]
48
+ if len(used) > 1:
49
+ raise cv.Invalid(
50
+ f"Multiple LDOs configured for channel {channel}. Each channel must be unique.",
51
+ path=[CONF_CHANNEL, channel],
52
+ )
53
+
54
+ global_config = full_config.get()
55
+ for w in adjusted_ids:
56
+ path = global_config.get_path_for_id(w)
57
+ ldo_conf = global_config.get_config_for_path(path[:-1])
58
+ if not ldo_conf[CONF_ADJUSTABLE]:
59
+ raise cv.Invalid(
60
+ "A non adjustable LDO may not be adjusted.",
61
+ path,
62
+ )
63
+
64
+
65
+ FINAL_VALIDATE_SCHEMA = final_validate
66
+
67
+
68
+ def adjusted_ldo_id(value):
69
+ value = cv.use_id(EspLdo)(value)
70
+ adjusted_ids.add(value)
71
+ return value
72
+
73
+
74
+ @register_action(
75
+ "esp_ldo.voltage.adjust",
76
+ AdjustAction,
77
+ cv.Schema(
78
+ {
79
+ cv.GenerateID(CONF_ID): adjusted_ldo_id,
80
+ cv.Required(CONF_VOLTAGE): cv.templatable(
81
+ cv.All(cv.voltage, cv.float_range(min=0.5, max=2.7))
82
+ ),
83
+ }
84
+ ),
85
+ )
86
+ async def ldo_voltage_adjust_to_code(config, action_id, template_arg, args):
87
+ parent = await cg.get_variable(config[CONF_ID])
88
+ var = cg.new_Pvariable(action_id, template_arg, parent)
89
+ template_ = await cg.templatable(config[CONF_VOLTAGE], args, cg.float_)
90
+ cg.add(var.set_voltage(template_))
91
+ return var
@@ -0,0 +1,43 @@
1
+ #ifdef USE_ESP32_VARIANT_ESP32P4
2
+ #include "esp_ldo.h"
3
+ #include "esphome/core/log.h"
4
+ #include "esphome/core/helpers.h"
5
+
6
+ namespace esphome {
7
+ namespace esp_ldo {
8
+
9
+ static const char *const TAG = "esp_ldo";
10
+ void EspLdo::setup() {
11
+ esp_ldo_channel_config_t config{};
12
+ config.chan_id = this->channel_;
13
+ config.voltage_mv = (int) (this->voltage_ * 1000.0f);
14
+ config.flags.adjustable = this->adjustable_;
15
+ auto err = esp_ldo_acquire_channel(&config, &this->handle_);
16
+ if (err != ESP_OK) {
17
+ auto msg = str_sprintf("Failed to acquire LDO channel %d with voltage %fV", this->channel_, this->voltage_);
18
+ this->mark_failed(msg.c_str());
19
+ } else {
20
+ ESP_LOGD(TAG, "Acquired LDO channel %d with voltage %fV", this->channel_, this->voltage_);
21
+ }
22
+ }
23
+ void EspLdo::dump_config() {
24
+ ESP_LOGCONFIG(TAG, "ESP LDO Channel %d:", this->channel_);
25
+ ESP_LOGCONFIG(TAG, " Voltage: %fV", this->voltage_);
26
+ ESP_LOGCONFIG(TAG, " Adjustable: %s", YESNO(this->adjustable_));
27
+ }
28
+
29
+ void EspLdo::adjust_voltage(float voltage) {
30
+ if (!std::isfinite(voltage) || voltage < 0.5f || voltage > 2.7f) {
31
+ ESP_LOGE(TAG, "Invalid voltage %fV for LDO channel %d", voltage, this->channel_);
32
+ return;
33
+ }
34
+ auto erro = esp_ldo_channel_adjust_voltage(this->handle_, (int) (voltage * 1000.0f));
35
+ if (erro != ESP_OK) {
36
+ ESP_LOGE(TAG, "Failed to adjust LDO channel %d to voltage %fV: %s", this->channel_, voltage, esp_err_to_name(erro));
37
+ }
38
+ }
39
+
40
+ } // namespace esp_ldo
41
+ } // namespace esphome
42
+
43
+ #endif // USE_ESP32_VARIANT_ESP32P4
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+ #ifdef USE_ESP32_VARIANT_ESP32P4
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/core/automation.h"
5
+ #include "esp_ldo_regulator.h"
6
+
7
+ namespace esphome {
8
+ namespace esp_ldo {
9
+
10
+ class EspLdo : public Component {
11
+ public:
12
+ EspLdo(int channel) : channel_(channel) {}
13
+
14
+ void setup() override;
15
+ void dump_config() override;
16
+
17
+ void set_adjustable(bool adjustable) { this->adjustable_ = adjustable; }
18
+ void set_voltage(float voltage) { this->voltage_ = voltage; }
19
+ void adjust_voltage(float voltage);
20
+
21
+ protected:
22
+ int channel_;
23
+ float voltage_{2.7};
24
+ bool adjustable_{false};
25
+ esp_ldo_channel_handle_t handle_{};
26
+ };
27
+
28
+ template<typename... Ts> class AdjustAction : public Action<Ts...> {
29
+ public:
30
+ explicit AdjustAction(EspLdo *ldo) : ldo_(ldo) {}
31
+
32
+ TEMPLATABLE_VALUE(float, voltage)
33
+
34
+ void play(Ts... x) override { this->ldo_->adjust_voltage(this->voltage_.value(x...)); }
35
+
36
+ protected:
37
+ EspLdo *ldo_;
38
+ };
39
+
40
+ } // namespace esp_ldo
41
+ } // namespace esphome
42
+
43
+ #endif // USE_ESP32_VARIANT_ESP32P4
@@ -26,7 +26,7 @@ void ESPHomeOTAComponent::setup() {
26
26
  ota::register_ota_platform(this);
27
27
  #endif
28
28
 
29
- server_ = socket::socket_ip(SOCK_STREAM, 0);
29
+ server_ = socket::socket_ip_loop_monitored(SOCK_STREAM, 0); // monitored for incoming connections
30
30
  if (server_ == nullptr) {
31
31
  ESP_LOGW(TAG, "Could not create socket");
32
32
  this->mark_failed();
@@ -70,9 +70,11 @@ void ESPHomeOTAComponent::setup() {
70
70
  }
71
71
 
72
72
  void ESPHomeOTAComponent::dump_config() {
73
- ESP_LOGCONFIG(TAG, "Over-The-Air updates:");
74
- ESP_LOGCONFIG(TAG, " Address: %s:%u", network::get_use_address().c_str(), this->port_);
75
- ESP_LOGCONFIG(TAG, " Version: %d", USE_OTA_VERSION);
73
+ ESP_LOGCONFIG(TAG,
74
+ "Over-The-Air updates:\n"
75
+ " Address: %s:%u\n"
76
+ " Version: %d",
77
+ network::get_use_address().c_str(), this->port_, USE_OTA_VERSION);
76
78
  #ifdef USE_OTA_PASSWORD
77
79
  if (!this->password_.empty()) {
78
80
  ESP_LOGCONFIG(TAG, " Password configured");
@@ -100,9 +102,12 @@ void ESPHomeOTAComponent::handle_() {
100
102
  #endif
101
103
 
102
104
  if (client_ == nullptr) {
103
- struct sockaddr_storage source_addr;
104
- socklen_t addr_len = sizeof(source_addr);
105
- client_ = server_->accept((struct sockaddr *) &source_addr, &addr_len);
105
+ // Check if the server socket is ready before accepting
106
+ if (this->server_->ready()) {
107
+ struct sockaddr_storage source_addr;
108
+ socklen_t addr_len = sizeof(source_addr);
109
+ client_ = server_->accept((struct sockaddr *) &source_addr, &addr_len);
110
+ }
106
111
  }
107
112
  if (client_ == nullptr)
108
113
  return;
@@ -111,10 +116,12 @@ void ESPHomeOTAComponent::handle_() {
111
116
  int err = client_->setsockopt(IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int));
112
117
  if (err != 0) {
113
118
  ESP_LOGW(TAG, "Socket could not enable TCP nodelay, errno %d", errno);
119
+ client_->close();
120
+ client_ = nullptr;
114
121
  return;
115
122
  }
116
123
 
117
- ESP_LOGD(TAG, "Starting update from %s...", this->client_->getpeername().c_str());
124
+ ESP_LOGD(TAG, "Starting update from %s", this->client_->getpeername().c_str());
118
125
  this->status_set_warning();
119
126
  #ifdef USE_OTA_STATE_CALLBACK
120
127
  this->state_callback_.call(ota::OTA_STARTED, 0.0f, 0);
@@ -38,7 +38,7 @@ EthernetComponent *global_eth_component; // NOLINT(cppcoreguidelines-avoid-non-
38
38
  EthernetComponent::EthernetComponent() { global_eth_component = this; }
39
39
 
40
40
  void EthernetComponent::setup() {
41
- ESP_LOGCONFIG(TAG, "Setting up Ethernet...");
41
+ ESP_LOGCONFIG(TAG, "Running setup");
42
42
  if (esp_reset_reason() != ESP_RST_DEEPSLEEP) {
43
43
  // Delay here to allow power to stabilise before Ethernet is initialized.
44
44
  delay(300); // NOLINT
@@ -245,33 +245,33 @@ void EthernetComponent::loop() {
245
245
  switch (this->state_) {
246
246
  case EthernetComponentState::STOPPED:
247
247
  if (this->started_) {
248
- ESP_LOGI(TAG, "Starting ethernet connection");
248
+ ESP_LOGI(TAG, "Starting connection");
249
249
  this->state_ = EthernetComponentState::CONNECTING;
250
250
  this->start_connect_();
251
251
  }
252
252
  break;
253
253
  case EthernetComponentState::CONNECTING:
254
254
  if (!this->started_) {
255
- ESP_LOGI(TAG, "Stopped ethernet connection");
255
+ ESP_LOGI(TAG, "Stopped connection");
256
256
  this->state_ = EthernetComponentState::STOPPED;
257
257
  } else if (this->connected_) {
258
258
  // connection established
259
- ESP_LOGI(TAG, "Connected via Ethernet!");
259
+ ESP_LOGI(TAG, "Connected");
260
260
  this->state_ = EthernetComponentState::CONNECTED;
261
261
 
262
262
  this->dump_connect_params_();
263
263
  this->status_clear_warning();
264
264
  } else if (now - this->connect_begin_ > 15000) {
265
- ESP_LOGW(TAG, "Connecting via ethernet failed! Re-connecting...");
265
+ ESP_LOGW(TAG, "Connecting failed; reconnecting");
266
266
  this->start_connect_();
267
267
  }
268
268
  break;
269
269
  case EthernetComponentState::CONNECTED:
270
270
  if (!this->started_) {
271
- ESP_LOGI(TAG, "Stopped ethernet connection");
271
+ ESP_LOGI(TAG, "Stopped connection");
272
272
  this->state_ = EthernetComponentState::STOPPED;
273
273
  } else if (!this->connected_) {
274
- ESP_LOGW(TAG, "Connection via Ethernet lost! Re-connecting...");
274
+ ESP_LOGW(TAG, "Connection lost; reconnecting");
275
275
  this->state_ = EthernetComponentState::CONNECTING;
276
276
  this->start_connect_();
277
277
  }
@@ -326,10 +326,12 @@ void EthernetComponent::dump_config() {
326
326
  ESP_LOGCONFIG(TAG, "Ethernet:");
327
327
  this->dump_connect_params_();
328
328
  #ifdef USE_ETHERNET_SPI
329
- ESP_LOGCONFIG(TAG, " CLK Pin: %u", this->clk_pin_);
330
- ESP_LOGCONFIG(TAG, " MISO Pin: %u", this->miso_pin_);
331
- ESP_LOGCONFIG(TAG, " MOSI Pin: %u", this->mosi_pin_);
332
- ESP_LOGCONFIG(TAG, " CS Pin: %u", this->cs_pin_);
329
+ ESP_LOGCONFIG(TAG,
330
+ " CLK Pin: %u\n"
331
+ " MISO Pin: %u\n"
332
+ " MOSI Pin: %u\n"
333
+ " CS Pin: %u",
334
+ this->clk_pin_, this->miso_pin_, this->mosi_pin_, this->cs_pin_);
333
335
  #ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
334
336
  if (this->polling_interval_ != 0) {
335
337
  ESP_LOGCONFIG(TAG, " Polling Interval: %lu ms", this->polling_interval_);
@@ -338,15 +340,19 @@ void EthernetComponent::dump_config() {
338
340
  {
339
341
  ESP_LOGCONFIG(TAG, " IRQ Pin: %d", this->interrupt_pin_);
340
342
  }
341
- ESP_LOGCONFIG(TAG, " Reset Pin: %d", this->reset_pin_);
342
- ESP_LOGCONFIG(TAG, " Clock Speed: %d MHz", this->clock_speed_ / 1000000);
343
+ ESP_LOGCONFIG(TAG,
344
+ " Reset Pin: %d\n"
345
+ " Clock Speed: %d MHz",
346
+ this->reset_pin_, this->clock_speed_ / 1000000);
343
347
  #else
344
348
  if (this->power_pin_ != -1) {
345
349
  ESP_LOGCONFIG(TAG, " Power Pin: %u", this->power_pin_);
346
350
  }
347
- ESP_LOGCONFIG(TAG, " MDC Pin: %u", this->mdc_pin_);
348
- ESP_LOGCONFIG(TAG, " MDIO Pin: %u", this->mdio_pin_);
349
- ESP_LOGCONFIG(TAG, " PHY addr: %u", this->phy_addr_);
351
+ ESP_LOGCONFIG(TAG,
352
+ " MDC Pin: %u\n"
353
+ " MDIO Pin: %u\n"
354
+ " PHY addr: %u",
355
+ this->mdc_pin_, this->mdio_pin_, this->phy_addr_);
350
356
  #endif
351
357
  ESP_LOGCONFIG(TAG, " Type: %s", eth_type);
352
358
  }
@@ -512,16 +518,19 @@ bool EthernetComponent::is_connected() { return this->state_ == EthernetComponen
512
518
  void EthernetComponent::dump_connect_params_() {
513
519
  esp_netif_ip_info_t ip;
514
520
  esp_netif_get_ip_info(this->eth_netif_, &ip);
515
- ESP_LOGCONFIG(TAG, " IP Address: %s", network::IPAddress(&ip.ip).str().c_str());
516
- ESP_LOGCONFIG(TAG, " Hostname: '%s'", App.get_name().c_str());
517
- ESP_LOGCONFIG(TAG, " Subnet: %s", network::IPAddress(&ip.netmask).str().c_str());
518
- ESP_LOGCONFIG(TAG, " Gateway: %s", network::IPAddress(&ip.gw).str().c_str());
519
-
520
521
  const ip_addr_t *dns_ip1 = dns_getserver(0);
521
522
  const ip_addr_t *dns_ip2 = dns_getserver(1);
522
523
 
523
- ESP_LOGCONFIG(TAG, " DNS1: %s", network::IPAddress(dns_ip1).str().c_str());
524
- ESP_LOGCONFIG(TAG, " DNS2: %s", network::IPAddress(dns_ip2).str().c_str());
524
+ ESP_LOGCONFIG(TAG,
525
+ " IP Address: %s\n"
526
+ " Hostname: '%s'\n"
527
+ " Subnet: %s\n"
528
+ " Gateway: %s\n"
529
+ " DNS1: %s\n"
530
+ " DNS2: %s",
531
+ network::IPAddress(&ip.ip).str().c_str(), App.get_name().c_str(),
532
+ network::IPAddress(&ip.netmask).str().c_str(), network::IPAddress(&ip.gw).str().c_str(),
533
+ network::IPAddress(dns_ip1).str().c_str(), network::IPAddress(dns_ip2).str().c_str());
525
534
 
526
535
  #if USE_NETWORK_IPV6
527
536
  struct esp_ip6_addr if_ip6s[CONFIG_LWIP_IPV6_NUM_ADDRESSES];
@@ -533,9 +542,12 @@ void EthernetComponent::dump_connect_params_() {
533
542
  }
534
543
  #endif /* USE_NETWORK_IPV6 */
535
544
 
536
- ESP_LOGCONFIG(TAG, " MAC Address: %s", this->get_eth_mac_address_pretty().c_str());
537
- ESP_LOGCONFIG(TAG, " Is Full Duplex: %s", YESNO(this->get_duplex_mode() == ETH_DUPLEX_FULL));
538
- ESP_LOGCONFIG(TAG, " Link Speed: %u", this->get_link_speed() == ETH_SPEED_100M ? 100 : 10);
545
+ ESP_LOGCONFIG(TAG,
546
+ " MAC Address: %s\n"
547
+ " Is Full Duplex: %s\n"
548
+ " Link Speed: %u",
549
+ this->get_eth_mac_address_pretty().c_str(), YESNO(this->get_duplex_mode() == ETH_DUPLEX_FULL),
550
+ this->get_link_speed() == ETH_SPEED_100M ? 100 : 10);
539
551
  }
540
552
 
541
553
  #ifdef USE_ETHERNET_SPI
@@ -56,7 +56,7 @@ class EthernetComponent : public Component {
56
56
  void dump_config() override;
57
57
  float get_setup_priority() const override;
58
58
  bool can_proceed() override;
59
- void on_shutdown() override { powerdown(); }
59
+ void on_powerdown() override { powerdown(); }
60
60
  bool is_connected();
61
61
 
62
62
  #ifdef USE_ETHERNET_SPI
@@ -113,6 +113,7 @@ async def register_event(var, config, *, event_types: list[str]):
113
113
  if not CORE.has_id(config[CONF_ID]):
114
114
  var = cg.Pvariable(config[CONF_ID], var)
115
115
  cg.add(cg.App.register_event(var))
116
+ CORE.register_platform_component("event", var)
116
117
  await setup_event_core_(var, config, event_types=event_types)
117
118
 
118
119
 
@@ -1,6 +1,6 @@
1
1
  #include "exposure_notifications.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  #ifdef USE_ESP32
6
6
 
@@ -15,7 +15,7 @@ void EZOSensor::dump_config() {
15
15
  LOG_SENSOR("", "EZO", this);
16
16
  LOG_I2C_DEVICE(this);
17
17
  if (this->is_failed()) {
18
- ESP_LOGE(TAG, "Communication with EZO circuit failed!");
18
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
19
19
  }
20
20
  LOG_UPDATE_INTERVAL(this);
21
21
  }
@@ -41,7 +41,7 @@ static const std::string DOSING_MODE_CONTINUOUS = "Continuous";
41
41
  void EzoPMP::dump_config() {
42
42
  LOG_I2C_DEVICE(this);
43
43
  if (this->is_failed()) {
44
- ESP_LOGE(TAG, "Communication with EZO-PMP circuit failed!");
44
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
45
45
  }
46
46
  LOG_UPDATE_INTERVAL(this);
47
47
  }
@@ -10,7 +10,7 @@ static const char *const TAG = "factory_reset.button";
10
10
 
11
11
  void FactoryResetButton::dump_config() { LOG_BUTTON("", "Factory Reset Button", this); }
12
12
  void FactoryResetButton::press_action() {
13
- ESP_LOGI(TAG, "Resetting to factory defaults...");
13
+ ESP_LOGI(TAG, "Resetting");
14
14
  // Let MQTT settle a bit
15
15
  delay(100); // NOLINT
16
16
  global_preferences->reset();