esphome 2025.5.2__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 (715) 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 -1
  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/preferences.cpp +6 -6
  181. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  182. esphome/components/esp_ldo/__init__.py +91 -0
  183. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  184. esphome/components/esp_ldo/esp_ldo.h +43 -0
  185. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  186. esphome/components/ethernet/ethernet_component.cpp +38 -26
  187. esphome/components/ethernet/ethernet_component.h +1 -1
  188. esphome/components/event/__init__.py +1 -0
  189. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  190. esphome/components/ezo/ezo.cpp +1 -1
  191. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  192. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  193. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  194. esphome/components/fan/__init__.py +1 -0
  195. esphome/components/fan/fan.cpp +4 -2
  196. esphome/components/fastled_base/fastled_light.cpp +7 -5
  197. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  198. esphome/components/fs3000/fs3000.cpp +1 -1
  199. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  200. esphome/components/ft63x6/ft63x6.cpp +5 -3
  201. esphome/components/gcja5/gcja5.cpp +0 -12
  202. esphome/components/gcja5/gcja5.h +8 -3
  203. esphome/components/gdk101/gdk101.cpp +2 -2
  204. esphome/components/globals/globals_component.h +13 -10
  205. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  206. esphome/components/gp8403/gp8403.cpp +4 -2
  207. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  208. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  209. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  210. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  211. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  212. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  213. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  215. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  216. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  217. esphome/components/haier/haier_base.cpp +2 -2
  218. esphome/components/haier/hon_climate.cpp +13 -6
  219. esphome/components/havells_solar/havells_solar.cpp +5 -2
  220. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  221. esphome/components/hdc1080/hdc1080.cpp +2 -2
  222. esphome/components/he60r/he60r.cpp +4 -2
  223. esphome/components/hlw8012/hlw8012.cpp +6 -4
  224. esphome/components/hm3301/hm3301.cpp +2 -2
  225. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  226. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  227. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  228. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  229. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  230. esphome/components/hte501/hte501.cpp +3 -2
  231. esphome/components/http_request/__init__.py +2 -2
  232. esphome/components/http_request/http_request.cpp +7 -5
  233. esphome/components/http_request/http_request_idf.cpp +4 -2
  234. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  235. esphome/components/htu21d/htu21d.cpp +2 -2
  236. esphome/components/htu31d/htu31d.cpp +2 -2
  237. esphome/components/hx711/hx711.cpp +2 -2
  238. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  239. esphome/components/hyt271/hyt271.cpp +2 -2
  240. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  241. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  242. esphome/components/i2s_audio/__init__.py +2 -0
  243. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  244. esphome/components/i2s_audio/i2s_audio.h +1 -1
  245. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  246. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  247. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +1 -1
  248. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  249. esphome/components/iaqcore/iaqcore.cpp +3 -3
  250. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  251. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  252. esphome/components/image/image.cpp +1 -0
  253. esphome/components/ina219/ina219.cpp +2 -2
  254. esphome/components/ina226/ina226.cpp +8 -5
  255. esphome/components/ina260/ina260.cpp +1 -1
  256. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  257. esphome/components/ina3221/ina3221.cpp +2 -2
  258. esphome/components/inkplate6/display.py +12 -2
  259. esphome/components/inkplate6/inkplate.cpp +13 -9
  260. esphome/components/inkplate6/inkplate.h +7 -6
  261. esphome/components/integration/integration_sensor.cpp +1 -1
  262. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  263. esphome/components/json/json_util.cpp +4 -5
  264. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  265. esphome/components/key_collector/key_collector.cpp +4 -2
  266. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  267. esphome/components/kuntze/kuntze.cpp +4 -2
  268. esphome/components/lc709203f/__init__.py +1 -0
  269. esphome/components/lc709203f/lc709203f.cpp +299 -0
  270. esphome/components/lc709203f/lc709203f.h +55 -0
  271. esphome/components/lc709203f/sensor.py +93 -0
  272. esphome/components/lcd_base/lcd_display.cpp +2 -2
  273. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  274. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  275. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  276. esphome/components/ld2410/ld2410.cpp +6 -7
  277. esphome/components/ld2420/ld2420.cpp +9 -7
  278. esphome/components/ld2450/ld2450.cpp +6 -4
  279. esphome/components/ld2450/sensor.py +2 -2
  280. esphome/components/ledc/ledc_output.cpp +32 -28
  281. esphome/components/libretiny/const.py +1 -1
  282. esphome/components/libretiny/preferences.cpp +6 -7
  283. esphome/components/light/__init__.py +2 -1
  284. esphome/components/light/esp_hsv_color.h +1 -1
  285. esphome/components/light/light_state.cpp +9 -5
  286. esphome/components/light/light_transformer.h +1 -1
  287. esphome/components/lightwaverf/LwTx.cpp +1 -1
  288. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  289. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  290. esphome/components/lock/__init__.py +1 -0
  291. esphome/components/lock/lock.h +1 -1
  292. esphome/components/logger/__init__.py +6 -0
  293. esphome/components/logger/logger.cpp +9 -5
  294. esphome/components/logger/logger_esp32.cpp +5 -5
  295. esphome/components/ltr390/ltr390.cpp +8 -5
  296. esphome/components/ltr501/ltr501.cpp +19 -14
  297. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  298. esphome/components/lvgl/__init__.py +2 -2
  299. esphome/components/lvgl/automation.py +5 -4
  300. esphome/components/lvgl/defines.py +0 -2
  301. esphome/components/lvgl/lv_validation.py +1 -3
  302. esphome/components/lvgl/lvcode.py +7 -8
  303. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  304. esphome/components/lvgl/schemas.py +22 -23
  305. esphome/components/lvgl/trigger.py +8 -3
  306. esphome/components/lvgl/widgets/__init__.py +2 -2
  307. esphome/components/lvgl/widgets/canvas.py +9 -3
  308. esphome/components/lvgl/widgets/line.py +2 -1
  309. esphome/components/lvgl/widgets/tabview.py +7 -0
  310. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  311. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  312. esphome/components/max17043/max17043.cpp +2 -2
  313. esphome/components/max31855/max31855.cpp +2 -1
  314. esphome/components/max31856/max31856.cpp +9 -11
  315. esphome/components/max31865/max31865.cpp +6 -4
  316. esphome/components/max44009/max44009.cpp +2 -2
  317. esphome/components/max6675/max6675.cpp +1 -1
  318. esphome/components/max6956/max6956.cpp +5 -3
  319. esphome/components/max7219/max7219.cpp +8 -6
  320. esphome/components/max7219digit/automation.h +52 -0
  321. esphome/components/max7219digit/display.py +93 -1
  322. esphome/components/max7219digit/max7219digit.cpp +16 -13
  323. esphome/components/max9611/max9611.cpp +9 -6
  324. esphome/components/mcp23008/mcp23008.cpp +1 -1
  325. esphome/components/mcp23016/mcp23016.cpp +1 -1
  326. esphome/components/mcp23017/mcp23017.cpp +1 -1
  327. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  328. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  329. esphome/components/mcp3008/mcp3008.cpp +1 -1
  330. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  331. esphome/components/mcp3204/mcp3204.cpp +1 -1
  332. esphome/components/mcp4461/mcp4461.cpp +2 -2
  333. esphome/components/mcp4725/mcp4725.cpp +2 -2
  334. esphome/components/mcp4728/mcp4728.cpp +2 -2
  335. esphome/components/mcp9600/mcp9600.cpp +1 -1
  336. esphome/components/mcp9808/mcp9808.cpp +4 -4
  337. esphome/components/mdns/mdns_component.cpp +8 -2
  338. esphome/components/mdns/mdns_component.h +3 -1
  339. esphome/components/mdns/mdns_esp32.cpp +2 -2
  340. esphome/components/media_player/__init__.py +1 -0
  341. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  342. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  343. esphome/components/micronova/micronova.h +2 -2
  344. esphome/components/mics_4514/mics_4514.cpp +2 -2
  345. esphome/components/midea/air_conditioner.cpp +7 -5
  346. esphome/components/midea_ir/midea_ir.cpp +1 -1
  347. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  348. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  349. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  350. esphome/components/mlx90614/mlx90614.cpp +4 -3
  351. esphome/components/mmc5603/mmc5603.cpp +2 -2
  352. esphome/components/mmc5983/mmc5983.cpp +1 -1
  353. esphome/components/modbus/modbus.cpp +7 -5
  354. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  355. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  356. esphome/components/modbus_controller/switch/__init__.py +6 -2
  357. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  358. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  359. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  360. esphome/components/mpr121/mpr121.cpp +2 -2
  361. esphome/components/mpu6050/mpu6050.cpp +6 -6
  362. esphome/components/mpu6886/mpu6886.cpp +6 -6
  363. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  364. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  365. esphome/components/mqtt/mqtt_client.cpp +31 -24
  366. esphome/components/mqtt/mqtt_component.cpp +2 -2
  367. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  368. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  369. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  370. esphome/components/ms5611/ms5611.cpp +2 -2
  371. esphome/components/ms8607/ms8607.cpp +2 -2
  372. esphome/components/msa3xx/msa3xx.cpp +16 -12
  373. esphome/components/my9231/my9231.cpp +7 -5
  374. esphome/components/nau7802/nau7802.cpp +6 -4
  375. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  376. esphome/components/network/ip_address.h +1 -1
  377. esphome/components/network/util.cpp +13 -0
  378. esphome/components/nextion/base_component.py +2 -0
  379. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  380. esphome/components/nextion/display.py +34 -22
  381. esphome/components/nextion/nextion.cpp +182 -143
  382. esphome/components/nextion/nextion.h +36 -0
  383. esphome/components/nextion/nextion_commands.cpp +3 -3
  384. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  385. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  386. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  387. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  388. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  389. esphome/components/nfc/nci_message.h +1 -1
  390. esphome/components/nfc/ndef_record.h +1 -1
  391. esphome/components/nfc/ndef_record_text.h +1 -1
  392. esphome/components/nfc/ndef_record_uri.h +1 -1
  393. esphome/components/nfc/nfc.h +1 -1
  394. esphome/components/nfc/nfc_tag.h +1 -1
  395. esphome/components/noblex/noblex.cpp +1 -1
  396. esphome/components/npi19/npi19.cpp +5 -7
  397. esphome/components/number/__init__.py +11 -0
  398. esphome/components/online_image/__init__.py +13 -1
  399. esphome/components/online_image/online_image.cpp +26 -4
  400. esphome/components/online_image/online_image.h +21 -4
  401. esphome/components/opentherm/generate.py +3 -3
  402. esphome/components/opentherm/hub.cpp +11 -7
  403. esphome/components/opentherm/number/number.cpp +5 -3
  404. esphome/components/opentherm/opentherm.h +1 -1
  405. esphome/components/opentherm/schema.py +13 -13
  406. esphome/components/opentherm/validate.py +1 -1
  407. esphome/components/openthread/__init__.py +146 -0
  408. esphome/components/openthread/const.py +10 -0
  409. esphome/components/openthread/openthread.cpp +206 -0
  410. esphome/components/openthread/openthread.h +68 -0
  411. esphome/components/openthread/openthread_esp.cpp +164 -0
  412. esphome/components/openthread/tlv.py +58 -0
  413. esphome/components/openthread_info/__init__.py +0 -0
  414. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  415. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  416. esphome/components/openthread_info/text_sensor.py +105 -0
  417. esphome/components/output/float_output.cpp +1 -1
  418. esphome/components/output/switch/output_switch.cpp +1 -1
  419. esphome/components/packet_transport/packet_transport.cpp +6 -4
  420. esphome/components/pca6416a/pca6416a.cpp +2 -2
  421. esphome/components/pca9554/pca9554.cpp +6 -4
  422. esphome/components/pca9685/pca9685_output.cpp +12 -8
  423. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  424. esphome/components/pcf85063/pcf85063.cpp +2 -2
  425. esphome/components/pcf8563/pcf8563.cpp +2 -2
  426. esphome/components/pcf8574/pcf8574.cpp +2 -2
  427. esphome/components/pid/pid_climate.cpp +8 -5
  428. esphome/components/pid/pid_climate.h +1 -1
  429. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  430. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  431. esphome/components/pipsolar/pipsolar.cpp +3 -3
  432. esphome/components/pm1006/pm1006.cpp +3 -7
  433. esphome/components/pm1006/pm1006.h +4 -1
  434. esphome/components/pm2005/pm2005.cpp +12 -13
  435. esphome/components/pm2005/sensor.py +1 -1
  436. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  437. esphome/components/pmsx003/pmsx003.cpp +0 -4
  438. esphome/components/pmsx003/pmsx003.h +5 -2
  439. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  440. esphome/components/pmwcs3/pmwcs3.h +0 -1
  441. esphome/components/pn532/pn532.cpp +7 -7
  442. esphome/components/pn532/pn532.h +1 -1
  443. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  444. esphome/components/pn7150/pn7150.cpp +4 -4
  445. esphome/components/pn7160/pn7160.cpp +4 -4
  446. esphome/components/power_supply/power_supply.cpp +6 -4
  447. esphome/components/power_supply/power_supply.h +1 -1
  448. esphome/components/psram/__init__.py +59 -35
  449. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  450. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  451. esphome/components/pylontech/pylontech.cpp +2 -2
  452. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  453. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  454. esphome/components/pzemac/pzemac.cpp +4 -2
  455. esphome/components/pzemdc/pzemdc.cpp +4 -2
  456. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  457. esphome/components/qmp6988/qmp6988.cpp +2 -2
  458. esphome/components/qmp6988/qmp6988.h +1 -1
  459. esphome/components/qr_code/qr_code.cpp +5 -3
  460. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  461. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  462. esphome/components/rc522/rc522.cpp +5 -5
  463. esphome/components/rdm6300/rdm6300.cpp +1 -0
  464. esphome/components/remote_receiver/__init__.py +10 -2
  465. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  466. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  467. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  468. esphome/components/remote_transmitter/__init__.py +10 -2
  469. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  470. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  471. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  472. esphome/components/resistance/resistance_sensor.cpp +6 -3
  473. esphome/components/restart/button/restart_button.cpp +1 -1
  474. esphome/components/restart/switch/restart_switch.cpp +1 -1
  475. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  476. esphome/components/rp2040/__init__.py +7 -0
  477. esphome/components/rp2040/core.cpp +8 -1
  478. esphome/components/rp2040/preferences.cpp +3 -3
  479. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  480. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  481. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  482. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  483. esphome/components/rtttl/rtttl.cpp +11 -9
  484. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  485. esphome/components/safe_mode/safe_mode.cpp +9 -8
  486. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  487. esphome/components/scd30/scd30.cpp +11 -8
  488. esphome/components/scd4x/scd4x.cpp +12 -8
  489. esphome/components/sdl/display.py +40 -0
  490. esphome/components/sdl/sdl_esphome.cpp +2 -2
  491. esphome/components/sdl/sdl_esphome.h +8 -0
  492. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  493. esphome/components/sdp3x/sdp3x.cpp +11 -11
  494. esphome/components/sds011/sds011.cpp +5 -6
  495. esphome/components/sds011/sds011.h +4 -1
  496. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  497. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  498. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  499. esphome/components/selec_meter/selec_meter.cpp +5 -2
  500. esphome/components/select/__init__.py +1 -0
  501. esphome/components/sen0321/sen0321.cpp +2 -2
  502. esphome/components/sen21231/sen21231.cpp +1 -1
  503. esphome/components/sen5x/sen5x.cpp +10 -7
  504. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  505. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  506. esphome/components/sensor/__init__.py +11 -1
  507. esphome/components/sensor/filter.h +1 -1
  508. esphome/components/sensor/sensor.h +9 -5
  509. esphome/components/servo/servo.cpp +12 -9
  510. esphome/components/servo/servo.h +1 -1
  511. esphome/components/sfa30/sfa30.cpp +1 -1
  512. esphome/components/sgp30/sgp30.cpp +10 -8
  513. esphome/components/sgp4x/sgp4x.cpp +49 -61
  514. esphome/components/sgp4x/sgp4x.h +0 -1
  515. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  516. esphome/components/sht3xd/sht3xd.cpp +1 -1
  517. esphome/components/sht4x/sht4x.cpp +2 -2
  518. esphome/components/shtcx/shtcx.cpp +13 -16
  519. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  520. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  521. esphome/components/sim800l/sim800l.cpp +2 -2
  522. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  523. esphome/components/sm16716/sm16716.cpp +1 -1
  524. esphome/components/sm2135/sm2135.cpp +1 -1
  525. esphome/components/sm2235/sm2235.cpp +5 -3
  526. esphome/components/sm2335/sm2335.cpp +5 -3
  527. esphome/components/sml/sml.cpp +1 -1
  528. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  529. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  530. esphome/components/sntp/sntp_component.cpp +1 -1
  531. esphome/components/socket/__init__.py +2 -0
  532. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  533. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  534. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  535. esphome/components/socket/socket.cpp +31 -0
  536. esphome/components/socket/socket.h +27 -1
  537. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  538. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  539. esphome/components/sound_level/sound_level.cpp +4 -2
  540. esphome/components/speaker/media_player/__init__.py +3 -0
  541. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  542. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  543. esphome/components/spi/__init__.py +10 -2
  544. esphome/components/spi/spi.cpp +4 -4
  545. esphome/components/spi_device/spi_device.cpp +1 -2
  546. esphome/components/sprinkler/sprinkler.cpp +9 -6
  547. esphome/components/sps30/sps30.cpp +16 -15
  548. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  549. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  550. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  551. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  552. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  553. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  554. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  555. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  556. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  557. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  558. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  559. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  560. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  561. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  562. esphome/components/st7567_base/st7567_base.cpp +3 -3
  563. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  564. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  565. esphome/components/st7701s/st7701s.cpp +4 -2
  566. esphome/components/st7735/st7735.cpp +3 -3
  567. esphome/components/st7789v/st7789v.cpp +10 -7
  568. esphome/components/st7920/st7920.cpp +6 -4
  569. esphome/components/statsd/statsd.cpp +9 -5
  570. esphome/components/status_led/light/status_led_light.cpp +1 -1
  571. esphome/components/status_led/status_led.cpp +1 -1
  572. esphome/components/stepper/stepper.h +5 -3
  573. esphome/components/sts3x/sts3x.cpp +2 -2
  574. esphome/components/switch/__init__.py +1 -0
  575. esphome/components/switch/switch.cpp +18 -12
  576. esphome/components/switch/switch.h +1 -1
  577. esphome/components/sx1509/__init__.py +53 -20
  578. esphome/components/sx1509/sx1509.cpp +29 -5
  579. esphome/components/sx1509/sx1509.h +9 -1
  580. esphome/components/t6615/t6615.cpp +1 -0
  581. esphome/components/tc74/tc74.cpp +1 -1
  582. esphome/components/tca9548a/tca9548a.cpp +1 -1
  583. esphome/components/tca9555/tca9555.cpp +2 -2
  584. esphome/components/tcs34725/tcs34725.cpp +4 -4
  585. esphome/components/tee501/tee501.cpp +3 -2
  586. esphome/components/tem3200/tem3200.cpp +5 -6
  587. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  588. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  589. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  590. esphome/components/template/cover/template_cover.cpp +1 -1
  591. esphome/components/template/select/template_select.cpp +6 -4
  592. esphome/components/template/text/template_text.cpp +2 -3
  593. esphome/components/template/valve/template_valve.cpp +5 -3
  594. esphome/components/text/__init__.py +10 -11
  595. esphome/components/text_sensor/__init__.py +1 -0
  596. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  597. esphome/components/time/__init__.py +1 -2
  598. esphome/components/time_based/time_based_cover.cpp +4 -2
  599. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  600. esphome/components/tm1621/tm1621.cpp +3 -3
  601. esphome/components/tm1637/tm1637.cpp +9 -7
  602. esphome/components/tm1638/tm1638.cpp +7 -5
  603. esphome/components/tm1651/tm1651.cpp +2 -2
  604. esphome/components/tmp102/tmp102.cpp +1 -3
  605. esphome/components/tmp102/tmp102.h +0 -3
  606. esphome/components/tmp1075/tmp1075.cpp +12 -9
  607. esphome/components/tmp117/tmp117.cpp +2 -2
  608. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  609. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  610. esphome/components/tsl2561/tsl2561.cpp +7 -5
  611. esphome/components/tsl2591/tsl2591.cpp +25 -27
  612. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  613. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  614. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  615. esphome/components/tuya/select/tuya_select.cpp +5 -3
  616. esphome/components/tx20/tx20.cpp +3 -3
  617. esphome/components/uart/__init__.py +4 -5
  618. esphome/components/uart/button/uart_button.cpp +1 -1
  619. esphome/components/uart/switch/uart_switch.cpp +2 -2
  620. esphome/components/uart/uart.cpp +2 -2
  621. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  622. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  623. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  624. esphome/components/uart/uart_component_host.cpp +11 -8
  625. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  626. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  627. esphome/components/udp/udp_component.cpp +9 -5
  628. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  629. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  630. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  631. esphome/components/update/__init__.py +1 -0
  632. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  633. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  634. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  635. esphome/components/usb_host/__init__.py +64 -0
  636. esphome/components/usb_host/usb_host.h +116 -0
  637. esphome/components/usb_host/usb_host_client.cpp +394 -0
  638. esphome/components/usb_host/usb_host_component.cpp +35 -0
  639. esphome/components/usb_uart/__init__.py +134 -0
  640. esphome/components/usb_uart/ch34x.cpp +80 -0
  641. esphome/components/usb_uart/cp210x.cpp +126 -0
  642. esphome/components/usb_uart/usb_uart.cpp +328 -0
  643. esphome/components/usb_uart/usb_uart.h +151 -0
  644. esphome/components/valve/__init__.py +1 -0
  645. esphome/components/veml3235/veml3235.cpp +13 -9
  646. esphome/components/veml7700/veml7700.cpp +10 -6
  647. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  648. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  649. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  650. esphome/components/web_server/server_index_v2.h +632 -630
  651. esphome/components/web_server/server_index_v3.h +411 -409
  652. esphome/components/web_server/web_server.cpp +5 -3
  653. esphome/components/web_server_base/web_server_base.cpp +1 -1
  654. esphome/components/web_server_idf/utils.cpp +1 -1
  655. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  656. esphome/components/weikai/__init__.py +2 -0
  657. esphome/components/weikai/weikai.cpp +23 -21
  658. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  659. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  660. esphome/components/wiegand/wiegand.cpp +1 -1
  661. esphome/components/wifi/wifi_component.cpp +50 -37
  662. esphome/components/wifi/wifi_component.h +7 -4
  663. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  664. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  665. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  666. esphome/components/wireguard/wireguard.cpp +21 -21
  667. esphome/components/wl_134/text_sensor.py +1 -2
  668. esphome/components/wled/wled_light_effect.cpp +1 -1
  669. esphome/components/x9c/x9c.cpp +5 -3
  670. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  671. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  672. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  673. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  674. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  675. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  676. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  677. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  678. esphome/components/xl9535/xl9535.cpp +2 -2
  679. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  680. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  681. esphome/config.py +3 -2
  682. esphome/config_validation.py +46 -17
  683. esphome/const.py +10 -1
  684. esphome/core/__init__.py +37 -18
  685. esphome/core/application.cpp +188 -5
  686. esphome/core/application.h +110 -0
  687. esphome/core/component.h +13 -0
  688. esphome/core/config.py +12 -0
  689. esphome/core/defines.h +10 -2
  690. esphome/core/helpers.cpp +1 -1
  691. esphome/core/helpers.h +4 -4
  692. esphome/core/log.h +2 -0
  693. esphome/core/log_const_en.h +4 -0
  694. esphome/core/scheduler.cpp +2 -2
  695. esphome/coroutine.py +3 -4
  696. esphome/cpp_generator.py +32 -32
  697. esphome/dashboard/core.py +2 -2
  698. esphome/dashboard/web_server.py +2 -2
  699. esphome/git.py +4 -4
  700. esphome/helpers.py +5 -6
  701. esphome/loader.py +8 -7
  702. esphome/log.py +7 -1
  703. esphome/platformio_api.py +2 -3
  704. esphome/storage_json.py +13 -5
  705. esphome/types.py +12 -13
  706. esphome/util.py +1 -2
  707. esphome/writer.py +5 -3
  708. esphome/yaml_util.py +6 -1
  709. esphome/zeroconf.py +1 -1
  710. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  711. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +715 -662
  712. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  713. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  714. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  715. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -235,7 +235,7 @@ std::string WebServer::get_config_json() {
235
235
  }
