esphome 2025.5.2__py3-none-any.whl → 2025.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (750) 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 +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  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 +5 -0
  33. esphome/components/api/api_pb2.h +703 -227
  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 -4
  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 +5 -4
  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 +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -1
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/preferences.cpp +6 -6
  191. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  192. esphome/components/esp_ldo/__init__.py +91 -0
  193. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  194. esphome/components/esp_ldo/esp_ldo.h +43 -0
  195. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  196. esphome/components/ethernet/ethernet_component.cpp +38 -26
  197. esphome/components/ethernet/ethernet_component.h +1 -1
  198. esphome/components/event/__init__.py +1 -0
  199. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  200. esphome/components/ezo/ezo.cpp +1 -1
  201. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  202. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  203. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  204. esphome/components/fan/__init__.py +1 -0
  205. esphome/components/fan/fan.cpp +30 -19
  206. esphome/components/fastled_base/fastled_light.cpp +7 -5
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  208. esphome/components/fs3000/fs3000.cpp +1 -1
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  210. esphome/components/ft63x6/ft63x6.cpp +5 -3
  211. esphome/components/gcja5/gcja5.cpp +0 -12
  212. esphome/components/gcja5/gcja5.h +8 -3
  213. esphome/components/gdk101/gdk101.cpp +2 -2
  214. esphome/components/globals/globals_component.h +13 -10
  215. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  216. esphome/components/gp8403/gp8403.cpp +4 -2
  217. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  218. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  219. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  220. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  221. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  222. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  223. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  225. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  227. esphome/components/haier/haier_base.cpp +2 -2
  228. esphome/components/haier/hon_climate.cpp +13 -6
  229. esphome/components/havells_solar/havells_solar.cpp +5 -2
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  231. esphome/components/hdc1080/hdc1080.cpp +2 -2
  232. esphome/components/he60r/he60r.cpp +4 -2
  233. esphome/components/hlw8012/hlw8012.cpp +6 -4
  234. esphome/components/hm3301/hm3301.cpp +2 -2
  235. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  236. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  237. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  238. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  239. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  240. esphome/components/hte501/hte501.cpp +3 -2
  241. esphome/components/http_request/__init__.py +2 -2
  242. esphome/components/http_request/http_request.cpp +7 -5
  243. esphome/components/http_request/http_request_idf.cpp +4 -2
  244. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  245. esphome/components/htu21d/htu21d.cpp +2 -2
  246. esphome/components/htu31d/htu31d.cpp +2 -2
  247. esphome/components/hx711/hx711.cpp +2 -2
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  249. esphome/components/hyt271/hyt271.cpp +2 -2
  250. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  251. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  252. esphome/components/i2s_audio/__init__.py +2 -0
  253. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  254. esphome/components/i2s_audio/i2s_audio.h +1 -1
  255. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  257. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +48 -30
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -0
  259. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  261. esphome/components/iaqcore/iaqcore.cpp +3 -3
  262. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  263. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  264. esphome/components/image/image.cpp +1 -0
  265. esphome/components/ina219/ina219.cpp +2 -2
  266. esphome/components/ina226/ina226.cpp +8 -5
  267. esphome/components/ina260/ina260.cpp +1 -1
  268. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  269. esphome/components/ina3221/ina3221.cpp +2 -2
  270. esphome/components/inkplate6/display.py +12 -2
  271. esphome/components/inkplate6/inkplate.cpp +13 -9
  272. esphome/components/inkplate6/inkplate.h +7 -6
  273. esphome/components/integration/integration_sensor.cpp +1 -1
  274. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  275. esphome/components/json/json_util.cpp +4 -5
  276. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  277. esphome/components/key_collector/key_collector.cpp +4 -2
  278. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  279. esphome/components/kuntze/kuntze.cpp +4 -2
  280. esphome/components/lc709203f/__init__.py +1 -0
  281. esphome/components/lc709203f/lc709203f.cpp +299 -0
  282. esphome/components/lc709203f/lc709203f.h +55 -0
  283. esphome/components/lc709203f/sensor.py +93 -0
  284. esphome/components/lcd_base/lcd_display.cpp +2 -2
  285. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  286. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  287. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  288. esphome/components/ld2410/ld2410.cpp +6 -7
  289. esphome/components/ld2420/ld2420.cpp +9 -7
  290. esphome/components/ld2450/ld2450.cpp +6 -4
  291. esphome/components/ld2450/sensor.py +2 -2
  292. esphome/components/ledc/ledc_output.cpp +32 -28
  293. esphome/components/libretiny/const.py +1 -1
  294. esphome/components/libretiny/preferences.cpp +6 -7
  295. esphome/components/light/__init__.py +2 -1
  296. esphome/components/light/esp_hsv_color.h +1 -1
  297. esphome/components/light/light_state.cpp +9 -5
  298. esphome/components/light/light_state.h +15 -15
  299. esphome/components/light/light_transformer.h +1 -1
  300. esphome/components/lightwaverf/LwTx.cpp +1 -1
  301. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  302. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  303. esphome/components/lock/__init__.py +1 -0
  304. esphome/components/lock/lock.h +1 -1
  305. esphome/components/logger/__init__.py +6 -0
  306. esphome/components/logger/logger.cpp +11 -20
  307. esphome/components/logger/logger.h +1 -2
  308. esphome/components/logger/logger_esp32.cpp +5 -5
  309. esphome/components/ltr390/ltr390.cpp +8 -5
  310. esphome/components/ltr501/ltr501.cpp +19 -14
  311. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  312. esphome/components/lvgl/__init__.py +2 -2
  313. esphome/components/lvgl/automation.py +5 -4
  314. esphome/components/lvgl/defines.py +0 -2
  315. esphome/components/lvgl/lv_validation.py +1 -3
  316. esphome/components/lvgl/lvcode.py +7 -8
  317. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  318. esphome/components/lvgl/schemas.py +22 -23
  319. esphome/components/lvgl/trigger.py +8 -3
  320. esphome/components/lvgl/widgets/__init__.py +2 -2
  321. esphome/components/lvgl/widgets/canvas.py +9 -3
  322. esphome/components/lvgl/widgets/line.py +2 -1
  323. esphome/components/lvgl/widgets/tabview.py +7 -0
  324. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  325. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  326. esphome/components/max17043/max17043.cpp +2 -2
  327. esphome/components/max31855/max31855.cpp +2 -1
  328. esphome/components/max31856/max31856.cpp +9 -11
  329. esphome/components/max31865/max31865.cpp +6 -4
  330. esphome/components/max44009/max44009.cpp +2 -2
  331. esphome/components/max6675/max6675.cpp +1 -1
  332. esphome/components/max6956/max6956.cpp +5 -3
  333. esphome/components/max7219/max7219.cpp +8 -6
  334. esphome/components/max7219digit/automation.h +52 -0
  335. esphome/components/max7219digit/display.py +93 -1
  336. esphome/components/max7219digit/max7219digit.cpp +16 -13
  337. esphome/components/max9611/max9611.cpp +9 -6
  338. esphome/components/mcp23008/mcp23008.cpp +1 -1
  339. esphome/components/mcp23016/mcp23016.cpp +1 -1
  340. esphome/components/mcp23017/mcp23017.cpp +1 -1
  341. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  342. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  343. esphome/components/mcp3008/mcp3008.cpp +1 -1
  344. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  345. esphome/components/mcp3204/mcp3204.cpp +1 -1
  346. esphome/components/mcp4461/mcp4461.cpp +2 -2
  347. esphome/components/mcp4725/mcp4725.cpp +2 -2
  348. esphome/components/mcp4728/mcp4728.cpp +2 -2
  349. esphome/components/mcp9600/mcp9600.cpp +1 -1
  350. esphome/components/mcp9808/mcp9808.cpp +4 -4
  351. esphome/components/mdns/mdns_component.cpp +8 -2
  352. esphome/components/mdns/mdns_component.h +3 -1
  353. esphome/components/mdns/mdns_esp32.cpp +2 -2
  354. esphome/components/media_player/__init__.py +1 -0
  355. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  356. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  357. esphome/components/micronova/micronova.h +2 -2
  358. esphome/components/mics_4514/mics_4514.cpp +2 -2
  359. esphome/components/midea/air_conditioner.cpp +7 -5
  360. esphome/components/midea_ir/midea_ir.cpp +1 -1
  361. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  362. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  363. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  364. esphome/components/mlx90614/mlx90614.cpp +4 -3
  365. esphome/components/mmc5603/mmc5603.cpp +2 -2
  366. esphome/components/mmc5983/mmc5983.cpp +1 -1
  367. esphome/components/modbus/modbus.cpp +7 -5
  368. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  369. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  370. esphome/components/modbus_controller/switch/__init__.py +6 -2
  371. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  372. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  373. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  374. esphome/components/mpr121/mpr121.cpp +2 -2
  375. esphome/components/mpu6050/mpu6050.cpp +6 -6
  376. esphome/components/mpu6886/mpu6886.cpp +6 -6
  377. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  378. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  379. esphome/components/mqtt/mqtt_client.cpp +31 -24
  380. esphome/components/mqtt/mqtt_component.cpp +3 -3
  381. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  382. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  383. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  384. esphome/components/ms5611/ms5611.cpp +2 -2
  385. esphome/components/ms8607/ms8607.cpp +2 -2
  386. esphome/components/msa3xx/msa3xx.cpp +16 -12
  387. esphome/components/my9231/my9231.cpp +7 -5
  388. esphome/components/nau7802/nau7802.cpp +6 -4
  389. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  390. esphome/components/network/ip_address.h +1 -1
  391. esphome/components/network/util.cpp +13 -0
  392. esphome/components/nextion/base_component.py +2 -0
  393. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  394. esphome/components/nextion/display.py +34 -22
  395. esphome/components/nextion/nextion.cpp +182 -143
  396. esphome/components/nextion/nextion.h +36 -0
  397. esphome/components/nextion/nextion_commands.cpp +3 -3
  398. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  399. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  400. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  401. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  402. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  403. esphome/components/nfc/nci_message.h +1 -1
  404. esphome/components/nfc/ndef_record.h +1 -1
  405. esphome/components/nfc/ndef_record_text.h +1 -1
  406. esphome/components/nfc/ndef_record_uri.h +1 -1
  407. esphome/components/nfc/nfc.h +1 -1
  408. esphome/components/nfc/nfc_tag.h +1 -1
  409. esphome/components/noblex/noblex.cpp +1 -1
  410. esphome/components/npi19/npi19.cpp +5 -7
  411. esphome/components/number/__init__.py +11 -0
  412. esphome/components/number/number.cpp +1 -1
  413. esphome/components/number/number.h +0 -4
  414. esphome/components/online_image/__init__.py +13 -1
  415. esphome/components/online_image/online_image.cpp +26 -4
  416. esphome/components/online_image/online_image.h +21 -4
  417. esphome/components/opentherm/generate.py +3 -3
  418. esphome/components/opentherm/hub.cpp +11 -7
  419. esphome/components/opentherm/number/number.cpp +5 -3
  420. esphome/components/opentherm/opentherm.h +1 -1
  421. esphome/components/opentherm/schema.py +13 -13
  422. esphome/components/opentherm/validate.py +1 -1
  423. esphome/components/openthread/__init__.py +146 -0
  424. esphome/components/openthread/const.py +10 -0
  425. esphome/components/openthread/openthread.cpp +206 -0
  426. esphome/components/openthread/openthread.h +68 -0
  427. esphome/components/openthread/openthread_esp.cpp +164 -0
  428. esphome/components/openthread/tlv.py +58 -0
  429. esphome/components/openthread_info/__init__.py +0 -0
  430. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  432. esphome/components/openthread_info/text_sensor.py +105 -0
  433. esphome/components/output/float_output.cpp +1 -1
  434. esphome/components/output/switch/output_switch.cpp +1 -1
  435. esphome/components/packet_transport/packet_transport.cpp +6 -4
  436. esphome/components/pca6416a/pca6416a.cpp +2 -2
  437. esphome/components/pca9554/pca9554.cpp +6 -4
  438. esphome/components/pca9685/pca9685_output.cpp +12 -8
  439. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  440. esphome/components/pcf85063/pcf85063.cpp +2 -2
  441. esphome/components/pcf8563/pcf8563.cpp +2 -2
  442. esphome/components/pcf8574/pcf8574.cpp +2 -2
  443. esphome/components/pid/pid_climate.cpp +8 -5
  444. esphome/components/pid/pid_climate.h +1 -1
  445. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  446. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  447. esphome/components/pipsolar/pipsolar.cpp +3 -3
  448. esphome/components/pm1006/pm1006.cpp +3 -7
  449. esphome/components/pm1006/pm1006.h +4 -1
  450. esphome/components/pm2005/pm2005.cpp +12 -13
  451. esphome/components/pm2005/sensor.py +1 -1
  452. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  453. esphome/components/pmsx003/pmsx003.cpp +0 -4
  454. esphome/components/pmsx003/pmsx003.h +5 -2
  455. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  456. esphome/components/pmwcs3/pmwcs3.h +0 -1
  457. esphome/components/pn532/pn532.cpp +7 -7
  458. esphome/components/pn532/pn532.h +1 -1
  459. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  460. esphome/components/pn7150/pn7150.cpp +4 -4
  461. esphome/components/pn7160/pn7160.cpp +4 -4
  462. esphome/components/power_supply/power_supply.cpp +6 -4
  463. esphome/components/power_supply/power_supply.h +1 -1
  464. esphome/components/prometheus/__init__.py +0 -1
  465. esphome/components/psram/__init__.py +59 -35
  466. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  467. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  468. esphome/components/pylontech/pylontech.cpp +2 -2
  469. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  470. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  471. esphome/components/pzemac/pzemac.cpp +4 -2
  472. esphome/components/pzemdc/pzemdc.cpp +4 -2
  473. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  474. esphome/components/qmp6988/qmp6988.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.h +1 -1
  476. esphome/components/qr_code/qr_code.cpp +5 -3
  477. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  478. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  479. esphome/components/rc522/rc522.cpp +5 -5
  480. esphome/components/rdm6300/rdm6300.cpp +1 -0
  481. esphome/components/remote_receiver/__init__.py +10 -2
  482. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  483. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  484. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  485. esphome/components/remote_transmitter/__init__.py +10 -2
  486. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  487. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  488. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  489. esphome/components/resistance/resistance_sensor.cpp +6 -3
  490. esphome/components/restart/button/restart_button.cpp +1 -1
  491. esphome/components/restart/switch/restart_switch.cpp +1 -1
  492. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  493. esphome/components/rp2040/__init__.py +7 -0
  494. esphome/components/rp2040/core.cpp +8 -1
  495. esphome/components/rp2040/preferences.cpp +3 -3
  496. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  497. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  498. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  499. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  500. esphome/components/rtttl/rtttl.cpp +11 -9
  501. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  502. esphome/components/safe_mode/safe_mode.cpp +9 -8
  503. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  504. esphome/components/scd30/scd30.cpp +11 -8
  505. esphome/components/scd4x/scd4x.cpp +12 -8
  506. esphome/components/sdl/display.py +40 -0
  507. esphome/components/sdl/sdl_esphome.cpp +2 -2
  508. esphome/components/sdl/sdl_esphome.h +8 -0
  509. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  510. esphome/components/sdp3x/sdp3x.cpp +11 -11
  511. esphome/components/sds011/sds011.cpp +5 -6
  512. esphome/components/sds011/sds011.h +4 -1
  513. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  514. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  515. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  516. esphome/components/selec_meter/selec_meter.cpp +5 -2
  517. esphome/components/select/__init__.py +1 -0
  518. esphome/components/select/select.cpp +1 -1
  519. esphome/components/select/select.h +0 -4
  520. esphome/components/sen0321/sen0321.cpp +2 -2
  521. esphome/components/sen21231/sen21231.cpp +1 -1
  522. esphome/components/sen5x/sen5x.cpp +10 -7
  523. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  524. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  525. esphome/components/sensor/__init__.py +11 -1
  526. esphome/components/sensor/filter.h +1 -1
  527. esphome/components/sensor/sensor.cpp +8 -4
  528. esphome/components/sensor/sensor.h +12 -11
  529. esphome/components/servo/servo.cpp +12 -9
  530. esphome/components/servo/servo.h +1 -1
  531. esphome/components/sfa30/sfa30.cpp +1 -1
  532. esphome/components/sgp30/sgp30.cpp +10 -8
  533. esphome/components/sgp4x/sgp4x.cpp +49 -61
  534. esphome/components/sgp4x/sgp4x.h +0 -1
  535. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  536. esphome/components/sht3xd/sht3xd.cpp +1 -1
  537. esphome/components/sht4x/sht4x.cpp +2 -2
  538. esphome/components/shtcx/shtcx.cpp +13 -16
  539. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  540. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  541. esphome/components/sim800l/sim800l.cpp +2 -2
  542. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  543. esphome/components/sm16716/sm16716.cpp +1 -1
  544. esphome/components/sm2135/sm2135.cpp +1 -1
  545. esphome/components/sm2235/sm2235.cpp +5 -3
  546. esphome/components/sm2335/sm2335.cpp +5 -3
  547. esphome/components/sml/sml.cpp +1 -1
  548. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  549. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  550. esphome/components/sntp/sntp_component.cpp +1 -1
  551. esphome/components/socket/__init__.py +2 -0
  552. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  553. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  554. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  555. esphome/components/socket/socket.cpp +31 -0
  556. esphome/components/socket/socket.h +27 -1
  557. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  558. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  559. esphome/components/sound_level/sound_level.cpp +4 -2
  560. esphome/components/speaker/media_player/__init__.py +3 -0
  561. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  562. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  563. esphome/components/spi/__init__.py +10 -2
  564. esphome/components/spi/spi.cpp +4 -4
  565. esphome/components/spi/spi_arduino.cpp +22 -9
  566. esphome/components/spi_device/spi_device.cpp +1 -2
  567. esphome/components/sprinkler/sprinkler.cpp +9 -6
  568. esphome/components/sps30/sps30.cpp +16 -15
  569. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  570. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  571. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  572. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  573. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  574. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  575. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  576. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  577. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  578. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  579. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  580. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  581. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  582. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  583. esphome/components/st7567_base/st7567_base.cpp +3 -3
  584. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  585. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  586. esphome/components/st7701s/st7701s.cpp +4 -2
  587. esphome/components/st7735/st7735.cpp +3 -3
  588. esphome/components/st7789v/st7789v.cpp +10 -7
  589. esphome/components/st7920/st7920.cpp +6 -4
  590. esphome/components/statsd/statsd.cpp +9 -5
  591. esphome/components/status_led/light/status_led_light.cpp +3 -3
  592. esphome/components/status_led/light/status_led_light.h +1 -1
  593. esphome/components/status_led/status_led.cpp +1 -1
  594. esphome/components/stepper/stepper.h +5 -3
  595. esphome/components/sts3x/sts3x.cpp +2 -2
  596. esphome/components/switch/__init__.py +1 -0
  597. esphome/components/switch/switch.cpp +18 -12
  598. esphome/components/switch/switch.h +14 -8
  599. esphome/components/sx1509/__init__.py +53 -20
  600. esphome/components/sx1509/sx1509.cpp +29 -5
  601. esphome/components/sx1509/sx1509.h +9 -1
  602. esphome/components/t6615/t6615.cpp +1 -0
  603. esphome/components/tc74/tc74.cpp +1 -1
  604. esphome/components/tca9548a/tca9548a.cpp +1 -1
  605. esphome/components/tca9555/tca9555.cpp +2 -2
  606. esphome/components/tcs34725/tcs34725.cpp +4 -4
  607. esphome/components/tee501/tee501.cpp +3 -2
  608. esphome/components/tem3200/tem3200.cpp +5 -6
  609. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  610. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  611. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  612. esphome/components/template/cover/template_cover.cpp +1 -1
  613. esphome/components/template/select/template_select.cpp +6 -4
  614. esphome/components/template/text/template_text.cpp +2 -3
  615. esphome/components/template/valve/template_valve.cpp +5 -3
  616. esphome/components/text/__init__.py +10 -11
  617. esphome/components/text/text.cpp +1 -1
  618. esphome/components/text/text.h +0 -4
  619. esphome/components/text_sensor/__init__.py +1 -0
  620. esphome/components/text_sensor/text_sensor.cpp +8 -4
  621. esphome/components/text_sensor/text_sensor.h +6 -6
  622. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  623. esphome/components/time/__init__.py +1 -2
  624. esphome/components/time_based/time_based_cover.cpp +4 -2
  625. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  626. esphome/components/tm1621/tm1621.cpp +3 -3
  627. esphome/components/tm1637/tm1637.cpp +9 -7
  628. esphome/components/tm1638/tm1638.cpp +7 -5
  629. esphome/components/tm1651/tm1651.cpp +2 -2
  630. esphome/components/tmp102/tmp102.cpp +1 -3
  631. esphome/components/tmp102/tmp102.h +0 -3
  632. esphome/components/tmp1075/tmp1075.cpp +12 -9
  633. esphome/components/tmp117/tmp117.cpp +2 -2
  634. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  635. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  636. esphome/components/tsl2561/tsl2561.cpp +7 -5
  637. esphome/components/tsl2591/tsl2591.cpp +25 -27
  638. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  639. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  640. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  641. esphome/components/tuya/select/tuya_select.cpp +5 -3
  642. esphome/components/tx20/tx20.cpp +3 -3
  643. esphome/components/uart/__init__.py +4 -5
  644. esphome/components/uart/button/uart_button.cpp +1 -1
  645. esphome/components/uart/switch/uart_switch.cpp +2 -2
  646. esphome/components/uart/uart.cpp +2 -2
  647. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  648. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  649. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  650. esphome/components/uart/uart_component_host.cpp +11 -8
  651. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  652. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  653. esphome/components/udp/udp_component.cpp +9 -5
  654. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  655. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  656. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  657. esphome/components/update/__init__.py +1 -0
  658. esphome/components/update/update_entity.cpp +1 -1
  659. esphome/components/update/update_entity.h +0 -3
  660. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  661. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  662. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  663. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  664. esphome/components/usb_host/__init__.py +64 -0
  665. esphome/components/usb_host/usb_host.h +116 -0
  666. esphome/components/usb_host/usb_host_client.cpp +394 -0
  667. esphome/components/usb_host/usb_host_component.cpp +35 -0
  668. esphome/components/usb_uart/__init__.py +134 -0
  669. esphome/components/usb_uart/ch34x.cpp +80 -0
  670. esphome/components/usb_uart/cp210x.cpp +126 -0
  671. esphome/components/usb_uart/usb_uart.cpp +328 -0
  672. esphome/components/usb_uart/usb_uart.h +151 -0
  673. esphome/components/valve/__init__.py +1 -0
  674. esphome/components/veml3235/veml3235.cpp +13 -9
  675. esphome/components/veml7700/veml7700.cpp +10 -6
  676. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  677. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  678. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  679. esphome/components/web_server/server_index_v2.h +632 -630
  680. esphome/components/web_server/server_index_v3.h +411 -409
  681. esphome/components/web_server/web_server.cpp +5 -3
  682. esphome/components/web_server_base/web_server_base.cpp +1 -1
  683. esphome/components/web_server_idf/__init__.py +0 -2
  684. esphome/components/web_server_idf/utils.cpp +1 -1
  685. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  686. esphome/components/web_server_idf/web_server_idf.h +7 -0
  687. esphome/components/weikai/__init__.py +2 -0
  688. esphome/components/weikai/weikai.cpp +24 -22
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  690. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  691. esphome/components/wiegand/wiegand.cpp +1 -1
  692. esphome/components/wifi/wifi_component.cpp +50 -37
  693. esphome/components/wifi/wifi_component.h +7 -4
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  695. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  696. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  697. esphome/components/wireguard/wireguard.cpp +21 -21
  698. esphome/components/wl_134/text_sensor.py +1 -2
  699. esphome/components/wled/wled_light_effect.cpp +1 -1
  700. esphome/components/x9c/x9c.cpp +5 -3
  701. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  702. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  703. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  704. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  705. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  706. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  707. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  708. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  709. esphome/components/xl9535/xl9535.cpp +2 -2
  710. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  711. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  712. esphome/config.py +3 -2
  713. esphome/config_validation.py +46 -17
  714. esphome/const.py +10 -1
  715. esphome/core/__init__.py +37 -18
  716. esphome/core/application.cpp +197 -8
  717. esphome/core/application.h +116 -6
  718. esphome/core/component.cpp +36 -15
  719. esphome/core/component.h +43 -13
  720. esphome/core/config.py +12 -0
  721. esphome/core/defines.h +10 -2
  722. esphome/core/entity_base.cpp +4 -16
  723. esphome/core/entity_base.h +27 -13
  724. esphome/core/helpers.cpp +1 -1
  725. esphome/core/helpers.h +5 -5
  726. esphome/core/log.h +2 -0
  727. esphome/core/log_const_en.h +4 -0
  728. esphome/core/scheduler.cpp +2 -2
  729. esphome/coroutine.py +3 -4
  730. esphome/cpp_generator.py +32 -32
  731. esphome/dashboard/core.py +2 -2
  732. esphome/dashboard/web_server.py +2 -2
  733. esphome/git.py +4 -4
  734. esphome/helpers.py +5 -6
  735. esphome/loader.py +8 -7
  736. esphome/log.py +7 -1
  737. esphome/platformio_api.py +2 -3
  738. esphome/storage_json.py +13 -5
  739. esphome/types.py +12 -13
  740. esphome/util.py +1 -2
  741. esphome/wizard.py +0 -16
  742. esphome/writer.py +5 -3
  743. esphome/yaml_util.py +6 -1
  744. esphome/zeroconf.py +1 -1
  745. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  746. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/RECORD +750 -696
  747. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  748. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  749. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  750. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -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();
