esphome 2025.5.1__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 (753) 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 -5
  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/gpio.cpp +10 -1
  191. esphome/components/esp8266/preferences.cpp +6 -6
  192. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  193. esphome/components/esp_ldo/__init__.py +91 -0
  194. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  195. esphome/components/esp_ldo/esp_ldo.h +43 -0
  196. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  197. esphome/components/ethernet/ethernet_component.cpp +38 -26
  198. esphome/components/ethernet/ethernet_component.h +1 -1
  199. esphome/components/event/__init__.py +1 -0
  200. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  201. esphome/components/ezo/ezo.cpp +1 -1
  202. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  203. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  204. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  205. esphome/components/fan/__init__.py +1 -0
  206. esphome/components/fan/fan.cpp +30 -19
  207. esphome/components/fastled_base/fastled_light.cpp +7 -5
  208. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  209. esphome/components/fs3000/fs3000.cpp +1 -1
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  211. esphome/components/ft63x6/ft63x6.cpp +5 -3
  212. esphome/components/gcja5/gcja5.cpp +0 -12
  213. esphome/components/gcja5/gcja5.h +8 -3
  214. esphome/components/gdk101/gdk101.cpp +2 -2
  215. esphome/components/globals/globals_component.h +13 -10
  216. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  217. esphome/components/gp8403/gp8403.cpp +4 -2
  218. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  219. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  220. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  221. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  222. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  226. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  228. esphome/components/haier/haier_base.cpp +2 -2
  229. esphome/components/haier/hon_climate.cpp +13 -6
  230. esphome/components/havells_solar/havells_solar.cpp +5 -2
  231. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  232. esphome/components/hdc1080/hdc1080.cpp +2 -2
  233. esphome/components/he60r/he60r.cpp +4 -2
  234. esphome/components/hlw8012/hlw8012.cpp +6 -4
  235. esphome/components/hm3301/hm3301.cpp +2 -2
  236. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  237. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  238. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  239. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  240. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  241. esphome/components/hte501/hte501.cpp +3 -2
  242. esphome/components/http_request/__init__.py +2 -2
  243. esphome/components/http_request/http_request.cpp +7 -5
  244. esphome/components/http_request/http_request_idf.cpp +4 -2
  245. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  246. esphome/components/htu21d/htu21d.cpp +2 -2
  247. esphome/components/htu31d/htu31d.cpp +2 -2
  248. esphome/components/hx711/hx711.cpp +2 -2
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  250. esphome/components/hyt271/hyt271.cpp +2 -2
  251. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  253. esphome/components/i2s_audio/__init__.py +2 -0
  254. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  255. esphome/components/i2s_audio/i2s_audio.h +1 -1
  256. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  262. esphome/components/iaqcore/iaqcore.cpp +3 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  264. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  265. esphome/components/image/image.cpp +1 -0
  266. esphome/components/ina219/ina219.cpp +2 -2
  267. esphome/components/ina226/ina226.cpp +8 -5
  268. esphome/components/ina260/ina260.cpp +1 -1
  269. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  270. esphome/components/ina3221/ina3221.cpp +2 -2
  271. esphome/components/inkplate6/display.py +12 -2
  272. esphome/components/inkplate6/inkplate.cpp +13 -9
  273. esphome/components/inkplate6/inkplate.h +7 -6
  274. esphome/components/integration/integration_sensor.cpp +1 -1
  275. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  276. esphome/components/json/json_util.cpp +4 -5
  277. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  278. esphome/components/key_collector/key_collector.cpp +4 -2
  279. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  280. esphome/components/kuntze/kuntze.cpp +4 -2
  281. esphome/components/lc709203f/__init__.py +1 -0
  282. esphome/components/lc709203f/lc709203f.cpp +299 -0
  283. esphome/components/lc709203f/lc709203f.h +55 -0
  284. esphome/components/lc709203f/sensor.py +93 -0
  285. esphome/components/lcd_base/lcd_display.cpp +2 -2
  286. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  287. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  288. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  289. esphome/components/ld2410/ld2410.cpp +6 -7
  290. esphome/components/ld2420/ld2420.cpp +9 -7
  291. esphome/components/ld2450/ld2450.cpp +6 -4
  292. esphome/components/ld2450/sensor.py +2 -2
  293. esphome/components/ledc/ledc_output.cpp +32 -28
  294. esphome/components/libretiny/const.py +1 -1
  295. esphome/components/libretiny/preferences.cpp +6 -7
  296. esphome/components/light/__init__.py +2 -1
  297. esphome/components/light/esp_hsv_color.h +1 -1
  298. esphome/components/light/light_state.cpp +9 -5
  299. esphome/components/light/light_state.h +15 -15
  300. esphome/components/light/light_transformer.h +1 -1
  301. esphome/components/lightwaverf/LwTx.cpp +1 -1
  302. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  303. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  304. esphome/components/lock/__init__.py +1 -0
  305. esphome/components/lock/lock.h +1 -1
  306. esphome/components/logger/__init__.py +6 -0
  307. esphome/components/logger/logger.cpp +11 -20
  308. esphome/components/logger/logger.h +5 -6
  309. esphome/components/logger/logger_esp32.cpp +5 -5
  310. esphome/components/ltr390/ltr390.cpp +8 -5
  311. esphome/components/ltr501/ltr501.cpp +19 -14
  312. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  313. esphome/components/lvgl/__init__.py +2 -2
  314. esphome/components/lvgl/automation.py +5 -4
  315. esphome/components/lvgl/defines.py +0 -2
  316. esphome/components/lvgl/lv_validation.py +1 -3
  317. esphome/components/lvgl/lvcode.py +7 -8
  318. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  319. esphome/components/lvgl/schemas.py +22 -23
  320. esphome/components/lvgl/trigger.py +8 -3
  321. esphome/components/lvgl/widgets/__init__.py +2 -2
  322. esphome/components/lvgl/widgets/canvas.py +9 -3
  323. esphome/components/lvgl/widgets/line.py +2 -1
  324. esphome/components/lvgl/widgets/tabview.py +7 -0
  325. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  326. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  327. esphome/components/max17043/max17043.cpp +2 -2
  328. esphome/components/max31855/max31855.cpp +2 -1
  329. esphome/components/max31856/max31856.cpp +9 -11
  330. esphome/components/max31865/max31865.cpp +6 -4
  331. esphome/components/max44009/max44009.cpp +2 -2
  332. esphome/components/max6675/max6675.cpp +1 -1
  333. esphome/components/max6956/max6956.cpp +5 -3
  334. esphome/components/max7219/max7219.cpp +8 -6
  335. esphome/components/max7219digit/automation.h +52 -0
  336. esphome/components/max7219digit/display.py +93 -1
  337. esphome/components/max7219digit/max7219digit.cpp +16 -13
  338. esphome/components/max9611/max9611.cpp +9 -6
  339. esphome/components/mcp23008/mcp23008.cpp +1 -1
  340. esphome/components/mcp23016/mcp23016.cpp +1 -1
  341. esphome/components/mcp23017/mcp23017.cpp +1 -1
  342. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  343. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  344. esphome/components/mcp3008/mcp3008.cpp +1 -1
  345. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  346. esphome/components/mcp3204/mcp3204.cpp +1 -1
  347. esphome/components/mcp4461/mcp4461.cpp +2 -2
  348. esphome/components/mcp4725/mcp4725.cpp +2 -2
  349. esphome/components/mcp4728/mcp4728.cpp +2 -2
  350. esphome/components/mcp9600/mcp9600.cpp +1 -1
  351. esphome/components/mcp9808/mcp9808.cpp +4 -4
  352. esphome/components/mdns/mdns_component.cpp +8 -2
  353. esphome/components/mdns/mdns_component.h +3 -1
  354. esphome/components/mdns/mdns_esp32.cpp +2 -2
  355. esphome/components/media_player/__init__.py +1 -0
  356. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  357. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  358. esphome/components/micronova/micronova.h +2 -2
  359. esphome/components/mics_4514/mics_4514.cpp +2 -2
  360. esphome/components/midea/air_conditioner.cpp +7 -5
  361. esphome/components/midea_ir/midea_ir.cpp +1 -1
  362. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  363. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  364. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  365. esphome/components/mlx90614/mlx90614.cpp +4 -3
  366. esphome/components/mmc5603/mmc5603.cpp +2 -2
  367. esphome/components/mmc5983/mmc5983.cpp +1 -1
  368. esphome/components/modbus/modbus.cpp +7 -5
  369. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  370. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  371. esphome/components/modbus_controller/switch/__init__.py +6 -2
  372. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  373. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  374. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  375. esphome/components/mpr121/mpr121.cpp +2 -2
  376. esphome/components/mpu6050/mpu6050.cpp +6 -6
  377. esphome/components/mpu6886/mpu6886.cpp +6 -6
  378. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  379. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  380. esphome/components/mqtt/mqtt_client.cpp +31 -24
  381. esphome/components/mqtt/mqtt_component.cpp +3 -3
  382. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  383. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  384. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  385. esphome/components/ms5611/ms5611.cpp +2 -2
  386. esphome/components/ms8607/ms8607.cpp +2 -2
  387. esphome/components/msa3xx/msa3xx.cpp +16 -12
  388. esphome/components/my9231/my9231.cpp +7 -5
  389. esphome/components/nau7802/nau7802.cpp +6 -4
  390. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  391. esphome/components/network/ip_address.h +1 -1
  392. esphome/components/network/util.cpp +13 -0
  393. esphome/components/nextion/base_component.py +2 -0
  394. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  395. esphome/components/nextion/display.py +34 -22
  396. esphome/components/nextion/nextion.cpp +182 -143
  397. esphome/components/nextion/nextion.h +36 -0
  398. esphome/components/nextion/nextion_commands.cpp +3 -3
  399. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  400. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  401. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  402. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  403. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  404. esphome/components/nfc/nci_message.h +1 -1
  405. esphome/components/nfc/ndef_record.h +1 -1
  406. esphome/components/nfc/ndef_record_text.h +1 -1
  407. esphome/components/nfc/ndef_record_uri.h +1 -1
  408. esphome/components/nfc/nfc.h +1 -1
  409. esphome/components/nfc/nfc_tag.h +1 -1
  410. esphome/components/noblex/noblex.cpp +1 -1
  411. esphome/components/npi19/npi19.cpp +5 -7
  412. esphome/components/number/__init__.py +11 -0
  413. esphome/components/number/number.cpp +1 -1
  414. esphome/components/number/number.h +0 -4
  415. esphome/components/online_image/__init__.py +13 -1
  416. esphome/components/online_image/online_image.cpp +26 -4
  417. esphome/components/online_image/online_image.h +21 -4
  418. esphome/components/opentherm/generate.py +3 -3
  419. esphome/components/opentherm/hub.cpp +11 -7
  420. esphome/components/opentherm/number/number.cpp +5 -3
  421. esphome/components/opentherm/opentherm.h +1 -1
  422. esphome/components/opentherm/schema.py +13 -13
  423. esphome/components/opentherm/validate.py +1 -1
  424. esphome/components/openthread/__init__.py +146 -0
  425. esphome/components/openthread/const.py +10 -0
  426. esphome/components/openthread/openthread.cpp +206 -0
  427. esphome/components/openthread/openthread.h +68 -0
  428. esphome/components/openthread/openthread_esp.cpp +164 -0
  429. esphome/components/openthread/tlv.py +58 -0
  430. esphome/components/openthread_info/__init__.py +0 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  432. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  433. esphome/components/openthread_info/text_sensor.py +105 -0
  434. esphome/components/output/float_output.cpp +1 -1
  435. esphome/components/output/switch/output_switch.cpp +1 -1
  436. esphome/components/packet_transport/packet_transport.cpp +6 -4
  437. esphome/components/pca6416a/pca6416a.cpp +2 -2
  438. esphome/components/pca9554/pca9554.cpp +6 -4
  439. esphome/components/pca9685/pca9685_output.cpp +12 -8
  440. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  441. esphome/components/pcf85063/pcf85063.cpp +2 -2
  442. esphome/components/pcf8563/pcf8563.cpp +2 -2
  443. esphome/components/pcf8574/pcf8574.cpp +2 -2
  444. esphome/components/pid/pid_climate.cpp +8 -5
  445. esphome/components/pid/pid_climate.h +1 -1
  446. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  447. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  448. esphome/components/pipsolar/pipsolar.cpp +3 -3
  449. esphome/components/pm1006/pm1006.cpp +3 -7
  450. esphome/components/pm1006/pm1006.h +4 -1
  451. esphome/components/pm2005/pm2005.cpp +12 -13
  452. esphome/components/pm2005/sensor.py +1 -1
  453. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  454. esphome/components/pmsx003/pmsx003.cpp +0 -4
  455. esphome/components/pmsx003/pmsx003.h +5 -2
  456. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  457. esphome/components/pmwcs3/pmwcs3.h +0 -1
  458. esphome/components/pn532/pn532.cpp +7 -7
  459. esphome/components/pn532/pn532.h +1 -1
  460. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  461. esphome/components/pn7150/pn7150.cpp +4 -4
  462. esphome/components/pn7160/pn7160.cpp +4 -4
  463. esphome/components/power_supply/power_supply.cpp +6 -4
  464. esphome/components/power_supply/power_supply.h +1 -1
  465. esphome/components/prometheus/__init__.py +0 -1
  466. esphome/components/psram/__init__.py +59 -35
  467. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  468. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  469. esphome/components/pylontech/pylontech.cpp +2 -2
  470. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  471. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  472. esphome/components/pzemac/pzemac.cpp +4 -2
  473. esphome/components/pzemdc/pzemdc.cpp +4 -2
  474. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.cpp +2 -2
  476. esphome/components/qmp6988/qmp6988.h +1 -1
  477. esphome/components/qr_code/qr_code.cpp +5 -3
  478. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  479. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  480. esphome/components/rc522/rc522.cpp +5 -5
  481. esphome/components/rdm6300/rdm6300.cpp +1 -0
  482. esphome/components/remote_receiver/__init__.py +10 -2
  483. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  484. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  485. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  486. esphome/components/remote_transmitter/__init__.py +10 -2
  487. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  488. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  489. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  490. esphome/components/resistance/resistance_sensor.cpp +6 -3
  491. esphome/components/restart/button/restart_button.cpp +1 -1
  492. esphome/components/restart/switch/restart_switch.cpp +1 -1
  493. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  494. esphome/components/rp2040/__init__.py +7 -0
  495. esphome/components/rp2040/core.cpp +8 -1
  496. esphome/components/rp2040/gpio.cpp +26 -9
  497. esphome/components/rp2040/preferences.cpp +3 -3
  498. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  499. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  500. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  501. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  502. esphome/components/rtttl/rtttl.cpp +11 -9
  503. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  504. esphome/components/safe_mode/safe_mode.cpp +9 -8
  505. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  506. esphome/components/scd30/scd30.cpp +11 -8
  507. esphome/components/scd4x/scd4x.cpp +12 -8
  508. esphome/components/sdl/display.py +40 -0
  509. esphome/components/sdl/sdl_esphome.cpp +2 -2
  510. esphome/components/sdl/sdl_esphome.h +8 -0
  511. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  512. esphome/components/sdp3x/sdp3x.cpp +11 -11
  513. esphome/components/sds011/sds011.cpp +5 -6
  514. esphome/components/sds011/sds011.h +4 -1
  515. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  516. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  517. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  518. esphome/components/selec_meter/selec_meter.cpp +5 -2
  519. esphome/components/select/__init__.py +1 -0
  520. esphome/components/select/select.cpp +1 -1
  521. esphome/components/select/select.h +0 -4
  522. esphome/components/sen0321/sen0321.cpp +2 -2
  523. esphome/components/sen21231/sen21231.cpp +1 -1
  524. esphome/components/sen5x/sen5x.cpp +10 -7
  525. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  526. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  527. esphome/components/sensor/__init__.py +11 -1
  528. esphome/components/sensor/filter.h +1 -1
  529. esphome/components/sensor/sensor.cpp +8 -4
  530. esphome/components/sensor/sensor.h +12 -11
  531. esphome/components/servo/servo.cpp +12 -9
  532. esphome/components/servo/servo.h +1 -1
  533. esphome/components/sfa30/sfa30.cpp +1 -1
  534. esphome/components/sgp30/sgp30.cpp +10 -8
  535. esphome/components/sgp4x/sgp4x.cpp +49 -61
  536. esphome/components/sgp4x/sgp4x.h +0 -1
  537. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  538. esphome/components/sht3xd/sht3xd.cpp +1 -1
  539. esphome/components/sht4x/sht4x.cpp +2 -2
  540. esphome/components/shtcx/shtcx.cpp +13 -16
  541. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  542. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  543. esphome/components/sim800l/sim800l.cpp +2 -2
  544. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  545. esphome/components/sm16716/sm16716.cpp +1 -1
  546. esphome/components/sm2135/sm2135.cpp +1 -1
  547. esphome/components/sm2235/sm2235.cpp +5 -3
  548. esphome/components/sm2335/sm2335.cpp +5 -3
  549. esphome/components/sml/sml.cpp +1 -1
  550. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  551. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  552. esphome/components/sntp/sntp_component.cpp +1 -1
  553. esphome/components/socket/__init__.py +2 -0
  554. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  555. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  556. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  557. esphome/components/socket/socket.cpp +31 -0
  558. esphome/components/socket/socket.h +27 -1
  559. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  560. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  561. esphome/components/sound_level/sound_level.cpp +4 -2
  562. esphome/components/speaker/media_player/__init__.py +3 -0
  563. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  564. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  565. esphome/components/spi/__init__.py +10 -2
  566. esphome/components/spi/spi.cpp +4 -4
  567. esphome/components/spi/spi_arduino.cpp +22 -9
  568. esphome/components/spi_device/spi_device.cpp +1 -2
  569. esphome/components/sprinkler/sprinkler.cpp +9 -6
  570. esphome/components/sps30/sps30.cpp +16 -15
  571. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  572. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  573. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  574. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  575. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  576. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  577. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  578. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  579. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  580. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  581. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  582. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  583. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  584. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  585. esphome/components/st7567_base/st7567_base.cpp +3 -3
  586. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  587. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  588. esphome/components/st7701s/st7701s.cpp +4 -2
  589. esphome/components/st7735/st7735.cpp +3 -3
  590. esphome/components/st7789v/st7789v.cpp +10 -7
  591. esphome/components/st7920/st7920.cpp +6 -4
  592. esphome/components/statsd/statsd.cpp +9 -5
  593. esphome/components/status_led/light/status_led_light.cpp +3 -3
  594. esphome/components/status_led/light/status_led_light.h +1 -1
  595. esphome/components/status_led/status_led.cpp +1 -1
  596. esphome/components/stepper/stepper.h +5 -3
  597. esphome/components/sts3x/sts3x.cpp +2 -2
  598. esphome/components/switch/__init__.py +1 -0
  599. esphome/components/switch/switch.cpp +18 -12
  600. esphome/components/switch/switch.h +14 -8
  601. esphome/components/sx1509/__init__.py +53 -20
  602. esphome/components/sx1509/sx1509.cpp +29 -5
  603. esphome/components/sx1509/sx1509.h +9 -1
  604. esphome/components/t6615/t6615.cpp +1 -0
  605. esphome/components/tc74/tc74.cpp +1 -1
  606. esphome/components/tca9548a/tca9548a.cpp +1 -1
  607. esphome/components/tca9555/tca9555.cpp +2 -2
  608. esphome/components/tcs34725/tcs34725.cpp +4 -4
  609. esphome/components/tee501/tee501.cpp +3 -2
  610. esphome/components/tem3200/tem3200.cpp +5 -6
  611. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  612. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  613. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  614. esphome/components/template/cover/template_cover.cpp +1 -1
  615. esphome/components/template/select/template_select.cpp +6 -4
  616. esphome/components/template/text/template_text.cpp +2 -3
  617. esphome/components/template/valve/template_valve.cpp +5 -3
  618. esphome/components/text/__init__.py +10 -11
  619. esphome/components/text/text.cpp +1 -1
  620. esphome/components/text/text.h +0 -4
  621. esphome/components/text_sensor/__init__.py +1 -0
  622. esphome/components/text_sensor/text_sensor.cpp +8 -4
  623. esphome/components/text_sensor/text_sensor.h +6 -6
  624. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  625. esphome/components/time/__init__.py +1 -2
  626. esphome/components/time_based/time_based_cover.cpp +4 -2
  627. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  628. esphome/components/tm1621/tm1621.cpp +3 -3
  629. esphome/components/tm1637/tm1637.cpp +9 -7
  630. esphome/components/tm1638/tm1638.cpp +7 -5
  631. esphome/components/tm1651/tm1651.cpp +2 -2
  632. esphome/components/tmp102/tmp102.cpp +1 -3
  633. esphome/components/tmp102/tmp102.h +0 -3
  634. esphome/components/tmp1075/tmp1075.cpp +12 -9
  635. esphome/components/tmp117/tmp117.cpp +2 -2
  636. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  637. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  638. esphome/components/tsl2561/tsl2561.cpp +7 -5
  639. esphome/components/tsl2591/tsl2591.cpp +25 -27
  640. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  641. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  642. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  643. esphome/components/tuya/select/tuya_select.cpp +5 -3
  644. esphome/components/tx20/tx20.cpp +3 -3
  645. esphome/components/uart/__init__.py +4 -5
  646. esphome/components/uart/button/uart_button.cpp +1 -1
  647. esphome/components/uart/switch/uart_switch.cpp +2 -2
  648. esphome/components/uart/uart.cpp +2 -2
  649. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  650. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  651. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  652. esphome/components/uart/uart_component_host.cpp +11 -8
  653. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  654. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  655. esphome/components/udp/udp_component.cpp +9 -5
  656. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  657. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  658. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  659. esphome/components/update/__init__.py +1 -0
  660. esphome/components/update/update_entity.cpp +1 -1
  661. esphome/components/update/update_entity.h +0 -3
  662. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  663. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  664. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  665. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  666. esphome/components/usb_host/__init__.py +64 -0
  667. esphome/components/usb_host/usb_host.h +116 -0
  668. esphome/components/usb_host/usb_host_client.cpp +394 -0
  669. esphome/components/usb_host/usb_host_component.cpp +35 -0
  670. esphome/components/usb_uart/__init__.py +134 -0
  671. esphome/components/usb_uart/ch34x.cpp +80 -0
  672. esphome/components/usb_uart/cp210x.cpp +126 -0
  673. esphome/components/usb_uart/usb_uart.cpp +328 -0
  674. esphome/components/usb_uart/usb_uart.h +151 -0
  675. esphome/components/valve/__init__.py +1 -0
  676. esphome/components/veml3235/veml3235.cpp +13 -9
  677. esphome/components/veml7700/veml7700.cpp +10 -6
  678. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  679. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  680. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  681. esphome/components/web_server/server_index_v2.h +632 -630
  682. esphome/components/web_server/server_index_v3.h +411 -409
  683. esphome/components/web_server/web_server.cpp +5 -3
  684. esphome/components/web_server_base/web_server_base.cpp +1 -1
  685. esphome/components/web_server_idf/__init__.py +0 -2
  686. esphome/components/web_server_idf/utils.cpp +1 -1
  687. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  688. esphome/components/web_server_idf/web_server_idf.h +7 -0
  689. esphome/components/weikai/__init__.py +2 -0
  690. esphome/components/weikai/weikai.cpp +24 -22
  691. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  692. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  693. esphome/components/wiegand/wiegand.cpp +1 -1
  694. esphome/components/wifi/wifi_component.cpp +50 -37
  695. esphome/components/wifi/wifi_component.h +7 -4
  696. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  697. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  698. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  699. esphome/components/wireguard/wireguard.cpp +21 -21
  700. esphome/components/wl_134/text_sensor.py +1 -2
  701. esphome/components/wled/wled_light_effect.cpp +1 -1
  702. esphome/components/x9c/x9c.cpp +5 -3
  703. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  704. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  705. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  706. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  707. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  708. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  709. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  710. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  711. esphome/components/xl9535/xl9535.cpp +2 -2
  712. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  713. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  714. esphome/config.py +3 -2
  715. esphome/config_validation.py +46 -17
  716. esphome/const.py +10 -1
  717. esphome/core/__init__.py +37 -18
  718. esphome/core/application.cpp +197 -8
  719. esphome/core/application.h +116 -6
  720. esphome/core/component.cpp +36 -15
  721. esphome/core/component.h +43 -13
  722. esphome/core/config.py +12 -0
  723. esphome/core/defines.h +10 -2
  724. esphome/core/entity_base.cpp +4 -16
  725. esphome/core/entity_base.h +27 -13
  726. esphome/core/hal.h +5 -0
  727. esphome/core/helpers.cpp +1 -1
  728. esphome/core/helpers.h +5 -5
  729. esphome/core/log.h +2 -0
  730. esphome/core/log_const_en.h +4 -0
  731. esphome/core/scheduler.cpp +2 -2
  732. esphome/coroutine.py +3 -4
  733. esphome/cpp_generator.py +32 -32
  734. esphome/dashboard/core.py +2 -2
  735. esphome/dashboard/web_server.py +2 -2
  736. esphome/git.py +4 -4
  737. esphome/helpers.py +5 -6
  738. esphome/loader.py +8 -7
  739. esphome/log.py +7 -1
  740. esphome/platformio_api.py +2 -3
  741. esphome/storage_json.py +13 -5
  742. esphome/types.py +12 -13
  743. esphome/util.py +1 -2
  744. esphome/wizard.py +0 -16
  745. esphome/writer.py +5 -3
  746. esphome/yaml_util.py +6 -1
  747. esphome/zeroconf.py +1 -1
  748. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  749. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
  750. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  751. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  752. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  753. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -30,22 +30,22 @@ static const int32_t DC_OFFSET_MOVING_AVERAGE_COEFFICIENT_DENOMINATOR = 1000;
