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
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include "esphome/core/helpers.h"
4
3
  #include "esphome/core/hal.h"
4
+ #include "esphome/core/helpers.h"
5
5
  #include "light_color_values.h"
6
6
 
7
7
  namespace esphome {
@@ -8,8 +8,8 @@
8
8
  #include "LwTx.h"
9
9
  #include <cstring>
10
10
  #include <Arduino.h>
11
- #include "esphome/core/log.h"
12
11
  #include "esphome/core/helpers.h"
12
+ #include "esphome/core/log.h"
13
13
 
14
14
  namespace esphome {
15
15
  namespace lightwaverf {
@@ -14,7 +14,7 @@ static const bool DEFAULT_INVERT = false;
14
14
  static const uint32_t DEFAULT_TICK = 330;
15
15
 
16
16
  void LightWaveRF::setup() {
17
- ESP_LOGCONFIG(TAG, "Setting up Lightwave RF...");
17
+ ESP_LOGCONFIG(TAG, "Running setup");
18
18
 
19
19
  this->lwtx_.lwtx_setup(pin_tx_, DEFAULT_REPEAT, DEFAULT_INVERT, DEFAULT_TICK);
20
20
  this->lwrx_.lwrx_setup(pin_rx_);
@@ -24,7 +24,7 @@ static const uint8_t READ_TOUCH[1] = {0x07};
24
24
  }
25
25
 
26
26
  void LilygoT547Touchscreen::setup() {
27
- ESP_LOGCONFIG(TAG, "Setting up Lilygo T5 4.7 Touchscreen...");
27
+ ESP_LOGCONFIG(TAG, "Running setup");
28
28
  this->interrupt_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP);
29
29
  this->interrupt_pin_->setup();
30
30
 
@@ -115,6 +115,7 @@ async def register_lock(var, config):
115
115
  if not CORE.has_id(config[CONF_ID]):
116
116
  var = cg.Pvariable(config[CONF_ID], var)
117
117
  cg.add(cg.App.register_lock(var))
118
+ CORE.register_platform_component("lock", var)
118
119
  await _setup_lock_core(var, config)
119
120
 
120
121
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  #include "esphome/core/component.h"
4
4
  #include "esphome/core/entity_base.h"
5
- #include "esphome/core/preferences.h"
6
5
  #include "esphome/core/helpers.h"
7
6
  #include "esphome/core/log.h"
7
+ #include "esphome/core/preferences.h"
8
8
  #include <set>
9
9
 
10
10
  namespace esphome {
@@ -8,8 +8,10 @@ from esphome.components.esp32.const import (
8
8
  VARIANT_ESP32,
9
9
  VARIANT_ESP32C2,
10
10
  VARIANT_ESP32C3,
11
+ VARIANT_ESP32C5,
11
12
  VARIANT_ESP32C6,
12
13
  VARIANT_ESP32H2,
14
+ VARIANT_ESP32P4,
13
15
  VARIANT_ESP32S2,
14
16
  VARIANT_ESP32S3,
15
17
  )
@@ -88,8 +90,10 @@ UART_SELECTION_ESP32 = {
88
90
  VARIANT_ESP32S3: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG],
89
91
  VARIANT_ESP32C3: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG],
90
92
  VARIANT_ESP32C2: [UART0, UART1],
93
+ VARIANT_ESP32C5: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG],
91
94
  VARIANT_ESP32C6: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG],
92
95
  VARIANT_ESP32H2: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG],
96
+ VARIANT_ESP32P4: [UART0, UART1, USB_CDC, USB_SERIAL_JTAG],
93
97
  }
94
98
 
95
99
  UART_SELECTION_ESP8266 = [UART0, UART0_SWAP, UART1]