@@ -14,7 +14,7 @@ void FactoryResetSwitch::write_state(bool state) {
14
14
  this->publish_state(false);
15
15
 
16
16
  if (state) {
17
- ESP_LOGI(TAG, "Resetting to factory defaults...");
17
+ ESP_LOGI(TAG, "Resetting");
18
18
  // Let MQTT settle a bit
19
19
  delay(100); // NOLINT
20
20
  global_preferences->reset();
@@ -296,6 +296,7 @@ async def register_fan(var, config):
296
296
  if not CORE.has_id(config[CONF_ID]):
297
297
  var = cg.Pvariable(config[CONF_ID], var)
298
298
  cg.add(cg.App.register_fan(var))
299
+ CORE.register_platform_component("fan", var)
299
300
  await setup_fan_core_(var, config)
300
301
 
301
302
 
@@ -41,39 +41,48 @@ void FanCall::perform() {
41
41
  void FanCall::validate_() {
42
42
  auto traits = this->parent_.get_traits();
43
43
 
44
- if (this->speed_.has_value())
44
+ if (this->speed_.has_value()) {
45
45
  this->speed_ = clamp(*this->speed_, 1, traits.supported_speed_count());
46
46
 
47
- if (this->binary_state_.has_value() && *this->binary_state_) {
48
- // when turning on, if neither current nor new speed available, set speed to 100%
49
- if (traits.supports_speed() && !this->parent_.state && this->parent_.speed == 0 && !this->speed_.has_value()) {
50
- this->speed_ = traits.supported_speed_count();
47
+ // https://developers.home-assistant.io/docs/core/entity/fan/#preset-modes
48
+ // "Manually setting a speed must disable any set preset mode"
49
+ this->preset_mode_.clear();
50
+ }
51
+
52
+ if (!this->preset_mode_.empty()) {
53
+ const auto &preset_modes = traits.supported_preset_modes();
54
+ if (preset_modes.find(this->preset_mode_) == preset_modes.end()) {
55
+ ESP_LOGW(TAG, "%s: Preset mode '%s' not supported", this->parent_.get_name().c_str(), this->preset_mode_.c_str());
56
+ this->preset_mode_.clear();
51
57
  }
52
58
  }
53
59
 
60
+ // when turning on...
61
+ if (!this->parent_.state && this->binary_state_.has_value() &&
62
+ *this->binary_state_
63
+ // ..,and no preset mode will be active...
64
+ && this->preset_mode_.empty() &&
65
+ this->parent_.preset_mode.empty()
66
+ // ...and neither current nor new speed is available...
67
+ && traits.supports_speed() && this->parent_.speed == 0 && !this->speed_.has_value()) {
68
+ // ...set speed to 100%
69
+ this->speed_ = traits.supported_speed_count();
70
+ }
71
+
54
72
  if (this->oscillating_.has_value() && !traits.supports_oscillation()) {
55
- ESP_LOGW(TAG, "'%s' - This fan does not support oscillation!", this->parent_.get_name().c_str());
73
+ ESP_LOGW(TAG, "%s: Oscillation not supported", this->parent_.get_name().c_str());
56
74
  this->oscillating_.reset();
57
75
  }
58
76
 
59
77
  if (this->speed_.has_value() && !traits.supports_speed()) {
60
- ESP_LOGW(TAG, "'%s' - This fan does not support speeds!", this->parent_.get_name().c_str());
78
+ ESP_LOGW(TAG, "%s: Speed control not supported", this->parent_.get_name().c_str());
61
79
  this->speed_.reset();
62
80
  }
63
81
 
64
82
  if (this->direction_.has_value() && !traits.supports_direction()) {
65
- ESP_LOGW(TAG, "'%s' - This fan does not support directions!", this->parent_.get_name().c_str());
83
+ ESP_LOGW(TAG, "%s: Direction control not supported", this->parent_.get_name().c_str());
66
84
  this->direction_.reset();
67
85
  }
68
-
69
- if (!this->preset_mode_.empty()) {
70
- const auto &preset_modes = traits.supported_preset_modes();
71
- if (preset_modes.find(this->preset_mode_) == preset_modes.end()) {
72
- ESP_LOGW(TAG, "'%s' - This fan does not support preset mode '%s'!", this->parent_.get_name().c_str(),
73
- this->preset_mode_.c_str());
74
- this->preset_mode_.clear();
75
- }
76
- }
77
86
  }
78
87
 
79
88
  FanCall FanRestoreState::to_call(Fan &fan) {
@@ -189,8 +198,10 @@ void Fan::dump_traits_(const char *tag, const char *prefix) {
189
198
  auto traits = this->get_traits();
190
199
 
191
200
  if (traits.supports_speed()) {
192
- ESP_LOGCONFIG(tag, "%s Speed: YES", prefix);
193
- ESP_LOGCONFIG(tag, "%s Speed count: %d", prefix, traits.supported_speed_count());
201
+ ESP_LOGCONFIG(tag,
202
+ "%s Speed: YES\n"
203
+ "%s Speed count: %d",
204
+ prefix, prefix, traits.supported_speed_count());
194
205
  }
195
206
  if (traits.supports_oscillation()) {
196
207
  ESP_LOGCONFIG(tag, "%s Oscillation: YES", prefix);
@@ -9,7 +9,7 @@ namespace fastled_base {
9
9
  static const char *const TAG = "fastled";
10
10
 
11
11
  void FastLEDLightOutput::setup() {
12
- ESP_LOGCONFIG(TAG, "Setting up FastLED light...");
12
+ ESP_LOGCONFIG(TAG, "Running setup");
13
13
  this->controller_->init();
14
14
  this->controller_->setLeds(this->leds_, this->num_leds_);
15
15
  this->effect_data_ = new uint8_t[this->num_leds_]; // NOLINT
@@ -18,9 +18,11 @@ void FastLEDLightOutput::setup() {
18
18
  }
19
19
  }
20
20
  void FastLEDLightOutput::dump_config() {
21
- ESP_LOGCONFIG(TAG, "FastLED light:");
22
- ESP_LOGCONFIG(TAG, " Num LEDs: %u", this->num_leds_);
23
- ESP_LOGCONFIG(TAG, " Max refresh rate: %u", *this->max_refresh_rate_);
21
+ ESP_LOGCONFIG(TAG,
22
+ "FastLED light:\n"
23
+ " Num LEDs: %u\n"
24
+ " Max refresh rate: %u",
25
+ this->num_leds_, *this->max_refresh_rate_);
24
26
  }
25
27
  void FastLEDLightOutput::write_state(light::LightState *state) {
26
28
  // protect from refreshing too often
@@ -33,7 +35,7 @@ void FastLEDLightOutput::write_state(light::LightState *state) {
33
35
  this->last_refresh_ = now;
34
36
  this->mark_shown_();
35
37
 
36
- ESP_LOGVV(TAG, "Writing RGB values to bus...");
38
+ ESP_LOGVV(TAG, "Writing RGB values to bus");
37
39
  this->controller_->showLeds(this->state_parent_->current_values.get_brightness() * 255);
38
40
  }
39
41
 
@@ -57,7 +57,7 @@ void FingerprintGrowComponent::update() {
57
57
  }
58
58
 
59
59
  void FingerprintGrowComponent::setup() {
60
- ESP_LOGCONFIG(TAG, "Setting up Grow Fingerprint Reader...");
60
+ ESP_LOGCONFIG(TAG, "Running setup");
61
61
 
62
62
  this->has_sensing_pin_ = (this->sensing_pin_ != nullptr);
63
63
  this->has_power_pin_ = (this->sensor_power_pin_ != nullptr);
@@ -534,11 +534,13 @@ void FingerprintGrowComponent::sensor_sleep_() {
534
534
  }
535
535
 
536
536
  void FingerprintGrowComponent::dump_config() {
537
- ESP_LOGCONFIG(TAG, "GROW_FINGERPRINT_READER:");
538
- ESP_LOGCONFIG(TAG, " System Identifier Code: 0x%.4X", this->system_identifier_code_);
539
- ESP_LOGCONFIG(TAG, " Touch Sensing Pin: %s",
540
- this->has_sensing_pin_ ? this->sensing_pin_->dump_summary().c_str() : "None");
541
- ESP_LOGCONFIG(TAG, " Sensor Power Pin: %s",
537
+ ESP_LOGCONFIG(TAG,
538
+ "GROW_FINGERPRINT_READER:\n"
539
+ " System Identifier Code: 0x%.4X\n"
540
+ " Touch Sensing Pin: %s\n"
541
+ " Sensor Power Pin: %s",
542
+ this->system_identifier_code_,
543
+ this->has_sensing_pin_ ? this->sensing_pin_->dump_summary().c_str() : "None",
542
544
  this->has_power_pin_ ? this->sensor_power_pin_->dump_summary().c_str() : "None");
543
545
  if (this->idle_period_to_sleep_ms_ < UINT32_MAX) {
544
546
  ESP_LOGCONFIG(TAG, " Idle Period to Sleep: %" PRIu32 " ms", this->idle_period_to_sleep_ms_);