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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (715) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +712 -358
  29. esphome/components/api/api_connection.h +343 -284
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +2 -0
  33. esphome/components/api/api_pb2.h +637 -1
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -2
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +4 -3
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -14
  67. esphome/components/bme280_base/bme280_base.cpp +3 -3
  68. esphome/components/bme680/bme680.cpp +3 -3
  69. esphome/components/bme680/sensor.py +2 -2
  70. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  71. esphome/components/bme680_bsec/sensor.py +7 -3
  72. esphome/components/bme68x_bsec2/__init__.py +6 -5
  73. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  74. esphome/components/bme68x_bsec2/sensor.py +4 -4
  75. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  76. esphome/components/bmi160/bmi160.cpp +11 -11
  77. esphome/components/bmp085/bmp085.cpp +2 -2
  78. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  79. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  80. esphome/components/bmp581/bmp581.cpp +33 -27
  81. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  82. esphome/components/bp5758d/bp5758d.cpp +1 -1
  83. esphome/components/button/__init__.py +1 -0
  84. esphome/components/canbus/canbus.cpp +1 -1
  85. esphome/components/cap1188/cap1188.cpp +6 -4
  86. esphome/components/captive_portal/captive_portal.cpp +1 -1
  87. esphome/components/ccs811/ccs811.cpp +3 -2
  88. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  89. esphome/components/ch422g/ch422g.cpp +2 -2
  90. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  91. esphome/components/climate/__init__.py +1 -0
  92. esphome/components/climate/climate.cpp +12 -7
  93. esphome/components/climate/climate.h +1 -1
  94. esphome/components/climate_ir/climate_ir.cpp +7 -4
  95. esphome/components/cm1106/__init__.py +1 -0
  96. esphome/components/cm1106/cm1106.cpp +112 -0
  97. esphome/components/cm1106/cm1106.h +40 -0
  98. esphome/components/cm1106/sensor.py +72 -0
  99. esphome/components/const/__init__.py +1 -0
  100. esphome/components/cover/__init__.py +1 -0
  101. esphome/components/cs5460a/cs5460a.cpp +16 -11
  102. esphome/components/cse7761/cse7761.cpp +2 -2
  103. esphome/components/cse7766/cse7766.cpp +0 -5
  104. esphome/components/cse7766/cse7766.h +5 -1
  105. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  106. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  107. esphome/components/current_based/current_based_cover.cpp +4 -2
  108. esphome/components/dac7678/dac7678_output.cpp +4 -4
  109. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  110. esphome/components/daly_bms/daly_bms.cpp +2 -1
  111. esphome/components/dashboard_import/__init__.py +1 -2
  112. esphome/components/datetime/__init__.py +3 -1
  113. esphome/components/debug/debug_component.cpp +1 -1
  114. esphome/components/debug/debug_component.h +1 -1
  115. esphome/components/debug/debug_esp32.cpp +4 -2
  116. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  117. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  118. esphome/components/demo/__init__.py +206 -0
  119. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  120. esphome/components/demo/demo_button.h +15 -0
  121. esphome/components/demo/demo_date.h +34 -0
  122. esphome/components/demo/demo_datetime.h +40 -0
  123. esphome/components/demo/demo_lock.h +17 -0
  124. esphome/components/demo/demo_select.h +15 -0
  125. esphome/components/demo/demo_text.h +18 -0
  126. esphome/components/demo/demo_time.h +34 -0
  127. esphome/components/demo/demo_valve.h +54 -0
  128. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  129. esphome/components/dht/dht.cpp +29 -50
  130. esphome/components/dht12/dht12.cpp +2 -2
  131. esphome/components/display/display.h +5 -3
  132. esphome/components/dps310/dps310.cpp +7 -5
  133. esphome/components/ds1307/ds1307.cpp +2 -2
  134. esphome/components/dsmr/dsmr.cpp +5 -3
  135. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  136. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  137. esphome/components/ee895/ee895.cpp +3 -3
  138. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  139. esphome/components/emc2101/emc2101.cpp +11 -9
  140. esphome/components/ens160_base/ens160_base.cpp +2 -2
  141. esphome/components/ens210/ens210.cpp +2 -2
  142. esphome/components/es7210/es7210.cpp +6 -4
  143. esphome/components/es7243e/es7243e.cpp +1 -1
  144. esphome/components/es8156/es8156.cpp +1 -1
  145. esphome/components/es8311/es8311.cpp +8 -6
  146. esphome/components/es8388/__init__.py +0 -0
  147. esphome/components/es8388/audio_dac.py +26 -0
  148. esphome/components/es8388/es8388.cpp +289 -0
  149. esphome/components/es8388/es8388.h +81 -0
  150. esphome/components/es8388/es8388_const.h +83 -0
  151. esphome/components/es8388/select/__init__.py +47 -0
  152. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  153. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  154. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  155. esphome/components/es8388/select/dac_output_select.h +15 -0
  156. esphome/components/esp32/__init__.py +88 -20
  157. esphome/components/esp32/boards.py +208 -125
  158. esphome/components/esp32/const.py +6 -0
  159. esphome/components/esp32/gpio.py +14 -1
  160. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  161. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  162. esphome/components/esp32/preferences.cpp +7 -7
  163. esphome/components/esp32_ble/__init__.py +115 -0
  164. esphome/components/esp32_ble/ble.cpp +11 -9
  165. esphome/components/esp32_ble/ble_uuid.h +1 -1
  166. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  167. esphome/components/esp32_ble_server/__init__.py +4 -1
  168. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  169. esphome/components/esp32_ble_server/ble_server.h +0 -1
  170. esphome/components/esp32_ble_tracker/__init__.py +6 -2
  171. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
  172. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  173. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  174. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  175. esphome/components/esp32_improv/__init__.py +5 -1
  176. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  177. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  178. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  179. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  180. esphome/components/esp8266/preferences.cpp +6 -6
  181. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  182. esphome/components/esp_ldo/__init__.py +91 -0
  183. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  184. esphome/components/esp_ldo/esp_ldo.h +43 -0
  185. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  186. esphome/components/ethernet/ethernet_component.cpp +38 -26
  187. esphome/components/ethernet/ethernet_component.h +1 -1
  188. esphome/components/event/__init__.py +1 -0
  189. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  190. esphome/components/ezo/ezo.cpp +1 -1
  191. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  192. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  193. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  194. esphome/components/fan/__init__.py +1 -0
  195. esphome/components/fan/fan.cpp +4 -2
  196. esphome/components/fastled_base/fastled_light.cpp +7 -5
  197. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  198. esphome/components/fs3000/fs3000.cpp +1 -1
  199. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  200. esphome/components/ft63x6/ft63x6.cpp +5 -3
  201. esphome/components/gcja5/gcja5.cpp +0 -12
  202. esphome/components/gcja5/gcja5.h +8 -3
  203. esphome/components/gdk101/gdk101.cpp +2 -2
  204. esphome/components/globals/globals_component.h +13 -10
  205. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  206. esphome/components/gp8403/gp8403.cpp +4 -2
  207. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  208. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  209. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  210. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  211. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  212. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  213. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  215. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  216. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  217. esphome/components/haier/haier_base.cpp +2 -2
  218. esphome/components/haier/hon_climate.cpp +13 -6
  219. esphome/components/havells_solar/havells_solar.cpp +5 -2
  220. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  221. esphome/components/hdc1080/hdc1080.cpp +2 -2
  222. esphome/components/he60r/he60r.cpp +4 -2
  223. esphome/components/hlw8012/hlw8012.cpp +6 -4
  224. esphome/components/hm3301/hm3301.cpp +2 -2
  225. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  226. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  227. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  228. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  229. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  230. esphome/components/hte501/hte501.cpp +3 -2
  231. esphome/components/http_request/__init__.py +2 -2
  232. esphome/components/http_request/http_request.cpp +7 -5
  233. esphome/components/http_request/http_request_idf.cpp +4 -2
  234. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  235. esphome/components/htu21d/htu21d.cpp +2 -2
  236. esphome/components/htu31d/htu31d.cpp +2 -2
  237. esphome/components/hx711/hx711.cpp +2 -2
  238. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  239. esphome/components/hyt271/hyt271.cpp +2 -2
  240. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  241. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  242. esphome/components/i2s_audio/__init__.py +2 -0
  243. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  244. esphome/components/i2s_audio/i2s_audio.h +1 -1
  245. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  246. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  247. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +1 -1
  248. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  249. esphome/components/iaqcore/iaqcore.cpp +3 -3
  250. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  251. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  252. esphome/components/image/image.cpp +1 -0
  253. esphome/components/ina219/ina219.cpp +2 -2
  254. esphome/components/ina226/ina226.cpp +8 -5
  255. esphome/components/ina260/ina260.cpp +1 -1
  256. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  257. esphome/components/ina3221/ina3221.cpp +2 -2
  258. esphome/components/inkplate6/display.py +12 -2
  259. esphome/components/inkplate6/inkplate.cpp +13 -9
  260. esphome/components/inkplate6/inkplate.h +7 -6
  261. esphome/components/integration/integration_sensor.cpp +1 -1
  262. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  263. esphome/components/json/json_util.cpp +4 -5
  264. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  265. esphome/components/key_collector/key_collector.cpp +4 -2
  266. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  267. esphome/components/kuntze/kuntze.cpp +4 -2
  268. esphome/components/lc709203f/__init__.py +1 -0
  269. esphome/components/lc709203f/lc709203f.cpp +299 -0
  270. esphome/components/lc709203f/lc709203f.h +55 -0
  271. esphome/components/lc709203f/sensor.py +93 -0
  272. esphome/components/lcd_base/lcd_display.cpp +2 -2
  273. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  274. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  275. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  276. esphome/components/ld2410/ld2410.cpp +6 -7
  277. esphome/components/ld2420/ld2420.cpp +9 -7
  278. esphome/components/ld2450/ld2450.cpp +6 -4
  279. esphome/components/ld2450/sensor.py +2 -2
  280. esphome/components/ledc/ledc_output.cpp +32 -28
  281. esphome/components/libretiny/const.py +1 -1
  282. esphome/components/libretiny/preferences.cpp +6 -7
  283. esphome/components/light/__init__.py +2 -1
  284. esphome/components/light/esp_hsv_color.h +1 -1
  285. esphome/components/light/light_state.cpp +9 -5
  286. esphome/components/light/light_transformer.h +1 -1
  287. esphome/components/lightwaverf/LwTx.cpp +1 -1
  288. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  289. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  290. esphome/components/lock/__init__.py +1 -0
  291. esphome/components/lock/lock.h +1 -1
  292. esphome/components/logger/__init__.py +6 -0
  293. esphome/components/logger/logger.cpp +9 -5
  294. esphome/components/logger/logger_esp32.cpp +5 -5
  295. esphome/components/ltr390/ltr390.cpp +8 -5
  296. esphome/components/ltr501/ltr501.cpp +19 -14
  297. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  298. esphome/components/lvgl/__init__.py +2 -2
  299. esphome/components/lvgl/automation.py +5 -4
  300. esphome/components/lvgl/defines.py +0 -2
  301. esphome/components/lvgl/lv_validation.py +1 -3
  302. esphome/components/lvgl/lvcode.py +7 -8
  303. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  304. esphome/components/lvgl/schemas.py +22 -23
  305. esphome/components/lvgl/trigger.py +8 -3
  306. esphome/components/lvgl/widgets/__init__.py +2 -2
  307. esphome/components/lvgl/widgets/canvas.py +9 -3
  308. esphome/components/lvgl/widgets/line.py +2 -1
  309. esphome/components/lvgl/widgets/tabview.py +7 -0
  310. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  311. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  312. esphome/components/max17043/max17043.cpp +2 -2
  313. esphome/components/max31855/max31855.cpp +2 -1
  314. esphome/components/max31856/max31856.cpp +9 -11
  315. esphome/components/max31865/max31865.cpp +6 -4
  316. esphome/components/max44009/max44009.cpp +2 -2
  317. esphome/components/max6675/max6675.cpp +1 -1
  318. esphome/components/max6956/max6956.cpp +5 -3
  319. esphome/components/max7219/max7219.cpp +8 -6
  320. esphome/components/max7219digit/automation.h +52 -0
  321. esphome/components/max7219digit/display.py +93 -1
  322. esphome/components/max7219digit/max7219digit.cpp +16 -13
  323. esphome/components/max9611/max9611.cpp +9 -6
  324. esphome/components/mcp23008/mcp23008.cpp +1 -1
  325. esphome/components/mcp23016/mcp23016.cpp +1 -1
  326. esphome/components/mcp23017/mcp23017.cpp +1 -1
  327. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  328. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  329. esphome/components/mcp3008/mcp3008.cpp +1 -1
  330. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  331. esphome/components/mcp3204/mcp3204.cpp +1 -1
  332. esphome/components/mcp4461/mcp4461.cpp +2 -2
  333. esphome/components/mcp4725/mcp4725.cpp +2 -2
  334. esphome/components/mcp4728/mcp4728.cpp +2 -2
  335. esphome/components/mcp9600/mcp9600.cpp +1 -1
  336. esphome/components/mcp9808/mcp9808.cpp +4 -4
  337. esphome/components/mdns/mdns_component.cpp +8 -2
  338. esphome/components/mdns/mdns_component.h +3 -1
  339. esphome/components/mdns/mdns_esp32.cpp +2 -2
  340. esphome/components/media_player/__init__.py +1 -0
  341. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  342. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  343. esphome/components/micronova/micronova.h +2 -2
  344. esphome/components/mics_4514/mics_4514.cpp +2 -2
  345. esphome/components/midea/air_conditioner.cpp +7 -5
  346. esphome/components/midea_ir/midea_ir.cpp +1 -1
  347. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  348. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  349. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  350. esphome/components/mlx90614/mlx90614.cpp +4 -3
  351. esphome/components/mmc5603/mmc5603.cpp +2 -2
  352. esphome/components/mmc5983/mmc5983.cpp +1 -1
  353. esphome/components/modbus/modbus.cpp +7 -5
  354. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  355. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  356. esphome/components/modbus_controller/switch/__init__.py +6 -2
  357. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  358. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  359. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  360. esphome/components/mpr121/mpr121.cpp +2 -2
  361. esphome/components/mpu6050/mpu6050.cpp +6 -6
  362. esphome/components/mpu6886/mpu6886.cpp +6 -6
  363. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  364. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  365. esphome/components/mqtt/mqtt_client.cpp +31 -24
  366. esphome/components/mqtt/mqtt_component.cpp +2 -2
  367. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  368. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  369. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  370. esphome/components/ms5611/ms5611.cpp +2 -2
  371. esphome/components/ms8607/ms8607.cpp +2 -2
  372. esphome/components/msa3xx/msa3xx.cpp +16 -12
  373. esphome/components/my9231/my9231.cpp +7 -5
  374. esphome/components/nau7802/nau7802.cpp +6 -4
  375. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  376. esphome/components/network/ip_address.h +1 -1
  377. esphome/components/network/util.cpp +13 -0
  378. esphome/components/nextion/base_component.py +2 -0
  379. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  380. esphome/components/nextion/display.py +34 -22
  381. esphome/components/nextion/nextion.cpp +182 -143
  382. esphome/components/nextion/nextion.h +36 -0
  383. esphome/components/nextion/nextion_commands.cpp +3 -3
  384. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  385. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  386. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  387. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  388. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  389. esphome/components/nfc/nci_message.h +1 -1
  390. esphome/components/nfc/ndef_record.h +1 -1
  391. esphome/components/nfc/ndef_record_text.h +1 -1
  392. esphome/components/nfc/ndef_record_uri.h +1 -1
  393. esphome/components/nfc/nfc.h +1 -1
  394. esphome/components/nfc/nfc_tag.h +1 -1
  395. esphome/components/noblex/noblex.cpp +1 -1
  396. esphome/components/npi19/npi19.cpp +5 -7
  397. esphome/components/number/__init__.py +11 -0
  398. esphome/components/online_image/__init__.py +13 -1
  399. esphome/components/online_image/online_image.cpp +26 -4
  400. esphome/components/online_image/online_image.h +21 -4
  401. esphome/components/opentherm/generate.py +3 -3
  402. esphome/components/opentherm/hub.cpp +11 -7
  403. esphome/components/opentherm/number/number.cpp +5 -3
  404. esphome/components/opentherm/opentherm.h +1 -1
  405. esphome/components/opentherm/schema.py +13 -13
  406. esphome/components/opentherm/validate.py +1 -1
  407. esphome/components/openthread/__init__.py +146 -0
  408. esphome/components/openthread/const.py +10 -0
  409. esphome/components/openthread/openthread.cpp +206 -0
  410. esphome/components/openthread/openthread.h +68 -0
  411. esphome/components/openthread/openthread_esp.cpp +164 -0
  412. esphome/components/openthread/tlv.py +58 -0
  413. esphome/components/openthread_info/__init__.py +0 -0
  414. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  415. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  416. esphome/components/openthread_info/text_sensor.py +105 -0
  417. esphome/components/output/float_output.cpp +1 -1
  418. esphome/components/output/switch/output_switch.cpp +1 -1
  419. esphome/components/packet_transport/packet_transport.cpp +6 -4
  420. esphome/components/pca6416a/pca6416a.cpp +2 -2
  421. esphome/components/pca9554/pca9554.cpp +6 -4
  422. esphome/components/pca9685/pca9685_output.cpp +12 -8
  423. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  424. esphome/components/pcf85063/pcf85063.cpp +2 -2
  425. esphome/components/pcf8563/pcf8563.cpp +2 -2
  426. esphome/components/pcf8574/pcf8574.cpp +2 -2
  427. esphome/components/pid/pid_climate.cpp +8 -5
  428. esphome/components/pid/pid_climate.h +1 -1
  429. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  430. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  431. esphome/components/pipsolar/pipsolar.cpp +3 -3
  432. esphome/components/pm1006/pm1006.cpp +3 -7
  433. esphome/components/pm1006/pm1006.h +4 -1
  434. esphome/components/pm2005/pm2005.cpp +12 -13
  435. esphome/components/pm2005/sensor.py +1 -1
  436. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  437. esphome/components/pmsx003/pmsx003.cpp +0 -4
  438. esphome/components/pmsx003/pmsx003.h +5 -2
  439. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  440. esphome/components/pmwcs3/pmwcs3.h +0 -1
  441. esphome/components/pn532/pn532.cpp +7 -7
  442. esphome/components/pn532/pn532.h +1 -1
  443. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  444. esphome/components/pn7150/pn7150.cpp +4 -4
  445. esphome/components/pn7160/pn7160.cpp +4 -4
  446. esphome/components/power_supply/power_supply.cpp +6 -4
  447. esphome/components/power_supply/power_supply.h +1 -1
  448. esphome/components/psram/__init__.py +59 -35
  449. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  450. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  451. esphome/components/pylontech/pylontech.cpp +2 -2
  452. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  453. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  454. esphome/components/pzemac/pzemac.cpp +4 -2
  455. esphome/components/pzemdc/pzemdc.cpp +4 -2
  456. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  457. esphome/components/qmp6988/qmp6988.cpp +2 -2
  458. esphome/components/qmp6988/qmp6988.h +1 -1
  459. esphome/components/qr_code/qr_code.cpp +5 -3
  460. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  461. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  462. esphome/components/rc522/rc522.cpp +5 -5
  463. esphome/components/rdm6300/rdm6300.cpp +1 -0
  464. esphome/components/remote_receiver/__init__.py +10 -2
  465. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  466. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  467. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  468. esphome/components/remote_transmitter/__init__.py +10 -2
  469. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  470. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  471. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  472. esphome/components/resistance/resistance_sensor.cpp +6 -3
  473. esphome/components/restart/button/restart_button.cpp +1 -1
  474. esphome/components/restart/switch/restart_switch.cpp +1 -1
  475. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  476. esphome/components/rp2040/__init__.py +7 -0
  477. esphome/components/rp2040/core.cpp +8 -1
  478. esphome/components/rp2040/preferences.cpp +3 -3
  479. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  480. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  481. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  482. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  483. esphome/components/rtttl/rtttl.cpp +11 -9
  484. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  485. esphome/components/safe_mode/safe_mode.cpp +9 -8
  486. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  487. esphome/components/scd30/scd30.cpp +11 -8
  488. esphome/components/scd4x/scd4x.cpp +12 -8
  489. esphome/components/sdl/display.py +40 -0
  490. esphome/components/sdl/sdl_esphome.cpp +2 -2
  491. esphome/components/sdl/sdl_esphome.h +8 -0
  492. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  493. esphome/components/sdp3x/sdp3x.cpp +11 -11
  494. esphome/components/sds011/sds011.cpp +5 -6
  495. esphome/components/sds011/sds011.h +4 -1
  496. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  497. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  498. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  499. esphome/components/selec_meter/selec_meter.cpp +5 -2
  500. esphome/components/select/__init__.py +1 -0
  501. esphome/components/sen0321/sen0321.cpp +2 -2
  502. esphome/components/sen21231/sen21231.cpp +1 -1
  503. esphome/components/sen5x/sen5x.cpp +10 -7
  504. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  505. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  506. esphome/components/sensor/__init__.py +11 -1
  507. esphome/components/sensor/filter.h +1 -1
  508. esphome/components/sensor/sensor.h +9 -5
  509. esphome/components/servo/servo.cpp +12 -9
  510. esphome/components/servo/servo.h +1 -1
  511. esphome/components/sfa30/sfa30.cpp +1 -1
  512. esphome/components/sgp30/sgp30.cpp +10 -8
  513. esphome/components/sgp4x/sgp4x.cpp +49 -61
  514. esphome/components/sgp4x/sgp4x.h +0 -1
  515. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  516. esphome/components/sht3xd/sht3xd.cpp +1 -1
  517. esphome/components/sht4x/sht4x.cpp +2 -2
  518. esphome/components/shtcx/shtcx.cpp +13 -16
  519. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  520. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  521. esphome/components/sim800l/sim800l.cpp +2 -2
  522. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  523. esphome/components/sm16716/sm16716.cpp +1 -1
  524. esphome/components/sm2135/sm2135.cpp +1 -1
  525. esphome/components/sm2235/sm2235.cpp +5 -3
  526. esphome/components/sm2335/sm2335.cpp +5 -3
  527. esphome/components/sml/sml.cpp +1 -1
  528. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  529. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  530. esphome/components/sntp/sntp_component.cpp +1 -1
  531. esphome/components/socket/__init__.py +2 -0
  532. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  533. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  534. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  535. esphome/components/socket/socket.cpp +31 -0
  536. esphome/components/socket/socket.h +27 -1
  537. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  538. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  539. esphome/components/sound_level/sound_level.cpp +4 -2
  540. esphome/components/speaker/media_player/__init__.py +3 -0
  541. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  542. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  543. esphome/components/spi/__init__.py +10 -2
  544. esphome/components/spi/spi.cpp +4 -4
  545. esphome/components/spi_device/spi_device.cpp +1 -2
  546. esphome/components/sprinkler/sprinkler.cpp +9 -6
  547. esphome/components/sps30/sps30.cpp +16 -15
  548. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  549. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  550. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  551. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  552. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  553. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  554. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  555. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  556. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  557. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  558. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  559. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  560. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  561. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  562. esphome/components/st7567_base/st7567_base.cpp +3 -3
  563. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  564. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  565. esphome/components/st7701s/st7701s.cpp +4 -2
  566. esphome/components/st7735/st7735.cpp +3 -3
  567. esphome/components/st7789v/st7789v.cpp +10 -7
  568. esphome/components/st7920/st7920.cpp +6 -4
  569. esphome/components/statsd/statsd.cpp +9 -5
  570. esphome/components/status_led/light/status_led_light.cpp +1 -1
  571. esphome/components/status_led/status_led.cpp +1 -1
  572. esphome/components/stepper/stepper.h +5 -3
  573. esphome/components/sts3x/sts3x.cpp +2 -2
  574. esphome/components/switch/__init__.py +1 -0
  575. esphome/components/switch/switch.cpp +18 -12
  576. esphome/components/switch/switch.h +1 -1
  577. esphome/components/sx1509/__init__.py +53 -20
  578. esphome/components/sx1509/sx1509.cpp +29 -5
  579. esphome/components/sx1509/sx1509.h +9 -1
  580. esphome/components/t6615/t6615.cpp +1 -0
  581. esphome/components/tc74/tc74.cpp +1 -1
  582. esphome/components/tca9548a/tca9548a.cpp +1 -1
  583. esphome/components/tca9555/tca9555.cpp +2 -2
  584. esphome/components/tcs34725/tcs34725.cpp +4 -4
  585. esphome/components/tee501/tee501.cpp +3 -2
  586. esphome/components/tem3200/tem3200.cpp +5 -6
  587. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  588. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  589. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  590. esphome/components/template/cover/template_cover.cpp +1 -1
  591. esphome/components/template/select/template_select.cpp +6 -4
  592. esphome/components/template/text/template_text.cpp +2 -3
  593. esphome/components/template/valve/template_valve.cpp +5 -3
  594. esphome/components/text/__init__.py +10 -11
  595. esphome/components/text_sensor/__init__.py +1 -0
  596. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  597. esphome/components/time/__init__.py +1 -2
  598. esphome/components/time_based/time_based_cover.cpp +4 -2
  599. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  600. esphome/components/tm1621/tm1621.cpp +3 -3
  601. esphome/components/tm1637/tm1637.cpp +9 -7
  602. esphome/components/tm1638/tm1638.cpp +7 -5
  603. esphome/components/tm1651/tm1651.cpp +2 -2
  604. esphome/components/tmp102/tmp102.cpp +1 -3
  605. esphome/components/tmp102/tmp102.h +0 -3
  606. esphome/components/tmp1075/tmp1075.cpp +12 -9
  607. esphome/components/tmp117/tmp117.cpp +2 -2
  608. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  609. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  610. esphome/components/tsl2561/tsl2561.cpp +7 -5
  611. esphome/components/tsl2591/tsl2591.cpp +25 -27
  612. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  613. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  614. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  615. esphome/components/tuya/select/tuya_select.cpp +5 -3
  616. esphome/components/tx20/tx20.cpp +3 -3
  617. esphome/components/uart/__init__.py +4 -5
  618. esphome/components/uart/button/uart_button.cpp +1 -1
  619. esphome/components/uart/switch/uart_switch.cpp +2 -2
  620. esphome/components/uart/uart.cpp +2 -2
  621. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  622. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  623. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  624. esphome/components/uart/uart_component_host.cpp +11 -8
  625. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  626. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  627. esphome/components/udp/udp_component.cpp +9 -5
  628. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  629. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  630. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  631. esphome/components/update/__init__.py +1 -0
  632. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  633. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  634. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  635. esphome/components/usb_host/__init__.py +64 -0
  636. esphome/components/usb_host/usb_host.h +116 -0
  637. esphome/components/usb_host/usb_host_client.cpp +394 -0
  638. esphome/components/usb_host/usb_host_component.cpp +35 -0
  639. esphome/components/usb_uart/__init__.py +134 -0
  640. esphome/components/usb_uart/ch34x.cpp +80 -0
  641. esphome/components/usb_uart/cp210x.cpp +126 -0
  642. esphome/components/usb_uart/usb_uart.cpp +328 -0
  643. esphome/components/usb_uart/usb_uart.h +151 -0
  644. esphome/components/valve/__init__.py +1 -0
  645. esphome/components/veml3235/veml3235.cpp +13 -9
  646. esphome/components/veml7700/veml7700.cpp +10 -6
  647. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  648. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  649. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  650. esphome/components/web_server/server_index_v2.h +632 -630
  651. esphome/components/web_server/server_index_v3.h +411 -409
  652. esphome/components/web_server/web_server.cpp +5 -3
  653. esphome/components/web_server_base/web_server_base.cpp +1 -1
  654. esphome/components/web_server_idf/utils.cpp +1 -1
  655. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  656. esphome/components/weikai/__init__.py +2 -0
  657. esphome/components/weikai/weikai.cpp +23 -21
  658. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  659. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  660. esphome/components/wiegand/wiegand.cpp +1 -1
  661. esphome/components/wifi/wifi_component.cpp +50 -37
  662. esphome/components/wifi/wifi_component.h +7 -4
  663. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  664. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  665. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  666. esphome/components/wireguard/wireguard.cpp +21 -21
  667. esphome/components/wl_134/text_sensor.py +1 -2
  668. esphome/components/wled/wled_light_effect.cpp +1 -1
  669. esphome/components/x9c/x9c.cpp +5 -3
  670. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  671. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  672. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  673. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  674. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  675. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  676. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  677. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  678. esphome/components/xl9535/xl9535.cpp +2 -2
  679. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  680. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  681. esphome/config.py +3 -2
  682. esphome/config_validation.py +46 -17
  683. esphome/const.py +10 -1
  684. esphome/core/__init__.py +37 -18
  685. esphome/core/application.cpp +188 -5
  686. esphome/core/application.h +110 -0
  687. esphome/core/component.h +13 -0
  688. esphome/core/config.py +12 -0
  689. esphome/core/defines.h +10 -2
  690. esphome/core/helpers.cpp +1 -1
  691. esphome/core/helpers.h +4 -4
  692. esphome/core/log.h +2 -0
  693. esphome/core/log_const_en.h +4 -0
  694. esphome/core/scheduler.cpp +2 -2
  695. esphome/coroutine.py +3 -4
  696. esphome/cpp_generator.py +32 -32
  697. esphome/dashboard/core.py +2 -2
  698. esphome/dashboard/web_server.py +2 -2
  699. esphome/git.py +4 -4
  700. esphome/helpers.py +5 -6
  701. esphome/loader.py +8 -7
  702. esphome/log.py +7 -1
  703. esphome/platformio_api.py +2 -3
  704. esphome/storage_json.py +13 -5
  705. esphome/types.py +12 -13
  706. esphome/util.py +1 -2
  707. esphome/writer.py +5 -3
  708. esphome/yaml_util.py +6 -1
  709. esphome/zeroconf.py +1 -1
  710. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  711. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +715 -662
  712. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  713. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  714. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  715. {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -39,17 +39,14 @@ static const LogString *pm2005_get_measuring_mode_string(int status) {
39
39
  static inline uint16_t get_sensor_value(const uint8_t *data, uint8_t i) { return data[i] * 0x100 + data[i + 1]; }
40
40
 
41
41
  void PM2005Component::setup() {
42
+ ESP_LOGCONFIG(TAG, "Running setup");
42
43
  if (this->sensor_type_ == PM2005) {
43
- ESP_LOGCONFIG(TAG, "Setting up PM2005...");
44
-
45
44
  this->situation_value_index_ = 3;
46
45
  this->pm_1_0_value_index_ = 4;
47
46
  this->pm_2_5_value_index_ = 6;
48
47
  this->pm_10_0_value_index_ = 8;
49
48
  this->measuring_value_index_ = 10;
50
49
  } else {
51
- ESP_LOGCONFIG(TAG, "Setting up PM2105...");
52
-
53
50
  this->situation_value_index_ = 2;
54
51
  this->pm_1_0_value_index_ = 3;
55
52
  this->pm_2_5_value_index_ = 5;
@@ -58,7 +55,7 @@ void PM2005Component::setup() {
58
55
  }
59
56
 
60
57
  if (this->read(this->data_buffer_, 12) != i2c::ERROR_OK) {
61
- ESP_LOGE(TAG, "Communication failed!");
58
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
62
59
  this->mark_failed();
63
60
  return;
64
61
  }
@@ -66,7 +63,7 @@ void PM2005Component::setup() {
66
63
 
67
64
  void PM2005Component::update() {
68
65
  if (this->read(this->data_buffer_, 12) != i2c::ERROR_OK) {
69
- ESP_LOGW(TAG, "Read result failed.");
66
+ ESP_LOGW(TAG, "Read result failed");
70
67
  this->status_set_warning();
71
68
  return;
72
69
  }
@@ -85,10 +82,10 @@ void PM2005Component::update() {
85
82
  return;
86
83
  }
87
84
 
88
- uint16_t pm1 = get_sensor_value(this->data_buffer_, this->pm_1_0_value_index_);
89
- uint16_t pm25 = get_sensor_value(this->data_buffer_, this->pm_2_5_value_index_);
90
- uint16_t pm10 = get_sensor_value(this->data_buffer_, this->pm_10_0_value_index_);
91
- uint16_t sensor_measuring_mode = get_sensor_value(this->data_buffer_, this->measuring_value_index_);
85
+ const uint16_t pm1 = get_sensor_value(this->data_buffer_, this->pm_1_0_value_index_);
86
+ const uint16_t pm25 = get_sensor_value(this->data_buffer_, this->pm_2_5_value_index_);
87
+ const uint16_t pm10 = get_sensor_value(this->data_buffer_, this->pm_10_0_value_index_);
88
+ const uint16_t sensor_measuring_mode = get_sensor_value(this->data_buffer_, this->measuring_value_index_);
92
89
  ESP_LOGD(TAG, "PM1.0: %d, PM2.5: %d, PM10: %d, Measuring mode: %s.", pm1, pm25, pm10,
93
90
  LOG_STR_ARG(pm2005_get_measuring_mode_string(sensor_measuring_mode)));
94
91
 
@@ -106,12 +103,14 @@ void PM2005Component::update() {
106
103
  }
107
104
 
108
105
  void PM2005Component::dump_config() {
109
- ESP_LOGCONFIG(TAG, "PM2005:");
110
- ESP_LOGCONFIG(TAG, " Type: PM2%u05", this->sensor_type_ == PM2105);
106
+ ESP_LOGCONFIG(TAG,
107
+ "PM2005:\n"
108
+ " Type: PM2%u05",
109
+ this->sensor_type_ == PM2105);
111
110
 
112
111
  LOG_I2C_DEVICE(this);
113
112
  if (this->is_failed()) {
114
- ESP_LOGE(TAG, "Communication with PM2%u05 failed!", this->sensor_type_ == PM2105);
113
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
115
114
  }
116
115
 
117
116
  LOG_SENSOR(" ", "PM1.0", this->pm_1_0_sensor_);
@@ -1,8 +1,8 @@
1
1
  """PM2005/2105 Sensor component for ESPHome."""
2
2
 
3
3
  import esphome.codegen as cg
4
- import esphome.config_validation as cv
5
4
  from esphome.components import i2c, sensor
5
+ import esphome.config_validation as cv
6
6
  from esphome.const import (
7
7
  CONF_ID,
8
8
  CONF_PM_1_0,
@@ -1,6 +1,6 @@
1
1
  #include "pmsa003i.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
  #include <cstring>
5
5
 
6
6
  namespace esphome {
@@ -19,7 +19,7 @@ static const uint8_t START_CHARACTER_2 = 0x4D;
19
19
  static const uint8_t READ_DATA_RETRY_COUNT = 3;
20
20
 
21
21
  void PMSA003IComponent::setup() {
22
- ESP_LOGCONFIG(TAG, "Setting up pmsa003i...");
22
+ ESP_LOGCONFIG(TAG, "Running setup");
23
23
 
24
24
  PM25AQIData data;
25
25
  bool successful_read = this->read_data_(&data);
@@ -314,9 +314,5 @@ void PMSX003Component::parse_data_() {
314
314
  this->status_clear_warning();
315
315
  }
316
316
 
317
- uint16_t PMSX003Component::get_16_bit_uint_(uint8_t start_index) {
318
- return (uint16_t(this->data_[start_index]) << 8) | uint16_t(this->data_[start_index + 1]);
319
- }
320
-
321
317
  } // namespace pmsx003
322
318
  } // namespace esphome
@@ -1,8 +1,9 @@
1
1
  #pragma once
2
2
 
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/core/helpers.h"
3
5
  #include "esphome/components/sensor/sensor.h"
4
6
  #include "esphome/components/uart/uart.h"
5
- #include "esphome/core/component.h"
6
7
 
7
8
  namespace esphome {
8
9
  namespace pmsx003 {
@@ -77,7 +78,9 @@ class PMSX003Component : public uart::UARTDevice, public Component {
77
78
  void parse_data_();
78
79
  bool check_payload_length_(uint16_t payload_length);
79
80
  void send_command_(PMSX0003Command cmd, uint16_t data);
80
- uint16_t get_16_bit_uint_(uint8_t start_index);
81
+ uint16_t get_16_bit_uint_(uint8_t start_index) const {
82
+ return encode_uint16(this->data_[start_index], this->data_[start_index + 1]);
83
+ }
81
84
 
82
85
  uint8_t data_[64];
83
86
  uint8_t data_index_{0};
@@ -26,33 +26,31 @@ static const char *const TAG = "pmwcs3";
26
26
  void PMWCS3Component::new_i2c_address(uint8_t address) {
27
27
  if (!this->write_byte(PMWCS3_SET_I2C_ADDRESS, address)) {
28
28
  this->status_set_warning();
29
- ESP_LOGW(TAG, "couldn't write the new I2C address %d", address);
29
+ ESP_LOGW(TAG, "Setting I2C address failed (%d)", address);
30
30
  return;
31
31
  }
32
32
  this->set_i2c_address(address); // Allows device to continue working until new firmware is written with new address.
33
- ESP_LOGVV(TAG, "changed I2C address to %d", address);
33
+ ESP_LOGVV(TAG, "Set I2C address to %d", address);
34
34
  this->status_clear_warning();
35
35
  }
36
36
 
37
37
  void PMWCS3Component::air_calibration() {
38
38
  if (!this->write_bytes(PMWCS3_REG_CALIBRATE_AIR, nullptr, 0)) {
39
39
  this->status_set_warning();
40
- ESP_LOGW(TAG, "couldn't start air calibration");
40
+ ESP_LOGW(TAG, "Starting air calibration failed");
41
41
  return;
42
42
  }
43
- ESP_LOGW(TAG, "Start air calibration during the next 300s");
43
+ ESP_LOGW(TAG, "Running air calibration for 300s");
44
44
  }
45
45
  void PMWCS3Component::water_calibration() {
46
46
  if (!this->write_bytes(PMWCS3_REG_CALIBRATE_WATER, nullptr, 0)) {
47
47
  this->status_set_warning();
48
- ESP_LOGW(TAG, "couldn't start water calibration");
48
+ ESP_LOGW(TAG, "Starting water calibration failed");
49
49
  return;
50
50
  }
51
- ESP_LOGW(TAG, "Start water calibration during the next 300s");
51
+ ESP_LOGW(TAG, "Running water calibration for 300s");
52
52
  }
53
53
 
54
- void PMWCS3Component::setup() { ESP_LOGCONFIG(TAG, "Setting up PMWCS3..."); }
55
-
56
54
  void PMWCS3Component::update() { this->read_data_(); }
57
55
 
58
56
  float PMWCS3Component::get_setup_priority() const { return setup_priority::DATA; }
@@ -61,10 +59,8 @@ void PMWCS3Component::dump_config() {
61
59
  ESP_LOGCONFIG(TAG, "PMWCS3");
62
60
  LOG_I2C_DEVICE(this);
63
61
  if (this->is_failed()) {
64
- ESP_LOGE(TAG, "Communication with PMWCS3 failed!");
62
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
65
63
  }
66
- ESP_LOGI(TAG, "%s", this->is_failed() ? "FAILED" : "OK");
67
-
68
64
  LOG_UPDATE_INTERVAL(this);
69
65
  LOG_SENSOR(" ", "e25", this->e25_sensor_);
70
66
  LOG_SENSOR(" ", "ec", this->ec_sensor_);
@@ -75,7 +71,7 @@ void PMWCS3Component::read_data_() {
75
71
  /////// Super important !!!! first activate reading PMWCS3_REG_READ_START (if not, return always the same values) ////
76
72
  if (!this->write_bytes(PMWCS3_REG_READ_START, nullptr, 0)) {
77
73
  this->status_set_warning();
78
- ESP_LOGVV(TAG, "Failed to write into REG_READ_START register !!!");
74
+ ESP_LOGVV(TAG, "Writing REG_READ_START failed");
79
75
  return;
80
76
  }
81
77
 
@@ -85,7 +81,7 @@ void PMWCS3Component::read_data_() {
85
81
  uint8_t data[8];
86
82
  float e25, ec, temperature, vwc;
87
83
  if (!this->read_bytes(PMWCS3_REG_GET_DATA, (uint8_t *) &data, 8)) {
88
- ESP_LOGVV(TAG, "Error reading PMWCS3_REG_GET_DATA registers");
84
+ ESP_LOGVV(TAG, "Reading PMWCS3_REG_GET_DATA failed");
89
85
  this->mark_failed();
90
86
  return;
91
87
  }
@@ -12,7 +12,6 @@ namespace pmwcs3 {
12
12
 
13
13
  class PMWCS3Component : public PollingComponent, public i2c::I2CDevice {
14
14
  public:
15
- void setup() override;
16
15
  void update() override;
17
16
  void dump_config() override;
18
17
  float get_setup_priority() const override;
@@ -15,11 +15,11 @@ namespace pn532 {
15
15
  static const char *const TAG = "pn532";
16
16
 
17
17
  void PN532::setup() {
18
- ESP_LOGCONFIG(TAG, "Setting up PN532...");
18
+ ESP_LOGCONFIG(TAG, "Running setup");
19
19
 
20
20
  // Get version data
21
21
  if (!this->write_command_({PN532_COMMAND_VERSION_DATA})) {
22
- ESP_LOGW(TAG, "Error sending version command, trying again...");
22
+ ESP_LOGW(TAG, "Error sending version command, trying again");
23
23
  if (!this->write_command_({PN532_COMMAND_VERSION_DATA})) {
24
24
  ESP_LOGE(TAG, "Error sending version command");
25
25
  this->mark_failed();
@@ -208,21 +208,21 @@ void PN532::loop() {
208
208
  }
209
209
  }
210
210
  } else if (next_task_ == CLEAN) {
211
- ESP_LOGD(TAG, " Tag cleaning...");
211
+ ESP_LOGD(TAG, " Tag cleaning");
212
212
  if (!this->clean_tag_(nfcid)) {
213
213
  ESP_LOGE(TAG, " Tag was not fully cleaned successfully");
214
214
  }
215
215
  ESP_LOGD(TAG, " Tag cleaned!");
216
216
  } else if (next_task_ == FORMAT) {
217
- ESP_LOGD(TAG, " Tag formatting...");
217
+ ESP_LOGD(TAG, " Tag formatting");
218
218
  if (!this->format_tag_(nfcid)) {
219
219
  ESP_LOGE(TAG, "Error formatting tag as NDEF");
220
220
  }
221
221
  ESP_LOGD(TAG, " Tag formatted!");
222
222
  } else if (next_task_ == WRITE) {
223
223
  if (this->next_task_message_to_write_ != nullptr) {
224
- ESP_LOGD(TAG, " Tag writing...");
225
- ESP_LOGD(TAG, " Tag formatting...");
224
+ ESP_LOGD(TAG, " Tag writing");
225
+ ESP_LOGD(TAG, " Tag formatting");
226
226
  if (!this->format_tag_(nfcid)) {
227
227
  ESP_LOGE(TAG, " Tag could not be formatted for writing");
228
228
  } else {
@@ -281,7 +281,7 @@ bool PN532::write_command_(const std::vector<uint8_t> &data) {
281
281
  }
282
282
 
283
283
  bool PN532::read_ack_() {
284
- ESP_LOGV(TAG, "Reading ACK...");
284
+ ESP_LOGV(TAG, "Reading ACK");
285
285
 
286
286
  std::vector<uint8_t> data;
287
287
  if (!this->read_data(data, 6)) {
@@ -38,7 +38,7 @@ class PN532 : public PollingComponent {
38
38
  float get_setup_priority() const override;
39
39
 
40
40
  void loop() override;
41
- void on_shutdown() override { powerdown(); }
41
+ void on_powerdown() override { powerdown(); }
42
42
 
43
43
  void register_tag(PN532BinarySensor *tag) { this->binary_sensors_.push_back(tag); }
44
44
  void register_ontag_trigger(nfc::NfcOnTagTrigger *trig) { this->triggers_ontag_.push_back(trig); }
@@ -51,7 +51,7 @@ bool PN532Spi::read_data(std::vector<uint8_t> &data, uint8_t len) {
51
51
  delay(2);
52
52
  this->write_byte(0x03);
53
53
 
54
- ESP_LOGV(TAG, "Reading data...");
54
+ ESP_LOGV(TAG, "Reading data");
55
55
 
56
56
  data.resize(len);
57
57
  this->read_array(data.data(), len);
@@ -830,7 +830,7 @@ void PN7150::process_rf_intf_activated_oid_(nfc::NciMessage &rx) { // an endpoi
830
830
 
831
831
  switch (this->next_task_) {
832
832
  case EP_CLEAN:
833
- ESP_LOGD(TAG, " Tag cleaning...");
833
+ ESP_LOGD(TAG, " Tag cleaning");
834
834
  if (this->clean_endpoint_(working_endpoint.tag->get_uid()) != nfc::STATUS_OK) {
835
835
  ESP_LOGE(TAG, " Tag cleaning incomplete");
836
836
  }
@@ -838,7 +838,7 @@ void PN7150::process_rf_intf_activated_oid_(nfc::NciMessage &rx) { // an endpoi
838
838
  break;
839
839
 
840
840
  case EP_FORMAT:
841
- ESP_LOGD(TAG, " Tag formatting...");
841
+ ESP_LOGD(TAG, " Tag formatting");
842
842
  if (this->format_endpoint_(working_endpoint.tag->get_uid()) != nfc::STATUS_OK) {
843
843
  ESP_LOGE(TAG, "Error formatting tag as NDEF");
844
844
  }
@@ -847,8 +847,8 @@ void PN7150::process_rf_intf_activated_oid_(nfc::NciMessage &rx) { // an endpoi
847
847
 
848
848
  case EP_WRITE:
849
849
  if (this->next_task_message_to_write_ != nullptr) {
850
- ESP_LOGD(TAG, " Tag writing...");
851
- ESP_LOGD(TAG, " Tag formatting...");
850
+ ESP_LOGD(TAG, " Tag writing");
851
+ ESP_LOGD(TAG, " Tag formatting");
852
852
  if (this->format_endpoint_(working_endpoint.tag->get_uid()) != nfc::STATUS_OK) {
853
853
  ESP_LOGE(TAG, " Tag could not be formatted for writing");
854
854
  } else {
@@ -854,7 +854,7 @@ void PN7160::process_rf_intf_activated_oid_(nfc::NciMessage &rx) { // an endpoi
854
854
 
855
855
  switch (this->next_task_) {
856
856
  case EP_CLEAN:
857
- ESP_LOGD(TAG, " Tag cleaning...");
857
+ ESP_LOGD(TAG, " Tag cleaning");
858
858
  if (this->clean_endpoint_(working_endpoint.tag->get_uid()) != nfc::STATUS_OK) {
859
859
  ESP_LOGE(TAG, " Tag cleaning incomplete");
860
860
  }
@@ -862,7 +862,7 @@ void PN7160::process_rf_intf_activated_oid_(nfc::NciMessage &rx) { // an endpoi
862
862
  break;
863
863
 
864
864
  case EP_FORMAT:
865
- ESP_LOGD(TAG, " Tag formatting...");
865
+ ESP_LOGD(TAG, " Tag formatting");
866
866
  if (this->format_endpoint_(working_endpoint.tag->get_uid()) != nfc::STATUS_OK) {
867
867
  ESP_LOGE(TAG, "Error formatting tag as NDEF");
868
868
  }
@@ -871,8 +871,8 @@ void PN7160::process_rf_intf_activated_oid_(nfc::NciMessage &rx) { // an endpoi
871
871
 
872
872
  case EP_WRITE:
873
873
  if (this->next_task_message_to_write_ != nullptr) {
874
- ESP_LOGD(TAG, " Tag writing...");
875
- ESP_LOGD(TAG, " Tag formatting...");
874
+ ESP_LOGD(TAG, " Tag writing");
875
+ ESP_LOGD(TAG, " Tag formatting");
876
876
  if (this->format_endpoint_(working_endpoint.tag->get_uid()) != nfc::STATUS_OK) {
877
877
  ESP_LOGE(TAG, " Tag could not be formatted for writing");
878
878
  } else {
@@ -7,7 +7,7 @@ namespace power_supply {
7
7
  static const char *const TAG = "power_supply";
8
8
 
9
9
  void PowerSupply::setup() {
10
- ESP_LOGCONFIG(TAG, "Setting up Power Supply...");
10
+ ESP_LOGCONFIG(TAG, "Running setup");
11
11
 
12
12
  this->pin_->setup();
13
13
  this->pin_->digital_write(false);
@@ -17,8 +17,10 @@ void PowerSupply::setup() {
17
17
  void PowerSupply::dump_config() {
18
18
  ESP_LOGCONFIG(TAG, "Power Supply:");
19
19
  LOG_PIN(" Pin: ", this->pin_);
20
- ESP_LOGCONFIG(TAG, " Time to enable: %" PRIu32 " ms", this->enable_time_);
21
- ESP_LOGCONFIG(TAG, " Keep on time: %.1f s", this->keep_on_time_ / 1000.0f);
20
+ ESP_LOGCONFIG(TAG,
21
+ " Time to enable: %" PRIu32 " ms\n"
22
+ " Keep on time: %.1f s",
23
+ this->enable_time_, this->keep_on_time_ / 1000.0f);
22
24
  if (this->enable_on_boot_)
23
25
  ESP_LOGCONFIG(TAG, " Enabled at startup: True");
24
26
  }
@@ -50,7 +52,7 @@ void PowerSupply::unrequest_high_power() {
50
52
  });
51
53
  }
52
54
  }
53
- void PowerSupply::on_shutdown() {
55
+ void PowerSupply::on_powerdown() {
54
56
  this->active_requests_ = 0;
55
57
  this->pin_->digital_write(false);
56
58
  }
@@ -32,7 +32,7 @@ class PowerSupply : public Component {
32
32
  /// Hardware setup priority (+1).
33
33
  float get_setup_priority() const override;
34
34
 
35
- void on_shutdown() override;
35
+ void on_powerdown() override;
36
36
 
37
37
  protected:
38
38
  GPIOPin *pin_;
@@ -2,13 +2,17 @@ import logging
2
2
 
3
3
  import esphome.codegen as cg
4
4
  from esphome.components.esp32 import (
5
+ CONF_CPU_FREQUENCY,
5
6
  CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES,
6
7
  VARIANT_ESP32,
7
8
  add_idf_sdkconfig_option,
8
9
  get_esp32_variant,
9
- only_on_variant,
10
10
  )
11
- from esphome.components.esp32.const import VARIANT_ESP32S2, VARIANT_ESP32S3
11
+ from esphome.components.esp32.const import (
12
+ VARIANT_ESP32P4,
13
+ VARIANT_ESP32S2,
14
+ VARIANT_ESP32S3,
15
+ )
12
16
  import esphome.config_validation as cv
13
17
  from esphome.const import (
14
18
  CONF_ADVANCED,
@@ -34,34 +38,46 @@ PsramComponent = psram_ns.class_("PsramComponent", cg.Component)
34
38
 
35
39
  TYPE_QUAD = "quad"
36
40
  TYPE_OCTAL = "octal"
41
+ TYPE_HEX = "hex"
42
+
43
+ SDK_MODES = {TYPE_QUAD: "QUAD", TYPE_OCTAL: "OCT", TYPE_HEX: "HEX"}
37
44
 
38
45
  CONF_ENABLE_ECC = "enable_ecc"
39
46
 
40
47
  SPIRAM_MODES = {
41
- TYPE_QUAD: "CONFIG_SPIRAM_MODE_QUAD",
42
- TYPE_OCTAL: "CONFIG_SPIRAM_MODE_OCT",
48
+ VARIANT_ESP32: (TYPE_QUAD,),
49
+ VARIANT_ESP32S2: (TYPE_QUAD,),
50
+ VARIANT_ESP32S3: (TYPE_QUAD, TYPE_OCTAL),
51
+ VARIANT_ESP32P4: (TYPE_HEX,),
43
52
  }
44
53
 
54
+
45
55
  SPIRAM_SPEEDS = {
46
- 40e6: "CONFIG_SPIRAM_SPEED_40M",
47
- 80e6: "CONFIG_SPIRAM_SPEED_80M",
48
- 120e6: "CONFIG_SPIRAM_SPEED_120M",
56
+ VARIANT_ESP32: (40, 80, 120),
57
+ VARIANT_ESP32S2: (40, 80, 120),
58
+ VARIANT_ESP32S3: (40, 80, 120),
59
+ VARIANT_ESP32P4: (20, 100, 200),
49
60
  }
50
61
 
51
62
 
52
63
  def validate_psram_mode(config):
53
- if config[CONF_MODE] == TYPE_OCTAL and config[CONF_SPEED] == 120e6:
54
- esp32_config = fv.full_config.get()[PLATFORM_ESP32]
55
- if (
56
- esp32_config[CONF_FRAMEWORK]
57
- .get(CONF_ADVANCED, {})
58
- .get(CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES)
59
- ):
60
- _LOGGER.warning(
61
- "120MHz PSRAM in octal mode is an experimental feature - use at your own risk"
64
+ esp32_config = fv.full_config.get()[PLATFORM_ESP32]
65
+ if config[CONF_SPEED] == "120MHZ":
66
+ if esp32_config[CONF_CPU_FREQUENCY] != "240MHZ":
67
+ raise cv.Invalid(
68
+ "PSRAM 120MHz requires 240MHz CPU frequency (set in esp32 component)"
62
69
  )
63
- else:
64
- raise cv.Invalid("PSRAM 120MHz is not supported in octal mode")
70
+ if config[CONF_MODE] == TYPE_OCTAL:
71
+ if (
72
+ esp32_config[CONF_FRAMEWORK]
73
+ .get(CONF_ADVANCED, {})
74
+ .get(CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES)
75
+ ):
76
+ _LOGGER.warning(
77
+ "120MHz PSRAM in octal mode is an experimental feature - use at your own risk"
78
+ )
79
+ else:
80
+ raise cv.Invalid("PSRAM 120MHz is not supported in octal mode")
65
81
  if config[CONF_MODE] != TYPE_OCTAL and config[CONF_ENABLE_ECC]:
66
82
  raise cv.Invalid("ECC is only available in octal mode.")
67
83
  if config[CONF_MODE] == TYPE_OCTAL:
@@ -73,23 +89,23 @@ def validate_psram_mode(config):
73
89
  return config
74
90
 
75
91
 
76
- CONFIG_SCHEMA = cv.All(
77
- cv.Schema(
92
+ def get_config_schema(config):
93
+ variant = get_esp32_variant()
94
+ speeds = [f"{s}MHZ" for s in SPIRAM_SPEEDS.get(variant, [])]
95
+ if not speeds:
96
+ return cv.Invalid("PSRAM is not supported on this chip")
97
+ modes = SPIRAM_MODES[variant]
98
+ return cv.Schema(
78
99
  {
79
100
  cv.GenerateID(): cv.declare_id(PsramComponent),
80
- cv.Optional(CONF_MODE, default=TYPE_QUAD): cv.enum(
81
- SPIRAM_MODES, lower=True
82
- ),
101
+ cv.Optional(CONF_MODE, default=modes[0]): cv.one_of(*modes, lower=True),
83
102
  cv.Optional(CONF_ENABLE_ECC, default=False): cv.boolean,
84
- cv.Optional(CONF_SPEED, default=40e6): cv.All(
85
- cv.frequency, cv.one_of(*SPIRAM_SPEEDS)
86
- ),
103
+ cv.Optional(CONF_SPEED, default=speeds[0]): cv.one_of(*speeds, upper=True),
87
104
  }
88
- ),
89
- only_on_variant(
90
- supported=[VARIANT_ESP32, VARIANT_ESP32S3, VARIANT_ESP32S2],
91
- ),
92
- )
105
+ )(config)
106
+
107
+
108
+ CONFIG_SCHEMA = get_config_schema
93
109
 
94
110
  FINAL_VALIDATE_SCHEMA = validate_psram_mode
95
111
 
@@ -104,15 +120,23 @@ async def to_code(config):
104
120
  add_idf_sdkconfig_option(
105
121
  f"CONFIG_{get_esp32_variant().upper()}_SPIRAM_SUPPORT", True
106
122
  )
123
+ add_idf_sdkconfig_option("CONFIG_SOC_SPIRAM_SUPPORTED", True)
107
124
  add_idf_sdkconfig_option("CONFIG_SPIRAM", True)
108
125
  add_idf_sdkconfig_option("CONFIG_SPIRAM_USE", True)
109
126
  add_idf_sdkconfig_option("CONFIG_SPIRAM_USE_CAPS_ALLOC", True)
110
127
  add_idf_sdkconfig_option("CONFIG_SPIRAM_IGNORE_NOTFOUND", True)
111
128
 
112
- add_idf_sdkconfig_option(f"{SPIRAM_MODES[config[CONF_MODE]]}", True)
113
- add_idf_sdkconfig_option(f"{SPIRAM_SPEEDS[config[CONF_SPEED]]}", True)
114
- if config[CONF_MODE] == TYPE_OCTAL and config[CONF_SPEED] == 120e6:
115
- add_idf_sdkconfig_option("CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240", True)
129
+ add_idf_sdkconfig_option(
130
+ f"CONFIG_SPIRAM_MODE_{SDK_MODES[config[CONF_MODE]]}", True
131
+ )
132
+
133
+ # Remove MHz suffix, convert to int
134
+ speed = int(config[CONF_SPEED][:-3])
135
+ add_idf_sdkconfig_option(f"CONFIG_SPIRAM_SPEED_{speed}M", True)
136
+ add_idf_sdkconfig_option("CONFIG_SPIRAM_SPEED", speed)
137
+ if config[CONF_MODE] == TYPE_OCTAL and speed == 120:
138
+ add_idf_sdkconfig_option("CONFIG_ESPTOOLPY_FLASHFREQ_120M", True)
139
+ add_idf_sdkconfig_option("CONFIG_BOOTLOADER_FLASH_DC_AWARE", True)
116
140
  if CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION] >= cv.Version(5, 4, 0):
117
141
  add_idf_sdkconfig_option(
118
142
  "CONFIG_SPIRAM_TIMING_TUNING_POINT_VIA_TEMPERATURE_SENSOR", True
@@ -156,7 +156,7 @@ pulse_counter_t HwPulseCounterStorage::read_raw_value() {
156
156
  #endif // HAS_PCNT
157
157
 
158
158
  void PulseCounterSensor::setup() {
159
- ESP_LOGCONFIG(TAG, "Setting up pulse counter '%s'...", this->name_.c_str());
159
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
160
160
  if (!this->storage_.pulse_counter_setup(this->pin_)) {
161
161
  this->mark_failed();
162
162
  return;
@@ -171,9 +171,12 @@ void PulseCounterSensor::set_total_pulses(uint32_t pulses) {
171
171
  void PulseCounterSensor::dump_config() {
172
172
  LOG_SENSOR("", "Pulse Counter", this);
173
173
  LOG_PIN(" Pin: ", this->pin_);
174
- ESP_LOGCONFIG(TAG, " Rising Edge: %s", EDGE_MODE_TO_STRING[this->storage_.rising_edge_mode]);
175
- ESP_LOGCONFIG(TAG, " Falling Edge: %s", EDGE_MODE_TO_STRING[this->storage_.falling_edge_mode]);
176
- ESP_LOGCONFIG(TAG, " Filtering pulses shorter than %" PRIu32 " µs", this->storage_.filter_us);
174
+ ESP_LOGCONFIG(TAG,
175
+ " Rising Edge: %s\n"
176
+ " Falling Edge: %s\n"
177
+ " Filtering pulses shorter than %" PRIu32 " µs",
178
+ EDGE_MODE_TO_STRING[this->storage_.rising_edge_mode],
179
+ EDGE_MODE_TO_STRING[this->storage_.falling_edge_mode], this->storage_.filter_us);
177
180
  LOG_UPDATE_INTERVAL(this);
178
181
  }
179
182
 
@@ -8,11 +8,14 @@ namespace pvvx_mithermometer {
8
8
  static const char *const TAG = "display.pvvx_mithermometer";
9
9
 
10
10
  void PVVXDisplay::dump_config() {
11
- ESP_LOGCONFIG(TAG, "PVVX MiThermometer display:");
12
- ESP_LOGCONFIG(TAG, " MAC address : %s", this->parent_->address_str().c_str());
13
- ESP_LOGCONFIG(TAG, " Service UUID : %s", this->service_uuid_.to_string().c_str());
14
- ESP_LOGCONFIG(TAG, " Characteristic UUID : %s", this->char_uuid_.to_string().c_str());
15
- ESP_LOGCONFIG(TAG, " Auto clear : %s", YESNO(this->auto_clear_enabled_));
11
+ ESP_LOGCONFIG(TAG,
12
+ "PVVX MiThermometer display:\n"
13
+ " MAC address : %s\n"
14
+ " Service UUID : %s\n"
15
+ " Characteristic UUID : %s\n"
16
+ " Auto clear : %s",
17
+ this->parent_->address_str().c_str(), this->service_uuid_.to_string().c_str(),
18
+ this->char_uuid_.to_string().c_str(), YESNO(this->auto_clear_enabled_));
16
19
  #ifdef USE_TIME
17
20
  ESP_LOGCONFIG(TAG, " Set time on connection: %s", YESNO(this->time_ != nullptr));
18
21
  #endif
@@ -1,6 +1,6 @@
1
1
  #include "pylontech.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  namespace esphome {
6
6
  namespace pylontech {
@@ -26,7 +26,7 @@ void PylontechComponent::dump_config() {
26
26
  }
27
27
 
28
28
  void PylontechComponent::setup() {
29
- ESP_LOGCONFIG(TAG, "Setting up pylontech...");
29
+ ESP_LOGCONFIG(TAG, "Running setup");
30
30
  while (this->available() != 0) {
31
31
  this->read();
32
32
  }
@@ -10,8 +10,10 @@ static const char *const TAG = "pylontech.sensor";
10
10
  PylontechSensor::PylontechSensor(int8_t bat_num) { this->bat_num_ = bat_num; }
11
11
 
12
12
  void PylontechSensor::dump_config() {
13
- ESP_LOGCONFIG(TAG, "Pylontech Sensor:");
14
- ESP_LOGCONFIG(TAG, " Battery %d", this->bat_num_);
13
+ ESP_LOGCONFIG(TAG,
14
+ "Pylontech Sensor:\n"
15
+ " Battery %d",
16
+ this->bat_num_);
15
17
  LOG_SENSOR(" ", "Voltage", this->voltage_sensor_);
16
18
  LOG_SENSOR(" ", "Current", this->current_sensor_);
17
19
  LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
@@ -10,8 +10,10 @@ static const char *const TAG = "pylontech.textsensor";
10
10
  PylontechTextSensor::PylontechTextSensor(int8_t bat_num) { this->bat_num_ = bat_num; }
11
11
 
12
12
  void PylontechTextSensor::dump_config() {
13
- ESP_LOGCONFIG(TAG, "Pylontech Text Sensor:");
14
- ESP_LOGCONFIG(TAG, " Battery %d", this->bat_num_);
13
+ ESP_LOGCONFIG(TAG,
14
+ "Pylontech Text Sensor:\n"
15
+ " Battery %d",
16
+ this->bat_num_);
15
17
  LOG_TEXT_SENSOR(" ", "Base state", this->base_state_text_sensor_);
16
18
  LOG_TEXT_SENSOR(" ", "Voltage state", this->voltage_state_text_sensor_);
17
19
  LOG_TEXT_SENSOR(" ", "Current state", this->current_state_text_sensor_);
@@ -64,8 +64,10 @@ void PZEMAC::on_modbus_data(const std::vector<uint8_t> &data) {
64
64
 
65
65
  void PZEMAC::update() { this->send(PZEM_CMD_READ_IN_REGISTERS, 0, PZEM_REGISTER_COUNT); }
66
66
  void PZEMAC::dump_config() {
67
- ESP_LOGCONFIG(TAG, "PZEMAC:");
68
- ESP_LOGCONFIG(TAG, " Address: 0x%02X", this->address_);
67
+ ESP_LOGCONFIG(TAG,
68
+ "PZEMAC:\n"
69
+ " Address: 0x%02X",
70
+ this->address_);
69
71
  LOG_SENSOR("", "Voltage", this->voltage_sensor_);
70
72
  LOG_SENSOR("", "Current", this->current_sensor_);
71
73
  LOG_SENSOR("", "Power", this->power_sensor_);
@@ -54,8 +54,10 @@ void PZEMDC::on_modbus_data(const std::vector<uint8_t> &data) {
54
54
 
55
55
  void PZEMDC::update() { this->send(PZEM_CMD_READ_IN_REGISTERS, 0, 8); }
56
56
  void PZEMDC::dump_config() {
57
- ESP_LOGCONFIG(TAG, "PZEMDC:");
58
- ESP_LOGCONFIG(TAG, " Address: 0x%02X", this->address_);
57
+ ESP_LOGCONFIG(TAG,
58
+ "PZEMDC:\n"
59
+ " Address: 0x%02X",
60
+ this->address_);
59
61
  LOG_SENSOR("", "Voltage", this->voltage_sensor_);
60
62
  LOG_SENSOR("", "Current", this->current_sensor_);
61
63
  LOG_SENSOR("", "Power", this->power_sensor_);