@@ -205,8 +209,10 @@ CONFIG_SCHEMA = cv.All(
205
209
  esp32_s3_idf=USB_SERIAL_JTAG,
206
210
  esp32_c3_arduino=USB_CDC,
207
211
  esp32_c3_idf=USB_SERIAL_JTAG,
212
+ esp32_c5_idf=USB_SERIAL_JTAG,
208
213
  esp32_c6_arduino=USB_CDC,
209
214
  esp32_c6_idf=USB_SERIAL_JTAG,
215
+ esp32_p4_idf=USB_SERIAL_JTAG,
210
216
  rp2040=USB_CDC,
211
217
  bk72xx=DEFAULT,
212
218
  rtl87xx=DEFAULT,
@@ -116,7 +116,7 @@ void Logger::log_vprintf_(int level, const char *tag, int line, const __FlashStr
116
116
  if (this->baud_rate_ > 0) {
117
117
  this->write_msg_(this->tx_buffer_ + msg_start);
118
118
  }
119
- this->call_log_callbacks_(level, tag, this->tx_buffer_ + msg_start);
119
+ this->log_callback_.call(level, tag, this->tx_buffer_ + msg_start);
120
120
 
121
121
  global_recursion_guard_ = false;
122
122
  }
@@ -129,19 +129,6 @@ inline int Logger::level_for(const char *tag) {
129
129
  return this->current_level_;
130
130
  }
131
131
 
132
- void HOT Logger::call_log_callbacks_(int level, const char *tag, const char *msg) {
133
- #ifdef USE_ESP32
134
- // Suppress network-logging if memory constrained
135
- // In some configurations (eg BLE enabled) there may be some transient
136
- // memory exhaustion, and trying to log when OOM can lead to a crash. Skipping
137
- // here usually allows the stack to recover instead.
138
- // See issue #1234 for analysis.
139
- if (xPortGetFreeHeapSize() < 2048)
140
- return;
141
- #endif
142
- this->log_callback_.call(level, tag, msg);
143
- }
144
-
145
132
  Logger::Logger(uint32_t baud_rate, size_t tx_buffer_size) : baud_rate_(baud_rate), tx_buffer_size_(tx_buffer_size) {
146
133
  // add 1 to buffer size for null terminator
147
134
  this->tx_buffer_ = new char[this->tx_buffer_size_ + 1]; // NOLINT
@@ -189,7 +176,7 @@ void Logger::loop() {
189
176
  this->tx_buffer_size_);
190
177
  this->write_footer_to_buffer_(this->tx_buffer_, &this->tx_buffer_at_, this->tx_buffer_size_);
191
178
  this->tx_buffer_[this->tx_buffer_at_] = '\0';
192
- this->call_log_callbacks_(message->level, message->tag, this->tx_buffer_);
179
+ this->log_callback_.call(message->level, message->tag, this->tx_buffer_);
193
180
  // At this point all the data we need from message has been transferred to the tx_buffer
194
181
  // so we can release the message to allow other tasks to use it as soon as possible.
195
182
  this->log_buffer_->release_message_main_loop(received_token);
@@ -221,12 +208,16 @@ float Logger::get_setup_priority() const { return setup_priority::BUS + 500.0f;
221
208
  static const char *const LOG_LEVELS[] = {"NONE", "ERROR", "WARN", "INFO", "CONFIG", "DEBUG", "VERBOSE", "VERY_VERBOSE"};
222
209
 
223
210
  void Logger::dump_config() {
224
- ESP_LOGCONFIG(TAG, "Logger:");
225
- ESP_LOGCONFIG(TAG, " Max Level: %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
226
- ESP_LOGCONFIG(TAG, " Initial Level: %s", LOG_LEVELS[this->current_level_]);
211
+ ESP_LOGCONFIG(TAG,
212
+ "Logger:\n"
213
+ " Max Level: %s\n"
214
+ " Initial Level: %s",
215
+ LOG_LEVELS[ESPHOME_LOG_LEVEL], LOG_LEVELS[this->current_level_]);
227
216
  #ifndef USE_HOST
228
- ESP_LOGCONFIG(TAG, " Log Baud Rate: %" PRIu32, this->baud_rate_);
229
- ESP_LOGCONFIG(TAG, " Hardware UART: %s", get_uart_selection_());
217
+ ESP_LOGCONFIG(TAG,
218
+ " Log Baud Rate: %" PRIu32 "\n"
219
+ " Hardware UART: %s",
220
+ this->baud_rate_, get_uart_selection_());
230
221
  #endif
231
222
  #ifdef USE_ESPHOME_TASK_LOG_BUFFER
232
223
  if (this->log_buffer_) {
@@ -156,7 +156,6 @@ class Logger : public Component {
156
156
  #endif
157
157
 
158
158
  protected:
159
- void call_log_callbacks_(int level, const char *tag, const char *msg);
160
159
  void write_msg_(const char *msg);
161
160
 
162
161
  // Format a log message with printf-style arguments and write it to a buffer with header, footer, and null terminator
@@ -191,7 +190,7 @@ class Logger : public Component {
191
190
  if (this->baud_rate_ > 0) {
192
191
  this->write_msg_(this->tx_buffer_); // If logging is enabled, write to console
193
192
  }
194
- this->call_log_callbacks_(level, tag, this->tx_buffer_);
193
+ this->log_callback_.call(level, tag, this->tx_buffer_);
195
194
  }
196
195
 
197
196
  // Write the body of the log message to the buffer
@@ -212,9 +211,9 @@ class Logger : public Component {
212
211
  }
213
212
 
214
213
  // Format string to explicit buffer with varargs
215
- inline void printf_to_buffer_(const char *format, char *buffer, int *buffer_at, int buffer_size, ...) {
214
+ inline void printf_to_buffer_(char *buffer, int *buffer_at, int buffer_size, const char *format, ...) {
216
215
  va_list arg;
217
- va_start(arg, buffer_size);
216
+ va_start(arg, format);
218
217
  this->format_body_to_buffer_(buffer, buffer_at, buffer_size, format, arg);
219
218
  va_end(arg);
220
219
  }
@@ -312,13 +311,13 @@ class Logger : public Component {
312
311
  #if defined(USE_ESP32) || defined(USE_LIBRETINY)
313
312
  if (thread_name != nullptr) {
314
313
  // Non-main task with thread name
315
- this->printf_to_buffer_("%s[%s][%s:%03u]%s[%s]%s: ", buffer, buffer_at, buffer_size, color, letter, tag, line,
314
+ this->printf_to_buffer_(buffer, buffer_at, buffer_size, "%s[%s][%s:%03u]%s[%s]%s: ", color, letter, tag, line,
316
315
  ESPHOME_LOG_BOLD(ESPHOME_LOG_COLOR_RED), thread_name, color);
317
316
  return;
318
317
  }
319
318
  #endif
320
319
  // Main task or non ESP32/LibreTiny platform
321
- this->printf_to_buffer_("%s[%s][%s:%03u]: ", buffer, buffer_at, buffer_size, color, letter, tag, line);
320
+ this->printf_to_buffer_(buffer, buffer_at, buffer_size, "%s[%s][%s:%03u]: ", color, letter, tag, line);
322
321
  }
323
322
 
324
323
  inline void HOT format_body_to_buffer_(char *buffer, int *buffer_at, int buffer_size, const char *format,
@@ -18,12 +18,12 @@
18
18
  #endif
19
19
  #endif
20
20
 
21
- #include "freertos/FreeRTOS.h"
22
21
  #include "esp_idf_version.h"
22
+ #include "freertos/FreeRTOS.h"
23
23
 
24
+ #include <fcntl.h>
24
25
  #include <cstdint>
25
26
  #include <cstdio>
26
- #include <fcntl.h>
27
27
 
28
28
  #endif // USE_ESP_IDF
29
29
 
@@ -174,11 +174,11 @@ void Logger::pre_setup() {
174
174
  #ifdef USE_ESP_IDF
175
175
  void HOT Logger::write_msg_(const char *msg) {
176
176
  if (
177
- #if defined(USE_ESP32_VARIANT_ESP32S2)
177
+ #if defined(USE_LOGGER_USB_CDC) && !defined(USE_LOGGER_USB_SERIAL_JTAG)
178
178
  this->uart_ == UART_SELECTION_USB_CDC
179
- #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2)
179
+ #elif defined(USE_LOGGER_USB_SERIAL_JTAG) && !defined(USE_LOGGER_USB_CDC)
180
180
  this->uart_ == UART_SELECTION_USB_SERIAL_JTAG
181
- #elif defined(USE_ESP32_VARIANT_ESP32S3)
181
+ #elif defined(USE_LOGGER_USB_CDC) && defined(USE_LOGGER_USB_SERIAL_JTAG)
182
182
  this->uart_ == UART_SELECTION_USB_CDC || this->uart_ == UART_SELECTION_USB_SERIAL_JTAG
183
183
  #else
184
184
  /* DISABLES CODE */ (false) // NOLINT
@@ -148,7 +148,7 @@ void LTR390Component::read_mode_(int mode_index) {
148
148
  }
149
149
 
150
150
  void LTR390Component::setup() {
151
- ESP_LOGCONFIG(TAG, "Setting up ltr390...");
151
+ ESP_LOGCONFIG(TAG, "Running setup");
152
152
 
153
153
  // reset
154
154
  std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get();
@@ -187,10 +187,13 @@ void LTR390Component::setup() {
187
187
 
188
188
  void LTR390Component::dump_config() {
189
189
  LOG_I2C_DEVICE(this);
190
- ESP_LOGCONFIG(TAG, " ALS Gain: X%.0f", GAINVALUES[this->gain_als_]);
191
- ESP_LOGCONFIG(TAG, " ALS Resolution: %u-bit", RESOLUTION_BITS[this->res_als_]);
192
- ESP_LOGCONFIG(TAG, " UV Gain: X%.0f", GAINVALUES[this->gain_uv_]);
193
- ESP_LOGCONFIG(TAG, " UV Resolution: %u-bit", RESOLUTION_BITS[this->res_uv_]);
190
+ ESP_LOGCONFIG(TAG,
191
+ " ALS Gain: X%.0f\n"
192
+ " ALS Resolution: %u-bit\n"
193
+ " UV Gain: X%.0f\n"
194
+ " UV Resolution: %u-bit",
195
+ GAINVALUES[this->gain_als_], RESOLUTION_BITS[this->res_als_], GAINVALUES[this->gain_uv_],
196
+ RESOLUTION_BITS[this->res_uv_]);
194
197
  }
195
198
 
196
199
  void LTR390Component::update() {
@@ -1,7 +1,7 @@
1
1
  #include "ltr501.h"
2
2
  #include "esphome/core/application.h"
3
- #include "esphome/core/log.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  using esphome::i2c::ErrorCode;
7
7
 
@@ -74,7 +74,7 @@ static float get_ps_gain_coeff(PsGain501 gain) {
74
74
  }
75
75
 
76
76
  void LTRAlsPs501Component::setup() {
77
- ESP_LOGCONFIG(TAG, "Setting up LTR-501/301/558");
77
+ ESP_LOGCONFIG(TAG, "Running setup");
78
78
  // As per datasheet we need to wait at least 100ms after power on to get ALS chip responsive
79
79
  this->set_timeout(100, [this]() { this->state_ = State::DELAYED_SETUP; });
80
80
  }
@@ -94,16 +94,21 @@ void LTRAlsPs501Component::dump_config() {
94
94
  };
95
95
 
96
96
  LOG_I2C_DEVICE(this);
97
- ESP_LOGCONFIG(TAG, " Device type: %s", get_device_type(this->ltr_type_));
98
- ESP_LOGCONFIG(TAG, " Automatic mode: %s", ONOFF(this->automatic_mode_enabled_));
99
- ESP_LOGCONFIG(TAG, " Gain: %.0fx", get_gain_coeff(this->gain_));
100
- ESP_LOGCONFIG(TAG, " Integration time: %d ms", get_itime_ms(this->integration_time_));
101
- ESP_LOGCONFIG(TAG, " Measurement repeat rate: %d ms", get_meas_time_ms(this->repeat_rate_));
102
- ESP_LOGCONFIG(TAG, " Glass attenuation factor: %f", this->glass_attenuation_factor_);
103
- ESP_LOGCONFIG(TAG, " Proximity gain: %.0fx", get_ps_gain_coeff(this->ps_gain_));
104
- ESP_LOGCONFIG(TAG, " Proximity cooldown time: %d s", this->ps_cooldown_time_s_);
105
- ESP_LOGCONFIG(TAG, " Proximity high threshold: %d", this->ps_threshold_high_);
106
- ESP_LOGCONFIG(TAG, " Proximity low threshold: %d", this->ps_threshold_low_);
97
+ ESP_LOGCONFIG(TAG,
98
+ " Device type: %s\n"
99
+ " Automatic mode: %s\n"
100
+ " Gain: %.0fx\n"
101
+ " Integration time: %d ms\n"
102
+ " Measurement repeat rate: %d ms\n"
103
+ " Glass attenuation factor: %f\n"
104
+ " Proximity gain: %.0fx\n"
105
+ " Proximity cooldown time: %d s\n"
106
+ " Proximity high threshold: %d\n"
107
+ " Proximity low threshold: %d",
108
+ get_device_type(this->ltr_type_), ONOFF(this->automatic_mode_enabled_), get_gain_coeff(this->gain_),
109
+ get_itime_ms(this->integration_time_), get_meas_time_ms(this->repeat_rate_),
110
+ this->glass_attenuation_factor_, get_ps_gain_coeff(this->ps_gain_), this->ps_cooldown_time_s_,
111
+ this->ps_threshold_high_, this->ps_threshold_low_);
107
112
 
108
113
  LOG_UPDATE_INTERVAL(this);
109
114
 
@@ -113,7 +118,7 @@ void LTRAlsPs501Component::dump_config() {
113
118
  LOG_SENSOR(" ", "Actual gain", this->actual_gain_sensor_);
114
119
 
115
120
  if (this->is_failed()) {
116
- ESP_LOGE(TAG, "Communication with I2C LTR-501/301/558 failed!");
121
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
117
122
  }
118
123
  }
119
124
 
@@ -306,7 +311,7 @@ void LTRAlsPs501Component::configure_als_() {
306
311
 
307
312
  uint8_t tries = MAX_TRIES;
308
313
  do {
309
- ESP_LOGV(TAG, "Waiting for ALS device to become active...");
314
+ ESP_LOGV(TAG, "Waiting for ALS device to become active");
310
315
  delay(2);
311
316
  als_ctrl.raw = this->reg((uint8_t) CommandRegisters::ALS_CONTR).get();
312
317
  } while (!als_ctrl.als_mode_active && tries--); // while active mode is not set - keep waiting
@@ -1,7 +1,7 @@
1
1
  #include "ltr_als_ps.h"
2
2
  #include "esphome/core/application.h"
3
- #include "esphome/core/log.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  using esphome::i2c::ErrorCode;
7
7
 
@@ -63,7 +63,7 @@ static float get_ps_gain_coeff(PsGain gain) {
63
63
  }
64
64
 
65
65
  void LTRAlsPsComponent::setup() {
66
- ESP_LOGCONFIG(TAG, "Setting up LTR-303/329/55x/659");
66
+ ESP_LOGCONFIG(TAG, "Running setup");
67
67
  // As per datasheet we need to wait at least 100ms after power on to get ALS chip responsive
68
68
  this->set_timeout(100, [this]() { this->state_ = State::DELAYED_SETUP; });
69
69
  }
@@ -85,27 +85,34 @@ void LTRAlsPsComponent::dump_config() {
85
85
  LOG_I2C_DEVICE(this);
86
86
  ESP_LOGCONFIG(TAG, " Device type: %s", get_device_type(this->ltr_type_));
87
87
  if (this->is_als_()) {
88
- ESP_LOGCONFIG(TAG, " Automatic mode: %s", ONOFF(this->automatic_mode_enabled_));
89
- ESP_LOGCONFIG(TAG, " Gain: %.0fx", get_gain_coeff(this->gain_));
90
- ESP_LOGCONFIG(TAG, " Integration time: %d ms", get_itime_ms(this->integration_time_));
91
- ESP_LOGCONFIG(TAG, " Measurement repeat rate: %d ms", get_meas_time_ms(this->repeat_rate_));
92
- ESP_LOGCONFIG(TAG, " Glass attenuation factor: %f", this->glass_attenuation_factor_);
88
+ ESP_LOGCONFIG(TAG,
89
+ " Automatic mode: %s\n"
90
+ " Gain: %.0fx\n"
91
+ " Integration time: %d ms\n"
92
+ " Measurement repeat rate: %d ms\n"
93
+ " Glass attenuation factor: %f",
94
+ ONOFF(this->automatic_mode_enabled_), get_gain_coeff(this->gain_),
95
+ get_itime_ms(this->integration_time_), get_meas_time_ms(this->repeat_rate_),
96
+ this->glass_attenuation_factor_);
93
97
  LOG_SENSOR(" ", "ALS calculated lux", this->ambient_light_sensor_);
94
98
  LOG_SENSOR(" ", "CH1 Infrared counts", this->infrared_counts_sensor_);
95
99
  LOG_SENSOR(" ", "CH0 Visible+IR counts", this->full_spectrum_counts_sensor_);
96
100
  LOG_SENSOR(" ", "Actual gain", this->actual_gain_sensor_);
97
101
  }
98
102
  if (this->is_ps_()) {
99
- ESP_LOGCONFIG(TAG, " Proximity gain: %.0fx", get_ps_gain_coeff(this->ps_gain_));
100
- ESP_LOGCONFIG(TAG, " Proximity cooldown time: %d s", this->ps_cooldown_time_s_);
101
- ESP_LOGCONFIG(TAG, " Proximity high threshold: %d", this->ps_threshold_high_);
102
- ESP_LOGCONFIG(TAG, " Proximity low threshold: %d", this->ps_threshold_low_);
103
+ ESP_LOGCONFIG(TAG,
104
+ " Proximity gain: %.0fx\n"
105
+ " Proximity cooldown time: %d s\n"
106
+ " Proximity high threshold: %d\n"
107
+ " Proximity low threshold: %d",
108
+ get_ps_gain_coeff(this->ps_gain_), this->ps_cooldown_time_s_, this->ps_threshold_high_,
109
+ this->ps_threshold_low_);
103
110
  LOG_SENSOR(" ", "Proximity counts", this->proximity_counts_sensor_);
104
111
  }
105
112
  LOG_UPDATE_INTERVAL(this);
106
113
 
107
114
  if (this->is_failed()) {
108
- ESP_LOGE(TAG, "Communication with I2C LTR-303/329/55x/659 failed!");
115
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
109
116
  }
110
117
  }
111
118
 
@@ -298,7 +305,7 @@ void LTRAlsPsComponent::configure_als_() {
298
305
 
299
306
  uint8_t tries = MAX_TRIES;
300
307
  do {
301
- ESP_LOGV(TAG, "Waiting for device to become active...");
308
+ ESP_LOGV(TAG, "Waiting for device to become active");
302
309
  delay(2);
303
310
  als_ctrl.raw = this->reg((uint8_t) CommandRegisters::ALS_CONTR).get();
304
311
  } while (!als_ctrl.active_mode && tries--); // while active mode is not set - keep waiting
@@ -321,7 +321,7 @@ async def to_code(configs):
321
321
  frac = 2
322
322
  elif frac > 0.19:
323
323
  frac = 4
324
- else:
324
+ elif frac != 0:
325
325
  frac = 8
326
326
  displays = [
327
327
  await cg.get_variable(display) for display in config[df.CONF_DISPLAYS]
@@ -422,7 +422,7 @@ LVGL_SCHEMA = cv.All(
422
422
  ): lvalid.lv_font,
423
423
  cv.Optional(df.CONF_FULL_REFRESH, default=False): cv.boolean,
424
424
  cv.Optional(CONF_DRAW_ROUNDING, default=2): cv.positive_int,
425
- cv.Optional(CONF_BUFFER_SIZE, default="100%"): cv.percentage,
425
+ cv.Optional(CONF_BUFFER_SIZE, default=0): cv.percentage,
426
426
  cv.Optional(df.CONF_LOG_LEVEL, default="WARN"): cv.one_of(
427
427
  *df.LV_LOG_LEVELS, upper=True
428
428
  ),
@@ -1,4 +1,5 @@
1
- from typing import Any, Callable
1
+ from collections.abc import Callable
2
+ from typing import Any
2
3
 
3
4
  from esphome import automation
4
5
  import esphome.codegen as cg
@@ -20,7 +21,7 @@ from .defines import (
20
21
  literal,
21
22
  static_cast,
22
23
  )
23
- from .lv_validation import lv_bool, lv_color, lv_image, opacity
24
+ from .lv_validation import lv_bool, lv_color, lv_image, lv_milliseconds, opacity
24
25
  from .lvcode import (
25
26
  LVGL_COMP_ARG,
26
27
  UPDATE_EVENT,
@@ -128,14 +129,14 @@ async def lvgl_is_paused(config, condition_id, template_arg, args):
128
129
  LVGL_SCHEMA.extend(
129
130
  {
130
131
  cv.Required(CONF_TIMEOUT): cv.templatable(
131
- cv.positive_time_period_milliseconds
132
+ lv_milliseconds,
132
133
  )
133
134
  }
134
135
  ),
135
136
  )
136
137
  async def lvgl_is_idle(config, condition_id, template_arg, args):
137
138
  lvgl = config[CONF_LVGL_ID]
138
- timeout = await cg.templatable(config[CONF_TIMEOUT], [], cg.uint32)
139
+ timeout = await lv_milliseconds.process(config[CONF_TIMEOUT])
139
140
  async with LambdaContext(LVGL_COMP_ARG, return_type=cg.bool_) as context:
140
141
  lv_add(ReturnStatement(lvgl_comp.is_idle(timeout)))
141
142
  var = cg.new_Pvariable(
@@ -519,8 +519,6 @@ CONF_UPDATE_ON_RELEASE = "update_on_release"
519
519
  CONF_VISIBLE_ROW_COUNT = "visible_row_count"
520
520
  CONF_WIDGET = "widget"
521
521
  CONF_WIDGETS = "widgets"
522
- CONF_X = "x"
523
- CONF_Y = "y"
524
522
  CONF_ZOOM = "zoom"
525
523
 
526
524
  # Keypad keys
@@ -1,5 +1,3 @@
1
- from typing import Union
2
-
3
1
  import esphome.codegen as cg
4
2
  from esphome.components import image
5
3
  from esphome.components.color import CONF_HEX, ColorStruct, from_rgbw
@@ -361,7 +359,7 @@ lv_image_list = LValidator(
361
359
  lv_bool = LValidator(cv.boolean, cg.bool_, retmapper=literal)
362
360
 
363
361
 
364
- def lv_pct(value: Union[int, float]):
362
+ def lv_pct(value: int | float):
365
363
  if isinstance(value, float):
366
364
  value = int(value * 100)
367
365
  return literal(f"lv_pct({value})")
@@ -1,5 +1,4 @@
1
1
  import abc
2
- from typing import Union
3
2
 
4
3
  from esphome import codegen as cg
5
4
  from esphome.config import Config
@@ -75,7 +74,7 @@ class CodeContext(abc.ABC):
75
74
  code_context = None
76
75
 
77
76
  @abc.abstractmethod
78
- def add(self, expression: Union[Expression, Statement]):
77
+ def add(self, expression: Expression | Statement):
79
78
  pass
80
79
 
81
80
  @staticmethod
@@ -89,13 +88,13 @@ class CodeContext(abc.ABC):
89
88
  CodeContext.append(RawStatement("}"))
90
89
 
91
90
  @staticmethod
92
- def append(expression: Union[Expression, Statement]):
91
+ def append(expression: Expression | Statement):
93
92
  if CodeContext.code_context is not None:
94
93
  CodeContext.code_context.add(expression)
95
94
  return expression
96
95
 
97
96
  def __init__(self):
98
- self.previous: Union[CodeContext | None] = None
97
+ self.previous: CodeContext | None = None
99
98
  self.indent_level = 0
100
99
 
101
100
  async def __aenter__(self):
@@ -121,7 +120,7 @@ class MainContext(CodeContext):
121
120
  Code generation into the main() function
122
121
  """
123
122
 
124
- def add(self, expression: Union[Expression, Statement]):
123
+ def add(self, expression: Expression | Statement):
125
124
  return cg.add(self.indented_statement(expression))
126
125
 
127
126
 
@@ -144,7 +143,7 @@ class LambdaContext(CodeContext):
144
143
  self.capture = capture
145
144
  self.where = where
146
145
 
147
- def add(self, expression: Union[Expression, Statement]):
146
+ def add(self, expression: Expression | Statement):
148
147
  self.code_list.append(self.indented_statement(expression))
149
148
  return expression
150
149
 
@@ -186,7 +185,7 @@ class LvContext(LambdaContext):
186
185
  async def __aexit__(self, exc_type, exc_val, exc_tb):
187
186
  await super().__aexit__(exc_type, exc_val, exc_tb)
188
187
 
189
- def add(self, expression: Union[Expression, Statement]):
188
+ def add(self, expression: Expression | Statement):
190
189
  cg.add(expression)
191
190
  return expression
192
191
 
@@ -303,7 +302,7 @@ lvgl_static = MockObj("LvglComponent", "::")
303
302
 
304
303
 
305
304
  # equivalent to cg.add() for the current code context
306
- def lv_add(expression: Union[Expression, Statement]):
305
+ def lv_add(expression: Expression | Statement):
307
306
  return CodeContext.append(expression)
308
307
 
309
308
 
@@ -1,7 +1,7 @@
1
1
  #include "esphome/core/defines.h"
2
- #include "esphome/core/log.h"
3
- #include "esphome/core/helpers.h"
4
2
  #include "esphome/core/hal.h"
3
+ #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
  #include "lvgl_hal.h"
6
6
  #include "lvgl_esphome.h"
7
7
 
@@ -11,6 +11,8 @@ namespace esphome {
11
11
  namespace lvgl {
12
12
  static const char *const TAG = "lvgl";
13
13
 
14
+ static const size_t MIN_BUFFER_FRAC = 8;
15
+
14
16
  static const char *const EVENT_NAMES[] = {
15
17
  "NONE",
16
18
  "PRESSED",
@@ -83,10 +85,14 @@ static void rounder_cb(lv_disp_drv_t *disp_drv, lv_area_t *area) {
83
85
  lv_event_code_t lv_api_event; // NOLINT
84
86
  lv_event_code_t lv_update_event; // NOLINT
85
87
  void LvglComponent::dump_config() {
86
- ESP_LOGCONFIG(TAG, "LVGL:");
87
- ESP_LOGCONFIG(TAG, " Display width/height: %d x %d", this->disp_drv_.hor_res, this->disp_drv_.ver_res);
88
- ESP_LOGCONFIG(TAG, " Rotation: %d", this->rotation);
89
- ESP_LOGCONFIG(TAG, " Draw rounding: %d", (int) this->draw_rounding);
88
+ ESP_LOGCONFIG(TAG,
89
+ "LVGL:\n"
90
+ " Display width/height: %d x %d\n"
91
+ " Buffer size: %zu%%\n"
92
+ " Rotation: %d\n"
93
+ " Draw rounding: %d",
94
+ this->disp_drv_.hor_res, this->disp_drv_.ver_res, 100 / this->buffer_frac_, this->rotation,
95
+ (int) this->draw_rounding);
90
96
  }
91
97
  void LvglComponent::set_paused(bool paused, bool show_snow) {
92
98
  this->paused_ = paused;
@@ -432,18 +438,28 @@ void LvglComponent::setup() {
432
438
  auto *display = this->displays_[0];
433
439
  auto width = display->get_width();
434
440
  auto height = display->get_height();
435
- size_t buffer_pixels = width * height / this->buffer_frac_;
441
+ auto frac = this->buffer_frac_;
442
+ if (frac == 0)
443
+ frac = 1;
444
+ size_t buffer_pixels = width * height / frac;
436
445
  auto buf_bytes = buffer_pixels * LV_COLOR_DEPTH / 8;
437
446
  void *buffer = nullptr;
438
- if (this->buffer_frac_ >= 4)
447
+ if (this->buffer_frac_ >= MIN_BUFFER_FRAC / 2)
439
448
  buffer = malloc(buf_bytes); // NOLINT
440
449
  if (buffer == nullptr)
441
450
  buffer = lv_custom_mem_alloc(buf_bytes); // NOLINT
451
+ // if specific buffer size not set and can't get 100%, try for a smaller one
452
+ if (buffer == nullptr && this->buffer_frac_ == 0) {
453
+ frac = MIN_BUFFER_FRAC;
454
+ buffer_pixels /= MIN_BUFFER_FRAC;
455
+ buffer = lv_custom_mem_alloc(buf_bytes / MIN_BUFFER_FRAC); // NOLINT
456
+ }
442
457
  if (buffer == nullptr) {
443
- this->mark_failed();
444
458
  this->status_set_error("Memory allocation failure");
459
+ this->mark_failed();
445
460
  return;
446
461
  }
462
+ this->buffer_frac_ = frac;
447
463
  lv_disp_draw_buf_init(&this->draw_buf_, buffer, nullptr, buffer_pixels);
448
464
  this->disp_drv_.hor_res = width;
449
465
  this->disp_drv_.ver_res = height;
@@ -453,8 +469,8 @@ void LvglComponent::setup() {
453
469
  if (this->rotation != display::DISPLAY_ROTATION_0_DEGREES) {
454
470
  this->rotate_buf_ = static_cast<lv_color_t *>(lv_custom_mem_alloc(buf_bytes)); // NOLINT
455
471
  if (this->rotate_buf_ == nullptr) {
456
- this->mark_failed();
457
472
  this->status_set_error("Memory allocation failure");
473
+ this->mark_failed();
458
474
  return;
459
475
  }
460
476
  }