236
236
 
237
237
  void WebServer::setup() {
238
- ESP_LOGCONFIG(TAG, "Setting up web server...");
238
+ ESP_LOGCONFIG(TAG, "Running setup");
239
239
  this->setup_controller(this->include_internal_);
240
240
  this->base_->init();
241
241
 
@@ -282,8 +282,10 @@ void WebServer::loop() {
282
282
  this->events_.loop();
283
283
  }
284
284
  void WebServer::dump_config() {
285
- ESP_LOGCONFIG(TAG, "Web Server:");
286
- ESP_LOGCONFIG(TAG, " Address: %s:%u", network::get_use_address().c_str(), this->base_->get_port());
285
+ ESP_LOGCONFIG(TAG,
286
+ "Web Server:\n"
287
+ " Address: %s:%u",
288
+ network::get_use_address().c_str(), this->base_->get_port());
287
289
  }
288
290
  float WebServer::get_setup_priority() const { return setup_priority::WIFI - 1.0f; }
289
291
 
@@ -1,8 +1,8 @@
1
1
  #include "web_server_base.h"
2
2
  #ifdef USE_NETWORK
3
- #include "esphome/core/log.h"
4
3
  #include "esphome/core/application.h"
5
4
  #include "esphome/core/helpers.h"
5
+ #include "esphome/core/log.h"
6
6
 
7
7
  #ifdef USE_ARDUINO
8
8
  #include <StreamString.h>
@@ -1,7 +1,7 @@
1
1
  #ifdef USE_ESP_IDF
2
2
  #include <memory>
3
- #include "esphome/core/log.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
  #include "http_parser.h"
6
6
 
7
7
  #include "utils.h"
@@ -2,8 +2,8 @@
2
2
 
3
3
  #include <cstdarg>
4
4
 
5
- #include "esphome/core/log.h"
6
5
  #include "esphome/core/helpers.h"
6
+ #include "esphome/core/log.h"
7
7
 
8
8
  #include "esp_tls_crypto.h"
9
9
 
@@ -16,6 +16,7 @@ CODEOWNERS = ["@DrCoolZic"]
16
16
  AUTO_LOAD = ["uart"]
17
17
 
18
18
  MULTI_CONF = True
19
+ CONF_DATA_BITS = "data_bits"
19
20
  CONF_STOP_BITS = "stop_bits"
20
21
  CONF_PARITY = "parity"
21
22
  CONF_CRYSTAL = "crystal"
@@ -60,6 +61,7 @@ WKBASE_SCHEMA = cv.Schema(
60
61
  cv.Required(CONF_ID): cv.declare_id(WeikaiChannel),
61
62
  cv.Optional(CONF_CHANNEL, default=0): cv.int_range(min=0, max=3),
62
63
  cv.Required(CONF_BAUD_RATE): cv.int_range(min=1),
64
+ cv.Optional(CONF_DATA_BITS, default=8): cv.one_of(8, int=True),
63
65
  cv.Optional(CONF_STOP_BITS, default=1): cv.one_of(1, 2, int=True),
64
66
  cv.Optional(CONF_PARITY, default="NONE"): cv.enum(
65
67
  uart.UART_PARITY_OPTIONS, upper=True
@@ -112,7 +112,7 @@ void WeikaiComponent::loop() {
112
112
  transferred += child->xfer_fifo_to_buffer_();
113
113
  }
114
114
  if (transferred > 0) {
115
- ESP_LOGV(TAG, "we transferred %d bytes from fifo to buffer...", transferred);
115
+ ESP_LOGV(TAG, "transferred %d bytes from fifo to buffer", transferred);
116
116
  }
117
117
 
118
118
  #ifdef TEST_COMPONENT
@@ -121,8 +121,8 @@ void WeikaiComponent::loop() {
121
121
  uint32_t time = 0;
122
122
 
123
123
  if (test_mode_ == 1) { // test component in loopback
124
- ESP_LOGI(TAG, "Component loop %" PRIu32 " for %s : %" PRIu32 " ms since last call ...", loop_count++,
125
- this->get_name(), millis() - loop_time);
124
+ ESP_LOGI(TAG, "Component loop %" PRIu32 " for %s : %" PRIu32 " ms since last call", loop_count++, this->get_name(),
125
+ millis() - loop_time);
126
126
  loop_time = millis();
127
127
  char message[64];
128
128
  elapsed_ms(time); // set time to now
@@ -134,14 +134,14 @@ void WeikaiComponent::loop() {
134
134
  uint32_t const start_time = millis();
135
135
  while (children_[i]->tx_fifo_is_not_empty_()) { // wait until buffer empty
136
136
  if (millis() - start_time > 1500) {
137
- ESP_LOGE(TAG, "timeout while flushing - %d bytes left in buffer...", children_[i]->tx_in_fifo_());
137
+ ESP_LOGE(TAG, "timeout while flushing - %d bytes left in buffer", children_[i]->tx_in_fifo_());
138
138
  break;
139
139
  }
140
140
  yield(); // reschedule our thread to avoid blocking
141
141
  }
142
142
  bool status = children_[i]->uart_receive_test_(message);
143
- ESP_LOGI(TAG, "Test %s => send/received %u bytes %s - execution time %" PRIu32 " ms...", message,
144
- RING_BUFFER_SIZE, status ? "correctly" : "with error", elapsed_ms(time));
143
+ ESP_LOGI(TAG, "Test %s => send/received %u bytes %s - execution time %" PRIu32 " ms", message, RING_BUFFER_SIZE,
144
+ status ? "correctly" : "with error", elapsed_ms(time));
145
145
  }
146
146
  }
147
147
 
@@ -255,10 +255,10 @@ std::string WeikaiGPIOPin::dump_summary() const {
255
255
  // The WeikaiChannel methods
256
256
  ///////////////////////////////////////////////////////////////////////////////
257
257
  void WeikaiChannel::setup_channel() {
258
- ESP_LOGCONFIG(TAG, " Setting up UART %s:%s ...", this->parent_->get_name(), this->get_channel_name());
258
+ ESP_LOGCONFIG(TAG, " Setting up UART %s:%s", this->parent_->get_name(), this->get_channel_name());
259
259
  // we enable transmit and receive on this channel
260
260
  if (this->check_channel_down()) {
261
- ESP_LOGCONFIG(TAG, " Error channel %s not working...", this->get_channel_name());
261
+ ESP_LOGCONFIG(TAG, " Error channel %s not working", this->get_channel_name());
262
262
  }
263
263
  this->reset_fifo_();
264
264
  this->receive_buffer_.clear();
@@ -267,11 +267,13 @@ void WeikaiChannel::setup_channel() {
267
267
  }
268
268
 
269
269
  void WeikaiChannel::dump_channel() {
270
- ESP_LOGCONFIG(TAG, " UART %s ...", this->get_channel_name());
271
- ESP_LOGCONFIG(TAG, " Baud rate: %" PRIu32 " Bd", this->baud_rate_);
272
- ESP_LOGCONFIG(TAG, " Data bits: %u", this->data_bits_);
273
- ESP_LOGCONFIG(TAG, " Stop bits: %u", this->stop_bits_);
274
- ESP_LOGCONFIG(TAG, " Parity: %s", p2s(this->parity_));
270
+ ESP_LOGCONFIG(TAG,
271
+ " UART %s\n"
272
+ " Baud rate: %" PRIu32 " Bd\n"
273
+ " Data bits: %u\n"
274
+ " Stop bits: %u\n"
275
+ " Parity: %s",
276
+ this->get_channel_name(), this->baud_rate_, this->data_bits_, this->stop_bits_, p2s(this->parity_));
275
277
  }
276
278
 
277
279
  void WeikaiChannel::reset_fifo_() {
@@ -407,7 +409,7 @@ bool WeikaiChannel::read_array(uint8_t *buffer, size_t length) {
407
409
  bool status = true;
408
410
  auto available = this->receive_buffer_.count();
409
411
  if (length > available) {
410
- ESP_LOGW(TAG, "read_array: buffer underflow requested %d bytes only %d bytes available...", length, available);
412
+ ESP_LOGW(TAG, "read_array: buffer underflow requested %d bytes only %d bytes available", length, available);
411
413
  length = available;
412
414
  status = false;
413
415
  }
@@ -422,7 +424,7 @@ bool WeikaiChannel::read_array(uint8_t *buffer, size_t length) {
422
424
 
423
425
  void WeikaiChannel::write_array(const uint8_t *buffer, size_t length) {
424
426
  if (length > XFER_MAX_SIZE) {
425
- ESP_LOGE(TAG, "Write_array: invalid call - requested %d bytes but max size %d ...", length, XFER_MAX_SIZE);
427
+ ESP_LOGE(TAG, "Write_array: invalid call - requested %d bytes but max size %d", length, XFER_MAX_SIZE);
426
428
  length = XFER_MAX_SIZE;
427
429
  }
428
430
  this->reg(0).write_fifo(const_cast<uint8_t *>(buffer), length);
@@ -432,7 +434,7 @@ void WeikaiChannel::flush() {
432
434
  uint32_t const start_time = millis();
433
435
  while (this->tx_fifo_is_not_empty_()) { // wait until buffer empty
434
436
  if (millis() - start_time > 200) {
435
- ESP_LOGW(TAG, "WARNING flush timeout - still %d bytes not sent after 200 ms...", this->tx_in_fifo_());
437
+ ESP_LOGW(TAG, "WARNING flush timeout - still %d bytes not sent after 200 ms", this->tx_in_fifo_());
436
438
  return;
437
439
  }
438
440
  yield(); // reschedule our thread to avoid blocking
@@ -509,7 +511,7 @@ void WeikaiChannel::uart_send_test_(char *message) {
509
511
  this->flush();
510
512
  to_send -= XFER_MAX_SIZE;
511
513
  }
512
- ESP_LOGV(TAG, "%s => sent %d bytes - exec time %d µs ...", message, RING_BUFFER_SIZE, micros() - start_exec);
514
+ ESP_LOGV(TAG, "%s => sent %d bytes - exec time %d µs", message, RING_BUFFER_SIZE, micros() - start_exec);
513
515
  }
514
516
 
515
517
  /// @brief test read_array method
@@ -526,7 +528,7 @@ bool WeikaiChannel::uart_receive_test_(char *message) {
526
528
  while (XFER_MAX_SIZE > this->available()) {
527
529
  this->xfer_fifo_to_buffer_();
528
530
  if (millis() - start_time > 1500) {
529
- ESP_LOGE(TAG, "uart_receive_test_() timeout: only %d bytes received...", this->available());
531
+ ESP_LOGE(TAG, "uart_receive_test_() timeout: only %d bytes received", this->available());
530
532
  break;
531
533
  }
532
534
  yield(); // reschedule our thread to avoid blocking
@@ -538,20 +540,20 @@ bool WeikaiChannel::uart_receive_test_(char *message) {
538
540
  uint8_t peek_value = 0;
539
541
  this->peek_byte(&peek_value);
540
542
  if (peek_value != 0) {
541
- ESP_LOGE(TAG, "Peek first byte value error...");
543
+ ESP_LOGE(TAG, "Peek first byte value error");
542
544
  status = false;
543
545
  }
544
546
 
545
547
  for (size_t i = 0; i < RING_BUFFER_SIZE; i++) {
546
548
  if (buffer[i] != i % XFER_MAX_SIZE) {
547
- ESP_LOGE(TAG, "Read buffer contains error...b=%x i=%x", buffer[i], i % XFER_MAX_SIZE);
549
+ ESP_LOGE(TAG, "Read buffer contains error b=%x i=%x", buffer[i], i % XFER_MAX_SIZE);
548
550
  print_buffer(buffer);
549
551
  status = false;
550
552
  break;
551
553
  }
552
554
  }
553
555
 
554
- ESP_LOGV(TAG, "%s => received %d bytes status %s - exec time %d µs ...", message, received, status ? "OK" : "ERROR",
556
+ ESP_LOGV(TAG, "%s => received %d bytes status %s - exec time %d µs", message, received, status ? "OK" : "ERROR",
555
557
  micros() - start_exec);
556
558
  return status;
557
559
  }
@@ -96,7 +96,7 @@ void WeikaiRegisterI2C::read_fifo(uint8_t *data, size_t length) const {
96
96
  #endif
97
97
  } else { // error
98
98
  this->comp_->status_set_warning();
99
- ESP_LOGE(TAG, "WeikaiRegisterI2C::read_fifo() @%02X reg=N/A ch=%d I2C_code:%d len=%d buf=%02X...", address,
99
+ ESP_LOGE(TAG, "WeikaiRegisterI2C::read_fifo() @%02X reg=N/A ch=%d I2C_code:%d len=%d buf=%02X", address,
100
100
  this->channel_, (int) error, length, data[0]);
101
101
  }
102
102
  }
@@ -131,8 +131,8 @@ void WeikaiRegisterI2C::write_fifo(uint8_t *data, size_t length) {
131
131
  #endif
132
132
  } else { // error
133
133
  this->comp_->status_set_warning();
134
- ESP_LOGE(TAG, "WK2168Reg::write_fifo() @%02X reg=N/A, ch=%d I2C_code:%d len=%d, buf=%02X...", address,
135
- this->channel_, (int) error, length, data[0]);
134
+ ESP_LOGE(TAG, "WK2168Reg::write_fifo() @%02X reg=N/A, ch=%d I2C_code:%d len=%d, buf=%02X", address, this->channel_,
135
+ (int) error, length, data[0]);
136
136
  }
137
137
  }
138
138
 
@@ -142,7 +142,7 @@ void WeikaiRegisterI2C::write_fifo(uint8_t *data, size_t length) {
142
142
  void WeikaiComponentI2C::setup() {
143
143
  // before any manipulation we store the address to base_address_ for future use
144
144
  this->base_address_ = this->address_;
145
- ESP_LOGCONFIG(TAG, "Setting up wk2168_i2c: %s with %d UARTs at @%02X ...", this->get_name(), this->children_.size(),
145
+ ESP_LOGCONFIG(TAG, "Running setup for '%s' with %d UARTs at @%02X", this->get_name(), this->children_.size(),
146
146
  this->base_address_);
147
147
 
148
148
  // enable all channels
@@ -160,11 +160,16 @@ void WeikaiComponentI2C::setup() {
160
160
  }
161
161
 
162
162
  void WeikaiComponentI2C::dump_config() {
163
- ESP_LOGCONFIG(TAG, "Initialization of %s with %d UARTs completed", this->get_name(), this->children_.size());
164
- ESP_LOGCONFIG(TAG, " Crystal: %" PRIu32, this->crystal_);
165
- if (test_mode_)
166
- ESP_LOGCONFIG(TAG, " Test mode: %d", test_mode_);
167
- ESP_LOGCONFIG(TAG, " Transfer buffer size: %d", XFER_MAX_SIZE);
163
+ ESP_LOGCONFIG(TAG,
164
+ "Initialization of %s with %d UARTs completed\n"
165
+ " Crystal: %" PRIu32,
166
+ this->get_name(), this->children_.size(), this->crystal_);
167
+ if (test_mode_) {
168
+ ESP_LOGCONFIG(TAG,
169
+ " Test mode: %d\n"
170
+ " Transfer buffer size: %d",
171
+ test_mode_, XFER_MAX_SIZE);
172
+ }
168
173
  this->address_ = this->base_address_; // we restore the base_address before display (less confusing)
169
174
  LOG_I2C_DEVICE(this);
170
175
 
@@ -156,7 +156,7 @@ void WeikaiRegisterSPI::write_fifo(uint8_t *data, size_t length) {
156
156
  ///////////////////////////////////////////////////////////////////////////////
157
157
  void WeikaiComponentSPI::setup() {
158
158
  using namespace weikai;
159
- ESP_LOGCONFIG(TAG, "Setting up wk2168_spi: %s with %d UARTs...", this->get_name(), this->children_.size());
159
+ ESP_LOGCONFIG(TAG, "Running setup for '%s' with %d UARTs", this->get_name(), this->children_.size());
160
160
  this->spi_setup();
161
161
  // enable all channels
162
162
  this->reg(WKREG_GENA, 0) = GENA_C1EN | GENA_C2EN | GENA_C3EN | GENA_C4EN;
@@ -173,11 +173,16 @@ void WeikaiComponentSPI::setup() {
173
173
  }
174
174
 
175
175
  void WeikaiComponentSPI::dump_config() {
176
- ESP_LOGCONFIG(TAG, "Initialization of %s with %d UARTs completed", this->get_name(), this->children_.size());
177
- ESP_LOGCONFIG(TAG, " Crystal: %" PRIu32 "", this->crystal_);
178
- if (test_mode_)
179
- ESP_LOGCONFIG(TAG, " Test mode: %d", test_mode_);
180
- ESP_LOGCONFIG(TAG, " Transfer buffer size: %d", XFER_MAX_SIZE);
176
+ ESP_LOGCONFIG(TAG,
177
+ "Initialization of %s with %d UARTs completed\n"
178
+ " Crystal: %" PRIu32,
179
+ this->get_name(), this->children_.size(), this->crystal_);
180
+ if (test_mode_) {
181
+ ESP_LOGCONFIG(TAG,
182
+ " Test mode: %d\n"
183
+ " Transfer buffer size: %d",
184
+ test_mode_, XFER_MAX_SIZE);
185
+ }
181
186
  LOG_PIN(" CS Pin: ", this->cs_);
182
187
 
183
188
  for (auto *child : this->children_) {
@@ -1,6 +1,6 @@
1
1
  #include "wiegand.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  namespace esphome {
6
6
  namespace wiegand {
@@ -45,7 +45,7 @@ static const char *const TAG = "wifi";
45
45
  float WiFiComponent::get_setup_priority() const { return setup_priority::WIFI; }
46
46
 
47
47
  void WiFiComponent::setup() {
48
- ESP_LOGCONFIG(TAG, "Setting up WiFi...");
48
+ ESP_LOGCONFIG(TAG, "Running setup");
49
49
  this->wifi_pre_setup_();
50
50
  if (this->enable_on_boot_) {
51
51
  this->start();
@@ -58,8 +58,10 @@ void WiFiComponent::setup() {
58
58
  }
59
59
 
60
60
  void WiFiComponent::start() {
61
- ESP_LOGCONFIG(TAG, "Starting WiFi...");
62
- ESP_LOGCONFIG(TAG, " Local MAC: %s", get_mac_address_pretty().c_str());
61
+ ESP_LOGCONFIG(TAG,
62
+ "Starting\n"
63
+ " Local MAC: %s",
64
+ get_mac_address_pretty().c_str());
63
65
  this->last_connected_ = millis();
64
66
 
65
67
  uint32_t hash = this->has_sta() ? fnv1_hash(App.get_compilation_time()) : 88491487UL;
@@ -71,7 +73,7 @@ void WiFiComponent::start() {
71
73
 
72
74
  SavedWifiSettings save{};
73
75
  if (this->pref_.load(&save)) {
74
- ESP_LOGD(TAG, "Loaded saved wifi settings: %s", save.ssid);
76
+ ESP_LOGD(TAG, "Loaded saved settings: %s", save.ssid);
75
77
 
76
78
  WiFiAP sta{};
77
79
  sta.set_ssid(save.ssid);
@@ -122,7 +124,7 @@ void WiFiComponent::start() {
122
124
 
123
125
  void WiFiComponent::loop() {
124
126
  this->wifi_loop_();
125
- const uint32_t now = millis();
127
+ const uint32_t now = App.get_loop_component_start_time();
126
128
 
127
129
  if (this->has_sta()) {
128
130
  if (this->is_connected() != this->handled_connected_state_) {
@@ -160,7 +162,7 @@ void WiFiComponent::loop() {
160
162
 
161
163
  case WIFI_COMPONENT_STATE_STA_CONNECTED: {
162
164
  if (!this->is_connected()) {
163
- ESP_LOGW(TAG, "WiFi Connection lost... Reconnecting...");
165
+ ESP_LOGW(TAG, "Connection lost; reconnecting");
164
166
  this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTING;
165
167
  this->retry_connect();
166
168
  } else {
@@ -201,7 +203,7 @@ void WiFiComponent::loop() {
201
203
 
202
204
  if (!this->has_ap() && this->reboot_timeout_ != 0) {
203
205
  if (now - this->last_connected_ > this->reboot_timeout_) {
204
- ESP_LOGE(TAG, "Can't connect to WiFi, rebooting...");
206
+ ESP_LOGE(TAG, "Can't connect; rebooting");
205
207
  App.reboot();
206
208
  }
207
209
  }
@@ -260,15 +262,19 @@ void WiFiComponent::setup_ap_config_() {
260
262
  this->ap_.set_ssid(name);
261
263
  }
262
264
 
263
- ESP_LOGCONFIG(TAG, "Setting up AP...");
265
+ ESP_LOGCONFIG(TAG, "Setting up AP");
264
266
 
265
- ESP_LOGCONFIG(TAG, " AP SSID: '%s'", this->ap_.get_ssid().c_str());
266
- ESP_LOGCONFIG(TAG, " AP Password: '%s'", this->ap_.get_password().c_str());
267
+ ESP_LOGCONFIG(TAG,
268
+ " AP SSID: '%s'\n"
269
+ " AP Password: '%s'",
270
+ this->ap_.get_ssid().c_str(), this->ap_.get_password().c_str());
267
271
  if (this->ap_.get_manual_ip().has_value()) {
268
272
  auto manual = *this->ap_.get_manual_ip();
269
- ESP_LOGCONFIG(TAG, " AP Static IP: '%s'", manual.static_ip.str().c_str());
270
- ESP_LOGCONFIG(TAG, " AP Gateway: '%s'", manual.gateway.str().c_str());
271
- ESP_LOGCONFIG(TAG, " AP Subnet: '%s'", manual.subnet.str().c_str());
273
+ ESP_LOGCONFIG(TAG,
274
+ " AP Static IP: '%s'\n"
275
+ " AP Gateway: '%s'\n"
276
+ " AP Subnet: '%s'",
277
+ manual.static_ip.str().c_str(), manual.gateway.str().c_str(), manual.subnet.str().c_str());
272
278
  }
273
279
 
274
280
  this->ap_setup_ = this->wifi_start_ap_(this->ap_);
@@ -310,7 +316,7 @@ void WiFiComponent::save_wifi_sta(const std::string &ssid, const std::string &pa
310
316
  }
311
317
 
312
318
  void WiFiComponent::start_connecting(const WiFiAP &ap, bool two) {
313
- ESP_LOGI(TAG, "WiFi Connecting to '%s'...", ap.get_ssid().c_str());
319
+ ESP_LOGI(TAG, "Connecting to '%s'", ap.get_ssid().c_str());
314
320
  #ifdef ESPHOME_LOG_HAS_VERBOSE
315
321
  ESP_LOGV(TAG, "Connection Params:");
316
322
  ESP_LOGV(TAG, " SSID: '%s'", ap.get_ssid().c_str());
@@ -427,7 +433,7 @@ void WiFiComponent::print_connect_params_() {
427
433
 
428
434
  ESP_LOGCONFIG(TAG, " Local MAC: %s", get_mac_address_pretty().c_str());
429
435
  if (this->is_disabled()) {
430
- ESP_LOGCONFIG(TAG, " WiFi is disabled!");
436
+ ESP_LOGCONFIG(TAG, " Disabled");
431
437
  return;
432
438
  }
433
439
  ESP_LOGCONFIG(TAG, " SSID: " LOG_SECRET("'%s'"), wifi_ssid().c_str());
@@ -436,22 +442,29 @@ void WiFiComponent::print_connect_params_() {
436
442
  ESP_LOGCONFIG(TAG, " IP Address: %s", ip.str().c_str());
437
443
  }
438
444
  }
439
- ESP_LOGCONFIG(TAG, " BSSID: " LOG_SECRET("%02X:%02X:%02X:%02X:%02X:%02X"), bssid[0], bssid[1], bssid[2], bssid[3],
440
- bssid[4], bssid[5]);
441
- ESP_LOGCONFIG(TAG, " Hostname: '%s'", App.get_name().c_str());
442
445
  int8_t rssi = wifi_rssi();
443
- ESP_LOGCONFIG(TAG, " Signal strength: %d dB %s", rssi, LOG_STR_ARG(get_signal_bars(rssi)));
446
+ ESP_LOGCONFIG(TAG,
447
+ " BSSID: " LOG_SECRET("%02X:%02X:%02X:%02X:%02X:%02X") "\n"
448
+ " Hostname: '%s'\n"
449
+ " Signal strength: %d dB %s",
450
+ bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], App.get_name().c_str(), rssi,
451
+ LOG_STR_ARG(get_signal_bars(rssi)));
444
452
  if (this->selected_ap_.get_bssid().has_value()) {
445
453
  ESP_LOGV(TAG, " Priority: %.1f", this->get_sta_priority(*this->selected_ap_.get_bssid()));
446
454
  }
447
- ESP_LOGCONFIG(TAG, " Channel: %" PRId32, get_wifi_channel());
448
- ESP_LOGCONFIG(TAG, " Subnet: %s", wifi_subnet_mask_().str().c_str());
449
- ESP_LOGCONFIG(TAG, " Gateway: %s", wifi_gateway_ip_().str().c_str());
450
- ESP_LOGCONFIG(TAG, " DNS1: %s", wifi_dns_ip_(0).str().c_str());
451
- ESP_LOGCONFIG(TAG, " DNS2: %s", wifi_dns_ip_(1).str().c_str());
455
+ ESP_LOGCONFIG(TAG,
456
+ " Channel: %" PRId32 "\n"
457
+ " Subnet: %s\n"
458
+ " Gateway: %s\n"
459
+ " DNS1: %s\n"
460
+ " DNS2: %s",
461
+ get_wifi_channel(), wifi_subnet_mask_().str().c_str(), wifi_gateway_ip_().str().c_str(),
462
+ wifi_dns_ip_(0).str().c_str(), wifi_dns_ip_(1).str().c_str());
452
463
  #ifdef USE_WIFI_11KV_SUPPORT
453
- ESP_LOGCONFIG(TAG, " BTM: %s", this->btm_ ? "enabled" : "disabled");
454
- ESP_LOGCONFIG(TAG, " RRM: %s", this->rrm_ ? "enabled" : "disabled");
464
+ ESP_LOGCONFIG(TAG,
465
+ " BTM: %s\n"
466
+ " RRM: %s",
467
+ this->btm_ ? "enabled" : "disabled", this->rrm_ ? "enabled" : "disabled");
455
468
  #endif
456
469
  }
457
470
 
@@ -459,7 +472,7 @@ void WiFiComponent::enable() {
459
472
  if (this->state_ != WIFI_COMPONENT_STATE_DISABLED)
460
473
  return;
461
474
 
462
- ESP_LOGD(TAG, "Enabling WIFI...");
475
+ ESP_LOGD(TAG, "Enabling");
463
476
  this->error_from_callback_ = false;
464
477
  this->state_ = WIFI_COMPONENT_STATE_OFF;
465
478
  this->start();
@@ -469,7 +482,7 @@ void WiFiComponent::disable() {
469
482
  if (this->state_ == WIFI_COMPONENT_STATE_DISABLED)
470
483
  return;
471
484
 
472
- ESP_LOGD(TAG, "Disabling WIFI...");
485
+ ESP_LOGD(TAG, "Disabling");
473
486
  this->state_ = WIFI_COMPONENT_STATE_DISABLED;
474
487
  this->wifi_disconnect_();
475
488
  this->wifi_mode_(false, false);
@@ -479,7 +492,7 @@ bool WiFiComponent::is_disabled() { return this->state_ == WIFI_COMPONENT_STATE_
479
492
 
480
493
  void WiFiComponent::start_scanning() {
481
494
  this->action_started_ = millis();
482
- ESP_LOGD(TAG, "Starting scan...");
495
+ ESP_LOGD(TAG, "Starting scan");
483
496
  this->wifi_scan_start_(this->passive_scan_);
484
497
  this->state_ = WIFI_COMPONENT_STATE_STA_SCANNING;
485
498
  }
@@ -614,7 +627,7 @@ void WiFiComponent::check_connecting_finished() {
614
627
  // We won't retry hidden networks unless a reconnect fails more than three times again
615
628
  this->retry_hidden_ = false;
616
629
 
617
- ESP_LOGI(TAG, "WiFi Connected!");
630
+ ESP_LOGI(TAG, "Connected");
618
631
  this->print_connect_params_();
619
632
 
620
633
  if (this->has_ap()) {
@@ -623,7 +636,7 @@ void WiFiComponent::check_connecting_finished() {
623
636
  captive_portal::global_captive_portal->end();
624
637
  }
625
638
  #endif
626
- ESP_LOGD(TAG, "Disabling AP...");
639
+ ESP_LOGD(TAG, "Disabling AP");
627
640
  this->wifi_mode_({}, false);
628
641
  }
629
642
  #ifdef USE_IMPROV
@@ -644,7 +657,7 @@ void WiFiComponent::check_connecting_finished() {
644
657
 
645
658
  uint32_t now = millis();
646
659
  if (now - this->action_started_ > 30000) {
647
- ESP_LOGW(TAG, "Timeout while connecting to WiFi.");
660
+ ESP_LOGW(TAG, "Connection timeout");
648
661
  this->retry_connect();
649
662
  return;
650
663
  }
@@ -660,18 +673,18 @@ void WiFiComponent::check_connecting_finished() {
660
673
  }
661
674
 
662
675
  if (status == WiFiSTAConnectStatus::ERROR_NETWORK_NOT_FOUND) {
663
- ESP_LOGW(TAG, "WiFi network can not be found anymore.");
676
+ ESP_LOGW(TAG, "Network no longer found");
664
677
  this->retry_connect();
665
678
  return;
666
679
  }
667
680
 
668
681
  if (status == WiFiSTAConnectStatus::ERROR_CONNECT_FAILED) {
669
- ESP_LOGW(TAG, "Connecting to WiFi network failed. Are the credentials wrong?");
682
+ ESP_LOGW(TAG, "Connection failed. Check credentials");
670
683
  this->retry_connect();
671
684
  return;
672
685
  }
673
686
 
674
- ESP_LOGW(TAG, "WiFi Unknown connection status %d", (int) status);
687
+ ESP_LOGW(TAG, "Unknown connection status %d", (int) status);
675
688
  this->retry_connect();
676
689
  }
677
690
 
@@ -687,14 +700,14 @@ void WiFiComponent::retry_connect() {
687
700
  (this->num_retried_ > 3 || this->error_from_callback_)) {
688
701
  if (this->num_retried_ > 5) {
689
702
  // If retry failed for more than 5 times, let's restart STA
690
- ESP_LOGW(TAG, "Restarting WiFi adapter...");
703
+ ESP_LOGW(TAG, "Restarting WiFi adapter");
691
704
  this->wifi_mode_(false, {});
692
705
  delay(100); // NOLINT
693
706
  this->num_retried_ = 0;
694
707
  this->retry_hidden_ = false;
695
708
  } else {
696
709
  // Try hidden networks after 3 failed retries
697
- ESP_LOGD(TAG, "Retrying with hidden networks...");
710
+ ESP_LOGD(TAG, "Retrying with hidden networks");
698
711
  this->retry_hidden_ = true;
699
712
  this->num_retried_++;
700
713
  }
@@ -483,14 +483,16 @@ template<typename... Ts> class WiFiConfigureAction : public Action<Ts...>, publi
483
483
  // Enable WiFi
484
484
  global_wifi_component->enable();
485
485
  // Set timeout for the connection
486
- this->set_timeout("wifi-connect-timeout", this->connection_timeout_.value(x...), [this]() {
487
- this->connecting_ = false;
486
+ this->set_timeout("wifi-connect-timeout", this->connection_timeout_.value(x...), [this, x...]() {
488
487
  // If the timeout is reached, stop connecting and revert to the old AP
489
488
  global_wifi_component->disable();
490
489
  global_wifi_component->save_wifi_sta(old_sta_.get_ssid(), old_sta_.get_password());
491
490
  global_wifi_component->enable();
492
- // Callback to notify the user that the connection failed
493
- this->error_trigger_->trigger();
491
+ // Start a timeout for the fallback if the connection to the old AP fails
492
+ this->set_timeout("wifi-fallback-timeout", this->connection_timeout_.value(x...), [this]() {
493
+ this->connecting_ = false;
494
+ this->error_trigger_->trigger();
495
+ });
494
496
  });
495
497
  }
496
498
 
@@ -503,6 +505,7 @@ template<typename... Ts> class WiFiConfigureAction : public Action<Ts...>, publi
503
505
  if (global_wifi_component->is_connected()) {
504
506
  // The WiFi is connected, stop the timeout and reset the connecting flag
505
507
  this->cancel_timeout("wifi-connect-timeout");
508
+ this->cancel_timeout("wifi-fallback-timeout");
506
509
  this->connecting_ = false;
507
510
  if (global_wifi_component->wifi_ssid() == this->new_sta_.get_ssid()) {
508
511
  // Callback to notify the user that the connection was successful
@@ -91,7 +91,7 @@ bool WiFiComponent::wifi_mode_(optional<bool> sta, optional<bool> ap) {
91
91
  bool ret = WiFiClass::mode(set_mode);
92
92
 
93
93
  if (!ret) {
94
- ESP_LOGW(TAG, "Setting WiFi mode failed!");
94
+ ESP_LOGW(TAG, "Setting mode failed");
95
95
  return false;
96
96
  }
97
97
 
@@ -590,7 +590,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
590
590
  // Mitigate CVE-2020-12638
591
591
  // https://lbsfilm.at/blog/wpa2-authenticationmode-downgrade-in-espressif-microprocessors
592
592
  if (it.old_mode != WIFI_AUTH_OPEN && it.new_mode == WIFI_AUTH_OPEN) {
593
- ESP_LOGW(TAG, "Potential Authmode downgrade detected, disconnecting...");
593
+ ESP_LOGW(TAG, "Potential Authmode downgrade detected, disconnecting");
594
594
  // we can't call retry_connect() from this context, so disconnect immediately
595
595
  // and notify main thread with error_from_callback_
596
596
  err_t err = esp_wifi_disconnect();
@@ -32,11 +32,11 @@ extern "C" {
32
32
  #endif
33
33
  }
34
34
 
35
+ #include "esphome/core/application.h"
36
+ #include "esphome/core/hal.h"
35
37
  #include "esphome/core/helpers.h"
36
38
  #include "esphome/core/log.h"
37
- #include "esphome/core/hal.h"
38
39
  #include "esphome/core/util.h"
39
- #include "esphome/core/application.h"
40
40
 
41
41
  namespace esphome {
42
42
  namespace wifi {
@@ -525,7 +525,7 @@ void WiFiComponent::wifi_event_callback(System_Event_t *event) {
525
525
  // Mitigate CVE-2020-12638
526
526
  // https://lbsfilm.at/blog/wpa2-authenticationmode-downgrade-in-espressif-microprocessors
527
527
  if (it.old_mode != AUTH_OPEN && it.new_mode == AUTH_OPEN) {
528
- ESP_LOGW(TAG, "Potential Authmode downgrade detected, disconnecting...");
528
+ ESP_LOGW(TAG, "Potential Authmode downgrade detected, disconnecting");
529
529
  // we can't call retry_connect() from this context, so disconnect immediately
530
530
  // and notify main thread with error_from_callback_
531
531
  wifi_station_disconnect();
@@ -9,10 +9,10 @@
9
9
  #include "lwip/err.h"
10
10
  #include "lwip/dns.h"
11
11
 
12
+ #include "esphome/core/application.h"
13
+ #include "esphome/core/hal.h"
12
14
  #include "esphome/core/helpers.h"
13
15
  #include "esphome/core/log.h"
14
- #include "esphome/core/hal.h"
15
- #include "esphome/core/application.h"
16
16
  #include "esphome/core/util.h"
17
17
 
18
18
  namespace esphome {
@@ -50,7 +50,7 @@ bool WiFiComponent::wifi_mode_(optional<bool> sta, optional<bool> ap) {
50
50
  bool ret = WiFi.mode(static_cast<wifi_mode_t>(mode));
51
51
 
52
52
  if (!ret) {
53
- ESP_LOGW(TAG, "Setting WiFi mode failed!");
53
+ ESP_LOGW(TAG, "Setting mode failed");
54
54
  }
55
55
 
56
56
  return ret;
@@ -315,7 +315,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
315
315
  // Mitigate CVE-2020-12638
316
316
  // https://lbsfilm.at/blog/wpa2-authenticationmode-downgrade-in-espressif-microprocessors
317
317
  if (it.old_mode != WIFI_AUTH_OPEN && it.new_mode == WIFI_AUTH_OPEN) {
318
- ESP_LOGW(TAG, "Potential Authmode downgrade detected, disconnecting...");
318
+ ESP_LOGW(TAG, "Potential Authmode downgrade detected, disconnecting");
319
319
  // we can't call retry_connect() from this context, so disconnect immediately
320
320
  // and notify main thread with error_from_callback_
321
321
  WiFi.disconnect();