30
30
  static const char *const TAG = "i2s_audio.microphone";
31
31
 
32
32
  enum MicrophoneEventGroupBits : uint32_t {
33
- COMMAND_STOP = (1 << 0), // stops the microphone task
34
- TASK_STARTING = (1 << 10),
35
- TASK_RUNNING = (1 << 11),
36
- TASK_STOPPING = (1 << 12),
37
- TASK_STOPPED = (1 << 13),
33
+ COMMAND_STOP = (1 << 0), // stops the microphone task, set and cleared by ``loop``
34
+
35
+ TASK_STARTING = (1 << 10), // set by mic task, cleared by ``loop``
36
+ TASK_RUNNING = (1 << 11), // set by mic task, cleared by ``loop``
37
+ TASK_STOPPED = (1 << 13), // set by mic task, cleared by ``loop``
38
38
 
39
39
  ALL_BITS = 0x00FFFFFF, // All valid FreeRTOS event group bits
40
40
  };
41
41
 
42
42
  void I2SAudioMicrophone::setup() {
43
- ESP_LOGCONFIG(TAG, "Setting up I2S Audio Microphone...");
43
+ ESP_LOGCONFIG(TAG, "Running setup");
44
44
  #ifdef USE_I2S_LEGACY
45
45
  #if SOC_I2S_SUPPORTS_ADC
46
46
  if (this->adc_) {
47
47
  if (this->parent_->get_port() != I2S_NUM_0) {
48
- ESP_LOGE(TAG, "Internal ADC only works on I2S0!");
48
+ ESP_LOGE(TAG, "Internal ADC only works on I2S0");
49
49
  this->mark_failed();
50
50
  return;
51
51
  }
@@ -55,7 +55,7 @@ void I2SAudioMicrophone::setup() {
55
55
  {
56
56
  if (this->pdm_) {
57
57
  if (this->parent_->get_port() != I2S_NUM_0) {
58
- ESP_LOGE(TAG, "PDM only works on I2S0!");
58
+ ESP_LOGE(TAG, "PDM only works on I2S0");
59
59
  this->mark_failed();
60
60
  return;
61
61
  }
@@ -64,14 +64,14 @@ void I2SAudioMicrophone::setup() {
64
64
 
65
65
  this->active_listeners_semaphore_ = xSemaphoreCreateCounting(MAX_LISTENERS, MAX_LISTENERS);
66
66
  if (this->active_listeners_semaphore_ == nullptr) {
67
- ESP_LOGE(TAG, "Failed to create semaphore");
67
+ ESP_LOGE(TAG, "Creating semaphore failed");
68
68
  this->mark_failed();
69
69
  return;
70
70
  }
71
71
 
72
72
  this->event_group_ = xEventGroupCreate();
73
73
  if (this->event_group_ == nullptr) {
74
- ESP_LOGE(TAG, "Failed to create event group");
74
+ ESP_LOGE(TAG, "Creating event group failed");
75
75
  this->mark_failed();
76
76
  return;
77
77
  }
@@ -79,6 +79,15 @@ void I2SAudioMicrophone::setup() {
79
79
  this->configure_stream_settings_();
80
80
  }
81
81
 
82
+ void I2SAudioMicrophone::dump_config() {
83
+ ESP_LOGCONFIG(TAG,
84
+ "Microphone:\n"
85
+ " Pin: %d\n"
86
+ " PDM: %s\n"
87
+ " DC offset correction: %s",
88
+ static_cast<int8_t>(this->din_pin_), YESNO(this->pdm_), YESNO(this->correct_dc_offset_));
89
+ }
90
+
82
91
  void I2SAudioMicrophone::configure_stream_settings_() {
83
92
  uint8_t channel_count = 1;
84
93
  #ifdef USE_I2S_LEGACY
@@ -127,6 +136,7 @@ bool I2SAudioMicrophone::start_driver_() {
127
136
  if (!this->parent_->try_lock()) {
128
137
  return false; // Waiting for another i2s to return lock
129
138
  }
139
+ this->locked_driver_ = true;
130
140
  esp_err_t err;
131
141
 
132
142
  #ifdef USE_I2S_LEGACY
@@ -151,24 +161,21 @@ bool I2SAudioMicrophone::start_driver_() {
151
161
  config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN);
152
162
  err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
153
163
  if (err != ESP_OK) {
154
- ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err));
155
- this->status_set_error();
164
+ ESP_LOGE(TAG, "Error installing driver: %s", esp_err_to_name(err));
156
165
  return false;
157
166
  }
158
167
 
159
168
  err = i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_);
160
169
  if (err != ESP_OK) {
161
- ESP_LOGW(TAG, "Error setting ADC mode: %s", esp_err_to_name(err));
162
- this->status_set_error();
170
+ ESP_LOGE(TAG, "Error setting ADC mode: %s", esp_err_to_name(err));
163
171
  return false;
164
172
  }
173
+
165
174
  err = i2s_adc_enable(this->parent_->get_port());
166
175
  if (err != ESP_OK) {
167
- ESP_LOGW(TAG, "Error enabling ADC: %s", esp_err_to_name(err));
168
- this->status_set_error();
176
+ ESP_LOGE(TAG, "Error enabling ADC: %s", esp_err_to_name(err));
169
177
  return false;
170
178
  }
171
-
172
179
  } else
173
180
  #endif
174
181
  {
@@ -177,8 +184,7 @@ bool I2SAudioMicrophone::start_driver_() {
177
184
 
178
185
  err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
179
186
  if (err != ESP_OK) {
180
- ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err));
181
- this->status_set_error();
187
+ ESP_LOGE(TAG, "Error installing driver: %s", esp_err_to_name(err));
182
188
  return false;
183
189
  }
184
190
 
@@ -187,8 +193,7 @@ bool I2SAudioMicrophone::start_driver_() {
187
193
 
188
194
  err = i2s_set_pin(this->parent_->get_port(), &pin_config);
189
195
  if (err != ESP_OK) {
190
- ESP_LOGW(TAG, "Error setting I2S pin: %s", esp_err_to_name(err));
191
- this->status_set_error();
196
+ ESP_LOGE(TAG, "Error setting pin: %s", esp_err_to_name(err));
192
197
  return false;
193
198
  }
194
199
  }
@@ -203,8 +208,7 @@ bool I2SAudioMicrophone::start_driver_() {
203
208
  /* Allocate a new RX channel and get the handle of this channel */
204
209
  err = i2s_new_channel(&chan_cfg, NULL, &this->rx_handle_);
205
210
  if (err != ESP_OK) {
206
- ESP_LOGW(TAG, "Error creating new I2S channel: %s", esp_err_to_name(err));
207
- this->status_set_error();
211
+ ESP_LOGE(TAG, "Error creating channel: %s", esp_err_to_name(err));
208
212
  return false;
209
213
  }
210
214
 
@@ -276,22 +280,20 @@ bool I2SAudioMicrophone::start_driver_() {
276
280
  err = i2s_channel_init_std_mode(this->rx_handle_, &std_cfg);
277
281
  }
278
282
  if (err != ESP_OK) {
279
- ESP_LOGW(TAG, "Error initializing I2S channel: %s", esp_err_to_name(err));
280
- this->status_set_error();
283
+ ESP_LOGE(TAG, "Error initializing channel: %s", esp_err_to_name(err));
281
284
  return false;
282
285
  }
283
286
 
284
287
  /* Before reading data, start the RX channel first */
285
288
  i2s_channel_enable(this->rx_handle_);
286
289
  if (err != ESP_OK) {
287
- ESP_LOGW(TAG, "Error enabling I2S Microphone: %s", esp_err_to_name(err));
288
- this->status_set_error();
290
+ ESP_LOGE(TAG, "Enabling failed: %s", esp_err_to_name(err));
289
291
  return false;
290
292
  }
291
293
  #endif
292
294
 
293
- this->status_clear_error();
294
295
  this->configure_stream_settings_(); // redetermine the settings in case some settings were changed after compilation
296
+
295
297
  return true;
296
298
  }
297
299
 
@@ -303,6 +305,9 @@ void I2SAudioMicrophone::stop() {
303
305
  }
304
306
 
305
307
  void I2SAudioMicrophone::stop_driver_() {
308
+ // There is no harm continuing to unload the driver if an error is ever returned by the various functions. This
309
+ // ensures that we stop/unload the driver when it only partially starts.
310
+
306
311
  esp_err_t err;
307
312
  #ifdef USE_I2S_LEGACY
308
313
  #if SOC_I2S_SUPPORTS_ADC
@@ -310,64 +315,51 @@ void I2SAudioMicrophone::stop_driver_() {
310
315
  err = i2s_adc_disable(this->parent_->get_port());
311
316
  if (err != ESP_OK) {
312
317
  ESP_LOGW(TAG, "Error disabling ADC: %s", esp_err_to_name(err));
313
- this->status_set_error();
314
- return;
315
318
  }
316
319
  }
317
320
  #endif
318
321
  err = i2s_stop(this->parent_->get_port());
319
322
  if (err != ESP_OK) {
320
- ESP_LOGW(TAG, "Error stopping I2S microphone: %s", esp_err_to_name(err));
321
- this->status_set_error();
322
- return;
323
+ ESP_LOGW(TAG, "Error stopping: %s", esp_err_to_name(err));
323
324
  }
324
325
  err = i2s_driver_uninstall(this->parent_->get_port());
325
326
  if (err != ESP_OK) {
326
- ESP_LOGW(TAG, "Error uninstalling I2S driver: %s", esp_err_to_name(err));
327
- this->status_set_error();
328
- return;
327
+ ESP_LOGW(TAG, "Error uninstalling driver: %s", esp_err_to_name(err));
329
328
  }
330
329
  #else
331
- /* Have to stop the channel before deleting it */
332
- err = i2s_channel_disable(this->rx_handle_);
333
- if (err != ESP_OK) {
334
- ESP_LOGW(TAG, "Error stopping I2S microphone: %s", esp_err_to_name(err));
335
- this->status_set_error();
336
- return;
337
- }
338
- /* If the handle is not needed any more, delete it to release the channel resources */
339
- err = i2s_del_channel(this->rx_handle_);
340
- if (err != ESP_OK) {
341
- ESP_LOGW(TAG, "Error deleting I2S channel: %s", esp_err_to_name(err));
342
- this->status_set_error();
343
- return;
330
+ if (this->rx_handle_ != nullptr) {
331
+ /* Have to stop the channel before deleting it */
332
+ err = i2s_channel_disable(this->rx_handle_);
333
+ if (err != ESP_OK) {
334
+ ESP_LOGW(TAG, "Error stopping: %s", esp_err_to_name(err));
335
+ }
336
+ /* If the handle is not needed any more, delete it to release the channel resources */
337
+ err = i2s_del_channel(this->rx_handle_);
338
+ if (err != ESP_OK) {
339
+ ESP_LOGW(TAG, "Error deleting channel: %s", esp_err_to_name(err));
340
+ }
341
+ this->rx_handle_ = nullptr;
344
342
  }
345
343
  #endif
346
- this->parent_->unlock();
347
- this->status_clear_error();
344
+ if (this->locked_driver_) {
345
+ this->parent_->unlock();
346
+ this->locked_driver_ = false;
347
+ }
348
348
  }
349
349
 
350
350
  void I2SAudioMicrophone::mic_task(void *params) {
351
351
  I2SAudioMicrophone *this_microphone = (I2SAudioMicrophone *) params;
352
-
353
352
  xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_STARTING);
354
353
 
355
- uint8_t start_counter = 0;
356
- bool started = this_microphone->start_driver_();
357
- while (!started && start_counter < 10) {
358
- // Attempt to load the driver again in 100 ms. Doesn't slow down main loop since its in a task.
359
- vTaskDelay(pdMS_TO_TICKS(100));
360
- ++start_counter;
361
- started = this_microphone->start_driver_();
362
- }
354
+ { // Ensures the samples vector is freed when the task stops
363
355
 
364
- if (started) {
365
- xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
366
356
  const size_t bytes_to_read = this_microphone->audio_stream_info_.ms_to_bytes(READ_DURATION_MS);
367
357
  std::vector<uint8_t> samples;
368
358
  samples.reserve(bytes_to_read);
369
359
 
370
- while (!(xEventGroupGetBits(this_microphone->event_group_) & COMMAND_STOP)) {
360
+ xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
361
+
362
+ while (!(xEventGroupGetBits(this_microphone->event_group_) & MicrophoneEventGroupBits::COMMAND_STOP)) {
371
363
  if (this_microphone->data_callbacks_.size() > 0) {
372
364
  samples.resize(bytes_to_read);
373
365
  size_t bytes_read = this_microphone->read_(samples.data(), bytes_to_read, 2 * pdMS_TO_TICKS(READ_DURATION_MS));
@@ -382,9 +374,6 @@ void I2SAudioMicrophone::mic_task(void *params) {
382
374
  }
383
375
  }
384
376
 
385
- xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_STOPPING);
386
- this_microphone->stop_driver_();
387
-
388
377
  xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_STOPPED);
389
378
  while (true) {
390
379
  // Continuously delay until the loop method deletes the task
@@ -425,7 +414,10 @@ size_t I2SAudioMicrophone::read_(uint8_t *buf, size_t len, TickType_t ticks_to_w
425
414
  #endif
426
415
  if ((err != ESP_OK) && ((err != ESP_ERR_TIMEOUT) || (ticks_to_wait != 0))) {
427
416
  // Ignore ESP_ERR_TIMEOUT if ticks_to_wait = 0, as it will read the data on the next call
428
- ESP_LOGW(TAG, "Error reading from I2S microphone: %s", esp_err_to_name(err));
417
+ if (!this->status_has_warning()) {
418
+ // Avoid spamming the logs with the error message if its repeated
419
+ ESP_LOGW(TAG, "Read error: %s", esp_err_to_name(err));
420
+ }
429
421
  this->status_set_warning();
430
422
  return 0;
431
423
  }
@@ -452,34 +444,36 @@ void I2SAudioMicrophone::loop() {
452
444
  uint32_t event_group_bits = xEventGroupGetBits(this->event_group_);
453
445
 
454
446
  if (event_group_bits & MicrophoneEventGroupBits::TASK_STARTING) {
455
- ESP_LOGD(TAG, "Task has started, attempting to setup I2S audio driver");
447
+ ESP_LOGV(TAG, "Task started, attempting to allocate buffer");
456
448
  xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_STARTING);
457
449
  }
458
450
 
459
451
  if (event_group_bits & MicrophoneEventGroupBits::TASK_RUNNING) {
460
- ESP_LOGD(TAG, "Task is running and reading data");
452
+ ESP_LOGV(TAG, "Task is running and reading data");
461
453
 
462
454
  xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
463
455
  this->state_ = microphone::STATE_RUNNING;
464
456
  }
465
457
 
466
- if (event_group_bits & MicrophoneEventGroupBits::TASK_STOPPING) {
467
- ESP_LOGD(TAG, "Task is stopping, attempting to unload the I2S audio driver");
468
- xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_STOPPING);
469
- }
470
-
471
458
  if ((event_group_bits & MicrophoneEventGroupBits::TASK_STOPPED)) {
472
- ESP_LOGD(TAG, "Task is finished, freeing resources");
459
+ ESP_LOGV(TAG, "Task finished, freeing resources and uninstalling driver");
460
+
473
461
  vTaskDelete(this->task_handle_);
474
462
  this->task_handle_ = nullptr;
463
+ this->stop_driver_();
475
464
  xEventGroupClearBits(this->event_group_, ALL_BITS);
465
+ this->status_clear_error();
466
+
476
467
  this->state_ = microphone::STATE_STOPPED;
477
468
  }
478
469
 
470
+ // Start the microphone if any semaphores are taken
479
471
  if ((uxSemaphoreGetCount(this->active_listeners_semaphore_) < MAX_LISTENERS) &&
480
472
  (this->state_ == microphone::STATE_STOPPED)) {
481
473
  this->state_ = microphone::STATE_STARTING;
482
474
  }
475
+
476
+ // Stop the microphone if all semaphores are returned
483
477
  if ((uxSemaphoreGetCount(this->active_listeners_semaphore_) == MAX_LISTENERS) &&
484
478
  (this->state_ == microphone::STATE_RUNNING)) {
485
479
  this->state_ = microphone::STATE_STOPPING;
@@ -487,14 +481,28 @@ void I2SAudioMicrophone::loop() {
487
481
 
488
482
  switch (this->state_) {
489
483
  case microphone::STATE_STARTING:
490
- if ((this->task_handle_ == nullptr) && !this->status_has_error()) {
484
+ if (this->status_has_error()) {
485
+ break;
486
+ }
487
+
488
+ if (!this->start_driver_()) {
489
+ ESP_LOGE(TAG, "Driver failed to start; retrying in 1 second");
490
+ this->status_momentary_error("driver_fail", 1000);
491
+ this->stop_driver_(); // Stop/frees whatever possibly started
492
+ break;
493
+ }
494
+
495
+ if (this->task_handle_ == nullptr) {
491
496
  xTaskCreate(I2SAudioMicrophone::mic_task, "mic_task", TASK_STACK_SIZE, (void *) this, TASK_PRIORITY,
492
497
  &this->task_handle_);
493
498
 
494
499
  if (this->task_handle_ == nullptr) {
495
- this->status_momentary_error("Task failed to start, attempting again in 1 second", 1000);
500
+ ESP_LOGE(TAG, "Task failed to start, retrying in 1 second");
501
+ this->status_momentary_error("task_fail", 1000);
502
+ this->stop_driver_(); // Stops the driver to return the lock; will be reloaded in next attempt
496
503
  }
497
504
  }
505
+
498
506
  break;
499
507
  case microphone::STATE_RUNNING:
500
508
  break;
@@ -18,6 +18,7 @@ namespace i2s_audio {
18
18
  class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, public Component {
19
19
  public:
20
20
  void setup() override;
21
+ void dump_config() override;
21
22
  void start() override;
22
23
  void stop() override;
23
24
 
@@ -43,7 +44,11 @@ class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, pub
43
44
  #endif
44
45
 
45
46
  protected:
47
+ /// @brief Starts the I2S driver. Updates the ``audio_stream_info_`` member variable with the current setttings.
48
+ /// @return True if succesful, false otherwise
46
49
  bool start_driver_();
50
+
51
+ /// @brief Stops the I2S driver.
47
52
  void stop_driver_();
48
53
 
49
54
  /// @brief Attempts to correct a microphone DC offset; e.g., a microphones silent level is offset from 0. Applies a
@@ -76,6 +81,7 @@ class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, pub
76
81
  bool pdm_{false};
77
82
 
78
83
  bool correct_dc_offset_;
84
+ bool locked_driver_{false};
79
85
  int32_t dc_offset_{0};
80
86
  };
81
87
 
@@ -99,7 +99,7 @@ static const std::vector<int16_t> Q15_VOLUME_SCALING_FACTORS = {
99
99
  19508, 20665, 21891, 23189, 24565, 26022, 27566, 29201, 30933, 32767};
100
100
 
101
101
  void I2SAudioSpeaker::setup() {
102
- ESP_LOGCONFIG(TAG, "Setting up I2S Audio Speaker...");
102
+ ESP_LOGCONFIG(TAG, "Running setup");
103
103
 
104
104
  this->event_group_ = xEventGroupCreate();
105
105
 
@@ -110,29 +110,48 @@ void I2SAudioSpeaker::setup() {
110
110
  }
111
111
  }
112
112
 
113
+ void I2SAudioSpeaker::dump_config() {
114
+ ESP_LOGCONFIG(TAG,
115
+ "Speaker:\n"
116
+ " Pin: %d\n"
117
+ " Buffer duration: %" PRIu32,
118
+ static_cast<int8_t>(this->dout_pin_), this->buffer_duration_ms_);
119
+ if (this->timeout_.has_value()) {
120
+ ESP_LOGCONFIG(TAG, " Timeout: %" PRIu32 " ms", this->timeout_.value());
121
+ }
122
+ #ifdef USE_I2S_LEGACY
123
+ #if SOC_I2S_SUPPORTS_DAC
124
+ ESP_LOGCONFIG(TAG, " Internal DAC mode: %d", static_cast<int8_t>(this->internal_dac_mode_));
125
+ #endif
126
+ ESP_LOGCONFIG(TAG, " Communication format: %d", static_cast<int8_t>(this->i2s_comm_fmt_));
127
+ #else
128
+ ESP_LOGCONFIG(TAG, " Communication format: %s", this->i2s_comm_fmt_.c_str());
129
+ #endif
130
+ }
131
+
113
132
  void I2SAudioSpeaker::loop() {
114
133
  uint32_t event_group_bits = xEventGroupGetBits(this->event_group_);
115
134
 
116
135
  if (event_group_bits & SpeakerEventGroupBits::STATE_STARTING) {
117
- ESP_LOGD(TAG, "Starting Speaker");
136
+ ESP_LOGD(TAG, "Starting");
118
137
  this->state_ = speaker::STATE_STARTING;
119
138
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_STARTING);
120
139
  }
121
140
  if (event_group_bits & SpeakerEventGroupBits::STATE_RUNNING) {
122
- ESP_LOGD(TAG, "Started Speaker");
141
+ ESP_LOGD(TAG, "Started");
123
142
  this->state_ = speaker::STATE_RUNNING;
124
143
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_RUNNING);
125
144
  this->status_clear_warning();
126
145
  this->status_clear_error();
127
146
  }
128
147
  if (event_group_bits & SpeakerEventGroupBits::STATE_STOPPING) {
129
- ESP_LOGD(TAG, "Stopping Speaker");
148
+ ESP_LOGD(TAG, "Stopping");
130
149
  this->state_ = speaker::STATE_STOPPING;
131
150
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_STOPPING);
132
151
  }
133
152
  if (event_group_bits & SpeakerEventGroupBits::STATE_STOPPED) {
134
153
  if (!this->task_created_) {
135
- ESP_LOGD(TAG, "Stopped Speaker");
154
+ ESP_LOGD(TAG, "Stopped");
136
155
  this->state_ = speaker::STATE_STOPPED;
137
156
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ALL_BITS);
138
157
  this->speaker_task_handle_ = nullptr;
@@ -140,20 +159,19 @@ void I2SAudioSpeaker::loop() {
140
159
  }
141
160
 
142
161
  if (event_group_bits & SpeakerEventGroupBits::ERR_TASK_FAILED_TO_START) {
143
- this->status_set_error("Failed to start speaker task");
162
+ this->status_set_error("Failed to start task");
144
163
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ERR_TASK_FAILED_TO_START);
145
164
  }
146
165
 
147
166
  if (event_group_bits & SpeakerEventGroupBits::ALL_ERR_ESP_BITS) {
148
167
  uint32_t error_bits = event_group_bits & SpeakerEventGroupBits::ALL_ERR_ESP_BITS;
149
- ESP_LOGW(TAG, "Error writing to I2S: %s", esp_err_to_name(err_bit_to_esp_err(error_bits)));
168
+ ESP_LOGW(TAG, "Writing failed: %s", esp_err_to_name(err_bit_to_esp_err(error_bits)));
150
169
  this->status_set_warning();
151
170
  }
152
171
 
153
172
  if (event_group_bits & SpeakerEventGroupBits::ERR_ESP_NOT_SUPPORTED) {
154
- this->status_set_error("Failed to adjust I2S bus to match the incoming audio");
155
- ESP_LOGE(TAG,
156
- "Incompatible audio format: sample rate = %" PRIu32 ", channels = %" PRIu8 ", bits per sample = %" PRIu8,
173
+ this->status_set_error("Failed to adjust bus to match incoming audio");
174
+ ESP_LOGE(TAG, "Incompatible audio format: sample rate = %" PRIu32 ", channels = %u, bits per sample = %u",
157
175
  this->audio_stream_info_.get_sample_rate(), this->audio_stream_info_.get_channels(),
158
176
  this->audio_stream_info_.get_bits_per_sample());
159
177
  }
@@ -202,7 +220,7 @@ void I2SAudioSpeaker::set_mute_state(bool mute_state) {
202
220
 
203
221
  size_t I2SAudioSpeaker::play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) {
204
222
  if (this->is_failed()) {
205
- ESP_LOGE(TAG, "Cannot play audio, speaker failed to setup");
223
+ ESP_LOGE(TAG, "Setup failed; cannot play audio");
206
224
  return 0;
207
225
  }
208
226
  if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) {
@@ -24,6 +24,7 @@ class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Comp
24
24
  float get_setup_priority() const override { return esphome::setup_priority::PROCESSOR; }
25
25
 
26
26
  void setup() override;
27
+ void dump_config() override;
27
28
  void loop() override;
28
29
 
29
30
  void set_buffer_duration(uint32_t buffer_duration_ms) { this->buffer_duration_ms_ = buffer_duration_ms; }
@@ -1,7 +1,7 @@
1
1
  #include "iaqcore.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/hal.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  namespace esphome {
7
7
  namespace iaqcore {
@@ -26,7 +26,7 @@ struct SensorData {
26
26
 
27
27
  void IAQCore::setup() {
28
28
  if (this->write(nullptr, 0) != i2c::ERROR_OK) {
29
- ESP_LOGD(TAG, "Communication failed!");
29
+ ESP_LOGD(TAG, ESP_LOG_MSG_COMM_FAIL);
30
30
  this->mark_failed();
31
31
  return;
32
32
  }
@@ -89,7 +89,7 @@ void IAQCore::dump_config() {
89
89
  LOG_I2C_DEVICE(this);
90
90
  LOG_UPDATE_INTERVAL(this);
91
91
  if (this->is_failed()) {
92
- ESP_LOGE(TAG, "Communication with AMS iAQ Core failed!");
92
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
93
93
  }
94
94
  LOG_SENSOR(" ", "CO2", this->co2_);
95
95
  LOG_SENSOR(" ", "TVOC", this->tvoc_);
@@ -89,8 +89,10 @@ void ILI9XXXDisplay::setup_pins_() {
89
89
 
90
90
  void ILI9XXXDisplay::dump_config() {
91
91
  LOG_DISPLAY("", "ili9xxx", this);
92
- ESP_LOGCONFIG(TAG, " Width Offset: %u", this->offset_x_);
93
- ESP_LOGCONFIG(TAG, " Height Offset: %u", this->offset_y_);
92
+ ESP_LOGCONFIG(TAG,
93
+ " Width Offset: %u\n"
94
+ " Height Offset: %u",
95
+ this->offset_x_, this->offset_y_);
94
96
  switch (this->buffer_color_mode_) {
95
97
  case BITS_8_INDEXED:
96
98
  ESP_LOGCONFIG(TAG, " Color mode: 8bit Indexed");
@@ -111,11 +113,14 @@ void ILI9XXXDisplay::dump_config() {
111
113
  LOG_PIN(" CS Pin: ", this->cs_);
112
114
  LOG_PIN(" DC Pin: ", this->dc_pin_);
113
115
  LOG_PIN(" Busy Pin: ", this->busy_pin_);
114
- ESP_LOGCONFIG(TAG, " Color order: %s", this->color_order_ == display::COLOR_ORDER_BGR ? "BGR" : "RGB");
115
- ESP_LOGCONFIG(TAG, " Swap_xy: %s", YESNO(this->swap_xy_));
116
- ESP_LOGCONFIG(TAG, " Mirror_x: %s", YESNO(this->mirror_x_));
117
- ESP_LOGCONFIG(TAG, " Mirror_y: %s", YESNO(this->mirror_y_));
118
- ESP_LOGCONFIG(TAG, " Invert colors: %s", YESNO(this->pre_invertcolors_));
116
+ ESP_LOGCONFIG(TAG,
117
+ " Color order: %s\n"
118
+ " Swap_xy: %s\n"
119
+ " Mirror_x: %s\n"
120
+ " Mirror_y: %s\n"
121
+ " Invert colors: %s",
122
+ this->color_order_ == display::COLOR_ORDER_BGR ? "BGR" : "RGB", YESNO(this->swap_xy_),
123
+ YESNO(this->mirror_x_), YESNO(this->mirror_y_), YESNO(this->pre_invertcolors_));
119
124
 
120
125
  if (this->is_failed()) {
121
126
  ESP_LOGCONFIG(TAG, " => Failed to init Memory: YES!");
@@ -89,7 +89,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer,
89
89
 
90
90
  void dump_config() override;
91
91
  void setup() override;
92
- void on_shutdown() override { this->command(ILI9XXX_SLPIN); }
92
+ void on_powerdown() override { this->command(ILI9XXX_SLPIN); }
93
93
 
94
94
  display::DisplayType get_display_type() override { return display::DisplayType::DISPLAY_TYPE_COLOR; }
95
95
  void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order,
@@ -1,6 +1,7 @@
1
1
  #include "image.h"
2
2
 
3
3
  #include "esphome/core/hal.h"
4
+ #include "esphome/core/helpers.h"
4
5
 
5
6
  namespace esphome {
6
7
  namespace image {
@@ -34,7 +34,7 @@ static const uint8_t INA219_REGISTER_CURRENT = 0x04;
34
34
  static const uint8_t INA219_REGISTER_CALIBRATION = 0x05;
35
35
 
36
36
  void INA219Component::setup() {
37
- ESP_LOGCONFIG(TAG, "Setting up INA219...");
37
+ ESP_LOGCONFIG(TAG, "Running setup");
38
38
  // Config Register
39
39
  // 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
40
40
  if (!this->write_byte_16(INA219_REGISTER_CONFIG, 0x8000)) {
@@ -134,7 +134,7 @@ void INA219Component::dump_config() {
134
134
  LOG_I2C_DEVICE(this);
135
135
 
136
136
  if (this->is_failed()) {
137
- ESP_LOGE(TAG, "Communication with INA219 failed!");
137
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
138
138
  return;
139
139
  }
140
140
  LOG_UPDATE_INTERVAL(this);
@@ -37,7 +37,7 @@ static const uint16_t INA226_ADC_TIMES[] = {140, 204, 332, 588, 1100, 2116, 4156
37
37
  static const uint16_t INA226_ADC_AVG_SAMPLES[] = {1, 4, 16, 64, 128, 256, 512, 1024};
38
38
 
39
39
  void INA226Component::setup() {
40
- ESP_LOGCONFIG(TAG, "Setting up INA226...");
40
+ ESP_LOGCONFIG(TAG, "Running setup");
41
41
 
42
42
  ConfigurationRegister config;
43
43
 
@@ -88,14 +88,17 @@ void INA226Component::dump_config() {
88
88
  LOG_I2C_DEVICE(this);
89
89
 
90
90
  if (this->is_failed()) {
91
- ESP_LOGE(TAG, "Communication with INA226 failed!");
91
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
92
92
  return;
93
93
  }
94
94
  LOG_UPDATE_INTERVAL(this);
95
95
 
96
- ESP_LOGCONFIG(TAG, " ADC Conversion Time Bus Voltage: %d", INA226_ADC_TIMES[this->adc_time_voltage_ & 0b111]);
97
- ESP_LOGCONFIG(TAG, " ADC Conversion Time Shunt Voltage: %d", INA226_ADC_TIMES[this->adc_time_current_ & 0b111]);
98
- ESP_LOGCONFIG(TAG, " ADC Averaging Samples: %d", INA226_ADC_AVG_SAMPLES[this->adc_avg_samples_ & 0b111]);
96
+ ESP_LOGCONFIG(TAG,
97
+ " ADC Conversion Time Bus Voltage: %d\n"
98
+ " ADC Conversion Time Shunt Voltage: %d\n"
99
+ " ADC Averaging Samples: %d",
100
+ INA226_ADC_TIMES[this->adc_time_voltage_ & 0b111], INA226_ADC_TIMES[this->adc_time_current_ & 0b111],
101
+ INA226_ADC_AVG_SAMPLES[this->adc_avg_samples_ & 0b111]);
99
102
 
100
103
  LOG_SENSOR(" ", "Bus Voltage", this->bus_voltage_sensor_);
101
104
  LOG_SENSOR(" ", "Shunt Voltage", this->shunt_voltage_sensor_);
@@ -35,7 +35,7 @@ static const uint8_t INA260_REGISTER_MANUFACTURE_ID = 0xFE;
35
35
  static const uint8_t INA260_REGISTER_DEVICE_ID = 0xFF;
36
36
 
37
37
  void INA260Component::setup() {
38
- ESP_LOGCONFIG(TAG, "Setting up INA260...");
38
+ ESP_LOGCONFIG(TAG, "Running setup");
39
39
 
40
40
  // Reset device on setup
41
41
  if (!this->write_byte_16(INA260_REGISTER_CONFIG, 0x8000)) {